@uengage.io/platform-sdk 2.0.0 → 2.2.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 +9 -2
- package/dist/auth/issuer.js +38 -23
- package/dist/config.d.ts +8 -3
- package/dist/config.js +2 -2
- package/dist/http.js +44 -5
- package/dist/realtime/endpoints.d.ts +3 -3
- package/dist/realtime/endpoints.js +22 -7
- package/dist/token-source.d.ts +14 -0
- package/dist/token-source.js +27 -1
- package/dist/upsell/client.d.ts +54 -0
- package/dist/upsell/client.js +77 -2
- package/dist/upsell/index.d.ts +1 -1
- package/dist/upsell/index.js +3 -2
- package/dist/version.d.ts +5 -3
- package/dist/version.js +6 -4
- package/dist/wallet/client.d.ts +19 -2
- package/dist/wallet/client.js +22 -3
- package/dist/wallet/index.d.ts +2 -2
- package/dist/wallet/index.js +3 -2
- package/dist/wallet/schema.d.ts +83 -0
- package/dist/wallet/schema.js +1 -1
- package/dist/wallet/services.d.ts +14 -2
- package/dist/wallet/services.js +20 -3
- package/dist/zones/index.d.ts +1 -1
- package/dist/zones/index.js +1 -1
- package/dist/zones/schema.d.ts +7 -2
- package/dist/zones/schema.js +1 -1
- package/package.json +9 -1
package/README.md
CHANGED
|
@@ -30,8 +30,15 @@ const acme = await client.business.get(123, { groups: ['profile'] });
|
|
|
30
30
|
const wallet = client.wallet.getWallet({ id: 'business:123' });
|
|
31
31
|
const { balance, balanceMinor, currency } = await wallet.getBalance();
|
|
32
32
|
// wallet.getInstance() / wallet.getCurrency() — wallet identity + currency, without the balance
|
|
33
|
-
// wallet.debit({ referenceId, amountMinor, service: Services.
|
|
34
|
-
// wallet.credit({ ..., reversalOf })
|
|
33
|
+
// wallet.debit({ referenceId, amountMinor, service: Services.FLASH_DELIVERY, description }) — idempotent on referenceId
|
|
34
|
+
// wallet.credit({ ..., reversalOf }) refund capped by that debit; ({ ..., isRefund: true }) uncapped
|
|
35
|
+
// wallet.listTransactions({...}); wallet.getTransaction(id)
|
|
36
|
+
// Legacy-ledger passthroughs, written as top-level ledger fields:
|
|
37
|
+
// taskId, rto (debit), units, serviceBaseCost, paymentId (credit), updatedBy,
|
|
38
|
+
// occurredAt — IST 'YYYY-MM-DD HH:mm:ss', dates the CHARGE not the write
|
|
39
|
+
// (backfills/replays); ≤90 days back, never future. Write time → recordedAt.
|
|
40
|
+
// wallet: {parentBusinessId, childBusinessId} on a write bypasses bId_deduction routing;
|
|
41
|
+
// a child override's parentBusinessId is asserted against the wallet doc (409 on mismatch).
|
|
35
42
|
|
|
36
43
|
client.audit.record({
|
|
37
44
|
event_type: 'business.updated',
|
package/dist/auth/issuer.js
CHANGED
|
@@ -3,40 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getIssuer = getIssuer;
|
|
4
4
|
exports.getExpiry = getExpiry;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* Base64url-decode a JWT segment, in Node and in a browser.
|
|
7
|
+
*
|
|
8
|
+
* `Buffer` is a Node global. In a browser or React Native it is simply not
|
|
9
|
+
* defined, and touching it throws a ReferenceError rather than yielding
|
|
10
|
+
* undefined — which the callers below used to swallow, so every expiry read
|
|
11
|
+
* silently returned null off-Node. That mattered once a browser-reachable
|
|
12
|
+
* token source started caching against `exp`: the cache fell back to a flat
|
|
13
|
+
* five minutes and nothing said why. `atob` covers those runtimes.
|
|
10
14
|
*/
|
|
11
|
-
function
|
|
15
|
+
function decodeSegment(segment) {
|
|
16
|
+
const base64 = segment.replace(/-/g, '+').replace(/_/g, '/');
|
|
17
|
+
const padded = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), '=');
|
|
18
|
+
if (typeof Buffer !== 'undefined') {
|
|
19
|
+
return Buffer.from(padded, 'base64').toString('utf8');
|
|
20
|
+
}
|
|
21
|
+
// atob yields one byte per character; re-decode as UTF-8 so a non-ASCII
|
|
22
|
+
// claim (a merchant name, say) does not come back mojibake.
|
|
23
|
+
const binary = atob(padded);
|
|
24
|
+
const bytes = Uint8Array.from(binary, (ch) => ch.charCodeAt(0));
|
|
25
|
+
return new TextDecoder().decode(bytes);
|
|
26
|
+
}
|
|
27
|
+
function claimsOf(token) {
|
|
12
28
|
const parts = token.split('.');
|
|
13
29
|
if (parts.length !== 3)
|
|
14
30
|
return null;
|
|
15
31
|
try {
|
|
16
|
-
|
|
17
|
-
const padded = payload.padEnd(payload.length + ((4 - (payload.length % 4)) % 4), '=');
|
|
18
|
-
const json = Buffer.from(padded, 'base64').toString('utf8');
|
|
19
|
-
const claims = JSON.parse(json);
|
|
20
|
-
return typeof claims.iss === 'string' ? claims.iss : null;
|
|
32
|
+
return JSON.parse(decodeSegment(parts[1]));
|
|
21
33
|
}
|
|
22
34
|
catch {
|
|
23
35
|
return null;
|
|
24
36
|
}
|
|
25
37
|
}
|
|
38
|
+
/**
|
|
39
|
+
* Decode (without verifying) a JWT and return its `iss` claim. Used by
|
|
40
|
+
* the SDK to route subsequent auth-related calls (refresh, future
|
|
41
|
+
* logout) at `${iss}/...`, so tokens from different issuers are
|
|
42
|
+
* routed correctly when customer-auth ships alongside business-auth.
|
|
43
|
+
*/
|
|
44
|
+
function getIssuer(token) {
|
|
45
|
+
const claims = claimsOf(token);
|
|
46
|
+
if (!claims)
|
|
47
|
+
return null;
|
|
48
|
+
return typeof claims.iss === 'string' ? claims.iss : null;
|
|
49
|
+
}
|
|
26
50
|
/** Decode (without verifying) a JWT and return its `exp` claim (unix seconds). */
|
|
27
51
|
function getExpiry(token) {
|
|
28
|
-
const
|
|
29
|
-
if (
|
|
52
|
+
const claims = claimsOf(token);
|
|
53
|
+
if (!claims)
|
|
30
54
|
return null;
|
|
31
|
-
|
|
32
|
-
const payload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
|
|
33
|
-
const padded = payload.padEnd(payload.length + ((4 - (payload.length % 4)) % 4), '=');
|
|
34
|
-
const json = Buffer.from(padded, 'base64').toString('utf8');
|
|
35
|
-
const claims = JSON.parse(json);
|
|
36
|
-
return typeof claims.exp === 'number' ? claims.exp : null;
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
55
|
+
return typeof claims.exp === 'number' ? claims.exp : null;
|
|
41
56
|
}
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaXNzdWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUNBLDhCQUlDO0FBR0QsOEJBSUM7QUFwREQ7Ozs7Ozs7OztHQVNHO0FBQ0gsU0FBUyxhQUFhLENBQUMsT0FBZTtJQUNwQyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzdELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRW5GLElBQUksT0FBTyxNQUFNLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDbEMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELHdFQUF3RTtJQUN4RSw0REFBNEQ7SUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVCLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEUsT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBUyxRQUFRLENBQUMsS0FBYTtJQUM3QixNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBNEIsQ0FBQztJQUN4RSxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEtBQWE7SUFDckMsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9CLElBQUksQ0FBQyxNQUFNO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDekIsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUQsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFnQixTQUFTLENBQUMsS0FBYTtJQUNyQyxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsSUFBSSxDQUFDLE1BQU07UUFBRSxPQUFPLElBQUksQ0FBQztJQUN6QixPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM1RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBCYXNlNjR1cmwtZGVjb2RlIGEgSldUIHNlZ21lbnQsIGluIE5vZGUgYW5kIGluIGEgYnJvd3Nlci5cbiAqXG4gKiBgQnVmZmVyYCBpcyBhIE5vZGUgZ2xvYmFsLiBJbiBhIGJyb3dzZXIgb3IgUmVhY3QgTmF0aXZlIGl0IGlzIHNpbXBseSBub3RcbiAqIGRlZmluZWQsIGFuZCB0b3VjaGluZyBpdCB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciByYXRoZXIgdGhhbiB5aWVsZGluZ1xuICogdW5kZWZpbmVkIOKAlCB3aGljaCB0aGUgY2FsbGVycyBiZWxvdyB1c2VkIHRvIHN3YWxsb3csIHNvIGV2ZXJ5IGV4cGlyeSByZWFkXG4gKiBzaWxlbnRseSByZXR1cm5lZCBudWxsIG9mZi1Ob2RlLiBUaGF0IG1hdHRlcmVkIG9uY2UgYSBicm93c2VyLXJlYWNoYWJsZVxuICogdG9rZW4gc291cmNlIHN0YXJ0ZWQgY2FjaGluZyBhZ2FpbnN0IGBleHBgOiB0aGUgY2FjaGUgZmVsbCBiYWNrIHRvIGEgZmxhdFxuICogZml2ZSBtaW51dGVzIGFuZCBub3RoaW5nIHNhaWQgd2h5LiBgYXRvYmAgY292ZXJzIHRob3NlIHJ1bnRpbWVzLlxuICovXG5mdW5jdGlvbiBkZWNvZGVTZWdtZW50KHNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGJhc2U2NCA9IHNlZ21lbnQucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgY29uc3QgcGFkZGVkID0gYmFzZTY0LnBhZEVuZChiYXNlNjQubGVuZ3RoICsgKCg0IC0gKGJhc2U2NC5sZW5ndGggJSA0KSkgJSA0KSwgJz0nKTtcblxuICBpZiAodHlwZW9mIEJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gQnVmZmVyLmZyb20ocGFkZGVkLCAnYmFzZTY0JykudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgfVxuXG4gIC8vIGF0b2IgeWllbGRzIG9uZSBieXRlIHBlciBjaGFyYWN0ZXI7IHJlLWRlY29kZSBhcyBVVEYtOCBzbyBhIG5vbi1BU0NJSVxuICAvLyBjbGFpbSAoYSBtZXJjaGFudCBuYW1lLCBzYXkpIGRvZXMgbm90IGNvbWUgYmFjayBtb2ppYmFrZS5cbiAgY29uc3QgYmluYXJ5ID0gYXRvYihwYWRkZWQpO1xuICBjb25zdCBieXRlcyA9IFVpbnQ4QXJyYXkuZnJvbShiaW5hcnksIChjaCkgPT4gY2guY2hhckNvZGVBdCgwKSk7XG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpO1xufVxuXG5mdW5jdGlvbiBjbGFpbXNPZih0b2tlbjogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVTZWdtZW50KHBhcnRzWzFdKSkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbi8qKlxuICogRGVjb2RlICh3aXRob3V0IHZlcmlmeWluZykgYSBKV1QgYW5kIHJldHVybiBpdHMgYGlzc2AgY2xhaW0uIFVzZWQgYnlcbiAqIHRoZSBTREsgdG8gcm91dGUgc3Vic2VxdWVudCBhdXRoLXJlbGF0ZWQgY2FsbHMgKHJlZnJlc2gsIGZ1dHVyZVxuICogbG9nb3V0KSBhdCBgJHtpc3N9Ly4uLmAsIHNvIHRva2VucyBmcm9tIGRpZmZlcmVudCBpc3N1ZXJzIGFyZVxuICogcm91dGVkIGNvcnJlY3RseSB3aGVuIGN1c3RvbWVyLWF1dGggc2hpcHMgYWxvbmdzaWRlIGJ1c2luZXNzLWF1dGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJc3N1ZXIodG9rZW46IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBjbGFpbXMgPSBjbGFpbXNPZih0b2tlbik7XG4gIGlmICghY2xhaW1zKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuaXNzID09PSAnc3RyaW5nJyA/IGNsYWltcy5pc3MgOiBudWxsO1xufVxuXG4vKiogRGVjb2RlICh3aXRob3V0IHZlcmlmeWluZykgYSBKV1QgYW5kIHJldHVybiBpdHMgYGV4cGAgY2xhaW0gKHVuaXggc2Vjb25kcykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwaXJ5KHRva2VuOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgY2xhaW1zID0gY2xhaW1zT2YodG9rZW4pO1xuICBpZiAoIWNsYWltcykgcmV0dXJuIG51bGw7XG4gIHJldHVybiB0eXBlb2YgY2xhaW1zLmV4cCA9PT0gJ251bWJlcicgPyBjbGFpbXMuZXhwIDogbnVsbDtcbn1cbiJdfQ==
|
package/dist/config.d.ts
CHANGED
|
@@ -24,9 +24,14 @@ export interface PlatformConfigInput {
|
|
|
24
24
|
logger?: Logger;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* `.auth()` shape. Pass `{token}` for a static Bearer access token
|
|
28
|
-
*
|
|
29
|
-
*
|
|
27
|
+
* `.auth()` shape. Pass `{token}` for a static Bearer access token — used
|
|
28
|
+
* until its `exp` passes, after which requests fail, because the SDK cannot
|
|
29
|
+
* refresh a bare string.
|
|
30
|
+
*
|
|
31
|
+
* For anything that needs renewal, do not use this: pass `serviceId` +
|
|
32
|
+
* `serviceSecret` or `tokenUrl` to `upsell.createClient()` (and the
|
|
33
|
+
* equivalents on `createClient()`), which build a token source that mints,
|
|
34
|
+
* caches and renews. Those options mirror the realtime SDK's names.
|
|
30
35
|
*/
|
|
31
36
|
export interface PlatformAuthInput {
|
|
32
37
|
token?: string;
|
package/dist/config.js
CHANGED
|
@@ -48,7 +48,7 @@ function normalizeAuth(input) {
|
|
|
48
48
|
if (input.token) {
|
|
49
49
|
return { type: 'bearer', token: input.token };
|
|
50
50
|
}
|
|
51
|
-
throw new Error('auth(): pass {token} for a static Bearer access token, or use createClient({serviceId, serviceSecret}) for
|
|
51
|
+
throw new Error('auth(): pass {token} for a static Bearer access token, or use createClient({serviceId, serviceSecret}) / upsell.createClient({tokenUrl}) for a token the SDK renews itself');
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
54
|
* Mutable config shared by clients. `apply()` and `setAuth()` are how the
|
|
@@ -87,4 +87,4 @@ class ConfigState {
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
exports.ConfigState = ConfigState;
|
|
90
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3REEsa0NBTUM7QUFpQkQsc0NBUUM7QUFwRlksUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQXFDbEU7Ozs7R0FJRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyxHQUFHLENBQUMsSUFBWTtJQUN2QixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVc7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNyRCxPQUFRLE9BQXdELENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQWdCLFdBQVc7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSx3QkFBZ0I7UUFDcEQsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBcUI7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLE9BQU87SUFDZCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUs7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM1QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBdUM7SUFDbkUsSUFBSSxNQUFNLElBQUksS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2xDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsNEtBQTRLLENBQzdLLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFdBQVc7SUFDZCxTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUNwQyxZQUFZLENBQTJCO0lBQ3ZDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFaEMsS0FBSyxDQUFDLEtBQTBCO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBdUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEdBQUcsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUN6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFpQjtZQUNoRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUE0QjtTQUNwRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN0JELGtDQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQHVlbmdhZ2UuaW8vanMtbG9nZ2VyJztcbmltcG9ydCB0eXBlIHsgVG9rZW5Tb3VyY2VTdGF0ZSB9IGZyb20gJy4vdG9rZW4tc291cmNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogUmVzb2x2ZWQgYXV0aCBzdGF0ZS4gRGlzY3JpbWluYXRlZCBieSBgdHlwZWAgc28gY29uc3VtZXJzIGNhbiBuYXJyb3cuXG4gKi9cbmV4cG9ydCB0eXBlIFBsYXRmb3JtQXV0aCA9XG4gIHwgeyB0eXBlOiAnYmVhcmVyJzsgdG9rZW46IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAndG9rZW4tc291cmNlJzsgc3RhdGU6IFRva2VuU291cmNlU3RhdGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUNvbmZpZyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXV0aD86IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbjogdHlwZW9mIGZldGNoO1xuICBsb2dnZXI/OiBMb2dnZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIGAuYXV0aCgpYCBzaGFwZS4gUGFzcyBge3Rva2VufWAgZm9yIGEgc3RhdGljIEJlYXJlciBhY2Nlc3MgdG9rZW4g4oCUIHVzZWRcbiAqIHVudGlsIGl0cyBgZXhwYCBwYXNzZXMsIGFmdGVyIHdoaWNoIHJlcXVlc3RzIGZhaWwsIGJlY2F1c2UgdGhlIFNESyBjYW5ub3RcbiAqIHJlZnJlc2ggYSBiYXJlIHN0cmluZy5cbiAqXG4gKiBGb3IgYW55dGhpbmcgdGhhdCBuZWVkcyByZW5ld2FsLCBkbyBub3QgdXNlIHRoaXM6IHBhc3MgYHNlcnZpY2VJZGAgK1xuICogYHNlcnZpY2VTZWNyZXRgIG9yIGB0b2tlblVybGAgdG8gYHVwc2VsbC5jcmVhdGVDbGllbnQoKWAgKGFuZCB0aGVcbiAqIGVxdWl2YWxlbnRzIG9uIGBjcmVhdGVDbGllbnQoKWApLCB3aGljaCBidWlsZCBhIHRva2VuIHNvdXJjZSB0aGF0IG1pbnRzLFxuICogY2FjaGVzIGFuZCByZW5ld3MuIFRob3NlIG9wdGlvbnMgbWlycm9yIHRoZSByZWFsdGltZSBTREsncyBuYW1lcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUF1dGhJbnB1dCB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgZW52LWRlZmF1bHRlZCBjb25maWcuIFJlLXJlYWQgb24gZXZlcnkgY2FsbCBzbyB0aGF0IGNhbGxlcnMgY2FuXG4gKiBzZXQgZW52IHZhcnMgYWZ0ZXIgdGhlIFNESyBoYXMgYmVlbiBpbXBvcnRlZCBhbmQgc3RpbGwgcGljayB0aGVtIHVwIG9uXG4gKiB0aGUgbmV4dCByZXF1ZXN0LlxuICovXG4vKipcbiAqIFJlYWQgYHByb2Nlc3MuZW52YCBkZWZlbnNpdmVseTogaW4gYSBicm93c2VyIGJ1bmRsZSBgcHJvY2Vzc2AgaXMgbm90XG4gKiBkZWZpbmVkIGF0IGFsbCwgYW5kIHRvdWNoaW5nIGl0IHRocm93cyBhIFJlZmVyZW5jZUVycm9yIHJhdGhlciB0aGFuXG4gKiB5aWVsZGluZyB1bmRlZmluZWQuIFRoZSBTREsgaXMgdXNlZCBmcm9tIGJyb3dzZXJzICh0aGVcbiAqIGB3aGl0ZWxhYmVsX3dlYmAgY2hhbm5lbCksIHNvIGV2ZXJ5IGVudiByZWFkIGdvZXMgdGhyb3VnaCBoZXJlLlxuICovXG5mdW5jdGlvbiBlbnYobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIChwcm9jZXNzIGFzIHsgZW52PzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB9KS5lbnY/LltuYW1lXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVudkRlZmF1bHRzKCk6IFBsYXRmb3JtQ29uZmlnIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVXJsOiBlbnYoJ1VFTkdBR0VfQkFTRV9VUkwnKSA/PyBERUZBVUxUX0JBU0VfVVJMLFxuICAgIGF1dGg6IGVudkF1dGgoKSxcbiAgICBmZXRjaEZuOiBnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZW52QXV0aCgpOiBQbGF0Zm9ybUF1dGggfCB1bmRlZmluZWQge1xuICBjb25zdCB0b2tlbiA9IGVudignVUVOR0FHRV9BVVRIX1RPS0VOJyk7XG4gIGlmICh0b2tlbikgcmV0dXJuIHsgdHlwZTogJ2JlYXJlcicsIHRva2VuIH07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29lcmNlIGAuYXV0aCgpYCBpbnB1dCBvciBgY29uZmlnKHthdXRofSlgIGlucHV0IGludG8gYSB0eXBlZFxuICogUGxhdGZvcm1BdXRoLiBUaHJvd3Mgd2hlbiB0aGUgaW5wdXQgaGFzIG5vIHVzYWJsZSBjcmVkZW50aWFscy5cbiAqXG4gKiBUb2RheSB0aGlzIG9ubHkgYWNjZXB0cyBge3Rva2VufWAgb3IgYSBwcmUtc2hhcGVkIGBQbGF0Zm9ybUF1dGhgLlxuICogRm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMgdXNlIGBjcmVhdGVDbGllbnQoe3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0pYFxuICogaW5zdGVhZCDigJQgdGhhdCBidWlsZHMgYSBUb2tlblNvdXJjZSB3aGljaCBtaW50cyArIGNhY2hlcyBCZWFyZXJcbiAqIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogUGxhdGZvcm1BdXRoIHtcbiAgaWYgKCd0eXBlJyBpbiBpbnB1dCkgcmV0dXJuIGlucHV0O1xuICBpZiAoaW5wdXQudG9rZW4pIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW46IGlucHV0LnRva2VuIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdhdXRoKCk6IHBhc3Mge3Rva2VufSBmb3IgYSBzdGF0aWMgQmVhcmVyIGFjY2VzcyB0b2tlbiwgb3IgdXNlIGNyZWF0ZUNsaWVudCh7c2VydmljZUlkLCBzZXJ2aWNlU2VjcmV0fSkgLyB1cHNlbGwuY3JlYXRlQ2xpZW50KHt0b2tlblVybH0pIGZvciBhIHRva2VuIHRoZSBTREsgcmVuZXdzIGl0c2VsZicsXG4gICk7XG59XG5cbi8qKlxuICogTXV0YWJsZSBjb25maWcgc2hhcmVkIGJ5IGNsaWVudHMuIGBhcHBseSgpYCBhbmQgYHNldEF1dGgoKWAgYXJlIGhvdyB0aGVcbiAqIGNoYWluYWJsZSBgLmNvbmZpZygpYCAvIGAuYXV0aCgpYCBtZXRob2RzIHdyaXRlIGJhY2suIGByZXNvbHZlKClgIHByb2R1Y2VzXG4gKiB0aGUgZWZmZWN0aXZlIGNvbmZpZyBmb3Igb25lIHJlcXVlc3QsIGZhbGxpbmcgYmFjayB0byBjdXJyZW50IGVudiBzdGF0ZVxuICogZm9yIGZpZWxkcyB0aGUgY2FsbGVyIGhhc24ndCBwaW5uZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWdTdGF0ZSB7XG4gIHByaXZhdGUgb3ZlcnJpZGVzOiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge307XG4gIHByaXZhdGUgZXhwbGljaXRBdXRoOiBQbGF0Zm9ybUF1dGggfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaGFzRXhwbGljaXRBdXRoID0gZmFsc2U7XG5cbiAgYXBwbHkoaW5wdXQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQpOiB2b2lkIHtcbiAgICBpZiAoaW5wdXQuYmFzZVVybCAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID0gaW5wdXQuYmFzZVVybDtcbiAgICBpZiAoaW5wdXQuZmV0Y2hGbiAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5mZXRjaEZuID0gaW5wdXQuZmV0Y2hGbjtcbiAgICBpZiAoaW5wdXQubG9nZ2VyICE9PSB1bmRlZmluZWQpIHRoaXMub3ZlcnJpZGVzLmxvZ2dlciA9IGlucHV0LmxvZ2dlcjtcbiAgICBpZiAoaW5wdXQuYXV0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmV4cGxpY2l0QXV0aCA9IG5vcm1hbGl6ZUF1dGgoaW5wdXQuYXV0aCk7XG4gICAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0QXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGxpY2l0QXV0aCA9IG5vcm1hbGl6ZUF1dGgoaW5wdXQpO1xuICAgIHRoaXMuaGFzRXhwbGljaXRBdXRoID0gdHJ1ZTtcbiAgfVxuXG4gIHJlc29sdmUoKTogUGxhdGZvcm1Db25maWcge1xuICAgIGNvbnN0IGVudiA9IGVudkRlZmF1bHRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VVcmw6IHRoaXMub3ZlcnJpZGVzLmJhc2VVcmwgPz8gZW52LmJhc2VVcmwsXG4gICAgICBhdXRoOiB0aGlzLmhhc0V4cGxpY2l0QXV0aCA/IHRoaXMuZXhwbGljaXRBdXRoIDogZW52LmF1dGgsXG4gICAgICBmZXRjaEZuOiAodGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA/PyBlbnYuZmV0Y2hGbikgYXMgdHlwZW9mIGZldGNoLFxuICAgICAgbG9nZ2VyOiB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgYXMgTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
package/dist/http.js
CHANGED
|
@@ -11,9 +11,20 @@ const MUTATING_METHODS = new Set(['POST', 'PUT', 'PATCH', 'DELETE']);
|
|
|
11
11
|
* The SDK runs in browsers as well as Lambdas — `whitelabel_web` is a
|
|
12
12
|
* first-class channel — and a static `node:crypto` import breaks any
|
|
13
13
|
* browser bundler that does not shim it. `crypto.randomUUID` is present
|
|
14
|
-
* in Node >= 19 and every current browser;
|
|
15
|
-
*
|
|
16
|
-
*
|
|
14
|
+
* in Node >= 19 and every current browser; `getRandomValues` covers older
|
|
15
|
+
* runtimes and non-secure contexts.
|
|
16
|
+
*
|
|
17
|
+
* The last fallback exists for React Native: Hermes provides NO
|
|
18
|
+
* `globalThis.crypto` at all, and `mobile_app` is a first-class channel.
|
|
19
|
+
* Throwing there made `suggest()` and `reportEvents()` — both POSTs —
|
|
20
|
+
* unusable in an app until the consumer added a polyfill, which is the
|
|
21
|
+
* wrong trade twice over: nothing on the platform reads this header, and
|
|
22
|
+
* as stated above the value needs uniqueness, not unguessability. A
|
|
23
|
+
* request that fails is strictly worse than a key that is merely unique.
|
|
24
|
+
*
|
|
25
|
+
* The fallback mixes the clock and a process counter into the first six
|
|
26
|
+
* bytes so that two calls in the same millisecond still differ even under
|
|
27
|
+
* a poor `Math.random`.
|
|
17
28
|
*/
|
|
18
29
|
function randomUUID() {
|
|
19
30
|
const c = globalThis.crypto;
|
|
@@ -26,7 +37,35 @@ function randomUUID() {
|
|
|
26
37
|
const hex = [...b].map((x) => x.toString(16).padStart(2, '0')).join('');
|
|
27
38
|
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
28
39
|
}
|
|
29
|
-
|
|
40
|
+
return uniqueUUID();
|
|
41
|
+
}
|
|
42
|
+
/** Monotonic within the process; wraps well above any per-millisecond burst. */
|
|
43
|
+
let uuidCounter = 0;
|
|
44
|
+
/**
|
|
45
|
+
* A v4-SHAPED identifier built without any crypto source. Unique, not
|
|
46
|
+
* unguessable — see the note on randomUUID for why that is the right
|
|
47
|
+
* requirement for this header.
|
|
48
|
+
*/
|
|
49
|
+
function uniqueUUID() {
|
|
50
|
+
const b = new Uint8Array(16);
|
|
51
|
+
for (let i = 0; i < 16; i += 1)
|
|
52
|
+
b[i] = Math.floor(Math.random() * 256);
|
|
53
|
+
// Bytes 0-3: the clock, so keys are ordered and cannot repeat across
|
|
54
|
+
// milliseconds however weak Math.random is.
|
|
55
|
+
const t = Date.now();
|
|
56
|
+
b[0] = (t >>> 24) & 0xff;
|
|
57
|
+
b[1] = (t >>> 16) & 0xff;
|
|
58
|
+
b[2] = (t >>> 8) & 0xff;
|
|
59
|
+
b[3] = t & 0xff;
|
|
60
|
+
// Bytes 4-5: a per-process counter, so a burst inside one millisecond
|
|
61
|
+
// still differs.
|
|
62
|
+
uuidCounter = (uuidCounter + 1) & 0xffff;
|
|
63
|
+
b[4] = (uuidCounter >>> 8) & 0xff;
|
|
64
|
+
b[5] = uuidCounter & 0xff;
|
|
65
|
+
b[6] = (b[6] & 0x0f) | 0x40; // version 4
|
|
66
|
+
b[8] = (b[8] & 0x3f) | 0x80; // variant
|
|
67
|
+
const hex = [...b].map((x) => x.toString(16).padStart(2, '0')).join('');
|
|
68
|
+
return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;
|
|
30
69
|
}
|
|
31
70
|
/**
|
|
32
71
|
* Build the headers for a request to the platform API.
|
|
@@ -100,4 +139,4 @@ async function sendWithAuthRetry(config, params) {
|
|
|
100
139
|
body: params.body,
|
|
101
140
|
});
|
|
102
141
|
}
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBd0RBLG9DQXVCQztBQXdCRCw4Q0EwQkM7QUFoSUQsaURBQWlFO0FBQ2pFLHVDQUF3QztBQVV4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7O0dBU0c7QUFDSCxTQUFTLFVBQVU7SUFDakIsTUFBTSxDQUFDLEdBQ0wsVUFHRCxDQUFDLE1BQU0sQ0FBQztJQUNULElBQUksQ0FBQyxFQUFFLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFD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QUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGxhdGZvcm1Db25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBnZXRBY2Nlc3NUb2tlbiwgaW52YWxpZGF0ZVRva2VuIH0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNpZ25lZEhlYWRlclBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIGVtcHR5IGZvciBub25lLiAqL1xuICBib2R5Pzogc3RyaW5nO1xufVxuXG5jb25zdCBNVVRBVElOR19NRVRIT0RTID0gbmV3IFNldChbJ1BPU1QnLCAnUFVUJywgJ1BBVENIJywgJ0RFTEVURSddKTtcblxuLyoqXG4gKiBVVUlEIHY0IHdpdGhvdXQgYSBgbm9kZTpjcnlwdG9gIGltcG9ydC5cbiAqXG4gKiBUaGUgU0RLIHJ1bnMgaW4gYnJvd3NlcnMgYXMgd2VsbCBhcyBMYW1iZGFzIOKAlCBgd2hpdGVsYWJlbF93ZWJgIGlzIGFcbiAqIGZpcnN0LWNsYXNzIGNoYW5uZWwg4oCUIGFuZCBhIHN0YXRpYyBgbm9kZTpjcnlwdG9gIGltcG9ydCBicmVha3MgYW55XG4gKiBicm93c2VyIGJ1bmRsZXIgdGhhdCBkb2VzIG5vdCBzaGltIGl0LiBgY3J5cHRvLnJhbmRvbVVVSURgIGlzIHByZXNlbnRcbiAqIGluIE5vZGUgPj0gMTkgYW5kIGV2ZXJ5IGN1cnJlbnQgYnJvd3NlcjsgdGhlIG1hbnVhbCBmYWxsYmFjayBjb3ZlcnNcbiAqIG9sZGVyIHJ1bnRpbWVzIGFuZCBub24tc2VjdXJlIGNvbnRleHRzLCB3aGVyZSB0aGUgdmFsdWUgaXMgb25seSB1c2VkXG4gKiBhcyBhbiBpZGVtcG90ZW5jeSBrZXkgYW5kIG5lZWRzIHVuaXF1ZW5lc3MsIG5vdCB1bmd1ZXNzYWJpbGl0eS5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpOiBzdHJpbmcge1xuICBjb25zdCBjID0gKFxuICAgIGdsb2JhbFRoaXMgYXMge1xuICAgICAgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nOyBnZXRSYW5kb21WYWx1ZXM/OiAoYTogVWludDhBcnJheSkgPT4gVWludDhBcnJheSB9O1xuICAgIH1cbiAgKS5jcnlwdG87XG4gIGlmIChjPy5yYW5kb21VVUlEKSByZXR1cm4gYy5yYW5kb21VVUlEKCk7XG4gIGlmIChjPy5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICBjb25zdCBiID0gYy5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgIGNvbnN0IGhleCA9IFsuLi5iXS5tYXAoKHgpID0+IHgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIHJldHVybiBgJHtoZXguc2xpY2UoMCwgOCl9LSR7aGV4LnNsaWNlKDgsIDEyKX0tJHtoZXguc2xpY2UoMTIsIDE2KX0tJHtoZXguc2xpY2UoMTYsIDIwKX0tJHtoZXguc2xpY2UoMjApfWA7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBjcnlwdG8gc291cmNlIGF2YWlsYWJsZSBmb3IgaWRlbXBvdGVuY3kta2V5IGdlbmVyYXRpb24nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgaGVhZGVycyBmb3IgYSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBBUEkuXG4gKlxuICogQWRkcyB0aHJlZSBwbGF0Zm9ybS13aWRlIGhlYWRlcnMgYXV0b21hdGljYWxseTpcbiAqICAgLSBgVXNlci1BZ2VudGAgc28gdGhlIGdhdGV3YXkgY2FuIGF0dHJpYnV0ZSB0cmFmZmljIHRvIFNESyB2ZXJzaW9uXG4gKiAgIC0gYElkZW1wb3RlbmN5LUtleWAgKFVVSUQgdjQpIG9uIG11dGF0aW5nIG1ldGhvZHMsIHNvIGNhbGxlcnMgZG9uJ3RcbiAqICAgICBoYXZlIHRvIGdlbmVyYXRlIG9uZSBwZXIgY2FsbFxuICogICAtIGBjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb25gIHdoZW4gYSBib2R5IGlzIHN1cHBsaWVkXG4gKlxuICogQXV0aCBjb21lcyBmcm9tIGBjb25maWcuYXV0aGA6XG4gKiAgIC0gYGJlYXJlcmA6IHRoZSB0b2tlbiBpcyBzZW50IHZlcmJhdGltIChjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yXG4gKiAgICAgZnJlc2huZXNzOyBTREsgdGhyb3dzIFRva2VuRXhwaXJlZEVycm9yIG9uIGxvY2FsLWRldGVjdGVkIGV4cGlyeSlcbiAqICAgLSBgdG9rZW4tc291cmNlYDogU0RLIG1pbnRzICsgY2FjaGVzIHZpYSBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzXG4gKiAgICAgYW5kIHJlZnJlc2hlcyBvbiBleHBpcnkgLyA0MDFcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkSGVhZGVycyhcbiAgY29uZmlnOiBQbGF0Zm9ybUNvbmZpZyxcbiAgcGFyYW1zOiBTaWduZWRIZWFkZXJQYXJhbXMsXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+IHtcbiAgY29uc3QgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAndXNlci1hZ2VudCc6IGB1ZW5nYWdlLXBsYXRmb3JtLXNkay8ke1NES19WRVJTSU9OfWAsXG4gIH07XG4gIGlmIChwYXJhbXMuYm9keSAhPT0gdW5kZWZpbmVkKSBoZWFkZXJzWydjb250ZW50LXR5cGUnXSA9ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgaWYgKE1VVEFUSU5HX01FVEhPRFMuaGFzKHBhcmFtcy5tZXRob2QudG9VcHBlckNhc2UoKSkpIHtcbiAgICBoZWFkZXJzWydpZGVtcG90ZW5jeS1rZXknXSA9IHJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIGlmICghY29uZmlnLmF1dGgpIHJldHVybiBoZWFkZXJzO1xuXG4gIGlmIChjb25maWcuYXV0aC50eXBlID09PSAnYmVhcmVyJykge1xuICAgIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjb25maWcuYXV0aC50b2tlbn1gO1xuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgLy8gdG9rZW4tc291cmNlOiBtaW50ICsgY2FjaGUgKyByZWZyZXNoLWRlZHVwIGhhcHBlbnMgaW4gZ2V0QWNjZXNzVG9rZW5cbiAgY29uc3QgdG9rZW4gPSBhd2FpdCBnZXRBY2Nlc3NUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGhlYWRlcnNbJ2F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHt0b2tlbn1gO1xuICByZXR1cm4gaGVhZGVycztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZW5kUmVxdWVzdFBhcmFtcyB7XG4gIG1ldGhvZDogc3RyaW5nO1xuICAvKiogVVJMIHBhdGhuYW1lIG9ubHksIHdpdGhvdXQgcXVlcnkgc3RyaW5nLiBNdXN0IG1hdGNoIGBjLnJlcS5wYXRoYCBzZXJ2ZXItc2lkZS4gKi9cbiAgcGF0aDogc3RyaW5nO1xuICAvKiogRnVsbHktcXVhbGlmaWVkIFVSTCB0aGUgZmV0Y2ggaXMgc2VudCB0byAoYmFzZSArIHBhdGggKyBxdWVyeXN0cmluZykuICovXG4gIHVybDogc3RyaW5nO1xuICAvKiogUmF3IEpTT04gYm9keSBzdHJpbmcsIG9yIHVuZGVmaW5lZCBmb3Igbm9uZS4gKi9cbiAgYm9keT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZW5kIGEgcmVxdWVzdCB3aXRoIHRoZSBTREsncyBzdGFuZGFyZCA0MDEtcmV0cnktb25jZSBiZWhhdmlvdXIuXG4gKlxuICogT25seSByZXRyaWVzIHdoZW4gYXV0aCBpcyBgdG9rZW4tc291cmNlYCwgc2luY2UgdGhhdCdzIHRoZSBjYXNlXG4gKiB3aGVyZSB0aGUgY2FjaGVkIHRva2VuIG1heSBoYXZlIGV4cGlyZWQgc2VydmVyLXNpZGUuIEhNQUMgYW5kXG4gKiBzdGF0aWMgYmVhcmVyIDQwMXMgbWVhbiB0aGUgYXV0aCBpcyBtaXNjb25maWd1cmVkIGFuZCBhIHJldHJ5XG4gKiB3b3VsZCBqdXN0IGZhaWwgYWdhaW4uIEJ1YmJsZSB0aGUgcmVzcG9uc2Ugc28gdGhlIGNhbGxlciBzdXJmYWNlcyBpdC5cbiAqXG4gKiBTaGFyZWQgYnkgZXZlcnkgbmFtZXNwYWNlIGNsaWVudCAoYnVzaW5lc3MsIGF1ZGl0LCB6b25lcywgLi4uKSBzb1xuICogdGhlIHJldHJ5IHNlbWFudGljcyBhcmUgdW5pZm9ybS4gTGlmdGVkIG91dCBvZiBgYnVzaW5lc3MvY2xpZW50LnRzYFxuICogd2l0aCBubyBiZWhhdmlvdXIgY2hhbmdlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2VuZFdpdGhBdXRoUmV0cnkoXG4gIGNvbmZpZzogUGxhdGZvcm1Db25maWcsXG4gIHBhcmFtczogU2VuZFJlcXVlc3RQYXJhbXMsXG4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBidWlsZEhlYWRlcnMoY29uZmlnLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgY29uc3QgcmVzID0gYXdhaXQgY29uZmlnLmZldGNoRm4ocGFyYW1zLnVybCwge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBoZWFkZXJzLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgaWYgKHJlcy5zdGF0dXMgIT09IDQwMSB8fCBjb25maWcuYXV0aD8udHlwZSAhPT0gJ3Rva2VuLXNvdXJjZScpIHJldHVybiByZXM7XG4gIGludmFsaWRhdGVUb2tlbihjb25maWcuYXV0aC5zdGF0ZSk7XG4gIGNvbnN0IHJldHJ5SGVhZGVycyA9IGF3YWl0IGJ1aWxkSGVhZGVycyhjb25maWcsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICByZXR1cm4gY29uZmlnLmZldGNoRm4ocGFyYW1zLnVybCwge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBoZWFkZXJzOiByZXRyeUhlYWRlcnMsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xufVxuIl19
|
|
142
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0dBLG9DQXVCQztBQXdCRCw4Q0EwQkM7QUE1S0QsaURBQWlFO0FBQ2pFLHVDQUF3QztBQVV4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFTLFVBQVU7SUFDakIsTUFBTSxDQUFDLEdBQ0wsVUFHRCxDQUFDLE1BQU0sQ0FBQztJQUNULElBQUksQ0FBQyxFQUFFLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVB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QUMzQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTztRQUNQLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLGNBQWM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMzRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuLCBpbnZhbGlkYXRlVG9rZW4gfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5pbXBvcnQgeyBTREtfVkVSU0lPTiB9IGZyb20gJy4vdmVyc2lvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmVkSGVhZGVyUGFyYW1zIHtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIC8qKiBVUkwgcGF0aG5hbWUgb25seSwgd2l0aG91dCBxdWVyeSBzdHJpbmcuIE11c3QgbWF0Y2ggYGMucmVxLnBhdGhgIHNlcnZlci1zaWRlLiAqL1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKiBSYXcgSlNPTiBib2R5IHN0cmluZywgb3IgZW1wdHkgZm9yIG5vbmUuICovXG4gIGJvZHk/OiBzdHJpbmc7XG59XG5cbmNvbnN0IE1VVEFUSU5HX01FVEhPRFMgPSBuZXcgU2V0KFsnUE9TVCcsICdQVVQnLCAnUEFUQ0gnLCAnREVMRVRFJ10pO1xuXG4vKipcbiAqIFVVSUQgdjQgd2l0aG91dCBhIGBub2RlOmNyeXB0b2AgaW1wb3J0LlxuICpcbiAqIFRoZSBTREsgcnVucyBpbiBicm93c2VycyBhcyB3ZWxsIGFzIExhbWJkYXMg4oCUIGB3aGl0ZWxhYmVsX3dlYmAgaXMgYVxuICogZmlyc3QtY2xhc3MgY2hhbm5lbCDigJQgYW5kIGEgc3RhdGljIGBub2RlOmNyeXB0b2AgaW1wb3J0IGJyZWFrcyBhbnlcbiAqIGJyb3dzZXIgYnVuZGxlciB0aGF0IGRvZXMgbm90IHNoaW0gaXQuIGBjcnlwdG8ucmFuZG9tVVVJRGAgaXMgcHJlc2VudFxuICogaW4gTm9kZSA+PSAxOSBhbmQgZXZlcnkgY3VycmVudCBicm93c2VyOyBgZ2V0UmFuZG9tVmFsdWVzYCBjb3ZlcnMgb2xkZXJcbiAqIHJ1bnRpbWVzIGFuZCBub24tc2VjdXJlIGNvbnRleHRzLlxuICpcbiAqIFRoZSBsYXN0IGZhbGxiYWNrIGV4aXN0cyBmb3IgUmVhY3QgTmF0aXZlOiBIZXJtZXMgcHJvdmlkZXMgTk9cbiAqIGBnbG9iYWxUaGlzLmNyeXB0b2AgYXQgYWxsLCBhbmQgYG1vYmlsZV9hcHBgIGlzIGEgZmlyc3QtY2xhc3MgY2hhbm5lbC5cbiAqIFRocm93aW5nIHRoZXJlIG1hZGUgYHN1Z2dlc3QoKWAgYW5kIGByZXBvcnRFdmVudHMoKWAg4oCUIGJvdGggUE9TVHMg4oCUXG4gKiB1bnVzYWJsZSBpbiBhbiBhcHAgdW50aWwgdGhlIGNvbnN1bWVyIGFkZGVkIGEgcG9seWZpbGwsIHdoaWNoIGlzIHRoZVxuICogd3JvbmcgdHJhZGUgdHdpY2Ugb3Zlcjogbm90aGluZyBvbiB0aGUgcGxhdGZvcm0gcmVhZHMgdGhpcyBoZWFkZXIsIGFuZFxuICogYXMgc3RhdGVkIGFib3ZlIHRoZSB2YWx1ZSBuZWVkcyB1bmlxdWVuZXNzLCBub3QgdW5ndWVzc2FiaWxpdHkuIEFcbiAqIHJlcXVlc3QgdGhhdCBmYWlscyBpcyBzdHJpY3RseSB3b3JzZSB0aGFuIGEga2V5IHRoYXQgaXMgbWVyZWx5IHVuaXF1ZS5cbiAqXG4gKiBUaGUgZmFsbGJhY2sgbWl4ZXMgdGhlIGNsb2NrIGFuZCBhIHByb2Nlc3MgY291bnRlciBpbnRvIHRoZSBmaXJzdCBzaXhcbiAqIGJ5dGVzIHNvIHRoYXQgdHdvIGNhbGxzIGluIHRoZSBzYW1lIG1pbGxpc2Vjb25kIHN0aWxsIGRpZmZlciBldmVuIHVuZGVyXG4gKiBhIHBvb3IgYE1hdGgucmFuZG9tYC5cbiAqL1xuZnVuY3Rpb24gcmFuZG9tVVVJRCgpOiBzdHJpbmcge1xuICBjb25zdCBjID0gKFxuICAgIGdsb2JhbFRoaXMgYXMge1xuICAgICAgY3J5cHRvPzogeyByYW5kb21VVUlEPzogKCkgPT4gc3RyaW5nOyBnZXRSYW5kb21WYWx1ZXM/OiAoYTogVWludDhBcnJheSkgPT4gVWludDhBcnJheSB9O1xuICAgIH1cbiAgKS5jcnlwdG87XG4gIGlmIChjPy5yYW5kb21VVUlEKSByZXR1cm4gYy5yYW5kb21VVUlEKCk7XG4gIGlmIChjPy5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICBjb25zdCBiID0gYy5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTYpKTtcbiAgICBiWzZdID0gKGJbNl0gJiAweDBmKSB8IDB4NDA7XG4gICAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwO1xuICAgIGNvbnN0IGhleCA9IFsuLi5iXS5tYXAoKHgpID0+IHgudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIHJldHVybiBgJHtoZXguc2xpY2UoMCwgOCl9LSR7aGV4LnNsaWNlKDgsIDEyKX0tJHtoZXguc2xpY2UoMTIsIDE2KX0tJHtoZXguc2xpY2UoMTYsIDIwKX0tJHtoZXguc2xpY2UoMjApfWA7XG4gIH1cbiAgcmV0dXJuIHVuaXF1ZVVVSUQoKTtcbn1cblxuLyoqIE1vbm90b25pYyB3aXRoaW4gdGhlIHByb2Nlc3M7IHdyYXBzIHdlbGwgYWJvdmUgYW55IHBlci1taWxsaXNlY29uZCBidXJzdC4gKi9cbmxldCB1dWlkQ291bnRlciA9IDA7XG5cbi8qKlxuICogQSB2NC1TSEFQRUQgaWRlbnRpZmllciBidWlsdCB3aXRob3V0IGFueSBjcnlwdG8gc291cmNlLiBVbmlxdWUsIG5vdFxuICogdW5ndWVzc2FibGUg4oCUIHNlZSB0aGUgbm90ZSBvbiByYW5kb21VVUlEIGZvciB3aHkgdGhhdCBpcyB0aGUgcmlnaHRcbiAqIHJlcXVpcmVtZW50IGZvciB0aGlzIGhlYWRlci5cbiAqL1xuZnVuY3Rpb24gdW5pcXVlVVVJRCgpOiBzdHJpbmcge1xuICBjb25zdCBiID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyBpICs9IDEpIGJbaV0gPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyNTYpO1xuXG4gIC8vIEJ5dGVzIDAtMzogdGhlIGNsb2NrLCBzbyBrZXlzIGFyZSBvcmRlcmVkIGFuZCBjYW5ub3QgcmVwZWF0IGFjcm9zc1xuICAvLyBtaWxsaXNlY29uZHMgaG93ZXZlciB3ZWFrIE1hdGgucmFuZG9tIGlzLlxuICBjb25zdCB0ID0gRGF0ZS5ub3coKTtcbiAgYlswXSA9ICh0ID4+PiAyNCkgJiAweGZmO1xuICBiWzFdID0gKHQgPj4+IDE2KSAmIDB4ZmY7XG4gIGJbMl0gPSAodCA+Pj4gOCkgJiAweGZmO1xuICBiWzNdID0gdCAmIDB4ZmY7XG5cbiAgLy8gQnl0ZXMgNC01OiBhIHBlci1wcm9jZXNzIGNvdW50ZXIsIHNvIGEgYnVyc3QgaW5zaWRlIG9uZSBtaWxsaXNlY29uZFxuICAvLyBzdGlsbCBkaWZmZXJzLlxuICB1dWlkQ291bnRlciA9ICh1dWlkQ291bnRlciArIDEpICYgMHhmZmZmO1xuICBiWzRdID0gKHV1aWRDb3VudGVyID4+PiA4KSAmIDB4ZmY7XG4gIGJbNV0gPSB1dWlkQ291bnRlciAmIDB4ZmY7XG5cbiAgYls2XSA9IChiWzZdICYgMHgwZikgfCAweDQwOyAvLyB2ZXJzaW9uIDRcbiAgYls4XSA9IChiWzhdICYgMHgzZikgfCAweDgwOyAvLyB2YXJpYW50XG5cbiAgY29uc3QgaGV4ID0gWy4uLmJdLm1hcCgoeCkgPT4geC50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSkuam9pbignJyk7XG4gIHJldHVybiBgJHtoZXguc2xpY2UoMCwgOCl9LSR7aGV4LnNsaWNlKDgsIDEyKX0tJHtoZXguc2xpY2UoMTIsIDE2KX0tJHtoZXguc2xpY2UoMTYsIDIwKX0tJHtoZXguc2xpY2UoMjApfWA7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGhlYWRlcnMgZm9yIGEgcmVxdWVzdCB0byB0aGUgcGxhdGZvcm0gQVBJLlxuICpcbiAqIEFkZHMgdGhyZWUgcGxhdGZvcm0td2lkZSBoZWFkZXJzIGF1dG9tYXRpY2FsbHk6XG4gKiAgIC0gYFVzZXItQWdlbnRgIHNvIHRoZSBnYXRld2F5IGNhbiBhdHRyaWJ1dGUgdHJhZmZpYyB0byBTREsgdmVyc2lvblxuICogICAtIGBJZGVtcG90ZW5jeS1LZXlgIChVVUlEIHY0KSBvbiBtdXRhdGluZyBtZXRob2RzLCBzbyBjYWxsZXJzIGRvbid0XG4gKiAgICAgaGF2ZSB0byBnZW5lcmF0ZSBvbmUgcGVyIGNhbGxcbiAqICAgLSBgY29udGVudC10eXBlOiBhcHBsaWNhdGlvbi9qc29uYCB3aGVuIGEgYm9keSBpcyBzdXBwbGllZFxuICpcbiAqIEF1dGggY29tZXMgZnJvbSBgY29uZmlnLmF1dGhgOlxuICogICAtIGBiZWFyZXJgOiB0aGUgdG9rZW4gaXMgc2VudCB2ZXJiYXRpbSAoY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvclxuICogICAgIGZyZXNobmVzczsgU0RLIHRocm93cyBUb2tlbkV4cGlyZWRFcnJvciBvbiBsb2NhbC1kZXRlY3RlZCBleHBpcnkpXG4gKiAgIC0gYHRva2VuLXNvdXJjZWA6IFNESyBtaW50cyArIGNhY2hlcyB2aWEgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFsc1xuICogICAgIGFuZCByZWZyZXNoZXMgb24gZXhwaXJ5IC8gNDAxXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZEhlYWRlcnMoXG4gIGNvbmZpZzogUGxhdGZvcm1Db25maWcsXG4gIHBhcmFtczogU2lnbmVkSGVhZGVyUGFyYW1zLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ3VzZXItYWdlbnQnOiBgdWVuZ2FnZS1wbGF0Zm9ybS1zZGsvJHtTREtfVkVSU0lPTn1gLFxuICB9O1xuICBpZiAocGFyYW1zLmJvZHkgIT09IHVuZGVmaW5lZCkgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSAnYXBwbGljYXRpb24vanNvbic7XG4gIGlmIChNVVRBVElOR19NRVRIT0RTLmhhcyhwYXJhbXMubWV0aG9kLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgaGVhZGVyc1snaWRlbXBvdGVuY3kta2V5J10gPSByYW5kb21VVUlEKCk7XG4gIH1cblxuICBpZiAoIWNvbmZpZy5hdXRoKSByZXR1cm4gaGVhZGVycztcblxuICBpZiAoY29uZmlnLmF1dGgudHlwZSA9PT0gJ2JlYXJlcicpIHtcbiAgICBoZWFkZXJzWydhdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7Y29uZmlnLmF1dGgudG9rZW59YDtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIC8vIHRva2VuLXNvdXJjZTogbWludCArIGNhY2hlICsgcmVmcmVzaC1kZWR1cCBoYXBwZW5zIGluIGdldEFjY2Vzc1Rva2VuXG4gIGNvbnN0IHRva2VuID0gYXdhaXQgZ2V0QWNjZXNzVG9rZW4oY29uZmlnLmF1dGguc3RhdGUpO1xuICBoZWFkZXJzWydhdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VuZFJlcXVlc3RQYXJhbXMge1xuICBtZXRob2Q6IHN0cmluZztcbiAgLyoqIFVSTCBwYXRobmFtZSBvbmx5LCB3aXRob3V0IHF1ZXJ5IHN0cmluZy4gTXVzdCBtYXRjaCBgYy5yZXEucGF0aGAgc2VydmVyLXNpZGUuICovXG4gIHBhdGg6IHN0cmluZztcbiAgLyoqIEZ1bGx5LXF1YWxpZmllZCBVUkwgdGhlIGZldGNoIGlzIHNlbnQgdG8gKGJhc2UgKyBwYXRoICsgcXVlcnlzdHJpbmcpLiAqL1xuICB1cmw6IHN0cmluZztcbiAgLyoqIFJhdyBKU09OIGJvZHkgc3RyaW5nLCBvciB1bmRlZmluZWQgZm9yIG5vbmUuICovXG4gIGJvZHk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogU2VuZCBhIHJlcXVlc3Qgd2l0aCB0aGUgU0RLJ3Mgc3RhbmRhcmQgNDAxLXJldHJ5LW9uY2UgYmVoYXZpb3VyLlxuICpcbiAqIE9ubHkgcmV0cmllcyB3aGVuIGF1dGggaXMgYHRva2VuLXNvdXJjZWAsIHNpbmNlIHRoYXQncyB0aGUgY2FzZVxuICogd2hlcmUgdGhlIGNhY2hlZCB0b2tlbiBtYXkgaGF2ZSBleHBpcmVkIHNlcnZlci1zaWRlLiBITUFDIGFuZFxuICogc3RhdGljIGJlYXJlciA0MDFzIG1lYW4gdGhlIGF1dGggaXMgbWlzY29uZmlndXJlZCBhbmQgYSByZXRyeVxuICogd291bGQganVzdCBmYWlsIGFnYWluLiBCdWJibGUgdGhlIHJlc3BvbnNlIHNvIHRoZSBjYWxsZXIgc3VyZmFjZXMgaXQuXG4gKlxuICogU2hhcmVkIGJ5IGV2ZXJ5IG5hbWVzcGFjZSBjbGllbnQgKGJ1c2luZXNzLCBhdWRpdCwgem9uZXMsIC4uLikgc29cbiAqIHRoZSByZXRyeSBzZW1hbnRpY3MgYXJlIHVuaWZvcm0uIExpZnRlZCBvdXQgb2YgYGJ1c2luZXNzL2NsaWVudC50c2BcbiAqIHdpdGggbm8gYmVoYXZpb3VyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlbmRXaXRoQXV0aFJldHJ5KFxuICBjb25maWc6IFBsYXRmb3JtQ29uZmlnLFxuICBwYXJhbXM6IFNlbmRSZXF1ZXN0UGFyYW1zLFxuKTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICBjb25zdCBoZWFkZXJzID0gYXdhaXQgYnVpbGRIZWFkZXJzKGNvbmZpZywge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICBib2R5OiBwYXJhbXMuYm9keSxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGNvbmZpZy5mZXRjaEZuKHBhcmFtcy51cmwsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgaGVhZGVycyxcbiAgICBib2R5OiBwYXJhbXMuYm9keSxcbiAgfSk7XG4gIGlmIChyZXMuc3RhdHVzICE9PSA0MDEgfHwgY29uZmlnLmF1dGg/LnR5cGUgIT09ICd0b2tlbi1zb3VyY2UnKSByZXR1cm4gcmVzO1xuICBpbnZhbGlkYXRlVG9rZW4oY29uZmlnLmF1dGguc3RhdGUpO1xuICBjb25zdCByZXRyeUhlYWRlcnMgPSBhd2FpdCBidWlsZEhlYWRlcnMoY29uZmlnLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIHBhdGg6IHBhcmFtcy5wYXRoLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbiAgcmV0dXJuIGNvbmZpZy5mZXRjaEZuKHBhcmFtcy51cmwsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgaGVhZGVyczogcmV0cnlIZWFkZXJzLFxuICAgIGJvZHk6IHBhcmFtcy5ib2R5LFxuICB9KTtcbn1cbiJdfQ==
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
* AppSync assigns the Event API's DNS names at create time
|
|
8
8
|
* (`<apiId>.appsync-api.<region>.amazonaws.com` and the matching
|
|
9
9
|
* `appsync-realtime-api` host), so they cannot be known before the stack
|
|
10
|
-
* is deployed.
|
|
11
|
-
*
|
|
12
|
-
*
|
|
10
|
+
* is deployed. An environment without a deployed stack stays null and
|
|
11
|
+
* `connect({ env })` throws with instructions; `connect({ endpoints })`
|
|
12
|
+
* always works.
|
|
13
13
|
*/
|
|
14
14
|
export interface RealtimeEndpoints {
|
|
15
15
|
/** AppSync Event API HTTP domain. Also the `host` in the auth header. */
|
|
@@ -3,15 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.API_BASE = void 0;
|
|
4
4
|
exports.endpointsFor = endpointsFor;
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* `
|
|
9
|
-
*
|
|
6
|
+
* AppSync assigns these at Event API create time and the prefix is NOT the
|
|
7
|
+
* API id, so they cannot be constructed — they are copied from the
|
|
8
|
+
* `RealtimeEventApiHttpDns-{env}` / `RealtimeEventApiRealtimeDns-{env}`
|
|
9
|
+
* outputs of `UengageRealtimeService-{env}`.
|
|
10
|
+
*
|
|
11
|
+
* Because a cached browser bundle carries these values, recreating an Event
|
|
12
|
+
* API is a breaking change for every pinned consumer. The `browser-sdk`
|
|
13
|
+
* release job asserts the prod pair still matches the live stack exports and
|
|
14
|
+
* fails the release on drift, so this table cannot rot silently.
|
|
15
|
+
*
|
|
16
|
+
* `dev` stays null — the realtime stack is not deployed there.
|
|
10
17
|
*/
|
|
11
18
|
const ENDPOINTS = {
|
|
12
19
|
dev: null,
|
|
13
|
-
uat:
|
|
14
|
-
|
|
20
|
+
uat: {
|
|
21
|
+
httpDomain: 'zl2kormwrjexbglkbpsy44xye4.appsync-api.ap-south-1.amazonaws.com',
|
|
22
|
+
realtimeDomain: 'zl2kormwrjexbglkbpsy44xye4.appsync-realtime-api.ap-south-1.amazonaws.com',
|
|
23
|
+
apiBase: 'https://api.uat.platform.uengage.io',
|
|
24
|
+
},
|
|
25
|
+
prod: {
|
|
26
|
+
httpDomain: '6dhfjtlvyjfalku7umbusuilha.appsync-api.ap-south-1.amazonaws.com',
|
|
27
|
+
realtimeDomain: '6dhfjtlvyjfalku7umbusuilha.appsync-realtime-api.ap-south-1.amazonaws.com',
|
|
28
|
+
apiBase: 'https://api.platform.uengage.io',
|
|
29
|
+
},
|
|
15
30
|
};
|
|
16
31
|
/** Platform API base per environment — known ahead of any deploy. */
|
|
17
32
|
exports.API_BASE = {
|
|
@@ -28,4 +43,4 @@ function endpointsFor(env) {
|
|
|
28
43
|
}
|
|
29
44
|
return found;
|
|
30
45
|
}
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
46
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWx0aW1lL2VuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwREEsb0NBVUM7QUE1Q0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxTQUFTLEdBQWtEO0lBQy9ELEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFO1FBQ0gsVUFBVSxFQUFFLGlFQUFpRTtRQUM3RSxjQUFjLEVBQUUsMEVBQTBFO1FBQzFGLE9BQU8sRUFBRSxxQ0FBcUM7S0FDL0M7SUFDRCxJQUFJLEVBQUU7UUFDSixVQUFVLEVBQUUsaUVBQWlFO1FBQzdFLGNBQWMsRUFBRSwwRUFBMEU7UUFDMUYsT0FBTyxFQUFFLGlDQUFpQztLQUMzQztDQUNGLENBQUM7QUFFRixxRUFBcUU7QUFDeEQsUUFBQSxRQUFRLEdBQWdDO0lBQ25ELEdBQUcsRUFBRSxxQ0FBcUM7SUFDMUMsR0FBRyxFQUFFLHFDQUFxQztJQUMxQyxJQUFJLEVBQUUsaUNBQWlDO0NBQ3hDLENBQUM7QUFFRixTQUFnQixZQUFZLENBQUMsR0FBZ0I7SUFDM0MsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELEdBQUcsS0FBSztZQUM1RCxpRkFBaUY7WUFDakYsbUZBQW1GLENBQ3RGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXItZW52aXJvbm1lbnQgcmVhbHRpbWUgZW5kcG9pbnRzLlxuICpcbiAqIEZyb250ZW5kcyBwYXNzIGBjb25uZWN0KHsgZW52OiAncHJvZCcgfSlgIGFuZCBnZXQgVVJMcyBmcm9tIGhlcmUg4oCUIG5vXG4gKiBob3N0bmFtZXMgb3IgQVJOcyBpbiBhcHAgY29kZS5cbiAqXG4gKiBBcHBTeW5jIGFzc2lnbnMgdGhlIEV2ZW50IEFQSSdzIEROUyBuYW1lcyBhdCBjcmVhdGUgdGltZVxuICogKGA8YXBpSWQ+LmFwcHN5bmMtYXBpLjxyZWdpb24+LmFtYXpvbmF3cy5jb21gIGFuZCB0aGUgbWF0Y2hpbmdcbiAqIGBhcHBzeW5jLXJlYWx0aW1lLWFwaWAgaG9zdCksIHNvIHRoZXkgY2Fubm90IGJlIGtub3duIGJlZm9yZSB0aGUgc3RhY2tcbiAqIGlzIGRlcGxveWVkLiBBbiBlbnZpcm9ubWVudCB3aXRob3V0IGEgZGVwbG95ZWQgc3RhY2sgc3RheXMgbnVsbCBhbmRcbiAqIGBjb25uZWN0KHsgZW52IH0pYCB0aHJvd3Mgd2l0aCBpbnN0cnVjdGlvbnM7IGBjb25uZWN0KHsgZW5kcG9pbnRzIH0pYFxuICogYWx3YXlzIHdvcmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lRW5kcG9pbnRzIHtcbiAgLyoqIEFwcFN5bmMgRXZlbnQgQVBJIEhUVFAgZG9tYWluLiBBbHNvIHRoZSBgaG9zdGAgaW4gdGhlIGF1dGggaGVhZGVyLiAqL1xuICBodHRwRG9tYWluOiBzdHJpbmc7XG4gIC8qKiBBcHBTeW5jIEV2ZW50IEFQSSByZWFsdGltZSAoV2ViU29ja2V0KSBkb21haW4uICovXG4gIHJlYWx0aW1lRG9tYWluOiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBBUEkgYmFzZSBVUkwsIHVzZWQgZm9yIHRoZSBsYXN0LXZhbHVlIHNuYXBzaG90IGZldGNoLiAqL1xuICBhcGlCYXNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWx0aW1lRW52ID0gJ2RldicgfCAndWF0JyB8ICdwcm9kJztcblxuLyoqXG4gKiBBcHBTeW5jIGFzc2lnbnMgdGhlc2UgYXQgRXZlbnQgQVBJIGNyZWF0ZSB0aW1lIGFuZCB0aGUgcHJlZml4IGlzIE5PVCB0aGVcbiAqIEFQSSBpZCwgc28gdGhleSBjYW5ub3QgYmUgY29uc3RydWN0ZWQg4oCUIHRoZXkgYXJlIGNvcGllZCBmcm9tIHRoZVxuICogYFJlYWx0aW1lRXZlbnRBcGlIdHRwRG5zLXtlbnZ9YCAvIGBSZWFsdGltZUV2ZW50QXBpUmVhbHRpbWVEbnMte2Vudn1gXG4gKiBvdXRwdXRzIG9mIGBVZW5nYWdlUmVhbHRpbWVTZXJ2aWNlLXtlbnZ9YC5cbiAqXG4gKiBCZWNhdXNlIGEgY2FjaGVkIGJyb3dzZXIgYnVuZGxlIGNhcnJpZXMgdGhlc2UgdmFsdWVzLCByZWNyZWF0aW5nIGFuIEV2ZW50XG4gKiBBUEkgaXMgYSBicmVha2luZyBjaGFuZ2UgZm9yIGV2ZXJ5IHBpbm5lZCBjb25zdW1lci4gVGhlIGBicm93c2VyLXNka2BcbiAqIHJlbGVhc2Ugam9iIGFzc2VydHMgdGhlIHByb2QgcGFpciBzdGlsbCBtYXRjaGVzIHRoZSBsaXZlIHN0YWNrIGV4cG9ydHMgYW5kXG4gKiBmYWlscyB0aGUgcmVsZWFzZSBvbiBkcmlmdCwgc28gdGhpcyB0YWJsZSBjYW5ub3Qgcm90IHNpbGVudGx5LlxuICpcbiAqIGBkZXZgIHN0YXlzIG51bGwg4oCUIHRoZSByZWFsdGltZSBzdGFjayBpcyBub3QgZGVwbG95ZWQgdGhlcmUuXG4gKi9cbmNvbnN0IEVORFBPSU5UUzogUmVjb3JkPFJlYWx0aW1lRW52LCBSZWFsdGltZUVuZHBvaW50cyB8IG51bGw+ID0ge1xuICBkZXY6IG51bGwsXG4gIHVhdDoge1xuICAgIGh0dHBEb21haW46ICd6bDJrb3Jtd3JqZXhiZ2xrYnBzeTQ0eHllNC5hcHBzeW5jLWFwaS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20nLFxuICAgIHJlYWx0aW1lRG9tYWluOiAnemwya29ybXdyamV4Ymdsa2Jwc3k0NHh5ZTQuYXBwc3luYy1yZWFsdGltZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tJyxcbiAgICBhcGlCYXNlOiAnaHR0cHM6Ly9hcGkudWF0LnBsYXRmb3JtLnVlbmdhZ2UuaW8nLFxuICB9LFxuICBwcm9kOiB7XG4gICAgaHR0cERvbWFpbjogJzZkaGZqdGx2eWpmYWxrdTd1bWJ1c3VpbGhhLmFwcHN5bmMtYXBpLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbScsXG4gICAgcmVhbHRpbWVEb21haW46ICc2ZGhmanRsdnlqZmFsa3U3dW1idXN1aWxoYS5hcHBzeW5jLXJlYWx0aW1lLWFwaS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20nLFxuICAgIGFwaUJhc2U6ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbiAgfSxcbn07XG5cbi8qKiBQbGF0Zm9ybSBBUEkgYmFzZSBwZXIgZW52aXJvbm1lbnQg4oCUIGtub3duIGFoZWFkIG9mIGFueSBkZXBsb3kuICovXG5leHBvcnQgY29uc3QgQVBJX0JBU0U6IFJlY29yZDxSZWFsdGltZUVudiwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9hcGkuZGV2LnBsYXRmb3JtLnVlbmdhZ2UuaW8nLFxuICB1YXQ6ICdodHRwczovL2FwaS51YXQucGxhdGZvcm0udWVuZ2FnZS5pbycsXG4gIHByb2Q6ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludHNGb3IoZW52OiBSZWFsdGltZUVudik6IFJlYWx0aW1lRW5kcG9pbnRzIHtcbiAgY29uc3QgZm91bmQgPSBFTkRQT0lOVFNbZW52XTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGByZWFsdGltZS5jb25uZWN0OiBubyBlbmRwb2ludHMgcmVnaXN0ZXJlZCBmb3IgZW52IFwiJHtlbnZ9XCIuIGAgK1xuICAgICAgICAnUGFzcyB7ZW5kcG9pbnRzOiB7aHR0cERvbWFpbiwgcmVhbHRpbWVEb21haW4sIGFwaUJhc2V9fSBleHBsaWNpdGx5LCBvciBmaWxsIGluICcgK1xuICAgICAgICBcInNyYy9yZWFsdGltZS9lbmRwb2ludHMudHMgZnJvbSB0aGUgcmVhbHRpbWUgc3RhY2sncyBSZWFsdGltZUV2ZW50QXBpKkRucyBvdXRwdXRzLlwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuIl19
|
package/dist/token-source.d.ts
CHANGED
|
@@ -20,6 +20,20 @@ export type TokenSource = {
|
|
|
20
20
|
} | {
|
|
21
21
|
kind: 'callback';
|
|
22
22
|
getToken: () => string | Promise<string>;
|
|
23
|
+
} | {
|
|
24
|
+
/**
|
|
25
|
+
* `tokenUrl` — a route on the CALLER's own server that returns
|
|
26
|
+
* `{ token, expiresIn }`. Mirrors the realtime SDK option of the
|
|
27
|
+
* same name, and exists for the same reason: it keeps the client
|
|
28
|
+
* secret on the caller's server instead of in a page or an app
|
|
29
|
+
* bundle.
|
|
30
|
+
*
|
|
31
|
+
* `expiresIn` is seconds from receipt, per the realtime contract.
|
|
32
|
+
* It is trusted over the JWT's own `exp` because the caller's
|
|
33
|
+
* server may deliberately hand out a shorter-lived slice.
|
|
34
|
+
*/
|
|
35
|
+
kind: 'token-url';
|
|
36
|
+
tokenUrl: string;
|
|
23
37
|
} | {
|
|
24
38
|
kind: 'service-credentials';
|
|
25
39
|
clientId: string;
|
package/dist/token-source.js
CHANGED
|
@@ -96,6 +96,32 @@ async function mintToken(state) {
|
|
|
96
96
|
expiresAt: exp !== null ? exp * 1000 : Date.now() + 60 * 60 * 1000,
|
|
97
97
|
};
|
|
98
98
|
}
|
|
99
|
+
case 'token-url': {
|
|
100
|
+
const res = await state.fetchFn(state.source.tokenUrl, {
|
|
101
|
+
method: 'GET',
|
|
102
|
+
headers: { accept: 'application/json' },
|
|
103
|
+
});
|
|
104
|
+
if (!res.ok) {
|
|
105
|
+
throw new errors_1.AuthenticationError(`tokenUrl ${state.source.tokenUrl} answered HTTP ${res.status}`);
|
|
106
|
+
}
|
|
107
|
+
const body = (await res.json().catch(() => ({})));
|
|
108
|
+
if (typeof body.token !== 'string' || body.token === '') {
|
|
109
|
+
throw new errors_1.AuthenticationError(`tokenUrl ${state.source.tokenUrl} returned no token; expected { token, expiresIn }`);
|
|
110
|
+
}
|
|
111
|
+
// A missing or unusable expiresIn falls back to the JWT's own exp, then
|
|
112
|
+
// to five minutes — short enough that a bad value cannot pin a stale
|
|
113
|
+
// token for long.
|
|
114
|
+
const secs = typeof body.expiresIn === 'number' && body.expiresIn > 0 ? body.expiresIn : undefined;
|
|
115
|
+
const exp = (0, issuer_1.getExpiry)(body.token);
|
|
116
|
+
return {
|
|
117
|
+
token: body.token,
|
|
118
|
+
expiresAt: secs !== undefined
|
|
119
|
+
? Date.now() + secs * 1000
|
|
120
|
+
: exp !== null
|
|
121
|
+
? exp * 1000
|
|
122
|
+
: Date.now() + 5 * 60 * 1000,
|
|
123
|
+
};
|
|
124
|
+
}
|
|
99
125
|
case 'callback': {
|
|
100
126
|
const token = await state.source.getToken();
|
|
101
127
|
const exp = (0, issuer_1.getExpiry)(token);
|
|
@@ -172,4 +198,4 @@ function base64(s) {
|
|
|
172
198
|
// eslint-disable-next-line no-undef
|
|
173
199
|
return btoa(s);
|
|
174
200
|
}
|
|
175
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rva2VuLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9FQSxvREFTQztBQU9ELHdDQXNCQztBQU1ELDBDQUVDO0FBbEhELHFDQUEwRDtBQUMxRCwwQ0FBMEM7QUFpRTFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLFNBQWdCLG9CQUFvQixDQUNsQyxNQUFtQixFQUNuQixVQUErRCxFQUFFO0lBRWpFLE9BQU87UUFDTCxNQUFNO1FBQ04sY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksd0JBQXdCO1FBQ2xFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFLLFVBQVUsQ0FBQyxLQUFzQjtLQUMvRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUFDLEtBQXVCO0lBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDN0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7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QUksQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BGLG9DQUFvQztJQUNwQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnRXJyb3IsIFRva2VuRXhwaXJlZEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgZ2V0RXhwaXJ5IH0gZnJvbSAnLi9hdXRoL2lzc3Vlcic7XG5cbi8qKlxuICogSG93IHRoZSBTREsgZ2V0cyBhIGZyZXNoIGFjY2VzcyB0b2tlbi4gVGhyZWUgc2hhcGVzIHBlciB0aGUgYnJpZWY6XG4gKlxuICogICAtIGBzdGF0aWMtc3RyaW5nYCDigJQgY2FsbGVyIGhhbmRzIGluIGEgdG9rZW4gc3RyaW5nLiBVc2VkIHVudGlsIGl0c1xuICogICAgIGBleHBgIGhhcyBwYXNzZWQ7IG9uIGV4cGlyeSB3ZSB0aHJvdyBgVG9rZW5FeHBpcmVkRXJyb3JgIHJhdGhlclxuICogICAgIHRoYW4gdHJ5IHRvIHJlZnJlc2ggKHRoZSBTREsgaGFzIG5vIHdheSB0byByZWZyZXNoIGEgc3RhdGljXG4gKiAgICAgZXh0ZXJuYWxseS1zdXBwbGllZCB0b2tlbikuXG4gKlxuICogICAtIGBjYWxsYmFja2Ag4oCUIGNhbGxlciBzdXBwbGllcyBhIGZ1bmN0aW9uIHRoZSBTREsgY2FsbHMgb24gbWlzc1xuICogICAgIGFuZCBvbiA0MDEgaW52YWxpZGF0aW9uLiBUaGUgY29uc3VtZXIncyBsb2dpYyBpcyByZXNwb25zaWJsZSBmb3JcbiAqICAgICByZWZyZXNoOyB0aGUgU0RLIGp1c3QgY2FjaGVzIHRoZSByZXN1bHQgYmV0d2VlbiBpbnZvY2F0aW9ucy5cbiAqXG4gKiAgIC0gYHNlcnZpY2UtY3JlZGVudGlhbHNgIOKAlCBgY2xpZW50X2lkYCArIGBjbGllbnRfc2VjcmV0YCBmb3IgdGhlXG4gKiAgICAgT0F1dGgyIGBjbGllbnRfY3JlZGVudGlhbHNgIGdyYW50LiBTREsgbWludHMgKyBjYWNoZXM7IG9uXG4gKiAgICAgZXhwaXJ5IGl0IHJlLW1pbnRzIHdpdGggdGhlIHNhbWUgY3JlZGVudGlhbHMuXG4gKi9cbmV4cG9ydCB0eXBlIFRva2VuU291cmNlID1cbiAgfCB7IGtpbmQ6ICdzdGF0aWMtc3RyaW5nJzsgdG9rZW46IHN0cmluZyB9XG4gIHwgeyBraW5kOiAnY2FsbGJhY2snOyBnZXRUb2tlbjogKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+IH1cbiAgfCB7XG4gICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscyc7XG4gICAgICBjbGllbnRJZDogc3RyaW5nO1xuICAgICAgY2xpZW50U2VjcmV0OiBzdHJpbmc7XG4gICAgICBhdXRoQmFzZVVybDogc3RyaW5nO1xuICAgICAgc2NvcGU/OiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIC8qKlxuICAgICAgICogQ2FsbGVyIGhhbmRzIHRoZSBTREsgYSBgKGFjY2Vzc1Rva2VuLCByZWZyZXNoVG9rZW4pYCBwYWlyIGZyb21cbiAgICAgICAqIGEgZmluaXNoZWQgbG9naW4gZmxvdyAoYGF1dGgubG9naW5XaXRoUGFzc3dvcmQoLi4uKWAsXG4gICAgICAgKiBgYXV0aC52ZXJpZnlPdHAoLi4uKWAsIGV0YykuIFRoZSBTREsgc2VydmVzIHRoZSBhY2Nlc3MgdG9rZW5cbiAgICAgICAqIHVudGlsIGl0IGV4cGlyZXMsIHRoZW4gcm90YXRlcyB2aWEgYGF1dGgucmVmcmVzaCguLi4pYC5cbiAgICAgICAqXG4gICAgICAgKiBgY2xpZW50SWRgIGlzIHRoZSBPQXV0aCBjbGllbnQgaWQgdXNlZCBkdXJpbmcgdGhlIG9yaWdpbmFsXG4gICAgICAgKiBsb2dpbiDigJQgcmVxdWlyZWQgYnkgdGhlIHJlZnJlc2ggaGFuZGxlci4gYG9uUm90YXRlYCBpcyBhblxuICAgICAgICogb3B0aW9uYWwgaG9vayB0aGUgY2FsbGVyIGNhbiB1c2UgdG8gcGVyc2lzdCB0aGUgbmV3IHBhaXJcbiAgICAgICAqIChjb29raWUsIHNlY3VyZSBzdG9yYWdlLCBldGMpIOKAlCBmaXJlZCB3aXRoIGV2ZXJ5IHN1Y2Nlc3NmdWxcbiAgICAgICAqIHJvdGF0aW9uLlxuICAgICAgICovXG4gICAgICBraW5kOiAnYWNjZXNzLXJlZnJlc2gtcGFpcic7XG4gICAgICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgICAvKiogSW5pdGlhbCBleHBpcnkgdGltZXN0YW1wIChtcyBzaW5jZSBlcG9jaCkuIFJlLWRlcml2ZWQgZnJvbSBlYWNoIG5ldyBhY2Nlc3MgdG9rZW4uICovXG4gICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgICBvblJvdGF0ZT86IChwYWlyOiB7XG4gICAgICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgICAgIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAgICAgICBleHBpcmVzQXQ6IG51bWJlcjtcbiAgICAgIH0pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+O1xuICAgIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVG9rZW5Tb3VyY2VTdGF0ZSB7XG4gIHNvdXJjZTogVG9rZW5Tb3VyY2U7XG4gIGNhY2hlZD86IHsgdG9rZW46IHN0cmluZzsgZXhwaXJlc0F0OiBudW1iZXIgfTtcbiAgLyoqIFJlZnJlc2ggZGVkdXA6IGNvbmN1cnJlbnQgcmVxdWVzdHMgc2hhcmUgdGhlIHNhbWUgZmV0Y2guICovXG4gIGluZmxpZ2h0PzogUHJvbWlzZTx7IHRva2VuOiBzdHJpbmc7IGV4cGlyZXNBdDogbnVtYmVyIH0+O1xuICAvKiogQnVmZmVyIChtcykgYmVmb3JlIGBleHBgIGF0IHdoaWNoIHdlIHRyZWF0IGEgdG9rZW4gYXMgZXhwaXJlZC4gKi9cbiAgZXhwaXJ5QnVmZmVyTXM6IG51bWJlcjtcbiAgLyoqIFVzZWQgb25seSBieSB0aGUgc2VydmljZS1jcmVkZW50aWFscyBwYXRoLiAqL1xuICBmZXRjaEZuOiB0eXBlb2YgZmV0Y2g7XG59XG5cbmNvbnN0IERFRkFVTFRfRVhQSVJZX0JVRkZFUl9NUyA9IDUwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgc291cmNlOiBUb2tlblNvdXJjZSxcbiAgb3B0aW9uczogeyBleHBpcnlCdWZmZXJNcz86IG51bWJlcjsgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaCB9ID0ge30sXG4pOiBUb2tlblNvdXJjZVN0YXRlIHtcbiAgcmV0dXJuIHtcbiAgICBzb3VyY2UsXG4gICAgZXhwaXJ5QnVmZmVyTXM6IG9wdGlvbnMuZXhwaXJ5QnVmZmVyTXMgPz8gREVGQVVMVF9FWFBJUllfQlVGRkVSX01TLFxuICAgIGZldGNoRm46IG9wdGlvbnMuZmV0Y2hGbiA/PyAoZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gpLFxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybiBhIGZyZXNoIGFjY2VzcyB0b2tlbiwgdXNpbmcgdGhlIGNhY2hlIHdoZW4gd2FybS4gQ29uY3VycmVudFxuICogY2FsbGVycyBkdXJpbmcgYSByZWZyZXNoIHNoYXJlIHRoZSBpbi1mbGlnaHQgUHJvbWlzZSBzbyB3ZSBkb24ndFxuICogc3RhbXBlZGUgdGhlIGF1dGggc2VydmVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QWNjZXNzVG9rZW4oc3RhdGU6IFRva2VuU291cmNlU3RhdGUpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICBpZiAoc3RhdGUuY2FjaGVkICYmIHN0YXRlLmNhY2hlZC5leHBpcmVzQXQgPiBub3cgKyBzdGF0ZS5leHBpcnlCdWZmZXJNcykge1xuICAgIHJldHVybiBzdGF0ZS5jYWNoZWQudG9rZW47XG4gIH1cbiAgaWYgKHN0YXRlLmluZmxpZ2h0KSB7XG4gICAgY29uc3QgZnJlc2ggPSBhd2FpdCBzdGF0ZS5pbmZsaWdodDtcbiAgICByZXR1cm4gZnJlc2gudG9rZW47XG4gIH1cbiAgY29uc3QgaW5mbGlnaHQgPSBtaW50VG9rZW4oc3RhdGUpLnRoZW4oKHJlcykgPT4ge1xuICAgIHN0YXRlLmNhY2hlZCA9IHJlcztcbiAgICBzdGF0ZS5pbmZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gcmVzO1xuICB9KTtcbiAgc3RhdGUuaW5mbGlnaHQgPSBpbmZsaWdodDtcbiAgdHJ5IHtcbiAgICBjb25zdCBmcmVzaCA9IGF3YWl0IGluZmxpZ2h0O1xuICAgIHJldHVybiBmcmVzaC50b2tlbjtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RhdGUuaW5mbGlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhyb3cgZXJyO1xuICB9XG59XG5cbi8qKlxuICogRHJvcCB0aGUgY2FjaGVkIHRva2VuLiBUaGUgbmV4dCBgZ2V0QWNjZXNzVG9rZW5gIHdpbGwgbWludCBvclxuICogcmUtZmV0Y2guIENhbGxlZCBieSB0aGUgcmVxdWVzdCBsYXllciBvbiA0MDEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlVG9rZW4oc3RhdGU6IFRva2VuU291cmNlU3RhdGUpOiB2b2lkIHtcbiAgc3RhdGUuY2FjaGVkID0gdW5kZWZpbmVkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBtaW50VG9rZW4oc3RhdGU6IFRva2VuU291cmNlU3RhdGUpOiBQcm9taXNlPHsgdG9rZW46IHN0cmluZzsgZXhwaXJlc0F0OiBudW1iZXIgfT4ge1xuICBzd2l0Y2ggKHN0YXRlLnNvdXJjZS5raW5kKSB7XG4gICAgY2FzZSAnc3RhdGljLXN0cmluZyc6IHtcbiAgICAgIGNvbnN0IGV4cCA9IGdldEV4cGlyeShzdGF0ZS5zb3VyY2UudG9rZW4pO1xuICAgICAgaWYgKGV4cCAhPT0gbnVsbCAmJiBleHAgKiAxMDAwIDwgRGF0ZS5ub3coKSArIHN0YXRlLmV4cGlyeUJ1ZmZlck1zKSB7XG4gICAgICAgIHRocm93IG5ldyBUb2tlbkV4cGlyZWRFcnJvcihcbiAgICAgICAgICAnc3RhdGljIGFjY2VzcyB0b2tlbiBoYXMgZXhwaXJlZDsgY29uc3VtZXIgbXVzdCB1cGRhdGUgdGhlIGNvbmZpZyB3aXRoIGEgZnJlc2ggdG9rZW4nLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW46IHN0YXRlLnNvdXJjZS50b2tlbixcbiAgICAgICAgLy8gTm8gYGV4cGA/IFRyZWF0IGFzIG9wYXF1ZSBub24tZXhwaXJpbmc7IGNhY2hlIGZvciAxaCB0byBhdm9pZFxuICAgICAgICAvLyByZS11c2luZyB0aGUgc2FtZSBzdHJpbmcgZm9yZXZlciBpbiBjYXNlIHRoZSBpc3N1ZXIgcm90YXRlcy5cbiAgICAgICAgZXhwaXJlc0F0OiBleHAgIT09IG51bGwgPyBleHAgKiAxMDAwIDogRGF0ZS5ub3coKSArIDYwICogNjAgKiAxMDAwLFxuICAgICAgfTtcbiAgICB9XG4gICAgY2FzZSAnY2FsbGJhY2snOiB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHN0YXRlLnNvdXJjZS5nZXRUb2tlbigpO1xuICAgICAgY29uc3QgZXhwID0gZ2V0RXhwaXJ5KHRva2VuKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuLFxuICAgICAgICBleHBpcmVzQXQ6IGV4cCAhPT0gbnVsbCA/IGV4cCAqIDEwMDAgOiBEYXRlLm5vdygpICsgNSAqIDYwICogMTAwMCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ3NlcnZpY2UtY3JlZGVudGlhbHMnOiB7XG4gICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7IGdyYW50X3R5cGU6ICdjbGllbnRfY3JlZGVudGlhbHMnIH0pO1xuICAgICAgaWYgKHN0YXRlLnNvdXJjZS5zY29wZSkgYm9keS5zZXQoJ3Njb3BlJywgc3RhdGUuc291cmNlLnNjb3BlKTtcbiAgICAgIGNvbnN0IGJhc2ljID0gYmFzZTY0KGAke3N0YXRlLnNvdXJjZS5jbGllbnRJZH06JHtzdGF0ZS5zb3VyY2UuY2xpZW50U2VjcmV0fWApO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhdGUuZmV0Y2hGbihgJHtzdGF0ZS5zb3VyY2UuYXV0aEJhc2VVcmx9L29hdXRoL3Rva2VuYCwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJyxcbiAgICAgICAgICBhdXRob3JpemF0aW9uOiBgQmFzaWMgJHtiYXNpY31gLFxuICAgICAgICB9LFxuICAgICAgICBib2R5OiBib2R5LnRvU3RyaW5nKCksXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXMudGV4dCgpO1xuICAgICAgICB0aHJvdyBuZXcgQ29uZmlnRXJyb3IoYGNsaWVudF9jcmVkZW50aWFscyBtaW50IGZhaWxlZDogSFRUUCAke3Jlcy5zdGF0dXN9ICR7dGV4dH1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb24gPSAoYXdhaXQgcmVzLmpzb24oKSkgYXMgeyBhY2Nlc3NfdG9rZW4/OiBzdHJpbmc7IGV4cGlyZXNfaW4/OiBudW1iZXIgfTtcbiAgICAgIGlmICghanNvbi5hY2Nlc3NfdG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdhdXRoIHNlcnZlciByZXNwb25zZSBtaXNzaW5nIGFjY2Vzc190b2tlbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgdHRsID0gKGpzb24uZXhwaXJlc19pbiA/PyAwKSAqIDEwMDA7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbjoganNvbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgIGV4cGlyZXNBdDogdHRsID4gMCA/IERhdGUubm93KCkgKyB0dGwgOiBEYXRlLm5vdygpICsgNSAqIDYwICogMTAwMCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2FjY2Vzcy1yZWZyZXNoLXBhaXInOiB7XG4gICAgICAvLyBGaXJzdCBjYWxsOiBzZXJ2ZSB0aGUgc2VlZCBhY2Nlc3MgdG9rZW4gaWYgaXQgaGFzbid0IGV4cGlyZWQuXG4gICAgICAvLyBTdWJzZXF1ZW50IGNhbGxzIChvciBvbiBhIHN0YWxlIHNlZWQpIHJvdGF0ZSB2aWEgYXV0aC5yZWZyZXNoKCkuXG4gICAgICBjb25zdCBzb3VyY2UgPSBzdGF0ZS5zb3VyY2U7XG4gICAgICBpZiAoRGF0ZS5ub3coKSArIHN0YXRlLmV4cGlyeUJ1ZmZlck1zIDwgc291cmNlLmV4cGlyZXNBdCkge1xuICAgICAgICByZXR1cm4geyB0b2tlbjogc291cmNlLmFjY2Vzc1Rva2VuLCBleHBpcmVzQXQ6IHNvdXJjZS5leHBpcmVzQXQgfTtcbiAgICAgIH1cbiAgICAgIC8vIER5bmFtaWMgaW1wb3J0IGtlZXBzIGBhdXRoYCBvdXQgb2YgdGhlIGJ1bmRsZSB3aGVuIHRoaXMga2luZCBpc24ndCB1c2VkLlxuICAgICAgY29uc3QgeyByZWZyZXNoIH0gPSBhd2FpdCBpbXBvcnQoJy4vYXV0aC9yZWZyZXNoJyk7XG4gICAgICBjb25zdCB0b2tlbnMgPSBhd2FpdCByZWZyZXNoKHtcbiAgICAgICAgYWNjZXNzVG9rZW46IHNvdXJjZS5hY2Nlc3NUb2tlbixcbiAgICAgICAgcmVmcmVzaFRva2VuOiBzb3VyY2UucmVmcmVzaFRva2VuLFxuICAgICAgICBjbGllbnRJZDogc291cmNlLmNsaWVudElkLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXRva2Vucy5yZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKCdyZWZyZXNoIHJlc3BvbnNlIG1pc3NpbmcgcmVmcmVzaF90b2tlbjsgY2Fubm90IHJvdGF0ZSBhZ2FpbicpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXhwaXJlc0F0ID0gRGF0ZS5ub3coKSArIHRva2Vucy5leHBpcmVzSW4gKiAxMDAwO1xuICAgICAgLy8gTXV0YXRlIHRoZSBzb3VyY2UgaW4gcGxhY2Ugc28gc3Vic2VxdWVudCByb3RhdGlvbnMgY2FycnkgdGhlIG5ldyBwYWlyLlxuICAgICAgc291cmNlLmFjY2Vzc1Rva2VuID0gdG9rZW5zLmFjY2Vzc1Rva2VuO1xuICAgICAgc291cmNlLnJlZnJlc2hUb2tlbiA9IHRva2Vucy5yZWZyZXNoVG9rZW47XG4gICAgICBzb3VyY2UuZXhwaXJlc0F0ID0gZXhwaXJlc0F0O1xuICAgICAgaWYgKHNvdXJjZS5vblJvdGF0ZSkge1xuICAgICAgICBhd2FpdCBzb3VyY2Uub25Sb3RhdGUoe1xuICAgICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbnMuYWNjZXNzVG9rZW4sXG4gICAgICAgICAgcmVmcmVzaFRva2VuOiB0b2tlbnMucmVmcmVzaFRva2VuLFxuICAgICAgICAgIGV4cGlyZXNBdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyB0b2tlbjogdG9rZW5zLmFjY2Vzc1Rva2VuLCBleHBpcmVzQXQgfTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0KHM6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFdvcmtzIGluIE5vZGUgYW5kIGJyb3dzZXIgKEJ1ZmZlciBpcyBwb2x5ZmlsbGVkIHZpYSBAdHlwZXMvbm9kZSBhbmRcbiAgLy8gbW9zdCBidW5kbGVyczsgYnRvYSBpcyBhIGZhbGxiYWNrIGZvciBlbnZzIHdpdGhvdXQgQnVmZmVyKS5cbiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnKSByZXR1cm4gQnVmZmVyLmZyb20ocywgJ3V0ZjgnKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICByZXR1cm4gYnRvYShzKTtcbn1cbiJdfQ==
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rva2VuLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1GQSxvREFTQztBQU9ELHdDQXNCQztBQU1ELDBDQUVDO0FBaklELHFDQUErRTtBQUMvRSwwQ0FBMEM7QUFnRjFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLFNBQWdCLG9CQUFvQixDQUNsQyxNQUFtQixFQUNuQixVQUErRCxFQUFFO0lBRWpFLE9BQU87UUFDTCxNQUFNO1FBQ04sY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksd0JBQXdCO1FBQ2xFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFLLFVBQVUsQ0FBQyxLQUFzQjtLQUMvRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUFDLEtBQXVCO0lBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDN0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7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Q2pDLFNBQVM7aUJBQ1YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxDQUFTO0lBQ3ZCLHNFQUFzRTtJQUN0RSw4REFBOEQ7SUFDOUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEYsb0NBQW9DO0lBQ3BDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciwgVG9rZW5FeHBpcmVkRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBnZXRFeHBpcnkgfSBmcm9tICcuL2F1dGgvaXNzdWVyJztcblxuLyoqXG4gKiBIb3cgdGhlIFNESyBnZXRzIGEgZnJlc2ggYWNjZXNzIHRva2VuLiBUaHJlZSBzaGFwZXMgcGVyIHRoZSBicmllZjpcbiAqXG4gKiAgIC0gYHN0YXRpYy1zdHJpbmdgIOKAlCBjYWxsZXIgaGFuZHMgaW4gYSB0b2tlbiBzdHJpbmcuIFVzZWQgdW50aWwgaXRzXG4gKiAgICAgYGV4cGAgaGFzIHBhc3NlZDsgb24gZXhwaXJ5IHdlIHRocm93IGBUb2tlbkV4cGlyZWRFcnJvcmAgcmF0aGVyXG4gKiAgICAgdGhhbiB0cnkgdG8gcmVmcmVzaCAodGhlIFNESyBoYXMgbm8gd2F5IHRvIHJlZnJlc2ggYSBzdGF0aWNcbiAqICAgICBleHRlcm5hbGx5LXN1cHBsaWVkIHRva2VuKS5cbiAqXG4gKiAgIC0gYGNhbGxiYWNrYCDigJQgY2FsbGVyIHN1cHBsaWVzIGEgZnVuY3Rpb24gdGhlIFNESyBjYWxscyBvbiBtaXNzXG4gKiAgICAgYW5kIG9uIDQwMSBpbnZhbGlkYXRpb24uIFRoZSBjb25zdW1lcidzIGxvZ2ljIGlzIHJlc3BvbnNpYmxlIGZvclxuICogICAgIHJlZnJlc2g7IHRoZSBTREsganVzdCBjYWNoZXMgdGhlIHJlc3VsdCBiZXR3ZWVuIGludm9jYXRpb25zLlxuICpcbiAqICAgLSBgc2VydmljZS1jcmVkZW50aWFsc2Ag4oCUIGBjbGllbnRfaWRgICsgYGNsaWVudF9zZWNyZXRgIGZvciB0aGVcbiAqICAgICBPQXV0aDIgYGNsaWVudF9jcmVkZW50aWFsc2AgZ3JhbnQuIFNESyBtaW50cyArIGNhY2hlczsgb25cbiAqICAgICBleHBpcnkgaXQgcmUtbWludHMgd2l0aCB0aGUgc2FtZSBjcmVkZW50aWFscy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5Tb3VyY2UgPVxuICB8IHsga2luZDogJ3N0YXRpYy1zdHJpbmcnOyB0b2tlbjogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdjYWxsYmFjayc7IGdldFRva2VuOiAoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfVxuICB8IHtcbiAgICAgIC8qKlxuICAgICAgICogYHRva2VuVXJsYCDigJQgYSByb3V0ZSBvbiB0aGUgQ0FMTEVSJ3Mgb3duIHNlcnZlciB0aGF0IHJldHVybnNcbiAgICAgICAqIGB7IHRva2VuLCBleHBpcmVzSW4gfWAuIE1pcnJvcnMgdGhlIHJlYWx0aW1lIFNESyBvcHRpb24gb2YgdGhlXG4gICAgICAgKiBzYW1lIG5hbWUsIGFuZCBleGlzdHMgZm9yIHRoZSBzYW1lIHJlYXNvbjogaXQga2VlcHMgdGhlIGNsaWVudFxuICAgICAgICogc2VjcmV0IG9uIHRoZSBjYWxsZXIncyBzZXJ2ZXIgaW5zdGVhZCBvZiBpbiBhIHBhZ2Ugb3IgYW4gYXBwXG4gICAgICAgKiBidW5kbGUuXG4gICAgICAgKlxuICAgICAgICogYGV4cGlyZXNJbmAgaXMgc2Vjb25kcyBmcm9tIHJlY2VpcHQsIHBlciB0aGUgcmVhbHRpbWUgY29udHJhY3QuXG4gICAgICAgKiBJdCBpcyB0cnVzdGVkIG92ZXIgdGhlIEpXVCdzIG93biBgZXhwYCBiZWNhdXNlIHRoZSBjYWxsZXInc1xuICAgICAgICogc2VydmVyIG1heSBkZWxpYmVyYXRlbHkgaGFuZCBvdXQgYSBzaG9ydGVyLWxpdmVkIHNsaWNlLlxuICAgICAgICovXG4gICAgICBraW5kOiAndG9rZW4tdXJsJztcbiAgICAgIHRva2VuVXJsOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6ICdzZXJ2aWNlLWNyZWRlbnRpYWxzJztcbiAgICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgICBjbGllbnRTZWNyZXQ6IHN0cmluZztcbiAgICAgIGF1dGhCYXNlVXJsOiBzdHJpbmc7XG4gICAgICBzY29wZT86IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBDYWxsZXIgaGFuZHMgdGhlIFNESyBhIGAoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbilgIHBhaXIgZnJvbVxuICAgICAgICogYSBmaW5pc2hlZCBsb2dpbiBmbG93IChgYXV0aC5sb2dpbldpdGhQYXNzd29yZCguLi4pYCxcbiAgICAgICAqIGBhdXRoLnZlcmlmeU90cCguLi4pYCwgZXRjKS4gVGhlIFNESyBzZXJ2ZXMgdGhlIGFjY2VzcyB0b2tlblxuICAgICAgICogdW50aWwgaXQgZXhwaXJlcywgdGhlbiByb3RhdGVzIHZpYSBgYXV0aC5yZWZyZXNoKC4uLilgLlxuICAgICAgICpcbiAgICAgICAqIGBjbGllbnRJZGAgaXMgdGhlIE9BdXRoIGNsaWVudCBpZCB1c2VkIGR1cmluZyB0aGUgb3JpZ2luYWxcbiAgICAgICAqIGxvZ2luIOKAlCByZXF1aXJlZCBieSB0aGUgcmVmcmVzaCBoYW5kbGVyLiBgb25Sb3RhdGVgIGlzIGFuXG4gICAgICAgKiBvcHRpb25hbCBob29rIHRoZSBjYWxsZXIgY2FuIHVzZSB0byBwZXJzaXN0IHRoZSBuZXcgcGFpclxuICAgICAgICogKGNvb2tpZSwgc2VjdXJlIHN0b3JhZ2UsIGV0Yykg4oCUIGZpcmVkIHdpdGggZXZlcnkgc3VjY2Vzc2Z1bFxuICAgICAgICogcm90YXRpb24uXG4gICAgICAgKi9cbiAgICAgIGtpbmQ6ICdhY2Nlc3MtcmVmcmVzaC1wYWlyJztcbiAgICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICAgIC8qKiBJbml0aWFsIGV4cGlyeSB0aW1lc3RhbXAgKG1zIHNpbmNlIGVwb2NoKS4gUmUtZGVyaXZlZCBmcm9tIGVhY2ggbmV3IGFjY2VzcyB0b2tlbi4gKi9cbiAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgY2xpZW50SWQ6IHN0cmluZztcbiAgICAgIG9uUm90YXRlPzogKHBhaXI6IHtcbiAgICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblNvdXJjZVN0YXRlIHtcbiAgc291cmNlOiBUb2tlblNvdXJjZTtcbiAgY2FjaGVkPzogeyB0b2tlbjogc3RyaW5nOyBleHBpcmVzQXQ6IG51bWJlciB9O1xuICAvKiogUmVmcmVzaCBkZWR1cDogY29uY3VycmVudCByZXF1ZXN0cyBzaGFyZSB0aGUgc2FtZSBmZXRjaC4gKi9cbiAgaW5mbGlnaHQ/OiBQcm9taXNlPHsgdG9rZW46IHN0cmluZzsgZXhwaXJlc0F0OiBudW1iZXIgfT47XG4gIC8qKiBCdWZmZXIgKG1zKSBiZWZvcmUgYGV4cGAgYXQgd2hpY2ggd2UgdHJlYXQgYSB0b2tlbiBhcyBleHBpcmVkLiAqL1xuICBleHBpcnlCdWZmZXJNczogbnVtYmVyO1xuICAvKiogVXNlZCBvbmx5IGJ5IHRoZSBzZXJ2aWNlLWNyZWRlbnRpYWxzIHBhdGguICovXG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbn1cblxuY29uc3QgREVGQVVMVF9FWFBJUllfQlVGRkVSX01TID0gNTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICBzb3VyY2U6IFRva2VuU291cmNlLFxuICBvcHRpb25zOiB7IGV4cGlyeUJ1ZmZlck1zPzogbnVtYmVyOyBmZXRjaEZuPzogdHlwZW9mIGZldGNoIH0gPSB7fSxcbik6IFRva2VuU291cmNlU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHNvdXJjZSxcbiAgICBleHBpcnlCdWZmZXJNczogb3B0aW9ucy5leHBpcnlCdWZmZXJNcyA/PyBERUZBVUxUX0VYUElSWV9CVUZGRVJfTVMsXG4gICAgZmV0Y2hGbjogb3B0aW9ucy5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCksXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnJlc2ggYWNjZXNzIHRva2VuLCB1c2luZyB0aGUgY2FjaGUgd2hlbiB3YXJtLiBDb25jdXJyZW50XG4gKiBjYWxsZXJzIGR1cmluZyBhIHJlZnJlc2ggc2hhcmUgdGhlIGluLWZsaWdodCBQcm9taXNlIHNvIHdlIGRvbid0XG4gKiBzdGFtcGVkZSB0aGUgYXV0aCBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbihzdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChzdGF0ZS5jYWNoZWQgJiYgc3RhdGUuY2FjaGVkLmV4cGlyZXNBdCA+IG5vdyArIHN0YXRlLmV4cGlyeUJ1ZmZlck1zKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNhY2hlZC50b2tlbjtcbiAgfVxuICBpZiAoc3RhdGUuaW5mbGlnaHQpIHtcbiAgICBjb25zdCBmcmVzaCA9IGF3YWl0IHN0YXRlLmluZmxpZ2h0O1xuICAgIHJldHVybiBmcmVzaC50b2tlbjtcbiAgfVxuICBjb25zdCBpbmZsaWdodCA9IG1pbnRUb2tlbihzdGF0ZSkudGhlbigocmVzKSA9PiB7XG4gICAgc3RhdGUuY2FjaGVkID0gcmVzO1xuICAgIHN0YXRlLmluZmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXM7XG4gIH0pO1xuICBzdGF0ZS5pbmZsaWdodCA9IGluZmxpZ2h0O1xuICB0cnkge1xuICAgIGNvbnN0IGZyZXNoID0gYXdhaXQgaW5mbGlnaHQ7XG4gICAgcmV0dXJuIGZyZXNoLnRva2VuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdGF0ZS5pbmZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBEcm9wIHRoZSBjYWNoZWQgdG9rZW4uIFRoZSBuZXh0IGBnZXRBY2Nlc3NUb2tlbmAgd2lsbCBtaW50IG9yXG4gKiByZS1mZXRjaC4gQ2FsbGVkIGJ5IHRoZSByZXF1ZXN0IGxheWVyIG9uIDQwMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRhdGVUb2tlbihzdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS5jYWNoZWQgPSB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pbnRUb2tlbihzdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSk6IFByb21pc2U8eyB0b2tlbjogc3RyaW5nOyBleHBpcmVzQXQ6IG51bWJlciB9PiB7XG4gIHN3aXRjaCAoc3RhdGUuc291cmNlLmtpbmQpIHtcbiAgICBjYXNlICdzdGF0aWMtc3RyaW5nJzoge1xuICAgICAgY29uc3QgZXhwID0gZ2V0RXhwaXJ5KHN0YXRlLnNvdXJjZS50b2tlbik7XG4gICAgICBpZiAoZXhwICE9PSBudWxsICYmIGV4cCAqIDEwMDAgPCBEYXRlLm5vdygpICsgc3RhdGUuZXhwaXJ5QnVmZmVyTXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRva2VuRXhwaXJlZEVycm9yKFxuICAgICAgICAgICdzdGF0aWMgYWNjZXNzIHRva2VuIGhhcyBleHBpcmVkOyBjb25zdW1lciBtdXN0IHVwZGF0ZSB0aGUgY29uZmlnIHdpdGggYSBmcmVzaCB0b2tlbicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbjogc3RhdGUuc291cmNlLnRva2VuLFxuICAgICAgICAvLyBObyBgZXhwYD8gVHJlYXQgYXMgb3BhcXVlIG5vbi1leHBpcmluZzsgY2FjaGUgZm9yIDFoIHRvIGF2b2lkXG4gICAgICAgIC8vIHJlLXVzaW5nIHRoZSBzYW1lIHN0cmluZyBmb3JldmVyIGluIGNhc2UgdGhlIGlzc3VlciByb3RhdGVzLlxuICAgICAgICBleHBpcmVzQXQ6IGV4cCAhPT0gbnVsbCA/IGV4cCAqIDEwMDAgOiBEYXRlLm5vdygpICsgNjAgKiA2MCAqIDEwMDAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICd0b2tlbi11cmwnOiB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGF0ZS5mZXRjaEZuKHN0YXRlLnNvdXJjZS50b2tlblVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBoZWFkZXJzOiB7IGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKFxuICAgICAgICAgIGB0b2tlblVybCAke3N0YXRlLnNvdXJjZS50b2tlblVybH0gYW5zd2VyZWQgSFRUUCAke3Jlcy5zdGF0dXN9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgICB0b2tlbj86IHVua25vd247XG4gICAgICAgIGV4cGlyZXNJbj86IHVua25vd247XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnRva2VuICE9PSAnc3RyaW5nJyB8fCBib2R5LnRva2VuID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihcbiAgICAgICAgICBgdG9rZW5VcmwgJHtzdGF0ZS5zb3VyY2UudG9rZW5Vcmx9IHJldHVybmVkIG5vIHRva2VuOyBleHBlY3RlZCB7IHRva2VuLCBleHBpcmVzSW4gfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBBIG1pc3Npbmcgb3IgdW51c2FibGUgZXhwaXJlc0luIGZhbGxzIGJhY2sgdG8gdGhlIEpXVCdzIG93biBleHAsIHRoZW5cbiAgICAgIC8vIHRvIGZpdmUgbWludXRlcyDigJQgc2hvcnQgZW5vdWdoIHRoYXQgYSBiYWQgdmFsdWUgY2Fubm90IHBpbiBhIHN0YWxlXG4gICAgICAvLyB0b2tlbiBmb3IgbG9uZy5cbiAgICAgIGNvbnN0IHNlY3MgPVxuICAgICAgICB0eXBlb2YgYm9keS5leHBpcmVzSW4gPT09ICdudW1iZXInICYmIGJvZHkuZXhwaXJlc0luID4gMCA/IGJvZHkuZXhwaXJlc0luIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhwID0gZ2V0RXhwaXJ5KGJvZHkudG9rZW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW46IGJvZHkudG9rZW4sXG4gICAgICAgIGV4cGlyZXNBdDpcbiAgICAgICAgICBzZWNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gRGF0ZS5ub3coKSArIHNlY3MgKiAxMDAwXG4gICAgICAgICAgICA6IGV4cCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGV4cCAqIDEwMDBcbiAgICAgICAgICAgICAgOiBEYXRlLm5vdygpICsgNSAqIDYwICogMTAwMCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2NhbGxiYWNrJzoge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBzdGF0ZS5zb3VyY2UuZ2V0VG9rZW4oKTtcbiAgICAgIGNvbnN0IGV4cCA9IGdldEV4cGlyeSh0b2tlbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbixcbiAgICAgICAgZXhwaXJlc0F0OiBleHAgIT09IG51bGwgPyBleHAgKiAxMDAwIDogRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdzZXJ2aWNlLWNyZWRlbnRpYWxzJzoge1xuICAgICAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyB9KTtcbiAgICAgIGlmIChzdGF0ZS5zb3VyY2Uuc2NvcGUpIGJvZHkuc2V0KCdzY29wZScsIHN0YXRlLnNvdXJjZS5zY29wZSk7XG4gICAgICBjb25zdCBiYXNpYyA9IGJhc2U2NChgJHtzdGF0ZS5zb3VyY2UuY2xpZW50SWR9OiR7c3RhdGUuc291cmNlLmNsaWVudFNlY3JldH1gKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0YXRlLmZldGNoRm4oYCR7c3RhdGUuc291cmNlLmF1dGhCYXNlVXJsfS9vYXV0aC90b2tlbmAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWN9YCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogYm9keS50b1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKGBjbGllbnRfY3JlZGVudGlhbHMgbWludCBmYWlsZWQ6IEhUVFAgJHtyZXMuc3RhdHVzfSAke3RleHR9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHsgYWNjZXNzX3Rva2VuPzogc3RyaW5nOyBleHBpcmVzX2luPzogbnVtYmVyIH07XG4gICAgICBpZiAoIWpzb24uYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcignYXV0aCBzZXJ2ZXIgcmVzcG9uc2UgbWlzc2luZyBhY2Nlc3NfdG9rZW4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR0bCA9IChqc29uLmV4cGlyZXNfaW4gPz8gMCkgKiAxMDAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW46IGpzb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICBleHBpcmVzQXQ6IHR0bCA+IDAgPyBEYXRlLm5vdygpICsgdHRsIDogRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdhY2Nlc3MtcmVmcmVzaC1wYWlyJzoge1xuICAgICAgLy8gRmlyc3QgY2FsbDogc2VydmUgdGhlIHNlZWQgYWNjZXNzIHRva2VuIGlmIGl0IGhhc24ndCBleHBpcmVkLlxuICAgICAgLy8gU3Vic2VxdWVudCBjYWxscyAob3Igb24gYSBzdGFsZSBzZWVkKSByb3RhdGUgdmlhIGF1dGgucmVmcmVzaCgpLlxuICAgICAgY29uc3Qgc291cmNlID0gc3RhdGUuc291cmNlO1xuICAgICAgaWYgKERhdGUubm93KCkgKyBzdGF0ZS5leHBpcnlCdWZmZXJNcyA8IHNvdXJjZS5leHBpcmVzQXQpIHtcbiAgICAgICAgcmV0dXJuIHsgdG9rZW46IHNvdXJjZS5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0OiBzb3VyY2UuZXhwaXJlc0F0IH07XG4gICAgICB9XG4gICAgICAvLyBEeW5hbWljIGltcG9ydCBrZWVwcyBgYXV0aGAgb3V0IG9mIHRoZSBidW5kbGUgd2hlbiB0aGlzIGtpbmQgaXNuJ3QgdXNlZC5cbiAgICAgIGNvbnN0IHsgcmVmcmVzaCB9ID0gYXdhaXQgaW1wb3J0KCcuL2F1dGgvcmVmcmVzaCcpO1xuICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgcmVmcmVzaCh7XG4gICAgICAgIGFjY2Vzc1Rva2VuOiBzb3VyY2UuYWNjZXNzVG9rZW4sXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc291cmNlLnJlZnJlc2hUb2tlbixcbiAgICAgICAgY2xpZW50SWQ6IHNvdXJjZS5jbGllbnRJZCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCF0b2tlbnMucmVmcmVzaFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcigncmVmcmVzaCByZXNwb25zZSBtaXNzaW5nIHJlZnJlc2hfdG9rZW47IGNhbm5vdCByb3RhdGUgYWdhaW4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyB0b2tlbnMuZXhwaXJlc0luICogMTAwMDtcbiAgICAgIC8vIE11dGF0ZSB0aGUgc291cmNlIGluIHBsYWNlIHNvIHN1YnNlcXVlbnQgcm90YXRpb25zIGNhcnJ5IHRoZSBuZXcgcGFpci5cbiAgICAgIHNvdXJjZS5hY2Nlc3NUb2tlbiA9IHRva2Vucy5hY2Nlc3NUb2tlbjtcbiAgICAgIHNvdXJjZS5yZWZyZXNoVG9rZW4gPSB0b2tlbnMucmVmcmVzaFRva2VuO1xuICAgICAgc291cmNlLmV4cGlyZXNBdCA9IGV4cGlyZXNBdDtcbiAgICAgIGlmIChzb3VyY2Uub25Sb3RhdGUpIHtcbiAgICAgICAgYXdhaXQgc291cmNlLm9uUm90YXRlKHtcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBleHBpcmVzQXQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0IH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBXb3JrcyBpbiBOb2RlIGFuZCBicm93c2VyIChCdWZmZXIgaXMgcG9seWZpbGxlZCB2aWEgQHR5cGVzL25vZGUgYW5kXG4gIC8vIG1vc3QgYnVuZGxlcnM7IGJ0b2EgaXMgYSBmYWxsYmFjayBmb3IgZW52cyB3aXRob3V0IEJ1ZmZlcikuXG4gIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIEJ1ZmZlci5mcm9tKHMsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuIGJ0b2Eocyk7XG59XG4iXX0=
|
package/dist/upsell/client.d.ts
CHANGED
|
@@ -41,4 +41,58 @@ export declare class UpsellApiError extends Error {
|
|
|
41
41
|
* require a service-actor token; the server answers 403 otherwise and
|
|
42
42
|
* we surface it as {@link UpsellApiError}.
|
|
43
43
|
*/
|
|
44
|
+
/**
|
|
45
|
+
* Environments the SDK knows, mirroring the realtime SDK's `env` option.
|
|
46
|
+
* `apiBase` overrides these for a caller pointing at something else.
|
|
47
|
+
*/
|
|
48
|
+
declare const ENV_BASES: {
|
|
49
|
+
readonly prod: "https://api.platform.uengage.io";
|
|
50
|
+
readonly uat: "https://api.uat.platform.uengage.io";
|
|
51
|
+
};
|
|
52
|
+
export type UpsellEnv = keyof typeof ENV_BASES;
|
|
53
|
+
/**
|
|
54
|
+
* Options for `upsell.createClient(...)`.
|
|
55
|
+
*
|
|
56
|
+
* Deliberately the SAME option names as the realtime browser SDK
|
|
57
|
+
* (`Uengage.realtime.createClient`), so an engineer who has integrated
|
|
58
|
+
* realtime does not have to learn a second shape:
|
|
59
|
+
*
|
|
60
|
+
* env 'prod' | 'uat' — which servers to talk to
|
|
61
|
+
* serviceId + serviceSecret — platform credentials
|
|
62
|
+
* tokenUrl a route on YOUR server — returns { token, expiresIn }
|
|
63
|
+
* apiBase override the servers directly
|
|
64
|
+
*
|
|
65
|
+
* Pass credentials OR tokenUrl, never both. Token minting is lazy: nothing is
|
|
66
|
+
* fetched until the first call.
|
|
67
|
+
*/
|
|
68
|
+
export interface UpsellClientOptions {
|
|
69
|
+
env?: UpsellEnv;
|
|
70
|
+
serviceId?: string;
|
|
71
|
+
serviceSecret?: string;
|
|
72
|
+
/** Space-separated scopes to request when minting with credentials. */
|
|
73
|
+
scope?: string;
|
|
74
|
+
/** A route on the caller's own server returning `{ token, expiresIn }`. */
|
|
75
|
+
tokenUrl?: string;
|
|
76
|
+
/** Override the resolved environment host. */
|
|
77
|
+
apiBase?: string;
|
|
78
|
+
fetchFn?: typeof fetch;
|
|
79
|
+
logger?: PlatformConfigInput['logger'];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The upsell namespace, mirroring `Uengage.realtime`.
|
|
83
|
+
*
|
|
84
|
+
* upsell.createClient({ env: 'prod', serviceId, serviceSecret })
|
|
85
|
+
* upsell.createClient({ env: 'prod', tokenUrl: '/api/upsell-token' })
|
|
86
|
+
*/
|
|
87
|
+
export declare const upsell: {
|
|
88
|
+
createClient(options?: UpsellClientOptions): UpsellClient;
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* @deprecated Use `upsell.createClient({ env, serviceId, serviceSecret })`.
|
|
92
|
+
*
|
|
93
|
+
* Published in 2.0.0 and 2.1.0, so it stays as a thin alias rather than a
|
|
94
|
+
* breaking removal. It takes the raw internal config (`baseUrl`, `auth`) and
|
|
95
|
+
* does no env resolution.
|
|
96
|
+
*/
|
|
44
97
|
export declare function createUpsellClient(input?: PlatformConfigInput): UpsellClient;
|
|
98
|
+
export {};
|