@caracalai/oauth 0.1.6-rc.3 → 0.2.0-rc.2

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 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
@@ -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;CAChF;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;CAchF"}
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;AAYrD,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;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"}
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
@@ -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;AAwCxE,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,aAAa;IAE9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;IAT7B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoD;IAC7E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;gBAGjB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,EACtC,KAAK,CAAC,EAAE,UAAU,EACD,SAAS,CAAC,EAAE,OAAO,KAAK,YAAA;IAMrC,QAAQ,CACZ,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,qBAAqB,CAAC;IA6BjC,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,WAAW;YAQL,UAAU;CA2FzB"}
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 cache and 401-retry.
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 { InteractionRequiredError } from './types.js';
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
- return JSON.parse(body);
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
- const cached = this.cache.get(cacheSubject, cacheResource);
49
- if (cached) {
50
- const remaining = cached.issuedAt + cached.expiresIn - Date.now() / 1000;
51
- if (remaining > preflightWindow)
52
- return cached;
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, false);
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
- secretCacheId(opts.actorToken),
138
+ opts.authorityRecordId ?? '',
76
139
  opts.sessionId ?? '',
77
- opts.agentSessionId ?? '',
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, isRetry, deadlineMs = performance.now() + (opts.timeoutMs ?? 30_000)) {
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.clientAssertion)
116
- body.set('client_assertion', opts.clientAssertion);
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('session_id', opts.sessionId);
123
- if (opts.agentSessionId)
124
- body.set('agent_session_id', opts.agentSessionId);
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.runtimeCredentialInjection === true)
133
- body.set('runtime_credential_injection', 'true');
134
- const maxRetries = opts.retries ?? 3;
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
- let lastErr;
137
- for (let attempt = 0; attempt <= maxRetries; attempt++) {
138
- const remainingMs = deadlineMs - performance.now();
139
- if (remainingMs <= 0)
140
- throw new Error('STS request timed out');
141
- const controller = new AbortController();
142
- const timeout = setTimeout(() => controller.abort(), remainingMs);
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
- if (!res) {
170
- if (lastErr instanceof Error)
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 InteractionRequiredError(err['error_description'] ?? 'Step-up required', err['challenge_id'] ?? '', resourceList(resource)[0], err['acr_values']);
184
- }
185
- if (res.status === 401 && !isRetry) {
186
- return this.doExchange(subjectToken, resource, { ...opts, retries: 0 }, true, deadlineMs);
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 Error(formatSTSError(res.status, err));
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
@@ -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
- clientAssertion?: string;
8
- clientAssertionType?: string;
9
- actorToken?: string;
8
+ authorityRecordId?: string;
10
9
  sessionId?: string;
11
- agentSessionId?: string;
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
- clientAssertion?: string;
42
- clientAssertionType?: string;
43
- actorToken?: string;
23
+ authorityRecordId?: string;
44
24
  sessionId?: string;
45
- agentSessionId?: string;
46
- delegationEdgeId?: string;
25
+ delegationId?: string;
47
26
  scopes?: string[];
48
27
  timeoutMs?: number;
49
- retries?: number;
50
28
  ttlSeconds?: number;
51
- runtimeCredentialInjection?: boolean;
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 InteractionRequiredError extends CaracalError {
54
- readonly challengeId: string;
54
+ export declare class ApprovalRequiredError extends CaracalError {
55
+ readonly approvalId: string;
55
56
  readonly resource?: string;
56
- readonly acrValues?: string;
57
- constructor(message: string, challengeId: string, resource?: string, acrValues?: string);
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
@@ -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,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0BAA0B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,QAAQ,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAA;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0BAA0B,CAAC,EAAE,OAAO,CAAA;CACrC;AAED,qBAAa,wBAAyB,SAAQ,YAAY;IACxD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;gBAGzB,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM;CAUrB"}
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 class InteractionRequiredError extends CaracalError {
7
- challengeId;
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
- acrValues;
10
- constructor(message, challengeId, resource, acrValues) {
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: { challengeId, ...(resource ? { resource } : {}), ...(acrValues ? { acrValues } : {}) },
18
+ details: { approvalId, ...rest },
19
+ requestId,
20
+ httpStatus,
13
21
  });
14
- this.name = 'InteractionRequiredError';
15
- this.challengeId = challengeId;
16
- this.resource = resource;
17
- this.acrValues = acrValues;
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;AAyD9C,MAAM,OAAO,wBAAyB,SAAQ,YAAY;IAC/C,WAAW,CAAQ;IACnB,QAAQ,CAAS;IACjB,SAAS,CAAS;IAE3B,YACE,OAAe,EACf,WAAmB,EACnB,QAAiB,EACjB,SAAkB;QAElB,KAAK,CAAC,sBAAsB,EAAE,OAAO,EAAE;YACrC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;SACjG,CAAC,CAAA;QACF,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;QAC9B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACxB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;CACF"}
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.1.6-rc.3",
3
+ "version": "0.2.0-rc.2",
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.1.6-rc.3"
42
+ "@caracalai/core": "0.2.0-rc.2"
43
43
  },
44
44
  "devDependencies": {
45
- "@types/node": "^26.0.1",
45
+ "@types/node": "^26.1.0",
46
46
  "typescript": "^6.0.3",
47
- "vitest": "^4.1.9"
47
+ "vitest": "^4.1.10"
48
48
  }
49
49
  }