@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
package/dist/audit/client.d.ts
CHANGED
|
@@ -11,6 +11,14 @@ export type AuditEventInput = Omit<AuditEvent, 'event_id' | 'occurred_at' | 'act
|
|
|
11
11
|
actor: Omit<AuditEvent['actor'], 'via'>;
|
|
12
12
|
};
|
|
13
13
|
export interface AuditClientInput extends PlatformConfigInput {
|
|
14
|
+
/**
|
|
15
|
+
* Service identifier the producer is acting as. Stamped into
|
|
16
|
+
* `actor.via` on every event. Required because the audit schema's
|
|
17
|
+
* `actor.via` field is non-optional; OAuth Bearer tokens carry the
|
|
18
|
+
* identity in `sub` but the SDK doesn't decode them on the hot
|
|
19
|
+
* path. Pin this once at construction; do not change per-call.
|
|
20
|
+
*/
|
|
21
|
+
actorVia?: string;
|
|
14
22
|
/** Default 5000. */
|
|
15
23
|
flushIntervalMs?: number;
|
|
16
24
|
/** Default 50. */
|
package/dist/audit/client.js
CHANGED
|
@@ -22,24 +22,19 @@ function createAuditClient(input = {}) {
|
|
|
22
22
|
const maxBatchSize = input.maxBatchSize ?? 50;
|
|
23
23
|
const maxQueueSize = input.maxQueueSize ?? 1000;
|
|
24
24
|
const enableTimer = input.enableTimer ?? true;
|
|
25
|
-
const
|
|
25
|
+
const actorVia = input.actorVia;
|
|
26
|
+
const { flushIntervalMs: _f, maxBatchSize: _b, maxQueueSize: _q, enableTimer: _t, actorVia: _v, ...rest } = input;
|
|
26
27
|
void _f;
|
|
27
28
|
void _b;
|
|
28
29
|
void _q;
|
|
29
30
|
void _t;
|
|
31
|
+
void _v;
|
|
30
32
|
state.apply(rest);
|
|
31
33
|
const queue = [];
|
|
32
34
|
const inflight = [];
|
|
33
35
|
function getLogger() {
|
|
34
36
|
return state.resolve().logger ?? NOOP_LOGGER;
|
|
35
37
|
}
|
|
36
|
-
function getServiceId() {
|
|
37
|
-
const config = state.resolve();
|
|
38
|
-
if (!config.auth || config.auth.type !== 'hmac') {
|
|
39
|
-
throw new Error('audit client requires HMAC auth (set PLATFORM_SIGNING_SECRET + PLATFORM_SERVICE_ID, or call .auth({secret, serviceId}))');
|
|
40
|
-
}
|
|
41
|
-
return config.auth.serviceId;
|
|
42
|
-
}
|
|
43
38
|
const client = {
|
|
44
39
|
config(opts) {
|
|
45
40
|
state.apply(opts);
|
|
@@ -51,14 +46,12 @@ function createAuditClient(input = {}) {
|
|
|
51
46
|
},
|
|
52
47
|
record(input) {
|
|
53
48
|
const logger = getLogger();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
error: { code: 'AUDIT_NO_AUTH', category: 'engineering' },
|
|
61
|
-
context: { message: err.message },
|
|
49
|
+
if (!actorVia) {
|
|
50
|
+
logger.error('audit_sdk.missing_actor_via', {
|
|
51
|
+
error: { code: 'AUDIT_MISSING_ACTOR_VIA', category: 'engineering' },
|
|
52
|
+
context: {
|
|
53
|
+
message: 'audit client requires `actorVia` config (the service identifier this producer acts as). Pass {actorVia: "<your-service>"} to createAuditClient or createClient.',
|
|
54
|
+
},
|
|
62
55
|
});
|
|
63
56
|
return;
|
|
64
57
|
}
|
|
@@ -66,7 +59,7 @@ function createAuditClient(input = {}) {
|
|
|
66
59
|
...input,
|
|
67
60
|
event_id: (0, ulid_1.ulid)(),
|
|
68
61
|
occurred_at: new Date().toISOString().replace(/\.\d{3}Z$/, 'Z'),
|
|
69
|
-
actor: { ...input.actor, via:
|
|
62
|
+
actor: { ...input.actor, via: actorVia },
|
|
70
63
|
};
|
|
71
64
|
const result = schema_1.auditEventSchema.safeParse(candidate);
|
|
72
65
|
if (!result.success) {
|
|
@@ -136,7 +129,7 @@ function createAuditClient(input = {}) {
|
|
|
136
129
|
async function sendOnce(body) {
|
|
137
130
|
const config = state.resolve();
|
|
138
131
|
const logger = getLogger();
|
|
139
|
-
const headers = (0, http_1.buildHeaders)(config, { method: 'POST', path: PATH, body });
|
|
132
|
+
const headers = await (0, http_1.buildHeaders)(config, { method: 'POST', path: PATH, body });
|
|
140
133
|
const res = await config.fetchFn(`${config.baseUrl}${PATH}`, {
|
|
141
134
|
method: 'POST',
|
|
142
135
|
headers,
|
|
@@ -166,4 +159,4 @@ function createAuditClient(input = {}) {
|
|
|
166
159
|
function sleep(ms) {
|
|
167
160
|
return new Promise((r) => setTimeout(r, ms));
|
|
168
161
|
}
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFEQSw4Q0E4SkM7QUFuTkQsK0JBQTRCO0FBRTVCLHNDQUttQjtBQUNuQixrQ0FBdUM7QUFDdkMscUNBQTZEO0FBK0I3RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztJQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO0lBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ21CLENBQUM7QUFFdkIsU0FBZ0IsaUJBQWlCLENBQUMsUUFBMEIsRUFBRTtJQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUU5QyxNQUFNLEVBQ0osZUFBZSxFQUFFLEVBQUUsRUFDbkIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsWUFBWSxFQUFFLEVBQUUsRUFDaEIsV0FBVyxFQUFFLEVBQUUsRUFDZixHQUFHLElBQUksRUFDUixHQUFHLEtBQUssQ0FBQztJQUNW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LEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0MsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVsaWQgfSBmcm9tICd1bGlkJztcbmltcG9ydCB0eXBlIHsgTG9nZ2VyIH0gZnJvbSAnQHVlbmdhZ2UuaW8vanMtbG9nZ2VyJztcbmltcG9ydCB7XG4gIENvbmZpZ1N0YXRlLFxuICB0eXBlIFBsYXRmb3JtQXV0aCxcbiAgdHlwZSBQbGF0Zm9ybUF1dGhJbnB1dCxcbiAgdHlwZSBQbGF0Zm9ybUNvbmZpZ0lucHV0LFxufSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgYnVpbGRIZWFkZXJzIH0gZnJvbSAnLi4vaHR0cCc7XG5pbXBvcnQgeyBhdWRpdEV2ZW50U2NoZW1hLCB0eXBlIEF1ZGl0RXZlbnQgfSBmcm9tICcuL3NjaGVtYSc7XG5cbi8qKlxuICogQ2FsbGVyLWZhY2luZyBldmVudCBzaGFwZS4gVGhlIFNESyBmaWxsczpcbiAqICAgLSBgZXZlbnRfaWRgICAgKFVMSUQsIGdlbmVyYXRlZCBwZXIgY2FsbClcbiAqICAgLSBgb2NjdXJyZWRfYXRgIChVVEMgSVNPIDg2MDEgYXQgdGhlIHRpbWUgb2YgYHJlY29yZCgpYClcbiAqICAgLSBgYWN0b3IudmlhYCAgKGFsd2F5cyBzZXQgdG8gdGhlIGNvbmZpZ3VyZWQgc2VydmljZUlkLCBzbyBjYWxsZXJzXG4gKiAgICAgICAgICAgICAgICAgICBjYW4ndCBkcmlmdCBmcm9tIHRoZSBzZXJ2aWNlIGlkZW50aXR5IHVzZWQgZm9yIGF1dGgpXG4gKi9cbmV4cG9ydCB0eXBlIEF1ZGl0RXZlbnRJbnB1dCA9IE9taXQ8QXVkaXRFdmVudCwgJ2V2ZW50X2lkJyB8ICdvY2N1cnJlZF9hdCcgfCAnYWN0b3InPiAmIHtcbiAgYWN0b3I6IE9taXQ8QXVkaXRFdmVudFsnYWN0b3InXSwgJ3ZpYSc+O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdENsaWVudElucHV0IGV4dGVuZHMgUGxhdGZvcm1Db25maWdJbnB1dCB7XG4gIC8qKiBEZWZhdWx0IDUwMDAuICovXG4gIGZsdXNoSW50ZXJ2YWxNcz86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgNTAuICovXG4gIG1heEJhdGNoU2l6ZT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgMTAwMC4gTmV3IGV2ZW50cyBwYXN0IHRoaXMgYXJlIGRyb3BwZWQgd2l0aCBhIHdhcm5pbmcuICovXG4gIG1heFF1ZXVlU2l6ZT86IG51bWJlcjtcbiAgLyoqIERlZmF1bHQgdHJ1ZS4gU2V0IGZhbHNlIHRvIGRpc2FibGUgdGhlIGF1dG8tZmx1c2ggdGltZXIgKHRlc3Qgb25seSkuICovXG4gIGVuYWJsZVRpbWVyPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBdWRpdENsaWVudCB7XG4gIGNvbmZpZyhpbnB1dDogUGxhdGZvcm1Db25maWdJbnB1dCk6IEF1ZGl0Q2xpZW50O1xuICBhdXRoKGlucHV0OiBQbGF0Zm9ybUF1dGhJbnB1dCB8IFBsYXRmb3JtQXV0aCk6IEF1ZGl0Q2xpZW50O1xuICByZWNvcmQoZXZlbnQ6IEF1ZGl0RXZlbnRJbnB1dCk6IHZvaWQ7XG4gIGZsdXNoKCk6IFByb21pc2U8dm9pZD47XG59XG5cbmNvbnN0IFBBVEggPSAnL3YxL2F1ZGl0L2V2ZW50cyc7XG5jb25zdCBSRVRSWV9ERUxBWVNfTVMgPSBbNTAwLCAyMDAwLCA4MDAwXTtcblxuY29uc3QgTk9PUF9MT0dHRVIgPSB7XG4gIGVycm9yOiAoKSA9PiB7fSxcbiAgd2FybjogKCkgPT4ge30sXG4gIGluZm86ICgpID0+IHt9LFxuICBkZWJ1ZzogKCkgPT4ge30sXG4gIGNoaWxkKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LFxufSBhcyB1bmtub3duIGFzIExvZ2dlcjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1ZGl0Q2xpZW50KGlucHV0OiBBdWRpdENsaWVudElucHV0ID0ge30pOiBBdWRpdENsaWVudCB7XG4gIGNvbnN0IHN0YXRlID0gbmV3IENvbmZpZ1N0YXRlKCk7XG4gIGNvbnN0IGZsdXNoSW50ZXJ2YWxNcyA9IGlucHV0LmZsdXNoSW50ZXJ2YWxNcyA/PyA1MDAwO1xuICBjb25zdCBtYXhCYXRjaFNpemUgPSBpbnB1dC5tYXhCYXRjaFNpemUgPz8gNTA7XG4gIGNvbnN0IG1heFF1ZXVlU2l6ZSA9IGlucHV0Lm1heFF1ZXVlU2l6ZSA/PyAxMDAwO1xuICBjb25zdCBlbmFibGVUaW1lciA9IGlucHV0LmVuYWJsZVRpbWVyID8/IHRydWU7XG5cbiAgY29uc3Qge1xuICAgIGZsdXNoSW50ZXJ2YWxNczogX2YsXG4gICAgbWF4QmF0Y2hTaXplOiBfYixcbiAgICBtYXhRdWV1ZVNpemU6IF9xLFxuICAgIGVuYWJsZVRpbWVyOiBfdCxcbiAgICAuLi5yZXN0XG4gIH0gPSBpbnB1dDtcbiAgdm9pZCBfZjtcbiAgdm9pZCBfYjtcbiAgdm9pZCBfcTtcbiAgdm9pZCBfdDtcbiAgc3RhdGUuYXBwbHkocmVzdCk7XG5cbiAgY29uc3QgcXVldWU6IEF1ZGl0RXZlbnRbXSA9IFtdO1xuICBjb25zdCBpbmZsaWdodDogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgZnVuY3Rpb24gZ2V0TG9nZ2VyKCk6IExvZ2dlciB7XG4gICAgcmV0dXJuIHN0YXRlLnJlc29sdmUoKS5sb2dnZXIgPz8gTk9PUF9MT0dHRVI7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZXJ2aWNlSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb25maWcgPSBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgaWYgKCFjb25maWcuYXV0aCB8fCBjb25maWcuYXV0aC50eXBlICE9PSAnaG1hYycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2F1ZGl0IGNsaWVudCByZXF1aXJlcyBITUFDIGF1dGggKHNldCBQTEFURk9STV9TSUdOSU5HX1NFQ1JFVCArIFBMQVRGT1JNX1NFUlZJQ0VfSUQsIG9yIGNhbGwgLmF1dGgoe3NlY3JldCwgc2VydmljZUlkfSkpJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWcuYXV0aC5zZXJ2aWNlSWQ7XG4gIH1cblxuICBjb25zdCBjbGllbnQ6IEF1ZGl0Q2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG4gICAgcmVjb3JkKGlucHV0KSB7XG4gICAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiAgICAgIGxldCBzZXJ2aWNlSWQ6IHN0cmluZztcbiAgICAgIHRyeSB7XG4gICAgICAgIHNlcnZpY2VJZCA9IGdldFNlcnZpY2VJZCgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLm5vX2F1dGgnLCB7XG4gICAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX05PX0FVVEgnLCBjYXRlZ29yeTogJ2VuZ2luZWVyaW5nJyB9LFxuICAgICAgICAgIGNvbnRleHQ6IHsgbWVzc2FnZTogKGVyciBhcyBFcnJvcikubWVzc2FnZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjYW5kaWRhdGU6IEF1ZGl0RXZlbnQgPSB7XG4gICAgICAgIC4uLmlucHV0LFxuICAgICAgICBldmVudF9pZDogdWxpZCgpLFxuICAgICAgICBvY2N1cnJlZF9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnJlcGxhY2UoL1xcLlxcZHszfVokLywgJ1onKSxcbiAgICAgICAgYWN0b3I6IHsgLi4uaW5wdXQuYWN0b3IsIHZpYTogc2VydmljZUlkIH0sXG4gICAgICB9O1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXVkaXRFdmVudFNjaGVtYS5zYWZlUGFyc2UoY2FuZGlkYXRlKTtcbiAgICAgIGlmICghcmVzdWx0LnN1Y2Nlc3MpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsuaW52YWxpZF9ldmVudCcsIHtcbiAgICAgICAgICBlcnJvcjogeyBjb2RlOiAnQVVESVRfSU5WQUxJRF9FVkVOVCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICAgICAgY29udGV4dDogeyBpc3N1ZXM6IHJlc3VsdC5lcnJvci5pc3N1ZXMsIGV2ZW50OiBjYW5kaWRhdGUgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChxdWV1ZS5sZW5ndGggPj0gbWF4UXVldWVTaXplKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdhdWRpdF9zZGsucXVldWVfZnVsbCcsIHtcbiAgICAgICAgICBjb250ZXh0OiB7IGRyb3BwZWRfZXZlbnRfaWQ6IGNhbmRpZGF0ZS5ldmVudF9pZCwgbWF4X3F1ZXVlX3NpemU6IG1heFF1ZXVlU2l6ZSB9LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcXVldWUucHVzaChyZXN1bHQuZGF0YSk7XG4gICAgICBpZiAocXVldWUubGVuZ3RoID49IG1heEJhdGNoU2l6ZSkge1xuICAgICAgICB2b2lkIHNjaGVkdWxlU2VuZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgZmx1c2goKSB7XG4gICAgICBhd2FpdCBzY2hlZHVsZVNlbmQoKTtcbiAgICAgIHdoaWxlIChpbmZsaWdodC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChbLi4uaW5mbGlnaHRdKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIGFzeW5jIGZ1bmN0aW9uIHNjaGVkdWxlU2VuZCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYmF0Y2ggPSBxdWV1ZS5zcGxpY2UoMCwgbWF4QmF0Y2hTaXplKTtcbiAgICAgIGNvbnN0IHNlbmQgPSBzZW5kV2l0aFJldHJpZXMoYmF0Y2gpO1xuICAgICAgaW5mbGlnaHQucHVzaChzZW5kKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHNlbmQ7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjb25zdCBpZHggPSBpbmZsaWdodC5pbmRleE9mKHNlbmQpO1xuICAgICAgICBpZiAoaWR4ICE9PSAtMSkgaW5mbGlnaHQuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VuZFdpdGhSZXRyaWVzKGV2ZW50czogQXVkaXRFdmVudFtdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKCk7XG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHsgZXZlbnRzIH0pO1xuICAgIGZvciAobGV0IGF0dGVtcHQgPSAwOyBhdHRlbXB0IDw9IFJFVFJZX0RFTEFZU19NUy5sZW5ndGg7IGF0dGVtcHQrKykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgb2sgPSBhd2FpdCBzZW5kT25jZShib2R5KTtcbiAgICAgICAgaWYgKG9rKSByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc3QgZSA9IGVyciBhcyBFcnJvcjtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ2F1ZGl0X3Nkay5zZW5kX2Vycm9yJywge1xuICAgICAgICAgIGNvbnRleHQ6IHsgYXR0ZW1wdCwgbWVzc2FnZTogZS5tZXNzYWdlLCBiYXRjaF9zaXplOiBldmVudHMubGVuZ3RoIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHQgPCBSRVRSWV9ERUxBWVNfTVMubGVuZ3RoKSB7XG4gICAgICAgIGF3YWl0IHNsZWVwKFJFVFJZX0RFTEFZU19NU1thdHRlbXB0XSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLnNlbmRfZmFpbGVkJywge1xuICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX1NFTkRfRkFJTEVEJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgIGNvbnRleHQ6IHsgYmF0Y2hfc2l6ZTogZXZlbnRzLmxlbmd0aCwgZXZlbnRzIH0sXG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBzZW5kT25jZShib2R5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBjb25maWcgPSBzdGF0ZS5yZXNvbHZlKCk7XG4gICAgY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhjb25maWcsIHsgbWV0aG9kOiAnUE9TVCcsIHBhdGg6IFBBVEgsIGJvZHkgfSk7XG4gICAgY29uc3QgcmVzID0gYXdhaXQgY29uZmlnLmZldGNoRm4oYCR7Y29uZmlnLmJhc2VVcmx9JHtQQVRIfWAsIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHksXG4gICAgfSk7XG4gICAgaWYgKHJlcy5zdGF0dXMgPj0gNTAwKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKCFyZXMub2sgJiYgcmVzLnN0YXR1cyAhPT0gMjAyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ2F1ZGl0X3Nkay5yZWplY3RlZCcsIHtcbiAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX1JFSkVDVEVEJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgICAgY29udGV4dDogeyBzdGF0dXM6IHJlcy5zdGF0dXMgfSxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD4gfCB1bmRlZmluZWQ7XG4gIGlmIChlbmFibGVUaW1lcikge1xuICAgIHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdm9pZCBzY2hlZHVsZVNlbmQoKTtcbiAgICB9LCBmbHVzaEludGVydmFsTXMpO1xuICAgIGlmICh0eXBlb2YgdGltZXIudW5yZWYgPT09ICdmdW5jdGlvbicpIHRpbWVyLnVucmVmKCk7XG4gIH1cblxuICByZXR1cm4gY2xpZW50O1xufVxuXG5mdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCBtcykpO1xufVxuIl19
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1ZGl0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTZEQSw4Q0F1SkM7QUFwTkQsK0JBQTRCO0FBRTVCLHNDQUttQjtBQUNuQixrQ0FBdUM7QUFDdkMscUNBQTZEO0FBdUM3RCxNQUFNLElBQUksR0FBRyxrQkFBa0IsQ0FBQztBQUNoQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFFMUMsTUFBTSxXQUFXLEdBQUc7SUFDbEIsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUUsQ0FBQztJQUNkLElBQUksRUFBRSxHQUFHLEVBQUUsR0FBRSxDQUFDO0lBQ2QsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFFLENBQUM7SUFDZixLQUFLO1FBQ0gsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ21CLENBQUM7QUFFdkIsU0FBZ0IsaUJBQWlCLENBQUMsUUFBMEIsRUFBRTtJQUM1RCxNQUFNLEtBQUssR0FBRyxJQUFJLG9CQUFXLEVBQUUsQ0FBQztJQUNoQyxNQUFNLGVBQWUsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLElBQUksQ0FBQztJQUN0RCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztJQUM5QyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQztJQUM5QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0lBRWhDLE1BQU0sRUFDSixlQUFlLEVBQUUsRUFBRSxFQUNuQixZQUFZLEVBQUUsRUFBRSxFQUNoQixZQUFZLEVBQUUsRUFBRSxFQUNoQixXQUFXLEVBQUUsRUFB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TyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLElBQUksR0FBRyxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLG9CQUFvQixFQUFFO2dCQUNqQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRTtnQkFDMUQsT0FBTyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUU7YUFDaEMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxLQUFpRCxDQUFDO0lBQ3RELElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEIsS0FBSyxHQUFHLFdBQVcsQ0FBQyxHQUFHLEVBQUU7WUFDdkIsS0FBSyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDcEIsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLEtBQUssVUFBVTtZQUFFLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELFNBQVMsS0FBSyxDQUFDLEVBQVU7SUFDdkIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1bGlkIH0gZnJvbSAndWxpZCc7XG5pbXBvcnQgdHlwZSB7IExvZ2dlciB9IGZyb20gJ0B1ZW5nYWdlLmlvL2pzLWxvZ2dlcic7XG5pbXBvcnQge1xuICBDb25maWdTdGF0ZSxcbiAgdHlwZSBQbGF0Zm9ybUF1dGgsXG4gIHR5cGUgUGxhdGZvcm1BdXRoSW5wdXQsXG4gIHR5cGUgUGxhdGZvcm1Db25maWdJbnB1dCxcbn0gZnJvbSAnLi4vY29uZmlnJztcbmltcG9ydCB7IGJ1aWxkSGVhZGVycyB9IGZyb20gJy4uL2h0dHAnO1xuaW1wb3J0IHsgYXVkaXRFdmVudFNjaGVtYSwgdHlwZSBBdWRpdEV2ZW50IH0gZnJvbSAnLi9zY2hlbWEnO1xuXG4vKipcbiAqIENhbGxlci1mYWNpbmcgZXZlbnQgc2hhcGUuIFRoZSBTREsgZmlsbHM6XG4gKiAgIC0gYGV2ZW50X2lkYCAgIChVTElELCBnZW5lcmF0ZWQgcGVyIGNhbGwpXG4gKiAgIC0gYG9jY3VycmVkX2F0YCAoVVRDIElTTyA4NjAxIGF0IHRoZSB0aW1lIG9mIGByZWNvcmQoKWApXG4gKiAgIC0gYGFjdG9yLnZpYWAgIChhbHdheXMgc2V0IHRvIHRoZSBjb25maWd1cmVkIHNlcnZpY2VJZCwgc28gY2FsbGVyc1xuICogICAgICAgICAgICAgICAgICAgY2FuJ3QgZHJpZnQgZnJvbSB0aGUgc2VydmljZSBpZGVudGl0eSB1c2VkIGZvciBhdXRoKVxuICovXG5leHBvcnQgdHlwZSBBdWRpdEV2ZW50SW5wdXQgPSBPbWl0PEF1ZGl0RXZlbnQsICdldmVudF9pZCcgfCAnb2NjdXJyZWRfYXQnIHwgJ2FjdG9yJz4gJiB7XG4gIGFjdG9yOiBPbWl0PEF1ZGl0RXZlbnRbJ2FjdG9yJ10sICd2aWEnPjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXVkaXRDbGllbnRJbnB1dCBleHRlbmRzIFBsYXRmb3JtQ29uZmlnSW5wdXQge1xuICAvKipcbiAgICogU2VydmljZSBpZGVudGlmaWVyIHRoZSBwcm9kdWNlciBpcyBhY3RpbmcgYXMuIFN0YW1wZWQgaW50b1xuICAgKiBgYWN0b3IudmlhYCBvbiBldmVyeSBldmVudC4gUmVxdWlyZWQgYmVjYXVzZSB0aGUgYXVkaXQgc2NoZW1hJ3NcbiAgICogYGFjdG9yLnZpYWAgZmllbGQgaXMgbm9uLW9wdGlvbmFsOyBPQXV0aCBCZWFyZXIgdG9rZW5zIGNhcnJ5IHRoZVxuICAgKiBpZGVudGl0eSBpbiBgc3ViYCBidXQgdGhlIFNESyBkb2Vzbid0IGRlY29kZSB0aGVtIG9uIHRoZSBob3RcbiAgICogcGF0aC4gUGluIHRoaXMgb25jZSBhdCBjb25zdHJ1Y3Rpb247IGRvIG5vdCBjaGFuZ2UgcGVyLWNhbGwuXG4gICAqL1xuICBhY3RvclZpYT86IHN0cmluZztcbiAgLyoqIERlZmF1bHQgNTAwMC4gKi9cbiAgZmx1c2hJbnRlcnZhbE1zPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCA1MC4gKi9cbiAgbWF4QmF0Y2hTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCAxMDAwLiBOZXcgZXZlbnRzIHBhc3QgdGhpcyBhcmUgZHJvcHBlZCB3aXRoIGEgd2FybmluZy4gKi9cbiAgbWF4UXVldWVTaXplPzogbnVtYmVyO1xuICAvKiogRGVmYXVsdCB0cnVlLiBTZXQgZmFsc2UgdG8gZGlzYWJsZSB0aGUgYXV0by1mbHVzaCB0aW1lciAodGVzdCBvbmx5KS4gKi9cbiAgZW5hYmxlVGltZXI/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0Q2xpZW50IHtcbiAgY29uZmlnKGlucHV0OiBQbGF0Zm9ybUNvbmZpZ0lucHV0KTogQXVkaXRDbGllbnQ7XG4gIGF1dGgoaW5wdXQ6IFBsYXRmb3JtQXV0aElucHV0IHwgUGxhdGZvcm1BdXRoKTogQXVkaXRDbGllbnQ7XG4gIHJlY29yZChldmVudDogQXVkaXRFdmVudElucHV0KTogdm9pZDtcbiAgZmx1c2goKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuY29uc3QgUEFUSCA9ICcvdjEvYXVkaXQvZXZlbnRzJztcbmNvbnN0IFJFVFJZX0RFTEFZU19NUyA9IFs1MDAsIDIwMDAsIDgwMDBdO1xuXG5jb25zdCBOT09QX0xPR0dFUiA9IHtcbiAgZXJyb3I6ICgpID0+IHt9LFxuICB3YXJuOiAoKSA9PiB7fSxcbiAgaW5mbzogKCkgPT4ge30sXG4gIGRlYnVnOiAoKSA9PiB7fSxcbiAgY2hpbGQoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG59IGFzIHVua25vd24gYXMgTG9nZ2VyO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQXVkaXRDbGllbnQoaW5wdXQ6IEF1ZGl0Q2xpZW50SW5wdXQgPSB7fSk6IEF1ZGl0Q2xpZW50IHtcbiAgY29uc3Qgc3RhdGUgPSBuZXcgQ29uZmlnU3RhdGUoKTtcbiAgY29uc3QgZmx1c2hJbnRlcnZhbE1zID0gaW5wdXQuZmx1c2hJbnRlcnZhbE1zID8/IDUwMDA7XG4gIGNvbnN0IG1heEJhdGNoU2l6ZSA9IGlucHV0Lm1heEJhdGNoU2l6ZSA/PyA1MDtcbiAgY29uc3QgbWF4UXVldWVTaXplID0gaW5wdXQubWF4UXVldWVTaXplID8/IDEwMDA7XG4gIGNvbnN0IGVuYWJsZVRpbWVyID0gaW5wdXQuZW5hYmxlVGltZXIgPz8gdHJ1ZTtcbiAgY29uc3QgYWN0b3JWaWEgPSBpbnB1dC5hY3RvclZpYTtcblxuICBjb25zdCB7XG4gICAgZmx1c2hJbnRlcnZhbE1zOiBfZixcbiAgICBtYXhCYXRjaFNpemU6IF9iLFxuICAgIG1heFF1ZXVlU2l6ZTogX3EsXG4gICAgZW5hYmxlVGltZXI6IF90LFxuICAgIGFjdG9yVmlhOiBfdixcbiAgICAuLi5yZXN0XG4gIH0gPSBpbnB1dDtcbiAgdm9pZCBfZjtcbiAgdm9pZCBfYjtcbiAgdm9pZCBfcTtcbiAgdm9pZCBfdDtcbiAgdm9pZCBfdjtcbiAgc3RhdGUuYXBwbHkocmVzdCk7XG5cbiAgY29uc3QgcXVldWU6IEF1ZGl0RXZlbnRbXSA9IFtdO1xuICBjb25zdCBpbmZsaWdodDogUHJvbWlzZTx2b2lkPltdID0gW107XG5cbiAgZnVuY3Rpb24gZ2V0TG9nZ2VyKCk6IExvZ2dlciB7XG4gICAgcmV0dXJuIHN0YXRlLnJlc29sdmUoKS5sb2dnZXIgPz8gTk9PUF9MT0dHRVI7XG4gIH1cblxuICBjb25zdCBjbGllbnQ6IEF1ZGl0Q2xpZW50ID0ge1xuICAgIGNvbmZpZyhvcHRzKSB7XG4gICAgICBzdGF0ZS5hcHBseShvcHRzKTtcbiAgICAgIHJldHVybiBjbGllbnQ7XG4gICAgfSxcbiAgICBhdXRoKG9wdHMpIHtcbiAgICAgIHN0YXRlLnNldEF1dGgob3B0cyk7XG4gICAgICByZXR1cm4gY2xpZW50O1xuICAgIH0sXG4gICAgcmVjb3JkKGlucHV0KSB7XG4gICAgICBjb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoKTtcbiAgICAgIGlmICghYWN0b3JWaWEpIHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsubWlzc2luZ19hY3Rvcl92aWEnLCB7XG4gICAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX01JU1NJTkdfQUNUT1JfVklBJywgY2F0ZWdvcnk6ICdlbmdpbmVlcmluZycgfSxcbiAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICAgICAnYXVkaXQgY2xpZW50IHJlcXVpcmVzIGBhY3RvclZpYWAgY29uZmlnICh0aGUgc2VydmljZSBpZGVudGlmaWVyIHRoaXMgcHJvZHVjZXIgYWN0cyBhcykuIFBhc3Mge2FjdG9yVmlhOiBcIjx5b3VyLXNlcnZpY2U+XCJ9IHRvIGNyZWF0ZUF1ZGl0Q2xpZW50IG9yIGNyZWF0ZUNsaWVudC4nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbmRpZGF0ZTogQXVkaXRFdmVudCA9IHtcbiAgICAgICAgLi4uaW5wdXQsXG4gICAgICAgIGV2ZW50X2lkOiB1bGlkKCksXG4gICAgICAgIG9jY3VycmVkX2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkucmVwbGFjZSgvXFwuXFxkezN9WiQvLCAnWicpLFxuICAgICAgICBhY3RvcjogeyAuLi5pbnB1dC5hY3RvciwgdmlhOiBhY3RvclZpYSB9LFxuICAgICAgfTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF1ZGl0RXZlbnRTY2hlbWEuc2FmZVBhcnNlKGNhbmRpZGF0ZSk7XG4gICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7XG4gICAgICAgIGxvZ2dlci5lcnJvcignYXVkaXRfc2RrLmludmFsaWRfZXZlbnQnLCB7XG4gICAgICAgICAgZXJyb3I6IHsgY29kZTogJ0FVRElUX0lOVkFMSURfRVZFTlQnLCBjYXRlZ29yeTogJ2VuZ2luZWVyaW5nJyB9LFxuICAgICAgICAgIGNvbnRleHQ6IHsgaXNzdWVzOiByZXN1bHQuZXJyb3IuaXNzdWVzLCBldmVudDogY2FuZGlkYXRlIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocXVldWUubGVuZ3RoID49IG1heFF1ZXVlU2l6ZSkge1xuICAgICAgICBsb2dnZXIud2FybignYXVkaXRfc2RrLnF1ZXVlX2Z1bGwnLCB7XG4gICAgICAgICAgY29udGV4dDogeyBkcm9wcGVkX2V2ZW50X2lkOiBjYW5kaWRhdGUuZXZlbnRfaWQsIG1heF9xdWV1ZV9zaXplOiBtYXhRdWV1ZVNpemUgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHF1ZXVlLnB1c2gocmVzdWx0LmRhdGEpO1xuICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+PSBtYXhCYXRjaFNpemUpIHtcbiAgICAgICAgdm9pZCBzY2hlZHVsZVNlbmQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFzeW5jIGZsdXNoKCkge1xuICAgICAgYXdhaXQgc2NoZWR1bGVTZW5kKCk7XG4gICAgICB3aGlsZSAoaW5mbGlnaHQubGVuZ3RoID4gMCkge1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoWy4uLmluZmxpZ2h0XSk7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBhc3luYyBmdW5jdGlvbiBzY2hlZHVsZVNlbmQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGJhdGNoID0gcXVldWUuc3BsaWNlKDAsIG1heEJhdGNoU2l6ZSk7XG4gICAgICBjb25zdCBzZW5kID0gc2VuZFdpdGhSZXRyaWVzKGJhdGNoKTtcbiAgICAgIGluZmxpZ2h0LnB1c2goc2VuZCk7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzZW5kO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY29uc3QgaWR4ID0gaW5mbGlnaHQuaW5kZXhPZihzZW5kKTtcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIGluZmxpZ2h0LnNwbGljZShpZHgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIHNlbmRXaXRoUmV0cmllcyhldmVudHM6IEF1ZGl0RXZlbnRbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcigpO1xuICAgIGNvbnN0IGJvZHkgPSBKU09OLnN0cmluZ2lmeSh7IGV2ZW50cyB9KTtcbiAgICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8PSBSRVRSWV9ERUxBWVNfTVMubGVuZ3RoOyBhdHRlbXB0KyspIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG9rID0gYXdhaXQgc2VuZE9uY2UoYm9keSk7XG4gICAgICAgIGlmIChvaykgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IGUgPSBlcnIgYXMgRXJyb3I7XG4gICAgICAgIGxvZ2dlci53YXJuKCdhdWRpdF9zZGsuc2VuZF9lcnJvcicsIHtcbiAgICAgICAgICBjb250ZXh0OiB7IGF0dGVtcHQsIG1lc3NhZ2U6IGUubWVzc2FnZSwgYmF0Y2hfc2l6ZTogZXZlbnRzLmxlbmd0aCB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0IDwgUkVUUllfREVMQVlTX01TLmxlbmd0aCkge1xuICAgICAgICBhd2FpdCBzbGVlcChSRVRSWV9ERUxBWVNfTVNbYXR0ZW1wdF0pO1xuICAgICAgfVxuICAgIH1cbiAgICBsb2dnZXIuZXJyb3IoJ2F1ZGl0X3Nkay5zZW5kX2ZhaWxlZCcsIHtcbiAgICAgIGVycm9yOiB7IGNvZGU6ICdBVURJVF9TRU5EX0ZBSUxFRCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICBjb250ZXh0OiB7IGJhdGNoX3NpemU6IGV2ZW50cy5sZW5ndGgsIGV2ZW50cyB9LFxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZnVuY3Rpb24gc2VuZE9uY2UoYm9keTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgY29uZmlnID0gc3RhdGUucmVzb2x2ZSgpO1xuICAgIGNvbnN0IGxvZ2dlciA9IGdldExvZ2dlcigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBhd2FpdCBidWlsZEhlYWRlcnMoY29uZmlnLCB7IG1ldGhvZDogJ1BPU1QnLCBwYXRoOiBQQVRILCBib2R5IH0pO1xuICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNvbmZpZy5mZXRjaEZuKGAke2NvbmZpZy5iYXNlVXJsfSR7UEFUSH1gLCB7XG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBib2R5LFxuICAgIH0pO1xuICAgIGlmIChyZXMuc3RhdHVzID49IDUwMCkgcmV0dXJuIGZhbHNlO1xuICAgIGlmICghcmVzLm9rICYmIHJlcy5zdGF0dXMgIT09IDIwMikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdhdWRpdF9zZGsucmVqZWN0ZWQnLCB7XG4gICAgICAgIGVycm9yOiB7IGNvZGU6ICdBVURJVF9SRUpFQ1RFRCcsIGNhdGVnb3J5OiAnZW5naW5lZXJpbmcnIH0sXG4gICAgICAgIGNvbnRleHQ6IHsgc3RhdHVzOiByZXMuc3RhdHVzIH0sXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+IHwgdW5kZWZpbmVkO1xuICBpZiAoZW5hYmxlVGltZXIpIHtcbiAgICB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIHZvaWQgc2NoZWR1bGVTZW5kKCk7XG4gICAgfSwgZmx1c2hJbnRlcnZhbE1zKTtcbiAgICBpZiAodHlwZW9mIHRpbWVyLnVucmVmID09PSAnZnVuY3Rpb24nKSB0aW1lci51bnJlZigpO1xuICB9XG5cbiAgcmV0dXJuIGNsaWVudDtcbn1cblxuZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHIpID0+IHNldFRpbWVvdXQociwgbXMpKTtcbn1cbiJdfQ==
|
package/dist/audit/index.d.ts
CHANGED
package/dist/audit/index.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createAuditClient = exports.
|
|
3
|
+
exports.createAuditClient = exports.auditBatchSchema = exports.auditEventSchema = void 0;
|
|
4
4
|
var schema_1 = require("./schema");
|
|
5
5
|
Object.defineProperty(exports, "auditEventSchema", { enumerable: true, get: function () { return schema_1.auditEventSchema; } });
|
|
6
6
|
Object.defineProperty(exports, "auditBatchSchema", { enumerable: true, get: function () { return schema_1.auditBatchSchema; } });
|
|
7
|
-
var sign_1 = require("./sign");
|
|
8
|
-
Object.defineProperty(exports, "signRequest", { enumerable: true, get: function () { return sign_1.signRequest; } });
|
|
9
7
|
var client_1 = require("./client");
|
|
10
8
|
Object.defineProperty(exports, "createAuditClient", { enumerable: true, get: function () { return client_1.createAuditClient; } });
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXVkaXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWdHO0FBQXZGLDBHQUFBLGdCQUFnQixPQUFBO0FBQUUsMEdBQUEsZ0JBQWdCLE9BQUE7QUFDM0MsbUNBS2tCO0FBSmhCLDJHQUFBLGlCQUFpQixPQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgYXVkaXRFdmVudFNjaGVtYSwgYXVkaXRCYXRjaFNjaGVtYSwgdHlwZSBBdWRpdEV2ZW50LCB0eXBlIEF1ZGl0QmF0Y2ggfSBmcm9tICcuL3NjaGVtYSc7XG5leHBvcnQge1xuICBjcmVhdGVBdWRpdENsaWVudCxcbiAgdHlwZSBBdWRpdENsaWVudCxcbiAgdHlwZSBBdWRpdENsaWVudElucHV0LFxuICB0eXBlIEF1ZGl0RXZlbnRJbnB1dCxcbn0gZnJvbSAnLi9jbGllbnQnO1xuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface AuthorizeUrlInput {
|
|
2
|
+
authBaseUrl?: string;
|
|
3
|
+
clientId: string;
|
|
4
|
+
redirectUri: string;
|
|
5
|
+
scope?: string;
|
|
6
|
+
tenant: string;
|
|
7
|
+
state?: string;
|
|
8
|
+
codeChallenge: string;
|
|
9
|
+
codeChallengeMethod?: 'S256';
|
|
10
|
+
nonce?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Build the `/authorize` URL the browser should be redirected to. The
|
|
14
|
+
* caller is responsible for storing `codeVerifier` (from `generatePKCE`)
|
|
15
|
+
* to round-trip into `exchangeCode` after the redirect comes back with
|
|
16
|
+
* `?code=...`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function createAuthorizeUrl(input: AuthorizeUrlInput): string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createAuthorizeUrl = createAuthorizeUrl;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const DEFAULT_AUTH_BASE_URL = 'https://api.platform.uengage.io/auth/business';
|
|
6
|
+
/**
|
|
7
|
+
* Build the `/authorize` URL the browser should be redirected to. The
|
|
8
|
+
* caller is responsible for storing `codeVerifier` (from `generatePKCE`)
|
|
9
|
+
* to round-trip into `exchangeCode` after the redirect comes back with
|
|
10
|
+
* `?code=...`.
|
|
11
|
+
*/
|
|
12
|
+
function createAuthorizeUrl(input) {
|
|
13
|
+
if (!input.clientId || !input.redirectUri || !input.tenant || !input.codeChallenge) {
|
|
14
|
+
throw new errors_1.ConfigError('createAuthorizeUrl requires clientId, redirectUri, tenant and codeChallenge');
|
|
15
|
+
}
|
|
16
|
+
const url = new URL(`${input.authBaseUrl ?? DEFAULT_AUTH_BASE_URL}/authorize`);
|
|
17
|
+
url.searchParams.set('response_type', 'code');
|
|
18
|
+
url.searchParams.set('client_id', input.clientId);
|
|
19
|
+
url.searchParams.set('redirect_uri', input.redirectUri);
|
|
20
|
+
if (input.scope)
|
|
21
|
+
url.searchParams.set('scope', input.scope);
|
|
22
|
+
url.searchParams.set('tenant', input.tenant);
|
|
23
|
+
if (input.state)
|
|
24
|
+
url.searchParams.set('state', input.state);
|
|
25
|
+
url.searchParams.set('code_challenge', input.codeChallenge);
|
|
26
|
+
url.searchParams.set('code_challenge_method', input.codeChallengeMethod ?? 'S256');
|
|
27
|
+
if (input.nonce)
|
|
28
|
+
url.searchParams.set('nonce', input.nonce);
|
|
29
|
+
return url.toString();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aG9yaXplLXVybC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2F1dGhvcml6ZS11cmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFzQkEsZ0RBaUJDO0FBdkNELHNDQUF3QztBQWN4QyxNQUFNLHFCQUFxQixHQUFHLCtDQUErQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0gsU0FBZ0Isa0JBQWtCLENBQUMsS0FBd0I7SUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNuRixNQUFNLElBQUksb0JBQVcsQ0FDbkIsNkVBQTZFLENBQzlFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLHFCQUFxQixZQUFZLENBQUMsQ0FBQztJQUMvRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDOUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxjQUFjLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hELElBQUksS0FBSyxDQUFDLEtBQUs7UUFBRSxHQUFHLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsSUFBSSxLQUFLLENBQUMsS0FBSztRQUFFLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxNQUFNLENBQUMsQ0FBQztJQUNuRixJQUFJLEtBQUssQ0FBQyxLQUFLO1FBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1RCxPQUFPLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uZmlnRXJyb3IgfSBmcm9tICcuLi9lcnJvcnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZVVybElucHV0IHtcbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIHJlZGlyZWN0VXJpOiBzdHJpbmc7XG4gIHNjb3BlPzogc3RyaW5nO1xuICB0ZW5hbnQ6IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIGNvZGVDaGFsbGVuZ2U6IHN0cmluZztcbiAgY29kZUNoYWxsZW5nZU1ldGhvZD86ICdTMjU2JztcbiAgbm9uY2U/OiBzdHJpbmc7XG59XG5cbmNvbnN0IERFRkFVTFRfQVVUSF9CQVNFX1VSTCA9ICdodHRwczovL2FwaS5wbGF0Zm9ybS51ZW5nYWdlLmlvL2F1dGgvYnVzaW5lc3MnO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBgL2F1dGhvcml6ZWAgVVJMIHRoZSBicm93c2VyIHNob3VsZCBiZSByZWRpcmVjdGVkIHRvLiBUaGVcbiAqIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3Igc3RvcmluZyBgY29kZVZlcmlmaWVyYCAoZnJvbSBgZ2VuZXJhdGVQS0NFYClcbiAqIHRvIHJvdW5kLXRyaXAgaW50byBgZXhjaGFuZ2VDb2RlYCBhZnRlciB0aGUgcmVkaXJlY3QgY29tZXMgYmFjayB3aXRoXG4gKiBgP2NvZGU9Li4uYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF1dGhvcml6ZVVybChpbnB1dDogQXV0aG9yaXplVXJsSW5wdXQpOiBzdHJpbmcge1xuICBpZiAoIWlucHV0LmNsaWVudElkIHx8ICFpbnB1dC5yZWRpcmVjdFVyaSB8fCAhaW5wdXQudGVuYW50IHx8ICFpbnB1dC5jb2RlQ2hhbGxlbmdlKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgJ2NyZWF0ZUF1dGhvcml6ZVVybCByZXF1aXJlcyBjbGllbnRJZCwgcmVkaXJlY3RVcmksIHRlbmFudCBhbmQgY29kZUNoYWxsZW5nZScsXG4gICAgKTtcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke2lucHV0LmF1dGhCYXNlVXJsID8/IERFRkFVTFRfQVVUSF9CQVNFX1VSTH0vYXV0aG9yaXplYCk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdyZXNwb25zZV90eXBlJywgJ2NvZGUnKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NsaWVudF9pZCcsIGlucHV0LmNsaWVudElkKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ3JlZGlyZWN0X3VyaScsIGlucHV0LnJlZGlyZWN0VXJpKTtcbiAgaWYgKGlucHV0LnNjb3BlKSB1cmwuc2VhcmNoUGFyYW1zLnNldCgnc2NvcGUnLCBpbnB1dC5zY29wZSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd0ZW5hbnQnLCBpbnB1dC50ZW5hbnQpO1xuICBpZiAoaW5wdXQuc3RhdGUpIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdzdGF0ZScsIGlucHV0LnN0YXRlKTtcbiAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2NvZGVfY2hhbGxlbmdlJywgaW5wdXQuY29kZUNoYWxsZW5nZSk7XG4gIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdjb2RlX2NoYWxsZW5nZV9tZXRob2QnLCBpbnB1dC5jb2RlQ2hhbGxlbmdlTWV0aG9kID8/ICdTMjU2Jyk7XG4gIGlmIChpbnB1dC5ub25jZSkgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ25vbmNlJywgaW5wdXQubm9uY2UpO1xuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface ExchangeCodeInput {
|
|
2
|
+
authBaseUrl?: string;
|
|
3
|
+
code: string;
|
|
4
|
+
codeVerifier: string;
|
|
5
|
+
clientId: string;
|
|
6
|
+
redirectUri: string;
|
|
7
|
+
}
|
|
8
|
+
export interface TokenPair {
|
|
9
|
+
accessToken: string;
|
|
10
|
+
refreshToken?: string;
|
|
11
|
+
idToken?: string;
|
|
12
|
+
expiresIn: number;
|
|
13
|
+
scope?: string;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Exchange an authorization code for an access + refresh + id token
|
|
17
|
+
* triple. PKCE verifier is included as `code_verifier` so the auth
|
|
18
|
+
* server can confirm the holder of the code is the same caller that
|
|
19
|
+
* initiated the flow.
|
|
20
|
+
*/
|
|
21
|
+
export declare function exchangeCode(input: ExchangeCodeInput): Promise<TokenPair>;
|
|
22
|
+
export declare function parseTokenResponse(res: Response): Promise<TokenPair>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exchangeCode = exchangeCode;
|
|
4
|
+
exports.parseTokenResponse = parseTokenResponse;
|
|
5
|
+
const errors_1 = require("../errors");
|
|
6
|
+
const DEFAULT_AUTH_BASE_URL = 'https://api.platform.uengage.io/auth/business';
|
|
7
|
+
/**
|
|
8
|
+
* Exchange an authorization code for an access + refresh + id token
|
|
9
|
+
* triple. PKCE verifier is included as `code_verifier` so the auth
|
|
10
|
+
* server can confirm the holder of the code is the same caller that
|
|
11
|
+
* initiated the flow.
|
|
12
|
+
*/
|
|
13
|
+
async function exchangeCode(input) {
|
|
14
|
+
const body = new URLSearchParams({
|
|
15
|
+
grant_type: 'authorization_code',
|
|
16
|
+
code: input.code,
|
|
17
|
+
code_verifier: input.codeVerifier,
|
|
18
|
+
client_id: input.clientId,
|
|
19
|
+
redirect_uri: input.redirectUri,
|
|
20
|
+
});
|
|
21
|
+
const res = await fetch(`${input.authBaseUrl ?? DEFAULT_AUTH_BASE_URL}/oauth/token`, {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
24
|
+
body: body.toString(),
|
|
25
|
+
});
|
|
26
|
+
return parseTokenResponse(res);
|
|
27
|
+
}
|
|
28
|
+
async function parseTokenResponse(res) {
|
|
29
|
+
let body;
|
|
30
|
+
try {
|
|
31
|
+
body = (await res.json());
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
throw new errors_1.PlatformError(`auth server returned non-JSON: HTTP ${res.status}`, {
|
|
35
|
+
status: res.status,
|
|
36
|
+
cause: err,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
if (!res.ok) {
|
|
40
|
+
const error = typeof body.error === 'string' ? body.error : 'auth_request_failed';
|
|
41
|
+
const description = typeof body.error_description === 'string' ? body.error_description : undefined;
|
|
42
|
+
if (res.status === 401) {
|
|
43
|
+
throw new errors_1.AuthenticationError(description ?? error, { cause: body });
|
|
44
|
+
}
|
|
45
|
+
throw new errors_1.PlatformError(description ?? error, { status: res.status, cause: body });
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
accessToken: String(body.access_token ?? ''),
|
|
49
|
+
refreshToken: typeof body.refresh_token === 'string' ? body.refresh_token : undefined,
|
|
50
|
+
idToken: typeof body.id_token === 'string' ? body.id_token : undefined,
|
|
51
|
+
expiresIn: Number(body.expires_in ?? 0),
|
|
52
|
+
scope: typeof body.scope === 'string' ? body.scope : undefined,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjaGFuZ2UtY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL2V4Y2hhbmdlLWNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUEwQkEsb0NBY0M7QUFFRCxnREEwQkM7QUFwRUQsc0NBQStEO0FBa0IvRCxNQUFNLHFCQUFxQixHQUFHLCtDQUErQyxDQUFDO0FBRTlFOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLFlBQVksQ0FBQyxLQUF3QjtJQUN6RCxNQUFNLElBQUksR0FBRyxJQUFJLGVBQWUsQ0FBQztRQUMvQixVQUFVLEVBQUUsb0JBQW9CO1FBQ2hDLElBQUksRUFBRSxLQUFLLENBQUMsSUFBSTtRQUNoQixhQUFhLEVBQUUsS0FBSyxDQUFDLFlBQVk7UUFDakMsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRO1FBQ3pCLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVztLQUNoQyxDQUFDLENBQUM7SUFDSCxNQUFNLEdBQUcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxXQUFXLElBQUkscUJBQXFCLGNBQWMsRUFBRTtRQUNuRixNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtRQUNoRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxPQUFPLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFTSxLQUFLLFVBQVUsa0JBQWtCLENBQUMsR0FBYTtJQUNwRCxJQUFJLElBQTZCLENBQUM7SUFDbEMsSUFBSSxDQUFDO1FBQ0gsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQTRCLENBQUM7SUFDdkQsQ0FBQztJQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDYixNQUFNLElBQUksc0JBQWEsQ0FBQyx1Q0FBdUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzNFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTTtZQUNsQixLQUFLLEVBQUUsR0FBRztTQUNYLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1osTUFBTSxLQUFLLEdBQUcsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUM7UUFDbEYsTUFBTSxXQUFXLEdBQ2YsT0FBTyxJQUFJLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUNsRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDdkIsTUFBTSxJQUFJLDRCQUFtQixDQUFDLFdBQVcsSUFBSSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQ0QsTUFBTSxJQUFJLHNCQUFhLENBQUMsV0FBVyxJQUFJLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JGLENBQUM7SUFDRCxPQUFPO1FBQ0wsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUM1QyxZQUFZLEVBQUUsT0FBTyxJQUFJLENBQUMsYUFBYSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUNyRixPQUFPLEVBQUUsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsU0FBUztRQUN0RSxTQUFTLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO0tBQy9ELENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXV0aGVudGljYXRpb25FcnJvciwgUGxhdGZvcm1FcnJvciB9IGZyb20gJy4uL2Vycm9ycyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXhjaGFuZ2VDb2RlSW5wdXQge1xuICBhdXRoQmFzZVVybD86IHN0cmluZztcbiAgY29kZTogc3RyaW5nO1xuICBjb2RlVmVyaWZpZXI6IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgcmVkaXJlY3RVcmk6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUb2tlblBhaXIge1xuICBhY2Nlc3NUb2tlbjogc3RyaW5nO1xuICByZWZyZXNoVG9rZW4/OiBzdHJpbmc7XG4gIGlkVG9rZW4/OiBzdHJpbmc7XG4gIGV4cGlyZXNJbjogbnVtYmVyO1xuICBzY29wZT86IHN0cmluZztcbn1cblxuY29uc3QgREVGQVVMVF9BVVRIX0JBU0VfVVJMID0gJ2h0dHBzOi8vYXBpLnBsYXRmb3JtLnVlbmdhZ2UuaW8vYXV0aC9idXNpbmVzcyc7XG5cbi8qKlxuICogRXhjaGFuZ2UgYW4gYXV0aG9yaXphdGlvbiBjb2RlIGZvciBhbiBhY2Nlc3MgKyByZWZyZXNoICsgaWQgdG9rZW5cbiAqIHRyaXBsZS4gUEtDRSB2ZXJpZmllciBpcyBpbmNsdWRlZCBhcyBgY29kZV92ZXJpZmllcmAgc28gdGhlIGF1dGhcbiAqIHNlcnZlciBjYW4gY29uZmlybSB0aGUgaG9sZGVyIG9mIHRoZSBjb2RlIGlzIHRoZSBzYW1lIGNhbGxlciB0aGF0XG4gKiBpbml0aWF0ZWQgdGhlIGZsb3cuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGNoYW5nZUNvZGUoaW5wdXQ6IEV4Y2hhbmdlQ29kZUlucHV0KTogUHJvbWlzZTxUb2tlblBhaXI+IHtcbiAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGdyYW50X3R5cGU6ICdhdXRob3JpemF0aW9uX2NvZGUnLFxuICAgIGNvZGU6IGlucHV0LmNvZGUsXG4gICAgY29kZV92ZXJpZmllcjogaW5wdXQuY29kZVZlcmlmaWVyLFxuICAgIGNsaWVudF9pZDogaW5wdXQuY2xpZW50SWQsXG4gICAgcmVkaXJlY3RfdXJpOiBpbnB1dC5yZWRpcmVjdFVyaSxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2lucHV0LmF1dGhCYXNlVXJsID8/IERFRkFVTFRfQVVUSF9CQVNFX1VSTH0vb2F1dGgvdG9rZW5gLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICBib2R5OiBib2R5LnRvU3RyaW5nKCksXG4gIH0pO1xuICByZXR1cm4gcGFyc2VUb2tlblJlc3BvbnNlKHJlcyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZVRva2VuUmVzcG9uc2UocmVzOiBSZXNwb25zZSk6IFByb21pc2U8VG9rZW5QYWlyPiB7XG4gIGxldCBib2R5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgdHJ5IHtcbiAgICBib2R5ID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgUGxhdGZvcm1FcnJvcihgYXV0aCBzZXJ2ZXIgcmV0dXJuZWQgbm9uLUpTT046IEhUVFAgJHtyZXMuc3RhdHVzfWAsIHtcbiAgICAgIHN0YXR1czogcmVzLnN0YXR1cyxcbiAgICAgIGNhdXNlOiBlcnIsXG4gICAgfSk7XG4gIH1cbiAgaWYgKCFyZXMub2spIHtcbiAgICBjb25zdCBlcnJvciA9IHR5cGVvZiBib2R5LmVycm9yID09PSAnc3RyaW5nJyA/IGJvZHkuZXJyb3IgOiAnYXV0aF9yZXF1ZXN0X2ZhaWxlZCc7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPVxuICAgICAgdHlwZW9mIGJvZHkuZXJyb3JfZGVzY3JpcHRpb24gPT09ICdzdHJpbmcnID8gYm9keS5lcnJvcl9kZXNjcmlwdGlvbiA6IHVuZGVmaW5lZDtcbiAgICBpZiAocmVzLnN0YXR1cyA9PT0gNDAxKSB7XG4gICAgICB0aHJvdyBuZXcgQXV0aGVudGljYXRpb25FcnJvcihkZXNjcmlwdGlvbiA/PyBlcnJvciwgeyBjYXVzZTogYm9keSB9KTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBsYXRmb3JtRXJyb3IoZGVzY3JpcHRpb24gPz8gZXJyb3IsIHsgc3RhdHVzOiByZXMuc3RhdHVzLCBjYXVzZTogYm9keSB9KTtcbiAgfVxuICByZXR1cm4ge1xuICAgIGFjY2Vzc1Rva2VuOiBTdHJpbmcoYm9keS5hY2Nlc3NfdG9rZW4gPz8gJycpLFxuICAgIHJlZnJlc2hUb2tlbjogdHlwZW9mIGJvZHkucmVmcmVzaF90b2tlbiA9PT0gJ3N0cmluZycgPyBib2R5LnJlZnJlc2hfdG9rZW4gOiB1bmRlZmluZWQsXG4gICAgaWRUb2tlbjogdHlwZW9mIGJvZHkuaWRfdG9rZW4gPT09ICdzdHJpbmcnID8gYm9keS5pZF90b2tlbiA6IHVuZGVmaW5lZCxcbiAgICBleHBpcmVzSW46IE51bWJlcihib2R5LmV4cGlyZXNfaW4gPz8gMCksXG4gICAgc2NvcGU6IHR5cGVvZiBib2R5LnNjb3BlID09PSAnc3RyaW5nJyA/IGJvZHkuc2NvcGUgOiB1bmRlZmluZWQsXG4gIH07XG59XG4iXX0=
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth namespace: helpers for OAuth2 flows against the platform's
|
|
3
|
+
* `/auth/business/*` surface. Consumers don't bake a `client_id` into
|
|
4
|
+
* the SDK itself — every helper takes parameters explicitly so multiple
|
|
5
|
+
* OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
|
|
6
|
+
*/
|
|
7
|
+
export { generatePKCE, type PkcePair } from './pkce';
|
|
8
|
+
export { createAuthorizeUrl, type AuthorizeUrlInput } from './authorize-url';
|
|
9
|
+
export { exchangeCode, parseTokenResponse, type ExchangeCodeInput, type TokenPair, } from './exchange-code';
|
|
10
|
+
export { refresh, type RefreshInput } from './refresh';
|
|
11
|
+
export { verifyAccessToken } from './verify';
|
|
12
|
+
export { getIssuer, getExpiry } from './issuer';
|
|
13
|
+
import { generatePKCE } from './pkce';
|
|
14
|
+
import { createAuthorizeUrl } from './authorize-url';
|
|
15
|
+
import { exchangeCode } from './exchange-code';
|
|
16
|
+
import { refresh } from './refresh';
|
|
17
|
+
import { verifyAccessToken } from './verify';
|
|
18
|
+
import { getIssuer, getExpiry } from './issuer';
|
|
19
|
+
/**
|
|
20
|
+
* Default singleton namespace for callers using the package singleton.
|
|
21
|
+
* import { auth } from '@uengage.io/platform-sdk';
|
|
22
|
+
* const pkce = auth.generatePKCE();
|
|
23
|
+
*/
|
|
24
|
+
export declare const auth: {
|
|
25
|
+
generatePKCE: typeof generatePKCE;
|
|
26
|
+
createAuthorizeUrl: typeof createAuthorizeUrl;
|
|
27
|
+
exchangeCode: typeof exchangeCode;
|
|
28
|
+
refresh: typeof refresh;
|
|
29
|
+
verifyAccessToken: typeof verifyAccessToken;
|
|
30
|
+
getIssuer: typeof getIssuer;
|
|
31
|
+
getExpiry: typeof getExpiry;
|
|
32
|
+
};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.auth = exports.getExpiry = exports.getIssuer = exports.verifyAccessToken = exports.refresh = exports.parseTokenResponse = exports.exchangeCode = exports.createAuthorizeUrl = exports.generatePKCE = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Auth namespace: helpers for OAuth2 flows against the platform's
|
|
6
|
+
* `/auth/business/*` surface. Consumers don't bake a `client_id` into
|
|
7
|
+
* the SDK itself — every helper takes parameters explicitly so multiple
|
|
8
|
+
* OAuth clients (dashboard, mobile, BFFs) can share one SDK install.
|
|
9
|
+
*/
|
|
10
|
+
var pkce_1 = require("./pkce");
|
|
11
|
+
Object.defineProperty(exports, "generatePKCE", { enumerable: true, get: function () { return pkce_1.generatePKCE; } });
|
|
12
|
+
var authorize_url_1 = require("./authorize-url");
|
|
13
|
+
Object.defineProperty(exports, "createAuthorizeUrl", { enumerable: true, get: function () { return authorize_url_1.createAuthorizeUrl; } });
|
|
14
|
+
var exchange_code_1 = require("./exchange-code");
|
|
15
|
+
Object.defineProperty(exports, "exchangeCode", { enumerable: true, get: function () { return exchange_code_1.exchangeCode; } });
|
|
16
|
+
Object.defineProperty(exports, "parseTokenResponse", { enumerable: true, get: function () { return exchange_code_1.parseTokenResponse; } });
|
|
17
|
+
var refresh_1 = require("./refresh");
|
|
18
|
+
Object.defineProperty(exports, "refresh", { enumerable: true, get: function () { return refresh_1.refresh; } });
|
|
19
|
+
var verify_1 = require("./verify");
|
|
20
|
+
Object.defineProperty(exports, "verifyAccessToken", { enumerable: true, get: function () { return verify_1.verifyAccessToken; } });
|
|
21
|
+
var issuer_1 = require("./issuer");
|
|
22
|
+
Object.defineProperty(exports, "getIssuer", { enumerable: true, get: function () { return issuer_1.getIssuer; } });
|
|
23
|
+
Object.defineProperty(exports, "getExpiry", { enumerable: true, get: function () { return issuer_1.getExpiry; } });
|
|
24
|
+
const pkce_2 = require("./pkce");
|
|
25
|
+
const authorize_url_2 = require("./authorize-url");
|
|
26
|
+
const exchange_code_2 = require("./exchange-code");
|
|
27
|
+
const refresh_2 = require("./refresh");
|
|
28
|
+
const verify_2 = require("./verify");
|
|
29
|
+
const issuer_2 = require("./issuer");
|
|
30
|
+
/**
|
|
31
|
+
* Default singleton namespace for callers using the package singleton.
|
|
32
|
+
* import { auth } from '@uengage.io/platform-sdk';
|
|
33
|
+
* const pkce = auth.generatePKCE();
|
|
34
|
+
*/
|
|
35
|
+
exports.auth = {
|
|
36
|
+
generatePKCE: pkce_2.generatePKCE,
|
|
37
|
+
createAuthorizeUrl: authorize_url_2.createAuthorizeUrl,
|
|
38
|
+
exchangeCode: exchange_code_2.exchangeCode,
|
|
39
|
+
refresh: refresh_2.refresh,
|
|
40
|
+
verifyAccessToken: verify_2.verifyAccessToken,
|
|
41
|
+
getIssuer: issuer_2.getIssuer,
|
|
42
|
+
getExpiry: issuer_2.getExpiry,
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXV0aC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTs7Ozs7R0FLRztBQUNILCtCQUFxRDtBQUE1QyxvR0FBQSxZQUFZLE9BQUE7QUFDckIsaURBQTZFO0FBQXBFLG1IQUFBLGtCQUFrQixPQUFBO0FBQzNCLGlEQUt5QjtBQUp2Qiw2R0FBQSxZQUFZLE9BQUE7QUFDWixtSEFBQSxrQkFBa0IsT0FBQTtBQUlwQixxQ0FBdUQ7QUFBOUMsa0dBQUEsT0FBTyxPQUFBO0FBQ2hCLG1DQUE2QztBQUFwQywyR0FBQSxpQkFBaUIsT0FBQTtBQUMxQixtQ0FBZ0Q7QUFBdkMsbUdBQUEsU0FBUyxPQUFBO0FBQUUsbUdBQUEsU0FBUyxPQUFBO0FBRTdCLGlDQUFzQztBQUN0QyxtREFBcUQ7QUFDckQsbURBQStDO0FBQy9DLHVDQUFvQztBQUNwQyxxQ0FBNkM7QUFDN0MscUNBQWdEO0FBRWhEOzs7O0dBSUc7QUFDVSxRQUFBLElBQUksR0FBRztJQUNsQixZQUFZLEVBQVosbUJBQVk7SUFDWixrQkFBa0IsRUFBbEIsa0NBQWtCO0lBQ2xCLFlBQVksRUFBWiw0QkFBWTtJQUNaLE9BQU8sRUFBUCxpQkFBTztJQUNQLGlCQUFpQixFQUFqQiwwQkFBaUI7SUFDakIsU0FBUyxFQUFULGtCQUFTO0lBQ1QsU0FBUyxFQUFULGtCQUFTO0NBQ1YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0aCBuYW1lc3BhY2U6IGhlbHBlcnMgZm9yIE9BdXRoMiBmbG93cyBhZ2FpbnN0IHRoZSBwbGF0Zm9ybSdzXG4gKiBgL2F1dGgvYnVzaW5lc3MvKmAgc3VyZmFjZS4gQ29uc3VtZXJzIGRvbid0IGJha2UgYSBgY2xpZW50X2lkYCBpbnRvXG4gKiB0aGUgU0RLIGl0c2VsZiDigJQgZXZlcnkgaGVscGVyIHRha2VzIHBhcmFtZXRlcnMgZXhwbGljaXRseSBzbyBtdWx0aXBsZVxuICogT0F1dGggY2xpZW50cyAoZGFzaGJvYXJkLCBtb2JpbGUsIEJGRnMpIGNhbiBzaGFyZSBvbmUgU0RLIGluc3RhbGwuXG4gKi9cbmV4cG9ydCB7IGdlbmVyYXRlUEtDRSwgdHlwZSBQa2NlUGFpciB9IGZyb20gJy4vcGtjZSc7XG5leHBvcnQgeyBjcmVhdGVBdXRob3JpemVVcmwsIHR5cGUgQXV0aG9yaXplVXJsSW5wdXQgfSBmcm9tICcuL2F1dGhvcml6ZS11cmwnO1xuZXhwb3J0IHtcbiAgZXhjaGFuZ2VDb2RlLFxuICBwYXJzZVRva2VuUmVzcG9uc2UsXG4gIHR5cGUgRXhjaGFuZ2VDb2RlSW5wdXQsXG4gIHR5cGUgVG9rZW5QYWlyLFxufSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuZXhwb3J0IHsgcmVmcmVzaCwgdHlwZSBSZWZyZXNoSW5wdXQgfSBmcm9tICcuL3JlZnJlc2gnO1xuZXhwb3J0IHsgdmVyaWZ5QWNjZXNzVG9rZW4gfSBmcm9tICcuL3ZlcmlmeSc7XG5leHBvcnQgeyBnZXRJc3N1ZXIsIGdldEV4cGlyeSB9IGZyb20gJy4vaXNzdWVyJztcblxuaW1wb3J0IHsgZ2VuZXJhdGVQS0NFIH0gZnJvbSAnLi9wa2NlJztcbmltcG9ydCB7IGNyZWF0ZUF1dGhvcml6ZVVybCB9IGZyb20gJy4vYXV0aG9yaXplLXVybCc7XG5pbXBvcnQgeyBleGNoYW5nZUNvZGUgfSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuaW1wb3J0IHsgcmVmcmVzaCB9IGZyb20gJy4vcmVmcmVzaCc7XG5pbXBvcnQgeyB2ZXJpZnlBY2Nlc3NUb2tlbiB9IGZyb20gJy4vdmVyaWZ5JztcbmltcG9ydCB7IGdldElzc3VlciwgZ2V0RXhwaXJ5IH0gZnJvbSAnLi9pc3N1ZXInO1xuXG4vKipcbiAqIERlZmF1bHQgc2luZ2xldG9uIG5hbWVzcGFjZSBmb3IgY2FsbGVycyB1c2luZyB0aGUgcGFja2FnZSBzaW5nbGV0b24uXG4gKiAgIGltcG9ydCB7IGF1dGggfSBmcm9tICdAdWVuZ2FnZS5pby9wbGF0Zm9ybS1zZGsnO1xuICogICBjb25zdCBwa2NlID0gYXV0aC5nZW5lcmF0ZVBLQ0UoKTtcbiAqL1xuZXhwb3J0IGNvbnN0IGF1dGggPSB7XG4gIGdlbmVyYXRlUEtDRSxcbiAgY3JlYXRlQXV0aG9yaXplVXJsLFxuICBleGNoYW5nZUNvZGUsXG4gIHJlZnJlc2gsXG4gIHZlcmlmeUFjY2Vzc1Rva2VuLFxuICBnZXRJc3N1ZXIsXG4gIGdldEV4cGlyeSxcbn07XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decode (without verifying) a JWT and return its `iss` claim. Used by
|
|
3
|
+
* the SDK to route subsequent auth-related calls (refresh, future
|
|
4
|
+
* logout) at `${iss}/...`, so tokens from different issuers are
|
|
5
|
+
* routed correctly when customer-auth ships alongside business-auth.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getIssuer(token: string): string | null;
|
|
8
|
+
/** Decode (without verifying) a JWT and return its `exp` claim (unix seconds). */
|
|
9
|
+
export declare function getExpiry(token: string): number | null;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getIssuer = getIssuer;
|
|
4
|
+
exports.getExpiry = getExpiry;
|
|
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.
|
|
10
|
+
*/
|
|
11
|
+
function getIssuer(token) {
|
|
12
|
+
const parts = token.split('.');
|
|
13
|
+
if (parts.length !== 3)
|
|
14
|
+
return null;
|
|
15
|
+
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;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/** Decode (without verifying) a JWT and return its `exp` claim (unix seconds). */
|
|
27
|
+
function getExpiry(token) {
|
|
28
|
+
const parts = token.split('.');
|
|
29
|
+
if (parts.length !== 3)
|
|
30
|
+
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
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXNzdWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2F1dGgvaXNzdWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBTUEsOEJBWUM7QUFHRCw4QkFZQztBQWpDRDs7Ozs7R0FLRztBQUNILFNBQWdCLFNBQVMsQ0FBQyxLQUFhO0lBQ3JDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPLElBQUksQ0FBQztJQUNwQyxJQUFJLENBQUM7UUFDSCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQy9ELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3RGLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBNEIsQ0FBQztRQUMzRCxPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUM1RCxDQUFDO0lBQUMsTUFBTSxDQUFDO1FBQ1AsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0FBQ0gsQ0FBQztBQUVELGtGQUFrRjtBQUNsRixTQUFnQixTQUFTLENBQUMsS0FBYTtJQUNyQyxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztRQUMvRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN0RixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQTRCLENBQUM7UUFDM0QsT0FBTyxPQUFPLE1BQU0sQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUQsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIERlY29kZSAod2l0aG91dCB2ZXJpZnlpbmcpIGEgSldUIGFuZCByZXR1cm4gaXRzIGBpc3NgIGNsYWltLiBVc2VkIGJ5XG4gKiB0aGUgU0RLIHRvIHJvdXRlIHN1YnNlcXVlbnQgYXV0aC1yZWxhdGVkIGNhbGxzIChyZWZyZXNoLCBmdXR1cmVcbiAqIGxvZ291dCkgYXQgYCR7aXNzfS8uLi5gLCBzbyB0b2tlbnMgZnJvbSBkaWZmZXJlbnQgaXNzdWVycyBhcmVcbiAqIHJvdXRlZCBjb3JyZWN0bHkgd2hlbiBjdXN0b21lci1hdXRoIHNoaXBzIGFsb25nc2lkZSBidXNpbmVzcy1hdXRoLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXNzdWVyKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcGFydHNbMV0ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBwYWRkZWQgPSBwYXlsb2FkLnBhZEVuZChwYXlsb2FkLmxlbmd0aCArICgoNCAtIChwYXlsb2FkLmxlbmd0aCAlIDQpKSAlIDQpLCAnPScpO1xuICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShwYWRkZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIGNvbnN0IGNsYWltcyA9IEpTT04ucGFyc2UoanNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuaXNzID09PSAnc3RyaW5nJyA/IGNsYWltcy5pc3MgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKiogRGVjb2RlICh3aXRob3V0IHZlcmlmeWluZykgYSBKV1QgYW5kIHJldHVybiBpdHMgYGV4cGAgY2xhaW0gKHVuaXggc2Vjb25kcykuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXhwaXJ5KHRva2VuOiBzdHJpbmcpOiBudW1iZXIgfCBudWxsIHtcbiAgY29uc3QgcGFydHMgPSB0b2tlbi5zcGxpdCgnLicpO1xuICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSByZXR1cm4gbnVsbDtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXlsb2FkID0gcGFydHNbMV0ucmVwbGFjZSgvLS9nLCAnKycpLnJlcGxhY2UoL18vZywgJy8nKTtcbiAgICBjb25zdCBwYWRkZWQgPSBwYXlsb2FkLnBhZEVuZChwYXlsb2FkLmxlbmd0aCArICgoNCAtIChwYXlsb2FkLmxlbmd0aCAlIDQpKSAlIDQpLCAnPScpO1xuICAgIGNvbnN0IGpzb24gPSBCdWZmZXIuZnJvbShwYWRkZWQsICdiYXNlNjQnKS50b1N0cmluZygndXRmOCcpO1xuICAgIGNvbnN0IGNsYWltcyA9IEpTT04ucGFyc2UoanNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgcmV0dXJuIHR5cGVvZiBjbGFpbXMuZXhwID09PSAnbnVtYmVyJyA/IGNsYWltcy5leHAgOiBudWxsO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PKCE (RFC 7636) S256 helper. Browser callers should pull `randomBytes`
|
|
3
|
+
* via the WebCrypto path instead — this package targets Node + bundlers
|
|
4
|
+
* that polyfill `node:crypto`. When the SDK ships a browser-only build
|
|
5
|
+
* we'll add a parallel implementation using `crypto.getRandomValues`.
|
|
6
|
+
*/
|
|
7
|
+
export interface PkcePair {
|
|
8
|
+
codeVerifier: string;
|
|
9
|
+
codeChallenge: string;
|
|
10
|
+
codeChallengeMethod: 'S256';
|
|
11
|
+
}
|
|
12
|
+
export declare function generatePKCE(): PkcePair;
|
|
13
|
+
export declare function base64url(buf: Buffer): string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generatePKCE = generatePKCE;
|
|
4
|
+
exports.base64url = base64url;
|
|
5
|
+
const node_crypto_1 = require("node:crypto");
|
|
6
|
+
function generatePKCE() {
|
|
7
|
+
const verifier = base64url((0, node_crypto_1.randomBytes)(32));
|
|
8
|
+
const challenge = base64url((0, node_crypto_1.createHash)('sha256').update(verifier).digest());
|
|
9
|
+
return { codeVerifier: verifier, codeChallenge: challenge, codeChallengeMethod: 'S256' };
|
|
10
|
+
}
|
|
11
|
+
function base64url(buf) {
|
|
12
|
+
return buf.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '');
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGtjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL3BrY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFjQSxvQ0FJQztBQUVELDhCQUVDO0FBdEJELDZDQUFzRDtBQWN0RCxTQUFnQixZQUFZO0lBQzFCLE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxJQUFBLHlCQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBQSx3QkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFDM0YsQ0FBQztBQUVELFNBQWdCLFNBQVMsQ0FBQyxHQUFXO0lBQ25DLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1RixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSGFzaCwgcmFuZG9tQnl0ZXMgfSBmcm9tICdub2RlOmNyeXB0byc7XG5cbi8qKlxuICogUEtDRSAoUkZDIDc2MzYpIFMyNTYgaGVscGVyLiBCcm93c2VyIGNhbGxlcnMgc2hvdWxkIHB1bGwgYHJhbmRvbUJ5dGVzYFxuICogdmlhIHRoZSBXZWJDcnlwdG8gcGF0aCBpbnN0ZWFkIOKAlCB0aGlzIHBhY2thZ2UgdGFyZ2V0cyBOb2RlICsgYnVuZGxlcnNcbiAqIHRoYXQgcG9seWZpbGwgYG5vZGU6Y3J5cHRvYC4gV2hlbiB0aGUgU0RLIHNoaXBzIGEgYnJvd3Nlci1vbmx5IGJ1aWxkXG4gKiB3ZSdsbCBhZGQgYSBwYXJhbGxlbCBpbXBsZW1lbnRhdGlvbiB1c2luZyBgY3J5cHRvLmdldFJhbmRvbVZhbHVlc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGtjZVBhaXIge1xuICBjb2RlVmVyaWZpZXI6IHN0cmluZztcbiAgY29kZUNoYWxsZW5nZTogc3RyaW5nO1xuICBjb2RlQ2hhbGxlbmdlTWV0aG9kOiAnUzI1Nic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVBLQ0UoKTogUGtjZVBhaXIge1xuICBjb25zdCB2ZXJpZmllciA9IGJhc2U2NHVybChyYW5kb21CeXRlcygzMikpO1xuICBjb25zdCBjaGFsbGVuZ2UgPSBiYXNlNjR1cmwoY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKHZlcmlmaWVyKS5kaWdlc3QoKSk7XG4gIHJldHVybiB7IGNvZGVWZXJpZmllcjogdmVyaWZpZXIsIGNvZGVDaGFsbGVuZ2U6IGNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZDogJ1MyNTYnIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYXNlNjR1cmwoYnVmOiBCdWZmZXIpOiBzdHJpbmcge1xuICByZXR1cm4gYnVmLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvZywgJycpO1xufVxuIl19
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type TokenPair } from './exchange-code';
|
|
2
|
+
export interface RefreshInput {
|
|
3
|
+
refreshToken: string;
|
|
4
|
+
/** Current access token; used to read `iss` for routing. */
|
|
5
|
+
accessToken: string;
|
|
6
|
+
clientId: string;
|
|
7
|
+
/** Override issuer-based routing for tests / non-standard flows. */
|
|
8
|
+
authBaseUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Trade an old refresh token for a fresh pair. Reads `iss` from the
|
|
12
|
+
* supplied access token so calls are routed back to the issuing auth
|
|
13
|
+
* service even when the SDK consumer has multiple issuers configured
|
|
14
|
+
* (business auth + future customer auth).
|
|
15
|
+
*/
|
|
16
|
+
export declare function refresh(input: RefreshInput): Promise<TokenPair>;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.refresh = refresh;
|
|
4
|
+
const errors_1 = require("../errors");
|
|
5
|
+
const exchange_code_1 = require("./exchange-code");
|
|
6
|
+
const issuer_1 = require("./issuer");
|
|
7
|
+
/**
|
|
8
|
+
* Trade an old refresh token for a fresh pair. Reads `iss` from the
|
|
9
|
+
* supplied access token so calls are routed back to the issuing auth
|
|
10
|
+
* service even when the SDK consumer has multiple issuers configured
|
|
11
|
+
* (business auth + future customer auth).
|
|
12
|
+
*/
|
|
13
|
+
async function refresh(input) {
|
|
14
|
+
const issuer = input.authBaseUrl ?? (0, issuer_1.getIssuer)(input.accessToken);
|
|
15
|
+
if (!issuer) {
|
|
16
|
+
throw new errors_1.ConfigError('cannot refresh: access token has no `iss` claim and no authBaseUrl was provided');
|
|
17
|
+
}
|
|
18
|
+
const body = new URLSearchParams({
|
|
19
|
+
grant_type: 'refresh_token',
|
|
20
|
+
refresh_token: input.refreshToken,
|
|
21
|
+
client_id: input.clientId,
|
|
22
|
+
});
|
|
23
|
+
const res = await fetch(`${issuer}/oauth/token`, {
|
|
24
|
+
method: 'POST',
|
|
25
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
26
|
+
body: body.toString(),
|
|
27
|
+
});
|
|
28
|
+
return (0, exchange_code_1.parseTokenResponse)(res);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmcmVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRoL3JlZnJlc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFtQkEsMEJBa0JDO0FBckNELHNDQUF3QztBQUN4QyxtREFBcUU7QUFDckUscUNBQXFDO0FBV3JDOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FBQyxLQUFtQjtJQUMvQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsV0FBVyxJQUFJLElBQUEsa0JBQVMsRUFBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7SUFDakUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ1osTUFBTSxJQUFJLG9CQUFXLENBQ25CLGlGQUFpRixDQUNsRixDQUFDO0lBQ0osQ0FBQztJQUNELE1BQU0sSUFBSSxHQUFHLElBQUksZUFBZSxDQUFDO1FBQy9CLFVBQVUsRUFBRSxlQUFlO1FBQzNCLGFBQWEsRUFBRSxLQUFLLENBQUMsWUFBWTtRQUNqQyxTQUFTLEVBQUUsS0FBSyxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxHQUFHLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxNQUFNLGNBQWMsRUFBRTtRQUMvQyxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRSxFQUFFLGNBQWMsRUFBRSxtQ0FBbUMsRUFBRTtRQUNoRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRTtLQUN0QixDQUFDLENBQUM7SUFDSCxPQUFPLElBQUEsa0NBQWtCLEVBQUMsR0FBRyxDQUFDLENBQUM7QUFDakMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbmZpZ0Vycm9yIH0gZnJvbSAnLi4vZXJyb3JzJztcbmltcG9ydCB7IHBhcnNlVG9rZW5SZXNwb25zZSwgdHlwZSBUb2tlblBhaXIgfSBmcm9tICcuL2V4Y2hhbmdlLWNvZGUnO1xuaW1wb3J0IHsgZ2V0SXNzdWVyIH0gZnJvbSAnLi9pc3N1ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlZnJlc2hJbnB1dCB7XG4gIHJlZnJlc2hUb2tlbjogc3RyaW5nO1xuICAvKiogQ3VycmVudCBhY2Nlc3MgdG9rZW47IHVzZWQgdG8gcmVhZCBgaXNzYCBmb3Igcm91dGluZy4gKi9cbiAgYWNjZXNzVG9rZW46IHN0cmluZztcbiAgY2xpZW50SWQ6IHN0cmluZztcbiAgLyoqIE92ZXJyaWRlIGlzc3Vlci1iYXNlZCByb3V0aW5nIGZvciB0ZXN0cyAvIG5vbi1zdGFuZGFyZCBmbG93cy4gKi9cbiAgYXV0aEJhc2VVcmw/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVHJhZGUgYW4gb2xkIHJlZnJlc2ggdG9rZW4gZm9yIGEgZnJlc2ggcGFpci4gUmVhZHMgYGlzc2AgZnJvbSB0aGVcbiAqIHN1cHBsaWVkIGFjY2VzcyB0b2tlbiBzbyBjYWxscyBhcmUgcm91dGVkIGJhY2sgdG8gdGhlIGlzc3VpbmcgYXV0aFxuICogc2VydmljZSBldmVuIHdoZW4gdGhlIFNESyBjb25zdW1lciBoYXMgbXVsdGlwbGUgaXNzdWVycyBjb25maWd1cmVkXG4gKiAoYnVzaW5lc3MgYXV0aCArIGZ1dHVyZSBjdXN0b21lciBhdXRoKS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlZnJlc2goaW5wdXQ6IFJlZnJlc2hJbnB1dCk6IFByb21pc2U8VG9rZW5QYWlyPiB7XG4gIGNvbnN0IGlzc3VlciA9IGlucHV0LmF1dGhCYXNlVXJsID8/IGdldElzc3VlcihpbnB1dC5hY2Nlc3NUb2tlbik7XG4gIGlmICghaXNzdWVyKSB7XG4gICAgdGhyb3cgbmV3IENvbmZpZ0Vycm9yKFxuICAgICAgJ2Nhbm5vdCByZWZyZXNoOiBhY2Nlc3MgdG9rZW4gaGFzIG5vIGBpc3NgIGNsYWltIGFuZCBubyBhdXRoQmFzZVVybCB3YXMgcHJvdmlkZWQnLFxuICAgICk7XG4gIH1cbiAgY29uc3QgYm9keSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgIGdyYW50X3R5cGU6ICdyZWZyZXNoX3Rva2VuJyxcbiAgICByZWZyZXNoX3Rva2VuOiBpbnB1dC5yZWZyZXNoVG9rZW4sXG4gICAgY2xpZW50X2lkOiBpbnB1dC5jbGllbnRJZCxcbiAgfSk7XG4gIGNvbnN0IHJlcyA9IGF3YWl0IGZldGNoKGAke2lzc3Vlcn0vb2F1dGgvdG9rZW5gLCB7XG4gICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgaGVhZGVyczogeyAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcgfSxcbiAgICBib2R5OiBib2R5LnRvU3RyaW5nKCksXG4gIH0pO1xuICByZXR1cm4gcGFyc2VUb2tlblJlc3BvbnNlKHJlcyk7XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify an access token: fetches JWKS based on the token's `iss`,
|
|
3
|
+
* verifies the RSA signature, and returns the claims. Throws on any
|
|
4
|
+
* failure so callers can `try/catch` once instead of branching on a
|
|
5
|
+
* boolean.
|
|
6
|
+
*
|
|
7
|
+
* The verification itself happens via `jose`'s `jwtVerify`, but to
|
|
8
|
+
* keep this module lightweight (and to avoid pulling jose into the
|
|
9
|
+
* Browser bundle when consumers only want the URL helpers) we
|
|
10
|
+
* dynamic-import it. Tree-shakers will drop the import for code paths
|
|
11
|
+
* that never call `verifyAccessToken`.
|
|
12
|
+
*/
|
|
13
|
+
export declare function verifyAccessToken(token: string, options?: {
|
|
14
|
+
audience?: string;
|
|
15
|
+
}): Promise<Record<string, unknown>>;
|
|
16
|
+
/** Test-only: clear the JWKS cache. */
|
|
17
|
+
export declare function _resetJwksCache(): void;
|