@idp.global/sdk 19.4.0 → 19.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/changelog.md +60 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts_browser/classes.relyingpartybearerclient.d.ts +40 -3
  4. package/dist_ts_browser/classes.relyingpartybearerclient.js +67 -12
  5. package/dist_ts_relyingparty/classes.errors.d.ts +2 -0
  6. package/dist_ts_relyingparty/classes.errors.js +2 -1
  7. package/dist_ts_relyingparty/classes.idpoidcprovider.d.ts +69 -11
  8. package/dist_ts_relyingparty/classes.idpoidcprovider.js +127 -17
  9. package/dist_ts_relyingparty/classes.relyingpartysessions.d.ts +128 -18
  10. package/dist_ts_relyingparty/classes.relyingpartysessions.js +334 -69
  11. package/dist_ts_relyingparty/classes.rpmodels.d.ts +21 -4
  12. package/dist_ts_relyingparty/classes.rpmodels.js +35 -8
  13. package/dist_ts_relyingparty/contract.bearer.d.ts +37 -0
  14. package/dist_ts_relyingparty/contract.bearer.js +5 -1
  15. package/dist_ts_relyingparty/helpers.bearer.d.ts +2 -3
  16. package/dist_ts_relyingparty/helpers.bearer.js +4 -6
  17. package/dist_ts_relyingparty/helpers.cookies.d.ts +6 -0
  18. package/dist_ts_relyingparty/helpers.cookies.js +8 -1
  19. package/dist_ts_relyingparty/interfaces.d.ts +73 -3
  20. package/dist_ts_relyingparty/testing.js +8 -4
  21. package/package.json +3 -3
  22. package/readme.md +280 -34
  23. package/ts/00_commitinfo_data.ts +1 -1
  24. package/ts_browser/classes.relyingpartybearerclient.ts +98 -18
  25. package/ts_relyingparty/classes.errors.ts +3 -0
  26. package/ts_relyingparty/classes.idpoidcprovider.ts +183 -17
  27. package/ts_relyingparty/classes.relyingpartysessions.ts +393 -78
  28. package/ts_relyingparty/classes.rpmodels.ts +27 -4
  29. package/ts_relyingparty/contract.bearer.ts +46 -0
  30. package/ts_relyingparty/helpers.bearer.ts +3 -6
  31. package/ts_relyingparty/helpers.cookies.ts +13 -0
  32. package/ts_relyingparty/interfaces.ts +76 -7
  33. package/ts_relyingparty/testing.ts +7 -3
@@ -69,7 +69,9 @@ export declare class RelyingPartyLoginAttemptDoc extends plugins.nosqldb.SmartDa
69
69
  /**
70
70
  * The single-use code a bearer login hands its client. Only the hash of the
71
71
  * code is stored; the code is bound to the client's S256 challenge, lives at
72
- * most a minute and is consumed by one conditional update.
72
+ * most a minute and is consumed by one conditional update. The `sessionId`
73
+ * index is what the session sweep and the erase delete a session's hand-offs
74
+ * by.
73
75
  */
74
76
  export declare class RelyingPartyBearerHandoffDoc extends plugins.nosqldb.SmartDataDbDoc<RelyingPartyBearerHandoffDoc, RelyingPartyBearerHandoffDoc> {
75
77
  id: string;
@@ -88,8 +90,9 @@ export declare class RelyingPartyBearerHandoffDoc extends plugins.nosqldb.SmartD
88
90
  * One generation of a bearer session's tokens: an access token and the
89
91
  * refresh token that replaces both. Only hashes are stored. Exactly one
90
92
  * generation of a session is current (`rotatedAt` `null`); a rotated one is
91
- * kept until the session expires, so its refresh token coming back is
92
- * recognized as reuse.
93
+ * kept until its session is swept, so its refresh token coming back is
94
+ * recognized as reuse. The `sessionId` index is what the session sweep and
95
+ * the erase delete a session's generations by.
93
96
  */
94
97
  export declare class RelyingPartyBearerTokenDoc extends plugins.nosqldb.SmartDataDbDoc<RelyingPartyBearerTokenDoc, RelyingPartyBearerTokenDoc> {
95
98
  id: string;
@@ -100,8 +103,22 @@ export declare class RelyingPartyBearerTokenDoc extends plugins.nosqldb.SmartDat
100
103
  accessTokenExpiresAt: number;
101
104
  /** the session's end; the refresh token never outlives it, and the sweep removes the generation after it */
102
105
  expiresAt: number;
103
- /** `null` while this generation is current; when its refresh token was spent otherwise */
106
+ /** `null` while this generation is current; when its refresh token was spent, or the generation revoked, otherwise */
104
107
  rotatedAt: number | null;
108
+ /**
109
+ * When its access token or its refresh token was first presented; `null`
110
+ * until then (and on a generation stored before 19.6.0). A rotated
111
+ * generation whose successor was never presented may come back within the
112
+ * reuse grace window as a lost answer.
113
+ */
114
+ firstUsedAt: number | null;
115
+ /**
116
+ * The generation that replaced this one: set by its rotation and moved to
117
+ * the new one when a lost answer is issued again. `null` on a current
118
+ * generation, on one that was revoked unpresented, and on one stored before
119
+ * 19.6.0.
120
+ */
121
+ successorId: string | null;
105
122
  }
106
123
  export declare const RELYING_PARTY_DEFAULT_COLLECTION_NAMES: {
107
124
  readonly sessions: 'IdpRelyingPartySession';
@@ -267,7 +267,9 @@ export { RelyingPartyLoginAttemptDoc };
267
267
  /**
268
268
  * The single-use code a bearer login hands its client. Only the hash of the
269
269
  * code is stored; the code is bound to the client's S256 challenge, lives at
270
- * most a minute and is consumed by one conditional update.
270
+ * most a minute and is consumed by one conditional update. The `sessionId`
271
+ * index is what the session sweep and the erase delete a session's hand-offs
272
+ * by.
271
273
  */
272
274
  let RelyingPartyBearerHandoffDoc = (() => {
273
275
  let _classSuper = plugins.nosqldb.SmartDataDbDoc;
@@ -297,7 +299,7 @@ let RelyingPartyBearerHandoffDoc = (() => {
297
299
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
298
300
  _id_decorators = [plugins.nosqldb.unI()];
299
301
  _codeHash_decorators = [plugins.nosqldb.unI()];
300
- _sessionId_decorators = [plugins.nosqldb.svDb()];
302
+ _sessionId_decorators = [plugins.nosqldb.svDb(), plugins.nosqldb.index()];
301
303
  _codeChallenge_decorators = [plugins.nosqldb.svDb()];
302
304
  _createdAt_decorators = [plugins.nosqldb.svDb()];
303
305
  _expiresAt_decorators = [plugins.nosqldb.svDb(), plugins.nosqldb.index()];
@@ -333,8 +335,9 @@ export { RelyingPartyBearerHandoffDoc };
333
335
  * One generation of a bearer session's tokens: an access token and the
334
336
  * refresh token that replaces both. Only hashes are stored. Exactly one
335
337
  * generation of a session is current (`rotatedAt` `null`); a rotated one is
336
- * kept until the session expires, so its refresh token coming back is
337
- * recognized as reuse.
338
+ * kept until its session is swept, so its refresh token coming back is
339
+ * recognized as reuse. The `sessionId` index is what the session sweep and
340
+ * the erase delete a session's generations by.
338
341
  */
339
342
  let RelyingPartyBearerTokenDoc = (() => {
340
343
  let _classSuper = plugins.nosqldb.SmartDataDbDoc;
@@ -362,17 +365,25 @@ let RelyingPartyBearerTokenDoc = (() => {
362
365
  let _rotatedAt_decorators;
363
366
  let _rotatedAt_initializers = [];
364
367
  let _rotatedAt_extraInitializers = [];
368
+ let _firstUsedAt_decorators;
369
+ let _firstUsedAt_initializers = [];
370
+ let _firstUsedAt_extraInitializers = [];
371
+ let _successorId_decorators;
372
+ let _successorId_initializers = [];
373
+ let _successorId_extraInitializers = [];
365
374
  return class RelyingPartyBearerTokenDoc extends _classSuper {
366
375
  static {
367
376
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
368
377
  _id_decorators = [plugins.nosqldb.unI()];
369
378
  _accessTokenHash_decorators = [plugins.nosqldb.unI()];
370
379
  _refreshTokenHash_decorators = [plugins.nosqldb.unI()];
371
- _sessionId_decorators = [plugins.nosqldb.svDb()];
380
+ _sessionId_decorators = [plugins.nosqldb.svDb(), plugins.nosqldb.index()];
372
381
  _createdAt_decorators = [plugins.nosqldb.svDb()];
373
382
  _accessTokenExpiresAt_decorators = [plugins.nosqldb.svDb()];
374
383
  _expiresAt_decorators = [plugins.nosqldb.svDb(), plugins.nosqldb.index()];
375
384
  _rotatedAt_decorators = [plugins.nosqldb.svDb()];
385
+ _firstUsedAt_decorators = [plugins.nosqldb.svDb()];
386
+ _successorId_decorators = [plugins.nosqldb.svDb()];
376
387
  __esDecorate(null, null, _id_decorators, { kind: "field", name: "id", static: false, private: false, access: { has: obj => "id" in obj, get: obj => obj.id, set: (obj, value) => { obj.id = value; } }, metadata: _metadata }, _id_initializers, _id_extraInitializers);
377
388
  __esDecorate(null, null, _accessTokenHash_decorators, { kind: "field", name: "accessTokenHash", static: false, private: false, access: { has: obj => "accessTokenHash" in obj, get: obj => obj.accessTokenHash, set: (obj, value) => { obj.accessTokenHash = value; } }, metadata: _metadata }, _accessTokenHash_initializers, _accessTokenHash_extraInitializers);
378
389
  __esDecorate(null, null, _refreshTokenHash_decorators, { kind: "field", name: "refreshTokenHash", static: false, private: false, access: { has: obj => "refreshTokenHash" in obj, get: obj => obj.refreshTokenHash, set: (obj, value) => { obj.refreshTokenHash = value; } }, metadata: _metadata }, _refreshTokenHash_initializers, _refreshTokenHash_extraInitializers);
@@ -381,6 +392,8 @@ let RelyingPartyBearerTokenDoc = (() => {
381
392
  __esDecorate(null, null, _accessTokenExpiresAt_decorators, { kind: "field", name: "accessTokenExpiresAt", static: false, private: false, access: { has: obj => "accessTokenExpiresAt" in obj, get: obj => obj.accessTokenExpiresAt, set: (obj, value) => { obj.accessTokenExpiresAt = value; } }, metadata: _metadata }, _accessTokenExpiresAt_initializers, _accessTokenExpiresAt_extraInitializers);
382
393
  __esDecorate(null, null, _expiresAt_decorators, { kind: "field", name: "expiresAt", static: false, private: false, access: { has: obj => "expiresAt" in obj, get: obj => obj.expiresAt, set: (obj, value) => { obj.expiresAt = value; } }, metadata: _metadata }, _expiresAt_initializers, _expiresAt_extraInitializers);
383
394
  __esDecorate(null, null, _rotatedAt_decorators, { kind: "field", name: "rotatedAt", static: false, private: false, access: { has: obj => "rotatedAt" in obj, get: obj => obj.rotatedAt, set: (obj, value) => { obj.rotatedAt = value; } }, metadata: _metadata }, _rotatedAt_initializers, _rotatedAt_extraInitializers);
395
+ __esDecorate(null, null, _firstUsedAt_decorators, { kind: "field", name: "firstUsedAt", static: false, private: false, access: { has: obj => "firstUsedAt" in obj, get: obj => obj.firstUsedAt, set: (obj, value) => { obj.firstUsedAt = value; } }, metadata: _metadata }, _firstUsedAt_initializers, _firstUsedAt_extraInitializers);
396
+ __esDecorate(null, null, _successorId_decorators, { kind: "field", name: "successorId", static: false, private: false, access: { has: obj => "successorId" in obj, get: obj => obj.successorId, set: (obj, value) => { obj.successorId = value; } }, metadata: _metadata }, _successorId_initializers, _successorId_extraInitializers);
384
397
  if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
385
398
  }
386
399
  id = __runInitializers(this, _id_initializers, '');
@@ -391,11 +404,25 @@ let RelyingPartyBearerTokenDoc = (() => {
391
404
  accessTokenExpiresAt = (__runInitializers(this, _createdAt_extraInitializers), __runInitializers(this, _accessTokenExpiresAt_initializers, 0));
392
405
  /** the session's end; the refresh token never outlives it, and the sweep removes the generation after it */
393
406
  expiresAt = (__runInitializers(this, _accessTokenExpiresAt_extraInitializers), __runInitializers(this, _expiresAt_initializers, 0));
394
- /** `null` while this generation is current; when its refresh token was spent otherwise */
407
+ /** `null` while this generation is current; when its refresh token was spent, or the generation revoked, otherwise */
395
408
  rotatedAt = (__runInitializers(this, _expiresAt_extraInitializers), __runInitializers(this, _rotatedAt_initializers, null));
409
+ /**
410
+ * When its access token or its refresh token was first presented; `null`
411
+ * until then (and on a generation stored before 19.6.0). A rotated
412
+ * generation whose successor was never presented may come back within the
413
+ * reuse grace window as a lost answer.
414
+ */
415
+ firstUsedAt = (__runInitializers(this, _rotatedAt_extraInitializers), __runInitializers(this, _firstUsedAt_initializers, null));
416
+ /**
417
+ * The generation that replaced this one: set by its rotation and moved to
418
+ * the new one when a lost answer is issued again. `null` on a current
419
+ * generation, on one that was revoked unpresented, and on one stored before
420
+ * 19.6.0.
421
+ */
422
+ successorId = (__runInitializers(this, _firstUsedAt_extraInitializers), __runInitializers(this, _successorId_initializers, null));
396
423
  constructor() {
397
424
  super(...arguments);
398
- __runInitializers(this, _rotatedAt_extraInitializers);
425
+ __runInitializers(this, _successorId_extraInitializers);
399
426
  }
400
427
  };
401
428
  })();
@@ -520,4 +547,4 @@ export const createRelyingPartyModels = (optionsArg) => {
520
547
  BearerToken: BoundBearerTokenDoc,
521
548
  };
522
549
  };
523
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ycG1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3JlbHlpbmdwYXJ0eS9jbGFzc2VzLnJwbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUczRTs7Ozs7O0dBTUc7SUFDVSxzQkFBc0I7c0JBQVMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQUE3RCxzQkFBdUIsU0FBUSxXQUE4RTs7OzhCQUN2SCxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtxQ0FJckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7a0NBSXJCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3FDQUd2QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtzQ0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7cUNBSXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3FDQUl2QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtzQ0FJdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7MENBSXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFOzZDQUl0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs4Q0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0RBSXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFOzRDQUl0QixP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
550
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ycG1vZGVscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3JlbHlpbmdwYXJ0eS9jbGFzc2VzLnJwbW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUczRTs7Ozs7O0dBTUc7SUFDVSxzQkFBc0I7c0JBQVMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQUE3RCxzQkFBdUIsU0FBUSxXQUE4RTs7OzhCQUN2SCxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtxQ0FJckIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUU7a0NBSXJCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3FDQUd2QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtzQ0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7cUNBSXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQ3RCLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO3FDQUl2QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtzQ0FJdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7MENBSXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFOzZDQUl0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTs4Q0FHdEIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7Z0RBSXRCLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFOzRDQUl0QixP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
@@ -36,6 +36,43 @@ export interface IRelyingPartyBearerMessage {
36
36
  * of the application's own refusal (`RelyingPartyRefusal.code`).
37
37
  */
38
38
  export type TRelyingPartyBearerDeliveryError = 'access_denied' | 'authentication_failed' | (string & {});
39
+ /** Whether a value is a well-formed PKCE code verifier (RFC 7636 §4.1). */
40
+ export declare const isPkceVerifier: (valueArg: unknown) => valueArg is string;
41
+ /**
42
+ * The query of `GET <prefix>bearer/login`, by its parameter names on the
43
+ * wire. The routes check every parameter as untrusted input.
44
+ */
45
+ export interface IRelyingPartyBearerLoginQuery {
46
+ client_kind: TRelyingPartyBearerClientKind;
47
+ /** one of the configured return targets of the kind, exactly; a loopback target with the client's port */
48
+ return_target: string;
49
+ /** BASE64URL(SHA-256(code verifier)), 43 characters */
50
+ code_challenge: string;
51
+ /** only `S256` is accepted */
52
+ code_challenge_method: 'S256';
53
+ /** the client's own correlation value, 1 to 256 characters of `A-Z a-z 0-9 . _ ~ -`, handed back with the outcome */
54
+ state?: string;
55
+ }
56
+ /** The JSON body of `POST <prefix>bearer/claim`. */
57
+ export interface IRelyingPartyBearerClaimRequest {
58
+ /** the hand-off code, claimed once */
59
+ code: string;
60
+ /** the verifier of the challenge the code is bound to (`isPkceVerifier`) */
61
+ codeVerifier: string;
62
+ }
63
+ /** The JSON body of `POST <prefix>bearer/refresh`. */
64
+ export interface IRelyingPartyBearerRefreshRequest {
65
+ /** the current refresh token; this call spends it */
66
+ refreshToken: string;
67
+ }
68
+ /**
69
+ * The JSON body of `POST <prefix>bearer/logout`. The session is named by
70
+ * `Authorization: Bearer <accessToken>`, or by `refreshToken` once that access
71
+ * token has expired.
72
+ */
73
+ export interface IRelyingPartyBearerLogoutRequest {
74
+ refreshToken?: string;
75
+ }
39
76
  /** The session a bearer answer names. */
40
77
  export interface IRelyingPartyBearerSessionInfo {
41
78
  sessionId: string;
@@ -6,4 +6,8 @@
6
6
  */
7
7
  /** The `type` of every message a popup delivery posts. */
8
8
  export const RELYING_PARTY_BEARER_MESSAGE_TYPE = 'idp.global/relyingparty:bearer-handoff';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QuYmVhcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfcmVseWluZ3BhcnR5L2NvbnRyYWN0LmJlYXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyx3Q0FBd0MsQ0FBQyJ9
9
+ /** RFC 7636 §4.1: a code verifier is 43 to 128 characters of `A-Z a-z 0-9 . _ ~ -`. */
10
+ const PKCE_VERIFIER = /^[A-Za-z0-9._~-]{43,128}$/u;
11
+ /** Whether a value is a well-formed PKCE code verifier (RFC 7636 §4.1). */
12
+ export const isPkceVerifier = (valueArg) => typeof valueArg === 'string' && PKCE_VERIFIER.test(valueArg);
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJhY3QuYmVhcmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfcmVseWluZ3BhcnR5L2NvbnRyYWN0LmJlYXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRztBQUVILDBEQUEwRDtBQUMxRCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBRyx3Q0FBd0MsQ0FBQztBQW1DMUYsdUZBQXVGO0FBQ3ZGLE1BQU0sYUFBYSxHQUFHLDRCQUE0QixDQUFDO0FBRW5ELDJFQUEyRTtBQUMzRSxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFpQixFQUFzQixFQUFFLENBQ3RFLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDIn0=
@@ -1,10 +1,9 @@
1
- import { RELYING_PARTY_BEARER_MESSAGE_TYPE, type IRelyingPartyBearerMessage, type TRelyingPartyBearerClientKind } from './contract.bearer.js';
1
+ import { isPkceVerifier, RELYING_PARTY_BEARER_MESSAGE_TYPE, type IRelyingPartyBearerMessage, type TRelyingPartyBearerClientKind } from './contract.bearer.js';
2
2
  import type { IRelyingPartyBearerDelivery, IRelyingPartyBearerReturnTargets } from './interfaces.js';
3
- export { RELYING_PARTY_BEARER_MESSAGE_TYPE };
3
+ export { isPkceVerifier, RELYING_PARTY_BEARER_MESSAGE_TYPE };
4
4
  export declare const RELYING_PARTY_BEARER_CLIENT_KINDS: readonly TRelyingPartyBearerClientKind[];
5
5
  export declare const isBearerClientKind: (valueArg: unknown) => valueArg is TRelyingPartyBearerClientKind;
6
6
  export declare const isPkceChallenge: (valueArg: unknown) => valueArg is string;
7
- export declare const isPkceVerifier: (valueArg: unknown) => valueArg is string;
8
7
  export declare const isBearerClientState: (valueArg: unknown) => valueArg is string;
9
8
  /** The S256 challenge of a verifier: BASE64URL(SHA-256(ASCII(verifier))). */
10
9
  export declare const pkceChallengeOf: (verifierArg: string) => string;
@@ -1,7 +1,8 @@
1
- import { RELYING_PARTY_BEARER_MESSAGE_TYPE, } from './contract.bearer.js';
1
+ import { isPkceVerifier, RELYING_PARTY_BEARER_MESSAGE_TYPE, } from './contract.bearer.js';
2
2
  import { sha256, timingSafeEqualString } from './helpers.crypto.js';
3
3
  import { sanitizeReturnPath } from './helpers.returnpath.js';
4
- export { RELYING_PARTY_BEARER_MESSAGE_TYPE };
4
+ // the verifier check lives in the import-free contract, which the browser client shares
5
+ export { isPkceVerifier, RELYING_PARTY_BEARER_MESSAGE_TYPE };
5
6
  export const RELYING_PARTY_BEARER_CLIENT_KINDS = Object.freeze([
6
7
  'web',
7
8
  'loopback',
@@ -12,15 +13,12 @@ export const RELYING_PARTY_BEARER_CLIENT_KINDS = Object.freeze([
12
13
  const MAX_RETURN_TARGET_LENGTH = 2_048;
13
14
  /** BASE64URL of a SHA-256 digest, without padding (RFC 7636 §4.2). */
14
15
  const PKCE_CHALLENGE = /^[A-Za-z0-9_-]{43}$/u;
15
- /** RFC 7636 §4.1: 43 to 128 unreserved characters. */
16
- const PKCE_VERIFIER = /^[A-Za-z0-9._~-]{43,128}$/u;
17
16
  const CLIENT_STATE = /^[A-Za-z0-9._~-]{1,256}$/u;
18
17
  const LOOPBACK_HOSTS = ['127.0.0.1', '[::1]'];
19
18
  /** A private-use scheme is a reverse domain name: it has a dot, and no web scheme has one (RFC 8252 §7.1). */
20
19
  const CUSTOM_SCHEME = /^[a-z][a-z0-9+-]*(\.[a-z0-9+-]+)+:$/u;
21
20
  export const isBearerClientKind = (valueArg) => typeof valueArg === 'string' && RELYING_PARTY_BEARER_CLIENT_KINDS.includes(valueArg);
22
21
  export const isPkceChallenge = (valueArg) => typeof valueArg === 'string' && PKCE_CHALLENGE.test(valueArg);
23
- export const isPkceVerifier = (valueArg) => typeof valueArg === 'string' && PKCE_VERIFIER.test(valueArg);
24
22
  export const isBearerClientState = (valueArg) => typeof valueArg === 'string' && CLIENT_STATE.test(valueArg);
25
23
  /** The S256 challenge of a verifier: BASE64URL(SHA-256(ASCII(verifier))). */
26
24
  export const pkceChallengeOf = (verifierArg) => sha256(verifierArg);
@@ -196,4 +194,4 @@ export const bearerPopupPage = (deliveryArg, outcomeArg, nonceArg) => {
196
194
  };
197
195
  /** The policy of a popup page: its nonce script and nothing else. */
198
196
  export const bearerPopupContentSecurityPolicy = (nonceArg) => `default-src 'none'; script-src 'nonce-${nonceArg}'; base-uri 'none'; form-action 'none'; frame-ancestors 'none'`;
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5iZWFyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19yZWx5aW5ncGFydHkvaGVscGVycy5iZWFyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGlDQUFpQyxHQUdsQyxNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUc3RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQztBQUU3QyxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBNkMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RyxLQUFLO0lBQ0wsVUFBVTtJQUNWLGVBQWU7SUFDZixPQUFPO0NBQ1IsQ0FBQyxDQUFDO0FBRUgsMEZBQTBGO0FBQzFGLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLHNFQUFzRTtBQUN0RSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxzREFBc0Q7QUFDdEQsTUFBTSxhQUFhLEdBQUcsNEJBQTRCLENBQUM7QUFDbkQsTUFBTSxZQUFZLEdBQUcsMkJBQTJCLENBQUM7QUFDakQsTUFBTSxjQUFjLEdBQXNCLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pFLDhHQUE4RztBQUM5RyxNQUFNLGFBQWEsR0FBRyxzQ0FBc0MsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFFBQWlCLEVBQTZDLEVBQUUsQ0FDakcsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFLLGlDQUF1RCxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUU5RyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFpQixFQUFzQixFQUFFLENBQ3ZFLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxjQUFj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
197
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5iZWFyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19yZWx5aW5ncGFydHkvaGVscGVycy5iZWFyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxpQ0FBaUMsR0FHbEMsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHN0Qsd0ZBQXdGO0FBQ3hGLE9BQU8sRUFBRSxjQUFjLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSxpQ0FBaUMsR0FBNkMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN2RyxLQUFLO0lBQ0wsVUFBVTtJQUNWLGVBQWU7SUFDZixPQUFPO0NBQ1IsQ0FBQyxDQUFDO0FBRUgsMEZBQTBGO0FBQzFGLE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxDQUFDO0FBQ3ZDLHNFQUFzRTtBQUN0RSxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztBQUM5QyxNQUFNLFlBQVksR0FBRywyQkFBMkIsQ0FBQztBQUNqRCxNQUFNLGNBQWMsR0FBc0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDakUsOEdBQThHO0FBQzlHLE1BQU0sYUFBYSxHQUFHLHNDQUFzQyxDQUFDO0FBRTdELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBaUIsRUFBNkMsRUFBRSxDQUNqRyxPQUFPLFFBQVEsS0FBSyxRQUFRLElBQUssaUNBQXVELENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBRTlHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWlCLEVBQXNCLEVBQUUsQ0FDdkUsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLGNBQWMsQ0FBQyxJQUFJLENB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
@@ -3,6 +3,12 @@ export interface ICookieOptions {
3
3
  maxAgeSeconds?: number;
4
4
  sameSite?: 'Lax' | 'Strict' | 'None';
5
5
  secure?: boolean;
6
+ /**
7
+ * `Partitioned` (CHIPS): the browser keeps the cookie per top-level site, so
8
+ * a page framed on another site gets a cookie jar of its own there. Needs
9
+ * `secure`; a cookie set partitioned is also cleared partitioned.
10
+ */
11
+ partitioned?: boolean;
6
12
  }
7
13
  /** The cookies of a `Cookie` header; the first value of a repeated name wins, an undecodable value is skipped. */
8
14
  export declare const parseCookies: (cookieHeaderArg: string | null | undefined) => Map<string, string>;
@@ -47,6 +47,13 @@ export const serializeCookie = (nameArg, valueArg, optionsArg = {}) => {
47
47
  if (optionsArg.sameSite) {
48
48
  parts.push('SameSite=' + optionsArg.sameSite);
49
49
  }
50
+ if (optionsArg.partitioned) {
51
+ if (!optionsArg.secure) {
52
+ // browsers drop a partitioned cookie that is not set Secure
53
+ throw new Error('A Partitioned cookie needs Secure');
54
+ }
55
+ parts.push('Partitioned');
56
+ }
50
57
  if (optionsArg.maxAgeSeconds !== undefined) {
51
58
  if (!Number.isSafeInteger(optionsArg.maxAgeSeconds) || optionsArg.maxAgeSeconds < 0) {
52
59
  throw new Error('Invalid cookie max age');
@@ -59,4 +66,4 @@ export const serializeClearedCookie = (nameArg, optionsArg = {}) => serializeCoo
59
66
  ...optionsArg,
60
67
  maxAgeSeconds: 0,
61
68
  }) + '; Expires=Thu, 01 Jan 1970 00:00:00 GMT';
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5jb29raWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfcmVseWluZ3BhcnR5L2hlbHBlcnMuY29va2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFPQSw0RUFBNEU7QUFDNUUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFlBQW9CLEVBQVcsRUFBRTtJQUNqRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxHQUFHLElBQUksWUFBWSxLQUFLLEdBQUcsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFRLEVBQUU7SUFDcEUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsa0hBQWtIO0FBQ2xILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLGVBQTBDLEVBQXVCLEVBQUU7SUFDOUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDekMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksY0FBYyxJQUFJLENBQUMsRUFB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
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5jb29raWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHNfcmVseWluZ3BhcnR5L2hlbHBlcnMuY29va2llcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFhQSw0RUFBNEU7QUFDNUUsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFlBQW9CLEVBQVcsRUFBRTtJQUNqRSxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxHQUFHLElBQUksWUFBWSxLQUFLLEdBQUcsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBZ0IsRUFBRSxRQUFnQixFQUFRLEVBQUU7SUFDcEUsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxFQUFFLENBQUM7UUFDckUsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNoRCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsa0hBQWtIO0FBQ2xILE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLGVBQTBDLEVBQXVCLEVBQUU7SUFDOUYsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQWtCLENBQUM7SUFDekMsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQ3JCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM5QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksY0FBYyxJQUFJLENBQUMsRUFB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
@@ -1,6 +1,6 @@
1
1
  import type { IOidcCompletion, TOidcCompletionFailureStage, TOidcPrompt, TOidcTokenHint } from './classes.idpoidcprovider.js';
2
2
  import type { TRelyingPartyBearerClientKind } from './contract.bearer.js';
3
- export type { IRelyingPartyBearerErrorAnswer, IRelyingPartyBearerLogoutAnswer, IRelyingPartyBearerMessage, IRelyingPartyBearerSessionAnswer, IRelyingPartyBearerSessionInfo, IRelyingPartyBearerTokenAnswer, TRelyingPartyBearerClientKind, TRelyingPartyBearerDeliveryError, TRelyingPartyBearerErrorCode, } from './contract.bearer.js';
3
+ export type { IRelyingPartyBearerClaimRequest, IRelyingPartyBearerErrorAnswer, IRelyingPartyBearerLoginQuery, IRelyingPartyBearerLogoutAnswer, IRelyingPartyBearerLogoutRequest, IRelyingPartyBearerMessage, IRelyingPartyBearerRefreshRequest, IRelyingPartyBearerSessionAnswer, IRelyingPartyBearerSessionInfo, IRelyingPartyBearerTokenAnswer, TRelyingPartyBearerClientKind, TRelyingPartyBearerDeliveryError, TRelyingPartyBearerErrorCode, } from './contract.bearer.js';
4
4
  /** A session as the application reads it; no token and no sealed value is part of it. */
5
5
  export interface IRelyingPartySession {
6
6
  id: string;
@@ -26,6 +26,26 @@ export interface IRelyingPartyLiveSession<TPrincipal extends object | undefined
26
26
  export interface IResolvedRelyingPartySession<TPrincipal extends object | undefined = undefined> extends IRelyingPartyLiveSession<TPrincipal> {
27
27
  csrfToken: string;
28
28
  }
29
+ /**
30
+ * How the session cookie and the login's intent cookie are sent across
31
+ * sites; one policy for both, on every cookie they are set and cleared with.
32
+ */
33
+ export interface IRelyingPartyCookiePolicy {
34
+ /**
35
+ * `Lax`, the default: the browser sends the cookies with this origin's own
36
+ * requests and with a top-level navigation to it, never into a frame on
37
+ * another site. `None`: also for a page of this origin framed on another
38
+ * site; it needs an https `publicOrigin`, because a `SameSite=None` cookie
39
+ * must be `Secure`.
40
+ */
41
+ sameSite?: 'Lax' | 'None';
42
+ /**
43
+ * `Partitioned` (CHIPS): the browser keeps the cookies per top-level site,
44
+ * so the framed application has a jar of its own under each site that frames
45
+ * it. Only with `sameSite: 'None'`. `false` by default.
46
+ */
47
+ partitioned?: boolean;
48
+ }
29
49
  /** A session just opened: the answer, the CSRF token and the `Set-Cookie` value that carries it. */
30
50
  export interface IRelyingPartySessionOpening {
31
51
  session: IRelyingPartySession;
@@ -93,6 +113,15 @@ export interface IRelyingPartyBearerOptions {
93
113
  returnTargets: IRelyingPartyBearerReturnTargets;
94
114
  /** how long an access token lives, in seconds; 900 by default, never past its session */
95
115
  accessTokenMaxAgeSeconds?: number;
116
+ /**
117
+ * How long after a rotation its spent refresh token may come back as a lost
118
+ * answer instead of reuse, in whole seconds: 60 by default, 0 turns it off,
119
+ * at most 300. Within it, a spent refresh token whose successor was never
120
+ * presented (neither its access token nor its refresh token) revokes that
121
+ * successor and answers a new pair; once the successor was presented, or
122
+ * after the window, it is reuse and ends the session.
123
+ */
124
+ refreshReuseGraceSeconds?: number;
96
125
  }
97
126
  /** What a bearer client sends to start its login. Every field is checked as untrusted input. */
98
127
  export interface IRelyingPartyBearerLoginRequest {
@@ -129,6 +158,35 @@ export interface IRelyingPartyBearerHandoff {
129
158
  /** epoch milliseconds, at most `BEARER_HANDOFF_MAX_AGE_SECONDS` after the callback */
130
159
  expiresAt: number;
131
160
  }
161
+ /**
162
+ * A bearer session the application opened for a device it paired
163
+ * (`openBearerHandoff`): the session, which has no provider login of its own
164
+ * (`idpSubject` and `loginAttemptId` are absent), and the single-use code the
165
+ * device claims at `bearer/claim` with the verifier of its challenge. The
166
+ * code is no token; only its hash is stored.
167
+ */
168
+ export interface IRelyingPartyBearerHandoffOpening {
169
+ session: IRelyingPartySession;
170
+ code: string;
171
+ /** epoch milliseconds, at most `BEARER_HANDOFF_MAX_AGE_SECONDS` after the opening and never past the session */
172
+ expiresAt: number;
173
+ }
174
+ /**
175
+ * What `eraseSessionsOfPrincipal` removed of one principal: the sessions it
176
+ * ended first, and the rows it deleted.
177
+ */
178
+ export interface IRelyingPartySessionsErasure {
179
+ /** sessions not revoked yet (an expired one too) that it ended, each with `onSessionEnded` and its provider tokens handed back */
180
+ endedSessions: number;
181
+ /** session rows, live or ended */
182
+ deletedSessions: number;
183
+ /** the sign-in transactions the provider sessions came out of */
184
+ deletedLoginAttempts: number;
185
+ /** bearer hand-offs, claimed or not */
186
+ deletedBearerHandoffs: number;
187
+ /** bearer token generations, current or rotated */
188
+ deletedBearerTokens: number;
189
+ }
132
190
  /**
133
191
  * The relying party's own tokens of a bearer session. The refresh token
134
192
  * rotates on every use; a rotated one coming back ends the session.
@@ -234,6 +292,8 @@ export type TRelyingPartyEventName = 'idp_token_refresh_failed' | 'idp_token_sto
234
292
  | 'session_sweep_failed'
235
293
  /** a bearer hand-off code or refresh token came back after its use; `reason` names which, the session ended */
236
294
  | 'bearer_credential_reused'
295
+ /** a spent refresh token came back within `refreshReuseGraceSeconds` before its successor was presented: the successor was revoked and a new pair issued */
296
+ | 'bearer_refresh_reissued'
237
297
  /** an application hook threw; the step it belonged to ran on regardless */
238
298
  | 'hook_failed'
239
299
  /** a session whose opening failed could not be revoked; its provider tokens went back anyway */
@@ -254,21 +314,31 @@ export interface IRelyingPartyHooks {
254
314
  * A provider login opened a session, linked to its attempt. Runs before the
255
315
  * login answers; a throw fails the login: the session is revoked, the
256
316
  * provider tokens are handed back and the original error is rethrown.
317
+ * `delivery` is where a bearer login's outcome goes (its client kind, return
318
+ * target and the client's `state`); a cookie login has none.
257
319
  */
258
320
  onProviderSessionOpened?(eventArg: {
259
321
  session: IRelyingPartySession;
322
+ delivery?: IRelyingPartyBearerDelivery;
260
323
  }): Promise<void>;
261
324
  /**
262
325
  * A session ended, or a caller tried to end one that was already over
263
326
  * (`revokedHere: false`). Close its live connections when `revokedHere`,
264
327
  * drop cached authority either way. Must not wait. A throw (or a rejected
265
328
  * promise) is reported as a `hook_failed` event and never stops the end:
266
- * the provider tokens go back regardless.
329
+ * the provider tokens go back regardless. An end that revoked the session
330
+ * here names its principal (`principalId`); one that found it over already
331
+ * does not.
267
332
  */
268
333
  onSessionEnded?(eventArg: {
269
334
  sessionId: string;
270
335
  reason: TRelyingPartySessionEndReason;
271
- revokedHere: boolean;
336
+ revokedHere: true;
337
+ principalId: string;
338
+ } | {
339
+ sessionId: string;
340
+ reason: TRelyingPartySessionEndReason;
341
+ revokedHere: false;
272
342
  }): void;
273
343
  /**
274
344
  * Structured diagnostics; the default writes one JSON line to
@@ -154,16 +154,20 @@ export class RelyingPartyProviderDouble {
154
154
  }
155
155
  async completeAuthorization(optionsArg) {
156
156
  if (!this.#discovered) {
157
- throw new OidcCompletionError('token_exchange', notDiscovered());
157
+ throw new OidcCompletionError('token_exchange', notDiscovered(), { code: 'provider_unreachable' });
158
158
  }
159
159
  const code = optionsArg.callbackUrl.searchParams.get('code') ?? '';
160
160
  const issued = this.#codes.get(code);
161
161
  this.#codes.delete(code);
162
162
  if (!issued || issued.state !== optionsArg.state) {
163
- throw new OidcCompletionError('token_exchange', new Error('unknown, used or foreign code'));
163
+ // what idp.global's token endpoint answers for such a code
164
+ throw new OidcCompletionError('token_exchange', new Error('unknown, used or foreign code'), {
165
+ code: 'token_exchange_refused',
166
+ oauthError: 'invalid_grant',
167
+ });
164
168
  }
165
169
  if (issued.nonce !== optionsArg.nonce) {
166
- throw new OidcCompletionError('token_validation', new Error('nonce mismatch'));
170
+ throw new OidcCompletionError('token_validation', new Error('nonce mismatch'), { code: 'login_mismatch' });
167
171
  }
168
172
  this.completions.push({ subject: issued.subject, state: issued.state });
169
173
  if (this.completionFailure) {
@@ -304,4 +308,4 @@ export const readBearerDelivery = async (responseArg) => {
304
308
  ...(delivery.message.state !== undefined ? { state: delivery.message.state } : {}),
305
309
  };
306
310
  };
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3JlbHlpbmdwYXJ0eS90ZXN0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLHVCQUF1QixHQVN4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlEMUYsTUFBTSxXQUFXLEdBQUcsR0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZGLGdHQUFnRztBQUNoRyxNQUFNLGFBQWEsR0FBRyxHQUFVLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBRXpGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQixxQkFBcUIsQ0FBUztJQUM5QixNQUFNLENBQVM7SUFDeEIsMEJBQTBCLENBQVM7SUFFMUIsY0FBYyxHQUFnQyxFQUFFLENBQUM7SUFDakQsV0FBVyxHQUE4QyxFQUFFLENBQUM7SUFDNUQsV0FBVyxHQUFtRCxFQUFFLENBQUM7SUFDakUsY0FBYyxHQUE0RSxFQUFFLENBQUM7SUFDN0YsU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUN6QyxpREFBaUQ7SUFDMUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV2Qjs7Ozs7OztPQU9HO0lBQ0ksZ0JBQWdCLENBQVM7SUFDaEMsbUdBQW1HO0lBQzVGLGlCQUFpQixDQUFTO0lBQ2pDLG1IQUFtSDtJQUM1RyxvQkFBb0IsQ0FBUztJQUNwQyw0Q0FBNEM7SUFDckMsY0FBYyxDQUFTO0lBQzlCLHNFQUFzRTtJQUMvRCxpQkFBaUIsQ0FBUztJQUNqQyxv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
311
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX3JlbHlpbmdwYXJ0eS90ZXN0aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsbUJBQW1CLEVBQ25CLHVCQUF1QixHQVN4QixNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxlQUFlLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQWlEMUYsTUFBTSxXQUFXLEdBQUcsR0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBRXZGLGdHQUFnRztBQUNoRyxNQUFNLGFBQWEsR0FBRyxHQUFVLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO0FBRXpGOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxPQUFPLDBCQUEwQjtJQUNyQixxQkFBcUIsQ0FBUztJQUM5QixNQUFNLENBQVM7SUFDeEIsMEJBQTBCLENBQVM7SUFFMUIsY0FBYyxHQUFnQyxFQUFFLENBQUM7SUFDakQsV0FBVyxHQUE4QyxFQUFFLENBQUM7SUFDNUQsV0FBVyxHQUFtRCxFQUFFLENBQUM7SUFDakUsY0FBYyxHQUE0RSxFQUFFLENBQUM7SUFDN0YsU0FBUyxHQUFhLEVBQUUsQ0FBQztJQUN6QyxpREFBaUQ7SUFDMUMsV0FBVyxHQUFHLENBQUMsQ0FBQztJQUV2Qjs7Ozs7OztPQU9HO0lBQ0ksZ0JBQWdCLENBQVM7SUFDaEMsbUdBQW1HO0lBQzVGLGlCQUFpQixDQUFTO0lBQ2pDLG1IQUFtSDtJQUM1RyxvQkFBb0IsQ0FBUztJQUNwQyw0Q0FBNEM7SUFDckMsY0FBYyxDQUFTO0lBQzlCLHNFQUFzRTtJQUMvRCxpQkFBaUIsQ0FBUztJQUNqQyxv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