@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
package/changelog.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-11-11 - 19.6.0
4
+
5
+ ### Features
6
+
7
+ - a lost refresh answer no longer signs the person out: `bearer.refreshReuseGraceSeconds` (relyingparty)
8
+ - A spent bearer refresh token that comes back within the window of its rotation (60 seconds by default, 0 turns it off, at most 300; the constructor refuses anything else), while its successor was never presented, revokes that successor and answers a new pair; the `bearer_refresh_reissued` event reports it. Presented means the successor's access token authenticated a request or its refresh token was sent to `bearer/refresh`; the first presentation is recorded on the token generation (`firstUsedAt`), and a rotation names its successor (`successorId`). Only hashes are stored, so the lost pair is replaced, never repeated.
9
+ - Once the successor was presented, after the window (counted from the rotation, however often the retry's answer is lost too), and for the second of two retries at once, the spent token is reuse and ends the session as before (`refresh_token_reused`). Generations stored before this release carry neither field and are handled as before.
10
+ - `bearer/logout` (`endBearerSession`) judges a spent refresh token as the refresh does: one that would be a lost answer there ends the session as a `logout`, so signing out after a lost refresh answer reports no `bearer_credential_reused` and no `refresh_token_reused`.
11
+ - The browser client needs no change: after a lost refresh its next refresh with the stored pair recovers within the window. A relying party that wants the strict rotation of 19.5.0 sets `refreshReuseGraceSeconds: 0`.
12
+ - `TRelyingPartyEventName` gains `bearer_refresh_reissued`; a consumer that switches over it exhaustively adds the case.
13
+ - The first request with each new access token now writes once to record its presentation.
14
+ - a cookie policy for framed applications: `cookiePolicy: { sameSite, partitioned }` (relyingparty)
15
+ - `sameSite` is `'Lax'` (the default, unchanged) or `'None'`; `partitioned: true` adds the CHIPS `Partitioned` attribute and is valid only with `'None'`. One policy goes on the session and the intent cookie, on every `Set-Cookie` that sets or clears them: the login start, the opened session, `openSession`, `clearSessionCookie` and `clearIntentCookie`.
16
+ - The constructor refuses `partitioned` without `sameSite: 'None'`, `sameSite: 'None'` on an http `publicOrigin` (a `SameSite=None` cookie must be `Secure`), any other value, and `cookiePolicy` in bearer-only mode. `sessions.cookiePolicy` answers the resolved policy.
17
+ - `serializeCookie` takes `partitioned` and throws when it is given without `secure`.
18
+ - typed provider errors: `OidcProviderError` with `code` and `oauthError` (relyingparty)
19
+ - An application classifies a failure of the provider half without importing openid-client. `code` (`TOidcProviderErrorCode`, listed in `OIDC_PROVIDER_ERROR_CODES`) is `token_exchange_refused`, `login_mismatch`, `invalid_response`, `provider_unreachable` or `refresh_refused`; `oauthError` is the provider's own OAuth error code when it sent one, such as `invalid_grant`, kept only when it is a short token and never with its description.
20
+ - `OidcCompletionError`, `OidcRefreshRefusedError` and `OidcAuthorityUnavailableError` now extend `OidcProviderError`; their names, `stage`, `reason` and constructors stay, and `OidcCompletionError` takes the code as an optional third argument (without it, the code is read from the cause). `IdpOidcProvider` maps openid-client's failures to the codes, and the provider double of `/relyingparty/testing` answers with the codes idp.global's would.
21
+ - `IdpOidcProvider.completeAuthorization` refuses a callback whose one `state` is not the login's (`login_mismatch`) before it asks the provider. A refresh whose answer fails openid-client's checks is now `OidcAuthorityUnavailableError` with the reason `invalid_response` instead of `unavailable`; both fail closed as before.
22
+
23
+ ### Fixes
24
+
25
+ - a swept session takes its bearer rows with it, and `endSessionsOfPrincipal` leaves expired sessions alone (relyingparty)
26
+ - The session sweep now deletes a session's bearer hand-offs and token generations by `sessionId` before the session row. Before, a session revoked early was swept an hour after its revocation while its generations stayed until an hour after its original expiry, with no row left that named the principal, so `eraseSessionsOfPrincipal` could not reach them. A sweep that fails between the two leaves the session row, and the next sweep finishes it.
27
+ - The bearer hand-off and bearer token models declare a `sessionId` index, which the sweep and `eraseSessionsOfPrincipal` read; it is built on first use like the `expiresAt` index. On the test suite's engine a token write cost 3.68 instead of 3.22 ms in memory and 9.38 instead of 9.23 ms on file storage, and a delete by session took 5 instead of 54 ms (4,000 rows, memory) and 16 instead of 88 ms (600 rows, file).
28
+ - `endSessionsOfPrincipal` reads only sessions that have not expired: an expired one is over already and is no longer revoked, handed back to the provider or counted. `eraseSessionsOfPrincipal` still ends it.
29
+ - ID tokens are verified against idp.global's signing keys (relyingparty)
30
+ - Before, `IdpOidcProvider` accepted the ID token of a code exchange or a refresh on the trust of the TLS connection to the token endpoint alone and never checked its signature. Discovery now turns on openid-client's `enableNonRepudiationChecks`, so every ID token of both grants is checked against the issuer's `jwks_uri` (RS256), fetched through the provider's own transport (`trustedCaPem` or `fetch` included) and cached by openid-client.
31
+ - A code exchange whose ID token is signed by a key outside the JWKS fails as `OidcCompletionError` at the `token_exchange` stage, and a refresh as `OidcAuthorityUnavailableError`, which ends nothing and fails closed. The first login after a start fetches the JWKS once more.
32
+
33
+ ### Maintenance
34
+
35
+ - release tooling: `@git.zone/tsrepo` ^1.1.1 → ^2.1.0 (2.0.0 makes `@push.rocks/smartmongo` an optional peer of its tapbundle; the sdk's tests do not call `createSmartmongo()`), `@types/node` 26.6.5 → 26.6.6 and pnpm 12.14.0 → 12.17.0; the re-resolved tooling (`@push.rocks/smartfile` 13.2.4 with `@push.rocks/smartcrypto` 3.1.0) no longer installs `node-forge`; `brace-expansion` 2.1.2 → 2.1.7 (through `minimatch` 9.0.9 in the production closure) clears its high advisories.
36
+
37
+ ## 2026-10-26 - 19.5.0
38
+
39
+ ### Features
40
+
41
+ - pairing a device: `openBearerHandoff({ openerSessionId, codeChallenge, maxAgeSeconds? })` (relyingparty)
42
+ - An application that has signed a person in opens a bearer session for a second device of theirs, such as a TV or a browser extension, and answers its single-use hand-off code. The device claims the code at the existing `bearer/claim` with the verifier of its challenge, under the rules of a bearer login's code: one claim within at most 60 seconds, never past the session, stored only as a hash, and a reused code, a wrong verifier or an unclaimed code ends the session.
43
+ - The opener must be a live provider login: not ended or expired, with an active principal and its own `idpSubject`. A session from `openSession` or from `openBearerHandoff` does not qualify, so a paired device cannot pair another. Any other opener throws the new `RelyingPartyError` code `invalid_handoff_opener` (400) and stores nothing; a consumer with an exhaustive switch over `TRelyingPartyErrorCode` adds that case. A malformed challenge throws `invalid_bearer_request`, a `maxAgeSeconds` outside 1 to `sessionMaxAgeSeconds` throws a `RangeError`, and without `bearer` the call throws `login_method_unavailable`. It works in bearer-only mode, and like every way to create a session it sweeps first.
44
+ - The session acts as the opener's principal, without `idpSubject` or `loginAttemptId`, and lives `maxAgeSeconds` (by default `sessionMaxAgeSeconds`), the same rule as every session. It refreshes without the provider. Its expiry, `endSession`, `endSessionsOfPrincipal`, `bearer/logout` and the reuse of a credential end it. An idp.global logout does not reach it, and `AuthorityObserver` refuses it with `authority_login_required` without ending it; the readme lists what an application does about that.
45
+ - `refreshBearerTokens` asks the provider exactly when the session stores a provider subject, as every session from a bearer login does, so provider sessions refresh as before.
46
+ - erasing a principal's sessions: `eraseSessionsOfPrincipal(principalId)` (relyingparty)
47
+ - For deleting an account, after the application's own erasers and before its user record. It ends every session of the principal not revoked yet, an expired one too, as `endSession` does (`onSessionEnded` fires and the provider tokens go back), then deletes every session row of the principal, live or ended, with the login attempt a provider session came out of and, in bearer mode, its hand-offs, claimed or not, and its token generations. It does not wait for a sweep, deletes each session row last so a failed erase can be retried, and answers the counts (`IRelyingPartySessionsErasure`).
48
+ - `onSessionEnded` names the principal of a session it revoked (relyingparty)
49
+ - The event is `{ sessionId, reason, revokedHere: true, principalId }` when this call revoked the session and `{ sessionId, reason, revokedHere: false }` when it was over already, so an application can end a person's other sessions on `refresh_token_refused` without keeping a table of its own. A handler that reads `sessionId`, `reason` and `revokedHere` compiles unchanged; code that builds the event itself with `revokedHere: true` adds `principalId`.
50
+ - `onProviderSessionOpened` carries the bearer delivery (relyingparty)
51
+ - A bearer login's session opens with `delivery` (`IRelyingPartyBearerDelivery`: client kind, return target and the client's `state`); a cookie login's has none.
52
+ - `createPkce()` and `claimCode(pkce, code)` on `RelyingPartyBearerClient` (browser)
53
+ - `createPkce()` makes a verifier and its S256 challenge. `claimCode` claims a code bound to that challenge that reached the client another way than its own login, such as a device pairing. It keeps the client's rules: one claim, never retried, under `requestTimeoutMs`, and the pair replaces the stored one under the Web Lock, ending that pair's session.
54
+ - A pair is claimed with once; a second call, after a failed claim as well, is `already_received` and sends nothing. A malformed verifier, a challenge that is not the verifier's S256, or a code that is not text throws before anything is sent. Neither method needs a window.
55
+ - In Chromium 149 the client runs in a Manifest V3 extension's service worker that imports `@idp.global/sdk/browser/bearer`. The extension needs a host permission for the relying party's origin, because the bearer routes answer CORS for popup origins only.
56
+ - the requests of the bearer routes are exported types (relyingparty, browser)
57
+ - `IRelyingPartyBearerLoginQuery` (the `bearer/login` query by its parameter names), `IRelyingPartyBearerClaimRequest`, `IRelyingPartyBearerRefreshRequest` and `IRelyingPartyBearerLogoutRequest` come from the import-free contract module beside the answer types. `@idp.global/sdk/relyingparty`, `@idp.global/sdk/browser` and `@idp.global/sdk/browser/bearer` export them, and the browser client sends exactly these shapes.
58
+
59
+ ### Maintenance
60
+
61
+ - release tooling: pnpm 12.14.0
62
+
3
63
  ## 2026-10-22 - 19.4.0
4
64
 
5
65
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@idp.global/sdk',
6
- version: '19.4.0',
6
+ version: '19.6.0',
7
7
  description: 'Reusable browser and server SDK for idp.global authentication.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxpQkFBaUI7SUFDdkIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLGdFQUFnRTtDQUM5RSxDQUFBIn0=
@@ -1,5 +1,5 @@
1
1
  import { RELYING_PARTY_BEARER_MESSAGE_TYPE, type IRelyingPartyBearerTokenAnswer } from '../dist_ts_relyingparty/contract.bearer.js';
2
- export type { IRelyingPartyBearerErrorAnswer, IRelyingPartyBearerLogoutAnswer, IRelyingPartyBearerMessage, IRelyingPartyBearerSessionAnswer, IRelyingPartyBearerSessionInfo, IRelyingPartyBearerTokenAnswer, TRelyingPartyBearerDeliveryError, TRelyingPartyBearerErrorCode, } from '../dist_ts_relyingparty/contract.bearer.js';
2
+ export type { IRelyingPartyBearerClaimRequest, IRelyingPartyBearerErrorAnswer, IRelyingPartyBearerLoginQuery, IRelyingPartyBearerLogoutAnswer, IRelyingPartyBearerLogoutRequest, IRelyingPartyBearerMessage, IRelyingPartyBearerRefreshRequest, IRelyingPartyBearerSessionAnswer, IRelyingPartyBearerSessionInfo, IRelyingPartyBearerTokenAnswer, TRelyingPartyBearerDeliveryError, TRelyingPartyBearerErrorCode, } from '../dist_ts_relyingparty/contract.bearer.js';
3
3
  export { RELYING_PARTY_BEARER_MESSAGE_TYPE };
4
4
  /** The client kinds a browser signs in as; native clients use `loopback` and `custom_scheme` themselves. */
5
5
  export type TRelyingPartyBearerBrowserClientKind = 'web' | 'popup';
@@ -35,6 +35,18 @@ export interface IRelyingPartyBearerTokenStorage {
35
35
  signal: AbortSignal;
36
36
  }): Promise<void>;
37
37
  }
38
+ /**
39
+ * A PKCE pair (RFC 7636): the verifier the client keeps and the S256
40
+ * challenge it hands out. `codeVerifier` is the secret that makes a code
41
+ * worth anything; keep it like a pending login, never in a URL, a log or a
42
+ * message.
43
+ */
44
+ export interface IRelyingPartyBearerPkce {
45
+ /** 43 characters from 32 random bytes */
46
+ codeVerifier: string;
47
+ /** BASE64URL(SHA-256(codeVerifier)) */
48
+ codeChallenge: string;
49
+ }
38
50
  /**
39
51
  * A login on its way: what `createLogin` made and the receiver needs back.
40
52
  * A `web` login leaves the page, so the application keeps it until the
@@ -129,7 +141,7 @@ export type TRelyingPartyBearerClientErrorCode =
129
141
  'state_mismatch'
130
142
  /** the delivery carries no code; `deliveryError` says why */
131
143
  | 'login_failed'
132
- /** this login was received once already; a code is claimed once, never again */
144
+ /** this login, or this PKCE pair, was received once already; a code is claimed once, never again */
133
145
  | 'already_received'
134
146
  /** the browser opened no popup */
135
147
  | 'popup_blocked'
@@ -172,7 +184,9 @@ export declare class RelyingPartyBearerClientError extends Error {
172
184
  * request or write never holds the other tabs. A login replaces the stored
173
185
  * pair and ends that pair's session. Rotation is strict at the relying
174
186
  * party: a refresh token spent once ends the session when it comes back, so
175
- * nothing here retries a claim or a refresh.
187
+ * nothing here retries a claim or a refresh. A code that reaches the client
188
+ * another way, such as a device pairing, is claimed through `createPkce` and
189
+ * `claimCode` under the same rules, without a window.
176
190
  *
177
191
  * It needs the Web Locks API and Web Crypto, both of them only in a secure
178
192
  * context, and has no fallback for either.
@@ -191,6 +205,27 @@ export declare class RelyingPartyBearerClient {
191
205
  clientKind: TRelyingPartyBearerBrowserClientKind;
192
206
  returnTarget: string;
193
207
  }): Promise<IRelyingPartyBearerClientLogin>;
208
+ /**
209
+ * A fresh PKCE pair: a verifier from 32 random bytes and its S256
210
+ * challenge. For a code the client does not receive through its own login,
211
+ * such as one the application delivers to a device it pairs: the challenge
212
+ * goes to the application, and `claimCode` claims the code with the pair.
213
+ * Needs no window.
214
+ */
215
+ createPkce(): Promise<IRelyingPartyBearerPkce>;
216
+ /**
217
+ * Claims a hand-off code that was bound to `pkceArg`'s challenge and
218
+ * reached this client some other way than its own login, such as a device
219
+ * pairing (`openBearerHandoff` at the relying party). It is received like
220
+ * a login: one claim, never retried, under `requestTimeoutMs`, and the
221
+ * claimed pair replaces the stored one under the lock, whose session is
222
+ * ended then (`IRelyingPartyBearerLoginResult`). A pair is claimed with
223
+ * once: a second call with it, after a failed claim too, is
224
+ * `already_received` and sends nothing. A pair that is not one (a
225
+ * malformed verifier, a challenge that is not its S256) or a code that is
226
+ * not text is refused before anything is sent. Needs no window.
227
+ */
228
+ claimCode(pkceArg: IRelyingPartyBearerPkce, codeArg: string): Promise<IRelyingPartyBearerLoginResult>;
194
229
  /**
195
230
  * Receives a `web` login on its return target page. The delivery leaves
196
231
  * the address first, before anything is checked, so neither a reload nor
@@ -238,6 +273,8 @@ export declare class RelyingPartyBearerClient {
238
273
  private isFresh;
239
274
  /** Takes a delivery for its login, once, claims its code and stores the pair in place of the one before. */
240
275
  private receive;
276
+ /** Claims a code once with its verifier and stores the pair in place of the one before. */
277
+ private claim;
241
278
  /**
242
279
  * Stores a claimed pair in place of the stored one and then ends the
243
280
  * session of that one with its tokens, held here, through the logout
@@ -1,4 +1,4 @@
1
- import { RELYING_PARTY_BEARER_MESSAGE_TYPE, } from '../dist_ts_relyingparty/contract.bearer.js';
1
+ import { isPkceVerifier, RELYING_PARTY_BEARER_MESSAGE_TYPE, } from '../dist_ts_relyingparty/contract.bearer.js';
2
2
  export { RELYING_PARTY_BEARER_MESSAGE_TYPE };
3
3
  export class RelyingPartyBearerClientError extends Error {
4
4
  code;
@@ -99,7 +99,9 @@ const tokenAnswerOf = (answerArg) => {
99
99
  * request or write never holds the other tabs. A login replaces the stored
100
100
  * pair and ends that pair's session. Rotation is strict at the relying
101
101
  * party: a refresh token spent once ends the session when it comes back, so
102
- * nothing here retries a claim or a refresh.
102
+ * nothing here retries a claim or a refresh. A code that reaches the client
103
+ * another way, such as a device pairing, is claimed through `createPkce` and
104
+ * `claimCode` under the same rules, without a window.
103
105
  *
104
106
  * It needs the Web Locks API and Web Crypto, both of them only in a secure
105
107
  * context, and has no fallback for either.
@@ -117,6 +119,8 @@ export class RelyingPartyBearerClient {
117
119
  #now;
118
120
  /** the states of the logins received here; a login is received once */
119
121
  #receivedStates = new Set();
122
+ /** the challenges of the pairs `claimCode` claimed with here; a pair is claimed with once */
123
+ #claimedChallenges = new Set();
120
124
  constructor(optionsArg) {
121
125
  const origin = optionsArg?.origin;
122
126
  let parsedOrigin = null;
@@ -190,16 +194,60 @@ export class RelyingPartyBearerClient {
190
194
  if (!isText(returnTarget)) {
191
195
  throw new Error('returnTarget must name the configured return target');
192
196
  }
193
- const codeVerifier = randomBase64Url();
197
+ const { codeVerifier, codeChallenge } = await this.createPkce();
194
198
  const state = randomBase64Url();
199
+ const query = {
200
+ client_kind: clientKind,
201
+ return_target: returnTarget,
202
+ code_challenge: codeChallenge,
203
+ code_challenge_method: 'S256',
204
+ state,
205
+ };
195
206
  const url = new URL(this.#paths.login);
196
- url.searchParams.set('client_kind', clientKind);
197
- url.searchParams.set('return_target', returnTarget);
198
- url.searchParams.set('code_challenge', await pkceChallengeOf(codeVerifier));
199
- url.searchParams.set('code_challenge_method', 'S256');
200
- url.searchParams.set('state', state);
207
+ for (const [name, value] of Object.entries(query)) {
208
+ url.searchParams.set(name, value);
209
+ }
201
210
  return { clientKind, returnTarget, state, codeVerifier, url: url.href };
202
211
  }
212
+ /**
213
+ * A fresh PKCE pair: a verifier from 32 random bytes and its S256
214
+ * challenge. For a code the client does not receive through its own login,
215
+ * such as one the application delivers to a device it pairs: the challenge
216
+ * goes to the application, and `claimCode` claims the code with the pair.
217
+ * Needs no window.
218
+ */
219
+ async createPkce() {
220
+ const codeVerifier = randomBase64Url();
221
+ return { codeVerifier, codeChallenge: await pkceChallengeOf(codeVerifier) };
222
+ }
223
+ /**
224
+ * Claims a hand-off code that was bound to `pkceArg`'s challenge and
225
+ * reached this client some other way than its own login, such as a device
226
+ * pairing (`openBearerHandoff` at the relying party). It is received like
227
+ * a login: one claim, never retried, under `requestTimeoutMs`, and the
228
+ * claimed pair replaces the stored one under the lock, whose session is
229
+ * ended then (`IRelyingPartyBearerLoginResult`). A pair is claimed with
230
+ * once: a second call with it, after a failed claim too, is
231
+ * `already_received` and sends nothing. A pair that is not one (a
232
+ * malformed verifier, a challenge that is not its S256) or a code that is
233
+ * not text is refused before anything is sent. Needs no window.
234
+ */
235
+ async claimCode(pkceArg, codeArg) {
236
+ const codeVerifier = pkceArg?.codeVerifier;
237
+ const codeChallenge = pkceArg?.codeChallenge;
238
+ if (!isPkceVerifier(codeVerifier) || typeof codeChallenge !== 'string' || codeChallenge !== await pkceChallengeOf(codeVerifier)) {
239
+ throw new Error('claimCode needs a PKCE pair: a verifier and its S256 challenge, as createPkce makes them');
240
+ }
241
+ if (!isText(codeArg)) {
242
+ throw new Error('claimCode needs the hand-off code as text');
243
+ }
244
+ if (this.#claimedChallenges.has(codeChallenge)) {
245
+ throw new RelyingPartyBearerClientError('already_received');
246
+ }
247
+ // taken before the claim is sent: a failed claim uses the pair up too
248
+ this.#claimedChallenges.add(codeChallenge);
249
+ return this.claim(codeArg, codeVerifier);
250
+ }
203
251
  /**
204
252
  * Receives a `web` login on its return target page. The delivery leaves
205
253
  * the address first, before anything is checked, so neither a reload nor
@@ -349,8 +397,13 @@ export class RelyingPartyBearerClient {
349
397
  if (!isText(codeArg)) {
350
398
  throw new RelyingPartyBearerClientError('unexpected_answer');
351
399
  }
400
+ return this.claim(codeArg, loginArg.codeVerifier);
401
+ }
402
+ /** Claims a code once with its verifier and stores the pair in place of the one before. */
403
+ async claim(codeArg, codeVerifierArg) {
404
+ const body = { code: codeArg, codeVerifier: codeVerifierArg };
352
405
  // the claim touches no stored pair, so it holds no lock, only its own deadline; a failed one leaves the stored pair as it was
353
- const answer = tokenAnswerOf(await this.withDeadline((signalArg) => this.post(this.#paths.claim, { code: codeArg, codeVerifier: loginArg.codeVerifier }, {}, signalArg)));
406
+ const answer = tokenAnswerOf(await this.withDeadline((signalArg) => this.post(this.#paths.claim, body, {}, signalArg)));
354
407
  if (!answer) {
355
408
  throw new RelyingPartyBearerClientError('unexpected_answer', { status: 200 });
356
409
  }
@@ -475,8 +528,9 @@ export class RelyingPartyBearerClient {
475
528
  return current;
476
529
  }
477
530
  let answer;
531
+ const body = { refreshToken: current.refreshToken };
478
532
  try {
479
- answer = tokenAnswerOf(await this.post(this.#paths.refresh, { refreshToken: current.refreshToken }, {}, signalArg));
533
+ answer = tokenAnswerOf(await this.post(this.#paths.refresh, body, {}, signalArg));
480
534
  }
481
535
  catch (error) {
482
536
  if (error instanceof RelyingPartyBearerClientError && error.answerError === 'invalid_bearer_grant') {
@@ -498,7 +552,8 @@ export class RelyingPartyBearerClient {
498
552
  }
499
553
  /** Ends the session of a pair through the logout route and answers whether that ended a live one. */
500
554
  async endSessionOf(pairArg, signalArg) {
501
- const answer = await this.post(this.#paths.logout, { refreshToken: pairArg.refreshToken }, { authorization: `Bearer ${pairArg.accessToken}` }, signalArg);
555
+ const body = { refreshToken: pairArg.refreshToken };
556
+ const answer = await this.post(this.#paths.logout, body, { authorization: `Bearer ${pairArg.accessToken}` }, signalArg);
502
557
  if (!isRecord(answer) || typeof answer.endedLiveSession !== 'boolean') {
503
558
  throw new RelyingPartyBearerClientError('unexpected_answer', { status: 200 });
504
559
  }
@@ -588,4 +643,4 @@ export class RelyingPartyBearerClient {
588
643
  return answer;
589
644
  }
590
645
  }
591
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZWx5aW5ncGFydHliZWFyZXJjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19icm93c2VyL2NsYXNzZXMucmVseWluZ3BhcnR5YmVhcmVyY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQ0FBaUMsR0FHbEMsTUFBTSx1Q0FBdUMsQ0FBQztBQVkvQyxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsQ0FBQztBQXdKN0MsTUFBTSxPQUFPLDZCQUE4QixTQUFRLEtBQUs7SUFRcEMsSUFBSTtJQVBOLE1BQU0sQ0FBVTtJQUNoQyw4RUFBOEU7SUFDOUQsV0FBVyxDQUFVO0lBQ3JDLDBFQUEwRTtJQUMxRCxhQUFhLENBQVU7SUFFdkMsWUFDa0IsSUFBd0MsRUFDeEQsVUFBVSxHQUF1RixFQUFFO1FBRW5HLEtBQUssQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBSHRFLElBQUk7UUFJcEIsSUFBSSxDQUFDLElBQUksR0FBRywrQkFBK0IsQ0FBQztRQUM1QyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxNQUFNLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUNyRSxJQUFJLFVBQVUsQ0FBQyxXQUFXLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUNwRixJQUFJLFVBQVUsQ0FBQyxhQUFhLEtBQUssU0FBUztZQUFFLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDLGFBQWEsQ0FBQztJQUM1RixDQUFDO0NBQ0Y7QUFFRCxNQUFNLHlCQUF5QixHQUFHLFFBQVEsQ0FBQztBQUMzQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0s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
646
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5yZWx5aW5ncGFydHliZWFyZXJjbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19icm93c2VyL2NsYXNzZXMucmVseWluZ3BhcnR5YmVhcmVyY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxjQUFjLEVBQ2QsaUNBQWlDLEdBT2xDLE1BQU0sdUNBQXVDLENBQUM7QUFnQi9DLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxDQUFDO0FBcUs3QyxNQUFNLE9BQU8sNkJBQThCLFNBQVEsS0FBSztJQVFwQyxJQUFJO0lBUE4sTUFBTSxDQUFVO0lBQ2hDLDhFQUE4RTtJQUM5RCxXQUFXLENBQVU7SUFDckMsMEVBQTBFO0lBQzFELGFBQWEsQ0FBVTtJQUV2QyxZQUNrQixJQUF3QyxFQUN4RCxVQUFVLEdBQXVGLEVBQUU7UUFFbkcsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFIdEUsSUFBSTtRQUlwQixJQUFJLENBQUMsSUFBSSxHQUFHLCtCQUErQixDQUFDO1FBQzVDLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQ3JFLElBQUksVUFBVSxDQUFDLFdBQVcsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQ3BGLElBQUksVUFBVSxDQUFDLGFBQWEsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsYUFBYSxDQUFDO0lBQzVGLENBQUM7Q0FDRjtBQUVELE1BQU0seUJBQXlCLEdBQUcsUUFBUSxDQUFDO0FBQzNDLE1BQU0sdUJBQXVC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
@@ -8,6 +8,8 @@ export type TRelyingPartyErrorCode = 'login_method_unavailable' | 'invalid_login
8
8
  | 'invalid_bearer_handoff'
9
9
  /** a refresh token that is unknown, rotated, expired, or of a session that is over */
10
10
  | 'invalid_bearer_grant'
11
+ /** `openBearerHandoff` named an opener that is no live provider login: unknown, ended, expired, of an inactive principal, or without a provider login of its own */
12
+ | 'invalid_handoff_opener'
11
13
  /** a `sessionsOfPrincipal` cursor that no page of it answered */
12
14
  | 'invalid_sessions_cursor';
13
15
  /** A request the login flow refuses; the code is safe to answer, the browser learns nothing more. */
@@ -8,6 +8,7 @@ const RELYING_PARTY_ERROR_STATUS = {
8
8
  return_target_not_allowed: 400,
9
9
  invalid_bearer_handoff: 400,
10
10
  invalid_bearer_grant: 400,
11
+ invalid_handoff_opener: 400,
11
12
  invalid_sessions_cursor: 400,
12
13
  };
13
14
  /** A request the login flow refuses; the code is safe to answer, the browser learns nothing more. */
@@ -71,4 +72,4 @@ export class RelyingPartyDatabaseUnavailableError extends Error {
71
72
  this.name = 'RelyingPartyDatabaseUnavailableError';
72
73
  }
73
74
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19yZWx5aW5ncGFydHkvY2xhc3Nlcy5lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBbUJBLE1BQU0sMEJBQTBCLEdBQXFEO0lBQ25GLHdCQUF3QixFQUFFLEdBQUc7SUFDN0Isc0JBQXNCLEVBQUUsR0FBRztJQUMzQixvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLHlCQUF5QixFQUFFLEdBQUc7SUFDOUIsc0JBQXNCLEVBQUUsR0FBRztJQUMzQixzQkFBc0IsRUFBRSxHQUFHO0lBQzNCLHlCQUF5QixFQUFFLEdBQUc7SUFDOUIsc0JBQXNCLEVBQUUsR0FBRztJQUMzQixvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLHVCQUF1QixFQUFFLEdBQUc7Q0FDN0IsQ0FBQztBQUVGLHFHQUFxRztBQUNyRyxNQUFNLE9BQU8saUJBQWtCLFNBQVEsS0FBSztJQUdkLElBQUk7SUFGaEIsTUFBTSxDQUFTO0lBRS9CLFlBQTRCLElBQTRCO1FBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFEYyxJQUFJO1FBRTlCLElBQUksQ0FBQyxJQUFJLEdBQUcsbUJBQW1CLENBQUM7UUFDaEMsSUFBSSxDQUFDLE1BQU0sR0FBRywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqRCxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUkxQixJQUFJO0lBQ0osTUFBTTtJQUpSLFFBQVEsQ0FBVTtJQUVsQyxZQUNrQixJQUFZLEVBQ1osTUFBYyxFQUM5QixVQUFVLEdBQTBCLEVBQUU7UUFFdEMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUpJLElBQUk7c0JBQ0osTUFBTTtRQUl0QixJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO1FBQ2xDLElBQUksVUFBVSxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7Q0FDRjtBQUVELHFHQUFxRztBQUNyRyxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsS0FBSztJQUV6QixLQUFLO0lBRHZCLFlBQ2tCLEtBQTBCLEVBQzFDLFFBQWlCO1FBRWpCLEtBQUssQ0FBQywyQ0FBMkMsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO3FCQUh4RCxLQUFLO1FBSXJCLElBQUksQ0FBQyxJQUFJLEdBQUcsb0JBQW9CLENBQUM7SUFDbkMsQ0FBQztDQUNGO0FBUUQsTUFBTSxPQUFPLG1CQUFvQixTQUFRLEtBQUs7SUFHaEIsSUFBSTtJQUZoQixNQUFNLENBQVM7SUFFL0IsWUFBNEIsSUFBOEIsRUFBRSxRQUFrQjtRQUM1RSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7b0JBRFAsSUFBSTtRQUU5QixJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztJQUNoRSxDQUFDO0NBQ0Y7QUFFRCxnRkFBZ0Y7QUFDaEYsTUFBTSxPQUFPLG9DQUFxQyxTQUFRLEtBQUs7SUFDN0QsWUFBWSxRQUFrQjtRQUM1QixLQUFLLENBQUMsaUVBQWlFLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsSUFBSSxHQUFHLHNDQUFzQyxDQUFDO0lBQ3JELENBQUM7Q0FDRiJ9
75
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5lcnJvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90c19yZWx5aW5ncGFydHkvY2xhc3Nlcy5lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE1BQU0sMEJBQTBCLEdBQXFEO0lBQ25GLHdCQUF3QixFQUFFLEdBQUc7SUFDN0Isc0JBQXNCLEVBQUUsR0FBRztJQUMzQixvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLHlCQUF5QixFQUFFLEdBQUc7SUFDOUIsc0JBQXNCLEVBQUUsR0FBRztJQUMzQixzQkFBc0IsRUFBRSxHQUFHO0lBQzNCLHlCQUF5QixFQUFFLEdBQUc7SUFDOUIsc0JBQXNCLEVBQUUsR0FBRztJQUMzQixvQkFBb0IsRUFBRSxHQUFHO0lBQ3pCLHNCQUFzQixFQUFFLEdBQUc7SUFDM0IsdUJBQXVCLEVBQUUsR0FBRztDQUM3QixDQUFDO0FBRUYscUdBQXFHO0FBQ3JHLE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxLQUFLO0lBR2QsSUFBSTtJQUZoQixNQUFNLENBQVM7SUFFL0IsWUFBNEIsSUFBNEI7UUFDdEQsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQURjLElBQUk7UUFFOUIsSUFBSSxDQUFDLElBQUksR0FBRyxtQkFBbUIsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLDBCQUEwQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pELENBQUM7Q0FDRjtBQUVEOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxLQUFLO0lBSTFCLElBQUk7SUFDSixNQUFNO0lBSlIsUUFBUSxDQUFVO0lBRWxDLFlBQ2tCLElBQVksRUFDWixNQUFjLEVBQzlCLFVBQVUsR0FBMEIsRUFBRTtRQUV0QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBSkksSUFBSTtzQkFDSixNQUFNO1FBSXRCLElBQUksQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUM7UUFDbEMsSUFBSSxVQUFVLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQztRQUN0QyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQscUdBQXFHO0FBQ3JHLE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxLQUFLO0lBRXpCLEtBQUs7SUFEdkIsWUFDa0IsS0FBMEIsRUFDMUMsUUFBaUI7UUFFakIsS0FBSyxDQUFDLDJDQUEyQyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7cUJBSHhELEtBQUs7UUFJckIsSUFBSSxDQUFDLElBQUksR0FBRyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0NBQ0Y7QUFRRCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsS0FBSztJQUdoQixJQUFJO0lBRmhCLE1BQU0sQ0FBUztJQUUvQixZQUE0QixJQUE4QixFQUFFLFFBQWtCO1FBQzVFLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztvQkFEUCxJQUFJO1FBRTlCLElBQUksQ0FBQyxJQUFJLEdBQUcscUJBQXFCLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLEtBQUssMEJBQTBCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQ2hFLENBQUM7Q0FDRjtBQUVELGdGQUFnRjtBQUNoRixNQUFNLE9BQU8sb0NBQXFDLFNBQVEsS0FBSztJQUM3RCxZQUFZLFFBQWtCO1FBQzVCLEtBQUssQ0FBQyxpRUFBaUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQzlGLElBQUksQ0FBQyxJQUFJLEdBQUcsc0NBQXNDLENBQUM7SUFDckQsQ0FBQztDQUNGIn0=
@@ -56,22 +56,80 @@ export interface IOidcRefreshedTokens {
56
56
  /** epoch milliseconds; `0` when the token response named no lifetime */
57
57
  accessTokenExpiresAt: number;
58
58
  }
59
+ /**
60
+ * What failed when the provider was asked, as an application tells the cases
61
+ * apart; never why access was refused, which only an authority answer says.
62
+ */
63
+ export type TOidcProviderErrorCode =
64
+ /**
65
+ * The provider refused the login: an OAuth error in the callback, for the
66
+ * code at the token endpoint, or for its token at UserInfo. `oauthError`
67
+ * names it, such as `invalid_grant` for a code that was used or expired.
68
+ */
69
+ 'token_exchange_refused'
70
+ /**
71
+ * The callback or its ID token is not this login's: a `state` that is not
72
+ * the login's, or an ID token claim that does not match it (the nonce, and
73
+ * likewise the issuer, the audience or the authorized party).
74
+ */
75
+ | 'login_mismatch'
76
+ /**
77
+ * The provider answered outside its contract: an ID token whose signature
78
+ * does not verify against the JWKS or that has expired, no subject, another
79
+ * subject at UserInfo, or a body that is no OAuth answer.
80
+ */
81
+ | 'invalid_response'
82
+ /** The provider could not be asked: no answer in time, a transport failure, a 5xx, or no discovery yet. */
83
+ | 'provider_unreachable'
84
+ /** The refresh grant answered `invalid_grant`: the refresh family is revoked, expired or was reused. */
85
+ | 'refresh_refused';
86
+ export declare const OIDC_PROVIDER_ERROR_CODES: readonly TOidcProviderErrorCode[];
87
+ /**
88
+ * Every failure of the provider this module throws: its `code` says which
89
+ * case it is, `oauthError` the provider's own OAuth error code where it sent
90
+ * one (a short token, never its description). An application classifies a
91
+ * failure by these and never by openid-client's classes; `cause` keeps the
92
+ * original for a debugger, not for a log line.
93
+ */
94
+ export declare class OidcProviderError extends Error {
95
+ readonly code: TOidcProviderErrorCode;
96
+ readonly oauthError?: string;
97
+ constructor(messageArg: string, detailArg: {
98
+ code: TOidcProviderErrorCode;
99
+ oauthError?: string;
100
+ }, causeArg?: unknown);
101
+ }
59
102
  /** Why an observation or a refresh could not be made; never why access was refused. */
60
103
  export type TOidcAuthorityFailure = 'unavailable' | 'invalid_response';
61
- /** The provider could not be asked, or did not answer in its own contract. The caller fails closed on it. */
62
- export declare class OidcAuthorityUnavailableError extends Error {
104
+ /**
105
+ * The provider could not be asked, or did not answer in its own contract. The
106
+ * caller fails closed on it. `code` is `provider_unreachable` or
107
+ * `invalid_response`, after `reason`.
108
+ */
109
+ export declare class OidcAuthorityUnavailableError extends OidcProviderError {
63
110
  readonly reason: TOidcAuthorityFailure;
64
111
  constructor(reason: TOidcAuthorityFailure, causeArg?: unknown);
65
112
  }
66
- /** The provider refused the refresh with `invalid_grant`: the refresh family is revoked, expired or was reused. */
67
- export declare class OidcRefreshRefusedError extends Error {
113
+ /**
114
+ * The provider refused the refresh with `invalid_grant`: the refresh family is
115
+ * revoked, expired or was reused. `code` is `refresh_refused`.
116
+ */
117
+ export declare class OidcRefreshRefusedError extends OidcProviderError {
68
118
  constructor(causeArg?: unknown);
69
119
  }
70
120
  export type TOidcTokenHint = 'access_token' | 'refresh_token';
71
121
  export type TOidcCompletionFailureStage = 'token_exchange' | 'token_validation' | 'userinfo';
72
- export declare class OidcCompletionError extends Error {
122
+ /**
123
+ * A login the provider half could not complete. `stage` says where it
124
+ * stopped, `code` what it was; without a `detailArg` the code is read from
125
+ * the cause, an openid-client failure.
126
+ */
127
+ export declare class OidcCompletionError extends OidcProviderError {
73
128
  readonly stage: TOidcCompletionFailureStage;
74
- constructor(stage: TOidcCompletionFailureStage, causeArg: unknown);
129
+ constructor(stage: TOidcCompletionFailureStage, causeArg: unknown, detailArg?: {
130
+ code: TOidcProviderErrorCode;
131
+ oauthError?: string;
132
+ });
75
133
  }
76
134
  /**
77
135
  * What the session layer needs from the provider. `IdpOidcProvider` is the
@@ -115,7 +173,7 @@ export interface IIdpOidcProviderOptions {
115
173
  /** the registered callback, on the application's public origin */
116
174
  redirectUri: URL;
117
175
  scopes?: string;
118
- /** deadline of discovery, token, UserInfo, refresh and revocation requests */
176
+ /** deadline of discovery, token, JWKS, UserInfo, refresh and revocation requests */
119
177
  requestTimeoutSeconds?: number;
120
178
  /** deadline of one introspection; the introspection client's default applies when absent */
121
179
  introspectionTimeoutMs?: number;
@@ -129,7 +187,7 @@ export interface IIdpOidcProviderOptions {
129
187
  trustedCaPem?: string | readonly string[];
130
188
  /**
131
189
  * Advanced: the fetch that carries every request of this provider —
132
- * discovery, token, UserInfo, refresh, revocation and introspection.
190
+ * discovery, token, JWKS, UserInfo, refresh, revocation and introspection.
133
191
  * It owns the transport's trust decisions; https-only still holds. Not
134
192
  * combined with `trustedCaPem`.
135
193
  */
@@ -144,9 +202,9 @@ export declare const readOrganizationClaims: (valueArg: unknown) => IOidcOrganiz
144
202
  /**
145
203
  * The relying-party side of the authorization code flow with S256 PKCE on
146
204
  * `openid-client`, in the profile idp.global supports: code responses, S256
147
- * challenges, RS256 ID tokens and `client_secret_basic` for a confidential
148
- * client. Live organization authority is observed with the sdk's
149
- * `OidcIntrospectionClient`.
205
+ * challenges, RS256 ID tokens whose signature is verified against the
206
+ * issuer's JWKS, and `client_secret_basic` for a confidential client. Live
207
+ * organization authority is observed with the sdk's `OidcIntrospectionClient`.
150
208
  */
151
209
  export declare class IdpOidcProvider implements IOidcProvider {
152
210
  #private;