@uengage.io/platform-sdk 0.3.0 → 0.7.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/dist/audit/client.d.ts +8 -0
- package/dist/audit/client.js +12 -19
- package/dist/audit/index.d.ts +0 -1
- package/dist/audit/index.js +2 -4
- package/dist/auth/authorize-url.d.ts +18 -0
- package/dist/auth/authorize-url.js +31 -0
- package/dist/auth/exchange-code.d.ts +22 -0
- package/dist/auth/exchange-code.js +55 -0
- package/dist/auth/index.d.ts +32 -0
- package/dist/auth/index.js +44 -0
- package/dist/auth/issuer.d.ts +9 -0
- package/dist/auth/issuer.js +42 -0
- package/dist/auth/pkce.d.ts +13 -0
- package/dist/auth/pkce.js +14 -0
- package/dist/auth/refresh.d.ts +16 -0
- package/dist/auth/refresh.js +30 -0
- package/dist/auth/verify.d.ts +17 -0
- package/dist/auth/verify.js +93 -0
- package/dist/business/client.js +40 -7
- package/dist/client.d.ts +74 -0
- package/dist/client.js +135 -0
- package/dist/config.d.ts +14 -15
- package/dist/config.js +11 -16
- package/dist/errors.d.ts +61 -0
- package/dist/errors.js +86 -0
- package/dist/http.d.ts +14 -5
- package/dist/http.js +27 -24
- package/dist/index.d.ts +14 -7
- package/dist/index.js +19 -9
- package/dist/token-source.d.ts +60 -0
- package/dist/token-source.js +111 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.js +12 -0
- package/package.json +2 -1
- package/dist/audit/sign.d.ts +0 -24
- package/dist/audit/sign.js +0 -30
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.verifyAccessToken = verifyAccessToken;
|
|
37
|
+
exports._resetJwksCache = _resetJwksCache;
|
|
38
|
+
const errors_1 = require("../errors");
|
|
39
|
+
const issuer_1 = require("./issuer");
|
|
40
|
+
/**
|
|
41
|
+
* Cache of JWKS documents keyed by issuer URL. Lambda-style: cleared
|
|
42
|
+
* on cold start, reused for the lifetime of the process. 5-minute
|
|
43
|
+
* staleness is plenty: when a key is rotated the auth server keeps
|
|
44
|
+
* publishing both old + new for the access-token TTL window, so the
|
|
45
|
+
* SDK's slightly stale view never causes a verification miss.
|
|
46
|
+
*/
|
|
47
|
+
const jwksCache = new Map();
|
|
48
|
+
const JWKS_TTL_MS = 5 * 60 * 1000;
|
|
49
|
+
async function getJwks(issuer) {
|
|
50
|
+
const cached = jwksCache.get(issuer);
|
|
51
|
+
if (cached && Date.now() - cached.cachedAt < JWKS_TTL_MS)
|
|
52
|
+
return cached.doc;
|
|
53
|
+
const res = await fetch(`${issuer}/jwks.json`);
|
|
54
|
+
if (!res.ok)
|
|
55
|
+
throw new errors_1.PlatformError(`JWKS fetch failed: HTTP ${res.status}`, { status: res.status });
|
|
56
|
+
const doc = (await res.json());
|
|
57
|
+
jwksCache.set(issuer, { doc, cachedAt: Date.now() });
|
|
58
|
+
return doc;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Verify an access token: fetches JWKS based on the token's `iss`,
|
|
62
|
+
* verifies the RSA signature, and returns the claims. Throws on any
|
|
63
|
+
* failure so callers can `try/catch` once instead of branching on a
|
|
64
|
+
* boolean.
|
|
65
|
+
*
|
|
66
|
+
* The verification itself happens via `jose`'s `jwtVerify`, but to
|
|
67
|
+
* keep this module lightweight (and to avoid pulling jose into the
|
|
68
|
+
* Browser bundle when consumers only want the URL helpers) we
|
|
69
|
+
* dynamic-import it. Tree-shakers will drop the import for code paths
|
|
70
|
+
* that never call `verifyAccessToken`.
|
|
71
|
+
*/
|
|
72
|
+
async function verifyAccessToken(token, options) {
|
|
73
|
+
const issuer = (0, issuer_1.getIssuer)(token);
|
|
74
|
+
if (!issuer)
|
|
75
|
+
throw new errors_1.ConfigError('access token has no `iss` claim');
|
|
76
|
+
const { jwtVerify, createLocalJWKSet } = await Promise.resolve().then(() => __importStar(require('jose')));
|
|
77
|
+
const jwks = createLocalJWKSet({ keys: (await getJwks(issuer)).keys });
|
|
78
|
+
try {
|
|
79
|
+
const { payload } = await jwtVerify(token, jwks, {
|
|
80
|
+
issuer,
|
|
81
|
+
audience: options?.audience,
|
|
82
|
+
});
|
|
83
|
+
return payload;
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
throw new errors_1.AuthenticationError('access token verification failed', { cause: err });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Test-only: clear the JWKS cache. */
|
|
90
|
+
function _resetJwksCache() {
|
|
91
|
+
jwksCache.clear();
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvdmVyaWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0NBLDhDQWlCQztBQUdELDBDQUVDO0FBOURELHNDQUE0RTtBQUM1RSxxQ0FBcUM7QUFNckM7Ozs7OztHQU1HO0FBQ0gsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLEVBQThDLENBQUM7QUFDeEUsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUM7QUFFbEMsS0FBSyxVQUFVLE9BQU8sQ0FBQyxNQUFjO0lBQ25DLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsSUFBSSxNQUFNLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsV0FBVztRQUFFLE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQztJQUM1RSxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLE1BQU0sWUFBWSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQ1QsTUFBTSxJQUFJLHNCQUFhLENBQUMsMkJBQTJCLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzRixNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksRUFBRSxDQUFZLENBQUM7SUFDMUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDckQsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEtBQWEsRUFDYixPQUErQjtJQUUvQixNQUFNLE1BQU0sR0FBRyxJQUFBLGtCQUFTLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFDaEMsSUFBSSxDQUFDLE1BQU07UUFBRSxNQUFNLElBQUksb0JBQVcsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3RFLE1BQU0sRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyx3REFBYSxNQUFNLEdBQUMsQ0FBQztJQUM5RCxNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLE1BQU0sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBYSxFQUFFLENBQUMsQ0FBQztJQUNoRixJQUFJLENBQUM7UUFDSCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtZQUMvQyxNQUFNO1lBQ04sUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1NBQzVCLENBQUMsQ0FBQztRQUNILE9BQU8sT0FBa0MsQ0FBQztJQUM1QyxDQUFDO0lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSw0QkFBbUIsQ0FBQyxrQ0FBa0MsRUFBRSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7QUFDSCxDQUFDO0FBRUQsdUNBQXVDO0FBQ3ZDLFNBQWdCLGVBQWU7SUFDN0IsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3BCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRoZW50aWNhdGlvbkVycm9yLCBDb25maWdFcnJvciwgUGxhdGZvcm1FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5pbXBvcnQgeyBnZXRJc3N1ZXIgfSBmcm9tICcuL2lzc3Vlcic7XG5cbmludGVyZmFjZSBKd2tzRG9jIHtcbiAga2V5czogQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+O1xufVxuXG4vKipcbiAqIENhY2hlIG9mIEpXS1MgZG9jdW1lbnRzIGtleWVkIGJ5IGlzc3VlciBVUkwuIExhbWJkYS1zdHlsZTogY2xlYXJlZFxuICogb24gY29sZCBzdGFydCwgcmV1c2VkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuIDUtbWludXRlXG4gKiBzdGFsZW5lc3MgaXMgcGxlbnR5OiB3aGVuIGEga2V5IGlzIHJvdGF0ZWQgdGhlIGF1dGggc2VydmVyIGtlZXBzXG4gKiBwdWJsaXNoaW5nIGJvdGggb2xkICsgbmV3IGZvciB0aGUgYWNjZXNzLXRva2VuIFRUTCB3aW5kb3csIHNvIHRoZVxuICogU0RLJ3Mgc2xpZ2h0bHkgc3RhbGUgdmlldyBuZXZlciBjYXVzZXMgYSB2ZXJpZmljYXRpb24gbWlzcy5cbiAqL1xuY29uc3Qgandrc0NhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHsgZG9jOiBKd2tzRG9jOyBjYWNoZWRBdDogbnVtYmVyIH0+KCk7XG5jb25zdCBKV0tTX1RUTF9NUyA9IDUgKiA2MCAqIDEwMDA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEp3a3MoaXNzdWVyOiBzdHJpbmcpOiBQcm9taXNlPEp3a3NEb2M+IHtcbiAgY29uc3QgY2FjaGVkID0gandrc0NhY2hlLmdldChpc3N1ZXIpO1xuICBpZiAoY2FjaGVkICYmIERhdGUubm93KCkgLSBjYWNoZWQuY2FjaGVkQXQgPCBKV0tTX1RUTF9NUykgcmV0dXJuIGNhY2hlZC5kb2M7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2lzc3Vlcn0vandrcy5qc29uYCk7XG4gIGlmICghcmVzLm9rKVxuICAgIHRocm93IG5ldyBQbGF0Zm9ybUVycm9yKGBKV0tTIGZldGNoIGZhaWxlZDogSFRUUCAke3Jlcy5zdGF0dXN9YCwgeyBzdGF0dXM6IHJlcy5zdGF0dXMgfSk7XG4gIGNvbnN0IGRvYyA9IChhd2FpdCByZXMuanNvbigpKSBhcyBKd2tzRG9jO1xuICBqd2tzQ2FjaGUuc2V0KGlzc3VlciwgeyBkb2MsIGNhY2hlZEF0OiBEYXRlLm5vdygpIH0pO1xuICByZXR1cm4gZG9jO1xufVxuXG4vKipcbiAqIFZlcmlmeSBhbiBhY2Nlc3MgdG9rZW46IGZldGNoZXMgSldLUyBiYXNlZCBvbiB0aGUgdG9rZW4ncyBgaXNzYCxcbiAqIHZlcmlmaWVzIHRoZSBSU0Egc2lnbmF0dXJlLCBhbmQgcmV0dXJucyB0aGUgY2xhaW1zLiBUaHJvd3Mgb24gYW55XG4gKiBmYWlsdXJlIHNvIGNhbGxlcnMgY2FuIGB0cnkvY2F0Y2hgIG9uY2UgaW5zdGVhZCBvZiBicmFuY2hpbmcgb24gYVxuICogYm9vbGVhbi5cbiAqXG4gKiBUaGUgdmVyaWZpY2F0aW9uIGl0c2VsZiBoYXBwZW5zIHZpYSBgam9zZWAncyBgand0VmVyaWZ5YCwgYnV0IHRvXG4gKiBrZWVwIHRoaXMgbW9kdWxlIGxpZ2h0d2VpZ2h0IChhbmQgdG8gYXZvaWQgcHVsbGluZyBqb3NlIGludG8gdGhlXG4gKiBCcm93c2VyIGJ1bmRsZSB3aGVuIGNvbnN1bWVycyBvbmx5IHdhbnQgdGhlIFVSTCBoZWxwZXJzKSB3ZVxuICogZHluYW1pYy1pbXBvcnQgaXQuIFRyZWUtc2hha2VycyB3aWxsIGRyb3AgdGhlIGltcG9ydCBmb3IgY29kZSBwYXRoc1xuICogdGhhdCBuZXZlciBjYWxsIGB2ZXJpZnlBY2Nlc3NUb2tlbmAuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlBY2Nlc3NUb2tlbihcbiAgdG9rZW46IHN0cmluZyxcbiAgb3B0aW9ucz86IHsgYXVkaWVuY2U/OiBzdHJpbmcgfSxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+IHtcbiAgY29uc3QgaXNzdWVyID0gZ2V0SXNzdWVyKHRva2VuKTtcbiAgaWYgKCFpc3N1ZXIpIHRocm93IG5ldyBDb25maWdFcnJvcignYWNjZXNzIHRva2VuIGhhcyBubyBgaXNzYCBjbGFpbScpO1xuICBjb25zdCB7IGp3dFZlcmlmeSwgY3JlYXRlTG9jYWxKV0tTZXQgfSA9IGF3YWl0IGltcG9ydCgnam9zZScpO1xuICBjb25zdCBqd2tzID0gY3JlYXRlTG9jYWxKV0tTZXQoeyBrZXlzOiAoYXdhaXQgZ2V0Sndrcyhpc3N1ZXIpKS5rZXlzIGFzIG5ldmVyIH0pO1xuICB0cnkge1xuICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gYXdhaXQgand0VmVyaWZ5KHRva2VuLCBqd2tzLCB7XG4gICAgICBpc3N1ZXIsXG4gICAgICBhdWRpZW5jZTogb3B0aW9ucz8uYXVkaWVuY2UsXG4gICAgfSk7XG4gICAgcmV0dXJuIHBheWxvYWQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBBdXRoZW50aWNhdGlvbkVycm9yKCdhY2Nlc3MgdG9rZW4gdmVyaWZpY2F0aW9uIGZhaWxlZCcsIHsgY2F1c2U6IGVyciB9KTtcbiAgfVxufVxuXG4vKiogVGVzdC1vbmx5OiBjbGVhciB0aGUgSldLUyBjYWNoZS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfcmVzZXRKd2tzQ2FjaGUoKTogdm9pZCB7XG4gIGp3a3NDYWNoZS5jbGVhcigpO1xufVxuIl19
|
package/dist/business/client.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.BusinessApiError = void 0;
|
|
|
4
4
|
exports.createBusinessClient = createBusinessClient;
|
|
5
5
|
const config_1 = require("../config");
|
|
6
6
|
const http_1 = require("../http");
|
|
7
|
+
const token_source_1 = require("../token-source");
|
|
7
8
|
class BusinessApiError extends Error {
|
|
8
9
|
status;
|
|
9
10
|
body;
|
|
@@ -34,10 +35,10 @@ function createBusinessClient(input = {}) {
|
|
|
34
35
|
const path = `/v1/businesses/${id}`;
|
|
35
36
|
const query = opts.groups?.length ? `?groups=${opts.groups.join(',')}` : '';
|
|
36
37
|
const config = state.resolve();
|
|
37
|
-
const
|
|
38
|
-
const res = await config.fetchFn(`${config.baseUrl}${path}${query}`, {
|
|
38
|
+
const res = await sendWithAuthRetry(config, {
|
|
39
39
|
method: 'GET',
|
|
40
|
-
|
|
40
|
+
path,
|
|
41
|
+
url: `${config.baseUrl}${path}${query}`,
|
|
41
42
|
});
|
|
42
43
|
if (!res.ok) {
|
|
43
44
|
throw new BusinessApiError(res.status, await res.text());
|
|
@@ -58,10 +59,10 @@ function createBusinessClient(input = {}) {
|
|
|
58
59
|
if (opts.groups?.length)
|
|
59
60
|
params.set('groups', opts.groups.join(','));
|
|
60
61
|
const config = state.resolve();
|
|
61
|
-
const
|
|
62
|
-
const res = await config.fetchFn(`${config.baseUrl}${path}?${params.toString()}`, {
|
|
62
|
+
const res = await sendWithAuthRetry(config, {
|
|
63
63
|
method: 'GET',
|
|
64
|
-
|
|
64
|
+
path,
|
|
65
|
+
url: `${config.baseUrl}${path}?${params.toString()}`,
|
|
65
66
|
});
|
|
66
67
|
if (!res.ok) {
|
|
67
68
|
throw new BusinessApiError(res.status, await res.text());
|
|
@@ -71,4 +72,36 @@ function createBusinessClient(input = {}) {
|
|
|
71
72
|
};
|
|
72
73
|
return client;
|
|
73
74
|
}
|
|
74
|
-
|
|
75
|
+
/**
|
|
76
|
+
* Send a request with the SDK's standard 401-retry-once behaviour.
|
|
77
|
+
* Only retries when auth is `token-source`, since that's the case
|
|
78
|
+
* where the cached token may have expired server-side; HMAC and
|
|
79
|
+
* static bearer 401s mean the auth is misconfigured and a retry
|
|
80
|
+
* would just fail again.
|
|
81
|
+
*/
|
|
82
|
+
async function sendWithAuthRetry(config, params) {
|
|
83
|
+
const headers = await (0, http_1.buildHeaders)(config, {
|
|
84
|
+
method: params.method,
|
|
85
|
+
path: params.path,
|
|
86
|
+
body: params.body,
|
|
87
|
+
});
|
|
88
|
+
const res = await config.fetchFn(params.url, {
|
|
89
|
+
method: params.method,
|
|
90
|
+
headers,
|
|
91
|
+
body: params.body,
|
|
92
|
+
});
|
|
93
|
+
if (res.status !== 401 || config.auth?.type !== 'token-source')
|
|
94
|
+
return res;
|
|
95
|
+
(0, token_source_1.invalidateToken)(config.auth.state);
|
|
96
|
+
const retryHeaders = await (0, http_1.buildHeaders)(config, {
|
|
97
|
+
method: params.method,
|
|
98
|
+
path: params.path,
|
|
99
|
+
body: params.body,
|
|
100
|
+
});
|
|
101
|
+
return config.fetchFn(params.url, {
|
|
102
|
+
method: params.method,
|
|
103
|
+
headers: retryHeaders,
|
|
104
|
+
body: params.body,
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1c2luZXNzL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFvQ0Esb0RBd0RDO0FBNUZELHNDQU1tQjtBQUNuQixrQ0FBdUM7QUFDdkMsa0RBQWtEO0FBZ0JsRCxNQUFhLGdCQUFpQixTQUFRLEtBQUs7SUFDaEMsTUFBTSxDQUFTO0lBQ2YsSUFBSSxDQUFTO0lBRXRCLFlBQVksTUFBYyxFQUFFLElBQVk7UUFDdEMsS0FBSyxDQUFDLGdCQUFnQixNQUFNLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSSxHQUFHLGtCQUFrQixDQUFDO1FBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7Q0FDRjtBQVZELDRDQVVDO0FBRUQsU0FBZ0Isb0JBQW9CLENBQUMsUUFBNkIsRUFBRTtJQUNsRSxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5CLE1BQU0sTUFBTSxHQUFtQjtRQUM3QixNQUFNLENBQUMsSUFBSTtZQUNULEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJO1lBQ1AsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNwQixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsSUFBSSxHQUFHLEVBQUU7WUFDckIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNy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O1FBQ3pDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7UUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztJQUNILE1BQU0sR0FBRyxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQzNDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtRQUNyQixPQUFPO1FBQ1AsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztJQUNILElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEtBQUssY0FBYztRQUFFLE9BQU8sR0FBRyxDQUFDO0lBQzNFLElBQUEsOEJBQWUsRUFBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLE1BQU0sWUFBWSxHQUFHLE1BQU0sSUFBQSxtQkFBWSxFQUFDLE1BQU0sRUFBRTtRQUM5QyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1FBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtLQUNsQixDQUFDLENBQUM7SUFDSCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNoQyxNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07UUFDckIsT0FBTyxFQUFFLFlBQVk7UUFDckIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO0tBQ2xCLENBQUMsQ0FBQztBQUNMLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25maWdTdGF0ZSxcbiAgdHlwZSBQbGF0Zm9ybUF1dGgsXG4gIHR5cGUgUGxhdGZvcm1BdXRoSW5wdXQsXG4gIHR5cGUgUGxhdGZvcm1Db25maWcsXG4gIHR5cGUgUGxhdGZvcm1Db25maWdJbnB1dCxcbn0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGJ1aWxkSGVhZGVycyB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgaW52YWxpZGF0ZVRva2VuIH0gZnJvbSAnLi4vdG9rZW4tc291cmNlJztcbmltcG9ydCB0eXBlIHsgQnVzaW5lc3NHcm91cE5hbWUsIEJ1c2luZXNzUmVjb3JkIH0gZnJvbSAnLi9zY2hlbWEnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJ1c2luZXNzR2V0T3B0aW9ucyB7XG4gIGdyb3Vwcz86IHJlYWRvbmx5IEJ1c2luZXNzR3JvdXBOYW1lW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQnVzaW5lc3NDbGllbnQge1xuICBjb25maWcoaW5wdXQ6IFBsYXRmb3JtQ29uZmlnSW5wdXQpOiBCdXNpbmVzc0NsaWVudDtcbiAgYXV0aChpbnB1dDogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGgpOiBCdXNpbmVzc0NsaWVudDtcbiAgLyoqIEdFVCAvdjEvYnVzaW5lc3Nlcy86aWQgLSByZXR1cm5zIHRoZSByZWNvcmQgb3IgdGhyb3dzIEJ1c2luZXNzQXBpRXJyb3IuICovXG4gIGdldChpZDogbnVtYmVyLCBvcHRzPzogQnVzaW5lc3NHZXRPcHRpb25zKTogUHJvbWlzZTxCdXNpbmVzc1JlY29yZD47XG4gIC8qKiBHRVQgL3YxL2J1c2luZXNzZXM/aWRzPSAtIHJldHVybnMgbWF0Y2hlZCByZWNvcmRzIChtaXNzaW5nIGlkcyBkcm9wcGVkKS4gKi9cbiAgYnVsayhpZHM6IHJlYWRvbmx5IG51bWJlcltdLCBvcHRzPzogQnVzaW5lc3NHZXRPcHRpb25zKTogUHJvbWlzZTxCdXNpbmVzc1JlY29yZFtdPjtcbn1cblxuZXhwb3J0IGNsYXNzIEJ1c2luZXNzQXBpRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyO1xuICByZWFkb25seSBib2R5OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc3RhdHVzOiBudW1iZXIsIGJvZHk6IHN0cmluZykge1xuICAgIHN1cGVyKGBidXNpbmVzcyBBUEkgJHtzdGF0dXN9OiAke2JvZHl9YCk7XG4gICAgdGhpcy5uYW1lID0gJ0J1c2luZXNzQXBpRXJyb3InO1xuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgIHRoaXMuYm9keSA9IGJvZHk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJ1c2luZXNzQ2xpZW50KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0ID0ge30pOiBCdXNpbmVzc0NsaWVudCB7XG4gIGNvbnN0IHN0YXRlID0gbmV3IENvbmZpZ1N0YXRlKCk7XG4gIHN0YXRlLmFwcGx5KGlucHV0KTtcblxuICBjb25zdCBjbGllbnQ6IEJ1c2luZXNzQ2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG4gICAgYXN5bmMgZ2V0KGlkLCBvcHRzID0ge30pIHtcbiAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihpZCkgfHwgaWQgPD0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJ1c2luZXNzLmdldDogaWQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdCAke2lkfSlgKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhdGggPSBgL3YxL2J1c2luZXNzZXMvJHtpZH1gO1xuICAgICAgY29uc3QgcXVlcnkgPSBvcHRzLmdyb3Vwcz8ubGVuZ3RoID8gYD9ncm91cHM9JHtvcHRzLmdyb3Vwcy5qb2luKCcsJyl9YCA6ICcnO1xuICAgICAgY29uc3QgY29uZmlnID0gc3RhdGUucmVzb2x2ZSgpO1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgc2VuZFdpdGhBdXRoUmV0cnkoY29uZmlnLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIHVybDogYCR7Y29uZmlnLmJhc2VVcmx9JHtwYXRofSR7cXVlcnl9YCxcbiAgICAgIH0pO1xuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEJ1c2luZXNzQXBpRXJyb3IocmVzLnN0YXR1cywgYXdhaXQgcmVzLnRleHQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEJ1c2luZXNzUmVjb3JkO1xuICAgIH0sXG4gICAgYXN5bmMgYnVsayhpZHMsIG9wdHMgPSB7fSkge1xuICAgICAgaWYgKGlkcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdidXNpbmVzcy5idWxrOiBpZHMgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbiBvZiBpZHMpIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG4pIHx8IG4gPD0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgYnVzaW5lc3MuYnVsazogZXZlcnkgaWQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKGdvdCAke259KWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBwYXRoID0gJy92MS9idXNpbmVzc2VzJztcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoeyBpZHM6IGlkcy5qb2luKCcsJykgfSk7XG4gICAgICBpZiAob3B0cy5ncm91cHM/Lmxlbmd0aCkgcGFyYW1zLnNldCgnZ3JvdXBzJywgb3B0cy5ncm91cHMuam9pbignLCcpKTtcbiAgICAgIGNvbnN0IGNvbmZpZyA9IHN0YXRlLnJlc29sdmUoKTtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHNlbmRXaXRoQXV0aFJldHJ5KGNvbmZpZywge1xuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICBwYXRoLFxuICAgICAgICB1cmw6IGAke2NvbmZpZy5iYXNlVXJsfSR7cGF0aH0/JHtwYXJhbXMudG9TdHJpbmcoKX1gLFxuICAgICAgfSk7XG4gICAgICBpZiAoIXJlcy5vaykge1xuICAgICAgICB0aHJvdyBuZXcgQnVzaW5lc3NBcGlFcnJvcihyZXMuc3RhdHVzLCBhd2FpdCByZXMudGV4dCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoYXdhaXQgcmVzLmpzb24oKSkgYXMgQnVzaW5lc3NSZWNvcmRbXTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBjbGllbnQ7XG59XG5cbi8qKlxuICogU2VuZCBhIHJlcXVlc3Qgd2l0aCB0aGUgU0RLJ3Mgc3RhbmRhcmQgNDAxLXJldHJ5LW9uY2UgYmVoYXZpb3VyLlxuICogT25seSByZXRyaWVzIHdoZW4gYXV0aCBpcyBgdG9rZW4tc291cmNlYCwgc2luY2UgdGhhdCdzIHRoZSBjYXNlXG4gKiB3aGVyZSB0aGUgY2FjaGVkIHRva2VuIG1heSBoYXZlIGV4cGlyZWQgc2VydmVyLXNpZGU7IEhNQUMgYW5kXG4gKiBzdGF0aWMgYmVhcmVyIDQwMXMgbWVhbiB0aGUgYXV0aCBpcyBtaXNjb25maWd1cmVkIGFuZCBhIHJldHJ5XG4gKiB3b3VsZCBqdXN0IGZhaWwgYWdhaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlbmRXaXRoQXV0aFJldHJ5KFxuICBjb25maWc6IFBsYXRmb3JtQ29uZmlnLFxuICBwYXJhbXM6IHsgbWV0aG9kOiBzdHJpbmc7IHBhdGg6IHN0cmluZzsgdXJsOiBzdHJpbmc7IGJvZHk/OiBzdHJpbmcgfSxcbik6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgY29uc3QgaGVhZGVycyA9IGF3YWl0IGJ1aWxkSGVhZGVycyhjb25maWcsIHtcbiAgICBtZXRob2Q6IHBhcmFtcy5tZXRob2QsXG4gICAgcGF0aDogcGFyYW1zLnBhdGgsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICBjb25zdCByZXMgPSBhd2FpdCBjb25maWcuZmV0Y2hGbihwYXJhbXMudXJsLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIGhlYWRlcnMsXG4gICAgYm9keTogcGFyYW1zLmJvZHksXG4gIH0pO1xuICBpZiAocmVzLnN0YXR1cyAhPT0gNDAxIHx8IGNvbmZpZy5hdXRoPy50eXBlICE9PSAndG9rZW4tc291cmNlJykgcmV0dXJuIHJlcztcbiAgaW52YWxpZGF0ZVRva2VuKGNvbmZpZy5hdXRoLnN0YXRlKTtcbiAgY29uc3QgcmV0cnlIZWFkZXJzID0gYXdhaXQgYnVpbGRIZWFkZXJzKGNvbmZpZywge1xuICAgIG1ldGhvZDogcGFyYW1zLm1ldGhvZCxcbiAgICBwYXRoOiBwYXJhbXMucGF0aCxcbiAgICBib2R5OiBwYXJhbXMuYm9keSxcbiAgfSk7XG4gIHJldHVybiBjb25maWcuZmV0Y2hGbihwYXJhbXMudXJsLCB7XG4gICAgbWV0aG9kOiBwYXJhbXMubWV0aG9kLFxuICAgIGhlYWRlcnM6IHJldHJ5SGVhZGVycyxcbiAgICBib2R5OiBwYXJhbXMuYm9keSxcbiAgfSk7XG59XG4iXX0=
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { type AuditClient } from './audit/client';
|
|
2
|
+
import { type BusinessClient } from './business/client';
|
|
3
|
+
import { auth } from './auth';
|
|
4
|
+
/**
|
|
5
|
+
* Caller-facing config for the unified `createClient(...)` factory and
|
|
6
|
+
* the `platform` singleton.
|
|
7
|
+
*
|
|
8
|
+
* Pick exactly one of:
|
|
9
|
+
* - `accessToken` (string or callback) for the static Bearer flow
|
|
10
|
+
* - `serviceId` + `serviceSecret` for OAuth2 client_credentials
|
|
11
|
+
*
|
|
12
|
+
* Without either, calls throw `ConfigError` on the first request.
|
|
13
|
+
*/
|
|
14
|
+
export interface ClientConfig {
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Auth surface base used to bootstrap the first client_credentials
|
|
18
|
+
* mint. Defaults to `${baseUrl}/auth/business`. Once a token exists,
|
|
19
|
+
* future auth calls follow the token's `iss` claim.
|
|
20
|
+
*/
|
|
21
|
+
authBaseUrl?: string;
|
|
22
|
+
accessToken?: string | (() => string | Promise<string>);
|
|
23
|
+
serviceId?: string;
|
|
24
|
+
serviceSecret?: string;
|
|
25
|
+
/** Space-separated scope list to request when minting via client_credentials. */
|
|
26
|
+
scope?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Service identifier the audit client should stamp into `actor.via`
|
|
29
|
+
* on emitted events. Defaults to `serviceId` when set; otherwise
|
|
30
|
+
* audit `record()` calls log an error and drop the event.
|
|
31
|
+
*/
|
|
32
|
+
actorVia?: string;
|
|
33
|
+
expiryBufferMs?: number;
|
|
34
|
+
fetchFn?: typeof fetch;
|
|
35
|
+
}
|
|
36
|
+
export interface PlatformClient {
|
|
37
|
+
business: BusinessClient;
|
|
38
|
+
audit: AuditClient;
|
|
39
|
+
auth: typeof auth;
|
|
40
|
+
/**
|
|
41
|
+
* Return a derived client bound to the supplied access token.
|
|
42
|
+
* Inherits `baseUrl` and `fetchFn`; replaces the token source with
|
|
43
|
+
* the new one. Use case: BFF handlers that want to call the
|
|
44
|
+
* platform API as the end user instead of as the service.
|
|
45
|
+
*/
|
|
46
|
+
withToken(token: string | (() => string | Promise<string>)): PlatformClient;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Build a fresh, isolated client from explicit config. Each call
|
|
50
|
+
* gets its own TokenSource state — concurrent `createClient(...)` use
|
|
51
|
+
* does not stampede the cache.
|
|
52
|
+
*/
|
|
53
|
+
export declare function createClient(input?: ClientConfig): PlatformClient;
|
|
54
|
+
/**
|
|
55
|
+
* Default client. Reads config from environment variables on first
|
|
56
|
+
* property access (so test setups that mutate `process.env` after
|
|
57
|
+
* import work). Use `createClient(...)` when you need an isolated
|
|
58
|
+
* instance with explicit config.
|
|
59
|
+
*
|
|
60
|
+
* UENGAGE_BASE_URL defaults to https://api.platform.uengage.io
|
|
61
|
+
* UENGAGE_AUTH_BASE_URL auth surface override (default ${baseUrl}/auth/business)
|
|
62
|
+
* UENGAGE_AUTH_TOKEN static Bearer token (overrides client_credentials)
|
|
63
|
+
* UENGAGE_SERVICE_ID OAuth2 client_credentials clientId
|
|
64
|
+
* UENGAGE_SERVICE_SECRET OAuth2 client_credentials clientSecret
|
|
65
|
+
* UENGAGE_SERVICE_SCOPE optional space-separated scope list
|
|
66
|
+
*/
|
|
67
|
+
export declare const platform: PlatformClient;
|
|
68
|
+
/** Test-only: drop the singleton cache between cases. */
|
|
69
|
+
export declare function _resetPlatformSingleton(): void;
|
|
70
|
+
/**
|
|
71
|
+
* Convenience: shorthand for `platform.withToken(token)`.
|
|
72
|
+
* BFF handlers commonly call this once per request.
|
|
73
|
+
*/
|
|
74
|
+
export declare function withToken(token: string | (() => string | Promise<string>)): PlatformClient;
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.platform = void 0;
|
|
4
|
+
exports.createClient = createClient;
|
|
5
|
+
exports._resetPlatformSingleton = _resetPlatformSingleton;
|
|
6
|
+
exports.withToken = withToken;
|
|
7
|
+
const client_1 = require("./audit/client");
|
|
8
|
+
const client_2 = require("./business/client");
|
|
9
|
+
const token_source_1 = require("./token-source");
|
|
10
|
+
const DEFAULT_BASE_URL = 'https://api.platform.uengage.io';
|
|
11
|
+
/**
|
|
12
|
+
* Build a fresh, isolated client from explicit config. Each call
|
|
13
|
+
* gets its own TokenSource state — concurrent `createClient(...)` use
|
|
14
|
+
* does not stampede the cache.
|
|
15
|
+
*/
|
|
16
|
+
function createClient(input = {}) {
|
|
17
|
+
warnIfBrowserSecret(input);
|
|
18
|
+
return buildClient(input);
|
|
19
|
+
}
|
|
20
|
+
function buildClient(input) {
|
|
21
|
+
const baseUrl = input.baseUrl ?? DEFAULT_BASE_URL;
|
|
22
|
+
const tokenSourceState = resolveTokenSource(input, baseUrl);
|
|
23
|
+
const auth = tokenSourceState
|
|
24
|
+
? { type: 'token-source', state: tokenSourceState }
|
|
25
|
+
: undefined;
|
|
26
|
+
const businessClient = (0, client_2.createBusinessClient)({ baseUrl, fetchFn: input.fetchFn, auth });
|
|
27
|
+
const auditClient = (0, client_1.createAuditClient)({
|
|
28
|
+
baseUrl,
|
|
29
|
+
fetchFn: input.fetchFn,
|
|
30
|
+
auth,
|
|
31
|
+
actorVia: input.actorVia ?? input.serviceId,
|
|
32
|
+
});
|
|
33
|
+
const client = {
|
|
34
|
+
business: businessClient,
|
|
35
|
+
audit: auditClient,
|
|
36
|
+
auth: auth_1.auth,
|
|
37
|
+
withToken(token) {
|
|
38
|
+
return buildClient({
|
|
39
|
+
...input,
|
|
40
|
+
accessToken: token,
|
|
41
|
+
// The new client should not also try to mint via
|
|
42
|
+
// client_credentials on top of the supplied user token.
|
|
43
|
+
serviceId: undefined,
|
|
44
|
+
serviceSecret: undefined,
|
|
45
|
+
scope: undefined,
|
|
46
|
+
});
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
return client;
|
|
50
|
+
}
|
|
51
|
+
const auth_1 = require("./auth");
|
|
52
|
+
function resolveTokenSource(input, baseUrl) {
|
|
53
|
+
const authBaseUrl = input.authBaseUrl ?? `${baseUrl}/auth/business`;
|
|
54
|
+
if (input.accessToken !== undefined) {
|
|
55
|
+
if (typeof input.accessToken === 'string') {
|
|
56
|
+
return (0, token_source_1.makeTokenSourceState)({ kind: 'static-string', token: input.accessToken }, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
|
|
57
|
+
}
|
|
58
|
+
return (0, token_source_1.makeTokenSourceState)({ kind: 'callback', getToken: input.accessToken }, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
|
|
59
|
+
}
|
|
60
|
+
if (input.serviceId && input.serviceSecret) {
|
|
61
|
+
return (0, token_source_1.makeTokenSourceState)({
|
|
62
|
+
kind: 'service-credentials',
|
|
63
|
+
clientId: input.serviceId,
|
|
64
|
+
clientSecret: input.serviceSecret,
|
|
65
|
+
authBaseUrl,
|
|
66
|
+
scope: input.scope,
|
|
67
|
+
}, { expiryBufferMs: input.expiryBufferMs, fetchFn: input.fetchFn });
|
|
68
|
+
}
|
|
69
|
+
return undefined;
|
|
70
|
+
}
|
|
71
|
+
function warnIfBrowserSecret(config) {
|
|
72
|
+
const g = globalThis;
|
|
73
|
+
const inBrowser = typeof g.window !== 'undefined' && typeof g.window.document !== 'undefined';
|
|
74
|
+
if (!inBrowser)
|
|
75
|
+
return;
|
|
76
|
+
if (config.serviceSecret) {
|
|
77
|
+
console.warn('[uengage-platform-sdk] serviceSecret should not be used in browser environments. ' +
|
|
78
|
+
'Service credentials in browser bundles are publicly visible. ' +
|
|
79
|
+
'Use `accessToken` with a token obtained via OAuth (or `withToken(...)` on a server-built client) instead.');
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// ─── Default singleton ─────────────────────────────────────────────────────
|
|
83
|
+
//
|
|
84
|
+
// Resolved lazily on first property access (Proxy) so consumers that
|
|
85
|
+
// mutate `process.env` after import still pick up the right values.
|
|
86
|
+
let cachedSingleton;
|
|
87
|
+
function singleton() {
|
|
88
|
+
if (!cachedSingleton)
|
|
89
|
+
cachedSingleton = buildClient(envClientConfig());
|
|
90
|
+
return cachedSingleton;
|
|
91
|
+
}
|
|
92
|
+
function envClientConfig() {
|
|
93
|
+
if (typeof process === 'undefined')
|
|
94
|
+
return {};
|
|
95
|
+
const e = process.env ?? {};
|
|
96
|
+
return {
|
|
97
|
+
baseUrl: e.UENGAGE_BASE_URL,
|
|
98
|
+
authBaseUrl: e.UENGAGE_AUTH_BASE_URL,
|
|
99
|
+
accessToken: e.UENGAGE_AUTH_TOKEN,
|
|
100
|
+
serviceId: e.UENGAGE_SERVICE_ID,
|
|
101
|
+
serviceSecret: e.UENGAGE_SERVICE_SECRET,
|
|
102
|
+
scope: e.UENGAGE_SERVICE_SCOPE,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Default client. Reads config from environment variables on first
|
|
107
|
+
* property access (so test setups that mutate `process.env` after
|
|
108
|
+
* import work). Use `createClient(...)` when you need an isolated
|
|
109
|
+
* instance with explicit config.
|
|
110
|
+
*
|
|
111
|
+
* UENGAGE_BASE_URL defaults to https://api.platform.uengage.io
|
|
112
|
+
* UENGAGE_AUTH_BASE_URL auth surface override (default ${baseUrl}/auth/business)
|
|
113
|
+
* UENGAGE_AUTH_TOKEN static Bearer token (overrides client_credentials)
|
|
114
|
+
* UENGAGE_SERVICE_ID OAuth2 client_credentials clientId
|
|
115
|
+
* UENGAGE_SERVICE_SECRET OAuth2 client_credentials clientSecret
|
|
116
|
+
* UENGAGE_SERVICE_SCOPE optional space-separated scope list
|
|
117
|
+
*/
|
|
118
|
+
exports.platform = new Proxy({}, {
|
|
119
|
+
get(_, prop) {
|
|
120
|
+
const s = singleton();
|
|
121
|
+
return s[prop];
|
|
122
|
+
},
|
|
123
|
+
});
|
|
124
|
+
/** Test-only: drop the singleton cache between cases. */
|
|
125
|
+
function _resetPlatformSingleton() {
|
|
126
|
+
cachedSingleton = undefined;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Convenience: shorthand for `platform.withToken(token)`.
|
|
130
|
+
* BFF handlers commonly call this once per request.
|
|
131
|
+
*/
|
|
132
|
+
function withToken(token) {
|
|
133
|
+
return singleton().withToken(token);
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUEyREEsb0NBR0M7QUE2SEQsMERBRUM7QUFNRCw4QkFFQztBQXJNRCwyQ0FBcUU7QUFDckUsOENBQThFO0FBRTlFLGlEQUE2RTtBQWlEN0UsTUFBTSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQUUzRDs7OztHQUlHO0FBQ0gsU0FBZ0IsWUFBWSxDQUFDLFFBQXNCLEVBQUU7SUFDbkQsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDNUIsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLEtBQW1CO0lBQ3RDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLElBQUksZ0JBQWdCLENBQUM7SUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDNUQsTUFBTSxJQUFJLEdBQTZCLGdCQUFnQjtRQUNyRCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtRQUNuRCxDQUFDLENBQUMsU0FBUyxDQUFDO0lBRWQsTUFBTSxjQUFjLEdBQUcsSUFBQSw2QkFBb0IsRUFBQyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLE1BQU0sV0FBVyxHQUFHLElBQUEsMEJBQWlCLEVBQUM7UUFDcEMsT0FBTztRQUNQLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztRQUN0QixJQUFJO1FBQ0osUUFBUSxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFNBQVM7S0FDNUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxNQUFNLEdBQW1CO1FBQzdCLFFBQVEsRUFBRSxjQUFjO1FB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QUM5RSxPQUFPO1FBQ0wsT0FBTyxFQUFFLENBQUMsQ0FBQyxnQkFBZ0I7UUFDM0IsV0FBVyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7UUFDcEMsV0FBVyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7UUFDakMsU0FBUyxFQUFFLENBQUMsQ0FBQyxrQkFBa0I7UUFDL0IsYUFBYSxFQUFFLENBQUMsQ0FBQyxzQkFBc0I7UUFDdkMsS0FBSyxFQUFFLENBQUMsQ0FBQyxxQkFBcUI7S0FDL0IsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDVSxRQUFBLFFBQVEsR0FBbUIsSUFBSSxLQUFLLENBQUMsRUFBb0IsRUFBRTtJQUN0RSxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUk7UUFDVCxNQUFNLENBQUMsR0FBRyxTQUFTLEVBQTZDLENBQUM7UUFDakUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakIsQ0FBQztDQUNGLENBQUMsQ0FBQztBQUVILHlEQUF5RDtBQUN6RCxTQUFnQix1QkFBdUI7SUFDckMsZUFBZSxHQUFHLFNBQVMsQ0FBQztBQUM5QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBZ0IsU0FBUyxDQUFDLEtBQWdEO0lBQ3hFLE9BQU8sU0FBUyxFQUFFLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVBdWRpdENsaWVudCwgdHlwZSBBdWRpdENsaWVudCB9IGZyb20gJy4vYXVkaXQvY2xpZW50JztcbmltcG9ydCB7IGNyZWF0ZUJ1c2luZXNzQ2xpZW50LCB0eXBlIEJ1c2luZXNzQ2xpZW50IH0gZnJvbSAnLi9idXNpbmVzcy9jbGllbnQnO1xuaW1wb3J0IHsgYXV0aCB9IGZyb20gJy4vYXV0aCc7XG5pbXBvcnQgeyBtYWtlVG9rZW5Tb3VyY2VTdGF0ZSwgdHlwZSBUb2tlblNvdXJjZVN0YXRlIH0gZnJvbSAnLi90b2tlbi1zb3VyY2UnO1xuaW1wb3J0IHR5cGUgeyBQbGF0Zm9ybUF1dGggfSBmcm9tICcuL2NvbmZpZyc7XG5cbi8qKlxuICogQ2FsbGVyLWZhY2luZyBjb25maWcgZm9yIHRoZSB1bmlmaWVkIGBjcmVhdGVDbGllbnQoLi4uKWAgZmFjdG9yeSBhbmRcbiAqIHRoZSBgcGxhdGZvcm1gIHNpbmdsZXRvbi5cbiAqXG4gKiBQaWNrIGV4YWN0bHkgb25lIG9mOlxuICogICAtIGBhY2Nlc3NUb2tlbmAgKHN0cmluZyBvciBjYWxsYmFjaykgZm9yIHRoZSBzdGF0aWMgQmVhcmVyIGZsb3dcbiAqICAgLSBgc2VydmljZUlkYCArIGBzZXJ2aWNlU2VjcmV0YCBmb3IgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFsc1xuICpcbiAqIFdpdGhvdXQgZWl0aGVyLCBjYWxscyB0aHJvdyBgQ29uZmlnRXJyb3JgIG9uIHRoZSBmaXJzdCByZXF1ZXN0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsaWVudENvbmZpZyB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBdXRoIHN1cmZhY2UgYmFzZSB1c2VkIHRvIGJvb3RzdHJhcCB0aGUgZmlyc3QgY2xpZW50X2NyZWRlbnRpYWxzXG4gICAqIG1pbnQuIERlZmF1bHRzIHRvIGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgLiBPbmNlIGEgdG9rZW4gZXhpc3RzLFxuICAgKiBmdXR1cmUgYXV0aCBjYWxscyBmb2xsb3cgdGhlIHRva2VuJ3MgYGlzc2AgY2xhaW0uXG4gICAqL1xuICBhdXRoQmFzZVVybD86IHN0cmluZztcbiAgYWNjZXNzVG9rZW4/OiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTtcbiAgc2VydmljZUlkPzogc3RyaW5nO1xuICBzZXJ2aWNlU2VjcmV0Pzogc3RyaW5nO1xuICAvKiogU3BhY2Utc2VwYXJhdGVkIHNjb3BlIGxpc3QgdG8gcmVxdWVzdCB3aGVuIG1pbnRpbmcgdmlhIGNsaWVudF9jcmVkZW50aWFscy4gKi9cbiAgc2NvcGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBTZXJ2aWNlIGlkZW50aWZpZXIgdGhlIGF1ZGl0IGNsaWVudCBzaG91bGQgc3RhbXAgaW50byBgYWN0b3IudmlhYFxuICAgKiBvbiBlbWl0dGVkIGV2ZW50cy4gRGVmYXVsdHMgdG8gYHNlcnZpY2VJZGAgd2hlbiBzZXQ7IG90aGVyd2lzZVxuICAgKiBhdWRpdCBgcmVjb3JkKClgIGNhbGxzIGxvZyBhbiBlcnJvciBhbmQgZHJvcCB0aGUgZXZlbnQuXG4gICAqL1xuICBhY3RvclZpYT86IHN0cmluZztcbiAgZXhwaXJ5QnVmZmVyTXM/OiBudW1iZXI7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1DbGllbnQge1xuICBidXNpbmVzczogQnVzaW5lc3NDbGllbnQ7XG4gIGF1ZGl0OiBBdWRpdENsaWVudDtcbiAgYXV0aDogdHlwZW9mIGF1dGg7XG4gIC8qKlxuICAgKiBSZXR1cm4gYSBkZXJpdmVkIGNsaWVudCBib3VuZCB0byB0aGUgc3VwcGxpZWQgYWNjZXNzIHRva2VuLlxuICAgKiBJbmhlcml0cyBgYmFzZVVybGAgYW5kIGBmZXRjaEZuYDsgcmVwbGFjZXMgdGhlIHRva2VuIHNvdXJjZSB3aXRoXG4gICAqIHRoZSBuZXcgb25lLiBVc2UgY2FzZTogQkZGIGhhbmRsZXJzIHRoYXQgd2FudCB0byBjYWxsIHRoZVxuICAgKiBwbGF0Zm9ybSBBUEkgYXMgdGhlIGVuZCB1c2VyIGluc3RlYWQgb2YgYXMgdGhlIHNlcnZpY2UuXG4gICAqL1xuICB3aXRoVG9rZW4odG9rZW46IHN0cmluZyB8ICgoKSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4pKTogUGxhdGZvcm1DbGllbnQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQkFTRV9VUkwgPSAnaHR0cHM6Ly9hcGkucGxhdGZvcm0udWVuZ2FnZS5pbyc7XG5cbi8qKlxuICogQnVpbGQgYSBmcmVzaCwgaXNvbGF0ZWQgY2xpZW50IGZyb20gZXhwbGljaXQgY29uZmlnLiBFYWNoIGNhbGxcbiAqIGdldHMgaXRzIG93biBUb2tlblNvdXJjZSBzdGF0ZSDigJQgY29uY3VycmVudCBgY3JlYXRlQ2xpZW50KC4uLilgIHVzZVxuICogZG9lcyBub3Qgc3RhbXBlZGUgdGhlIGNhY2hlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcgPSB7fSk6IFBsYXRmb3JtQ2xpZW50IHtcbiAgd2FybklmQnJvd3NlclNlY3JldChpbnB1dCk7XG4gIHJldHVybiBidWlsZENsaWVudChpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ2xpZW50KGlucHV0OiBDbGllbnRDb25maWcpOiBQbGF0Zm9ybUNsaWVudCB7XG4gIGNvbnN0IGJhc2VVcmwgPSBpbnB1dC5iYXNlVXJsID8/IERFRkFVTFRfQkFTRV9VUkw7XG4gIGNvbnN0IHRva2VuU291cmNlU3RhdGUgPSByZXNvbHZlVG9rZW5Tb3VyY2UoaW5wdXQsIGJhc2VVcmwpO1xuICBjb25zdCBhdXRoOiBQbGF0Zm9ybUF1dGggfCB1bmRlZmluZWQgPSB0b2tlblNvdXJjZVN0YXRlXG4gICAgPyB7IHR5cGU6ICd0b2tlbi1zb3VyY2UnLCBzdGF0ZTogdG9rZW5Tb3VyY2VTdGF0ZSB9XG4gICAgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgYnVzaW5lc3NDbGllbnQgPSBjcmVhdGVCdXNpbmVzc0NsaWVudCh7IGJhc2VVcmwsIGZldGNoRm46IGlucHV0LmZldGNoRm4sIGF1dGggfSk7XG4gIGNvbnN0IGF1ZGl0Q2xpZW50ID0gY3JlYXRlQXVkaXRDbGllbnQoe1xuICAgIGJhc2VVcmwsXG4gICAgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbixcbiAgICBhdXRoLFxuICAgIGFjdG9yVmlhOiBpbnB1dC5hY3RvclZpYSA/PyBpbnB1dC5zZXJ2aWNlSWQsXG4gIH0pO1xuXG4gIGNvbnN0IGNsaWVudDogUGxhdGZvcm1DbGllbnQgPSB7XG4gICAgYnVzaW5lc3M6IGJ1c2luZXNzQ2xpZW50LFxuICAgIGF1ZGl0OiBhdWRpdENsaWVudCxcbiAgICBhdXRoOiBhdXRoTmFtZXNwYWNlLFxuICAgIHdpdGhUb2tlbih0b2tlbikge1xuICAgICAgcmV0dXJuIGJ1aWxkQ2xpZW50KHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIGFjY2Vzc1Rva2VuOiB0b2tlbixcbiAgICAgICAgLy8gVGhlIG5ldyBjbGllbnQgc2hvdWxkIG5vdCBhbHNvIHRyeSB0byBtaW50IHZpYVxuICAgICAgICAvLyBjbGllbnRfY3JlZGVudGlhbHMgb24gdG9wIG9mIHRoZSBzdXBwbGllZCB1c2VyIHRva2VuLlxuICAgICAgICBzZXJ2aWNlSWQ6IHVuZGVmaW5lZCxcbiAgICAgICAgc2VydmljZVNlY3JldDogdW5kZWZpbmVkLFxuICAgICAgICBzY29wZTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuaW1wb3J0IHsgYXV0aCBhcyBhdXRoTmFtZXNwYWNlIH0gZnJvbSAnLi9hdXRoJztcblxuZnVuY3Rpb24gcmVzb2x2ZVRva2VuU291cmNlKGlucHV0OiBDbGllbnRDb25maWcsIGJhc2VVcmw6IHN0cmluZyk6IFRva2VuU291cmNlU3RhdGUgfCB1bmRlZmluZWQge1xuICBjb25zdCBhdXRoQmFzZVVybCA9IGlucHV0LmF1dGhCYXNlVXJsID8/IGAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3NgO1xuICBpZiAoaW5wdXQuYWNjZXNzVG9rZW4gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgaW5wdXQuYWNjZXNzVG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbWFrZVRva2VuU291cmNlU3RhdGUoXG4gICAgICAgIHsga2luZDogJ3N0YXRpYy1zdHJpbmcnLCB0b2tlbjogaW5wdXQuYWNjZXNzVG9rZW4gfSxcbiAgICAgICAgeyBleHBpcnlCdWZmZXJNczogaW5wdXQuZXhwaXJ5QnVmZmVyTXMsIGZldGNoRm46IGlucHV0LmZldGNoRm4gfSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBtYWtlVG9rZW5Tb3VyY2VTdGF0ZShcbiAgICAgIHsga2luZDogJ2NhbGxiYWNrJywgZ2V0VG9rZW46IGlucHV0LmFjY2Vzc1Rva2VuIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgaWYgKGlucHV0LnNlcnZpY2VJZCAmJiBpbnB1dC5zZXJ2aWNlU2VjcmV0KSB7XG4gICAgcmV0dXJuIG1ha2VUb2tlblNvdXJjZVN0YXRlKFxuICAgICAge1xuICAgICAgICBraW5kOiAnc2VydmljZS1jcmVkZW50aWFscycsXG4gICAgICAgIGNsaWVudElkOiBpbnB1dC5zZXJ2aWNlSWQsXG4gICAgICAgIGNsaWVudFNlY3JldDogaW5wdXQuc2VydmljZVNlY3JldCxcbiAgICAgICAgYXV0aEJhc2VVcmwsXG4gICAgICAgIHNjb3BlOiBpbnB1dC5zY29wZSxcbiAgICAgIH0sXG4gICAgICB7IGV4cGlyeUJ1ZmZlck1zOiBpbnB1dC5leHBpcnlCdWZmZXJNcywgZmV0Y2hGbjogaW5wdXQuZmV0Y2hGbiB9LFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gd2FybklmQnJvd3NlclNlY3JldChjb25maWc6IENsaWVudENvbmZpZyk6IHZvaWQge1xuICBjb25zdCBnID0gZ2xvYmFsVGhpcyBhcyB7IHdpbmRvdz86IHsgZG9jdW1lbnQ/OiB1bmtub3duIH0gfTtcbiAgY29uc3QgaW5Ccm93c2VyID0gdHlwZW9mIGcud2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZy53aW5kb3cuZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xuICBpZiAoIWluQnJvd3NlcikgcmV0dXJuO1xuICBpZiAoY29uZmlnLnNlcnZpY2VTZWNyZXQpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICAnW3VlbmdhZ2UtcGxhdGZvcm0tc2RrXSBzZXJ2aWNlU2VjcmV0IHNob3VsZCBub3QgYmUgdXNlZCBpbiBicm93c2VyIGVudmlyb25tZW50cy4gJyArXG4gICAgICAgICdTZXJ2aWNlIGNyZWRlbnRpYWxzIGluIGJyb3dzZXIgYnVuZGxlcyBhcmUgcHVibGljbHkgdmlzaWJsZS4gJyArXG4gICAgICAgICdVc2UgYGFjY2Vzc1Rva2VuYCB3aXRoIGEgdG9rZW4gb2J0YWluZWQgdmlhIE9BdXRoIChvciBgd2l0aFRva2VuKC4uLilgIG9uIGEgc2VydmVyLWJ1aWx0IGNsaWVudCkgaW5zdGVhZC4nLFxuICAgICk7XG4gIH1cbn1cblxuLy8g4pSA4pSA4pSAIERlZmF1bHQgc2luZ2xldG9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuLy9cbi8vIFJlc29sdmVkIGxhemlseSBvbiBmaXJzdCBwcm9wZXJ0eSBhY2Nlc3MgKFByb3h5KSBzbyBjb25zdW1lcnMgdGhhdFxuLy8gbXV0YXRlIGBwcm9jZXNzLmVudmAgYWZ0ZXIgaW1wb3J0IHN0aWxsIHBpY2sgdXAgdGhlIHJpZ2h0IHZhbHVlcy5cblxubGV0IGNhY2hlZFNpbmdsZXRvbjogUGxhdGZvcm1DbGllbnQgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBzaW5nbGV0b24oKTogUGxhdGZvcm1DbGllbnQge1xuICBpZiAoIWNhY2hlZFNpbmdsZXRvbikgY2FjaGVkU2luZ2xldG9uID0gYnVpbGRDbGllbnQoZW52Q2xpZW50Q29uZmlnKCkpO1xuICByZXR1cm4gY2FjaGVkU2luZ2xldG9uO1xufVxuXG5mdW5jdGlvbiBlbnZDbGllbnRDb25maWcoKTogQ2xpZW50Q29uZmlnIHtcbiAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykgcmV0dXJuIHt9O1xuICBjb25zdCBlID0gKHByb2Nlc3MgYXMgeyBlbnY/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IH0pLmVudiA/PyB7fTtcbiAgcmV0dXJuIHtcbiAgICBiYXNlVXJsOiBlLlVFTkdBR0VfQkFTRV9VUkwsXG4gICAgYXV0aEJhc2VVcmw6IGUuVUVOR0FHRV9BVVRIX0JBU0VfVVJMLFxuICAgIGFjY2Vzc1Rva2VuOiBlLlVFTkdBR0VfQVVUSF9UT0tFTixcbiAgICBzZXJ2aWNlSWQ6IGUuVUVOR0FHRV9TRVJWSUNFX0lELFxuICAgIHNlcnZpY2VTZWNyZXQ6IGUuVUVOR0FHRV9TRVJWSUNFX1NFQ1JFVCxcbiAgICBzY29wZTogZS5VRU5HQUdFX1NFUlZJQ0VfU0NPUEUsXG4gIH07XG59XG5cbi8qKlxuICogRGVmYXVsdCBjbGllbnQuIFJlYWRzIGNvbmZpZyBmcm9tIGVudmlyb25tZW50IHZhcmlhYmxlcyBvbiBmaXJzdFxuICogcHJvcGVydHkgYWNjZXNzIChzbyB0ZXN0IHNldHVwcyB0aGF0IG11dGF0ZSBgcHJvY2Vzcy5lbnZgIGFmdGVyXG4gKiBpbXBvcnQgd29yaykuIFVzZSBgY3JlYXRlQ2xpZW50KC4uLilgIHdoZW4geW91IG5lZWQgYW4gaXNvbGF0ZWRcbiAqIGluc3RhbmNlIHdpdGggZXhwbGljaXQgY29uZmlnLlxuICpcbiAqICAgVUVOR0FHRV9CQVNFX1VSTCAgICAgICAgIGRlZmF1bHRzIHRvIGh0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW9cbiAqICAgVUVOR0FHRV9BVVRIX0JBU0VfVVJMICAgIGF1dGggc3VyZmFjZSBvdmVycmlkZSAoZGVmYXVsdCAke2Jhc2VVcmx9L2F1dGgvYnVzaW5lc3MpXG4gKiAgIFVFTkdBR0VfQVVUSF9UT0tFTiAgICAgICBzdGF0aWMgQmVhcmVyIHRva2VuIChvdmVycmlkZXMgY2xpZW50X2NyZWRlbnRpYWxzKVxuICogICBVRU5HQUdFX1NFUlZJQ0VfSUQgICAgICAgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBjbGllbnRJZFxuICogICBVRU5HQUdFX1NFUlZJQ0VfU0VDUkVUICAgT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBjbGllbnRTZWNyZXRcbiAqICAgVUVOR0FHRV9TRVJWSUNFX1NDT1BFICAgIG9wdGlvbmFsIHNwYWNlLXNlcGFyYXRlZCBzY29wZSBsaXN0XG4gKi9cbmV4cG9ydCBjb25zdCBwbGF0Zm9ybTogUGxhdGZvcm1DbGllbnQgPSBuZXcgUHJveHkoe30gYXMgUGxhdGZvcm1DbGllbnQsIHtcbiAgZ2V0KF8sIHByb3ApIHtcbiAgICBjb25zdCBzID0gc2luZ2xldG9uKCkgYXMgdW5rbm93biBhcyBSZWNvcmQ8UHJvcGVydHlLZXksIHVua25vd24+O1xuICAgIHJldHVybiBzW3Byb3BdO1xuICB9LFxufSk7XG5cbi8qKiBUZXN0LW9ubHk6IGRyb3AgdGhlIHNpbmdsZXRvbiBjYWNoZSBiZXR3ZWVuIGNhc2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9yZXNldFBsYXRmb3JtU2luZ2xldG9uKCk6IHZvaWQge1xuICBjYWNoZWRTaW5nbGV0b24gPSB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29udmVuaWVuY2U6IHNob3J0aGFuZCBmb3IgYHBsYXRmb3JtLndpdGhUb2tlbih0b2tlbilgLlxuICogQkZGIGhhbmRsZXJzIGNvbW1vbmx5IGNhbGwgdGhpcyBvbmNlIHBlciByZXF1ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRva2VuKHRva2VuOiBzdHJpbmcgfCAoKCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KSk6IFBsYXRmb3JtQ2xpZW50IHtcbiAgcmV0dXJuIHNpbmdsZXRvbigpLndpdGhUb2tlbih0b2tlbik7XG59XG4iXX0=
|
package/dist/config.d.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { Logger } from '@uengage.io/js-logger';
|
|
2
|
+
import type { TokenSourceState } from './token-source';
|
|
2
3
|
export declare const DEFAULT_BASE_URL = "https://api.platform.uengage.io";
|
|
3
4
|
/**
|
|
4
5
|
* Resolved auth state. Discriminated by `type` so consumers can narrow.
|
|
5
6
|
*/
|
|
6
7
|
export type PlatformAuth = {
|
|
7
|
-
type: 'hmac';
|
|
8
|
-
secret: string;
|
|
9
|
-
serviceId: string;
|
|
10
|
-
} | {
|
|
11
8
|
type: 'bearer';
|
|
12
9
|
token: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: 'token-source';
|
|
12
|
+
state: TokenSourceState;
|
|
13
13
|
};
|
|
14
14
|
export interface PlatformConfig {
|
|
15
15
|
baseUrl: string;
|
|
@@ -17,11 +17,6 @@ export interface PlatformConfig {
|
|
|
17
17
|
fetchFn: typeof fetch;
|
|
18
18
|
logger?: Logger;
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Caller-facing input shape. `auth` accepts either a discriminated
|
|
22
|
-
* PlatformAuth or the looser PlatformAuthInput - the looser form is
|
|
23
|
-
* also what `.auth()` accepts.
|
|
24
|
-
*/
|
|
25
20
|
export interface PlatformConfigInput {
|
|
26
21
|
baseUrl?: string;
|
|
27
22
|
auth?: PlatformAuthInput | PlatformAuth;
|
|
@@ -29,13 +24,12 @@ export interface PlatformConfigInput {
|
|
|
29
24
|
logger?: Logger;
|
|
30
25
|
}
|
|
31
26
|
/**
|
|
32
|
-
* `.auth()` shape. Pass
|
|
33
|
-
* (
|
|
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()`.
|
|
34
30
|
*/
|
|
35
31
|
export interface PlatformAuthInput {
|
|
36
32
|
token?: string;
|
|
37
|
-
secret?: string;
|
|
38
|
-
serviceId?: string;
|
|
39
33
|
}
|
|
40
34
|
/**
|
|
41
35
|
* Resolve env-defaulted config. Re-read on every call so that callers can
|
|
@@ -44,8 +38,13 @@ export interface PlatformAuthInput {
|
|
|
44
38
|
*/
|
|
45
39
|
export declare function envDefaults(): PlatformConfig;
|
|
46
40
|
/**
|
|
47
|
-
* Coerce `.auth()` input or `config({auth})` input into a typed
|
|
48
|
-
* Throws
|
|
41
|
+
* Coerce `.auth()` input or `config({auth})` input into a typed
|
|
42
|
+
* PlatformAuth. Throws when the input has no usable credentials.
|
|
43
|
+
*
|
|
44
|
+
* Today this only accepts `{token}` or a pre-shaped `PlatformAuth`.
|
|
45
|
+
* For OAuth2 client_credentials use `createClient({serviceId, serviceSecret})`
|
|
46
|
+
* instead — that builds a TokenSource which mints + caches Bearer
|
|
47
|
+
* tokens.
|
|
49
48
|
*/
|
|
50
49
|
export declare function normalizeAuth(input: PlatformAuthInput | PlatformAuth): PlatformAuth;
|
|
51
50
|
/**
|
package/dist/config.js
CHANGED
|
@@ -11,38 +11,33 @@ exports.DEFAULT_BASE_URL = 'https://api.platform.uengage.io';
|
|
|
11
11
|
*/
|
|
12
12
|
function envDefaults() {
|
|
13
13
|
return {
|
|
14
|
-
baseUrl: process.env.
|
|
14
|
+
baseUrl: process.env.UENGAGE_BASE_URL ?? exports.DEFAULT_BASE_URL,
|
|
15
15
|
auth: envAuth(),
|
|
16
16
|
fetchFn: globalThis.fetch,
|
|
17
17
|
};
|
|
18
18
|
}
|
|
19
19
|
function envAuth() {
|
|
20
|
-
const
|
|
21
|
-
const serviceId = process.env.PLATFORM_SERVICE_ID;
|
|
22
|
-
const token = process.env.PLATFORM_AUTH_TOKEN;
|
|
20
|
+
const token = process.env.UENGAGE_AUTH_TOKEN;
|
|
23
21
|
if (token)
|
|
24
22
|
return { type: 'bearer', token };
|
|
25
|
-
if (secret && serviceId)
|
|
26
|
-
return { type: 'hmac', secret, serviceId };
|
|
27
23
|
return undefined;
|
|
28
24
|
}
|
|
29
25
|
/**
|
|
30
|
-
* Coerce `.auth()` input or `config({auth})` input into a typed
|
|
31
|
-
* Throws
|
|
26
|
+
* Coerce `.auth()` input or `config({auth})` input into a typed
|
|
27
|
+
* PlatformAuth. Throws when the input has no usable credentials.
|
|
28
|
+
*
|
|
29
|
+
* Today this only accepts `{token}` or a pre-shaped `PlatformAuth`.
|
|
30
|
+
* For OAuth2 client_credentials use `createClient({serviceId, serviceSecret})`
|
|
31
|
+
* instead — that builds a TokenSource which mints + caches Bearer
|
|
32
|
+
* tokens.
|
|
32
33
|
*/
|
|
33
34
|
function normalizeAuth(input) {
|
|
34
35
|
if ('type' in input)
|
|
35
36
|
return input;
|
|
36
37
|
if (input.token) {
|
|
37
|
-
if (input.secret || input.serviceId) {
|
|
38
|
-
throw new Error('auth(): pass either {token} or {secret, serviceId}, not both');
|
|
39
|
-
}
|
|
40
38
|
return { type: 'bearer', token: input.token };
|
|
41
39
|
}
|
|
42
|
-
|
|
43
|
-
return { type: 'hmac', secret: input.secret, serviceId: input.serviceId };
|
|
44
|
-
}
|
|
45
|
-
throw new Error('auth(): must provide either {token} or {secret, serviceId}');
|
|
40
|
+
throw new Error('auth(): pass {token} for a static Bearer access token, or use createClient({serviceId, serviceSecret}) for OAuth2 client_credentials');
|
|
46
41
|
}
|
|
47
42
|
/**
|
|
48
43
|
* Mutable config shared by clients. `apply()` and `setAuth()` are how the
|
|
@@ -81,4 +76,4 @@ class ConfigState {
|
|
|
81
76
|
}
|
|
82
77
|
}
|
|
83
78
|
exports.ConfigState = ConfigState;
|
|
84
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUF3Q0Esa0NBTUM7QUFpQkQsc0NBUUM7QUFwRVksUUFBQSxnQkFBZ0IsR0FBRyxpQ0FBaUMsQ0FBQztBQWdDbEU7Ozs7R0FJRztBQUNILFNBQWdCLFdBQVc7SUFDekIsT0FBTztRQUNMLE9BQU8sRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixJQUFJLHdCQUFnQjtRQUN6RCxJQUFJLEVBQUUsT0FBTyxFQUFFO1FBQ2YsT0FBTyxFQUFFLFVBQVUsQ0FBQyxLQUFxQjtLQUMxQyxDQUFDO0FBQ0osQ0FBQztBQUVELFNBQVMsT0FBTztJQUNkLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUM7SUFDN0MsSUFBSSxLQUFLO1FBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDNUMsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsYUFBYSxDQUFDLEtBQXVDO0lBQ25FLElBQUksTUFBTSxJQUFJLEtBQUs7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLHNJQUFzSSxDQUN2SSxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBYSxXQUFXO0lBQ2QsU0FBUyxHQUF3QixFQUFFLENBQUM7SUFDcEMsWUFBWSxDQUEyQjtJQUN2QyxlQUFlLEdBQUcsS0FBSyxDQUFDO0lBRWhDLEtBQUssQ0FBQyxLQUEwQjtRQUM5QixJQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDeEUsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFNBQVM7WUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQ3hFLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzlCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQXVDO1FBQzdDLElBQUksQ0FBQyxZQUFZLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTSxHQUFHLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDMUIsT0FBTztZQUNMLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsT0FBTztZQUM5QyxJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDekQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE9BQU8sQ0FBaUI7WUFDaEUsTUFBTSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBNEI7U0FDcEQsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTdCRCxrQ0E2QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQgdHlwZSB7IFRva2VuU291cmNlU3RhdGUgfSBmcm9tICcuL3Rva2VuLXNvdXJjZSc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8nO1xuXG4vKipcbiAqIFJlc29sdmVkIGF1dGggc3RhdGUuIERpc2NyaW1pbmF0ZWQgYnkgYHR5cGVgIHNvIGNvbnN1bWVycyBjYW4gbmFycm93LlxuICovXG5leHBvcnQgdHlwZSBQbGF0Zm9ybUF1dGggPVxuICB8IHsgdHlwZTogJ2JlYXJlcic7IHRva2VuOiBzdHJpbmcgfVxuICB8IHsgdHlwZTogJ3Rva2VuLXNvdXJjZSc7IHN0YXRlOiBUb2tlblNvdXJjZVN0YXRlIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGxhdGZvcm1Db25maWcge1xuICBiYXNlVXJsOiBzdHJpbmc7XG4gIGF1dGg/OiBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm46IHR5cGVvZiBmZXRjaDtcbiAgbG9nZ2VyPzogTG9nZ2VyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBsYXRmb3JtQ29uZmlnSW5wdXQge1xuICBiYXNlVXJsPzogc3RyaW5nO1xuICBhdXRoPzogUGxhdGZvcm1BdXRoSW5wdXQgfCBQbGF0Zm9ybUF1dGg7XG4gIGZldGNoRm4/OiB0eXBlb2YgZmV0Y2g7XG4gIGxvZ2dlcj86IExvZ2dlcjtcbn1cblxuLyoqXG4gKiBgLmF1dGgoKWAgc2hhcGUuIFBhc3MgYHt0b2tlbn1gIGZvciBhIHN0YXRpYyBCZWFyZXIgYWNjZXNzIHRva2VuLlxuICogT0F1dGgyIGNsaWVudF9jcmVkZW50aWFscyBsaXZlIGF0IGBjcmVhdGVDbGllbnQoKWAgY29uZmlnLXRpbWVcbiAqIChgc2VydmljZUlkYCArIGBzZXJ2aWNlU2VjcmV0YCBmaWVsZHMpLCBub3QgdmlhIGAuYXV0aCgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbGF0Zm9ybUF1dGhJbnB1dCB7XG4gIHRva2VuPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlc29sdmUgZW52LWRlZmF1bHRlZCBjb25maWcuIFJlLXJlYWQgb24gZXZlcnkgY2FsbCBzbyB0aGF0IGNhbGxlcnMgY2FuXG4gKiBzZXQgZW52IHZhcnMgYWZ0ZXIgdGhlIFNESyBoYXMgYmVlbiBpbXBvcnRlZCBhbmQgc3RpbGwgcGljayB0aGVtIHVwIG9uXG4gKiB0aGUgbmV4dCByZXF1ZXN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW52RGVmYXVsdHMoKTogUGxhdGZvcm1Db25maWcge1xuICByZXR1cm4ge1xuICAgIGJhc2VVcmw6IHByb2Nlc3MuZW52LlVFTkdBR0VfQkFTRV9VUkwgPz8gREVGQVVMVF9CQVNFX1VSTCxcbiAgICBhdXRoOiBlbnZBdXRoKCksXG4gICAgZmV0Y2hGbjogZ2xvYmFsVGhpcy5mZXRjaCBhcyB0eXBlb2YgZmV0Y2gsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGVudkF1dGgoKTogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudi5VRU5HQUdFX0FVVEhfVE9LRU47XG4gIGlmICh0b2tlbikgcmV0dXJuIHsgdHlwZTogJ2JlYXJlcicsIHRva2VuIH07XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29lcmNlIGAuYXV0aCgpYCBpbnB1dCBvciBgY29uZmlnKHthdXRofSlgIGlucHV0IGludG8gYSB0eXBlZFxuICogUGxhdGZvcm1BdXRoLiBUaHJvd3Mgd2hlbiB0aGUgaW5wdXQgaGFzIG5vIHVzYWJsZSBjcmVkZW50aWFscy5cbiAqXG4gKiBUb2RheSB0aGlzIG9ubHkgYWNjZXB0cyBge3Rva2VufWAgb3IgYSBwcmUtc2hhcGVkIGBQbGF0Zm9ybUF1dGhgLlxuICogRm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMgdXNlIGBjcmVhdGVDbGllbnQoe3NlcnZpY2VJZCwgc2VydmljZVNlY3JldH0pYFxuICogaW5zdGVhZCDigJQgdGhhdCBidWlsZHMgYSBUb2tlblNvdXJjZSB3aGljaCBtaW50cyArIGNhY2hlcyBCZWFyZXJcbiAqIHRva2Vucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogUGxhdGZvcm1BdXRoIHtcbiAgaWYgKCd0eXBlJyBpbiBpbnB1dCkgcmV0dXJuIGlucHV0O1xuICBpZiAoaW5wdXQudG9rZW4pIHtcbiAgICByZXR1cm4geyB0eXBlOiAnYmVhcmVyJywgdG9rZW46IGlucHV0LnRva2VuIH07XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICdhdXRoKCk6IHBhc3Mge3Rva2VufSBmb3IgYSBzdGF0aWMgQmVhcmVyIGFjY2VzcyB0b2tlbiwgb3IgdXNlIGNyZWF0ZUNsaWVudCh7c2VydmljZUlkLCBzZXJ2aWNlU2VjcmV0fSkgZm9yIE9BdXRoMiBjbGllbnRfY3JlZGVudGlhbHMnLFxuICApO1xufVxuXG4vKipcbiAqIE11dGFibGUgY29uZmlnIHNoYXJlZCBieSBjbGllbnRzLiBgYXBwbHkoKWAgYW5kIGBzZXRBdXRoKClgIGFyZSBob3cgdGhlXG4gKiBjaGFpbmFibGUgYC5jb25maWcoKWAgLyBgLmF1dGgoKWAgbWV0aG9kcyB3cml0ZSBiYWNrLiBgcmVzb2x2ZSgpYCBwcm9kdWNlc1xuICogdGhlIGVmZmVjdGl2ZSBjb25maWcgZm9yIG9uZSByZXF1ZXN0LCBmYWxsaW5nIGJhY2sgdG8gY3VycmVudCBlbnYgc3RhdGVcbiAqIGZvciBmaWVsZHMgdGhlIGNhbGxlciBoYXNuJ3QgcGlubmVkLlxuICovXG5leHBvcnQgY2xhc3MgQ29uZmlnU3RhdGUge1xuICBwcml2YXRlIG92ZXJyaWRlczogUGxhdGZvcm1Db25maWdJbnB1dCA9IHt9O1xuICBwcml2YXRlIGV4cGxpY2l0QXV0aDogUGxhdGZvcm1BdXRoIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc0V4cGxpY2l0QXV0aCA9IGZhbHNlO1xuXG4gIGFwcGx5KGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogdm9pZCB7XG4gICAgaWYgKGlucHV0LmJhc2VVcmwgIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuYmFzZVVybCA9IGlucHV0LmJhc2VVcmw7XG4gICAgaWYgKGlucHV0LmZldGNoRm4gIT09IHVuZGVmaW5lZCkgdGhpcy5vdmVycmlkZXMuZmV0Y2hGbiA9IGlucHV0LmZldGNoRm47XG4gICAgaWYgKGlucHV0LmxvZ2dlciAhPT0gdW5kZWZpbmVkKSB0aGlzLm92ZXJyaWRlcy5sb2dnZXIgPSBpbnB1dC5sb2dnZXI7XG4gICAgaWYgKGlucHV0LmF1dGggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0LmF1dGgpO1xuICAgICAgdGhpcy5oYXNFeHBsaWNpdEF1dGggPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHNldEF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogdm9pZCB7XG4gICAgdGhpcy5leHBsaWNpdEF1dGggPSBub3JtYWxpemVBdXRoKGlucHV0KTtcbiAgICB0aGlzLmhhc0V4cGxpY2l0QXV0aCA9IHRydWU7XG4gIH1cblxuICByZXNvbHZlKCk6IFBsYXRmb3JtQ29uZmlnIHtcbiAgICBjb25zdCBlbnYgPSBlbnZEZWZhdWx0cygpO1xuICAgIHJldHVybiB7XG4gICAgICBiYXNlVXJsOiB0aGlzLm92ZXJyaWRlcy5iYXNlVXJsID8/IGVudi5iYXNlVXJsLFxuICAgICAgYXV0aDogdGhpcy5oYXNFeHBsaWNpdEF1dGggPyB0aGlzLmV4cGxpY2l0QXV0aCA6IGVudi5hdXRoLFxuICAgICAgZmV0Y2hGbjogKHRoaXMub3ZlcnJpZGVzLmZldGNoRm4gPz8gZW52LmZldGNoRm4pIGFzIHR5cGVvZiBmZXRjaCxcbiAgICAgIGxvZ2dlcjogdGhpcy5vdmVycmlkZXMubG9nZ2VyIGFzIExvZ2dlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG59XG4iXX0=
|