@uengage.io/platform-sdk 2.5.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,6 +2,20 @@
2
2
 
3
3
  Client SDK for uEngage platform services. One factory (`createClient`) returns a `PlatformClient` exposing `business`, `audit`, `zones`, `wallet`, and `auth`. No singletons, no module-level state - each consumer constructs its own client with explicit config.
4
4
 
5
+ ## Restricted realtime channels
6
+
7
+ Call `auth.mintRealtimeToken({ clientId, clientSecret, channel: 'delivery-updates',
8
+ expiresIn: 300, authBaseUrl })` on your backend after authorizing the current user.
9
+ The registered client needs `realtime.tokens:issue`. Return its
10
+ `{ token, expiresIn, channel }` result from your own non-cacheable token route.
11
+ On the frontend, supply the token through `realtime.connect({ getToken, env })`
12
+ and call `client.subscribe('delivery-updates', ...)`.
13
+
14
+ Names are case-sensitive identifiers, not paths or wildcards. Tokens permit exactly
15
+ one name, are valid for 60–900 seconds (300 by default), and cannot publish or call
16
+ other platform APIs. Minting does not create a publisher. See the
17
+ [complete integration and authorization guide](../../services/realtime/README.md).
18
+
5
19
  ## Quick start
6
20
 
7
21
  ```ts
@@ -4,6 +4,7 @@
4
4
  * the SDK itself — every helper takes parameters explicitly so multiple
5
5
  * OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
6
6
  */
7
+ export { mintRealtimeToken, type MintRealtimeTokenInput, type RealtimeToken, } from './realtime-token';
7
8
  export { generatePKCE, type PkcePair } from './pkce';
8
9
  export { createAuthorizeUrl, type AuthorizeUrlInput } from './authorize-url';
9
10
  export { exchangeCode, parseTokenResponse, type ExchangeCodeInput, type TokenPair, } from './exchange-code';
@@ -12,6 +13,7 @@ export { verifyAccessToken } from './verify';
12
13
  export { getIssuer, getExpiry } from './issuer';
13
14
  export { loginWithPassword, type LoginWithPasswordInput } from './login';
14
15
  export { requestOtp, verifyOtp, type RequestOtpInput, type RequestOtpResult, type VerifyOtpInput, } from './otp';
16
+ import { mintRealtimeToken } from './realtime-token';
15
17
  import { generatePKCE } from './pkce';
16
18
  import { createAuthorizeUrl } from './authorize-url';
17
19
  import { exchangeCode } from './exchange-code';
@@ -29,6 +31,7 @@ import { requestOtp, verifyOtp } from './otp';
29
31
  * sharing this object across clients is safe.
30
32
  */
31
33
  export declare const auth: {
34
+ mintRealtimeToken: typeof mintRealtimeToken;
32
35
  generatePKCE: typeof generatePKCE;
33
36
  createAuthorizeUrl: typeof createAuthorizeUrl;
34
37
  exchangeCode: typeof exchangeCode;
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.auth = exports.verifyOtp = exports.requestOtp = exports.loginWithPassword = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = void 0;
3
+ exports.auth = exports.verifyOtp = exports.requestOtp = exports.loginWithPassword = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = exports.mintRealtimeToken = void 0;
4
4
  /**
5
5
  * Auth namespace: helpers for OAuth2 flows against the platform's
6
6
  * `/auth/business/*` surface. Consumers don't bake a `client_id` into
7
7
  * the SDK itself — every helper takes parameters explicitly so multiple
8
8
  * OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
9
9
  */
10
+ var realtime_token_1 = require("./realtime-token");
11
+ Object.defineProperty(exports, "mintRealtimeToken", { enumerable: true, get: function () { return realtime_token_1.mintRealtimeToken; } });
10
12
  var pkce_1 = require("./pkce");
11
13
  Object.defineProperty(exports, "generatePKCE", { enumerable: true, get: function () { return pkce_1.generatePKCE; } });
12
14
  var authorize_url_1 = require("./authorize-url");
@@ -26,6 +28,7 @@ Object.defineProperty(exports, "loginWithPassword", { enumerable: true, get: fun
26
28
  var otp_1 = require("./otp");
27
29
  Object.defineProperty(exports, "requestOtp", { enumerable: true, get: function () { return otp_1.requestOtp; } });
28
30
  Object.defineProperty(exports, "verifyOtp", { enumerable: true, get: function () { return otp_1.verifyOtp; } });
31
+ const realtime_token_2 = require("./realtime-token");
29
32
  const pkce_2 = require("./pkce");
30
33
  const authorize_url_2 = require("./authorize-url");
31
34
  const exchange_code_2 = require("./exchange-code");
@@ -43,6 +46,7 @@ const otp_2 = require("./otp");
43
46
  * sharing this object across clients is safe.
44
47
  */
45
48
  exports.auth = {
49
+ mintRealtimeToken: realtime_token_2.mintRealtimeToken,
46
50
  generatePKCE: pkce_2.generatePKCE,
47
51
  createAuthorizeUrl: authorize_url_2.createAuthorizeUrl,
48
52
  exchangeCode: exchange_code_2.exchangeCode,
@@ -54,4 +58,4 @@ exports.auth = {
54
58
  requestOtp: otp_2.requestOtp,
55
59
  verifyOtp: otp_2.verifyOtp,
56
60
  };
57
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILCtCQUFxRDtBQUE1QyxvR0FBQSxZQUFZLE9BQUE7QUFDckIsaURBQTZFO0FBQXBFLG1IQUFBLGtCQUFrQixPQUFBO0FBQzNCLGlEQUt5QjtBQUp2Qiw2R0FBQSxZQUFZLE9BQUE7QUFDWixtSEFBQSxrQkFBa0IsT0FBQTtBQUlwQixxQ0FBdUQ7QUFBOUMsa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLG1DQUE2QztBQUFwQywyR0FBQSxpQkFBaUIsT0FBQTtBQUMxQixtQ0FBZ0Q7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBQzdCLGlDQUF5RTtBQUFoRSwwR0FBQSxpQkFBaUIsT0FBQTtBQUMxQiw2QkFNZTtBQUxiLGlHQUFBLFVBQVUsT0FBQTtBQUNWLGdHQUFBLFNBQVMsT0FBQTtBQU1YLGlDQUFzQztBQUN0QyxtREFBcUQ7QUFDckQsbURBQStDO0FBQy9DLHVDQUFvQztBQUNwQyxxQ0FBNkM7QUFDN0MscUNBQWdEO0FBQ2hELG1DQUE0QztBQUM1QywrQkFBOEM7QUFFOUM7Ozs7Ozs7R0FPRztBQUNVLFFBQUEsSUFBSSxHQUFHO0lBQ2xCLFlBQVksRUFBWixtQkFBWTtJQUNaLGtCQUFrQixFQUFsQixrQ0FBa0I7SUFDbEIsWUFBWSxFQUFaLDRCQUFZO0lBQ1osT0FBTyxFQUFQLGlCQUFPO0lBQ1AsaUJBQWlCLEVBQWpCLDBCQUFpQjtJQUNqQixTQUFTLEVBQVQsa0JBQVM7SUFDVCxTQUFTLEVBQVQsa0JBQVM7SUFDVCxpQkFBaUIsRUFBakIseUJBQWlCO0lBQ2pCLFVBQVUsRUFBVixnQkFBVTtJQUNWLFNBQVMsRUFBVCxlQUFTO0NBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aCBuYW1lc3BhY2U6IGhlbHBlcnMgZm9yIE9BdXRoMiBmbG93cyBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzXG4gKiBgL2F1dGgvYnVzaW5lc3MvKmAgc3VyZmFjZS4gQ29uc3VtZXJzIGRvbid0IGJha2UgYSBgY2xpZW50X2lkYCBpbnRvXG4gKiB0aGUgU0RLIGl0c2VsZiDigJQgZXZlcnkgaGVscGVyIHRha2VzIHBhcmFtZXRlcnMgZXhwbGljaXRseSBzbyBtdWx0aXBsZVxuICogT0F1dGggY2xpZW50cyAoZGFzaGJvYXJkLCBtb2JpbGUsIEJGRnMpIGNhbiBzaGFyZSBvbmUgU0RLIGluc3RhbGwuXG4gKi9cbmV4cG9ydCB7IGdlbmVyYXRlUEtDRSwgdHlwZSBQa2NlUGFpciB9IGZyb20gJy4vcGtjZSc7XG5leHBvcnQgeyBjcmVhdGVBdXRob3JpemVVcmwsIHR5cGUgQXV0aG9yaXplVXJsSW5wdXQgfSBmcm9tICcuL2F1dGhvcml6ZS11cmwnO1xuZXhwb3J0IHtcbiAgZXhjaGFuZ2VDb2RlLFxuICBwYXJzZVRva2VuUmVzcG9uc2UsXG4gIHR5cGUgRXhjaGFuZ2VDb2RlSW5wdXQsXG4gIHR5cGUgVG9rZW5QYWlyLFxufSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuZXhwb3J0IHsgcmVmcmVzaCwgdHlwZSBSZWZyZXNoSW5wdXQgfSBmcm9tICcuL3JlZnJlc2gnO1xuZXhwb3J0IHsgdmVyaWZ5QWNjZXNzVG9rZW4gfSBmcm9tICcuL3ZlcmlmeSc7XG5leHBvcnQgeyBnZXRJc3N1ZXIsIGdldEV4cGlyeSB9IGZyb20gJy4vaXNzdWVyJztcbmV4cG9ydCB7IGxvZ2luV2l0aFBhc3N3b3JkLCB0eXBlIExvZ2luV2l0aFBhc3N3b3JkSW5wdXQgfSBmcm9tICcuL2xvZ2luJztcbmV4cG9ydCB7XG4gIHJlcXVlc3RPdHAsXG4gIHZlcmlmeU90cCxcbiAgdHlwZSBSZXF1ZXN0T3RwSW5wdXQsXG4gIHR5cGUgUmVxdWVzdE90cFJlc3VsdCxcbiAgdHlwZSBWZXJpZnlPdHBJbnB1dCxcbn0gZnJvbSAnLi9vdHAnO1xuXG5pbXBvcnQgeyBnZW5lcmF0ZVBLQ0UgfSBmcm9tICcuL3BrY2UnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aG9yaXplVXJsIH0gZnJvbSAnLi9hdXRob3JpemUtdXJsJztcbmltcG9ydCB7IGV4Y2hhbmdlQ29kZSB9IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5pbXBvcnQgeyByZWZyZXNoIH0gZnJvbSAnLi9yZWZyZXNoJztcbmltcG9ydCB7IHZlcmlmeUFjY2Vzc1Rva2VuIH0gZnJvbSAnLi92ZXJpZnknO1xuaW1wb3J0IHsgZ2V0SXNzdWVyLCBnZXRFeHBpcnkgfSBmcm9tICcuL2lzc3Vlcic7XG5pbXBvcnQgeyBsb2dpbldpdGhQYXNzd29yZCB9IGZyb20gJy4vbG9naW4nO1xuaW1wb3J0IHsgcmVxdWVzdE90cCwgdmVyaWZ5T3RwIH0gZnJvbSAnLi9vdHAnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIG5hbWVzcGFjZTogc3RhdGVsZXNzIGhlbHBlcnMgZ3JvdXBlZCB1bmRlciBvbmUgc3ltYm9sLlxuICogSWRlbnRpY2FsIHRvIHRoZSBuYW1lZCBleHBvcnRzIGFib3ZlOyBpbXBvcnRpbmcgdGhlIG5hbWVzcGFjZSBsZXRzXG4gKiBjYWxsZXJzIHdyaXRlIGBjbGllbnQuYXV0aC5yZWZyZXNoKC4uLilgIChpdCdzIGV4cG9zZWQgb24gdGhlXG4gKiBgUGxhdGZvcm1DbGllbnRgIGluc3RhbmNlIHJldHVybmVkIGJ5IGBjcmVhdGVDbGllbnQoLi4uKWApIG9yXG4gKiBgYXV0aC5nZW5lcmF0ZVBLQ0UoKWAgZnJvbSBhIHRvcC1sZXZlbCBpbXBvcnQuIE5vIG11dGFibGUgc3RhdGUsIHNvXG4gKiBzaGFyaW5nIHRoaXMgb2JqZWN0IGFjcm9zcyBjbGllbnRzIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRoID0ge1xuICBnZW5lcmF0ZVBLQ0UsXG4gIGNyZWF0ZUF1dGhvcml6ZVVybCxcbiAgZXhjaGFuZ2VDb2RlLFxuICByZWZyZXNoLFxuICB2ZXJpZnlBY2Nlc3NUb2tlbixcbiAgZ2V0SXNzdWVyLFxuICBnZXRFeHBpcnksXG4gIGxvZ2luV2l0aFBhc3N3b3JkLFxuICByZXF1ZXN0T3RwLFxuICB2ZXJpZnlPdHAsXG59O1xuIl19
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILG1EQUkwQjtBQUh4QixtSEFBQSxpQkFBaUIsT0FBQTtBQUluQiwrQkFBcUQ7QUFBNUMsb0dBQUEsWUFBWSxPQUFBO0FBQ3JCLGlEQUE2RTtBQUFwRSxtSEFBQSxrQkFBa0IsT0FBQTtBQUMzQixpREFLeUI7QUFKdkIsNkdBQUEsWUFBWSxPQUFBO0FBQ1osbUhBQUEsa0JBQWtCLE9BQUE7QUFJcEIscUNBQXVEO0FBQTlDLGtHQUFBLE9BQU8sT0FBQTtBQUNoQixtQ0FBNkM7QUFBcEMsMkdBQUEsaUJBQWlCLE9BQUE7QUFDMUIsbUNBQWdEO0FBQXZDLG1HQUFBLFNBQVMsT0FBQTtBQUFFLG1HQUFBLFNBQVMsT0FBQTtBQUM3QixpQ0FBeUU7QUFBaEUsMEdBQUEsaUJBQWlCLE9BQUE7QUFDMUIsNkJBTWU7QUFMYixpR0FBQSxVQUFVLE9BQUE7QUFDVixnR0FBQSxTQUFTLE9BQUE7QUFNWCxxREFBcUQ7QUFDckQsaUNBQXNDO0FBQ3RDLG1EQUFxRDtBQUNyRCxtREFBK0M7QUFDL0MsdUNBQW9DO0FBQ3BDLHFDQUE2QztBQUM3QyxxQ0FBZ0Q7QUFDaEQsbUNBQTRDO0FBQzVDLCtCQUE4QztBQUU5Qzs7Ozs7OztHQU9HO0FBQ1UsUUFBQSxJQUFJLEdBQUc7SUFDbEIsaUJBQWlCLEVBQWpCLGtDQUFpQjtJQUNqQixZQUFZLEVBQVosbUJBQVk7SUFDWixrQkFBa0IsRUFBbEIsa0NBQWtCO0lBQ2xCLFlBQVksRUFBWiw0QkFBWTtJQUNaLE9BQU8sRUFBUCxpQkFBTztJQUNQLGlCQUFpQixFQUFqQiwwQkFBaUI7SUFDakIsU0FBUyxFQUFULGtCQUFTO0lBQ1QsU0FBUyxFQUFULGtCQUFTO0lBQ1QsaUJBQWlCLEVBQWpCLHlCQUFpQjtJQUNqQixVQUFVLEVBQVYsZ0JBQVU7SUFDVixTQUFTLEVBQVQsZUFBUztDQUNWLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEF1dGggbmFtZXNwYWNlOiBoZWxwZXJzIGZvciBPQXV0aDIgZmxvd3MgYWdhaW5zdCB0aGUgcGxhdGZvcm0nc1xuICogYC9hdXRoL2J1c2luZXNzLypgIHN1cmZhY2UuIENvbnN1bWVycyBkb24ndCBiYWtlIGEgYGNsaWVudF9pZGAgaW50b1xuICogdGhlIFNESyBpdHNlbGYg4oCUIGV2ZXJ5IGhlbHBlciB0YWtlcyBwYXJhbWV0ZXJzIGV4cGxpY2l0bHkgc28gbXVsdGlwbGVcbiAqIE9BdXRoIGNsaWVudHMgKGRhc2hib2FyZCwgbW9iaWxlLCBCRkZzKSBjYW4gc2hhcmUgb25lIFNESyBpbnN0YWxsLlxuICovXG5leHBvcnQge1xuICBtaW50UmVhbHRpbWVUb2tlbixcbiAgdHlwZSBNaW50UmVhbHRpbWVUb2tlbklucHV0LFxuICB0eXBlIFJlYWx0aW1lVG9rZW4sXG59IGZyb20gJy4vcmVhbHRpbWUtdG9rZW4nO1xuZXhwb3J0IHsgZ2VuZXJhdGVQS0NFLCB0eXBlIFBrY2VQYWlyIH0gZnJvbSAnLi9wa2NlJztcbmV4cG9ydCB7IGNyZWF0ZUF1dGhvcml6ZVVybCwgdHlwZSBBdXRob3JpemVVcmxJbnB1dCB9IGZyb20gJy4vYXV0aG9yaXplLXVybCc7XG5leHBvcnQge1xuICBleGNoYW5nZUNvZGUsXG4gIHBhcnNlVG9rZW5SZXNwb25zZSxcbiAgdHlwZSBFeGNoYW5nZUNvZGVJbnB1dCxcbiAgdHlwZSBUb2tlblBhaXIsXG59IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5leHBvcnQgeyByZWZyZXNoLCB0eXBlIFJlZnJlc2hJbnB1dCB9IGZyb20gJy4vcmVmcmVzaCc7XG5leHBvcnQgeyB2ZXJpZnlBY2Nlc3NUb2tlbiB9IGZyb20gJy4vdmVyaWZ5JztcbmV4cG9ydCB7IGdldElzc3VlciwgZ2V0RXhwaXJ5IH0gZnJvbSAnLi9pc3N1ZXInO1xuZXhwb3J0IHsgbG9naW5XaXRoUGFzc3dvcmQsIHR5cGUgTG9naW5XaXRoUGFzc3dvcmRJbnB1dCB9IGZyb20gJy4vbG9naW4nO1xuZXhwb3J0IHtcbiAgcmVxdWVzdE90cCxcbiAgdmVyaWZ5T3RwLFxuICB0eXBlIFJlcXVlc3RPdHBJbnB1dCxcbiAgdHlwZSBSZXF1ZXN0T3RwUmVzdWx0LFxuICB0eXBlIFZlcmlmeU90cElucHV0LFxufSBmcm9tICcuL290cCc7XG5cbmltcG9ydCB7IG1pbnRSZWFsdGltZVRva2VuIH0gZnJvbSAnLi9yZWFsdGltZS10b2tlbic7XG5pbXBvcnQgeyBnZW5lcmF0ZVBLQ0UgfSBmcm9tICcuL3BrY2UnO1xuaW1wb3J0IHsgY3JlYXRlQXV0aG9yaXplVXJsIH0gZnJvbSAnLi9hdXRob3JpemUtdXJsJztcbmltcG9ydCB7IGV4Y2hhbmdlQ29kZSB9IGZyb20gJy4vZXhjaGFuZ2UtY29kZSc7XG5pbXBvcnQgeyByZWZyZXNoIH0gZnJvbSAnLi9yZWZyZXNoJztcbmltcG9ydCB7IHZlcmlmeUFjY2Vzc1Rva2VuIH0gZnJvbSAnLi92ZXJpZnknO1xuaW1wb3J0IHsgZ2V0SXNzdWVyLCBnZXRFeHBpcnkgfSBmcm9tICcuL2lzc3Vlcic7XG5pbXBvcnQgeyBsb2dpbldpdGhQYXNzd29yZCB9IGZyb20gJy4vbG9naW4nO1xuaW1wb3J0IHsgcmVxdWVzdE90cCwgdmVyaWZ5T3RwIH0gZnJvbSAnLi9vdHAnO1xuXG4vKipcbiAqIENvbnZlbmllbmNlIG5hbWVzcGFjZTogc3RhdGVsZXNzIGhlbHBlcnMgZ3JvdXBlZCB1bmRlciBvbmUgc3ltYm9sLlxuICogSWRlbnRpY2FsIHRvIHRoZSBuYW1lZCBleHBvcnRzIGFib3ZlOyBpbXBvcnRpbmcgdGhlIG5hbWVzcGFjZSBsZXRzXG4gKiBjYWxsZXJzIHdyaXRlIGBjbGllbnQuYXV0aC5yZWZyZXNoKC4uLilgIChpdCdzIGV4cG9zZWQgb24gdGhlXG4gKiBgUGxhdGZvcm1DbGllbnRgIGluc3RhbmNlIHJldHVybmVkIGJ5IGBjcmVhdGVDbGllbnQoLi4uKWApIG9yXG4gKiBgYXV0aC5nZW5lcmF0ZVBLQ0UoKWAgZnJvbSBhIHRvcC1sZXZlbCBpbXBvcnQuIE5vIG11dGFibGUgc3RhdGUsIHNvXG4gKiBzaGFyaW5nIHRoaXMgb2JqZWN0IGFjcm9zcyBjbGllbnRzIGlzIHNhZmUuXG4gKi9cbmV4cG9ydCBjb25zdCBhdXRoID0ge1xuICBtaW50UmVhbHRpbWVUb2tlbixcbiAgZ2VuZXJhdGVQS0NFLFxuICBjcmVhdGVBdXRob3JpemVVcmwsXG4gIGV4Y2hhbmdlQ29kZSxcbiAgcmVmcmVzaCxcbiAgdmVyaWZ5QWNjZXNzVG9rZW4sXG4gIGdldElzc3VlcixcbiAgZ2V0RXhwaXJ5LFxuICBsb2dpbldpdGhQYXNzd29yZCxcbiAgcmVxdWVzdE90cCxcbiAgdmVyaWZ5T3RwLFxufTtcbiJdfQ==
@@ -0,0 +1,18 @@
1
+ export interface MintRealtimeTokenInput {
2
+ clientId: string;
3
+ clientSecret: string;
4
+ channel: string;
5
+ /** 60-900 seconds; defaults to 300. No refresh token is issued. */
6
+ expiresIn?: number;
7
+ /** Opaque user identifier (1-128 printable ASCII characters). Attribution only. */
8
+ onBehalfOf?: string;
9
+ authBaseUrl?: string;
10
+ fetchFn?: typeof fetch;
11
+ }
12
+ export interface RealtimeToken {
13
+ token: string;
14
+ expiresIn: number;
15
+ channel: string;
16
+ }
17
+ /** Backend only. Check the caller's entitlement to this channel before minting. */
18
+ export declare function mintRealtimeToken(input: MintRealtimeTokenInput): Promise<RealtimeToken>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mintRealtimeToken = mintRealtimeToken;
4
+ const config_1 = require("../config");
5
+ const errors_1 = require("../errors");
6
+ const channel_1 = require("../realtime/channel");
7
+ /** Backend only. Check the caller's entitlement to this channel before minting. */
8
+ async function mintRealtimeToken(input) {
9
+ if (!input.clientId || !input.clientSecret)
10
+ throw new errors_1.ConfigError('Backend client credentials are required');
11
+ if (!(0, channel_1.isChannelName)(input.channel))
12
+ throw new errors_1.ConfigError('Invalid channel name');
13
+ if (input.onBehalfOf !== undefined && !(0, channel_1.isAttributionId)(input.onBehalfOf)) {
14
+ throw new errors_1.ConfigError('onBehalfOf must be a printable ASCII identifier of 1-128 characters');
15
+ }
16
+ const expiresIn = input.expiresIn ?? 300;
17
+ if (!Number.isInteger(expiresIn) || expiresIn < 60 || expiresIn > 900) {
18
+ throw new errors_1.ConfigError('expiresIn must be an integer between 60 and 900 seconds');
19
+ }
20
+ const response = await (input.fetchFn ?? globalThis.fetch)(`${(input.authBaseUrl ?? `${config_1.DEFAULT_BASE_URL}/auth/business`).replace(/\/$/, '')}/oauth/token`, {
21
+ method: 'POST',
22
+ headers: {
23
+ 'content-type': 'application/x-www-form-urlencoded',
24
+ authorization: `Basic ${Buffer.from(`${input.clientId}:${input.clientSecret}`).toString('base64')}`,
25
+ },
26
+ body: new URLSearchParams({
27
+ grant_type: 'urn:uengage:params:oauth:grant-type:realtime-channel',
28
+ channel: input.channel,
29
+ expires_in: String(expiresIn),
30
+ ...(input.onBehalfOf === undefined ? {} : { on_behalf_of: input.onBehalfOf }),
31
+ }).toString(),
32
+ });
33
+ if (!response.ok)
34
+ throw new errors_1.AuthenticationError(`Realtime token mint failed: HTTP ${response.status}`);
35
+ const body = (await response.json());
36
+ if (typeof body.access_token !== 'string' ||
37
+ !body.access_token ||
38
+ body.channel !== input.channel ||
39
+ !Number.isInteger(body.expires_in) ||
40
+ Number(body.expires_in) < 60 ||
41
+ Number(body.expires_in) > expiresIn) {
42
+ throw new errors_1.AuthenticationError('Invalid realtime token response');
43
+ }
44
+ return { token: body.access_token, expiresIn: Number(body.expires_in), channel: input.channel };
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUtdG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9yZWFsdGltZS10b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXNCQSw4Q0F5Q0M7QUEvREQsc0NBQTZDO0FBQzdDLHNDQUE2RDtBQUM3RCxpREFBcUU7QUFtQnJFLG1GQUFtRjtBQUM1RSxLQUFLLFVBQVUsaUJBQWlCLENBQUMsS0FBNkI7SUFDbkUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtRQUN4QyxNQUFNLElBQUksb0JBQVcsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFDO0lBQ25FLElBQUksQ0FBQyxJQUFBLHVCQUFhLEVBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUFFLE1BQU0sSUFBSSxvQkFBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDakYsSUFBSSxLQUFLLENBQUMsVUFBVSxLQUFLLFNBQVMsSUFBSSxDQUFDLElBQUEseUJBQWUsRUFBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxNQUFNLElBQUksb0JBQVcsQ0FBQyxxRUFBcUUsQ0FBQyxDQUFDO0lBQy9GLENBQUM7SUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQztJQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLEdBQUcsRUFBRSxJQUFJLFNBQVMsR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUN0RSxNQUFNLElBQUksb0JBQVcsQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQ3hELEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEdBQUcseUJBQWdCLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsY0FBYyxFQUM5RjtRQUNFLE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLG1DQUFtQztZQUNuRCxhQUFhLEVBQUUsU0FBUyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7U0FDcEc7UUFDRCxJQUFJLEVBQUUsSUFBSSxlQUFlLENBQUM7WUFDeEIsVUFBVSxFQUFFLHNEQUFzRDtZQUNsRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7WUFDN0IsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUM5RSxDQUFDLENBQUMsUUFBUSxFQUFFO0tBQ2QsQ0FDRixDQUFDO0lBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1FBQ2QsTUFBTSxJQUFJLDRCQUFtQixDQUFDLG9DQUFvQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUN2RixNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUE0QixDQUFDO0lBQ2hFLElBQ0UsT0FBTyxJQUFJLENBQUMsWUFBWSxLQUFLLFFBQVE7UUFDckMsQ0FBQyxJQUFJLENBQUMsWUFBWTtRQUNsQixJQUFJLENBQUMsT0FBTyxLQUFLLEtBQUssQ0FBQyxPQUFPO1FBQzlCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsRUFDbkMsQ0FBQztRQUNELE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFDRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNsRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgREVGQVVMVF9CQVNFX1VSTCB9IGZyb20gJy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBpc0NoYW5uZWxOYW1lLCBpc0F0dHJpYnV0aW9uSWQgfSBmcm9tICcuLi9yZWFsdGltZS9jaGFubmVsJztcblxuZXhwb3J0IGludGVyZmFjZSBNaW50UmVhbHRpbWVUb2tlbklucHV0IHtcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgLyoqIDYwLTkwMCBzZWNvbmRzOyBkZWZhdWx0cyB0byAzMDAuIE5vIHJlZnJlc2ggdG9rZW4gaXMgaXNzdWVkLiAqL1xuICBleHBpcmVzSW4/OiBudW1iZXI7XG4gIC8qKiBPcGFxdWUgdXNlciBpZGVudGlmaWVyICgxLTEyOCBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycykuIEF0dHJpYnV0aW9uIG9ubHkuICovXG4gIG9uQmVoYWxmT2Y/OiBzdHJpbmc7XG4gIGF1dGhCYXNlVXJsPzogc3RyaW5nO1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xufVxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZVRva2VuIHtcbiAgdG9rZW46IHN0cmluZztcbiAgZXhwaXJlc0luOiBudW1iZXI7XG4gIGNoYW5uZWw6IHN0cmluZztcbn1cblxuLyoqIEJhY2tlbmQgb25seS4gQ2hlY2sgdGhlIGNhbGxlcidzIGVudGl0bGVtZW50IHRvIHRoaXMgY2hhbm5lbCBiZWZvcmUgbWludGluZy4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtaW50UmVhbHRpbWVUb2tlbihpbnB1dDogTWludFJlYWx0aW1lVG9rZW5JbnB1dCk6IFByb21pc2U8UmVhbHRpbWVUb2tlbj4ge1xuICBpZiAoIWlucHV0LmNsaWVudElkIHx8ICFpbnB1dC5jbGllbnRTZWNyZXQpXG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdCYWNrZW5kIGNsaWVudCBjcmVkZW50aWFscyBhcmUgcmVxdWlyZWQnKTtcbiAgaWYgKCFpc0NoYW5uZWxOYW1lKGlucHV0LmNoYW5uZWwpKSB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoJ0ludmFsaWQgY2hhbm5lbCBuYW1lJyk7XG4gIGlmIChpbnB1dC5vbkJlaGFsZk9mICE9PSB1bmRlZmluZWQgJiYgIWlzQXR0cmlidXRpb25JZChpbnB1dC5vbkJlaGFsZk9mKSkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcignb25CZWhhbGZPZiBtdXN0IGJlIGEgcHJpbnRhYmxlIEFTQ0lJIGlkZW50aWZpZXIgb2YgMS0xMjggY2hhcmFjdGVycycpO1xuICB9XG4gIGNvbnN0IGV4cGlyZXNJbiA9IGlucHV0LmV4cGlyZXNJbiA/PyAzMDA7XG4gIGlmICghTnVtYmVyLmlzSW50ZWdlcihleHBpcmVzSW4pIHx8IGV4cGlyZXNJbiA8IDYwIHx8IGV4cGlyZXNJbiA+IDkwMCkge1xuICAgIHRocm93IG5ldyBDb25maWdFcnJvcignZXhwaXJlc0luIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIDYwIGFuZCA5MDAgc2Vjb25kcycpO1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgKGlucHV0LmZldGNoRm4gPz8gZ2xvYmFsVGhpcy5mZXRjaCkoXG4gICAgYCR7KGlucHV0LmF1dGhCYXNlVXJsID8/IGAke0RFRkFVTFRfQkFTRV9VUkx9L2F1dGgvYnVzaW5lc3NgKS5yZXBsYWNlKC9cXC8kLywgJycpfS9vYXV0aC90b2tlbmAsXG4gICAge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7aW5wdXQuY2xpZW50SWR9OiR7aW5wdXQuY2xpZW50U2VjcmV0fWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gLFxuICAgICAgfSxcbiAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAndXJuOnVlbmdhZ2U6cGFyYW1zOm9hdXRoOmdyYW50LXR5cGU6cmVhbHRpbWUtY2hhbm5lbCcsXG4gICAgICAgIGNoYW5uZWw6IGlucHV0LmNoYW5uZWwsXG4gICAgICAgIGV4cGlyZXNfaW46IFN0cmluZyhleHBpcmVzSW4pLFxuICAgICAgICAuLi4oaW5wdXQub25CZWhhbGZPZiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IG9uX2JlaGFsZl9vZjogaW5wdXQub25CZWhhbGZPZiB9KSxcbiAgICAgIH0pLnRvU3RyaW5nKCksXG4gICAgfSxcbiAgKTtcbiAgaWYgKCFyZXNwb25zZS5vaylcbiAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihgUmVhbHRpbWUgdG9rZW4gbWludCBmYWlsZWQ6IEhUVFAgJHtyZXNwb25zZS5zdGF0dXN9YCk7XG4gIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgaWYgKFxuICAgIHR5cGVvZiBib2R5LmFjY2Vzc190b2tlbiAhPT0gJ3N0cmluZycgfHxcbiAgICAhYm9keS5hY2Nlc3NfdG9rZW4gfHxcbiAgICBib2R5LmNoYW5uZWwgIT09IGlucHV0LmNoYW5uZWwgfHxcbiAgICAhTnVtYmVyLmlzSW50ZWdlcihib2R5LmV4cGlyZXNfaW4pIHx8XG4gICAgTnVtYmVyKGJvZHkuZXhwaXJlc19pbikgPCA2MCB8fFxuICAgIE51bWJlcihib2R5LmV4cGlyZXNfaW4pID4gZXhwaXJlc0luXG4gICkge1xuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCdJbnZhbGlkIHJlYWx0aW1lIHRva2VuIHJlc3BvbnNlJyk7XG4gIH1cbiAgcmV0dXJuIHsgdG9rZW46IGJvZHkuYWNjZXNzX3Rva2VuLCBleHBpcmVzSW46IE51bWJlcihib2R5LmV4cGlyZXNfaW4pLCBjaGFubmVsOiBpbnB1dC5jaGFubmVsIH07XG59XG4iXX0=
@@ -0,0 +1,7 @@
1
+ /** Public channel names are case-sensitive single identifiers, never paths or wildcards. */
2
+ export declare function isChannelName(value: unknown): value is string;
3
+ /** Internal AppSync mapping. Absolute paths remain supported for existing integrations. */
4
+ export declare function toChannelPath(channel: string): string;
5
+ export declare function nameFromChannelPath(path: string): string | null;
6
+ /** Backend-supplied opaque attribution, never an authorization grant. */
7
+ export declare function isAttributionId(value: unknown): value is string;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isChannelName = isChannelName;
4
+ exports.toChannelPath = toChannelPath;
5
+ exports.nameFromChannelPath = nameFromChannelPath;
6
+ exports.isAttributionId = isAttributionId;
7
+ /** Public channel names are case-sensitive single identifiers, never paths or wildcards. */
8
+ function isChannelName(value) {
9
+ return (typeof value === 'string' &&
10
+ value.trim() === value &&
11
+ /^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$/.test(value));
12
+ }
13
+ /** Internal AppSync mapping. Absolute paths remain supported for existing integrations. */
14
+ function toChannelPath(channel) {
15
+ if (channel.startsWith('/'))
16
+ return channel;
17
+ if (!isChannelName(channel))
18
+ throw new Error('Invalid channel name');
19
+ return `/channels/${channel}`;
20
+ }
21
+ function nameFromChannelPath(path) {
22
+ const name = path.startsWith('/channels/') ? path.slice('/channels/'.length) : null;
23
+ return isChannelName(name) ? name : null;
24
+ }
25
+ /** Backend-supplied opaque attribution, never an authorization grant. */
26
+ function isAttributionId(value) {
27
+ return typeof value === 'string' && value.trim() === value && /^[\x21-\x7e]{1,128}$/.test(value);
28
+ }
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhbHRpbWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVhbHRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSxzQ0FNQztBQUdELHNDQUlDO0FBRUQsa0RBR0M7QUFHRCwwQ0FFQztBQXhCRCw0RkFBNEY7QUFDNUYsU0FBZ0IsYUFBYSxDQUFDLEtBQWM7SUFDMUMsT0FBTyxDQUNMLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFDekIsS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUs7UUFDdEIsbUNBQW1DLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUNoRCxDQUFDO0FBQ0osQ0FBQztBQUVELDJGQUEyRjtBQUMzRixTQUFnQixhQUFhLENBQUMsT0FBZTtJQUMzQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDckUsT0FBTyxhQUFhLE9BQU8sRUFBRSxDQUFDO0FBQ2hDLENBQUM7QUFFRCxTQUFnQixtQkFBbUIsQ0FBQyxJQUFZO0lBQzlDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEYsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNDLENBQUM7QUFFRCx5RUFBeUU7QUFDekUsU0FBZ0IsZUFBZSxDQUFDLEtBQWM7SUFDNUMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxLQUFLLEtBQUssSUFBSSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBQdWJsaWMgY2hhbm5lbCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgc2luZ2xlIGlkZW50aWZpZXJzLCBuZXZlciBwYXRocyBvciB3aWxkY2FyZHMuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDaGFubmVsTmFtZSh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgIHZhbHVlLnRyaW0oKSA9PT0gdmFsdWUgJiZcbiAgICAvXltBLVphLXowLTldW0EtWmEtejAtOV8tXXswLDEyN30kLy50ZXN0KHZhbHVlKVxuICApO1xufVxuXG4vKiogSW50ZXJuYWwgQXBwU3luYyBtYXBwaW5nLiBBYnNvbHV0ZSBwYXRocyByZW1haW4gc3VwcG9ydGVkIGZvciBleGlzdGluZyBpbnRlZ3JhdGlvbnMuICovXG5leHBvcnQgZnVuY3Rpb24gdG9DaGFubmVsUGF0aChjaGFubmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoY2hhbm5lbC5zdGFydHNXaXRoKCcvJykpIHJldHVybiBjaGFubmVsO1xuICBpZiAoIWlzQ2hhbm5lbE5hbWUoY2hhbm5lbCkpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjaGFubmVsIG5hbWUnKTtcbiAgcmV0dXJuIGAvY2hhbm5lbHMvJHtjaGFubmVsfWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuYW1lRnJvbUNoYW5uZWxQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBuYW1lID0gcGF0aC5zdGFydHNXaXRoKCcvY2hhbm5lbHMvJykgPyBwYXRoLnNsaWNlKCcvY2hhbm5lbHMvJy5sZW5ndGgpIDogbnVsbDtcbiAgcmV0dXJuIGlzQ2hhbm5lbE5hbWUobmFtZSkgPyBuYW1lIDogbnVsbDtcbn1cblxuLyoqIEJhY2tlbmQtc3VwcGxpZWQgb3BhcXVlIGF0dHJpYnV0aW9uLCBuZXZlciBhbiBhdXRob3JpemF0aW9uIGdyYW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQXR0cmlidXRpb25JZCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLnRyaW0oKSA9PT0gdmFsdWUgJiYgL15bXFx4MjEtXFx4N2VdezEsMTI4fSQvLnRlc3QodmFsdWUpO1xufVxuIl19
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.connect = connect;
4
4
  exports.jitteredBackoff = jitteredBackoff;
5
+ const channel_1 = require("./channel");
5
6
  const envelope_1 = require("./envelope");
6
7
  const endpoints_1 = require("./endpoints");
7
8
  const protocol_1 = require("./protocol");
@@ -319,7 +320,7 @@ function connect(options) {
319
320
  return;
320
321
  record.sent = true;
321
322
  try {
322
- socket.send((0, protocol_1.subscribeFrame)(record.id, record.channel, (0, protocol_1.authHeader)(endpoints.httpDomain, token)));
323
+ socket.send((0, protocol_1.subscribeFrame)(record.id, (0, channel_1.toChannelPath)(record.channel), (0, protocol_1.authHeader)(endpoints.httpDomain, token)));
323
324
  }
324
325
  catch (err) {
325
326
  record.sent = false;
@@ -352,6 +353,7 @@ function connect(options) {
352
353
  }
353
354
  return {
354
355
  subscribe(channel, subscribeOptions) {
356
+ (0, channel_1.toChannelPath)(channel);
355
357
  const record = {
356
358
  id: randomId(),
357
359
  channel,
@@ -447,4 +449,4 @@ function unref(timer) {
447
449
  if (typeof t.unref === 'function')
448
450
  t.unref();
449
451
  }
450
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFsdGltZS9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNEpBLDBCQXVXQztBQTZCRCwwQ0FHQztBQW5pQkQseUNBQTBFO0FBQzFFLDJDQUErRjtBQUMvRix5Q0FZb0I7QUFxQnBCLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQztBQTRGbEIsTUFBTSx1QkFBdUIsR0FBRyxHQUFHLENBQUM7QUFDcEMsTUFBTSw4QkFBOEIsR0FBRyxNQUFNLENBQUM7QUFDOUMsTUFBTSw0QkFBNEIsR0FBRyxNQUFNLENBQUM7QUFDNUM7Ozs7O0dBS0c7QUFDSCxNQUFNLGVBQWUsR0FBRyxHQUFHLENBQUM7QUFDNUI7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sQ0FBQztBQUVuQyxTQUFnQixPQUFPLENBQUMsT0FBK0I7SUFDckQsTUFBTSxTQUFTLEdBQUcsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxlQUFlLEVBQUUsQ0FBQztJQUNqRSxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFLLFVBQVUsQ0FBQyxLQUFzQixDQUFDO0lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixJQUFJLDhCQUE4QixDQUFDO0lBRTFGLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0lBRTVELElBQUksTUFBb0MsQ0FBQztJQUN6QyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDbEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLElBQUksY0FBYyxHQUFHLEtBQUssQ0FBQztJQUMzQixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUN6QixJQUFJLGNBQXlELENBQUM7SUFDOUQsSUFBSSxjQUF5RCxD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LE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFDZixNQUFNLENBQUMsR0FBSSxVQUF5RCxDQUFDLE1BQU0sQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVksRUFBRSxlQUF1QjtJQUNwRCxJQUFJLEdBQUcsWUFBWSxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFvQztJQUNqRCxNQUFNLENBQUMsR0FBRyxLQUErQixDQUFDO0lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGFzUmVhbHRpbWVFdmVudCwgaXNOZXdlciwgdHlwZSBSZWFsdGltZUV2ZW50IH0gZnJvbSAnLi9lbnZlbG9wZSc7XG5pbXBvcnQgeyBBUElfQkFTRSwgZW5kcG9pbnRzRm9yLCB0eXBlIFJlYWx0aW1lRW5kcG9pbnRzLCB0eXBlIFJlYWx0aW1lRW52IH0gZnJvbSAnLi9lbmRwb2ludHMnO1xuaW1wb3J0IHtcbiAgRVZFTlRfV1NfU1VCUFJPVE9DT0wsXG4gIGF1dGhIZWFkZXIsXG4gIGF1dGhTdWJwcm90b2NvbCxcbiAgY29ubmVjdGlvbkluaXRGcmFtZSxcbiAgZXJyb3JGcmFtZU1lc3NhZ2UsXG4gIHBhcnNlRGF0YUZyYW1lRXZlbnQsXG4gIHBhcnNlU2VydmVyRnJhbWUsXG4gIHN1YnNjcmliZUZyYW1lLFxuICB1bnN1YnNjcmliZUZyYW1lLFxuICB0eXBlIERhdGFGcmFtZSxcbiAgdHlwZSBFcnJvckZyYW1lLFxufSBmcm9tICcuL3Byb3RvY29sJztcblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgdGhlIFdlYlNvY2tldCBBUEkgdGhpcyBjbGllbnQgdXNlcy5cbiAqXG4gKiBEZWNsYXJlZCBzdHJ1Y3R1cmFsbHkgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBhIERPTSBsaWI6IHRoZSBTREtcbiAqIGNvbXBpbGVzIGFnYWluc3QgYGxpYjogRVMyMDIyYCBvbmx5LCBhbmQgdGhpcyBrZWVwcyB0aGUgY2xpZW50XG4gKiBpbmplY3RhYmxlIHNvIHRlc3RzIGNhbiBkcml2ZSB0aGUgcHJvdG9jb2wgd2l0aCBhIGZha2Ugc29ja2V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pbmltYWxXZWJTb2NrZXQge1xuICByZWFkeVN0YXRlOiBudW1iZXI7XG4gIHNlbmQoZGF0YTogc3RyaW5nKTogdm9pZDtcbiAgY2xvc2UoY29kZT86IG51bWJlciwgcmVhc29uPzogc3RyaW5nKTogdm9pZDtcbiAgb25vcGVuOiAoKGV2OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9ubWVzc2FnZTogKChldjogeyBkYXRhOiB1bmtub3duIH0pID0+IHZvaWQpIHwgbnVsbDtcbiAgb25lcnJvcjogKChldjogdW5rbm93bikgPT4gdm9pZCkgfCBudWxsO1xuICBvbmNsb3NlOiAoKGV2OiB7IGNvZGU/OiBudW1iZXI7IHJlYXNvbj86IHN0cmluZyB9KSA9PiB2b2lkKSB8IG51bGw7XG59XG5cbmV4cG9ydCB0eXBlIFdlYlNvY2tldEN0b3IgPSBuZXcgKHVybDogc3RyaW5nLCBwcm90b2NvbHM/OiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gTWluaW1hbFdlYlNvY2tldDtcblxuY29uc3QgV1NfT1BFTiA9IDE7XG5cbi8qKiBXaGVyZSBhbiBldmVudCBoYW5kZWQgdG8gYG9uVXBkYXRlYCBjYW1lIGZyb20uICovXG5leHBvcnQgaW50ZXJmYWNlIFVwZGF0ZU1ldGEge1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgJ3NuYXBzaG90J2Ag4oCUIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZSwgZmV0Y2hlZCBmcm9tIHRoZSBsYXN0LXZhbHVlXG4gICAqIGNhY2hlIG9uIHN1YnNjcmliZSBvciBhZnRlciBhIHJlY29ubmVjdC4gYCdsaXZlJ2Ag4oCUIGRlbGl2ZXJlZCBvdmVyXG4gICAqIHRoZSBzb2NrZXQuXG4gICAqXG4gICAqIEFwcHMgZ2VuZXJhbGx5IGRvbid0IG5lZWQgdG8gYnJhbmNoIG9uIHRoaXM7IHRoZSBTREsgaGFzIGFscmVhZHlcbiAgICogb3JkZXJlZCBhbmQgZGUtZHVwbGljYXRlZCBib3RoIHNvdXJjZXMgYnkgVUxJRC4gSXQncyB0aGVyZSBmb3JcbiAgICogdGVsZW1ldHJ5IGFuZCBmb3IgVUlzIHRoYXQgd2FudCB0byBkaXN0aW5ndWlzaCBcInJlc3RvcmVkXCIgZnJvbVxuICAgKiBcImp1c3QgaGFwcGVuZWRcIi5cbiAgICovXG4gIG9yaWdpbjogJ3NuYXBzaG90JyB8ICdsaXZlJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpYmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEZpcmVzIG9uY2Ugd2l0aCB0aGUgY2hhbm5lbCdzIGxhdGVzdCBrbm93biB2YWx1ZSAoaWYgYW55KSwgdGhlbiBvblxuICAgKiBldmVyeSBsaXZlIGV2ZW50LiBOZXZlciBmaXJlcyB3aXRoIGFuIGV2ZW50IG9sZGVyIHRoYW4gb25lIGFscmVhZHlcbiAgICogZGVsaXZlcmVkIG9uIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgKi9cbiAgb25VcGRhdGUoZXZlbnQ6IFJlYWx0aW1lRXZlbnQsIG1ldGE6IFVwZGF0ZU1ldGEpOiB2b2lkO1xuICAvKipcbiAgICogU3Vic2NyaXB0aW9uLWxldmVsIGZhaWx1cmVzOiBhIHJlamVjdGVkIHN1YnNjcmliZSwgYSBtYWxmb3JtZWRcbiAgICogZnJhbWUsIGEgZmFpbGVkIHNuYXBzaG90IGZldGNoLiBUcmFuc2llbnQgc29ja2V0IGRyb3BzIGFyZSBoYW5kbGVkXG4gICAqIGludGVybmFsbHkgYnkgdGhlIHJlY29ubmVjdCBsb29wIGFuZCBhcmUgbm90IHN1cmZhY2VkIGhlcmUuXG4gICAqL1xuICBvbkVycm9yPyhlcnJvcjogRXJyb3IpOiB2b2lkO1xuICAvKipcbiAgICogUmVwbGFjZSB0aGUgYnVpbHQtaW4gbGFzdC12YWx1ZSBmZXRjaCBmb3IgdGhpcyBjaGFubmVsLiBSZXR1cm4gbnVsbFxuICAgKiB3aGVuIHRoZXJlIGlzIG5vIHNuYXBzaG90LiBVc2VmdWwgd2hlbiBhIGRvbWFpbiBoYXMgYSBiZXR0ZXIgc291cmNlXG4gICAqIG9mIHRydXRoIHRoYW4gdGhlIGNhY2hlIOKAlCBlLmcuIGZhbGxpbmcgYmFjayB0byB0aGUgb3JkZXItZGV0YWlscyBBUElcbiAgICogZm9yIGFuIG9yZGVyIHdob3NlIHRyYW5zaXRpb25zIHByZWRhdGUgYnVzIGluc3RydW1lbnRhdGlvbi5cbiAgICovXG4gIGdldFNuYXBzaG90PyhjaGFubmVsOiBzdHJpbmcpOiBQcm9taXNlPFJlYWx0aW1lRXZlbnQgfCBudWxsPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTdWJzY3JpcHRpb24ge1xuICByZWFkb25seSBjaGFubmVsOiBzdHJpbmc7XG4gIHVuc3Vic2NyaWJlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhbHRpbWVDbGllbnQge1xuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIGEgY2hhbm5lbC4gQ2hhbm5lbHMgYXJlIHRoZSBvbmx5IGNvbmNlcHQgaGVyZSDigJQgdGhlXG4gICAqIHJlYWx0aW1lIGxheWVyIGtub3dzIG5vdGhpbmcgYWJvdXQgb3JkZXJzOyBgL29yZGVycy97aWR9YCBpcyBhXG4gICAqIG5hbWluZyBjb252ZW50aW9uIGVuZm9yY2VkIGJ5IHRoZSBzZXJ2aWNlJ3MgbmFtZXNwYWNlIHBvbGljeSwgbm90IGJ5XG4gICAqIHRoaXMgY2xpZW50LlxuICAgKlxuICAgKiBPbiB0aGlzIGNhbGwsIGFuZCBhZ2FpbiBhZnRlciBldmVyeSByZWNvbm5lY3QsIHRoZSBTREsgb3BlbnMgdGhlXG4gICAqIHN1YnNjcmlwdGlvbiAqZmlyc3QqIGFuZCBvbmx5IHRoZW4gZmV0Y2hlcyB0aGUgY2hhbm5lbCdzIGxhc3QgdmFsdWUsXG4gICAqIHNvIG5vIGV2ZW50IGNhbiBmYWxsIGJldHdlZW4gdGhlIHNuYXBzaG90IGFuZCB0aGUgc3RyZWFtLlxuICAgKi9cbiAgc3Vic2NyaWJlKGNoYW5uZWw6IHN0cmluZywgb3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucyk6IFN1YnNjcmlwdGlvbjtcbiAgLyoqIENsb3NlIHRoZSBzaGFyZWQgc29ja2V0IGFuZCBzdG9wIHJlY29ubmVjdGluZy4gKi9cbiAgY2xvc2UoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUNvbm5lY3RPcHRpb25zIHtcbiAgLyoqIFJlc29sdmVzIGVuZHBvaW50cyBmcm9tIHRoZSBidWlsdC1pbiB0YWJsZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGVuZHBvaW50c2AuICovXG4gIGVudj86IFJlYWx0aW1lRW52O1xuICAvKiogRXhwbGljaXQgZW5kcG9pbnRzLCBmb3IgZW52aXJvbm1lbnRzIG5vdCBpbiB0aGUgdGFibGUuICovXG4gIGVuZHBvaW50cz86IFJlYWx0aW1lRW5kcG9pbnRzO1xuICAvKipcbiAgICogU3VwcGxpZXMgdGhlIHBsYXRmb3JtIEpXVC4gQ2FsbGVkIG9uIGNvbm5lY3QsIG9uIGV2ZXJ5IChyZSlzdWJzY3JpYmUsXG4gICAqIGFuZCBhZ2FpbiBhZnRlciBhIHRva2VuLWV4cGlyeSByZWNvbm5lY3Qg4oCUIHNvIHJldHVybmluZyBhIGZyZXNoIHRva2VuXG4gICAqIGZyb20geW91ciBzZXNzaW9uIHN0b3JlIGlzIGVub3VnaCB0byBrZWVwIGEgbG9uZy1saXZlZCBjb25uZWN0aW9uXG4gICAqIGF1dGhlbnRpY2F0ZWQuXG4gICAqL1xuICBnZXRUb2tlbigpOiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG4gIC8qKiBJbmplY3QgYSBXZWJTb2NrZXQgaW1wbGVtZW50YXRpb24uIERlZmF1bHRzIHRvIGBnbG9iYWxUaGlzLldlYlNvY2tldGAuICovXG4gIHdlYlNvY2tldEltcGw/OiBXZWJTb2NrZXRDdG9yO1xuICAvKiogSW5qZWN0IGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gZm9yIHNuYXBzaG90IGZldGNoZXMuIERlZmF1bHRzIHRvIGBnbG9iYWxUaGlzLmZldGNoYC4gKi9cbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgLyoqIEJhY2tvZmYgY2VpbGluZyBmb3IgcmVjb25uZWN0cy4gRGVmYXVsdCAzMF8wMDAuICovXG4gIG1heFJlY29ubmVjdERlbGF5TXM/OiBudW1iZXI7XG59XG5cbmludGVyZmFjZSBTdWJzY3JpcHRpb25SZWNvcmQge1xuICBpZDogc3RyaW5nO1xuICBjaGFubmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IFN1YnNjcmliZU9wdGlvbnM7XG4gIC8qKiBIaWdoZXN0IGVudmVsb3BlIGlkIGRlbGl2ZXJlZCBzbyBmYXIg4oCUIHRoZSBvcmRlcmluZy9kZWR1cGUgZ3VhcmQuICovXG4gIGxhc3RFdmVudElkPzogc3RyaW5nO1xuICAvKiogQ2xlYXJlZCBvbiBzb2NrZXQgbG9zcywgc2V0IG9uY2UgdGhlIHNlcnZlciBhY2tzIHRoZSBzdWJzY3JpYmUuICovXG4gIHNlbnQ6IGJvb2xlYW47XG4gIGNsb3NlZDogYm9vbGVhbjtcbn1cblxuY29uc3QgQkFTRV9SRUNPTk5FQ1RfREVMQVlfTVMgPSA1MDA7XG5jb25zdCBERUZBVUxUX01BWF9SRUNPTk5FQ1RfREVMQVlfTVMgPSAzMF8wMDA7XG5jb25zdCBERUZBVUxUX0tFRVBBTElWRV9USU1FT1VUX01TID0gNjBfMDAwO1xuLyoqXG4gKiBHcmFjZSBvbiB0b3Agb2YgdGhlIHNlcnZlcidzIGFkdmVydGlzZWQga2VlcGFsaXZlIGludGVydmFsIGJlZm9yZSB3ZVxuICogY2FsbCB0aGUgY29ubmVjdGlvbiBkZWFkLiBBIGBrYWAgaXMgZHVlIGV2ZXJ5IGBjb25uZWN0aW9uVGltZW91dE1zYDtcbiAqIHdhaXRpbmcgMS41w5cgYWJzb3JicyBub3JtYWwgaml0dGVyIHdpdGhvdXQgbGV0dGluZyBhIGJsYWNrLWhvbGVkXG4gKiBzb2NrZXQgc2l0IHRoZXJlIGxvb2tpbmcgaGVhbHRoeS5cbiAqL1xuY29uc3QgS0VFUEFMSVZFX0dSQUNFID0gMS41O1xuLyoqXG4gKiBIb3cgbG9uZyBhIHNvY2tldCBtYXkgc2l0IGJldHdlZW4gXCJ3ZSBzdGFydGVkIG9wZW5pbmcgaXRcIiBhbmRcbiAqIGBjb25uZWN0aW9uX2Fja2AgYmVmb3JlIHdlIGdpdmUgdXAgb24gaXQuXG4gKlxuICogVGhlIGtlZXBhbGl2ZSB3YXRjaGRvZyBjYW4gb25seSBzdGFydCBvbmNlIGEgZnJhbWUgaGFzIGFycml2ZWQsIHNvIGl0XG4gKiBjYW5ub3QgY292ZXIgdGhlIGhhbmRzaGFrZSBpdHNlbGYuIEEgc29ja2V0IHdob3NlIFRDUC9XUyBvcGVuIHN1Y2NlZWRzXG4gKiBidXQgd2hpY2ggdGhlbiBnb2VzIHNpbGVudCAtIGJsYWNrLWhvbGVkIGNvbm5lY3Rpb24sIE5BVCBtYXBwaW5nXG4gKiBkcm9wcGVkIHJpZ2h0IGFmdGVyIG9wZW4sIHJhZGlvIGRvemluZyAtIHdvdWxkIG90aGVyd2lzZSBuZXZlciBmaXJlXG4gKiBgb25jbG9zZWAsIG5ldmVyIGFybSB0aGUga2VlcGFsaXZlLCBhbmQgbGVhdmUgYGNvbm5lY3RpbmdgIHRydWUgc29cbiAqIGBlbnN1cmVTb2NrZXQoKWAgc2hvcnQtY2lyY3VpdHMgZm9yZXZlci4gRXZlcnkgc3Vic2NyaXB0aW9uIHdvdWxkIGJlXG4gKiBzaWxlbnRseSBkZWFkIHdpdGggbm90aGluZyBzdXJmYWNlZC5cbiAqXG4gKiBJdCBjb3ZlcnMgdGhlIHRva2VuIHN0ZXAgdG9vLCB3aGljaCBpcyB3aHkgaXQgaXMgYXJtZWQgYmVmb3JlXG4gKiBgZ2V0VG9rZW4oKWAgaXMgYXdhaXRlZCByYXRoZXIgdGhhbiBhZnRlciB0aGUgc29ja2V0IGV4aXN0czogYW5cbiAqIGFwcC1zdXBwbGllZCB0b2tlbiByZWZyZXNoIGlzIHVzdWFsbHkgYSBgZmV0Y2hgLCBhbmQgYSBgZmV0Y2hgIHRoYXQgbmV2ZXJcbiAqIHNldHRsZXMgcHJvZHVjZXMgdGhlIHNhbWUgcGVybWFuZW50IHdlZGdlIHdpdGhvdXQgZXZlciBjcmVhdGluZyBhIHNvY2tldC5cbiAqL1xuY29uc3QgQ09OTkVDVF9ERUFETElORV9NUyA9IDE1XzAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3Qob3B0aW9uczogUmVhbHRpbWVDb25uZWN0T3B0aW9ucyk6IFJlYWx0aW1lQ2xpZW50IHtcbiAgY29uc3QgZW5kcG9pbnRzID0gcmVzb2x2ZUVuZHBvaW50cyhvcHRpb25zKTtcbiAgY29uc3QgV2ViU29ja2V0SW1wbCA9IG9wdGlvbnMud2ViU29ja2V0SW1wbCA/PyBnbG9iYWxXZWJTb2NrZXQoKTtcbiAgY29uc3QgZmV0Y2hGbiA9IG9wdGlvbnMuZmV0Y2hGbiA/PyAoZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gpO1xuICBjb25zdCBtYXhSZWNvbm5lY3REZWxheU1zID0gb3B0aW9ucy5tYXhSZWNvbm5lY3REZWxheU1zID8/IERFRkFVTFRfTUFYX1JFQ09OTkVDVF9ERUxBWV9NUztcblxuICBjb25zdCBzdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIFN1YnNjcmlwdGlvblJlY29yZD4oKTtcblxuICBsZXQgc29ja2V0OiBNaW5pbWFsV2ViU29ja2V0IHwgdW5kZWZpbmVkO1xuICBsZXQgYWNrZWQgPSBmYWxzZTtcbiAgbGV0IGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgbGV0IGNsb3NlZEJ5Q2FsbGVyID0gZmFsc2U7XG4gIGxldCByZWNvbm5lY3RBdHRlbXB0ID0gMDtcbiAgbGV0IHJlY29ubmVjdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGtlZXBhbGl2ZVRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGNvbm5lY3RUaW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCB1bmRlZmluZWQ7XG4gIGxldCBrZWVwYWxpdmVUaW1lb3V0TXMgPSBERUZBVUxUX0tFRVBBTElWRV9USU1FT1VUX01TO1xuICAvKipcbiAgICogQnVtcGVkIGZvciBldmVyeSBjb25uZWN0IGF0dGVtcHQsIGFuZCBhZ2FpbiB3aGVuIHRoZSBjb25uZWN0IGRlYWRsaW5lXG4gICAqIGFiYW5kb25zIG9uZS4gYGVuc3VyZVNvY2tldGAncyBhc3luYyBib2R5IGNoZWNrcyBpdCBhZnRlciBldmVyeSBgYXdhaXRgXG4gICAqIHNvIGEgc2xvdyBgZ2V0VG9rZW4oKWAgdGhhdCBzZXR0bGVzIGxhdGUgY2Fubm90IGFkb3B0IGl0cyBzb2NrZXQgb3ZlciBhXG4gICAqIG5ld2VyIGF0dGVtcHQncy5cbiAgICovXG4gIGxldCBjb25uZWN0R2VuZXJhdGlvbiA9IDA7XG5cbiAgLy8g4pSA4pSA4pSAIFNvY2tldCBsaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gZW5zdXJlU29ja2V0KCk6IHZvaWQge1xuICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCBjb25uZWN0aW5nIHx8IHNvY2tldCkgcmV0dXJuO1xuICAgIGNvbm5lY3RpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGdlbmVyYXRpb24gPSArK2Nvbm5lY3RHZW5lcmF0aW9uO1xuXG4gICAgLy8gQXJtZWQgQkVGT1JFIHRoZSB0b2tlbiBhd2FpdCwgbm90IGFmdGVyIHRoZSBzb2NrZXQgZXhpc3RzLiBgZ2V0VG9rZW4oKWBcbiAgICAvLyBpcyBhcHAtc3VwcGxpZWQgYW5kIHRoZSBub3JtYWwgaW1wbGVtZW50YXRpb24gaXMgYSBgZmV0Y2hgLCB3aGljaCBjYW5cbiAgICAvLyBoYW5nIGluZGVmaW5pdGVseSBhY3Jvc3MgYSBuZXR3b3JrIHRyYW5zaXRpb24uIElmIGl0IG5ldmVyIHNldHRsZXMgYW5kXG4gICAgLy8gdGhlIGRlYWRsaW5lIHdlcmUgYXJtZWQgbGF0ZXIsIGBjb25uZWN0aW5nYCB3b3VsZCBzdGF5IHRydWUgd2l0aCBub1xuICAgIC8vIHNvY2tldCBhbmQgbm8gdGltZXIsIGBzY2hlZHVsZVJlY29ubmVjdCgpYCB3b3VsZCBuZXZlciBydW4sIGFuZCBldmVyeVxuICAgIC8vIHN1YnNlcXVlbnQgYHN1YnNjcmliZSgpYCB3b3VsZCBzaG9ydC1jaXJjdWl0IG9uIGBjb25uZWN0aW5nYCAtIHRoZVxuICAgIC8vIGNsaWVudCBkZWFkIGZvciB0aGUgcGFnZSdzIGxpZmV0aW1lIHdpdGggbm90aGluZyBvbiBgb25FcnJvcmAuXG4gICAgYXJtQ29ubmVjdERlYWRsaW5lKGdlbmVyYXRpb24pO1xuXG4gICAgdm9pZCAoYXN5bmMgKCkgPT4ge1xuICAgICAgbGV0IHdzOiBNaW5pbWFsV2ViU29ja2V0O1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBvcHRpb25zLmdldFRva2VuKCk7XG4gICAgICAgIC8vIFRoZSBkZWFkbGluZSBtYXkgaGF2ZSBhYmFuZG9uZWQgdGhpcyBhdHRlbXB0IHdoaWxlIHRoZSB0b2tlbiB3YXNcbiAgICAgICAgLy8gcGVuZGluZy4gQmFpbCBiZWZvcmUgYnVpbGRpbmcgYSBzb2NrZXQgbm9ib2R5IHdpbGwgb3duLlxuICAgICAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgICAgY29uc3QgaGVhZGVyID0gYXV0aEhlYWRlcihlbmRwb2ludHMuaHR0cERvbWFpbiwgdG9rZW4pO1xuICAgICAgICB3cyA9IG5ldyBXZWJTb2NrZXRJbXBsKGB3c3M6Ly8ke2VuZHBvaW50cy5yZWFsdGltZURvbWFpbn0vZXZlbnQvcmVhbHRpbWVgLCBbXG4gICAgICAgICAgRVZFTlRfV1NfU1VCUFJPVE9DT0wsXG4gICAgICAgICAgYXV0aFN1YnByb3RvY29sKGhlYWRlciksXG4gICAgICAgIF0pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChnZW5lcmF0aW9uICE9PSBjb25uZWN0R2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgICAgIGJyb2FkY2FzdEVycm9yKHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IGZhaWxlZCB0byBvcGVuIGNvbm5lY3Rpb24nKSk7XG4gICAgICAgIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsb3NlZEJ5Q2FsbGVyIHx8IGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSB7XG4gICAgICAgIC8vIFN1cGVyc2VkZWQgYmV0d2VlbiB0aGUgdG9rZW4gcmVzb2x2aW5nIGFuZCB0aGUgc29ja2V0IG9wZW5pbmcuXG4gICAgICAgIC8vIENsb3NlIHRoZSBvcnBoYW4gcmF0aGVyIHRoYW4gbGVha2luZyBpdC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB3cy5jbG9zZSgxMDAwLCAnc3VwZXJzZWRlZCcpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbzsgaXQgd2FzIG5ldmVyIGFkb3B0ZWQuXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzb2NrZXQgPSB3cztcbiAgICAgIHdzLm9ub3BlbiA9ICgpID0+IHtcbiAgICAgICAgd3Muc2VuZChjb25uZWN0aW9uSW5pdEZyYW1lKCkpO1xuICAgICAgfTtcbiAgICAgIHdzLm9ubWVzc2FnZSA9IChldikgPT4ge1xuICAgICAgICBhcm1LZWVwYWxpdmUoKTtcbiAgICAgICAgaGFuZGxlRnJhbWUodHlwZW9mIGV2LmRhdGEgPT09ICdzdHJpbmcnID8gZXYuZGF0YSA6IFN0cmluZyhldi5kYXRhKSk7XG4gICAgICB9O1xuICAgICAgd3Mub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgLy8gYG9uY2xvc2VgIGFsd2F5cyBmb2xsb3dzOyByZWNvbm5lY3QgaXMgZHJpdmVuIGZyb20gdGhlcmUgc28gdGhlXG4gICAgICAgIC8vIHR3byBwYXRocyBjYW4ndCBib3RoIHNjaGVkdWxlIGEgcmV0cnkuXG4gICAgICB9O1xuICAgICAgd3Mub25jbG9zZSA9ICgpID0+IHtcbiAgICAgICAgdGVhcmRvd25Tb2NrZXQoKTtcbiAgICAgICAgaWYgKCFjbG9zZWRCeUNhbGxlcikgc2NoZWR1bGVSZWNvbm5lY3QoKTtcbiAgICAgIH07XG4gICAgfSkoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlYXJkb3duU29ja2V0KCk6IHZvaWQge1xuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHNvY2tldC5vbm9wZW4gPSBudWxsO1xuICAgICAgc29ja2V0Lm9ubWVzc2FnZSA9IG51bGw7XG4gICAgICBzb2NrZXQub25lcnJvciA9IG51bGw7XG4gICAgICBzb2NrZXQub25jbG9zZSA9IG51bGw7XG4gICAgfVxuICAgIHNvY2tldCA9IHVuZGVmaW5lZDtcbiAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgYWNrZWQgPSBmYWxzZTtcbiAgICBjbGVhcktlZXBhbGl2ZSgpO1xuICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgcmVjb3JkLnNlbnQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWlsIGEgaGFuZHNoYWtlIHRoYXQgbmV2ZXIgY29tcGxldGVzLiBDbGVhcmVkIGJ5IGBjb25uZWN0aW9uX2Fja2AsXG4gICAqIGFmdGVyIHdoaWNoIHRoZSBrZWVwYWxpdmUgd2F0Y2hkb2cgdGFrZXMgb3Zlci5cbiAgICovXG4gIGZ1bmN0aW9uIGFybUNvbm5lY3REZWFkbGluZShnZW5lcmF0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjbGVhckNvbm5lY3REZWFkbGluZSgpO1xuICAgIGNvbm5lY3RUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSByZXR1cm47XG4gICAgICAvLyBBYmFuZG9uIHRoaXMgYXR0ZW1wdCBieSByZXRpcmluZyBpdHMgZ2VuZXJhdGlvbi4gQSBgZ2V0VG9rZW4oKWAgc3RpbGxcbiAgICAgIC8vIHBlbmRpbmcgd2hlbiB0aGlzIGZpcmVzIGNhbiB0aGVuIG5vIGxvbmdlciBpbnN0YWxsIGl0cyBzb2NrZXQsIHdoaWNoXG4gICAgICAvLyB3b3VsZCBvdGhlcndpc2UgbGFuZCB1bi1kZWFkbGluZWQgYW5kIHVuLWFja2VkIG9uIHRvcCBvZiB0aGUgZnJlc2hcbiAgICAgIC8vIGF0dGVtcHQgc2NoZWR1bGVkIGJlbG93LlxuICAgICAgY29ubmVjdEdlbmVyYXRpb24rKztcbiAgICAgIGNvbnN0IHN0YWxsZWQgPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgYnJvYWRjYXN0RXJyb3IobmV3IEVycm9yKCdyZWFsdGltZTogY29ubmVjdGlvbiB0aW1lZCBvdXQgYmVmb3JlIGNvbm5lY3Rpb25fYWNrJykpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhbGxlZD8uY2xvc2UoNDAwMSwgJ2Nvbm5lY3QgdGltZW91dCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFscmVhZHkgZ29uZTsgdGhlIHJlY29ubmVjdCBiZWxvdyBpcyB3aGF0IG1hdHRlcnMuXG4gICAgICB9XG4gICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH0sIENPTk5FQ1RfREVBRExJTkVfTVMpO1xuICAgIHVucmVmKGNvbm5lY3RUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhckNvbm5lY3REZWFkbGluZSgpOiB2b2lkIHtcbiAgICBpZiAoY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQoY29ubmVjdFRpbWVyKTtcbiAgICBjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBzY2hlZHVsZVJlY29ubmVjdCgpOiB2b2lkIHtcbiAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgcmVjb25uZWN0VGltZXIpIHJldHVybjtcbiAgICBpZiAoc3Vic2NyaXB0aW9ucy5zaXplID09PSAwKSByZXR1cm47XG4gICAgY29uc3QgZGVsYXkgPSBqaXR0ZXJlZEJhY2tvZmYocmVjb25uZWN0QXR0ZW1wdCwgbWF4UmVjb25uZWN0RGVsYXlNcyk7XG4gICAgcmVjb25uZWN0QXR0ZW1wdCsrO1xuICAgIHJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgICAgIGVuc3VyZVNvY2tldCgpO1xuICAgIH0sIGRlbGF5KTtcbiAgICB1bnJlZihyZWNvbm5lY3RUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBhcm1LZWVwYWxpdmUoKTogdm9pZCB7XG4gICAgY2xlYXJLZWVwYWxpdmUoKTtcbiAgICBrZWVwYWxpdmVUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gTm8gZnJhbWUg4oCUIG5vdCBldmVuIGEgYGthYCDigJQgd2l0aGluIHRoZSBncmFjZSB3aW5kb3cuIFRoZSBzb2NrZXRcbiAgICAgIC8vIG1heSBsb29rIG9wZW4gd2hpbGUgZGVsaXZlcmluZyBub3RoaW5nIChiYWNrZ3JvdW5kZWQgdGFiLCBkb3ppbmdcbiAgICAgIC8vIHJhZGlvLCBzaWxlbnRseSBkcm9wcGVkIE5BVCBtYXBwaW5nKTsgZm9yY2UgaXQgY2xvc2VkIHNvIHRoZVxuICAgICAgLy8gbm9ybWFsIHJlY29ubmVjdCBwYXRoIHJ1bnMuXG4gICAgICBjb25zdCBkZWFkID0gc29ja2V0O1xuICAgICAgdGVhcmRvd25Tb2NrZXQoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRlYWQ/LmNsb3NlKDQwMDAsICdrZWVwYWxpdmUgdGltZW91dCcpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIEFscmVhZHkgZ29uZTsgdGhlIHJlY29ubmVjdCBiZWxvdyBpcyB3aGF0IG1hdHRlcnMuXG4gICAgICB9XG4gICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgIH0sIGtlZXBhbGl2ZVRpbWVvdXRNcyAqIEtFRVBBTElWRV9HUkFDRSk7XG4gICAgdW5yZWYoa2VlcGFsaXZlVGltZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYXJLZWVwYWxpdmUoKTogdm9pZCB7XG4gICAgaWYgKGtlZXBhbGl2ZVRpbWVyKSBjbGVhclRpbWVvdXQoa2VlcGFsaXZlVGltZXIpO1xuICAgIGtlZXBhbGl2ZVRpbWVyID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8g4pSA4pSA4pSAIEZyYW1lIGhhbmRsaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGZ1bmN0aW9uIGhhbmRsZUZyYW1lKHJhdzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgZnJhbWUgPSBwYXJzZVNlcnZlckZyYW1lKHJhdyk7XG4gICAgaWYgKCFmcmFtZSkgcmV0dXJuO1xuXG4gICAgc3dpdGNoIChmcmFtZS50eXBlKSB7XG4gICAgICBjYXNlICdjb25uZWN0aW9uX2Fjayc6IHtcbiAgICAgICAgYWNrZWQgPSB0cnVlO1xuICAgICAgICBjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgICAgIHJlY29ubmVjdEF0dGVtcHQgPSAwO1xuICAgICAgICBjbGVhckNvbm5lY3REZWFkbGluZSgpO1xuICAgICAgICBjb25zdCBhZHZlcnRpc2VkID0gKGZyYW1lIGFzIHsgY29ubmVjdGlvblRpbWVvdXRNcz86IG51bWJlciB9KS5jb25uZWN0aW9uVGltZW91dE1zO1xuICAgICAgICBpZiAodHlwZW9mIGFkdmVydGlzZWQgPT09ICdudW1iZXInICYmIGFkdmVydGlzZWQgPiAwKSBrZWVwYWxpdmVUaW1lb3V0TXMgPSBhZHZlcnRpc2VkO1xuICAgICAgICBhcm1LZWVwYWxpdmUoKTtcbiAgICAgICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgdm9pZCBvcGVuU3Vic2NyaXB0aW9uKHJlY29yZCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2thJzpcbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSAnc3Vic2NyaWJlX3N1Y2Nlc3MnOiB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2RhdGEnOiB7XG4gICAgICAgIGNvbnN0IGRhdGFGcmFtZSA9IGZyYW1lIGFzIERhdGFGcmFtZTtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gc3Vic2NyaXB0aW9ucy5nZXQoZGF0YUZyYW1lLmlkKTtcbiAgICAgICAgaWYgKCFyZWNvcmQgfHwgcmVjb3JkLmNsb3NlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXlsb2FkID0gcGFyc2VEYXRhRnJhbWVFdmVudChkYXRhRnJhbWUpO1xuICAgICAgICBjb25zdCBldmVudCA9IGFzUmVhbHRpbWVFdmVudChwYXlsb2FkKTtcbiAgICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgbmV3IEVycm9yKGByZWFsdGltZTogZHJvcHBlZCBtYWxmb3JtZWQgZXZlbnQgb24gJHtyZWNvcmQuY2hhbm5lbH1gKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRlbGl2ZXIocmVjb3JkLCBldmVudCwgJ2xpdmUnKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnc3Vic2NyaWJlX2Vycm9yJzpcbiAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fZXJyb3InOlxuICAgICAgY2FzZSAncHVibGlzaF9lcnJvcic6IHtcbiAgICAgICAgY29uc3QgZXJyb3JGcmFtZSA9IGZyYW1lIGFzIEVycm9yRnJhbWU7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgcmVhbHRpbWU6ICR7ZXJyb3JGcmFtZU1lc3NhZ2UoZXJyb3JGcmFtZSl9YDtcbiAgICAgICAgaWYgKGVycm9yRnJhbWUuaWQpIHtcbiAgICAgICAgICBjb25zdCByZWNvcmQgPSBzdWJzY3JpcHRpb25zLmdldChlcnJvckZyYW1lLmlkKTtcbiAgICAgICAgICBpZiAocmVjb3JkKSB7XG4gICAgICAgICAgICByZXBvcnRFcnJvcihyZWNvcmQsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyb2FkY2FzdEVycm9yKG5ldyBFcnJvcihtZXNzYWdlKSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBkZWxpdmVyKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCBldmVudDogUmVhbHRpbWVFdmVudCwgb3JpZ2luOiBVcGRhdGVNZXRhWydvcmlnaW4nXSkge1xuICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgaWYgKCFpc05ld2VyKGV2ZW50LmlkLCByZWNvcmQubGFzdEV2ZW50SWQpKSByZXR1cm47XG4gICAgcmVjb3JkLmxhc3RFdmVudElkID0gZXZlbnQuaWQ7XG4gICAgdHJ5IHtcbiAgICAgIHJlY29yZC5vcHRpb25zLm9uVXBkYXRlKGV2ZW50LCB7IGNoYW5uZWw6IHJlY29yZC5jaGFubmVsLCBvcmlnaW4gfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBvcnRFcnJvcihyZWNvcmQsIHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IG9uVXBkYXRlIHRocmV3JykpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlcG9ydEVycm9yKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCBlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBpZiAoIXJlY29yZC5vcHRpb25zLm9uRXJyb3IpIHJldHVybjtcbiAgICB0cnkge1xuICAgICAgcmVjb3JkLm9wdGlvbnMub25FcnJvcihlcnJvcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBBIHRocm93aW5nIGVycm9yIGhhbmRsZXIgbXVzdCBub3QgdGFrZSBkb3duIHRoZSBzb2NrZXQuXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYnJvYWRjYXN0RXJyb3IoZXJyb3I6IEVycm9yKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCByZWNvcmQgb2Ygc3Vic2NyaXB0aW9ucy52YWx1ZXMoKSkgcmVwb3J0RXJyb3IocmVjb3JkLCBlcnJvcik7XG4gIH1cblxuICAvLyDilIDilIDilIAgU3Vic2NyaXB0aW9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICAvKipcbiAgICogT3BlbiAob3IgcmUtb3Blbikgb25lIHN1YnNjcmlwdGlvbjogc2VuZCB0aGUgc3Vic2NyaWJlIGZyYW1lIGZpcnN0LFxuICAgKiB0aGVuIGZldGNoIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZS5cbiAgICpcbiAgICogT3JkZXIgbWF0dGVycy4gQXBwU3luYyBFdmVudHMgaGFzIG5vIHJldGVudGlvbiwgc28gYW55dGhpbmcgcHVibGlzaGVkXG4gICAqIGJldHdlZW4gXCJ3ZSBhc2tlZCBmb3IgdGhlIHNuYXBzaG90XCIgYW5kIFwidGhlIHN0cmVhbSBpcyBsaXZlXCIgd291bGQgYmVcbiAgICogbG9zdCBmb3JldmVyLiBTdWJzY3JpYmluZyBmaXJzdCBtZWFucyB0aGUgd29yc3QgY2FzZSBpcyBhIGR1cGxpY2F0ZSxcbiAgICogd2hpY2ggdGhlIFVMSUQgZ3VhcmQgaW4gYGRlbGl2ZXJgIGFic29yYnMuXG4gICAqL1xuICBhc3luYyBmdW5jdGlvbiBvcGVuU3Vic2NyaXB0aW9uKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHJlY29yZC5jbG9zZWQgfHwgIXNvY2tldCB8fCAhYWNrZWQgfHwgcmVjb3JkLnNlbnQpIHJldHVybjtcbiAgICBsZXQgdG9rZW46IHN0cmluZztcbiAgICB0cnkge1xuICAgICAgdG9rZW4gPSBhd2FpdCBvcHRpb25zLmdldFRva2VuKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXBvcnRFcnJvcihyZWNvcmQsIHRvRXJyb3IoZXJyLCAncmVhbHRpbWU6IGdldFRva2VuIGZhaWxlZCcpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlY29yZC5jbG9zZWQgfHwgIXNvY2tldCB8fCBzb2NrZXQucmVhZHlTdGF0ZSAhPT0gV1NfT1BFTikgcmV0dXJuO1xuICAgIHJlY29yZC5zZW50ID0gdHJ1ZTtcbiAgICB0cnkge1xuICAgICAgc29ja2V0LnNlbmQoXG4gICAgICAgIHN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCwgcmVjb3JkLmNoYW5uZWwsIGF1dGhIZWFkZXIoZW5kcG9pbnRzLmh0dHBEb21haW4sIHRva2VuKSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVjb3JkLnNlbnQgPSBmYWxzZTtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogc3Vic2NyaWJlIGZyYW1lIGZhaWxlZCB0byBzZW5kJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBhd2FpdCBoeWRyYXRlKHJlY29yZCwgdG9rZW4pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gaHlkcmF0ZShyZWNvcmQ6IFN1YnNjcmlwdGlvblJlY29yZCwgdG9rZW46IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzbmFwc2hvdCA9IHJlY29yZC5vcHRpb25zLmdldFNuYXBzaG90XG4gICAgICAgID8gYXdhaXQgcmVjb3JkLm9wdGlvbnMuZ2V0U25hcHNob3QocmVjb3JkLmNoYW5uZWwpXG4gICAgICAgIDogYXdhaXQgZmV0Y2hMYXRlc3QocmVjb3JkLmNoYW5uZWwsIHRva2VuKTtcbiAgICAgIGlmIChzbmFwc2hvdCkgZGVsaXZlcihyZWNvcmQsIHNuYXBzaG90LCAnc25hcHNob3QnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsIGByZWFsdGltZTogc25hcHNob3QgZmV0Y2ggZmFpbGVkIGZvciAke3JlY29yZC5jaGFubmVsfWApKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBmZXRjaExhdGVzdChjaGFubmVsOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpOiBQcm9taXNlPFJlYWx0aW1lRXZlbnQgfCBudWxsPiB7XG4gICAgY29uc3QgdXJsID0gYCR7ZW5kcG9pbnRzLmFwaUJhc2V9L3YxL3JlYWx0aW1lL2xhdGVzdD9jaGFubmVsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGNoYW5uZWwpfWA7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgZmV0Y2hGbih1cmwsIHsgaGVhZGVyczogeyBhdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCB9IH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID09PSA0MDQpIHJldHVybiBudWxsO1xuICAgIGlmICghcmVzLm9rKSB0aHJvdyBuZXcgRXJyb3IoYHNuYXBzaG90IGZldGNoIHJldHVybmVkIEhUVFAgJHtyZXMuc3RhdHVzfWApO1xuICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgeyBldmVudD86IHVua25vd24gfTtcbiAgICByZXR1cm4gYXNSZWFsdGltZUV2ZW50KGJvZHk/LmV2ZW50KTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3Vic2NyaWJlKGNoYW5uZWwsIHN1YnNjcmliZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkID0ge1xuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgb3B0aW9uczogc3Vic2NyaWJlT3B0aW9ucyxcbiAgICAgICAgc2VudDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuXG4gICAgICBpZiAoYWNrZWQgJiYgc29ja2V0KSB7XG4gICAgICAgIHZvaWQgb3BlblN1YnNjcmlwdGlvbihyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgcmVjb3JkLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUocmVjb3JkLmlkKTtcbiAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBXU19PUEVOICYmIHJlY29yZC5zZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzb2NrZXQuc2VuZCh1bnN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFNvY2tldCBpcyBnb2luZyBhd2F5IGFueXdheTsgdGhlIHNlcnZlciBkcm9wcyB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgY2xvc2VkQnlDYWxsZXIgPSB0cnVlO1xuICAgICAgaWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuICAgICAgcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG9wZW4gPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3Blbj8uY2xvc2UoMTAwMCwgJ2NsaWVudCBjbG9zZWQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbyBpZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgdG9ybiBkb3duLlxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnM6IFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMpOiBSZWFsdGltZUVuZHBvaW50cyB7XG4gIGlmIChvcHRpb25zLmVuZHBvaW50cykgcmV0dXJuIG9wdGlvbnMuZW5kcG9pbnRzO1xuICBpZiAoIW9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFsdGltZS5jb25uZWN0OiBwYXNzIGVpdGhlciB7ZW52fSBvciB7ZW5kcG9pbnRzfScpO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gZW5kcG9pbnRzRm9yKG9wdGlvbnMuZW52KTtcbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIGFwaUJhc2U6IHJlc29sdmVkLmFwaUJhc2UgfHwgQVBJX0JBU0Vbb3B0aW9ucy5lbnZdIH07XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFdlYlNvY2tldCgpOiBXZWJTb2NrZXRDdG9yIHtcbiAgY29uc3QgY3RvciA9IChnbG9iYWxUaGlzIGFzIHsgV2ViU29ja2V0PzogV2ViU29ja2V0Q3RvciB9KS5XZWJTb2NrZXQ7XG4gIGlmICghY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZWFsdGltZS5jb25uZWN0OiBubyBnbG9iYWwgV2ViU29ja2V0LiBQYXNzIHt3ZWJTb2NrZXRJbXBsfSAoTm9kZSA8IDIyLCBvciBhIHRlc3QgZG91YmxlKS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0b3I7XG59XG5cbi8qKlxuICogRnVsbC1qaXR0ZXIgZXhwb25lbnRpYWwgYmFja29mZi4gRnVsbCBqaXR0ZXIgKHJhdGhlciB0aGFuXG4gKiBkZWxheSDCsSBqaXR0ZXIpIG1hdHRlcnMgaGVyZSBiZWNhdXNlIGV2ZXJ5IHRhYiB3YXRjaGluZyBhbiBvcmRlclxuICogcmVjb25uZWN0cyBvbiB0aGUgc2FtZSBzZXJ2ZXItc2lkZSBldmVudDsgd2l0aG91dCBpdCB0aGV5IHJldHJ5IGluXG4gKiBsb2Nrc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGppdHRlcmVkQmFja29mZihhdHRlbXB0OiBudW1iZXIsIG1heERlbGF5TXM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNlaWxpbmcgPSBNYXRoLm1pbihtYXhEZWxheU1zLCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyAqIDIgKiogYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWlsaW5nKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IChnbG9iYWxUaGlzIGFzIHsgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nIH0gfSkuY3J5cHRvO1xuICBpZiAoYz8ucmFuZG9tVVVJRCkgcmV0dXJuIGMucmFuZG9tVVVJRCgpO1xuICByZXR1cm4gYHN1Yi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yKGVycjogdW5rbm93biwgZmFsbGJhY2tNZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycjtcbiAgcmV0dXJuIG5ldyBFcnJvcihgJHtmYWxsYmFja01lc3NhZ2V9OiAke1N0cmluZyhlcnIpfWApO1xufVxuXG5mdW5jdGlvbiB1bnJlZih0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pOiB2b2lkIHtcbiAgY29uc3QgdCA9IHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG4gIGlmICh0eXBlb2YgdC51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdC51bnJlZigpO1xufVxuIl19
452
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yZWFsdGltZS9jb25uZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBNkpBLDBCQTRXQztBQTZCRCwwQ0FHQztBQXppQkQsdUNBQTBDO0FBQzFDLHlDQUEwRTtBQUMxRSwyQ0FBK0Y7QUFDL0YseUNBWW9CO0FBcUJwQixNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUM7QUE0RmxCLE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBQ3BDLE1BQU0sOEJBQThCLEdBQUcsTUFBTSxDQUFDO0FBQzlDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDO0FBQzVDOzs7OztHQUtHO0FBQ0gsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDO0FBQzVCOzs7Ozs7Ozs7Ozs7Ozs7O0dBZ0JHO0FBQ0gsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLENBQUM7QUFFbkMsU0FBZ0IsT0FBTyxDQUFDLE9BQStCO0lBQ3JELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksZUFBZSxFQUFFLENBQUM7SUFDakUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSyxVQUFVLENBQUMsS0FBc0IsQ0FBQztJQUN0RSxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSw4QkFBOEIsQ0FBQztJQUUxRixNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBOEIsQ0FBQztJQUU1RCxJQUFJLE1BQW9DLENBQUM7SUFDekMsSUFBSSxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2xCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztJQUN2QixJQUFJLGNBQWMsR0FBRyxLQUFLLENBQUM7SUFDM0IsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFDekIsSUFBSSxjQUF5RCxDQUFDO0lBQzlE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QixHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQztJQUM3RSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO0FBQzdDLENBQUM7QUFFRCxTQUFTLFFBQVE7SUFDZixNQUFNLENBQUMsR0FBSSxVQUF5RCxDQUFDLE1BQU0sQ0FBQztJQUM1RSxJQUFJLENBQUMsRUFBRSxVQUFVO1FBQUUsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDekMsT0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDckYsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEdBQVksRUFBRSxlQUF1QjtJQUNwRCxJQUFJLEdBQUcsWUFBWSxLQUFLO1FBQUUsT0FBTyxHQUFHLENBQUM7SUFDckMsT0FBTyxJQUFJLEtBQUssQ0FBQyxHQUFHLGVBQWUsS0FBSyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxLQUFvQztJQUNqRCxNQUFNLENBQUMsR0FBRyxLQUErQixDQUFDO0lBQzFDLElBQUksT0FBTyxDQUFDLENBQUMsS0FBSyxLQUFLLFVBQVU7UUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvQ2hhbm5lbFBhdGggfSBmcm9tICcuL2NoYW5uZWwnO1xuaW1wb3J0IHsgYXNSZWFsdGltZUV2ZW50LCBpc05ld2VyLCB0eXBlIFJlYWx0aW1lRXZlbnQgfSBmcm9tICcuL2VudmVsb3BlJztcbmltcG9ydCB7IEFQSV9CQVNFLCBlbmRwb2ludHNGb3IsIHR5cGUgUmVhbHRpbWVFbmRwb2ludHMsIHR5cGUgUmVhbHRpbWVFbnYgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5pbXBvcnQge1xuICBFVkVOVF9XU19TVUJQUk9UT0NPTCxcbiAgYXV0aEhlYWRlcixcbiAgYXV0aFN1YnByb3RvY29sLFxuICBjb25uZWN0aW9uSW5pdEZyYW1lLFxuICBlcnJvckZyYW1lTWVzc2FnZSxcbiAgcGFyc2VEYXRhRnJhbWVFdmVudCxcbiAgcGFyc2VTZXJ2ZXJGcmFtZSxcbiAgc3Vic2NyaWJlRnJhbWUsXG4gIHVuc3Vic2NyaWJlRnJhbWUsXG4gIHR5cGUgRGF0YUZyYW1lLFxuICB0eXBlIEVycm9yRnJhbWUsXG59IGZyb20gJy4vcHJvdG9jb2wnO1xuXG4vKipcbiAqIFRoZSBzbGljZSBvZiB0aGUgV2ViU29ja2V0IEFQSSB0aGlzIGNsaWVudCB1c2VzLlxuICpcbiAqIERlY2xhcmVkIHN0cnVjdHVyYWxseSByYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgRE9NIGxpYjogdGhlIFNES1xuICogY29tcGlsZXMgYWdhaW5zdCBgbGliOiBFUzIwMjJgIG9ubHksIGFuZCB0aGlzIGtlZXBzIHRoZSBjbGllbnRcbiAqIGluamVjdGFibGUgc28gdGVzdHMgY2FuIGRyaXZlIHRoZSBwcm90b2NvbCB3aXRoIGEgZmFrZSBzb2NrZXQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWluaW1hbFdlYlNvY2tldCB7XG4gIHJlYWR5U3RhdGU6IG51bWJlcjtcbiAgc2VuZChkYXRhOiBzdHJpbmcpOiB2b2lkO1xuICBjbG9zZShjb2RlPzogbnVtYmVyLCByZWFzb24/OiBzdHJpbmcpOiB2b2lkO1xuICBvbm9wZW46ICgoZXY6IHVua25vd24pID0+IHZvaWQpIHwgbnVsbDtcbiAgb25tZXNzYWdlOiAoKGV2OiB7IGRhdGE6IHVua25vd24gfSkgPT4gdm9pZCkgfCBudWxsO1xuICBvbmVycm9yOiAoKGV2OiB1bmtub3duKSA9PiB2b2lkKSB8IG51bGw7XG4gIG9uY2xvc2U6ICgoZXY6IHsgY29kZT86IG51bWJlcjsgcmVhc29uPzogc3RyaW5nIH0pID0+IHZvaWQpIHwgbnVsbDtcbn1cblxuZXhwb3J0IHR5cGUgV2ViU29ja2V0Q3RvciA9IG5ldyAodXJsOiBzdHJpbmcsIHByb3RvY29scz86IHN0cmluZyB8IHN0cmluZ1tdKSA9PiBNaW5pbWFsV2ViU29ja2V0O1xuXG5jb25zdCBXU19PUEVOID0gMTtcblxuLyoqIFdoZXJlIGFuIGV2ZW50IGhhbmRlZCB0byBgb25VcGRhdGVgIGNhbWUgZnJvbS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlTWV0YSB7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgLyoqXG4gICAqIGAnc25hcHNob3QnYCDigJQgdGhlIGNoYW5uZWwncyBsYXN0IHZhbHVlLCBmZXRjaGVkIGZyb20gdGhlIGxhc3QtdmFsdWVcbiAgICogY2FjaGUgb24gc3Vic2NyaWJlIG9yIGFmdGVyIGEgcmVjb25uZWN0LiBgJ2xpdmUnYCDigJQgZGVsaXZlcmVkIG92ZXJcbiAgICogdGhlIHNvY2tldC5cbiAgICpcbiAgICogQXBwcyBnZW5lcmFsbHkgZG9uJ3QgbmVlZCB0byBicmFuY2ggb24gdGhpczsgdGhlIFNESyBoYXMgYWxyZWFkeVxuICAgKiBvcmRlcmVkIGFuZCBkZS1kdXBsaWNhdGVkIGJvdGggc291cmNlcyBieSBVTElELiBJdCdzIHRoZXJlIGZvclxuICAgKiB0ZWxlbWV0cnkgYW5kIGZvciBVSXMgdGhhdCB3YW50IHRvIGRpc3Rpbmd1aXNoIFwicmVzdG9yZWRcIiBmcm9tXG4gICAqIFwianVzdCBoYXBwZW5lZFwiLlxuICAgKi9cbiAgb3JpZ2luOiAnc25hcHNob3QnIHwgJ2xpdmUnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmliZU9wdGlvbnMge1xuICAvKipcbiAgICogRmlyZXMgb25jZSB3aXRoIHRoZSBjaGFubmVsJ3MgbGF0ZXN0IGtub3duIHZhbHVlIChpZiBhbnkpLCB0aGVuIG9uXG4gICAqIGV2ZXJ5IGxpdmUgZXZlbnQuIE5ldmVyIGZpcmVzIHdpdGggYW4gZXZlbnQgb2xkZXIgdGhhbiBvbmUgYWxyZWFkeVxuICAgKiBkZWxpdmVyZWQgb24gdGhpcyBzdWJzY3JpcHRpb24uXG4gICAqL1xuICBvblVwZGF0ZShldmVudDogUmVhbHRpbWVFdmVudCwgbWV0YTogVXBkYXRlTWV0YSk6IHZvaWQ7XG4gIC8qKlxuICAgKiBTdWJzY3JpcHRpb24tbGV2ZWwgZmFpbHVyZXM6IGEgcmVqZWN0ZWQgc3Vic2NyaWJlLCBhIG1hbGZvcm1lZFxuICAgKiBmcmFtZSwgYSBmYWlsZWQgc25hcHNob3QgZmV0Y2guIFRyYW5zaWVudCBzb2NrZXQgZHJvcHMgYXJlIGhhbmRsZWRcbiAgICogaW50ZXJuYWxseSBieSB0aGUgcmVjb25uZWN0IGxvb3AgYW5kIGFyZSBub3Qgc3VyZmFjZWQgaGVyZS5cbiAgICovXG4gIG9uRXJyb3I/KGVycm9yOiBFcnJvcik6IHZvaWQ7XG4gIC8qKlxuICAgKiBSZXBsYWNlIHRoZSBidWlsdC1pbiBsYXN0LXZhbHVlIGZldGNoIGZvciB0aGlzIGNoYW5uZWwuIFJldHVybiBudWxsXG4gICAqIHdoZW4gdGhlcmUgaXMgbm8gc25hcHNob3QuIFVzZWZ1bCB3aGVuIGEgZG9tYWluIGhhcyBhIGJldHRlciBzb3VyY2VcbiAgICogb2YgdHJ1dGggdGhhbiB0aGUgY2FjaGUg4oCUIGUuZy4gZmFsbGluZyBiYWNrIHRvIHRoZSBvcmRlci1kZXRhaWxzIEFQSVxuICAgKiBmb3IgYW4gb3JkZXIgd2hvc2UgdHJhbnNpdGlvbnMgcHJlZGF0ZSBidXMgaW5zdHJ1bWVudGF0aW9uLlxuICAgKi9cbiAgZ2V0U25hcHNob3Q/KGNoYW5uZWw6IHN0cmluZyk6IFByb21pc2U8UmVhbHRpbWVFdmVudCB8IG51bGw+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN1YnNjcmlwdGlvbiB7XG4gIHJlYWRvbmx5IGNoYW5uZWw6IHN0cmluZztcbiAgdW5zdWJzY3JpYmUoKTogdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUNsaWVudCB7XG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gYSBjaGFubmVsLiBDaGFubmVscyBhcmUgdGhlIG9ubHkgY29uY2VwdCBoZXJlIOKAlCB0aGVcbiAgICogcmVhbHRpbWUgbGF5ZXIga25vd3Mgbm90aGluZyBhYm91dCBvcmRlcnM7IGAvb3JkZXJzL3tpZH1gIGlzIGFcbiAgICogbmFtaW5nIGNvbnZlbnRpb24gZW5mb3JjZWQgYnkgdGhlIHNlcnZpY2UncyBuYW1lc3BhY2UgcG9saWN5LCBub3QgYnlcbiAgICogdGhpcyBjbGllbnQuXG4gICAqXG4gICAqIE9uIHRoaXMgY2FsbCwgYW5kIGFnYWluIGFmdGVyIGV2ZXJ5IHJlY29ubmVjdCwgdGhlIFNESyBvcGVucyB0aGVcbiAgICogc3Vic2NyaXB0aW9uICpmaXJzdCogYW5kIG9ubHkgdGhlbiBmZXRjaGVzIHRoZSBjaGFubmVsJ3MgbGFzdCB2YWx1ZSxcbiAgICogc28gbm8gZXZlbnQgY2FuIGZhbGwgYmV0d2VlbiB0aGUgc25hcHNob3QgYW5kIHRoZSBzdHJlYW0uXG4gICAqL1xuICBzdWJzY3JpYmUoY2hhbm5lbDogc3RyaW5nLCBvcHRpb25zOiBTdWJzY3JpYmVPcHRpb25zKTogU3Vic2NyaXB0aW9uO1xuICAvKiogQ2xvc2UgdGhlIHNoYXJlZCBzb2NrZXQgYW5kIHN0b3AgcmVjb25uZWN0aW5nLiAqL1xuICBjbG9zZSgpOiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMge1xuICAvKiogUmVzb2x2ZXMgZW5kcG9pbnRzIGZyb20gdGhlIGJ1aWx0LWluIHRhYmxlLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgZW5kcG9pbnRzYC4gKi9cbiAgZW52PzogUmVhbHRpbWVFbnY7XG4gIC8qKiBFeHBsaWNpdCBlbmRwb2ludHMsIGZvciBlbnZpcm9ubWVudHMgbm90IGluIHRoZSB0YWJsZS4gKi9cbiAgZW5kcG9pbnRzPzogUmVhbHRpbWVFbmRwb2ludHM7XG4gIC8qKlxuICAgKiBTdXBwbGllcyB0aGUgcGxhdGZvcm0gSldULiBDYWxsZWQgb24gY29ubmVjdCwgb24gZXZlcnkgKHJlKXN1YnNjcmliZSxcbiAgICogYW5kIGFnYWluIGFmdGVyIGEgdG9rZW4tZXhwaXJ5IHJlY29ubmVjdCDigJQgc28gcmV0dXJuaW5nIGEgZnJlc2ggdG9rZW5cbiAgICogZnJvbSB5b3VyIHNlc3Npb24gc3RvcmUgaXMgZW5vdWdoIHRvIGtlZXAgYSBsb25nLWxpdmVkIGNvbm5lY3Rpb25cbiAgICogYXV0aGVudGljYXRlZC5cbiAgICovXG4gIGdldFRva2VuKCk6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPjtcbiAgLyoqIEluamVjdCBhIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi4gRGVmYXVsdHMgdG8gYGdsb2JhbFRoaXMuV2ViU29ja2V0YC4gKi9cbiAgd2ViU29ja2V0SW1wbD86IFdlYlNvY2tldEN0b3I7XG4gIC8qKiBJbmplY3QgYSBmZXRjaCBpbXBsZW1lbnRhdGlvbiBmb3Igc25hcHNob3QgZmV0Y2hlcy4gRGVmYXVsdHMgdG8gYGdsb2JhbFRoaXMuZmV0Y2hgLiAqL1xuICBmZXRjaEZuPzogdHlwZW9mIGZldGNoO1xuICAvKiogQmFja29mZiBjZWlsaW5nIGZvciByZWNvbm5lY3RzLiBEZWZhdWx0IDMwXzAwMC4gKi9cbiAgbWF4UmVjb25uZWN0RGVsYXlNcz86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIFN1YnNjcmlwdGlvblJlY29yZCB7XG4gIGlkOiBzdHJpbmc7XG4gIGNoYW5uZWw6IHN0cmluZztcbiAgb3B0aW9uczogU3Vic2NyaWJlT3B0aW9ucztcbiAgLyoqIEhpZ2hlc3QgZW52ZWxvcGUgaWQgZGVsaXZlcmVkIHNvIGZhciDigJQgdGhlIG9yZGVyaW5nL2RlZHVwZSBndWFyZC4gKi9cbiAgbGFzdEV2ZW50SWQ/OiBzdHJpbmc7XG4gIC8qKiBDbGVhcmVkIG9uIHNvY2tldCBsb3NzLCBzZXQgb25jZSB0aGUgc2VydmVyIGFja3MgdGhlIHN1YnNjcmliZS4gKi9cbiAgc2VudDogYm9vbGVhbjtcbiAgY2xvc2VkOiBib29sZWFuO1xufVxuXG5jb25zdCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDUwMDtcbmNvbnN0IERFRkFVTFRfTUFYX1JFQ09OTkVDVF9ERUxBWV9NUyA9IDMwXzAwMDtcbmNvbnN0IERFRkFVTFRfS0VFUEFMSVZFX1RJTUVPVVRfTVMgPSA2MF8wMDA7XG4vKipcbiAqIEdyYWNlIG9uIHRvcCBvZiB0aGUgc2VydmVyJ3MgYWR2ZXJ0aXNlZCBrZWVwYWxpdmUgaW50ZXJ2YWwgYmVmb3JlIHdlXG4gKiBjYWxsIHRoZSBjb25uZWN0aW9uIGRlYWQuIEEgYGthYCBpcyBkdWUgZXZlcnkgYGNvbm5lY3Rpb25UaW1lb3V0TXNgO1xuICogd2FpdGluZyAxLjXDlyBhYnNvcmJzIG5vcm1hbCBqaXR0ZXIgd2l0aG91dCBsZXR0aW5nIGEgYmxhY2staG9sZWRcbiAqIHNvY2tldCBzaXQgdGhlcmUgbG9va2luZyBoZWFsdGh5LlxuICovXG5jb25zdCBLRUVQQUxJVkVfR1JBQ0UgPSAxLjU7XG4vKipcbiAqIEhvdyBsb25nIGEgc29ja2V0IG1heSBzaXQgYmV0d2VlbiBcIndlIHN0YXJ0ZWQgb3BlbmluZyBpdFwiIGFuZFxuICogYGNvbm5lY3Rpb25fYWNrYCBiZWZvcmUgd2UgZ2l2ZSB1cCBvbiBpdC5cbiAqXG4gKiBUaGUga2VlcGFsaXZlIHdhdGNoZG9nIGNhbiBvbmx5IHN0YXJ0IG9uY2UgYSBmcmFtZSBoYXMgYXJyaXZlZCwgc28gaXRcbiAqIGNhbm5vdCBjb3ZlciB0aGUgaGFuZHNoYWtlIGl0c2VsZi4gQSBzb2NrZXQgd2hvc2UgVENQL1dTIG9wZW4gc3VjY2VlZHNcbiAqIGJ1dCB3aGljaCB0aGVuIGdvZXMgc2lsZW50IC0gYmxhY2staG9sZWQgY29ubmVjdGlvbiwgTkFUIG1hcHBpbmdcbiAqIGRyb3BwZWQgcmlnaHQgYWZ0ZXIgb3BlbiwgcmFkaW8gZG96aW5nIC0gd291bGQgb3RoZXJ3aXNlIG5ldmVyIGZpcmVcbiAqIGBvbmNsb3NlYCwgbmV2ZXIgYXJtIHRoZSBrZWVwYWxpdmUsIGFuZCBsZWF2ZSBgY29ubmVjdGluZ2AgdHJ1ZSBzb1xuICogYGVuc3VyZVNvY2tldCgpYCBzaG9ydC1jaXJjdWl0cyBmb3JldmVyLiBFdmVyeSBzdWJzY3JpcHRpb24gd291bGQgYmVcbiAqIHNpbGVudGx5IGRlYWQgd2l0aCBub3RoaW5nIHN1cmZhY2VkLlxuICpcbiAqIEl0IGNvdmVycyB0aGUgdG9rZW4gc3RlcCB0b28sIHdoaWNoIGlzIHdoeSBpdCBpcyBhcm1lZCBiZWZvcmVcbiAqIGBnZXRUb2tlbigpYCBpcyBhd2FpdGVkIHJhdGhlciB0aGFuIGFmdGVyIHRoZSBzb2NrZXQgZXhpc3RzOiBhblxuICogYXBwLXN1cHBsaWVkIHRva2VuIHJlZnJlc2ggaXMgdXN1YWxseSBhIGBmZXRjaGAsIGFuZCBhIGBmZXRjaGAgdGhhdCBuZXZlclxuICogc2V0dGxlcyBwcm9kdWNlcyB0aGUgc2FtZSBwZXJtYW5lbnQgd2VkZ2Ugd2l0aG91dCBldmVyIGNyZWF0aW5nIGEgc29ja2V0LlxuICovXG5jb25zdCBDT05ORUNUX0RFQURMSU5FX01TID0gMTVfMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gY29ubmVjdChvcHRpb25zOiBSZWFsdGltZUNvbm5lY3RPcHRpb25zKTogUmVhbHRpbWVDbGllbnQge1xuICBjb25zdCBlbmRwb2ludHMgPSByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnMpO1xuICBjb25zdCBXZWJTb2NrZXRJbXBsID0gb3B0aW9ucy53ZWJTb2NrZXRJbXBsID8/IGdsb2JhbFdlYlNvY2tldCgpO1xuICBjb25zdCBmZXRjaEZuID0gb3B0aW9ucy5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCk7XG4gIGNvbnN0IG1heFJlY29ubmVjdERlbGF5TXMgPSBvcHRpb25zLm1heFJlY29ubmVjdERlbGF5TXMgPz8gREVGQVVMVF9NQVhfUkVDT05ORUNUX0RFTEFZX01TO1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgU3Vic2NyaXB0aW9uUmVjb3JkPigpO1xuXG4gIGxldCBzb2NrZXQ6IE1pbmltYWxXZWJTb2NrZXQgfCB1bmRlZmluZWQ7XG4gIGxldCBhY2tlZCA9IGZhbHNlO1xuICBsZXQgY29ubmVjdGluZyA9IGZhbHNlO1xuICBsZXQgY2xvc2VkQnlDYWxsZXIgPSBmYWxzZTtcbiAgbGV0IHJlY29ubmVjdEF0dGVtcHQgPSAwO1xuICBsZXQgcmVjb25uZWN0VGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBsZXQga2VlcGFsaXZlVGltZXI6IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgdW5kZWZpbmVkO1xuICBsZXQgY29ubmVjdFRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IGtlZXBhbGl2ZVRpbWVvdXRNcyA9IERFRkFVTFRfS0VFUEFMSVZFX1RJTUVPVVRfTVM7XG4gIC8qKlxuICAgKiBCdW1wZWQgZm9yIGV2ZXJ5IGNvbm5lY3QgYXR0ZW1wdCwgYW5kIGFnYWluIHdoZW4gdGhlIGNvbm5lY3QgZGVhZGxpbmVcbiAgICogYWJhbmRvbnMgb25lLiBgZW5zdXJlU29ja2V0YCdzIGFzeW5jIGJvZHkgY2hlY2tzIGl0IGFmdGVyIGV2ZXJ5IGBhd2FpdGBcbiAgICogc28gYSBzbG93IGBnZXRUb2tlbigpYCB0aGF0IHNldHRsZXMgbGF0ZSBjYW5ub3QgYWRvcHQgaXRzIHNvY2tldCBvdmVyIGFcbiAgICogbmV3ZXIgYXR0ZW1wdCdzLlxuICAgKi9cbiAgbGV0IGNvbm5lY3RHZW5lcmF0aW9uID0gMDtcblxuICAvLyDilIDilIDilIAgU29ja2V0IGxpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBmdW5jdGlvbiBlbnN1cmVTb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKGNsb3NlZEJ5Q2FsbGVyIHx8IGNvbm5lY3RpbmcgfHwgc29ja2V0KSByZXR1cm47XG4gICAgY29ubmVjdGluZyA9IHRydWU7XG4gICAgY29uc3QgZ2VuZXJhdGlvbiA9ICsrY29ubmVjdEdlbmVyYXRpb247XG5cbiAgICAvLyBBcm1lZCBCRUZPUkUgdGhlIHRva2VuIGF3YWl0LCBub3QgYWZ0ZXIgdGhlIHNvY2tldCBleGlzdHMuIGBnZXRUb2tlbigpYFxuICAgIC8vIGlzIGFwcC1zdXBwbGllZCBhbmQgdGhlIG5vcm1hbCBpbXBsZW1lbnRhdGlvbiBpcyBhIGBmZXRjaGAsIHdoaWNoIGNhblxuICAgIC8vIGhhbmcgaW5kZWZpbml0ZWx5IGFjcm9zcyBhIG5ldHdvcmsgdHJhbnNpdGlvbi4gSWYgaXQgbmV2ZXIgc2V0dGxlcyBhbmRcbiAgICAvLyB0aGUgZGVhZGxpbmUgd2VyZSBhcm1lZCBsYXRlciwgYGNvbm5lY3RpbmdgIHdvdWxkIHN0YXkgdHJ1ZSB3aXRoIG5vXG4gICAgLy8gc29ja2V0IGFuZCBubyB0aW1lciwgYHNjaGVkdWxlUmVjb25uZWN0KClgIHdvdWxkIG5ldmVyIHJ1biwgYW5kIGV2ZXJ5XG4gICAgLy8gc3Vic2VxdWVudCBgc3Vic2NyaWJlKClgIHdvdWxkIHNob3J0LWNpcmN1aXQgb24gYGNvbm5lY3RpbmdgIC0gdGhlXG4gICAgLy8gY2xpZW50IGRlYWQgZm9yIHRoZSBwYWdlJ3MgbGlmZXRpbWUgd2l0aCBub3RoaW5nIG9uIGBvbkVycm9yYC5cbiAgICBhcm1Db25uZWN0RGVhZGxpbmUoZ2VuZXJhdGlvbik7XG5cbiAgICB2b2lkIChhc3luYyAoKSA9PiB7XG4gICAgICBsZXQgd3M6IE1pbmltYWxXZWJTb2NrZXQ7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0VG9rZW4oKTtcbiAgICAgICAgLy8gVGhlIGRlYWRsaW5lIG1heSBoYXZlIGFiYW5kb25lZCB0aGlzIGF0dGVtcHQgd2hpbGUgdGhlIHRva2VuIHdhc1xuICAgICAgICAvLyBwZW5kaW5nLiBCYWlsIGJlZm9yZSBidWlsZGluZyBhIHNvY2tldCBub2JvZHkgd2lsbCBvd24uXG4gICAgICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCBnZW5lcmF0aW9uICE9PSBjb25uZWN0R2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBhdXRoSGVhZGVyKGVuZHBvaW50cy5odHRwRG9tYWluLCB0b2tlbik7XG4gICAgICAgIHdzID0gbmV3IFdlYlNvY2tldEltcGwoYHdzczovLyR7ZW5kcG9pbnRzLnJlYWx0aW1lRG9tYWlufS9ldmVudC9yZWFsdGltZWAsIFtcbiAgICAgICAgICBFVkVOVF9XU19TVUJQUk9UT0NPTCxcbiAgICAgICAgICBhdXRoU3VicHJvdG9jb2woaGVhZGVyKSxcbiAgICAgICAgXSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGNvbm5lY3RHZW5lcmF0aW9uKSByZXR1cm47XG4gICAgICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgY2xlYXJDb25uZWN0RGVhZGxpbmUoKTtcbiAgICAgICAgYnJvYWRjYXN0RXJyb3IodG9FcnJvcihlcnIsICdyZWFsdGltZTogZmFpbGVkIHRvIG9wZW4gY29ubmVjdGlvbicpKTtcbiAgICAgICAgc2NoZWR1bGVSZWNvbm5lY3QoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvc2VkQnlDYWxsZXIgfHwgZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHtcbiAgICAgICAgLy8gU3VwZXJzZWRlZCBiZXR3ZWVuIHRoZSB0b2tlbiByZXNvbHZpbmcgYW5kIHRoZSBzb2NrZXQgb3BlbmluZy5cbiAgICAgICAgLy8gQ2xvc2UgdGhlIG9ycGhhbiByYXRoZXIgdGhhbiBsZWFraW5nIGl0LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIHdzLmNsb3NlKDEwMDAsICdzdXBlcnNlZGVkJyk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIC8vIE5vdGhpbmcgdXNlZnVsIHRvIGRvOyBpdCB3YXMgbmV2ZXIgYWRvcHRlZC5cbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHNvY2tldCA9IHdzO1xuICAgICAgd3Mub25vcGVuID0gKCkgPT4ge1xuICAgICAgICB3cy5zZW5kKGNvbm5lY3Rpb25Jbml0RnJhbWUoKSk7XG4gICAgICB9O1xuICAgICAgd3Mub25tZXNzYWdlID0gKGV2KSA9PiB7XG4gICAgICAgIGFybUtlZXBhbGl2ZSgpO1xuICAgICAgICBoYW5kbGVGcmFtZSh0eXBlb2YgZXYuZGF0YSA9PT0gJ3N0cmluZycgPyBldi5kYXRhIDogU3RyaW5nKGV2LmRhdGEpKTtcbiAgICAgIH07XG4gICAgICB3cy5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICAvLyBgb25jbG9zZWAgYWx3YXlzIGZvbGxvd3M7IHJlY29ubmVjdCBpcyBkcml2ZW4gZnJvbSB0aGVyZSBzbyB0aGVcbiAgICAgICAgLy8gdHdvIHBhdGhzIGNhbid0IGJvdGggc2NoZWR1bGUgYSByZXRyeS5cbiAgICAgIH07XG4gICAgICB3cy5vbmNsb3NlID0gKCkgPT4ge1xuICAgICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgICBpZiAoIWNsb3NlZEJ5Q2FsbGVyKSBzY2hlZHVsZVJlY29ubmVjdCgpO1xuICAgICAgfTtcbiAgICB9KSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGVhcmRvd25Tb2NrZXQoKTogdm9pZCB7XG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgc29ja2V0Lm9ub3BlbiA9IG51bGw7XG4gICAgICBzb2NrZXQub25tZXNzYWdlID0gbnVsbDtcbiAgICAgIHNvY2tldC5vbmVycm9yID0gbnVsbDtcbiAgICAgIHNvY2tldC5vbmNsb3NlID0gbnVsbDtcbiAgICB9XG4gICAgc29ja2V0ID0gdW5kZWZpbmVkO1xuICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICBhY2tlZCA9IGZhbHNlO1xuICAgIGNsZWFyS2VlcGFsaXZlKCk7XG4gICAgY2xlYXJDb25uZWN0RGVhZGxpbmUoKTtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuc2VudCA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhaWwgYSBoYW5kc2hha2UgdGhhdCBuZXZlciBjb21wbGV0ZXMuIENsZWFyZWQgYnkgYGNvbm5lY3Rpb25fYWNrYCxcbiAgICogYWZ0ZXIgd2hpY2ggdGhlIGtlZXBhbGl2ZSB3YXRjaGRvZyB0YWtlcyBvdmVyLlxuICAgKi9cbiAgZnVuY3Rpb24gYXJtQ29ubmVjdERlYWRsaW5lKGdlbmVyYXRpb246IG51bWJlcik6IHZvaWQge1xuICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAoZ2VuZXJhdGlvbiAhPT0gY29ubmVjdEdlbmVyYXRpb24pIHJldHVybjtcbiAgICAgIC8vIEFiYW5kb24gdGhpcyBhdHRlbXB0IGJ5IHJldGlyaW5nIGl0cyBnZW5lcmF0aW9uLiBBIGBnZXRUb2tlbigpYCBzdGlsbFxuICAgICAgLy8gcGVuZGluZyB3aGVuIHRoaXMgZmlyZXMgY2FuIHRoZW4gbm8gbG9uZ2VyIGluc3RhbGwgaXRzIHNvY2tldCwgd2hpY2hcbiAgICAgIC8vIHdvdWxkIG90aGVyd2lzZSBsYW5kIHVuLWRlYWRsaW5lZCBhbmQgdW4tYWNrZWQgb24gdG9wIG9mIHRoZSBmcmVzaFxuICAgICAgLy8gYXR0ZW1wdCBzY2hlZHVsZWQgYmVsb3cuXG4gICAgICBjb25uZWN0R2VuZXJhdGlvbisrO1xuICAgICAgY29uc3Qgc3RhbGxlZCA9IHNvY2tldDtcbiAgICAgIHRlYXJkb3duU29ja2V0KCk7XG4gICAgICBicm9hZGNhc3RFcnJvcihuZXcgRXJyb3IoJ3JlYWx0aW1lOiBjb25uZWN0aW9uIHRpbWVkIG91dCBiZWZvcmUgY29ubmVjdGlvbl9hY2snKSk7XG4gICAgICB0cnkge1xuICAgICAgICBzdGFsbGVkPy5jbG9zZSg0MDAxLCAnY29ubmVjdCB0aW1lb3V0Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQWxyZWFkeSBnb25lOyB0aGUgcmVjb25uZWN0IGJlbG93IGlzIHdoYXQgbWF0dGVycy5cbiAgICAgIH1cbiAgICAgIGlmICghY2xvc2VkQnlDYWxsZXIpIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgfSwgQ09OTkVDVF9ERUFETElORV9NUyk7XG4gICAgdW5yZWYoY29ubmVjdFRpbWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk6IHZvaWQge1xuICAgIGlmIChjb25uZWN0VGltZXIpIGNsZWFyVGltZW91dChjb25uZWN0VGltZXIpO1xuICAgIGNvbm5lY3RUaW1lciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNjaGVkdWxlUmVjb25uZWN0KCk6IHZvaWQge1xuICAgIGlmIChjbG9zZWRCeUNhbGxlciB8fCByZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuICAgIGlmIChzdWJzY3JpcHRpb25zLnNpemUgPT09IDApIHJldHVybjtcbiAgICBjb25zdCBkZWxheSA9IGppdHRlcmVkQmFja29mZihyZWNvbm5lY3RBdHRlbXB0LCBtYXhSZWNvbm5lY3REZWxheU1zKTtcbiAgICByZWNvbm5lY3RBdHRlbXB0Kys7XG4gICAgcmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHJlY29ubmVjdFRpbWVyID0gdW5kZWZpbmVkO1xuICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgfSwgZGVsYXkpO1xuICAgIHVucmVmKHJlY29ubmVjdFRpbWVyKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFybUtlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgICBjbGVhcktlZXBhbGl2ZSgpO1xuICAgIGtlZXBhbGl2ZVRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBObyBmcmFtZSDigJQgbm90IGV2ZW4gYSBga2FgIOKAlCB3aXRoaW4gdGhlIGdyYWNlIHdpbmRvdy4gVGhlIHNvY2tldFxuICAgICAgLy8gbWF5IGxvb2sgb3BlbiB3aGlsZSBkZWxpdmVyaW5nIG5vdGhpbmcgKGJhY2tncm91bmRlZCB0YWIsIGRvemluZ1xuICAgICAgLy8gcmFkaW8sIHNpbGVudGx5IGRyb3BwZWQgTkFUIG1hcHBpbmcpOyBmb3JjZSBpdCBjbG9zZWQgc28gdGhlXG4gICAgICAvLyBub3JtYWwgcmVjb25uZWN0IHBhdGggcnVucy5cbiAgICAgIGNvbnN0IGRlYWQgPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGVhZD8uY2xvc2UoNDAwMCwgJ2tlZXBhbGl2ZSB0aW1lb3V0Jyk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gQWxyZWFkeSBnb25lOyB0aGUgcmVjb25uZWN0IGJlbG93IGlzIHdoYXQgbWF0dGVycy5cbiAgICAgIH1cbiAgICAgIGlmICghY2xvc2VkQnlDYWxsZXIpIHNjaGVkdWxlUmVjb25uZWN0KCk7XG4gICAgfSwga2VlcGFsaXZlVGltZW91dE1zICogS0VFUEFMSVZFX0dSQUNFKTtcbiAgICB1bnJlZihrZWVwYWxpdmVUaW1lcik7XG4gIH1cblxuICBmdW5jdGlvbiBjbGVhcktlZXBhbGl2ZSgpOiB2b2lkIHtcbiAgICBpZiAoa2VlcGFsaXZlVGltZXIpIGNsZWFyVGltZW91dChrZWVwYWxpdmVUaW1lcik7XG4gICAga2VlcGFsaXZlVGltZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvLyDilIDilIDilIAgRnJhbWUgaGFuZGxpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbiAgZnVuY3Rpb24gaGFuZGxlRnJhbWUocmF3OiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmcmFtZSA9IHBhcnNlU2VydmVyRnJhbWUocmF3KTtcbiAgICBpZiAoIWZyYW1lKSByZXR1cm47XG5cbiAgICBzd2l0Y2ggKGZyYW1lLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2Nvbm5lY3Rpb25fYWNrJzoge1xuICAgICAgICBhY2tlZCA9IHRydWU7XG4gICAgICAgIGNvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgICAgcmVjb25uZWN0QXR0ZW1wdCA9IDA7XG4gICAgICAgIGNsZWFyQ29ubmVjdERlYWRsaW5lKCk7XG4gICAgICAgIGNvbnN0IGFkdmVydGlzZWQgPSAoZnJhbWUgYXMgeyBjb25uZWN0aW9uVGltZW91dE1zPzogbnVtYmVyIH0pLmNvbm5lY3Rpb25UaW1lb3V0TXM7XG4gICAgICAgIGlmICh0eXBlb2YgYWR2ZXJ0aXNlZCA9PT0gJ251bWJlcicgJiYgYWR2ZXJ0aXNlZCA+IDApIGtlZXBhbGl2ZVRpbWVvdXRNcyA9IGFkdmVydGlzZWQ7XG4gICAgICAgIGFybUtlZXBhbGl2ZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSB2b2lkIG9wZW5TdWJzY3JpcHRpb24ocmVjb3JkKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAna2EnOlxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlICdzdWJzY3JpYmVfc3VjY2Vzcyc6IHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FzZSAnZGF0YSc6IHtcbiAgICAgICAgY29uc3QgZGF0YUZyYW1lID0gZnJhbWUgYXMgRGF0YUZyYW1lO1xuICAgICAgICBjb25zdCByZWNvcmQgPSBzdWJzY3JpcHRpb25zLmdldChkYXRhRnJhbWUuaWQpO1xuICAgICAgICBpZiAoIXJlY29yZCB8fCByZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBwYXJzZURhdGFGcmFtZUV2ZW50KGRhdGFGcmFtZSk7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gYXNSZWFsdGltZUV2ZW50KHBheWxvYWQpO1xuICAgICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCBuZXcgRXJyb3IoYHJlYWx0aW1lOiBkcm9wcGVkIG1hbGZvcm1lZCBldmVudCBvbiAke3JlY29yZC5jaGFubmVsfWApKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGVsaXZlcihyZWNvcmQsIGV2ZW50LCAnbGl2ZScpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjYXNlICdzdWJzY3JpYmVfZXJyb3InOlxuICAgICAgY2FzZSAnY29ubmVjdGlvbl9lcnJvcic6XG4gICAgICBjYXNlICdwdWJsaXNoX2Vycm9yJzoge1xuICAgICAgICBjb25zdCBlcnJvckZyYW1lID0gZnJhbWUgYXMgRXJyb3JGcmFtZTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGByZWFsdGltZTogJHtlcnJvckZyYW1lTWVzc2FnZShlcnJvckZyYW1lKX1gO1xuICAgICAgICBpZiAoZXJyb3JGcmFtZS5pZCkge1xuICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHN1YnNjcmlwdGlvbnMuZ2V0KGVycm9yRnJhbWUuaWQpO1xuICAgICAgICAgIGlmIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgbmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJvYWRjYXN0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGl2ZXIocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQsIGV2ZW50OiBSZWFsdGltZUV2ZW50LCBvcmlnaW46IFVwZGF0ZU1ldGFbJ29yaWdpbiddKSB7XG4gICAgaWYgKHJlY29yZC5jbG9zZWQpIHJldHVybjtcbiAgICBpZiAoIWlzTmV3ZXIoZXZlbnQuaWQsIHJlY29yZC5sYXN0RXZlbnRJZCkpIHJldHVybjtcbiAgICByZWNvcmQubGFzdEV2ZW50SWQgPSBldmVudC5pZDtcbiAgICB0cnkge1xuICAgICAgcmVjb3JkLm9wdGlvbnMub25VcGRhdGUoZXZlbnQsIHsgY2hhbm5lbDogcmVjb3JkLmNoYW5uZWwsIG9yaWdpbiB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogb25VcGRhdGUgdGhyZXcnKSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVwb3J0RXJyb3IocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQsIGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAgIGlmICghcmVjb3JkLm9wdGlvbnMub25FcnJvcikgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICByZWNvcmQub3B0aW9ucy5vbkVycm9yKGVycm9yKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEEgdGhyb3dpbmcgZXJyb3IgaGFuZGxlciBtdXN0IG5vdCB0YWtlIGRvd24gdGhlIHNvY2tldC5cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBicm9hZGNhc3RFcnJvcihlcnJvcjogRXJyb3IpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZXBvcnRFcnJvcihyZWNvcmQsIGVycm9yKTtcbiAgfVxuXG4gIC8vIOKUgOKUgOKUgCBTdWJzY3JpcHRpb25zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIC8qKlxuICAgKiBPcGVuIChvciByZS1vcGVuKSBvbmUgc3Vic2NyaXB0aW9uOiBzZW5kIHRoZSBzdWJzY3JpYmUgZnJhbWUgZmlyc3QsXG4gICAqIHRoZW4gZmV0Y2ggdGhlIGNoYW5uZWwncyBsYXN0IHZhbHVlLlxuICAgKlxuICAgKiBPcmRlciBtYXR0ZXJzLiBBcHBTeW5jIEV2ZW50cyBoYXMgbm8gcmV0ZW50aW9uLCBzbyBhbnl0aGluZyBwdWJsaXNoZWRcbiAgICogYmV0d2VlbiBcIndlIGFza2VkIGZvciB0aGUgc25hcHNob3RcIiBhbmQgXCJ0aGUgc3RyZWFtIGlzIGxpdmVcIiB3b3VsZCBiZVxuICAgKiBsb3N0IGZvcmV2ZXIuIFN1YnNjcmliaW5nIGZpcnN0IG1lYW5zIHRoZSB3b3JzdCBjYXNlIGlzIGEgZHVwbGljYXRlLFxuICAgKiB3aGljaCB0aGUgVUxJRCBndWFyZCBpbiBgZGVsaXZlcmAgYWJzb3Jicy5cbiAgICovXG4gIGFzeW5jIGZ1bmN0aW9uIG9wZW5TdWJzY3JpcHRpb24ocmVjb3JkOiBTdWJzY3JpcHRpb25SZWNvcmQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocmVjb3JkLmNsb3NlZCB8fCAhc29ja2V0IHx8ICFhY2tlZCB8fCByZWNvcmQuc2VudCkgcmV0dXJuO1xuICAgIGxldCB0b2tlbjogc3RyaW5nO1xuICAgIHRyeSB7XG4gICAgICB0b2tlbiA9IGF3YWl0IG9wdGlvbnMuZ2V0VG9rZW4oKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHJlcG9ydEVycm9yKHJlY29yZCwgdG9FcnJvcihlcnIsICdyZWFsdGltZTogZ2V0VG9rZW4gZmFpbGVkJykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVjb3JkLmNsb3NlZCB8fCAhc29ja2V0IHx8IHNvY2tldC5yZWFkeVN0YXRlICE9PSBXU19PUEVOKSByZXR1cm47XG4gICAgcmVjb3JkLnNlbnQgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBzb2NrZXQuc2VuZChcbiAgICAgICAgc3Vic2NyaWJlRnJhbWUoXG4gICAgICAgICAgcmVjb3JkLmlkLFxuICAgICAgICAgIHRvQ2hhbm5lbFBhdGgocmVjb3JkLmNoYW5uZWwpLFxuICAgICAgICAgIGF1dGhIZWFkZXIoZW5kcG9pbnRzLmh0dHBEb21haW4sIHRva2VuKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZWNvcmQuc2VudCA9IGZhbHNlO1xuICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCB0b0Vycm9yKGVyciwgJ3JlYWx0aW1lOiBzdWJzY3JpYmUgZnJhbWUgZmFpbGVkIHRvIHNlbmQnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IGh5ZHJhdGUocmVjb3JkLCB0b2tlbik7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBoeWRyYXRlKHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNuYXBzaG90ID0gcmVjb3JkLm9wdGlvbnMuZ2V0U25hcHNob3RcbiAgICAgICAgPyBhd2FpdCByZWNvcmQub3B0aW9ucy5nZXRTbmFwc2hvdChyZWNvcmQuY2hhbm5lbClcbiAgICAgICAgOiBhd2FpdCBmZXRjaExhdGVzdChyZWNvcmQuY2hhbm5lbCwgdG9rZW4pO1xuICAgICAgaWYgKHNuYXBzaG90KSBkZWxpdmVyKHJlY29yZCwgc25hcHNob3QsICdzbmFwc2hvdCcpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmVwb3J0RXJyb3IocmVjb3JkLCB0b0Vycm9yKGVyciwgYHJlYWx0aW1lOiBzbmFwc2hvdCBmZXRjaCBmYWlsZWQgZm9yICR7cmVjb3JkLmNoYW5uZWx9YCkpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGZldGNoTGF0ZXN0KGNoYW5uZWw6IHN0cmluZywgdG9rZW46IHN0cmluZyk6IFByb21pc2U8UmVhbHRpbWVFdmVudCB8IG51bGw+IHtcbiAgICBjb25zdCB1cmwgPSBgJHtlbmRwb2ludHMuYXBpQmFzZX0vdjEvcmVhbHRpbWUvbGF0ZXN0P2NoYW5uZWw9JHtlbmNvZGVVUklDb21wb25lbnQoY2hhbm5lbCl9YDtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEZuKHVybCwgeyBoZWFkZXJzOiB7IGF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gIH0gfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPT09IDQwNCkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFyZXMub2spIHRocm93IG5ldyBFcnJvcihgc25hcHNob3QgZmV0Y2ggcmV0dXJuZWQgSFRUUCAke3Jlcy5zdGF0dXN9YCk7XG4gICAgY29uc3QgYm9keSA9IChhd2FpdCByZXMuanNvbigpKSBhcyB7IGV2ZW50PzogdW5rbm93biB9O1xuICAgIHJldHVybiBhc1JlYWx0aW1lRXZlbnQoYm9keT8uZXZlbnQpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdWJzY3JpYmUoY2hhbm5lbCwgc3Vic2NyaWJlT3B0aW9ucykge1xuICAgICAgdG9DaGFubmVsUGF0aChjaGFubmVsKTtcbiAgICAgIGNvbnN0IHJlY29yZDogU3Vic2NyaXB0aW9uUmVjb3JkID0ge1xuICAgICAgICBpZDogcmFuZG9tSWQoKSxcbiAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgb3B0aW9uczogc3Vic2NyaWJlT3B0aW9ucyxcbiAgICAgICAgc2VudDogZmFsc2UsXG4gICAgICAgIGNsb3NlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQocmVjb3JkLmlkLCByZWNvcmQpO1xuXG4gICAgICBpZiAoYWNrZWQgJiYgc29ja2V0KSB7XG4gICAgICAgIHZvaWQgb3BlblN1YnNjcmlwdGlvbihyZWNvcmQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5zdXJlU29ja2V0KCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNoYW5uZWwsXG4gICAgICAgIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICAgIGlmIChyZWNvcmQuY2xvc2VkKSByZXR1cm47XG4gICAgICAgICAgcmVjb3JkLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5kZWxldGUocmVjb3JkLmlkKTtcbiAgICAgICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5yZWFkeVN0YXRlID09PSBXU19PUEVOICYmIHJlY29yZC5zZW50KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzb2NrZXQuc2VuZCh1bnN1YnNjcmliZUZyYW1lKHJlY29yZC5pZCkpO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIC8vIFNvY2tldCBpcyBnb2luZyBhd2F5IGFueXdheTsgdGhlIHNlcnZlciBkcm9wcyB0aGVcbiAgICAgICAgICAgICAgLy8gc3Vic2NyaXB0aW9uIHdoZW4gdGhlIGNvbm5lY3Rpb24gY2xvc2VzLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgY2xvc2VkQnlDYWxsZXIgPSB0cnVlO1xuICAgICAgaWYgKHJlY29ubmVjdFRpbWVyKSBjbGVhclRpbWVvdXQocmVjb25uZWN0VGltZXIpO1xuICAgICAgcmVjb25uZWN0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICBmb3IgKGNvbnN0IHJlY29yZCBvZiBzdWJzY3JpcHRpb25zLnZhbHVlcygpKSByZWNvcmQuY2xvc2VkID0gdHJ1ZTtcbiAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIGNvbnN0IG9wZW4gPSBzb2NrZXQ7XG4gICAgICB0ZWFyZG93blNvY2tldCgpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgb3Blbj8uY2xvc2UoMTAwMCwgJ2NsaWVudCBjbG9zZWQnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBOb3RoaW5nIHVzZWZ1bCB0byBkbyBpZiB0aGUgc29ja2V0IGlzIGFscmVhZHkgdG9ybiBkb3duLlxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbi8vIOKUgOKUgOKUgCBIZWxwZXJzIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5mdW5jdGlvbiByZXNvbHZlRW5kcG9pbnRzKG9wdGlvbnM6IFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMpOiBSZWFsdGltZUVuZHBvaW50cyB7XG4gIGlmIChvcHRpb25zLmVuZHBvaW50cykgcmV0dXJuIG9wdGlvbnMuZW5kcG9pbnRzO1xuICBpZiAoIW9wdGlvbnMuZW52KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdyZWFsdGltZS5jb25uZWN0OiBwYXNzIGVpdGhlciB7ZW52fSBvciB7ZW5kcG9pbnRzfScpO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkID0gZW5kcG9pbnRzRm9yKG9wdGlvbnMuZW52KTtcbiAgcmV0dXJuIHsgLi4ucmVzb2x2ZWQsIGFwaUJhc2U6IHJlc29sdmVkLmFwaUJhc2UgfHwgQVBJX0JBU0Vbb3B0aW9ucy5lbnZdIH07XG59XG5cbmZ1bmN0aW9uIGdsb2JhbFdlYlNvY2tldCgpOiBXZWJTb2NrZXRDdG9yIHtcbiAgY29uc3QgY3RvciA9IChnbG9iYWxUaGlzIGFzIHsgV2ViU29ja2V0PzogV2ViU29ja2V0Q3RvciB9KS5XZWJTb2NrZXQ7XG4gIGlmICghY3Rvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICdyZWFsdGltZS5jb25uZWN0OiBubyBnbG9iYWwgV2ViU29ja2V0LiBQYXNzIHt3ZWJTb2NrZXRJbXBsfSAoTm9kZSA8IDIyLCBvciBhIHRlc3QgZG91YmxlKS4nLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGN0b3I7XG59XG5cbi8qKlxuICogRnVsbC1qaXR0ZXIgZXhwb25lbnRpYWwgYmFja29mZi4gRnVsbCBqaXR0ZXIgKHJhdGhlciB0aGFuXG4gKiBkZWxheSDCsSBqaXR0ZXIpIG1hdHRlcnMgaGVyZSBiZWNhdXNlIGV2ZXJ5IHRhYiB3YXRjaGluZyBhbiBvcmRlclxuICogcmVjb25uZWN0cyBvbiB0aGUgc2FtZSBzZXJ2ZXItc2lkZSBldmVudDsgd2l0aG91dCBpdCB0aGV5IHJldHJ5IGluXG4gKiBsb2Nrc3RlcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGppdHRlcmVkQmFja29mZihhdHRlbXB0OiBudW1iZXIsIG1heERlbGF5TXM6IG51bWJlcik6IG51bWJlciB7XG4gIGNvbnN0IGNlaWxpbmcgPSBNYXRoLm1pbihtYXhEZWxheU1zLCBCQVNFX1JFQ09OTkVDVF9ERUxBWV9NUyAqIDIgKiogYXR0ZW1wdCk7XG4gIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjZWlsaW5nKTtcbn1cblxuZnVuY3Rpb24gcmFuZG9tSWQoKTogc3RyaW5nIHtcbiAgY29uc3QgYyA9IChnbG9iYWxUaGlzIGFzIHsgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nIH0gfSkuY3J5cHRvO1xuICBpZiAoYz8ucmFuZG9tVVVJRCkgcmV0dXJuIGMucmFuZG9tVVVJRCgpO1xuICByZXR1cm4gYHN1Yi0ke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDEwKX1gO1xufVxuXG5mdW5jdGlvbiB0b0Vycm9yKGVycjogdW5rbm93biwgZmFsbGJhY2tNZXNzYWdlOiBzdHJpbmcpOiBFcnJvciB7XG4gIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikgcmV0dXJuIGVycjtcbiAgcmV0dXJuIG5ldyBFcnJvcihgJHtmYWxsYmFja01lc3NhZ2V9OiAke1N0cmluZyhlcnIpfWApO1xufVxuXG5mdW5jdGlvbiB1bnJlZih0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4pOiB2b2lkIHtcbiAgY29uc3QgdCA9IHRpbWVyIGFzIHsgdW5yZWY/OiAoKSA9PiB2b2lkIH07XG4gIGlmICh0eXBlb2YgdC51bnJlZiA9PT0gJ2Z1bmN0aW9uJykgdC51bnJlZigpO1xufVxuIl19
@@ -14,7 +14,7 @@
14
14
  * getToken: () => session.jwt(),
15
15
  * });
16
16
  *
17
- * const sub = client.subscribe(`/orders/${orderId}`, {
17
+ * const sub = client.subscribe('delivery-updates', {
18
18
  * onUpdate(event, meta) { render(event.data); },
19
19
  * onError(err) { showOffline(err); },
20
20
  * });
@@ -27,6 +27,7 @@
27
27
  * stays a few KB in a frontend bundle and works unchanged in React
28
28
  * Native. Do not import from `../` here.
29
29
  */
30
+ export { isChannelName, toChannelPath, nameFromChannelPath } from './channel';
30
31
  import { connect } from './connect';
31
32
  export declare const realtime: {
32
33
  connect: typeof connect;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports.EVENT_WS_SUBPROTOCOL = exports.endpointsFor = exports.API_BASE = exports.isNewer = exports.asRealtimeEvent = exports.jitteredBackoff = exports.connect = exports.realtime = void 0;
3
+ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports.EVENT_WS_SUBPROTOCOL = exports.endpointsFor = exports.API_BASE = exports.isNewer = exports.asRealtimeEvent = exports.jitteredBackoff = exports.connect = exports.realtime = exports.nameFromChannelPath = exports.toChannelPath = exports.isChannelName = void 0;
4
4
  /**
5
5
  * `@uengage.io/platform-sdk/realtime` — browser-safe realtime client.
6
6
  *
@@ -17,7 +17,7 @@ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports
17
17
  * getToken: () => session.jwt(),
18
18
  * });
19
19
  *
20
- * const sub = client.subscribe(`/orders/${orderId}`, {
20
+ * const sub = client.subscribe('delivery-updates', {
21
21
  * onUpdate(event, meta) { render(event.data); },
22
22
  * onError(err) { showOffline(err); },
23
23
  * });
@@ -30,6 +30,10 @@ exports.base64UrlEncode = exports.authSubprotocol = exports.authHeader = exports
30
30
  * stays a few KB in a frontend bundle and works unchanged in React
31
31
  * Native. Do not import from `../` here.
32
32
  */
33
+ var channel_1 = require("./channel");
34
+ Object.defineProperty(exports, "isChannelName", { enumerable: true, get: function () { return channel_1.isChannelName; } });
35
+ Object.defineProperty(exports, "toChannelPath", { enumerable: true, get: function () { return channel_1.toChannelPath; } });
36
+ Object.defineProperty(exports, "nameFromChannelPath", { enumerable: true, get: function () { return channel_1.nameFromChannelPath; } });
33
37
  const connect_1 = require("./connect");
34
38
  exports.realtime = { connect: connect_1.connect };
35
39
  var connect_2 = require("./connect");
@@ -46,4 +50,4 @@ Object.defineProperty(exports, "EVENT_WS_SUBPROTOCOL", { enumerable: true, get:
46
50
  Object.defineProperty(exports, "authHeader", { enumerable: true, get: function () { return protocol_1.authHeader; } });
47
51
  Object.defineProperty(exports, "authSubprotocol", { enumerable: true, get: function () { return protocol_1.authSubprotocol; } });
48
52
  Object.defineProperty(exports, "base64UrlEncode", { enumerable: true, get: function () { return protocol_1.base64UrlEncode; } });
49
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhbHRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCx1Q0FBb0M7QUFFdkIsUUFBQSxRQUFRLEdBQUcsRUFBRSxPQUFPLEVBQVAsaUJBQU8sRUFBRSxDQUFDO0FBRXBDLHFDQVVtQjtBQVRqQixrR0FBQSxPQUFPLE9BQUE7QUFDUCwwR0FBQSxlQUFlLE9BQUE7QUFTakIsdUNBQTBFO0FBQWpFLDJHQUFBLGVBQWUsT0FBQTtBQUFFLG1HQUFBLE9BQU8sT0FBQTtBQUNqQyx5Q0FBK0Y7QUFBdEYscUdBQUEsUUFBUSxPQUFBO0FBQUUseUdBQUEsWUFBWSxPQUFBO0FBQy9CLHVDQUFnRztBQUF2RixnSEFBQSxvQkFBb0IsT0FBQTtBQUFFLHNHQUFBLFVBQVUsT0FBQTtBQUFFLDJHQUFBLGVBQWUsT0FBQTtBQUFFLDJHQUFBLGVBQWUsT0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogYEB1ZW5nYWdlLmlvL3BsYXRmb3JtLXNkay9yZWFsdGltZWAg4oCUIGJyb3dzZXItc2FmZSByZWFsdGltZSBjbGllbnQuXG4gKlxuICogQSB0aGluIGNsaWVudCBmb3IgdGhlIHBsYXRmb3JtJ3MgQXBwU3luYyBFdmVudHMgQVBJOiBpdCBvd25zIHRoZSB3aXJlXG4gKiBwcm90b2NvbCwgdGhlIGtlZXBhbGl2ZSB3YXRjaGRvZywgcmVjb25uZWN0IHdpdGggaml0dGVyZWQgYmFja29mZixcbiAqIHJlc3Vic2NyaWJlLCB0b2tlbiByZWZyZXNoLCBzbmFwc2hvdCBjYXRjaC11cCBvbiBldmVyeSAocmUpY29ubmVjdCxcbiAqIGFuZCBVTElELWJhc2VkIG9yZGVyaW5nL2RlZHVwZS4gQXBwcyBvd24gcmVuZGVyaW5nIGFuZCBjaGFubmVsIG5hbWVzLlxuICpcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyByZWFsdGltZSB9IGZyb20gJ0B1ZW5nYWdlLmlvL3BsYXRmb3JtLXNkay9yZWFsdGltZSc7XG4gKlxuICogY29uc3QgY2xpZW50ID0gcmVhbHRpbWUuY29ubmVjdCh7XG4gKiAgIGVudjogJ3Byb2QnLFxuICogICBnZXRUb2tlbjogKCkgPT4gc2Vzc2lvbi5qd3QoKSxcbiAqIH0pO1xuICpcbiAqIGNvbnN0IHN1YiA9IGNsaWVudC5zdWJzY3JpYmUoYC9vcmRlcnMvJHtvcmRlcklkfWAsIHtcbiAqICAgb25VcGRhdGUoZXZlbnQsIG1ldGEpIHsgcmVuZGVyKGV2ZW50LmRhdGEpOyB9LFxuICogICBvbkVycm9yKGVycikgeyBzaG93T2ZmbGluZShlcnIpOyB9LFxuICogfSk7XG4gKlxuICogc3ViLnVuc3Vic2NyaWJlKCk7XG4gKiBgYGBcbiAqXG4gKiBUaGlzIHN1YnBhdGggaXMgZGVsaWJlcmF0ZWx5IGlzb2xhdGVkIGZyb20gdGhlIFNESydzIG1haW4gZW50cnk6IHplcm9cbiAqIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLCBubyBOb2RlIGJ1aWx0LWlucywgbm8gc2VydmVyIGF1dGggY29kZSwgc28gaXRcbiAqIHN0YXlzIGEgZmV3IEtCIGluIGEgZnJvbnRlbmQgYnVuZGxlIGFuZCB3b3JrcyB1bmNoYW5nZWQgaW4gUmVhY3RcbiAqIE5hdGl2ZS4gRG8gbm90IGltcG9ydCBmcm9tIGAuLi9gIGhlcmUuXG4gKi9cbmltcG9ydCB7IGNvbm5lY3QgfSBmcm9tICcuL2Nvbm5lY3QnO1xuXG5leHBvcnQgY29uc3QgcmVhbHRpbWUgPSB7IGNvbm5lY3QgfTtcblxuZXhwb3J0IHtcbiAgY29ubmVjdCxcbiAgaml0dGVyZWRCYWNrb2ZmLFxuICB0eXBlIFJlYWx0aW1lQ2xpZW50LFxuICB0eXBlIFJlYWx0aW1lQ29ubmVjdE9wdGlvbnMsXG4gIHR5cGUgU3Vic2NyaXB0aW9uLFxuICB0eXBlIFN1YnNjcmliZU9wdGlvbnMsXG4gIHR5cGUgVXBkYXRlTWV0YSxcbiAgdHlwZSBNaW5pbWFsV2ViU29ja2V0LFxuICB0eXBlIFdlYlNvY2tldEN0b3IsXG59IGZyb20gJy4vY29ubmVjdCc7XG5leHBvcnQgeyBhc1JlYWx0aW1lRXZlbnQsIGlzTmV3ZXIsIHR5cGUgUmVhbHRpbWVFdmVudCB9IGZyb20gJy4vZW52ZWxvcGUnO1xuZXhwb3J0IHsgQVBJX0JBU0UsIGVuZHBvaW50c0ZvciwgdHlwZSBSZWFsdGltZUVuZHBvaW50cywgdHlwZSBSZWFsdGltZUVudiB9IGZyb20gJy4vZW5kcG9pbnRzJztcbmV4cG9ydCB7IEVWRU5UX1dTX1NVQlBST1RPQ09MLCBhdXRoSGVhZGVyLCBhdXRoU3VicHJvdG9jb2wsIGJhc2U2NFVybEVuY29kZSB9IGZyb20gJy4vcHJvdG9jb2wnO1xuIl19
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmVhbHRpbWUvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxxQ0FBOEU7QUFBckUsd0dBQUEsYUFBYSxPQUFBO0FBQUUsd0dBQUEsYUFBYSxPQUFBO0FBQUUsOEdBQUEsbUJBQW1CLE9BQUE7QUFDMUQsdUNBQW9DO0FBRXZCLFFBQUEsUUFBUSxHQUFHLEVBQUUsT0FBTyxFQUFQLGlCQUFPLEVBQUUsQ0FBQztBQUVwQyxxQ0FVbUI7QUFUakIsa0dBQUEsT0FBTyxPQUFBO0FBQ1AsMEdBQUEsZUFBZSxPQUFBO0FBU2pCLHVDQUEwRTtBQUFqRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSxtR0FBQSxPQUFPLE9BQUE7QUFDakMseUNBQStGO0FBQXRGLHFHQUFBLFFBQVEsT0FBQTtBQUFFLHlHQUFBLFlBQVksT0FBQTtBQUMvQix1Q0FBZ0c7QUFBdkYsZ0hBQUEsb0JBQW9CLE9BQUE7QUFBRSxzR0FBQSxVQUFVLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSwyR0FBQSxlQUFlLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsvcmVhbHRpbWVgIOKAlCBicm93c2VyLXNhZmUgcmVhbHRpbWUgY2xpZW50LlxuICpcbiAqIEEgdGhpbiBjbGllbnQgZm9yIHRoZSBwbGF0Zm9ybSdzIEFwcFN5bmMgRXZlbnRzIEFQSTogaXQgb3ducyB0aGUgd2lyZVxuICogcHJvdG9jb2wsIHRoZSBrZWVwYWxpdmUgd2F0Y2hkb2csIHJlY29ubmVjdCB3aXRoIGppdHRlcmVkIGJhY2tvZmYsXG4gKiByZXN1YnNjcmliZSwgdG9rZW4gcmVmcmVzaCwgc25hcHNob3QgY2F0Y2gtdXAgb24gZXZlcnkgKHJlKWNvbm5lY3QsXG4gKiBhbmQgVUxJRC1iYXNlZCBvcmRlcmluZy9kZWR1cGUuIEFwcHMgb3duIHJlbmRlcmluZyBhbmQgY2hhbm5lbCBuYW1lcy5cbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgcmVhbHRpbWUgfSBmcm9tICdAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsvcmVhbHRpbWUnO1xuICpcbiAqIGNvbnN0IGNsaWVudCA9IHJlYWx0aW1lLmNvbm5lY3Qoe1xuICogICBlbnY6ICdwcm9kJyxcbiAqICAgZ2V0VG9rZW46ICgpID0+IHNlc3Npb24uand0KCksXG4gKiB9KTtcbiAqXG4gKiBjb25zdCBzdWIgPSBjbGllbnQuc3Vic2NyaWJlKCdkZWxpdmVyeS11cGRhdGVzJywge1xuICogICBvblVwZGF0ZShldmVudCwgbWV0YSkgeyByZW5kZXIoZXZlbnQuZGF0YSk7IH0sXG4gKiAgIG9uRXJyb3IoZXJyKSB7IHNob3dPZmZsaW5lKGVycik7IH0sXG4gKiB9KTtcbiAqXG4gKiBzdWIudW5zdWJzY3JpYmUoKTtcbiAqIGBgYFxuICpcbiAqIFRoaXMgc3VicGF0aCBpcyBkZWxpYmVyYXRlbHkgaXNvbGF0ZWQgZnJvbSB0aGUgU0RLJ3MgbWFpbiBlbnRyeTogemVyb1xuICogcnVudGltZSBkZXBlbmRlbmNpZXMsIG5vIE5vZGUgYnVpbHQtaW5zLCBubyBzZXJ2ZXIgYXV0aCBjb2RlLCBzbyBpdFxuICogc3RheXMgYSBmZXcgS0IgaW4gYSBmcm9udGVuZCBidW5kbGUgYW5kIHdvcmtzIHVuY2hhbmdlZCBpbiBSZWFjdFxuICogTmF0aXZlLiBEbyBub3QgaW1wb3J0IGZyb20gYC4uL2AgaGVyZS5cbiAqL1xuZXhwb3J0IHsgaXNDaGFubmVsTmFtZSwgdG9DaGFubmVsUGF0aCwgbmFtZUZyb21DaGFubmVsUGF0aCB9IGZyb20gJy4vY2hhbm5lbCc7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAnLi9jb25uZWN0JztcblxuZXhwb3J0IGNvbnN0IHJlYWx0aW1lID0geyBjb25uZWN0IH07XG5cbmV4cG9ydCB7XG4gIGNvbm5lY3QsXG4gIGppdHRlcmVkQmFja29mZixcbiAgdHlwZSBSZWFsdGltZUNsaWVudCxcbiAgdHlwZSBSZWFsdGltZUNvbm5lY3RPcHRpb25zLFxuICB0eXBlIFN1YnNjcmlwdGlvbixcbiAgdHlwZSBTdWJzY3JpYmVPcHRpb25zLFxuICB0eXBlIFVwZGF0ZU1ldGEsXG4gIHR5cGUgTWluaW1hbFdlYlNvY2tldCxcbiAgdHlwZSBXZWJTb2NrZXRDdG9yLFxufSBmcm9tICcuL2Nvbm5lY3QnO1xuZXhwb3J0IHsgYXNSZWFsdGltZUV2ZW50LCBpc05ld2VyLCB0eXBlIFJlYWx0aW1lRXZlbnQgfSBmcm9tICcuL2VudmVsb3BlJztcbmV4cG9ydCB7IEFQSV9CQVNFLCBlbmRwb2ludHNGb3IsIHR5cGUgUmVhbHRpbWVFbmRwb2ludHMsIHR5cGUgUmVhbHRpbWVFbnYgfSBmcm9tICcuL2VuZHBvaW50cyc7XG5leHBvcnQgeyBFVkVOVF9XU19TVUJQUk9UT0NPTCwgYXV0aEhlYWRlciwgYXV0aFN1YnByb3RvY29sLCBiYXNlNjRVcmxFbmNvZGUgfSBmcm9tICcuL3Byb3RvY29sJztcbiJdfQ==
package/dist/version.d.ts CHANGED
@@ -13,4 +13,4 @@
13
13
  * namespace suite, so a later split or trim of one namespace cannot take
14
14
  * the release guard with it.
15
15
  */
16
- export declare const SDK_VERSION = "2.5.0";
16
+ export declare const SDK_VERSION = "3.0.0";
package/dist/version.js CHANGED
@@ -16,5 +16,5 @@ exports.SDK_VERSION = void 0;
16
16
  * namespace suite, so a later split or trim of one namespace cannot take
17
17
  * the release guard with it.
18
18
  */
19
- exports.SDK_VERSION = '2.5.0';
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ1UsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW51YWxseS1tYWludGFpbmVkIHZlcnNpb24gc3RyaW5nIHN1cmZhY2VkIHZpYSB0aGUgYFVzZXItQWdlbnRgXG4gKiBoZWFkZXIuIEtlcHQgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gIGJ5IGhhbmQgYmVjYXVzZSBwdWxsaW5nIHRoZVxuICogdmFsdWUgZnJvbSBwYWNrYWdlLmpzb24gYXQgcnVudGltZSB3b3VsZCByZXF1aXJlIGVpdGhlciBhIEpTT04gaW1wb3J0XG4gKiAoVFMgbGliIHNldHRpbmdzIGRlcGVuZGVudCkgb3IgYSBidWlsZC10aW1lIHJlcGxhY2VtZW50LCBhbmQgdGhlXG4gKiBjb3N0IG9mIG9uZSBidW1wLWluLXR3by1wbGFjZXMgcGVyIHJlbGVhc2UgaXMgc21hbGwuXG4gKlxuICogVGhhdCBjb3N0IHdhcyB1bmRlcmVzdGltYXRlZCBvbmNlOiB0aGUgcHVibGlzaCBqb2IgdmVyaWZpZXNcbiAqIHBhY2thZ2UuanNvbiBhZ2FpbnN0IHRoZSByZWxlYXNlIHRhZyBidXQgbmV2ZXIgcmVhZHMgdGhpcyBmaWxlLCBzbyB0aGVcbiAqIHR3byBkcmlmdGVkIGFuZCAxLjAuMCBzaGlwcGVkIHJlcG9ydGluZyAwLjkuMS4gQSB0ZXN0IG5vdyBwaW5zIHRoZW1cbiAqIHRvZ2V0aGVyIChgdGVzdC92ZXJzaW9uLnRlc3QudHNgKSwgc28gZm9yZ2V0dGluZyB0aGlzIGJ1bXAgZmFpbHMgdGhlXG4gKiBidWlsZCBpbnN0ZWFkIG9mIHRoZSBVc2VyLUFnZW50LiBJdCBsaXZlcyBhdCB0aGUgdG9wIGxldmVsLCBub3QgdW5kZXIgYVxuICogbmFtZXNwYWNlIHN1aXRlLCBzbyBhIGxhdGVyIHNwbGl0IG9yIHRyaW0gb2Ygb25lIG5hbWVzcGFjZSBjYW5ub3QgdGFrZVxuICogdGhlIHJlbGVhc2UgZ3VhcmQgd2l0aCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzIuNS4wJztcbiJdfQ==
19
+ exports.SDK_VERSION = '3.0.0';
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ1UsUUFBQSxXQUFXLEdBQUcsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNYW51YWxseS1tYWludGFpbmVkIHZlcnNpb24gc3RyaW5nIHN1cmZhY2VkIHZpYSB0aGUgYFVzZXItQWdlbnRgXG4gKiBoZWFkZXIuIEtlcHQgaW4gc3luYyB3aXRoIGBwYWNrYWdlLmpzb25gIGJ5IGhhbmQgYmVjYXVzZSBwdWxsaW5nIHRoZVxuICogdmFsdWUgZnJvbSBwYWNrYWdlLmpzb24gYXQgcnVudGltZSB3b3VsZCByZXF1aXJlIGVpdGhlciBhIEpTT04gaW1wb3J0XG4gKiAoVFMgbGliIHNldHRpbmdzIGRlcGVuZGVudCkgb3IgYSBidWlsZC10aW1lIHJlcGxhY2VtZW50LCBhbmQgdGhlXG4gKiBjb3N0IG9mIG9uZSBidW1wLWluLXR3by1wbGFjZXMgcGVyIHJlbGVhc2UgaXMgc21hbGwuXG4gKlxuICogVGhhdCBjb3N0IHdhcyB1bmRlcmVzdGltYXRlZCBvbmNlOiB0aGUgcHVibGlzaCBqb2IgdmVyaWZpZXNcbiAqIHBhY2thZ2UuanNvbiBhZ2FpbnN0IHRoZSByZWxlYXNlIHRhZyBidXQgbmV2ZXIgcmVhZHMgdGhpcyBmaWxlLCBzbyB0aGVcbiAqIHR3byBkcmlmdGVkIGFuZCAxLjAuMCBzaGlwcGVkIHJlcG9ydGluZyAwLjkuMS4gQSB0ZXN0IG5vdyBwaW5zIHRoZW1cbiAqIHRvZ2V0aGVyIChgdGVzdC92ZXJzaW9uLnRlc3QudHNgKSwgc28gZm9yZ2V0dGluZyB0aGlzIGJ1bXAgZmFpbHMgdGhlXG4gKiBidWlsZCBpbnN0ZWFkIG9mIHRoZSBVc2VyLUFnZW50LiBJdCBsaXZlcyBhdCB0aGUgdG9wIGxldmVsLCBub3QgdW5kZXIgYVxuICogbmFtZXNwYWNlIHN1aXRlLCBzbyBhIGxhdGVyIHNwbGl0IG9yIHRyaW0gb2Ygb25lIG5hbWVzcGFjZSBjYW5ub3QgdGFrZVxuICogdGhlIHJlbGVhc2UgZ3VhcmQgd2l0aCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzMuMC4wJztcbiJdfQ==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uengage.io/platform-sdk",
3
- "version": "2.5.0",
3
+ "version": "3.0.0",
4
4
  "description": "Client SDK for the uEngage platform API (audit, business, zones, wallet, upsell, auth, events). Single createClient(...) factory; OAuth2 client_credentials, static Bearer, or legacy session-token auth modes. Browser-safe realtime client at the /realtime subpath.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -67,7 +67,8 @@
67
67
  "@types/node": "^20.14.10",
68
68
  "jest": "^29.7.0",
69
69
  "ts-jest": "^29.2.5",
70
- "typescript": "^5.5.4"
70
+ "typescript": "^5.5.4",
71
+ "@uengage/common": "0.0.0"
71
72
  },
72
73
  "peerDependencies": {
73
74
  "@aws-sdk/client-sns": "^3.0.0"
@@ -78,7 +79,7 @@
78
79
  }
79
80
  },
80
81
  "scripts": {
81
- "build": "tsc",
82
+ "build": "tsc && node scripts/include-channel-helpers.cjs",
82
83
  "typecheck": "tsc --noEmit",
83
84
  "test": "jest"
84
85
  }