ngx-agora
Version:
Angular wrapper for Agora RTC client (https://www.agora.io/en/)
204 lines • 18.2 kB
JavaScript
/**
* @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