UNPKG

ngx-agora

Version:

Angular wrapper for Agora RTC client (https://www.agora.io/en/)

204 lines 18.2 kB
/** * @fileoverview added by tsickle * Generated from: lib/ngx-agora.service.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Inject, Injectable } from '@angular/core'; import * as agoraSDK from 'agora-rtc-sdk'; import * as i0 from "@angular/core"; /** * Provides access to the Agora web API, including the AgoraRTC and Client objects. */ export class NgxAgoraService { /** * @param {?} config */ constructor(config) { this.config = config; /** * All audio devices collected from the AgoraRTC `getDevices()` method. * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices) * */ this.audioDevices = []; /** * All video devices collected from the AgoraRTC `getDevices()` method. * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices) */ this.videoDevices = []; /** * Instance reference to the `static` AgoraRTC library object. */ this.AgoraRTC = NgxAgoraService.AgoraRTC; if (!this.checkSystemRequirements()) { this.AgoraRTC.Logger.error('Web RTC is not supported in this browser'); } else { this.collectDevices(); } } /** * Checks the Web Browser Compatibility * * This method checks the compatibility between the Web SDK and the current web browser. * Use this method before calling createClient to check the compatibility between the system and the web browser. * * - true: The Web SDK is compatible with the current web browser. * - false: The Web SDK is not compatible with the current web browser. * * \@remark * Agora has yet to conduct comprehensive tests on Chromium kernel browsers, such as QQ and 360. * Agora will gradually achieve compatibility on most mainstream browsers in subsequent versions of the Web SDK. * @return {?} */ checkSystemRequirements() { return this.AgoraRTC.checkSystemRequirements(); } /** * Creates a Client object. * * This method creates and returns a client object. You can only call this method once each call session. * * \@example * AgoraRTC.createClient(config); * @param {?} config * Defines the property of the client, see * [ClientConfig](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.clientconfig.html) for details. * @param {?=} autoInitializing * @param {?=} onSuccess * @param {?=} onFailure * @return {?} */ createClient(config, autoInitializing = true, onSuccess, onFailure) { this.client = this.AgoraRTC.createClient(config); if (autoInitializing) { this.init(this.config.AppID, onSuccess, onFailure); } return this.client; } /** * This method creates and returns a stream object. * * \@example * AgoraRTC.createStream(spec) * * @see [StreamSpec](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.streamspec.html) for details. * @param {?} spec Defines the properties of the stream * @return {?} */ createStream(spec) { if (!spec.microphoneId && this.audioDevices && this.audioDevices.length) { /** @type {?} */ const defaultMic = this.audioDevices[0].deviceId; spec.microphoneId = defaultMic; } if (!spec.cameraId && this.videoDevices && this.videoDevices.length) { /** @type {?} */ const defaultCamera = this.videoDevices[0].deviceId; spec.cameraId = spec.cameraId || defaultCamera; } return this.AgoraRTC.createStream(spec); } /** * Initializes the Client object. * * @see [Get an App ID](https://docs.agora.io/en/Video/web_prepare?platform=Web#create-an-agora-account-and-get-an-app-id). * \@example * this.ngxAgoraService.client.init(appId, () => { * console.log("client initialized"); * // Join a channel * //…… * }, error => { * console.log("client init failed ", err); * // Error handling * }); * @param {?} appId Pass in the App ID for your project. * ASCII characters only, and the string length must be greater than 0 and less than 256 bytes. * To get your App ID, * @param {?=} onSuccess * @param {?=} onFailure * @return {?} */ init(appId, onSuccess, onFailure) { this.client.init(appId, onSuccess, onFailure); } /** * Attempts to automatically collect audio and video devices from the AgoraRTC `getDevices()` method. * @private * @return {?} */ collectDevices() { this.AgoraRTC.getDevices((/** * @param {?} devices * @return {?} */ (devices) => { /** @type {?} */ const audioDevices = devices.filter((/** * @param {?} device * @return {?} */ device => { return device.kind === 'audioinput' && device.deviceId !== 'default'; })); /** @type {?} */ const videoDevices = devices.filter((/** * @param {?} device * @return {?} */ device => { return device.kind === 'videoinput' && device.deviceId !== 'default'; })); this.audioDevices = audioDevices; this.videoDevices = videoDevices; })); } } NgxAgoraService.AgoraRTC = agoraSDK; NgxAgoraService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; /** @nocollapse */ NgxAgoraService.ctorParameters = () => [ { type: undefined, decorators: [{ type: Inject, args: ['config',] }] } ]; /** @nocollapse */ NgxAgoraService.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function NgxAgoraService_Factory() { return new NgxAgoraService(i0.ɵɵinject("config")); }, token: NgxAgoraService, providedIn: "root" }); if (false) { /** * @type {?} * @private */ NgxAgoraService.AgoraRTC; /** * The local Agora.io Client object. * @see [Web Client](https://docs.agora.io/en/Video/API%20Reference/web/interfaces/agorartc.client.html) * @type {?} */ NgxAgoraService.prototype.client; /** * All audio devices collected from the AgoraRTC `getDevices()` method. * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices) * * @type {?} */ NgxAgoraService.prototype.audioDevices; /** * All video devices collected from the AgoraRTC `getDevices()` method. * @see [getDevices()](https://docs.agora.io/en/Video/API%20Reference/web/globals.html#getdevices) * @type {?} */ NgxAgoraService.prototype.videoDevices; /** * Instance reference to the `static` AgoraRTC library object. * @type {?} */ NgxAgoraService.prototype.AgoraRTC; /** * @type {?} * @private */ NgxAgoraService.prototype.config; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWFnb3JhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9uZ3gtYWdvcmEvIiwic291cmNlcyI6WyJsaWIvbmd4LWFnb3JhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQzs7Ozs7QUFZMUMsTUFBTSxPQUFPLGVBQWU7Ozs7SUF3QjFCLFlBQXNDLE1BQW1CO1FBQW5CLFdBQU0sR0FBTixNQUFNLENBQWE7Ozs7OztRQVh6RCxpQkFBWSxHQUFzQixFQUFFLENBQUM7Ozs7O1FBS3JDLGlCQUFZLEdBQXNCLEVBQUUsQ0FBQzs7OztRQUlyQyxhQUFRLEdBQWEsZUFBZSxDQUFDLFFBQVEsQ0FBQztRQUc1QyxJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7U0FDeEU7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN2QjtJQUNILENBQUM7Ozs7Ozs7Ozs7Ozs7OztJQWVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztJQUNqRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0lBbUJELFlBQVksQ0FDVixNQUFvQixFQUNwQixtQkFBNEIsSUFBSSxFQUNoQyxTQUFzQixFQUN0QixTQUFrQztRQUVsQyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pELElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7U0FDcEQ7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs7Ozs7Ozs7Ozs7SUFXRCxZQUFZLENBQUMsSUFBZ0I7UUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRTs7a0JBQ2pFLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7WUFDaEQsSUFBSSxDQUFDLFlBQVksR0FBRyxVQUFVLENBQUM7U0FDaEM7UUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFOztrQkFDN0QsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtZQUNuRCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLElBQUksYUFBYSxDQUFDO1NBQ2hEO1FBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFzQkQsSUFBSSxDQUFDLEtBQWEsRUFBRSxTQUFzQixFQUFFLFNBQWtDO1FBQzVFLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7Ozs7O0lBS08sY0FBYztRQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVU7Ozs7UUFBQyxDQUFDLE9BQTBCLEVBQUUsRUFBRTs7a0JBQ2hELFlBQVksR0FBRyxPQUFPLENBQUMsTUFBTTs7OztZQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUMzQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssWUFBWSxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDO1lBQ3ZFLENBQUMsRUFBQzs7a0JBRUksWUFBWSxHQUFHLE9BQU8sQ0FBQyxNQUFNOzs7O1lBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzNDLE9BQU8sTUFBTSxDQUFDLElBQUksS0FBSyxZQUFZLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxTQUFTLENBQUM7WUFDdkUsQ0FBQyxFQUFDO1lBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7WUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDbkMsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOztBQTVJYyx3QkFBUSxHQUFhLFFBQVEsQ0FBQzs7WUFKOUMsVUFBVSxTQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25COzs7OzRDQXlCYyxNQUFNLFNBQUMsUUFBUTs7Ozs7Ozs7SUF2QjVCLHlCQUE2Qzs7Ozs7O0lBTTdDLGlDQUFvQjs7Ozs7OztJQU1wQix1Q0FBcUM7Ozs7OztJQUtyQyx1Q0FBcUM7Ozs7O0lBSXJDLG1DQUE4Qzs7Ozs7SUFFbEMsaUNBQTZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBhZ29yYVNESyBmcm9tICdhZ29yYS1ydGMtc2RrJztcblxuaW1wb3J0IHsgQWdvcmFDbGllbnQgfSBmcm9tICcuL2RhdGEvbW9kZWxzL2Fnb3JhLWNsaWVudC5tb2RlbCc7XG5pbXBvcnQgeyBBZ29yYUNvbmZpZyB9IGZyb20gJy4vZGF0YS9tb2RlbHMvYWdvcmEtY29uZmlnLm1vZGVsJztcbmltcG9ydCB7IEFnb3JhUlRDLCBDbGllbnRDb25maWcsIE1lZGlhRGV2aWNlSW5mbywgU3RyZWFtLCBTdHJlYW1TcGVjIH0gZnJvbSAnLi9kYXRhL21vZGVscyc7XG5cbi8qKlxuICogUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBBZ29yYSB3ZWIgQVBJLCBpbmNsdWRpbmcgdGhlIEFnb3JhUlRDIGFuZCBDbGllbnQgb2JqZWN0cy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTmd4QWdvcmFTZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgQWdvcmFSVEM6IEFnb3JhUlRDID0gYWdvcmFTREs7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbCBBZ29yYS5pbyBDbGllbnQgb2JqZWN0LlxuICAgKiBAc2VlIFtXZWIgQ2xpZW50XShodHRwczovL2RvY3MuYWdvcmEuaW8vZW4vVmlkZW8vQVBJJTIwUmVmZXJlbmNlL3dlYi9pbnRlcmZhY2VzL2Fnb3JhcnRjLmNsaWVudC5odG1sKVxuICAgKi9cbiAgY2xpZW50OiBBZ29yYUNsaWVudDtcbiAgLyoqXG4gICAqIEFsbCBhdWRpbyBkZXZpY2VzIGNvbGxlY3RlZCBmcm9tIHRoZSBBZ29yYVJUQyBgZ2V0RGV2aWNlcygpYCBtZXRob2QuXG4gICAqIEBzZWUgW2dldERldmljZXMoKV0oaHR0cHM6Ly9kb2NzLmFnb3JhLmlvL2VuL1ZpZGVvL0FQSSUyMFJlZmVyZW5jZS93ZWIvZ2xvYmFscy5odG1sI2dldGRldmljZXMpXG4gICAqXG4gICAqL1xuICBhdWRpb0RldmljZXM6IE1lZGlhRGV2aWNlSW5mb1tdID0gW107XG4gIC8qKlxuICAgKiBBbGwgdmlkZW8gZGV2aWNlcyBjb2xsZWN0ZWQgZnJvbSB0aGUgQWdvcmFSVEMgYGdldERldmljZXMoKWAgbWV0aG9kLlxuICAgKiBAc2VlIFtnZXREZXZpY2VzKCldKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9WaWRlby9BUEklMjBSZWZlcmVuY2Uvd2ViL2dsb2JhbHMuaHRtbCNnZXRkZXZpY2VzKVxuICAgKi9cbiAgdmlkZW9EZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSA9IFtdO1xuICAvKipcbiAgICogSW5zdGFuY2UgcmVmZXJlbmNlIHRvIHRoZSBgc3RhdGljYCBBZ29yYVJUQyBsaWJyYXJ5IG9iamVjdC5cbiAgICovXG4gIEFnb3JhUlRDOiBBZ29yYVJUQyA9IE5neEFnb3JhU2VydmljZS5BZ29yYVJUQztcblxuICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjb25maWcnKSBwcml2YXRlIGNvbmZpZzogQWdvcmFDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tTeXN0ZW1SZXF1aXJlbWVudHMoKSkge1xuICAgICAgdGhpcy5BZ29yYVJUQy5Mb2dnZXIuZXJyb3IoJ1dlYiBSVEMgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXInKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb2xsZWN0RGV2aWNlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgdGhlIFdlYiBCcm93c2VyIENvbXBhdGliaWxpdHlcbiAgICpcbiAgICogVGhpcyBtZXRob2QgY2hlY2tzIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIFdlYiBTREsgYW5kIHRoZSBjdXJyZW50IHdlYiBicm93c2VyLlxuICAgKiBVc2UgdGhpcyBtZXRob2QgYmVmb3JlIGNhbGxpbmcgY3JlYXRlQ2xpZW50IHRvIGNoZWNrIHRoZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gdGhlIHN5c3RlbSBhbmQgdGhlIHdlYiBicm93c2VyLlxuICAgKlxuICAgKiAtIHRydWU6IFRoZSBXZWIgU0RLIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCB3ZWIgYnJvd3Nlci5cbiAgICogLSBmYWxzZTogVGhlIFdlYiBTREsgaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGUgY3VycmVudCB3ZWIgYnJvd3Nlci5cbiAgICpcbiAgICogQHJlbWFya1xuICAgKiBBZ29yYSBoYXMgeWV0IHRvIGNvbmR1Y3QgY29tcHJlaGVuc2l2ZSB0ZXN0cyBvbiBDaHJvbWl1bSBrZXJuZWwgYnJvd3NlcnMsIHN1Y2ggYXMgUVEgYW5kIDM2MC5cbiAgICogQWdvcmEgd2lsbCBncmFkdWFsbHkgYWNoaWV2ZSBjb21wYXRpYmlsaXR5IG9uIG1vc3QgbWFpbnN0cmVhbSBicm93c2VycyBpbiBzdWJzZXF1ZW50IHZlcnNpb25zIG9mIHRoZSBXZWIgU0RLLlxuICAgKi9cbiAgY2hlY2tTeXN0ZW1SZXF1aXJlbWVudHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuQWdvcmFSVEMuY2hlY2tTeXN0ZW1SZXF1aXJlbWVudHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xpZW50IG9iamVjdC5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbmQgcmV0dXJucyBhIGNsaWVudCBvYmplY3QuIFlvdSBjYW4gb25seSBjYWxsIHRoaXMgbWV0aG9kIG9uY2UgZWFjaCBjYWxsIHNlc3Npb24uXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdcbiAgICogRGVmaW5lcyB0aGUgcHJvcGVydHkgb2YgdGhlIGNsaWVudCwgc2VlXG4gICAqIFtDbGllbnRDb25maWddKGh0dHBzOi8vZG9jcy5hZ29yYS5pby9lbi9WaWRlby9BUEklMjBSZWZlcmVuY2Uvd2ViL2ludGVyZmFjZXMvYWdvcmFydGMuY2xpZW50Y29uZmlnLmh0bWwpIGZvciBkZXRhaWxzLlxuICAgKiBAcGFyYW0gW2F1dG9Jbml0aWFsaXppbmc9dHJ1ZV0gTmd4LWFnb3JhIGJ5IGRlZmF1bHQgYXV0b21hdGljYWxseSBpbml0aWFsaXplcyB0aGUgY2xpZW50IHdpdGggdGhlIHByb3ZpZGVkIGBBcHBJRGAgYWZ0ZXIgaXQgaXMgY3JlYXRlZC5cbiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgZnVuY3Rpb25hbGl0eSwgaWYgeW91IGFyZSBnb2luZyB0byBjYWxsIGBpbml0KClgIHNlcGFyYXRlbHlcbiAgICogKGFmdGVyIGNyZWF0aW5nIHRoZSBjbGllbnQgb25seSkuXG4gICAqIEBwYXJhbSBbb25TdWNjZXNzXSBUaGUgY2FsbGJhY2sgd2hlbiB0aGUgbWV0aG9kIHN1Y2NlZWRzLlxuICAgKiBAcGFyYW0gW29uRmFpbHVyZV0gVGhlIGNhbGxiYWNrIHdoZW4gdGhlIG1ldGhvZCBmYWlscy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogQWdvcmFSVEMuY3JlYXRlQ2xpZW50KGNvbmZpZyk7XG4gICAqL1xuICBjcmVhdGVDbGllbnQoXG4gICAgY29uZmlnOiBDbGllbnRDb25maWcsXG4gICAgYXV0b0luaXRpYWxpemluZzogYm9vbGVhbiA9IHRydWUsXG4gICAgb25TdWNjZXNzPzogKCkgPT4gdm9pZCxcbiAgICBvbkZhaWx1cmU/OiAoZXJyb3I6IEVycm9yKSA9PiB2b2lkXG4gICk6IEFnb3JhQ2xpZW50IHtcbiAgICB0aGlzLmNsaWVudCA9IHRoaXMuQWdvcmFSVEMuY3JlYXRlQ2xpZW50KGNvbmZpZyk7XG4gICAgaWYgKGF1dG9Jbml0aWFsaXppbmcpIHtcbiAgICAgIHRoaXMuaW5pdCh0aGlzLmNvbmZpZy5BcHBJRCwgb25TdWNjZXNzLCBvbkZhaWx1cmUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnQ7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgY3JlYXRlcyBhbmQgcmV0dXJucyBhIHN0cmVhbSBvYmplY3QuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIEFnb3JhUlRDLmNyZWF0ZVN0cmVhbShzcGVjKVxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBEZWZpbmVzIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzdHJlYW1cbiAgICogQHNlZSBbU3RyZWFtU3BlY10oaHR0cHM6Ly9kb2NzLmFnb3JhLmlvL2VuL1ZpZGVvL0FQSSUyMFJlZmVyZW5jZS93ZWIvaW50ZXJmYWNlcy9hZ29yYXJ0Yy5zdHJlYW1zcGVjLmh0bWwpIGZvciBkZXRhaWxzLlxuICAgKi9cbiAgY3JlYXRlU3RyZWFtKHNwZWM6IFN0cmVhbVNwZWMpOiBTdHJlYW0ge1xuICAgIGlmICghc3BlYy5taWNyb3Bob25lSWQgJiYgdGhpcy5hdWRpb0RldmljZXMgJiYgdGhpcy5hdWRpb0RldmljZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWZhdWx0TWljID0gdGhpcy5hdWRpb0RldmljZXNbMF0uZGV2aWNlSWQ7XG4gICAgICBzcGVjLm1pY3JvcGhvbmVJZCA9IGRlZmF1bHRNaWM7XG4gICAgfVxuICAgIGlmICghc3BlYy5jYW1lcmFJZCAmJiB0aGlzLnZpZGVvRGV2aWNlcyAmJiB0aGlzLnZpZGVvRGV2aWNlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRDYW1lcmEgPSB0aGlzLnZpZGVvRGV2aWNlc1swXS5kZXZpY2VJZDtcbiAgICAgIHNwZWMuY2FtZXJhSWQgPSBzcGVjLmNhbWVyYUlkIHx8IGRlZmF1bHRDYW1lcmE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuQWdvcmFSVEMuY3JlYXRlU3RyZWFtKHNwZWMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBDbGllbnQgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gYXBwSWQgUGFzcyBpbiB0aGUgQXBwIElEIGZvciB5b3VyIHByb2plY3QuXG4gICAqIEFTQ0lJIGNoYXJhY3RlcnMgb25seSwgYW5kIHRoZSBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAyNTYgYnl0ZXMuXG4gICAqIFRvIGdldCB5b3VyIEFwcCBJRCxcbiAgICogQHNlZSBbR2V0IGFuIEFwcCBJRF0oaHR0cHM6Ly9kb2NzLmFnb3JhLmlvL2VuL1ZpZGVvL3dlYl9wcmVwYXJlP3BsYXRmb3JtPVdlYiNjcmVhdGUtYW4tYWdvcmEtYWNjb3VudC1hbmQtZ2V0LWFuLWFwcC1pZCkuXG4gICAqIEBwYXJhbSBbb25TdWNjZXNzXSBUaGUgY2FsbGJhY2sgd2hlbiB0aGUgbWV0aG9kIHN1Y2NlZWRzLlxuICAgKiBAcGFyYW0gW29uRmFpbHVyZV0gVGhlIGNhbGxiYWNrIHdoZW4gdGhlIG1ldGhvZCBmYWlscy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdGhpcy5uZ3hBZ29yYVNlcnZpY2UuY2xpZW50LmluaXQoYXBwSWQsICgpID0+IHtcbiAgICogY29uc29sZS5sb2coXCJjbGllbnQgaW5pdGlhbGl6ZWRcIik7XG4gICAqIC8vIEpvaW4gYSBjaGFubmVsXG4gICAqIC8v4oCm4oCmXG4gICAqIH0sIGVycm9yID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKFwiY2xpZW50IGluaXQgZmFpbGVkIFwiLCBlcnIpO1xuICAgKiAgICAgLy8gRXJyb3IgaGFuZGxpbmdcbiAgICogfSk7XG4gICAqL1xuICBpbml0KGFwcElkOiBzdHJpbmcsIG9uU3VjY2Vzcz86ICgpID0+IHZvaWQsIG9uRmFpbHVyZT86IChlcnJvcjogRXJyb3IpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWVudC5pbml0KGFwcElkLCBvblN1Y2Nlc3MsIG9uRmFpbHVyZSk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gYXV0b21hdGljYWxseSBjb2xsZWN0IGF1ZGlvIGFuZCB2aWRlbyBkZXZpY2VzIGZyb20gdGhlIEFnb3JhUlRDIGBnZXREZXZpY2VzKClgIG1ldGhvZC5cbiAgICovXG4gIHByaXZhdGUgY29sbGVjdERldmljZXMoKTogdm9pZCB7XG4gICAgdGhpcy5BZ29yYVJUQy5nZXREZXZpY2VzKChkZXZpY2VzOiBNZWRpYURldmljZUluZm9bXSkgPT4ge1xuICAgICAgY29uc3QgYXVkaW9EZXZpY2VzID0gZGV2aWNlcy5maWx0ZXIoZGV2aWNlID0+IHtcbiAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAnYXVkaW9pbnB1dCcgJiYgZGV2aWNlLmRldmljZUlkICE9PSAnZGVmYXVsdCc7XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgdmlkZW9EZXZpY2VzID0gZGV2aWNlcy5maWx0ZXIoZGV2aWNlID0+IHtcbiAgICAgICAgcmV0dXJuIGRldmljZS5raW5kID09PSAndmlkZW9pbnB1dCcgJiYgZGV2aWNlLmRldmljZUlkICE9PSAnZGVmYXVsdCc7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5hdWRpb0RldmljZXMgPSBhdWRpb0RldmljZXM7XG4gICAgICB0aGlzLnZpZGVvRGV2aWNlcyA9IHZpZGVvRGV2aWNlcztcbiAgICB9KTtcbiAgfVxufVxuIl19