@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 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.WHATSAPP, description }) — idempotent on referenceId
34
- // wallet.credit({ ..., reversalOf }) for refunds; wallet.listTransactions({...}); wallet.getTransaction(id)
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',
@@ -3,40 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getIssuer = getIssuer;
4
4
  exports.getExpiry = getExpiry;
5
5
  /**
6
- * Decode (without verifying) a JWT and return its `iss` claim. Used by
7
- * the SDK to route subsequent auth-related calls (refresh, future
8
- * logout) at `${iss}/...`, so tokens from different issuers are
9
- * routed correctly when customer-auth ships alongside business-auth.
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 getIssuer(token) {
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
- const payload = parts[1].replace(/-/g, '+').replace(/_/g, '/');
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 parts = token.split('.');
29
- if (parts.length !== 3)
52
+ const claims = claimsOf(token);
53
+ if (!claims)
30
54
  return null;
31
- try {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaXNzdWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsOEJBWUM7QUFHRCw4QkFZQztBQWpDRDs7Ozs7R0FLRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBNEIsQ0FBQztRQUMzRCxPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFnQixTQUFTLENBQUMsS0FBYTtJQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQTRCLENBQUM7UUFDM0QsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY29kZSAod2l0aG91dCB2ZXJpZnlpbmcpIGEgSldUIGFuZCByZXR1cm4gaXRzIGBpc3NgIGNsYWltLiBVc2VkIGJ5XG4gKiB0aGUgU0RLIHRvIHJvdXRlIHN1YnNlcXVlbnQgYXV0aC1yZWxhdGVkIGNhbGxzIChyZWZyZXNoLCBmdXR1cmVcbiAqIGxvZ291dCkgYXQgYCR7aXNzfS8uLi5gLCBzbyB0b2tlbnMgZnJvbSBkaWZmZXJlbnQgaXNzdWVycyBhcmVcbiAqIHJvdXRlZCBjb3JyZWN0bHkgd2hlbiBjdXN0b21lci1hdXRoIHNoaXBzIGFsb25nc2lkZSBidXNpbmVzcy1hdXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNzdWVyKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcGFydHNbMV0ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBwYWRkZWQgPSBwYXlsb2FkLnBhZEVuZChwYXlsb2FkLmxlbmd0aCArICgoNCAtIChwYXlsb2FkLmxlbmd0aCAlIDQpKSAlIDQpLCAnPScpO1xuICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShwYWRkZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIGNvbnN0IGNsYWltcyA9IEpTT04ucGFyc2UoanNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuaXNzID09PSAnc3RyaW5nJyA/IGNsYWltcy5pc3MgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKiogRGVjb2RlICh3aXRob3V0IHZlcmlmeWluZykgYSBKV1QgYW5kIHJldHVybiBpdHMgYGV4cGAgY2xhaW0gKHVuaXggc2Vjb25kcykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwaXJ5KHRva2VuOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcGFydHNbMV0ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBwYWRkZWQgPSBwYXlsb2FkLnBhZEVuZChwYXlsb2FkLmxlbmd0aCArICgoNCAtIChwYXlsb2FkLmxlbmd0aCAlIDQpKSAlIDQpLCAnPScpO1xuICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShwYWRkZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIGNvbnN0IGNsYWltcyA9IEpTT04ucGFyc2UoanNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuZXhwID09PSAnbnVtYmVyJyA/IGNsYWltcy5leHAgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
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
- * OAuth2 client_credentials live at `createClient()` config-time
29
- * (`serviceId` + `serviceSecret` fields), not via `.auth()`.
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 OAuth2 client_credentials');
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFtREEsa0NBTUM7QUFpQkQsc0NBUUM7QUEvRVksUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQWdDbEU7Ozs7R0FJRztBQUNIOzs7OztHQUtHO0FBQ0gsU0FBUyxHQUFHLENBQUMsSUFBWTtJQUN2QixJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVc7UUFBRSxPQUFPLFNBQVMsQ0FBQztJQUNyRCxPQUFRLE9BQXdELENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQWdCLFdBQVc7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsa0JBQWtCLENBQUMsSUFBSSx3QkFBZ0I7UUFDcEQsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUNmLE9BQU8sRUFBRSxVQUFVLENBQUMsS0FBcUI7S0FDMUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLE9BQU87SUFDZCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUN4QyxJQUFJLEtBQUs7UUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsQ0FBQztJQUM1QyxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxTQUFnQixhQUFhLENBQUMsS0FBdUM7SUFDbkUsSUFBSSxNQUFNLElBQUksS0FBSztRQUFFLE9BQU8sS0FBSyxDQUFDO0lBQ2xDLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDaEQsQ0FBQztJQUNELE1BQU0sSUFBSSxLQUFLLENBQ2Isc0lBQXNJLENBQ3ZJLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFhLFdBQVc7SUFDZCxTQUFTLEdBQXdCLEVBQUUsQ0FBQztJQUNwQyxZQUFZLENBQTJCO0lBQ3ZDLGVBQWUsR0FBRyxLQUFLLENBQUM7SUFFaEMsS0FBSyxDQUFDLEtBQTBCO1FBQzlCLElBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztRQUN4RSxJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ3JFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsWUFBWSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsS0FBdUM7UUFDN0MsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU87UUFDTCxNQUFNLEdBQUcsR0FBRyxXQUFXLEVBQUUsQ0FBQztRQUMxQixPQUFPO1lBQ0wsT0FBTyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxPQUFPO1lBQzlDLElBQUksRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSTtZQUN6RCxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTyxDQUFpQjtZQUNoRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUE0QjtTQUNwRCxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBN0JELGtDQTZCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQHVlbmdhZ2UuaW8vanMtbG9nZ2VyJztcbmltcG9ydCB0eXBlIHsgVG9rZW5Tb3VyY2VTdGF0ZSB9IGZyb20gJy4vdG9rZW4tc291cmNlJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogUmVzb2x2ZWQgYXV0aCBzdGF0ZS4gRGlzY3JpbWluYXRlZCBieSBgdHlwZWAgc28gY29uc3VtZXJzIGNhbiBuYXJyb3cuXG4gKi9cbmV4cG9ydCB0eXBlIFBsYXRmb3JtQXV0aCA9XG4gIHwgeyB0eXBlOiAnYmVhcmVyJzsgdG9rZW46IHN0cmluZyB9XG4gIHwgeyB0eXBlOiAndG9rZW4tc291cmNlJzsgc3RhdGU6IFRva2VuU291cmNlU3RhdGUgfTtcblxuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUNvbmZpZyB7XG4gIGJhc2VVcmw6IHN0cmluZztcbiAgYXV0aD86IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbjogdHlwZW9mIGZldGNoO1xuICBsb2dnZXI/OiBMb2dnZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aDtcbiAgZmV0Y2hGbj86IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG4vKipcbiAqIGAuYXV0aCgpYCBzaGFwZS4gUGFzcyBge3Rva2VufWAgZm9yIGEgc3RhdGljIEJlYXJlciBhY2Nlc3MgdG9rZW4uXG4gKiBPQXV0aDIgY2xpZW50X2NyZWRlbnRpYWxzIGxpdmUgYXQgYGNyZWF0ZUNsaWVudCgpYCBjb25maWctdGltZVxuICogKGBzZXJ2aWNlSWRgICsgYHNlcnZpY2VTZWNyZXRgIGZpZWxkcyksIG5vdCB2aWEgYC5hdXRoKClgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQXV0aElucHV0IHtcbiAgdG9rZW4/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBlbnYtZGVmYXVsdGVkIGNvbmZpZy4gUmUtcmVhZCBvbiBldmVyeSBjYWxsIHNvIHRoYXQgY2FsbGVycyBjYW5cbiAqIHNldCBlbnYgdmFycyBhZnRlciB0aGUgU0RLIGhhcyBiZWVuIGltcG9ydGVkIGFuZCBzdGlsbCBwaWNrIHRoZW0gdXAgb25cbiAqIHRoZSBuZXh0IHJlcXVlc3QuXG4gKi9cbi8qKlxuICogUmVhZCBgcHJvY2Vzcy5lbnZgIGRlZmVuc2l2ZWx5OiBpbiBhIGJyb3dzZXIgYnVuZGxlIGBwcm9jZXNzYCBpcyBub3RcbiAqIGRlZmluZWQgYXQgYWxsLCBhbmQgdG91Y2hpbmcgaXQgdGhyb3dzIGEgUmVmZXJlbmNlRXJyb3IgcmF0aGVyIHRoYW5cbiAqIHlpZWxkaW5nIHVuZGVmaW5lZC4gVGhlIFNESyBpcyB1c2VkIGZyb20gYnJvd3NlcnMgKHRoZVxuICogYHdoaXRlbGFiZWxfd2ViYCBjaGFubmVsKSwgc28gZXZlcnkgZW52IHJlYWQgZ29lcyB0aHJvdWdoIGhlcmUuXG4gKi9cbmZ1bmN0aW9uIGVudihuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gKHByb2Nlc3MgYXMgeyBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IH0pLmVudj8uW25hbWVdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZW52RGVmYXVsdHMoKTogUGxhdGZvcm1Db25maWcge1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IGVudignVUVOR0FHRV9CQVNFX1VSTCcpID8/IERFRkFVTFRfQkFTRV9VUkwsXG4gICAgYXV0aDogZW52QXV0aCgpLFxuICAgIGZldGNoRm46IGdsb2JhbFRoaXMuZmV0Y2ggYXMgdHlwZW9mIGZldGNoLFxuICB9O1xufVxuXG5mdW5jdGlvbiBlbnZBdXRoKCk6IFBsYXRmb3JtQXV0aCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHRva2VuID0gZW52KCdVRU5HQUdFX0FVVEhfVE9LRU4nKTtcbiAgaWYgKHRva2VuKSByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW4gfTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb2VyY2UgYC5hdXRoKClgIGlucHV0IG9yIGBjb25maWcoe2F1dGh9KWAgaW5wdXQgaW50byBhIHR5cGVkXG4gKiBQbGF0Zm9ybUF1dGguIFRocm93cyB3aGVuIHRoZSBpbnB1dCBoYXMgbm8gdXNhYmxlIGNyZWRlbnRpYWxzLlxuICpcbiAqIFRvZGF5IHRoaXMgb25seSBhY2NlcHRzIGB7dG9rZW59YCBvciBhIHByZS1zaGFwZWQgYFBsYXRmb3JtQXV0aGAuXG4gKiBGb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyB1c2UgYGNyZWF0ZUNsaWVudCh7c2VydmljZUlkLCBzZXJ2aWNlU2VjcmV0fSlgXG4gKiBpbnN0ZWFkIOKAlCB0aGF0IGJ1aWxkcyBhIFRva2VuU291cmNlIHdoaWNoIG1pbnRzICsgY2FjaGVzIEJlYXJlclxuICogdG9rZW5zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBQbGF0Zm9ybUF1dGgge1xuICBpZiAoJ3R5cGUnIGluIGlucHV0KSByZXR1cm4gaW5wdXQ7XG4gIGlmIChpbnB1dC50b2tlbikge1xuICAgIHJldHVybiB7IHR5cGU6ICdiZWFyZXInLCB0b2tlbjogaW5wdXQudG9rZW4gfTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ2F1dGgoKTogcGFzcyB7dG9rZW59IGZvciBhIHN0YXRpYyBCZWFyZXIgYWNjZXNzIHRva2VuLCBvciB1c2UgY3JlYXRlQ2xpZW50KHtzZXJ2aWNlSWQsIHNlcnZpY2VTZWNyZXR9KSBmb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscycsXG4gICk7XG59XG5cbi8qKlxuICogTXV0YWJsZSBjb25maWcgc2hhcmVkIGJ5IGNsaWVudHMuIGBhcHBseSgpYCBhbmQgYHNldEF1dGgoKWAgYXJlIGhvdyB0aGVcbiAqIGNoYWluYWJsZSBgLmNvbmZpZygpYCAvIGAuYXV0aCgpYCBtZXRob2RzIHdyaXRlIGJhY2suIGByZXNvbHZlKClgIHByb2R1Y2VzXG4gKiB0aGUgZWZmZWN0aXZlIGNvbmZpZyBmb3Igb25lIHJlcXVlc3QsIGZhbGxpbmcgYmFjayB0byBjdXJyZW50IGVudiBzdGF0ZVxuICogZm9yIGZpZWxkcyB0aGUgY2FsbGVyIGhhc24ndCBwaW5uZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25maWdTdGF0ZSB7XG4gIHByaXZhdGUgb3ZlcnJpZGVzOiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge307XG4gIHByaXZhdGUgZXhwbGljaXRBdXRoOiBQbGF0Zm9ybUF1dGggfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaGFzRXhwbGljaXRBdXRoID0gZmFsc2U7XG5cbiAgYXBwbHkoaW5wdXQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQpOiB2b2lkIHtcbiAgICBpZiAoaW5wdXQuYmFzZVVybCAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID0gaW5wdXQuYmFzZVVybDtcbiAgICBpZiAoaW5wdXQuZmV0Y2hGbiAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5mZXRjaEZuID0gaW5wdXQuZmV0Y2hGbjtcbiAgICBpZiAoaW5wdXQubG9nZ2VyICE9PSB1bmRlZmluZWQpIHRoaXMub3ZlcnJpZGVzLmxvZ2dlciA9IGlucHV0LmxvZ2dlcjtcbiAgICBpZiAoaW5wdXQuYXV0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmV4cGxpY2l0QXV0aCA9IG5vcm1hbGl6ZUF1dGgoaW5wdXQuYXV0aCk7XG4gICAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgc2V0QXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGxpY2l0QXV0aCA9IG5vcm1hbGl6ZUF1dGgoaW5wdXQpO1xuICAgIHRoaXMuaGFzRXhwbGljaXRBdXRoID0gdHJ1ZTtcbiAgfVxuXG4gIHJlc29sdmUoKTogUGxhdGZvcm1Db25maWcge1xuICAgIGNvbnN0IGVudiA9IGVudkRlZmF1bHRzKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJhc2VVcmw6IHRoaXMub3ZlcnJpZGVzLmJhc2VVcmwgPz8gZW52LmJhc2VVcmwsXG4gICAgICBhdXRoOiB0aGlzLmhhc0V4cGxpY2l0QXV0aCA/IHRoaXMuZXhwbGljaXRBdXRoIDogZW52LmF1dGgsXG4gICAgICBmZXRjaEZuOiAodGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA/PyBlbnYuZmV0Y2hGbikgYXMgdHlwZW9mIGZldGNoLFxuICAgICAgbG9nZ2VyOiB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgYXMgTG9nZ2VyIHwgdW5kZWZpbmVkLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
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; the manual fallback covers
15
- * older runtimes and non-secure contexts, where the value is only used
16
- * as an idempotency key and needs uniqueness, not unguessability.
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
- throw new Error('No crypto source available for idempotency-key generation');
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9odHRwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBb0dBLG9DQXVCQztBQXdCRCw4Q0EwQkM7QUE1S0QsaURBQWlFO0FBQ2pFLHVDQUF3QztBQVV4QyxNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUVyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFDSCxTQUFTLFVBQVU7SUFDakIsTUFBTSxDQUFDLEdBQ0wsVUFHRCxDQUFDLE1BQU0sQ0FBQztJQUNULElBQUksQ0FBQyxFQUFFLFVBQVU7UUFBRSxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN6QyxJQUFJLENBQUMsRUFBRSxlQUFlLEVBQUUsQ0FBQztRQUN2QixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQztRQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQzdHLENBQUM7SUFDRCxPQUFPLFVBQVUsRUFBRSxDQUFDO0FBQ3RCLENBQUM7QUFFRCxnRkFBZ0Y7QUFDaEYsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBRXBCOzs7O0dBSUc7QUFDSCxTQUFTLFVBQVU7SUFDakIsTUFBTSxDQUFDLEdBQUcsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDN0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQztRQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQztJQUV2RSxxRUFBcUU7SUFDckUsNENBQTRDO0lBQzVDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUVoQixzRUFBc0U7SUFDdEUsaUJBQWlCO0lBQ2pCLFdBQVcsR0FBRyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDekMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQztJQUUxQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsWUFBWTtJQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsVUFBVTtJQUV2QyxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEUsT0FBTyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUM3RyxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSSxLQUFLLFVBQVUsWUFBWSxDQUNoQyxNQUFzQixFQUN0QixNQUEwQjtJQUUxQixNQUFNLE9BQU8sR0FBMkI7UUFDdEMsWUFBWSxFQUFFLHdCQUF3QixxQkFBVyxFQUFFO0tBQ3BELENBQUM7SUFDRixJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUztRQUFFLE9BQU8sQ0FBQyxjQUFjLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztJQUM1RSxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxPQUFPLENBQUMsaUJBQWlCLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJO1FBQUUsT0FBTyxPQUFPLENBQUM7SUFFakMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUNsQyxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCx1RUFBdUU7SUFDdkUsTUFBTSxLQUFLLEdBQUcsTUFBTSxJQUFBLDZCQUFjLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN0RCxPQUFPLENBQUMsZUFBZSxDQUFDLEdBQUcsVUFBVSxLQUFLLEVBQUUsQ0FBQztJQUM3QyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBWUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLE1BQXNCLEVBQ3RCLE1BQXlCO0lBRXpCLE1BQU0sT0FBTyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRTtRQUN6QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUMzQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTztRQUNQLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsSUFBSSxLQUFLLGNBQWM7UUFBRSxPQUFPLEdBQUcsQ0FBQztJQUMzRSxJQUFBLDhCQUFlLEVBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxNQUFNLFlBQVksR0FBRyxNQUFNLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDOUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtRQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7S0FDbEIsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDaEMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO1FBQ3JCLE9BQU8sRUFBRSxZQUFZO1FBQ3JCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IGdldEFjY2Vzc1Rva2VuLCBpbnZhbGlkYXRlVG9rZW4gfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5pbXBvcnQgeyBTREtfVkVSU0lPTiB9IGZyb20gJy4vdmVyc2lvbic7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2lnbmVkSGVhZGVyUGFyYW1zIHtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIC8qKiBVUkwgcGF0aG5hbWUgb25seSwgd2l0aG91dCBxdWVyeSBzdHJpbmcuIE11c3QgbWF0Y2ggYGMucmVxLnBhdGhgIHNlcnZlci1zaWRlLiAqL1xuICBwYXRoOiBzdHJpbmc7XG4gIC8qKiBSYXcgSlNPTiBib2R5IHN0cmluZywgb3IgZW1wdHkgZm9yIG5vbmUuICovXG4gIGJvZHk/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. Until `services/realtime` has been deployed to an
11
- * environment its entry stays null and `connect({ env })` throws with
12
- * instructions; `connect({ endpoints })` always works.
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
- * TODO(event-bus): populate `httpDomain` / `realtimeDomain` per
7
- * environment from the `RealtimeEventApiHttpDns-{env}` and
8
- * `RealtimeEventApiRealtimeDns-{env}` outputs of `UengageRealtimeService-{env}`
9
- * once the stack has been deployed there.
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: null,
14
- prod: null,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWx0aW1lL2VuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEyQ0Esb0NBVUM7QUE3QkQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFNBQVMsR0FBa0Q7SUFDL0QsR0FBRyxFQUFFLElBQUk7SUFDVCxHQUFHLEVBQUUsSUFBSTtJQUNULElBQUksRUFBRSxJQUFJO0NBQ1gsQ0FBQztBQUVGLHFFQUFxRTtBQUN4RCxRQUFBLFFBQVEsR0FBZ0M7SUFDbkQsR0FBRyxFQUFFLHFDQUFxQztJQUMxQyxHQUFHLEVBQUUscUNBQXFDO0lBQzFDLElBQUksRUFBRSxpQ0FBaUM7Q0FDeEMsQ0FBQztBQUVGLFNBQWdCLFlBQVksQ0FBQyxHQUFnQjtJQUMzQyxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FDYixzREFBc0QsR0FBRyxLQUFLO1lBQzVELGlGQUFpRjtZQUNqRixtRkFBbUYsQ0FDdEYsQ0FBQztJQUNKLENBQUM7SUFDRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFBlci1lbnZpcm9ubWVudCByZWFsdGltZSBlbmRwb2ludHMuXG4gKlxuICogRnJvbnRlbmRzIHBhc3MgYGNvbm5lY3QoeyBlbnY6ICdwcm9kJyB9KWAgYW5kIGdldCBVUkxzIGZyb20gaGVyZSDigJQgbm9cbiAqIGhvc3RuYW1lcyBvciBBUk5zIGluIGFwcCBjb2RlLlxuICpcbiAqIEFwcFN5bmMgYXNzaWducyB0aGUgRXZlbnQgQVBJJ3MgRE5TIG5hbWVzIGF0IGNyZWF0ZSB0aW1lXG4gKiAoYDxhcGlJZD4uYXBwc3luYy1hcGkuPHJlZ2lvbj4uYW1hem9uYXdzLmNvbWAgYW5kIHRoZSBtYXRjaGluZ1xuICogYGFwcHN5bmMtcmVhbHRpbWUtYXBpYCBob3N0KSwgc28gdGhleSBjYW5ub3QgYmUga25vd24gYmVmb3JlIHRoZSBzdGFja1xuICogaXMgZGVwbG95ZWQuIFVudGlsIGBzZXJ2aWNlcy9yZWFsdGltZWAgaGFzIGJlZW4gZGVwbG95ZWQgdG8gYW5cbiAqIGVudmlyb25tZW50IGl0cyBlbnRyeSBzdGF5cyBudWxsIGFuZCBgY29ubmVjdCh7IGVudiB9KWAgdGhyb3dzIHdpdGhcbiAqIGluc3RydWN0aW9uczsgYGNvbm5lY3QoeyBlbmRwb2ludHMgfSlgIGFsd2F5cyB3b3Jrcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWFsdGltZUVuZHBvaW50cyB7XG4gIC8qKiBBcHBTeW5jIEV2ZW50IEFQSSBIVFRQIGRvbWFpbi4gQWxzbyB0aGUgYGhvc3RgIGluIHRoZSBhdXRoIGhlYWRlci4gKi9cbiAgaHR0cERvbWFpbjogc3RyaW5nO1xuICAvKiogQXBwU3luYyBFdmVudCBBUEkgcmVhbHRpbWUgKFdlYlNvY2tldCkgZG9tYWluLiAqL1xuICByZWFsdGltZURvbWFpbjogc3RyaW5nO1xuICAvKiogUGxhdGZvcm0gQVBJIGJhc2UgVVJMLCB1c2VkIGZvciB0aGUgbGFzdC12YWx1ZSBzbmFwc2hvdCBmZXRjaC4gKi9cbiAgYXBpQmFzZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBSZWFsdGltZUVudiA9ICdkZXYnIHwgJ3VhdCcgfCAncHJvZCc7XG5cbi8qKlxuICogVE9ETyhldmVudC1idXMpOiBwb3B1bGF0ZSBgaHR0cERvbWFpbmAgLyBgcmVhbHRpbWVEb21haW5gIHBlclxuICogZW52aXJvbm1lbnQgZnJvbSB0aGUgYFJlYWx0aW1lRXZlbnRBcGlIdHRwRG5zLXtlbnZ9YCBhbmRcbiAqIGBSZWFsdGltZUV2ZW50QXBpUmVhbHRpbWVEbnMte2Vudn1gIG91dHB1dHMgb2YgYFVlbmdhZ2VSZWFsdGltZVNlcnZpY2Ute2Vudn1gXG4gKiBvbmNlIHRoZSBzdGFjayBoYXMgYmVlbiBkZXBsb3llZCB0aGVyZS5cbiAqL1xuY29uc3QgRU5EUE9JTlRTOiBSZWNvcmQ8UmVhbHRpbWVFbnYsIFJlYWx0aW1lRW5kcG9pbnRzIHwgbnVsbD4gPSB7XG4gIGRldjogbnVsbCxcbiAgdWF0OiBudWxsLFxuICBwcm9kOiBudWxsLFxufTtcblxuLyoqIFBsYXRmb3JtIEFQSSBiYXNlIHBlciBlbnZpcm9ubWVudCDigJQga25vd24gYWhlYWQgb2YgYW55IGRlcGxveS4gKi9cbmV4cG9ydCBjb25zdCBBUElfQkFTRTogUmVjb3JkPFJlYWx0aW1lRW52LCBzdHJpbmc+ID0ge1xuICBkZXY6ICdodHRwczovL2FwaS5kZXYucGxhdGZvcm0udWVuZ2FnZS5pbycsXG4gIHVhdDogJ2h0dHBzOi8vYXBpLnVhdC5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbiAgcHJvZDogJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8nLFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50c0ZvcihlbnY6IFJlYWx0aW1lRW52KTogUmVhbHRpbWVFbmRwb2ludHMge1xuICBjb25zdCBmb3VuZCA9IEVORFBPSU5UU1tlbnZdO1xuICBpZiAoIWZvdW5kKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYHJlYWx0aW1lLmNvbm5lY3Q6IG5vIGVuZHBvaW50cyByZWdpc3RlcmVkIGZvciBlbnYgXCIke2Vudn1cIi4gYCArXG4gICAgICAgICdQYXNzIHtlbmRwb2ludHM6IHtodHRwRG9tYWluLCByZWFsdGltZURvbWFpbiwgYXBpQmFzZX19IGV4cGxpY2l0bHksIG9yIGZpbGwgaW4gJyArXG4gICAgICAgIFwic3JjL3JlYWx0aW1lL2VuZHBvaW50cy50cyBmcm9tIHRoZSByZWFsdGltZSBzdGFjaydzIFJlYWx0aW1lRXZlbnRBcGkqRG5zIG91dHB1dHMuXCIsXG4gICAgKTtcbiAgfVxuICByZXR1cm4gZm91bmQ7XG59XG4iXX0=
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5kcG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JlYWx0aW1lL2VuZHBvaW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEwREEsb0NBVUM7QUE1Q0Q7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxTQUFTLEdBQWtEO0lBQy9ELEdBQUcsRUFBRSxJQUFJO0lBQ1QsR0FBRyxFQUFFO1FBQ0gsVUFBVSxFQUFFLGlFQUFpRTtRQUM3RSxjQUFjLEVBQUUsMEVBQTBFO1FBQzFGLE9BQU8sRUFBRSxxQ0FBcUM7S0FDL0M7SUFDRCxJQUFJLEVBQUU7UUFDSixVQUFVLEVBQUUsaUVBQWlFO1FBQzdFLGNBQWMsRUFBRSwwRUFBMEU7UUFDMUYsT0FBTyxFQUFFLGlDQUFpQztLQUMzQztDQUNGLENBQUM7QUFFRixxRUFBcUU7QUFDeEQsUUFBQSxRQUFRLEdBQWdDO0lBQ25ELEdBQUcsRUFBRSxxQ0FBcUM7SUFDMUMsR0FBRyxFQUFFLHFDQUFxQztJQUMxQyxJQUFJLEVBQUUsaUNBQWlDO0NBQ3hDLENBQUM7QUFFRixTQUFnQixZQUFZLENBQUMsR0FBZ0I7SUFDM0MsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQ2Isc0RBQXNELEdBQUcsS0FBSztZQUM1RCxpRkFBaUY7WUFDakYsbUZBQW1GLENBQ3RGLENBQUM7SUFDSixDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBQZXItZW52aXJvbm1lbnQgcmVhbHRpbWUgZW5kcG9pbnRzLlxuICpcbiAqIEZyb250ZW5kcyBwYXNzIGBjb25uZWN0KHsgZW52OiAncHJvZCcgfSlgIGFuZCBnZXQgVVJMcyBmcm9tIGhlcmUg4oCUIG5vXG4gKiBob3N0bmFtZXMgb3IgQVJOcyBpbiBhcHAgY29kZS5cbiAqXG4gKiBBcHBTeW5jIGFzc2lnbnMgdGhlIEV2ZW50IEFQSSdzIEROUyBuYW1lcyBhdCBjcmVhdGUgdGltZVxuICogKGA8YXBpSWQ+LmFwcHN5bmMtYXBpLjxyZWdpb24+LmFtYXpvbmF3cy5jb21gIGFuZCB0aGUgbWF0Y2hpbmdcbiAqIGBhcHBzeW5jLXJlYWx0aW1lLWFwaWAgaG9zdCksIHNvIHRoZXkgY2Fubm90IGJlIGtub3duIGJlZm9yZSB0aGUgc3RhY2tcbiAqIGlzIGRlcGxveWVkLiBBbiBlbnZpcm9ubWVudCB3aXRob3V0IGEgZGVwbG95ZWQgc3RhY2sgc3RheXMgbnVsbCBhbmRcbiAqIGBjb25uZWN0KHsgZW52IH0pYCB0aHJvd3Mgd2l0aCBpbnN0cnVjdGlvbnM7IGBjb25uZWN0KHsgZW5kcG9pbnRzIH0pYFxuICogYWx3YXlzIHdvcmtzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlYWx0aW1lRW5kcG9pbnRzIHtcbiAgLyoqIEFwcFN5bmMgRXZlbnQgQVBJIEhUVFAgZG9tYWluLiBBbHNvIHRoZSBgaG9zdGAgaW4gdGhlIGF1dGggaGVhZGVyLiAqL1xuICBodHRwRG9tYWluOiBzdHJpbmc7XG4gIC8qKiBBcHBTeW5jIEV2ZW50IEFQSSByZWFsdGltZSAoV2ViU29ja2V0KSBkb21haW4uICovXG4gIHJlYWx0aW1lRG9tYWluOiBzdHJpbmc7XG4gIC8qKiBQbGF0Zm9ybSBBUEkgYmFzZSBVUkwsIHVzZWQgZm9yIHRoZSBsYXN0LXZhbHVlIHNuYXBzaG90IGZldGNoLiAqL1xuICBhcGlCYXNlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFJlYWx0aW1lRW52ID0gJ2RldicgfCAndWF0JyB8ICdwcm9kJztcblxuLyoqXG4gKiBBcHBTeW5jIGFzc2lnbnMgdGhlc2UgYXQgRXZlbnQgQVBJIGNyZWF0ZSB0aW1lIGFuZCB0aGUgcHJlZml4IGlzIE5PVCB0aGVcbiAqIEFQSSBpZCwgc28gdGhleSBjYW5ub3QgYmUgY29uc3RydWN0ZWQg4oCUIHRoZXkgYXJlIGNvcGllZCBmcm9tIHRoZVxuICogYFJlYWx0aW1lRXZlbnRBcGlIdHRwRG5zLXtlbnZ9YCAvIGBSZWFsdGltZUV2ZW50QXBpUmVhbHRpbWVEbnMte2Vudn1gXG4gKiBvdXRwdXRzIG9mIGBVZW5nYWdlUmVhbHRpbWVTZXJ2aWNlLXtlbnZ9YC5cbiAqXG4gKiBCZWNhdXNlIGEgY2FjaGVkIGJyb3dzZXIgYnVuZGxlIGNhcnJpZXMgdGhlc2UgdmFsdWVzLCByZWNyZWF0aW5nIGFuIEV2ZW50XG4gKiBBUEkgaXMgYSBicmVha2luZyBjaGFuZ2UgZm9yIGV2ZXJ5IHBpbm5lZCBjb25zdW1lci4gVGhlIGBicm93c2VyLXNka2BcbiAqIHJlbGVhc2Ugam9iIGFzc2VydHMgdGhlIHByb2QgcGFpciBzdGlsbCBtYXRjaGVzIHRoZSBsaXZlIHN0YWNrIGV4cG9ydHMgYW5kXG4gKiBmYWlscyB0aGUgcmVsZWFzZSBvbiBkcmlmdCwgc28gdGhpcyB0YWJsZSBjYW5ub3Qgcm90IHNpbGVudGx5LlxuICpcbiAqIGBkZXZgIHN0YXlzIG51bGwg4oCUIHRoZSByZWFsdGltZSBzdGFjayBpcyBub3QgZGVwbG95ZWQgdGhlcmUuXG4gKi9cbmNvbnN0IEVORFBPSU5UUzogUmVjb3JkPFJlYWx0aW1lRW52LCBSZWFsdGltZUVuZHBvaW50cyB8IG51bGw+ID0ge1xuICBkZXY6IG51bGwsXG4gIHVhdDoge1xuICAgIGh0dHBEb21haW46ICd6bDJrb3Jtd3JqZXhiZ2xrYnBzeTQ0eHllNC5hcHBzeW5jLWFwaS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20nLFxuICAgIHJlYWx0aW1lRG9tYWluOiAnemwya29ybXdyamV4Ymdsa2Jwc3k0NHh5ZTQuYXBwc3luYy1yZWFsdGltZS1hcGkuYXAtc291dGgtMS5hbWF6b25hd3MuY29tJyxcbiAgICBhcGlCYXNlOiAnaHR0cHM6Ly9hcGkudWF0LnBsYXRmb3JtLnVlbmdhZ2UuaW8nLFxuICB9LFxuICBwcm9kOiB7XG4gICAgaHR0cERvbWFpbjogJzZkaGZqdGx2eWpmYWxrdTd1bWJ1c3VpbGhhLmFwcHN5bmMtYXBpLmFwLXNvdXRoLTEuYW1hem9uYXdzLmNvbScsXG4gICAgcmVhbHRpbWVEb21haW46ICc2ZGhmanRsdnlqZmFsa3U3dW1idXN1aWxoYS5hcHBzeW5jLXJlYWx0aW1lLWFwaS5hcC1zb3V0aC0xLmFtYXpvbmF3cy5jb20nLFxuICAgIGFwaUJhc2U6ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbiAgfSxcbn07XG5cbi8qKiBQbGF0Zm9ybSBBUEkgYmFzZSBwZXIgZW52aXJvbm1lbnQg4oCUIGtub3duIGFoZWFkIG9mIGFueSBkZXBsb3kuICovXG5leHBvcnQgY29uc3QgQVBJX0JBU0U6IFJlY29yZDxSZWFsdGltZUVudiwgc3RyaW5nPiA9IHtcbiAgZGV2OiAnaHR0cHM6Ly9hcGkuZGV2LnBsYXRmb3JtLnVlbmdhZ2UuaW8nLFxuICB1YXQ6ICdodHRwczovL2FwaS51YXQucGxhdGZvcm0udWVuZ2FnZS5pbycsXG4gIHByb2Q6ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvJyxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBlbmRwb2ludHNGb3IoZW52OiBSZWFsdGltZUVudik6IFJlYWx0aW1lRW5kcG9pbnRzIHtcbiAgY29uc3QgZm91bmQgPSBFTkRQT0lOVFNbZW52XTtcbiAgaWYgKCFmb3VuZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGByZWFsdGltZS5jb25uZWN0OiBubyBlbmRwb2ludHMgcmVnaXN0ZXJlZCBmb3IgZW52IFwiJHtlbnZ9XCIuIGAgK1xuICAgICAgICAnUGFzcyB7ZW5kcG9pbnRzOiB7aHR0cERvbWFpbiwgcmVhbHRpbWVEb21haW4sIGFwaUJhc2V9fSBleHBsaWNpdGx5LCBvciBmaWxsIGluICcgK1xuICAgICAgICBcInNyYy9yZWFsdGltZS9lbmRwb2ludHMudHMgZnJvbSB0aGUgcmVhbHRpbWUgc3RhY2sncyBSZWFsdGltZUV2ZW50QXBpKkRucyBvdXRwdXRzLlwiLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIGZvdW5kO1xufVxuIl19
@@ -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;
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Rva2VuLXNvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1GQSxvREFTQztBQU9ELHdDQXNCQztBQU1ELDBDQUVDO0FBaklELHFDQUErRTtBQUMvRSwwQ0FBMEM7QUFnRjFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDO0FBRXRDLFNBQWdCLG9CQUFvQixDQUNsQyxNQUFtQixFQUNuQixVQUErRCxFQUFFO0lBRWpFLE9BQU87UUFDTCxNQUFNO1FBQ04sY0FBYyxFQUFFLE9BQU8sQ0FBQyxjQUFjLElBQUksd0JBQXdCO1FBQ2xFLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTyxJQUFLLFVBQVUsQ0FBQyxLQUFzQjtLQUMvRCxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsY0FBYyxDQUFDLEtBQXVCO0lBQzFELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztJQUN2QixJQUFJLEtBQUssQ0FBQyxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxTQUFTLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4RSxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO0lBQzVCLENBQUM7SUFDRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNuQixNQUFNLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQyxRQUFRLENBQUM7UUFDbkMsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7UUFDN0MsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsS0FBSyxDQUFDLFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDM0IsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQztJQUNILEtBQUssQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQzFCLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDO1FBQzdCLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQztJQUNyQixDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLEtBQUssQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQzNCLE1BQU0sR0FBRyxDQUFDO0lBQ1osQ0FBQztBQUNILENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFnQixlQUFlLENBQUMsS0FBdUI7SUFDckQsS0FBSyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7QUFDM0IsQ0FBQztBQUVELEtBQUssVUFBVSxTQUFTLENBQUMsS0FBdUI7SUFDOUMsUUFBUSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzFCLEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztZQUNyQixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFTLEVBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUNuRSxNQUFNLElBQUksMEJBQWlCLENBQ3pCLHFGQUFxRixDQUN0RixDQUFDO1lBQ0osQ0FBQztZQUNELE9BQU87Z0JBQ0wsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSztnQkFDekIsZ0VBQWdFO2dCQUNoRSwrREFBK0Q7Z0JBQy9ELFNBQVMsRUFBRSxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO2FBQ25FLENBQUM7UUFDSixDQUFDO1FBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ2pCLE1BQU0sR0FBRyxHQUFHLE1BQU0sS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDckQsTUFBTSxFQUFFLEtBQUs7Z0JBQ2IsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixFQUFFO2FBQ3hDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ1osTUFBTSxJQUFJLDRCQUFtQixDQUMzQixZQUFZLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxrQkFBa0IsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FHL0MsQ0FBQztZQUNGLElBQUksT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUN4RCxNQUFNLElBQUksNEJBQW1CLENBQzNCLFlBQVksS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLG1EQUFtRCxDQUNyRixDQUFDO1lBQ0osQ0FBQztZQUNELHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUsa0JBQWtCO1lBQ2xCLE1BQU0sSUFBSSxHQUNSLE9BQU8sSUFBSSxDQUFDLFNBQVMsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN4RixNQUFNLEdBQUcsR0FBRyxJQUFBLGtCQUFTLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xDLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixTQUFTLEVBQ1AsSUFBSSxLQUFLLFNBQVM7b0JBQ2hCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUk7b0JBQzFCLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSTt3QkFDWixDQUFDLENBQUMsR0FBRyxHQUFHLElBQUk7d0JBQ1osQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7YUFDbkMsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDaEIsTUFBTSxLQUFLLEdBQUcsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzVDLE1BQU0sR0FBRyxHQUFHLElBQUEsa0JBQVMsRUFBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsU0FBUyxFQUFFLEdBQUcsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7YUFDbEUsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLHFCQUFxQixDQUFDLENBQUMsQ0FBQztZQUMzQixNQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsRUFBRSxDQUFDLENBQUM7WUFDdkUsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUs7Z0JBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM5RCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7WUFDOUUsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLGNBQWMsRUFBRTtnQkFDekUsTUFBTSxFQUFFLE1BQU07Z0JBQ2QsT0FBTyxFQUFFO29CQUNQLGNBQWMsRUFBRSxtQ0FBbUM7b0JBQ25ELGFBQWEsRUFBRSxTQUFTLEtBQUssRUFBRTtpQkFDaEM7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDdEIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDWixNQUFNLElBQUksR0FBRyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDOUIsTUFBTSxJQUFJLG9CQUFXLENBQUMsd0NBQXdDLEdBQUcsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztZQUN0RixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBbUQsQ0FBQztZQUNsRixJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN2QixNQUFNLElBQUksb0JBQVcsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1lBQ3JFLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzFDLE9BQU87Z0JBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO2dCQUN4QixTQUFTLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTthQUNuRSxDQUFDO1FBQ0osQ0FBQztRQUNELEtBQUsscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1lBQzNCLGdFQUFnRTtZQUNoRSxtRUFBbUU7WUFDbkUsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUM1QixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDekQsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDcEUsQ0FBQztZQUNELDJFQUEyRTtZQUMzRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsd0RBQWEsZ0JBQWdCLEdBQUMsQ0FBQztZQUNuRCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQztnQkFDM0IsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO2dCQUMvQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7Z0JBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTthQUMxQixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN6QixNQUFNLElBQUksb0JBQVcsQ0FBQyw2REFBNkQsQ0FBQyxDQUFDO1lBQ3ZGLENBQUM7WUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDdkQseUVBQXlFO1lBQ3pFLE1BQU0sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztZQUN4QyxNQUFNLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUM7WUFDMUMsTUFBTSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7WUFDN0IsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sTUFBTSxDQUFDLFFBQVEsQ0FBQztvQkFDcEIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO29CQUMvQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7b0JBQ2pDLFNBQVM7aUJBQ1YsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUNELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNsRCxDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLE1BQU0sQ0FBQyxDQUFTO0lBQ3ZCLHNFQUFzRTtJQUN0RSw4REFBOEQ7SUFDOUQsSUFBSSxPQUFPLE1BQU0sS0FBSyxXQUFXO1FBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEYsb0NBQW9DO0lBQ3BDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciwgVG9rZW5FeHBpcmVkRXJyb3IgfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBnZXRFeHBpcnkgfSBmcm9tICcuL2F1dGgvaXNzdWVyJztcblxuLyoqXG4gKiBIb3cgdGhlIFNESyBnZXRzIGEgZnJlc2ggYWNjZXNzIHRva2VuLiBUaHJlZSBzaGFwZXMgcGVyIHRoZSBicmllZjpcbiAqXG4gKiAgIC0gYHN0YXRpYy1zdHJpbmdgIOKAlCBjYWxsZXIgaGFuZHMgaW4gYSB0b2tlbiBzdHJpbmcuIFVzZWQgdW50aWwgaXRzXG4gKiAgICAgYGV4cGAgaGFzIHBhc3NlZDsgb24gZXhwaXJ5IHdlIHRocm93IGBUb2tlbkV4cGlyZWRFcnJvcmAgcmF0aGVyXG4gKiAgICAgdGhhbiB0cnkgdG8gcmVmcmVzaCAodGhlIFNESyBoYXMgbm8gd2F5IHRvIHJlZnJlc2ggYSBzdGF0aWNcbiAqICAgICBleHRlcm5hbGx5LXN1cHBsaWVkIHRva2VuKS5cbiAqXG4gKiAgIC0gYGNhbGxiYWNrYCDigJQgY2FsbGVyIHN1cHBsaWVzIGEgZnVuY3Rpb24gdGhlIFNESyBjYWxscyBvbiBtaXNzXG4gKiAgICAgYW5kIG9uIDQwMSBpbnZhbGlkYXRpb24uIFRoZSBjb25zdW1lcidzIGxvZ2ljIGlzIHJlc3BvbnNpYmxlIGZvclxuICogICAgIHJlZnJlc2g7IHRoZSBTREsganVzdCBjYWNoZXMgdGhlIHJlc3VsdCBiZXR3ZWVuIGludm9jYXRpb25zLlxuICpcbiAqICAgLSBgc2VydmljZS1jcmVkZW50aWFsc2Ag4oCUIGBjbGllbnRfaWRgICsgYGNsaWVudF9zZWNyZXRgIGZvciB0aGVcbiAqICAgICBPQXV0aDIgYGNsaWVudF9jcmVkZW50aWFsc2AgZ3JhbnQuIFNESyBtaW50cyArIGNhY2hlczsgb25cbiAqICAgICBleHBpcnkgaXQgcmUtbWludHMgd2l0aCB0aGUgc2FtZSBjcmVkZW50aWFscy5cbiAqL1xuZXhwb3J0IHR5cGUgVG9rZW5Tb3VyY2UgPVxuICB8IHsga2luZDogJ3N0YXRpYy1zdHJpbmcnOyB0b2tlbjogc3RyaW5nIH1cbiAgfCB7IGtpbmQ6ICdjYWxsYmFjayc7IGdldFRva2VuOiAoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4gfVxuICB8IHtcbiAgICAgIC8qKlxuICAgICAgICogYHRva2VuVXJsYCDigJQgYSByb3V0ZSBvbiB0aGUgQ0FMTEVSJ3Mgb3duIHNlcnZlciB0aGF0IHJldHVybnNcbiAgICAgICAqIGB7IHRva2VuLCBleHBpcmVzSW4gfWAuIE1pcnJvcnMgdGhlIHJlYWx0aW1lIFNESyBvcHRpb24gb2YgdGhlXG4gICAgICAgKiBzYW1lIG5hbWUsIGFuZCBleGlzdHMgZm9yIHRoZSBzYW1lIHJlYXNvbjogaXQga2VlcHMgdGhlIGNsaWVudFxuICAgICAgICogc2VjcmV0IG9uIHRoZSBjYWxsZXIncyBzZXJ2ZXIgaW5zdGVhZCBvZiBpbiBhIHBhZ2Ugb3IgYW4gYXBwXG4gICAgICAgKiBidW5kbGUuXG4gICAgICAgKlxuICAgICAgICogYGV4cGlyZXNJbmAgaXMgc2Vjb25kcyBmcm9tIHJlY2VpcHQsIHBlciB0aGUgcmVhbHRpbWUgY29udHJhY3QuXG4gICAgICAgKiBJdCBpcyB0cnVzdGVkIG92ZXIgdGhlIEpXVCdzIG93biBgZXhwYCBiZWNhdXNlIHRoZSBjYWxsZXInc1xuICAgICAgICogc2VydmVyIG1heSBkZWxpYmVyYXRlbHkgaGFuZCBvdXQgYSBzaG9ydGVyLWxpdmVkIHNsaWNlLlxuICAgICAgICovXG4gICAgICBraW5kOiAndG9rZW4tdXJsJztcbiAgICAgIHRva2VuVXJsOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIGtpbmQ6ICdzZXJ2aWNlLWNyZWRlbnRpYWxzJztcbiAgICAgIGNsaWVudElkOiBzdHJpbmc7XG4gICAgICBjbGllbnRTZWNyZXQ6IHN0cmluZztcbiAgICAgIGF1dGhCYXNlVXJsOiBzdHJpbmc7XG4gICAgICBzY29wZT86IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgLyoqXG4gICAgICAgKiBDYWxsZXIgaGFuZHMgdGhlIFNESyBhIGAoYWNjZXNzVG9rZW4sIHJlZnJlc2hUb2tlbilgIHBhaXIgZnJvbVxuICAgICAgICogYSBmaW5pc2hlZCBsb2dpbiBmbG93IChgYXV0aC5sb2dpbldpdGhQYXNzd29yZCguLi4pYCxcbiAgICAgICAqIGBhdXRoLnZlcmlmeU90cCguLi4pYCwgZXRjKS4gVGhlIFNESyBzZXJ2ZXMgdGhlIGFjY2VzcyB0b2tlblxuICAgICAgICogdW50aWwgaXQgZXhwaXJlcywgdGhlbiByb3RhdGVzIHZpYSBgYXV0aC5yZWZyZXNoKC4uLilgLlxuICAgICAgICpcbiAgICAgICAqIGBjbGllbnRJZGAgaXMgdGhlIE9BdXRoIGNsaWVudCBpZCB1c2VkIGR1cmluZyB0aGUgb3JpZ2luYWxcbiAgICAgICAqIGxvZ2luIOKAlCByZXF1aXJlZCBieSB0aGUgcmVmcmVzaCBoYW5kbGVyLiBgb25Sb3RhdGVgIGlzIGFuXG4gICAgICAgKiBvcHRpb25hbCBob29rIHRoZSBjYWxsZXIgY2FuIHVzZSB0byBwZXJzaXN0IHRoZSBuZXcgcGFpclxuICAgICAgICogKGNvb2tpZSwgc2VjdXJlIHN0b3JhZ2UsIGV0Yykg4oCUIGZpcmVkIHdpdGggZXZlcnkgc3VjY2Vzc2Z1bFxuICAgICAgICogcm90YXRpb24uXG4gICAgICAgKi9cbiAgICAgIGtpbmQ6ICdhY2Nlc3MtcmVmcmVzaC1wYWlyJztcbiAgICAgIGFjY2Vzc1Rva2VuOiBzdHJpbmc7XG4gICAgICByZWZyZXNoVG9rZW46IHN0cmluZztcbiAgICAgIC8qKiBJbml0aWFsIGV4cGlyeSB0aW1lc3RhbXAgKG1zIHNpbmNlIGVwb2NoKS4gUmUtZGVyaXZlZCBmcm9tIGVhY2ggbmV3IGFjY2VzcyB0b2tlbi4gKi9cbiAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgY2xpZW50SWQ6IHN0cmluZztcbiAgICAgIG9uUm90YXRlPzogKHBhaXI6IHtcbiAgICAgICAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgICAgICAgcmVmcmVzaFRva2VuOiBzdHJpbmc7XG4gICAgICAgIGV4cGlyZXNBdDogbnVtYmVyO1xuICAgICAgfSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG4gICAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblNvdXJjZVN0YXRlIHtcbiAgc291cmNlOiBUb2tlblNvdXJjZTtcbiAgY2FjaGVkPzogeyB0b2tlbjogc3RyaW5nOyBleHBpcmVzQXQ6IG51bWJlciB9O1xuICAvKiogUmVmcmVzaCBkZWR1cDogY29uY3VycmVudCByZXF1ZXN0cyBzaGFyZSB0aGUgc2FtZSBmZXRjaC4gKi9cbiAgaW5mbGlnaHQ/OiBQcm9taXNlPHsgdG9rZW46IHN0cmluZzsgZXhwaXJlc0F0OiBudW1iZXIgfT47XG4gIC8qKiBCdWZmZXIgKG1zKSBiZWZvcmUgYGV4cGAgYXQgd2hpY2ggd2UgdHJlYXQgYSB0b2tlbiBhcyBleHBpcmVkLiAqL1xuICBleHBpcnlCdWZmZXJNczogbnVtYmVyO1xuICAvKiogVXNlZCBvbmx5IGJ5IHRoZSBzZXJ2aWNlLWNyZWRlbnRpYWxzIHBhdGguICovXG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbn1cblxuY29uc3QgREVGQVVMVF9FWFBJUllfQlVGRkVSX01TID0gNTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICBzb3VyY2U6IFRva2VuU291cmNlLFxuICBvcHRpb25zOiB7IGV4cGlyeUJ1ZmZlck1zPzogbnVtYmVyOyBmZXRjaEZuPzogdHlwZW9mIGZldGNoIH0gPSB7fSxcbik6IFRva2VuU291cmNlU3RhdGUge1xuICByZXR1cm4ge1xuICAgIHNvdXJjZSxcbiAgICBleHBpcnlCdWZmZXJNczogb3B0aW9ucy5leHBpcnlCdWZmZXJNcyA/PyBERUZBVUxUX0VYUElSWV9CVUZGRVJfTVMsXG4gICAgZmV0Y2hGbjogb3B0aW9ucy5mZXRjaEZuID8/IChnbG9iYWxUaGlzLmZldGNoIGFzIHR5cGVvZiBmZXRjaCksXG4gIH07XG59XG5cbi8qKlxuICogUmV0dXJuIGEgZnJlc2ggYWNjZXNzIHRva2VuLCB1c2luZyB0aGUgY2FjaGUgd2hlbiB3YXJtLiBDb25jdXJyZW50XG4gKiBjYWxsZXJzIGR1cmluZyBhIHJlZnJlc2ggc2hhcmUgdGhlIGluLWZsaWdodCBQcm9taXNlIHNvIHdlIGRvbid0XG4gKiBzdGFtcGVkZSB0aGUgYXV0aCBzZXJ2ZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBY2Nlc3NUb2tlbihzdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gIGlmIChzdGF0ZS5jYWNoZWQgJiYgc3RhdGUuY2FjaGVkLmV4cGlyZXNBdCA+IG5vdyArIHN0YXRlLmV4cGlyeUJ1ZmZlck1zKSB7XG4gICAgcmV0dXJuIHN0YXRlLmNhY2hlZC50b2tlbjtcbiAgfVxuICBpZiAoc3RhdGUuaW5mbGlnaHQpIHtcbiAgICBjb25zdCBmcmVzaCA9IGF3YWl0IHN0YXRlLmluZmxpZ2h0O1xuICAgIHJldHVybiBmcmVzaC50b2tlbjtcbiAgfVxuICBjb25zdCBpbmZsaWdodCA9IG1pbnRUb2tlbihzdGF0ZSkudGhlbigocmVzKSA9PiB7XG4gICAgc3RhdGUuY2FjaGVkID0gcmVzO1xuICAgIHN0YXRlLmluZmxpZ2h0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXM7XG4gIH0pO1xuICBzdGF0ZS5pbmZsaWdodCA9IGluZmxpZ2h0O1xuICB0cnkge1xuICAgIGNvbnN0IGZyZXNoID0gYXdhaXQgaW5mbGlnaHQ7XG4gICAgcmV0dXJuIGZyZXNoLnRva2VuO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdGF0ZS5pbmZsaWdodCA9IHVuZGVmaW5lZDtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn1cblxuLyoqXG4gKiBEcm9wIHRoZSBjYWNoZWQgdG9rZW4uIFRoZSBuZXh0IGBnZXRBY2Nlc3NUb2tlbmAgd2lsbCBtaW50IG9yXG4gKiByZS1mZXRjaC4gQ2FsbGVkIGJ5IHRoZSByZXF1ZXN0IGxheWVyIG9uIDQwMS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGludmFsaWRhdGVUb2tlbihzdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSk6IHZvaWQge1xuICBzdGF0ZS5jYWNoZWQgPSB1bmRlZmluZWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIG1pbnRUb2tlbihzdGF0ZTogVG9rZW5Tb3VyY2VTdGF0ZSk6IFByb21pc2U8eyB0b2tlbjogc3RyaW5nOyBleHBpcmVzQXQ6IG51bWJlciB9PiB7XG4gIHN3aXRjaCAoc3RhdGUuc291cmNlLmtpbmQpIHtcbiAgICBjYXNlICdzdGF0aWMtc3RyaW5nJzoge1xuICAgICAgY29uc3QgZXhwID0gZ2V0RXhwaXJ5KHN0YXRlLnNvdXJjZS50b2tlbik7XG4gICAgICBpZiAoZXhwICE9PSBudWxsICYmIGV4cCAqIDEwMDAgPCBEYXRlLm5vdygpICsgc3RhdGUuZXhwaXJ5QnVmZmVyTXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRva2VuRXhwaXJlZEVycm9yKFxuICAgICAgICAgICdzdGF0aWMgYWNjZXNzIHRva2VuIGhhcyBleHBpcmVkOyBjb25zdW1lciBtdXN0IHVwZGF0ZSB0aGUgY29uZmlnIHdpdGggYSBmcmVzaCB0b2tlbicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbjogc3RhdGUuc291cmNlLnRva2VuLFxuICAgICAgICAvLyBObyBgZXhwYD8gVHJlYXQgYXMgb3BhcXVlIG5vbi1leHBpcmluZzsgY2FjaGUgZm9yIDFoIHRvIGF2b2lkXG4gICAgICAgIC8vIHJlLXVzaW5nIHRoZSBzYW1lIHN0cmluZyBmb3JldmVyIGluIGNhc2UgdGhlIGlzc3VlciByb3RhdGVzLlxuICAgICAgICBleHBpcmVzQXQ6IGV4cCAhPT0gbnVsbCA/IGV4cCAqIDEwMDAgOiBEYXRlLm5vdygpICsgNjAgKiA2MCAqIDEwMDAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICd0b2tlbi11cmwnOiB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGF0ZS5mZXRjaEZuKHN0YXRlLnNvdXJjZS50b2tlblVybCwge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBoZWFkZXJzOiB7IGFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nIH0sXG4gICAgICB9KTtcbiAgICAgIGlmICghcmVzLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKFxuICAgICAgICAgIGB0b2tlblVybCAke3N0YXRlLnNvdXJjZS50b2tlblVybH0gYW5zd2VyZWQgSFRUUCAke3Jlcy5zdGF0dXN9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJvZHkgPSAoYXdhaXQgcmVzLmpzb24oKS5jYXRjaCgoKSA9PiAoe30pKSkgYXMge1xuICAgICAgICB0b2tlbj86IHVua25vd247XG4gICAgICAgIGV4cGlyZXNJbj86IHVua25vd247XG4gICAgICB9O1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnRva2VuICE9PSAnc3RyaW5nJyB8fCBib2R5LnRva2VuID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihcbiAgICAgICAgICBgdG9rZW5VcmwgJHtzdGF0ZS5zb3VyY2UudG9rZW5Vcmx9IHJldHVybmVkIG5vIHRva2VuOyBleHBlY3RlZCB7IHRva2VuLCBleHBpcmVzSW4gfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICAvLyBBIG1pc3Npbmcgb3IgdW51c2FibGUgZXhwaXJlc0luIGZhbGxzIGJhY2sgdG8gdGhlIEpXVCdzIG93biBleHAsIHRoZW5cbiAgICAgIC8vIHRvIGZpdmUgbWludXRlcyDigJQgc2hvcnQgZW5vdWdoIHRoYXQgYSBiYWQgdmFsdWUgY2Fubm90IHBpbiBhIHN0YWxlXG4gICAgICAvLyB0b2tlbiBmb3IgbG9uZy5cbiAgICAgIGNvbnN0IHNlY3MgPVxuICAgICAgICB0eXBlb2YgYm9keS5leHBpcmVzSW4gPT09ICdudW1iZXInICYmIGJvZHkuZXhwaXJlc0luID4gMCA/IGJvZHkuZXhwaXJlc0luIDogdW5kZWZpbmVkO1xuICAgICAgY29uc3QgZXhwID0gZ2V0RXhwaXJ5KGJvZHkudG9rZW4pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW46IGJvZHkudG9rZW4sXG4gICAgICAgIGV4cGlyZXNBdDpcbiAgICAgICAgICBzZWNzICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gRGF0ZS5ub3coKSArIHNlY3MgKiAxMDAwXG4gICAgICAgICAgICA6IGV4cCAhPT0gbnVsbFxuICAgICAgICAgICAgICA/IGV4cCAqIDEwMDBcbiAgICAgICAgICAgICAgOiBEYXRlLm5vdygpICsgNSAqIDYwICogMTAwMCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgJ2NhbGxiYWNrJzoge1xuICAgICAgY29uc3QgdG9rZW4gPSBhd2FpdCBzdGF0ZS5zb3VyY2UuZ2V0VG9rZW4oKTtcbiAgICAgIGNvbnN0IGV4cCA9IGdldEV4cGlyeSh0b2tlbik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbixcbiAgICAgICAgZXhwaXJlc0F0OiBleHAgIT09IG51bGwgPyBleHAgKiAxMDAwIDogRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdzZXJ2aWNlLWNyZWRlbnRpYWxzJzoge1xuICAgICAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBncmFudF90eXBlOiAnY2xpZW50X2NyZWRlbnRpYWxzJyB9KTtcbiAgICAgIGlmIChzdGF0ZS5zb3VyY2Uuc2NvcGUpIGJvZHkuc2V0KCdzY29wZScsIHN0YXRlLnNvdXJjZS5zY29wZSk7XG4gICAgICBjb25zdCBiYXNpYyA9IGJhc2U2NChgJHtzdGF0ZS5zb3VyY2UuY2xpZW50SWR9OiR7c3RhdGUuc291cmNlLmNsaWVudFNlY3JldH1gKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0YXRlLmZldGNoRm4oYCR7c3RhdGUuc291cmNlLmF1dGhCYXNlVXJsfS9vYXV0aC90b2tlbmAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcsXG4gICAgICAgICAgYXV0aG9yaXphdGlvbjogYEJhc2ljICR7YmFzaWN9YCxcbiAgICAgICAgfSxcbiAgICAgICAgYm9keTogYm9keS50b1N0cmluZygpLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKGBjbGllbnRfY3JlZGVudGlhbHMgbWludCBmYWlsZWQ6IEhUVFAgJHtyZXMuc3RhdHVzfSAke3RleHR9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBqc29uID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIHsgYWNjZXNzX3Rva2VuPzogc3RyaW5nOyBleHBpcmVzX2luPzogbnVtYmVyIH07XG4gICAgICBpZiAoIWpzb24uYWNjZXNzX3Rva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcignYXV0aCBzZXJ2ZXIgcmVzcG9uc2UgbWlzc2luZyBhY2Nlc3NfdG9rZW4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR0bCA9IChqc29uLmV4cGlyZXNfaW4gPz8gMCkgKiAxMDAwO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9rZW46IGpzb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICBleHBpcmVzQXQ6IHR0bCA+IDAgPyBEYXRlLm5vdygpICsgdHRsIDogRGF0ZS5ub3coKSArIDUgKiA2MCAqIDEwMDAsXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdhY2Nlc3MtcmVmcmVzaC1wYWlyJzoge1xuICAgICAgLy8gRmlyc3QgY2FsbDogc2VydmUgdGhlIHNlZWQgYWNjZXNzIHRva2VuIGlmIGl0IGhhc24ndCBleHBpcmVkLlxuICAgICAgLy8gU3Vic2VxdWVudCBjYWxscyAob3Igb24gYSBzdGFsZSBzZWVkKSByb3RhdGUgdmlhIGF1dGgucmVmcmVzaCgpLlxuICAgICAgY29uc3Qgc291cmNlID0gc3RhdGUuc291cmNlO1xuICAgICAgaWYgKERhdGUubm93KCkgKyBzdGF0ZS5leHBpcnlCdWZmZXJNcyA8IHNvdXJjZS5leHBpcmVzQXQpIHtcbiAgICAgICAgcmV0dXJuIHsgdG9rZW46IHNvdXJjZS5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0OiBzb3VyY2UuZXhwaXJlc0F0IH07XG4gICAgICB9XG4gICAgICAvLyBEeW5hbWljIGltcG9ydCBrZWVwcyBgYXV0aGAgb3V0IG9mIHRoZSBidW5kbGUgd2hlbiB0aGlzIGtpbmQgaXNuJ3QgdXNlZC5cbiAgICAgIGNvbnN0IHsgcmVmcmVzaCB9ID0gYXdhaXQgaW1wb3J0KCcuL2F1dGgvcmVmcmVzaCcpO1xuICAgICAgY29uc3QgdG9rZW5zID0gYXdhaXQgcmVmcmVzaCh7XG4gICAgICAgIGFjY2Vzc1Rva2VuOiBzb3VyY2UuYWNjZXNzVG9rZW4sXG4gICAgICAgIHJlZnJlc2hUb2tlbjogc291cmNlLnJlZnJlc2hUb2tlbixcbiAgICAgICAgY2xpZW50SWQ6IHNvdXJjZS5jbGllbnRJZCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCF0b2tlbnMucmVmcmVzaFRva2VuKSB7XG4gICAgICAgIHRocm93IG5ldyBDb25maWdFcnJvcigncmVmcmVzaCByZXNwb25zZSBtaXNzaW5nIHJlZnJlc2hfdG9rZW47IGNhbm5vdCByb3RhdGUgYWdhaW4nKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4cGlyZXNBdCA9IERhdGUubm93KCkgKyB0b2tlbnMuZXhwaXJlc0luICogMTAwMDtcbiAgICAgIC8vIE11dGF0ZSB0aGUgc291cmNlIGluIHBsYWNlIHNvIHN1YnNlcXVlbnQgcm90YXRpb25zIGNhcnJ5IHRoZSBuZXcgcGFpci5cbiAgICAgIHNvdXJjZS5hY2Nlc3NUb2tlbiA9IHRva2Vucy5hY2Nlc3NUb2tlbjtcbiAgICAgIHNvdXJjZS5yZWZyZXNoVG9rZW4gPSB0b2tlbnMucmVmcmVzaFRva2VuO1xuICAgICAgc291cmNlLmV4cGlyZXNBdCA9IGV4cGlyZXNBdDtcbiAgICAgIGlmIChzb3VyY2Uub25Sb3RhdGUpIHtcbiAgICAgICAgYXdhaXQgc291cmNlLm9uUm90YXRlKHtcbiAgICAgICAgICBhY2Nlc3NUb2tlbjogdG9rZW5zLmFjY2Vzc1Rva2VuLFxuICAgICAgICAgIHJlZnJlc2hUb2tlbjogdG9rZW5zLnJlZnJlc2hUb2tlbixcbiAgICAgICAgICBleHBpcmVzQXQsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHsgdG9rZW46IHRva2Vucy5hY2Nlc3NUb2tlbiwgZXhwaXJlc0F0IH07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJhc2U2NChzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBXb3JrcyBpbiBOb2RlIGFuZCBicm93c2VyIChCdWZmZXIgaXMgcG9seWZpbGxlZCB2aWEgQHR5cGVzL25vZGUgYW5kXG4gIC8vIG1vc3QgYnVuZGxlcnM7IGJ0b2EgaXMgYSBmYWxsYmFjayBmb3IgZW52cyB3aXRob3V0IEJ1ZmZlcikuXG4gIGlmICh0eXBlb2YgQnVmZmVyICE9PSAndW5kZWZpbmVkJykgcmV0dXJuIEJ1ZmZlci5mcm9tKHMsICd1dGY4JykudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgcmV0dXJuIGJ0b2Eocyk7XG59XG4iXX0=
@@ -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 {};