@caracalai/oauth 0.1.6-rc.2 → 0.2.0-rc.1
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/cache.d.ts +2 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +3 -0
- package/dist/cache.js.map +1 -1
- package/dist/client.d.ts +55 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +262 -164
- package/dist/client.js.map +1 -1
- package/dist/types.d.ts +62 -32
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +33 -9
- package/dist/types.js.map +1 -1
- package/package.json +4 -4
package/dist/cache.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { TokenExchangeResponse } from './types.js';
|
|
|
2
2
|
export interface TokenCache {
|
|
3
3
|
get(subjectToken: string, resource: string): TokenExchangeResponse | undefined;
|
|
4
4
|
set(subjectToken: string, resource: string, token: TokenExchangeResponse): void;
|
|
5
|
+
clear(): void;
|
|
5
6
|
}
|
|
6
7
|
export interface InMemoryTokenCacheOptions {
|
|
7
8
|
maxEntries?: number;
|
|
@@ -12,5 +13,6 @@ export declare class InMemoryTokenCache implements TokenCache {
|
|
|
12
13
|
constructor(opts?: InMemoryTokenCacheOptions);
|
|
13
14
|
get(subjectToken: string, resource: string): TokenExchangeResponse | undefined;
|
|
14
15
|
set(subjectToken: string, resource: string, token: TokenExchangeResponse): void;
|
|
16
|
+
clear(): void;
|
|
15
17
|
}
|
|
16
18
|
//# sourceMappingURL=cache.d.ts.map
|
package/dist/cache.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAA;IAC9E,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAEvD,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS,CAAA;IAC9E,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI,CAAA;IAC/E,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,yBAAyB;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAKD,qBAAa,kBAAmB,YAAW,UAAU;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA+E;IACnG,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;gBAEvB,IAAI,GAAE,yBAA8B;IAQhD,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,qBAAqB,GAAG,SAAS;IAa9E,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAe/E,KAAK,IAAI,IAAI;CAGd"}
|
package/dist/cache.js
CHANGED
|
@@ -44,6 +44,9 @@ export class InMemoryTokenCache {
|
|
|
44
44
|
this.map.delete(oldest);
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
+
clear() {
|
|
48
|
+
this.map.clear();
|
|
49
|
+
}
|
|
47
50
|
}
|
|
48
51
|
function cacheKey(subjectToken, resource) {
|
|
49
52
|
return createHmac('sha256', CACHE_KEY).update(subjectToken).update('\0').update(resource).digest('hex');
|
package/dist/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qCAAqC;AACrC,EAAE;AACF,sGAAsG;AAEtG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../src/cache.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qCAAqC;AACrC,EAAE;AACF,sGAAsG;AAEtG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAarD,MAAM,mBAAmB,GAAG,MAAM,CAAA;AAClC,MAAM,SAAS,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;AAEjC,MAAM,OAAO,kBAAkB;IACZ,GAAG,GAAG,IAAI,GAAG,EAAqE,CAAA;IAClF,UAAU,CAAQ;IAEnC,YAAY,OAAkC,EAAE;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,mBAAmB,CAAA;QAClD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,GAAG,CAAA;IACvB,CAAC;IAED,GAAG,CAAC,YAAoB,EAAE,QAAgB;QACxC,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC/B,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAA;QAC5B,IAAI,WAAW,CAAC,GAAG,EAAE,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC;YAC/C,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACxB,OAAO,KAAK,CAAC,KAAK,CAAA;IACpB,CAAC;IAED,GAAG,CAAC,YAAoB,EAAE,QAAgB,EAAE,KAA4B;QACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;QAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACtB,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,SAAS,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAC1E,IAAI,WAAW,IAAI,CAAC;YAAE,OAAM;QAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC,CAAA;QAC9E,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;YAC3C,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAK;YAC/B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;CACF;AAED,SAAS,QAAQ,CAAC,YAAoB,EAAE,QAAgB;IACtD,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACzG,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TokenCache } from './cache.js';
|
|
2
|
-
import type { ExchangeOptions, TokenExchangeResponse } from './types.js';
|
|
2
|
+
import type { ApprovalState, ExchangeOptions, OAuthEvent, TokenExchangeResponse } from './types.js';
|
|
3
3
|
export declare class OAuthClient {
|
|
4
4
|
private readonly stsUrl;
|
|
5
5
|
private readonly zoneId;
|
|
@@ -8,12 +8,66 @@ export declare class OAuthClient {
|
|
|
8
8
|
private readonly cache;
|
|
9
9
|
private readonly inflight;
|
|
10
10
|
private readonly identityKey;
|
|
11
|
+
/** Observability sink; each completed exchange and approval wait reports here. Failures inside the sink never reach the caller. */
|
|
12
|
+
onEvent?: (event: OAuthEvent) => void;
|
|
11
13
|
constructor(stsUrl: string, zoneId: string, applicationId: string, cache?: TokenCache, fetchImpl?: typeof fetch | undefined);
|
|
14
|
+
private emit;
|
|
15
|
+
/** Drops every cached token derived by this client. In-flight exchanges are not canceled. */
|
|
16
|
+
invalidate(): void;
|
|
12
17
|
exchange(subjectToken: string, resource: string | string[], opts?: ExchangeOptions): Promise<TokenExchangeResponse>;
|
|
13
18
|
private cacheSubject;
|
|
14
19
|
private cacheResource;
|
|
15
20
|
private normalizedScopes;
|
|
16
21
|
private authContext;
|
|
17
22
|
private doExchange;
|
|
23
|
+
/**
|
|
24
|
+
* Long-polls an approval until an approver decides it, it expires, or
|
|
25
|
+
* the timeout elapses. Returns the final lifecycle state: 'approved' means a
|
|
26
|
+
* retry of exchange() with challengeId will mint; 'rejected' and 'expired' are
|
|
27
|
+
* terminal; 'pending' means the timeout elapsed and waiting again is safe.
|
|
28
|
+
* Pass `signal` to abort the wait early.
|
|
29
|
+
*/
|
|
30
|
+
waitForApproval(approvalId: string, opts?: {
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
signal?: AbortSignal;
|
|
33
|
+
}): Promise<ApprovalState>;
|
|
34
|
+
/**
|
|
35
|
+
* Exchanges an end user's identity token from a zone-trusted external issuer
|
|
36
|
+
* for a Caracal Subject authority record. The application authenticates itself
|
|
37
|
+
* with its client secret and relays the token verbatim; the minted record is
|
|
38
|
+
* the subject's identity anchor and carries no resource authority. Never
|
|
39
|
+
* cached: each federation is an explicit identity event.
|
|
40
|
+
*/
|
|
41
|
+
federateSubject(idToken: string, opts?: {
|
|
42
|
+
clientSecret?: string;
|
|
43
|
+
ttlSeconds?: number;
|
|
44
|
+
timeoutMs?: number;
|
|
45
|
+
signal?: AbortSignal;
|
|
46
|
+
}): Promise<TokenExchangeResponse>;
|
|
47
|
+
/**
|
|
48
|
+
* Posts an end user's decision on a subject-reserved approval hold. The
|
|
49
|
+
* subject token is the user's federated session mandate, and the binding must
|
|
50
|
+
* echo the hold exactly - a prompt that does not know the held resource and
|
|
51
|
+
* scope set cannot decide it.
|
|
52
|
+
*/
|
|
53
|
+
decideApproval(input: {
|
|
54
|
+
subjectToken: string;
|
|
55
|
+
approvalId: string;
|
|
56
|
+
binding: string;
|
|
57
|
+
decision: 'approved' | 'rejected';
|
|
58
|
+
reason?: string;
|
|
59
|
+
timeoutMs?: number;
|
|
60
|
+
signal?: AbortSignal;
|
|
61
|
+
}): Promise<void>;
|
|
18
62
|
}
|
|
63
|
+
/**
|
|
64
|
+
* Long-polls an approval's lifecycle state against STS without any client
|
|
65
|
+
* context: only the approval id and the STS URL are required, so run launches and
|
|
66
|
+
* exchange clients share one polling path.
|
|
67
|
+
*/
|
|
68
|
+
export declare function pollStepUpState(stsUrl: string, approvalId: string, opts?: {
|
|
69
|
+
timeoutMs?: number;
|
|
70
|
+
signal?: AbortSignal;
|
|
71
|
+
fetchImpl?: typeof fetch;
|
|
72
|
+
}): Promise<ApprovalState>;
|
|
19
73
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAMA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AA4CnG,qBAAa,WAAW;IAQpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAX7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAC7E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,mIAAmI;IACnI,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;gBAGlB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACtC,KAAK,CAAC,EAAE,UAAU,EACD,SAAS,CAAC,EAAE,OAAO,KAAK,YAAA;IAM3C,OAAO,CAAC,IAAI;IASZ,6FAA6F;IAC7F,UAAU,IAAI,IAAI;IAIZ,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwE7H,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;YAIL,UAAU;IAyExB;;;;;;OAMG;IACG,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAa1H;;;;;;OAMG;IACG,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAAO,GAClG,OAAO,CAAC,qBAAqB,CAAC;IAmCjC;;;;;OAKG;IACG,cAAc,CAAC,KAAK,EAAE;QAC1B,YAAY,EAAE,MAAM,CAAA;QACpB,UAAU,EAAE,MAAM,CAAA;QAClB,OAAO,EAAE,MAAM,CAAA;QACf,QAAQ,EAAE,UAAU,GAAG,UAAU,CAAA;QACjC,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,WAAW,CAAA;KACrB,GAAG,OAAO,CAAC,IAAI,CAAC;CA0BlB;AAYD;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,KAAK,CAAA;CAAO,GAChF,OAAO,CAAC,aAAa,CAAC,CAcxB"}
|
package/dist/client.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
// Copyright (C) 2026 Garudex Labs. All Rights Reserved.
|
|
2
2
|
// Caracal, a product of Garudex Labs
|
|
3
3
|
//
|
|
4
|
-
// RFC 8693 token exchange client with pluggable token
|
|
4
|
+
// RFC 8693 token exchange client with pluggable token caching.
|
|
5
5
|
import { createHmac, randomBytes } from 'node:crypto';
|
|
6
6
|
import { InMemoryTokenCache } from './cache.js';
|
|
7
|
-
import {
|
|
7
|
+
import { CaracalError, ApprovalRequiredError, APPROVAL_STATES } from './types.js';
|
|
8
8
|
const SECRET_CACHE_KEY = randomBytes(32);
|
|
9
9
|
function parseSTSErrorResponse(body) {
|
|
10
10
|
if (body === '')
|
|
11
11
|
return {};
|
|
12
|
-
|
|
12
|
+
const parsed = JSON.parse(body);
|
|
13
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
14
|
+
throw new Error('invalid error response');
|
|
15
|
+
return parsed;
|
|
13
16
|
}
|
|
14
17
|
function formatSTSError(status, err) {
|
|
15
18
|
const base = err.error_description ?? `STS error ${status}`;
|
|
@@ -20,7 +23,7 @@ async function readSTSErrorResponse(res) {
|
|
|
20
23
|
return parseSTSErrorResponse(await res.text());
|
|
21
24
|
}
|
|
22
25
|
if (typeof res.json === 'function') {
|
|
23
|
-
return await res.json();
|
|
26
|
+
return (await res.json());
|
|
24
27
|
}
|
|
25
28
|
return {};
|
|
26
29
|
}
|
|
@@ -32,6 +35,8 @@ export class OAuthClient {
|
|
|
32
35
|
cache;
|
|
33
36
|
inflight = new Map();
|
|
34
37
|
identityKey;
|
|
38
|
+
/** Observability sink; each completed exchange and approval wait reports here. Failures inside the sink never reach the caller. */
|
|
39
|
+
onEvent;
|
|
35
40
|
constructor(stsUrl, zoneId, applicationId, cache, fetchImpl) {
|
|
36
41
|
this.stsUrl = stsUrl;
|
|
37
42
|
this.zoneId = zoneId;
|
|
@@ -40,65 +45,112 @@ export class OAuthClient {
|
|
|
40
45
|
this.cache = cache ?? new InMemoryTokenCache();
|
|
41
46
|
this.identityKey = `${zoneId}::${applicationId}`;
|
|
42
47
|
}
|
|
48
|
+
emit(event) {
|
|
49
|
+
if (!this.onEvent)
|
|
50
|
+
return;
|
|
51
|
+
try {
|
|
52
|
+
this.onEvent(event);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// The observability sink must never break the token path.
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Drops every cached token derived by this client. In-flight exchanges are not canceled. */
|
|
59
|
+
invalidate() {
|
|
60
|
+
this.cache.clear();
|
|
61
|
+
}
|
|
43
62
|
async exchange(subjectToken, resource, opts = {}) {
|
|
44
63
|
const timeoutMs = opts.timeoutMs ?? 30_000;
|
|
45
64
|
const preflightWindow = timeoutMs / 1000 + 30;
|
|
65
|
+
const oneShot = opts.cache === false || Boolean(opts.challengeId);
|
|
66
|
+
const resources = resourceList(resource);
|
|
67
|
+
const scopes = [...new Set(opts.scopes ?? [])].sort();
|
|
46
68
|
const cacheSubject = this.cacheSubject(subjectToken, opts);
|
|
47
69
|
const cacheResource = this.cacheResource(resource, opts);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
70
|
+
if (!oneShot && !opts.forceRefresh) {
|
|
71
|
+
const cached = this.cache.get(cacheSubject, cacheResource);
|
|
72
|
+
if (cached) {
|
|
73
|
+
// Cap the preflight window at half the token lifetime so short-lived
|
|
74
|
+
// tokens are still served from cache instead of re-minted every call.
|
|
75
|
+
const window = Math.min(preflightWindow, cached.expiresIn / 2);
|
|
76
|
+
const remaining = cached.issuedAt + cached.expiresIn - Date.now() / 1000;
|
|
77
|
+
if (remaining > window) {
|
|
78
|
+
this.emit({ type: 'token.exchange', resources, scopes, cached: true, ok: true, durationMs: 0 });
|
|
79
|
+
return cached;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
53
82
|
}
|
|
54
83
|
const inflightKey = `${cacheSubject}::${cacheResource}`;
|
|
84
|
+
if (oneShot) {
|
|
85
|
+
const start = performance.now();
|
|
86
|
+
try {
|
|
87
|
+
const token = await this.doExchange(subjectToken, resource, opts);
|
|
88
|
+
this.emit({ type: 'token.exchange', resources, scopes, cached: false, ok: true, durationMs: performance.now() - start });
|
|
89
|
+
return token;
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
this.emit({
|
|
93
|
+
type: 'token.exchange',
|
|
94
|
+
resources,
|
|
95
|
+
scopes,
|
|
96
|
+
cached: false,
|
|
97
|
+
ok: false,
|
|
98
|
+
durationMs: performance.now() - start,
|
|
99
|
+
...(err instanceof CaracalError ? { code: err.code, status: err.httpStatus } : {}),
|
|
100
|
+
});
|
|
101
|
+
throw err;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
55
104
|
const existing = this.inflight.get(inflightKey);
|
|
56
105
|
if (existing)
|
|
57
|
-
return existing;
|
|
106
|
+
return waitForShared(existing, opts.signal);
|
|
107
|
+
const start = performance.now();
|
|
58
108
|
const pending = (async () => {
|
|
59
109
|
try {
|
|
60
|
-
const token = await this.doExchange(subjectToken, resource, opts
|
|
110
|
+
const token = await this.doExchange(subjectToken, resource, opts);
|
|
61
111
|
this.cache.set(cacheSubject, cacheResource, token);
|
|
112
|
+
this.emit({ type: 'token.exchange', resources, scopes, cached: false, ok: true, durationMs: performance.now() - start });
|
|
62
113
|
return token;
|
|
63
114
|
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
this.emit({
|
|
117
|
+
type: 'token.exchange',
|
|
118
|
+
resources,
|
|
119
|
+
scopes,
|
|
120
|
+
cached: false,
|
|
121
|
+
ok: false,
|
|
122
|
+
durationMs: performance.now() - start,
|
|
123
|
+
...(err instanceof CaracalError ? { code: err.code, status: err.httpStatus } : {}),
|
|
124
|
+
});
|
|
125
|
+
throw err;
|
|
126
|
+
}
|
|
64
127
|
finally {
|
|
65
128
|
this.inflight.delete(inflightKey);
|
|
66
129
|
}
|
|
67
130
|
})();
|
|
68
131
|
this.inflight.set(inflightKey, pending);
|
|
69
|
-
return pending;
|
|
132
|
+
return waitForShared(pending, opts.signal);
|
|
70
133
|
}
|
|
71
134
|
cacheSubject(subjectToken, opts) {
|
|
72
135
|
return [
|
|
73
136
|
this.identityKey,
|
|
74
137
|
secretCacheId(subjectToken),
|
|
75
|
-
|
|
138
|
+
opts.authorityRecordId ?? '',
|
|
76
139
|
opts.sessionId ?? '',
|
|
77
|
-
opts.
|
|
78
|
-
opts.delegationEdgeId ?? '',
|
|
140
|
+
opts.delegationId ?? '',
|
|
79
141
|
this.authContext(opts),
|
|
80
|
-
secretCacheId(opts.clientAssertion),
|
|
81
142
|
].join('::');
|
|
82
143
|
}
|
|
83
144
|
cacheResource(resource, opts) {
|
|
84
|
-
return [
|
|
85
|
-
resourceList(resource).join(' '),
|
|
86
|
-
this.normalizedScopes(opts.scopes),
|
|
87
|
-
opts.ttlSeconds?.toString() ?? '',
|
|
88
|
-
opts.runtimeCredentialInjection === true ? 'runtime-credential-injection' : '',
|
|
89
|
-
].join('::');
|
|
145
|
+
return [resourceList(resource).join(' '), this.normalizedScopes(opts.scopes), opts.ttlSeconds?.toString() ?? ''].join('::');
|
|
90
146
|
}
|
|
91
147
|
normalizedScopes(scopes) {
|
|
92
148
|
return [...new Set(scopes ?? [])].sort().join(' ');
|
|
93
149
|
}
|
|
94
150
|
authContext(opts) {
|
|
95
|
-
return
|
|
96
|
-
opts.clientSecret ? `secret:${secretCacheId(opts.clientSecret)}` : '',
|
|
97
|
-
opts.clientAssertion ? 'assertion' : '',
|
|
98
|
-
opts.clientAssertionType ?? '',
|
|
99
|
-
].join(':');
|
|
151
|
+
return opts.clientSecret ? `secret:${secretCacheId(opts.clientSecret)}` : '';
|
|
100
152
|
}
|
|
101
|
-
async doExchange(subjectToken, resource, opts,
|
|
153
|
+
async doExchange(subjectToken, resource, opts, deadlineMs = performance.now() + (opts.timeoutMs ?? 30_000)) {
|
|
102
154
|
const body = new URLSearchParams({
|
|
103
155
|
grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
|
|
104
156
|
zone_id: this.zoneId,
|
|
@@ -112,64 +164,37 @@ export class OAuthClient {
|
|
|
112
164
|
body.append('resource', value);
|
|
113
165
|
if (opts.clientSecret)
|
|
114
166
|
body.set('client_secret', opts.clientSecret);
|
|
115
|
-
if (opts.
|
|
116
|
-
body.set('
|
|
117
|
-
if (opts.clientAssertionType)
|
|
118
|
-
body.set('client_assertion_type', opts.clientAssertionType);
|
|
119
|
-
if (opts.actorToken)
|
|
120
|
-
body.set('actor_token', opts.actorToken);
|
|
167
|
+
if (opts.authorityRecordId)
|
|
168
|
+
body.set('session_id', opts.authorityRecordId);
|
|
121
169
|
if (opts.sessionId)
|
|
122
|
-
body.set('
|
|
123
|
-
if (opts.
|
|
124
|
-
body.set('
|
|
125
|
-
if (opts.delegationEdgeId)
|
|
126
|
-
body.set('delegation_edge_id', opts.delegationEdgeId);
|
|
170
|
+
body.set('agent_session_id', opts.sessionId);
|
|
171
|
+
if (opts.delegationId)
|
|
172
|
+
body.set('delegation_edge_id', opts.delegationId);
|
|
127
173
|
const scope = this.normalizedScopes(opts.scopes);
|
|
128
174
|
if (scope)
|
|
129
175
|
body.set('scope', scope);
|
|
130
176
|
if (opts.ttlSeconds)
|
|
131
177
|
body.set('ttl_seconds', String(opts.ttlSeconds));
|
|
132
|
-
if (opts.
|
|
133
|
-
body.set('
|
|
134
|
-
|
|
178
|
+
if (opts.challengeId)
|
|
179
|
+
body.set('challenge_id', opts.challengeId);
|
|
180
|
+
if (opts.signal?.aborted)
|
|
181
|
+
throw abortReason(opts.signal);
|
|
182
|
+
const remainingMs = deadlineMs - performance.now();
|
|
183
|
+
if (remainingMs <= 0)
|
|
184
|
+
throw new Error('STS request timed out');
|
|
185
|
+
const controller = new AbortController();
|
|
186
|
+
const timeout = setTimeout(() => controller.abort(), remainingMs);
|
|
135
187
|
let res;
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
try {
|
|
144
|
-
res = await (this.fetchImpl ?? fetch)(`${this.stsUrl}/oauth/2/token`, {
|
|
145
|
-
method: 'POST',
|
|
146
|
-
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
147
|
-
body,
|
|
148
|
-
signal: controller.signal,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
catch (err) {
|
|
152
|
-
lastErr = err;
|
|
153
|
-
if (attempt === maxRetries)
|
|
154
|
-
throw err;
|
|
155
|
-
}
|
|
156
|
-
finally {
|
|
157
|
-
clearTimeout(timeout);
|
|
158
|
-
}
|
|
159
|
-
if (!res) {
|
|
160
|
-
await delayWithinDeadline(jitteredBackoff(attempt), deadlineMs);
|
|
161
|
-
continue;
|
|
162
|
-
}
|
|
163
|
-
const status = res.status;
|
|
164
|
-
const transient = status === 408 || status === 425 || status === 429 || (status >= 500 && status < 600);
|
|
165
|
-
if (!transient || attempt === maxRetries)
|
|
166
|
-
break;
|
|
167
|
-
await delayWithinDeadline(retryDelayMs(res, attempt), deadlineMs);
|
|
188
|
+
try {
|
|
189
|
+
res = await (this.fetchImpl ?? fetch)(`${this.stsUrl}/oauth/2/token`, {
|
|
190
|
+
method: 'POST',
|
|
191
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
192
|
+
body,
|
|
193
|
+
signal: opts.signal ? AbortSignal.any([controller.signal, opts.signal]) : controller.signal,
|
|
194
|
+
});
|
|
168
195
|
}
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
throw lastErr;
|
|
172
|
-
throw new Error('STS request failed: no response');
|
|
196
|
+
finally {
|
|
197
|
+
clearTimeout(timeout);
|
|
173
198
|
}
|
|
174
199
|
if (!res.ok) {
|
|
175
200
|
let err;
|
|
@@ -180,12 +205,20 @@ export class OAuthClient {
|
|
|
180
205
|
throw new Error(`STS error ${res.status}: invalid error response`);
|
|
181
206
|
}
|
|
182
207
|
if (err['error'] === 'interaction_required') {
|
|
183
|
-
throw new
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
208
|
+
throw new ApprovalRequiredError(err['error_description'] ?? 'Approval required', err['challenge_id'] ?? '', {
|
|
209
|
+
resource: resourceList(resource)[0],
|
|
210
|
+
state: err['state'],
|
|
211
|
+
tier: err['tier'],
|
|
212
|
+
binding: err['binding'],
|
|
213
|
+
expiresAt: err['challenge_expires_at'],
|
|
214
|
+
requestId: err['requestId'],
|
|
215
|
+
httpStatus: res.status,
|
|
216
|
+
});
|
|
187
217
|
}
|
|
188
|
-
throw new
|
|
218
|
+
throw new CaracalError(err.error || 'error', formatSTSError(res.status, err), {
|
|
219
|
+
requestId: err.requestId,
|
|
220
|
+
httpStatus: res.status,
|
|
221
|
+
});
|
|
189
222
|
}
|
|
190
223
|
if (!isJsonResponse(res)) {
|
|
191
224
|
throw new Error('STS response invalid: expected application/json');
|
|
@@ -193,6 +226,151 @@ export class OAuthClient {
|
|
|
193
226
|
const data = (await res.json());
|
|
194
227
|
return validateSuccessResponse(data);
|
|
195
228
|
}
|
|
229
|
+
/**
|
|
230
|
+
* Long-polls an approval until an approver decides it, it expires, or
|
|
231
|
+
* the timeout elapses. Returns the final lifecycle state: 'approved' means a
|
|
232
|
+
* retry of exchange() with challengeId will mint; 'rejected' and 'expired' are
|
|
233
|
+
* terminal; 'pending' means the timeout elapsed and waiting again is safe.
|
|
234
|
+
* Pass `signal` to abort the wait early.
|
|
235
|
+
*/
|
|
236
|
+
async waitForApproval(approvalId, opts = {}) {
|
|
237
|
+
if (!approvalId)
|
|
238
|
+
throw new Error('waitForApproval requires an approvalId');
|
|
239
|
+
const start = performance.now();
|
|
240
|
+
try {
|
|
241
|
+
const state = await pollStepUpState(this.stsUrl, approvalId, { ...opts, fetchImpl: this.fetchImpl });
|
|
242
|
+
this.emit({ type: 'approval.wait', approvalId, state, ok: true, durationMs: performance.now() - start });
|
|
243
|
+
return state;
|
|
244
|
+
}
|
|
245
|
+
catch (err) {
|
|
246
|
+
this.emit({ type: 'approval.wait', approvalId, state: '', ok: false, durationMs: performance.now() - start });
|
|
247
|
+
throw err;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Exchanges an end user's identity token from a zone-trusted external issuer
|
|
252
|
+
* for a Caracal Subject authority record. The application authenticates itself
|
|
253
|
+
* with its client secret and relays the token verbatim; the minted record is
|
|
254
|
+
* the subject's identity anchor and carries no resource authority. Never
|
|
255
|
+
* cached: each federation is an explicit identity event.
|
|
256
|
+
*/
|
|
257
|
+
async federateSubject(idToken, opts = {}) {
|
|
258
|
+
if (!idToken)
|
|
259
|
+
throw new Error('federateSubject requires the end user identity token');
|
|
260
|
+
const body = new URLSearchParams({
|
|
261
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange',
|
|
262
|
+
zone_id: this.zoneId,
|
|
263
|
+
application_id: this.applicationId,
|
|
264
|
+
subject_token: idToken,
|
|
265
|
+
subject_token_type: 'urn:ietf:params:oauth:token-type:id_token',
|
|
266
|
+
});
|
|
267
|
+
if (opts.clientSecret)
|
|
268
|
+
body.set('client_secret', opts.clientSecret);
|
|
269
|
+
if (opts.ttlSeconds)
|
|
270
|
+
body.set('ttl_seconds', String(opts.ttlSeconds));
|
|
271
|
+
const controller = new AbortController();
|
|
272
|
+
const timeout = setTimeout(() => controller.abort(), opts.timeoutMs ?? 30_000);
|
|
273
|
+
try {
|
|
274
|
+
const res = await (this.fetchImpl ?? fetch)(`${this.stsUrl}/oauth/2/token`, {
|
|
275
|
+
method: 'POST',
|
|
276
|
+
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
|
|
277
|
+
body,
|
|
278
|
+
signal: opts.signal ? AbortSignal.any([controller.signal, opts.signal]) : controller.signal,
|
|
279
|
+
});
|
|
280
|
+
if (!res.ok) {
|
|
281
|
+
let err;
|
|
282
|
+
try {
|
|
283
|
+
err = await readSTSErrorResponse(res);
|
|
284
|
+
}
|
|
285
|
+
catch {
|
|
286
|
+
throw new Error(`STS error ${res.status}: invalid error response`);
|
|
287
|
+
}
|
|
288
|
+
throw new CaracalError(err.error ?? 'federation_failed', formatSTSError(res.status, err), { httpStatus: res.status });
|
|
289
|
+
}
|
|
290
|
+
return validateSuccessResponse((await res.json()));
|
|
291
|
+
}
|
|
292
|
+
finally {
|
|
293
|
+
clearTimeout(timeout);
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Posts an end user's decision on a subject-reserved approval hold. The
|
|
298
|
+
* subject token is the user's federated session mandate, and the binding must
|
|
299
|
+
* echo the hold exactly - a prompt that does not know the held resource and
|
|
300
|
+
* scope set cannot decide it.
|
|
301
|
+
*/
|
|
302
|
+
async decideApproval(input) {
|
|
303
|
+
if (!input.subjectToken || !input.approvalId || !input.binding) {
|
|
304
|
+
throw new Error('decideApproval requires subjectToken, approvalId, and binding');
|
|
305
|
+
}
|
|
306
|
+
const controller = new AbortController();
|
|
307
|
+
const timeout = setTimeout(() => controller.abort(), input.timeoutMs ?? 30_000);
|
|
308
|
+
try {
|
|
309
|
+
const res = await (this.fetchImpl ?? fetch)(`${this.stsUrl}/step-up/${encodeURIComponent(input.approvalId)}/decision`, {
|
|
310
|
+
method: 'POST',
|
|
311
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${input.subjectToken}` },
|
|
312
|
+
body: JSON.stringify({ decision: input.decision, binding: input.binding, ...(input.reason ? { reason: input.reason } : {}) }),
|
|
313
|
+
signal: input.signal ? AbortSignal.any([controller.signal, input.signal]) : controller.signal,
|
|
314
|
+
});
|
|
315
|
+
if (!res.ok) {
|
|
316
|
+
let err;
|
|
317
|
+
try {
|
|
318
|
+
err = await readSTSErrorResponse(res);
|
|
319
|
+
}
|
|
320
|
+
catch {
|
|
321
|
+
throw new Error(`approval decision failed: ${res.status}`);
|
|
322
|
+
}
|
|
323
|
+
throw new CaracalError(err.error ?? 'decision_failed', formatSTSError(res.status, err), { httpStatus: res.status });
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
finally {
|
|
327
|
+
clearTimeout(timeout);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
async function waitForShared(pending, signal) {
|
|
332
|
+
if (!signal)
|
|
333
|
+
return pending;
|
|
334
|
+
if (signal.aborted)
|
|
335
|
+
throw abortReason(signal);
|
|
336
|
+
return new Promise((resolve, reject) => {
|
|
337
|
+
const abort = () => reject(abortReason(signal));
|
|
338
|
+
signal.addEventListener('abort', abort, { once: true });
|
|
339
|
+
pending.then(resolve, reject).finally(() => signal.removeEventListener('abort', abort));
|
|
340
|
+
});
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Long-polls an approval's lifecycle state against STS without any client
|
|
344
|
+
* context: only the approval id and the STS URL are required, so run launches and
|
|
345
|
+
* exchange clients share one polling path.
|
|
346
|
+
*/
|
|
347
|
+
export async function pollStepUpState(stsUrl, approvalId, opts = {}) {
|
|
348
|
+
const deadline = performance.now() + (opts.timeoutMs ?? 300_000);
|
|
349
|
+
for (;;) {
|
|
350
|
+
if (opts.signal?.aborted)
|
|
351
|
+
throw abortReason(opts.signal);
|
|
352
|
+
const remainingMs = deadline - performance.now();
|
|
353
|
+
if (remainingMs <= 0)
|
|
354
|
+
return 'pending';
|
|
355
|
+
const wait = Math.max(1, Math.min(25, Math.floor(remainingMs / 1000)));
|
|
356
|
+
const timeout = AbortSignal.timeout(Math.max(1, Math.ceil(remainingMs)));
|
|
357
|
+
const signal = opts.signal ? AbortSignal.any([timeout, opts.signal]) : timeout;
|
|
358
|
+
const res = await (opts.fetchImpl ?? fetch)(`${stsUrl}/step-up/${encodeURIComponent(approvalId)}?wait=${wait}`, { signal });
|
|
359
|
+
if (!res.ok)
|
|
360
|
+
throw new Error(`step-up status failed: ${res.status}`);
|
|
361
|
+
const data = (await res.json());
|
|
362
|
+
if (typeof data.state === 'string' && data.state !== 'pending')
|
|
363
|
+
return approvalState(data.state);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
function approvalState(value) {
|
|
367
|
+
if (!APPROVAL_STATES.includes(value)) {
|
|
368
|
+
throw new Error(`step-up status returned an unknown challenge state: ${value}`);
|
|
369
|
+
}
|
|
370
|
+
return value;
|
|
371
|
+
}
|
|
372
|
+
function abortReason(signal) {
|
|
373
|
+
return signal.reason instanceof Error ? signal.reason : new Error('aborted');
|
|
196
374
|
}
|
|
197
375
|
function validateSuccessResponse(data) {
|
|
198
376
|
if (typeof data.access_token !== 'string' || data.access_token === '') {
|
|
@@ -217,88 +395,8 @@ function validateSuccessResponse(data) {
|
|
|
217
395
|
}
|
|
218
396
|
response.targetResources = data.target_resources;
|
|
219
397
|
}
|
|
220
|
-
if (data.upstreams !== undefined)
|
|
221
|
-
response.upstreams = validateUpstreams(data.upstreams);
|
|
222
398
|
return response;
|
|
223
399
|
}
|
|
224
|
-
function validateUpstreams(value) {
|
|
225
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
226
|
-
throw new Error('STS response invalid: upstreams must be an object');
|
|
227
|
-
}
|
|
228
|
-
const upstreams = {};
|
|
229
|
-
for (const [resource, directive] of Object.entries(value)) {
|
|
230
|
-
if (!directive || typeof directive !== 'object' || Array.isArray(directive)) {
|
|
231
|
-
throw new Error('STS response invalid: upstream directive must be an object');
|
|
232
|
-
}
|
|
233
|
-
const item = directive;
|
|
234
|
-
upstreams[resource] = {
|
|
235
|
-
url: optionalString(item.url, 'upstreams.url'),
|
|
236
|
-
authMode: optionalString(item.auth_mode, 'upstreams.auth_mode'),
|
|
237
|
-
authLocation: optionalString(item.auth_location, 'upstreams.auth_location'),
|
|
238
|
-
authHeader: optionalString(item.auth_header, 'upstreams.auth_header'),
|
|
239
|
-
queryParamName: optionalString(item.query_param_name, 'upstreams.query_param_name'),
|
|
240
|
-
authScheme: optionalString(item.auth_scheme, 'upstreams.auth_scheme'),
|
|
241
|
-
allowedTokenHosts: optionalStringArray(item.allowed_token_hosts, 'upstreams.allowed_token_hosts'),
|
|
242
|
-
providerToken: optionalString(item.provider_token, 'upstreams.provider_token'),
|
|
243
|
-
providerId: optionalString(item.provider_id, 'upstreams.provider_id'),
|
|
244
|
-
grantId: optionalString(item.grant_id, 'upstreams.grant_id'),
|
|
245
|
-
forwardCaracalIdentity: optionalBoolean(item.forward_caracal_identity, 'upstreams.forward_caracal_identity'),
|
|
246
|
-
expiresAt: optionalInteger(item.expires_at, 'upstreams.expires_at'),
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
return upstreams;
|
|
250
|
-
}
|
|
251
|
-
function optionalString(value, name) {
|
|
252
|
-
if (value === undefined)
|
|
253
|
-
return undefined;
|
|
254
|
-
if (typeof value !== 'string')
|
|
255
|
-
throw new Error(`STS response invalid: ${name} must be a string`);
|
|
256
|
-
return value;
|
|
257
|
-
}
|
|
258
|
-
function optionalStringArray(value, name) {
|
|
259
|
-
if (value === undefined)
|
|
260
|
-
return undefined;
|
|
261
|
-
if (!Array.isArray(value) || value.some((item) => typeof item !== 'string')) {
|
|
262
|
-
throw new Error(`STS response invalid: ${name} must be a string array`);
|
|
263
|
-
}
|
|
264
|
-
return value;
|
|
265
|
-
}
|
|
266
|
-
function optionalBoolean(value, name) {
|
|
267
|
-
if (value === undefined)
|
|
268
|
-
return undefined;
|
|
269
|
-
if (typeof value !== 'boolean')
|
|
270
|
-
throw new Error(`STS response invalid: ${name} must be a boolean`);
|
|
271
|
-
return value;
|
|
272
|
-
}
|
|
273
|
-
function optionalInteger(value, name) {
|
|
274
|
-
if (value === undefined)
|
|
275
|
-
return undefined;
|
|
276
|
-
if (typeof value !== 'number' || !Number.isInteger(value))
|
|
277
|
-
throw new Error(`STS response invalid: ${name} must be an integer`);
|
|
278
|
-
return value;
|
|
279
|
-
}
|
|
280
|
-
function retryDelayMs(res, attempt) {
|
|
281
|
-
const retryAfter = res.headers?.get('retry-after');
|
|
282
|
-
if (retryAfter) {
|
|
283
|
-
const secs = Number(retryAfter);
|
|
284
|
-
if (Number.isFinite(secs))
|
|
285
|
-
return Math.max(0, secs * 1000);
|
|
286
|
-
const date = Date.parse(retryAfter);
|
|
287
|
-
if (!Number.isNaN(date))
|
|
288
|
-
return Math.max(0, date - Date.now());
|
|
289
|
-
}
|
|
290
|
-
return jitteredBackoff(attempt);
|
|
291
|
-
}
|
|
292
|
-
function jitteredBackoff(attempt) {
|
|
293
|
-
const base = Math.min(2 ** attempt * 250, 5_000);
|
|
294
|
-
return base / 2 + Math.random() * (base / 2);
|
|
295
|
-
}
|
|
296
|
-
async function delayWithinDeadline(waitMs, deadlineMs) {
|
|
297
|
-
const remainingMs = deadlineMs - performance.now();
|
|
298
|
-
if (remainingMs <= 0)
|
|
299
|
-
throw new Error('STS request timed out');
|
|
300
|
-
await new Promise(resolve => setTimeout(resolve, Math.min(waitMs, remainingMs)));
|
|
301
|
-
}
|
|
302
400
|
function isJsonResponse(res) {
|
|
303
401
|
const contentType = res.headers?.get('content-type');
|
|
304
402
|
if (contentType === null || contentType === undefined)
|
|
@@ -312,6 +410,6 @@ function secretCacheId(value) {
|
|
|
312
410
|
return createHmac('sha256', SECRET_CACHE_KEY).update(value).digest('hex');
|
|
313
411
|
}
|
|
314
412
|
function resourceList(resource) {
|
|
315
|
-
return (Array.isArray(resource) ? resource : [resource]).map(value => value.trim()).filter(Boolean);
|
|
413
|
+
return [...new Set((Array.isArray(resource) ? resource : [resource]).map((value) => value.trim()).filter(Boolean))].sort();
|
|
316
414
|
}
|
|
317
415
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -1,32 +1,15 @@
|
|
|
1
1
|
import { CaracalError } from '@caracalai/core';
|
|
2
|
+
export { CaracalError };
|
|
2
3
|
export interface TokenExchangeRequest {
|
|
3
4
|
subjectToken: string;
|
|
4
5
|
resource: string | string[];
|
|
5
6
|
clientId: string;
|
|
6
7
|
clientSecret?: string;
|
|
7
|
-
|
|
8
|
-
clientAssertionType?: string;
|
|
9
|
-
actorToken?: string;
|
|
8
|
+
authorityRecordId?: string;
|
|
10
9
|
sessionId?: string;
|
|
11
|
-
|
|
12
|
-
delegationEdgeId?: string;
|
|
10
|
+
delegationId?: string;
|
|
13
11
|
scopes?: string[];
|
|
14
12
|
ttlSeconds?: number;
|
|
15
|
-
runtimeCredentialInjection?: boolean;
|
|
16
|
-
}
|
|
17
|
-
export interface UpstreamDirective {
|
|
18
|
-
url?: string;
|
|
19
|
-
authMode?: string;
|
|
20
|
-
authLocation?: string;
|
|
21
|
-
authHeader?: string;
|
|
22
|
-
queryParamName?: string;
|
|
23
|
-
authScheme?: string;
|
|
24
|
-
allowedTokenHosts?: string[];
|
|
25
|
-
providerToken?: string;
|
|
26
|
-
providerId?: string;
|
|
27
|
-
grantId?: string;
|
|
28
|
-
forwardCaracalIdentity?: boolean;
|
|
29
|
-
expiresAt?: number;
|
|
30
13
|
}
|
|
31
14
|
export interface TokenExchangeResponse {
|
|
32
15
|
accessToken: string;
|
|
@@ -34,26 +17,73 @@ export interface TokenExchangeResponse {
|
|
|
34
17
|
expiresIn: number;
|
|
35
18
|
issuedAt: number;
|
|
36
19
|
targetResources?: string[];
|
|
37
|
-
upstreams?: Record<string, UpstreamDirective>;
|
|
38
20
|
}
|
|
39
21
|
export interface ExchangeOptions {
|
|
40
22
|
clientSecret?: string;
|
|
41
|
-
|
|
42
|
-
clientAssertionType?: string;
|
|
43
|
-
actorToken?: string;
|
|
23
|
+
authorityRecordId?: string;
|
|
44
24
|
sessionId?: string;
|
|
45
|
-
|
|
46
|
-
delegationEdgeId?: string;
|
|
25
|
+
delegationId?: string;
|
|
47
26
|
scopes?: string[];
|
|
48
27
|
timeoutMs?: number;
|
|
49
|
-
retries?: number;
|
|
50
28
|
ttlSeconds?: number;
|
|
51
|
-
|
|
29
|
+
challengeId?: string;
|
|
30
|
+
/** Skip the cached token and mint a fresh one; the result still refills the cache. */
|
|
31
|
+
forceRefresh?: boolean;
|
|
32
|
+
/** Mint without reading, writing, or joining the token cache. */
|
|
33
|
+
cache?: boolean;
|
|
34
|
+
/** Aborts the exchange request. */
|
|
35
|
+
signal?: AbortSignal;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Lifecycle state of an approval challenge. 'approved' means a retry of the
|
|
39
|
+
* held mint with the challenge id will succeed; 'rejected' and 'expired' are
|
|
40
|
+
* terminal; 'consumed' means another request already spent the approval;
|
|
41
|
+
* 'pending' means no decision arrived within the wait and polling again is safe.
|
|
42
|
+
*/
|
|
43
|
+
export type ApprovalState = 'pending' | 'approved' | 'rejected' | 'expired' | 'consumed';
|
|
44
|
+
export declare const APPROVAL_STATES: readonly ApprovalState[];
|
|
45
|
+
export interface ApprovalRequiredDetails {
|
|
46
|
+
resource?: string;
|
|
47
|
+
state?: string;
|
|
48
|
+
tier?: string;
|
|
49
|
+
binding?: string;
|
|
50
|
+
expiresAt?: string;
|
|
51
|
+
requestId?: string;
|
|
52
|
+
httpStatus?: number;
|
|
52
53
|
}
|
|
53
|
-
export declare class
|
|
54
|
-
readonly
|
|
54
|
+
export declare class ApprovalRequiredError extends CaracalError {
|
|
55
|
+
readonly approvalId: string;
|
|
55
56
|
readonly resource?: string;
|
|
56
|
-
readonly
|
|
57
|
-
|
|
57
|
+
readonly state?: string;
|
|
58
|
+
readonly tier?: string;
|
|
59
|
+
readonly binding?: string;
|
|
60
|
+
readonly expiresAt?: string;
|
|
61
|
+
constructor(message: string, approvalId: string, details?: ApprovalRequiredDetails);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Reports whether the error is an approval hold. Prefer this over instanceof:
|
|
65
|
+
* it also recognizes holds surfaced across duplicated module instances by
|
|
66
|
+
* checking the error's machine-readable shape.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isApprovalRequired(err: unknown): err is ApprovalRequiredError;
|
|
69
|
+
/** One completed token exchange: cache hits and network mints both count, single-flight joiners do not. */
|
|
70
|
+
export interface TokenExchangeEvent {
|
|
71
|
+
type: 'token.exchange';
|
|
72
|
+
resources: string[];
|
|
73
|
+
scopes: string[];
|
|
74
|
+
cached: boolean;
|
|
75
|
+
ok: boolean;
|
|
76
|
+
durationMs: number;
|
|
77
|
+
status?: number;
|
|
78
|
+
code?: string;
|
|
79
|
+
}
|
|
80
|
+
/** One completed approval wait and the final challenge state it observed. */
|
|
81
|
+
export interface ApprovalWaitEvent {
|
|
82
|
+
type: 'approval.wait';
|
|
83
|
+
approvalId: string;
|
|
84
|
+
state: string;
|
|
85
|
+
ok: boolean;
|
|
86
|
+
durationMs: number;
|
|
58
87
|
}
|
|
88
|
+
export type OAuthEvent = TokenExchangeEvent | ApprovalWaitEvent;
|
|
59
89
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -3,18 +3,42 @@
|
|
|
3
3
|
//
|
|
4
4
|
// RFC 8693 token exchange types for the @caracalai/oauth client.
|
|
5
5
|
import { CaracalError } from '@caracalai/core';
|
|
6
|
-
export
|
|
7
|
-
|
|
6
|
+
export { CaracalError };
|
|
7
|
+
export const APPROVAL_STATES = ['pending', 'approved', 'rejected', 'expired', 'consumed'];
|
|
8
|
+
export class ApprovalRequiredError extends CaracalError {
|
|
9
|
+
approvalId;
|
|
8
10
|
resource;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
+
state;
|
|
12
|
+
tier;
|
|
13
|
+
binding;
|
|
14
|
+
expiresAt;
|
|
15
|
+
constructor(message, approvalId, details = {}) {
|
|
16
|
+
const { requestId, httpStatus, ...rest } = details;
|
|
11
17
|
super('interaction_required', message, {
|
|
12
|
-
details: {
|
|
18
|
+
details: { approvalId, ...rest },
|
|
19
|
+
requestId,
|
|
20
|
+
httpStatus,
|
|
13
21
|
});
|
|
14
|
-
this.name = '
|
|
15
|
-
this.
|
|
16
|
-
this.resource = resource;
|
|
17
|
-
this.
|
|
22
|
+
this.name = 'ApprovalRequiredError';
|
|
23
|
+
this.approvalId = approvalId;
|
|
24
|
+
this.resource = details.resource;
|
|
25
|
+
this.state = details.state;
|
|
26
|
+
this.tier = details.tier;
|
|
27
|
+
this.binding = details.binding;
|
|
28
|
+
this.expiresAt = details.expiresAt;
|
|
18
29
|
}
|
|
19
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Reports whether the error is an approval hold. Prefer this over instanceof:
|
|
33
|
+
* it also recognizes holds surfaced across duplicated module instances by
|
|
34
|
+
* checking the error's machine-readable shape.
|
|
35
|
+
*/
|
|
36
|
+
export function isApprovalRequired(err) {
|
|
37
|
+
if (err instanceof ApprovalRequiredError)
|
|
38
|
+
return true;
|
|
39
|
+
if (!(err instanceof Error))
|
|
40
|
+
return false;
|
|
41
|
+
const shaped = err;
|
|
42
|
+
return shaped.code === 'interaction_required' && typeof shaped.approvalId === 'string';
|
|
43
|
+
}
|
|
20
44
|
//# sourceMappingURL=types.js.map
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qCAAqC;AACrC,EAAE;AACF,iEAAiE;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,qCAAqC;AACrC,EAAE;AACF,iEAAiE;AAEjE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,OAAO,EAAE,YAAY,EAAE,CAAA;AA+CvB,MAAM,CAAC,MAAM,eAAe,GAA6B,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;AAYnH,MAAM,OAAO,qBAAsB,SAAQ,YAAY;IAC5C,UAAU,CAAQ;IAClB,QAAQ,CAAS;IACjB,KAAK,CAAS;IACd,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,SAAS,CAAS;IAE3B,YAAY,OAAe,EAAE,UAAkB,EAAE,UAAmC,EAAE;QACpF,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,OAAO,CAAA;QAClD,KAAK,CAAC,sBAAsB,EAAE,OAAO,EAAE;YACrC,OAAO,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE;YAChC,SAAS;YACT,UAAU;SACX,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;QACnC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAA;QAChC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;IACpC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAY;IAC7C,IAAI,GAAG,YAAY,qBAAqB;QAAE,OAAO,IAAI,CAAA;IACrD,IAAI,CAAC,CAAC,GAAG,YAAY,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACzC,MAAM,MAAM,GAAG,GAA+C,CAAA;IAC9D,OAAO,MAAM,CAAC,IAAI,KAAK,sBAAsB,IAAI,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ,CAAA;AACxF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caracalai/oauth",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0-rc.1",
|
|
4
4
|
"description": "Caracal RFC 8693 OAuth 2.0 token exchange client.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/Garudex-Labs/caracal",
|
|
@@ -39,11 +39,11 @@
|
|
|
39
39
|
"prepublishOnly": "tsc"
|
|
40
40
|
},
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@caracalai/core": "0.
|
|
42
|
+
"@caracalai/core": "0.2.0-rc.1"
|
|
43
43
|
},
|
|
44
44
|
"devDependencies": {
|
|
45
|
-
"@types/node": "^26.
|
|
45
|
+
"@types/node": "^26.1.0",
|
|
46
46
|
"typescript": "^6.0.3",
|
|
47
|
-
"vitest": "^4.1.
|
|
47
|
+
"vitest": "^4.1.10"
|
|
48
48
|
}
|
|
49
49
|
}
|