@eventuras/fides-auth 0.14.1 → 0.15.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 (94) hide show
  1. package/README.md +225 -33
  2. package/dist/activity-tracker.js +1 -2
  3. package/dist/cookies.d.ts +6 -0
  4. package/dist/cookies.d.ts.map +1 -1
  5. package/dist/cookies.js +8 -3
  6. package/dist/cookies.js.map +1 -1
  7. package/dist/heartbeat.js +1 -2
  8. package/dist/id-token.d.ts +31 -0
  9. package/dist/id-token.d.ts.map +1 -0
  10. package/dist/id-token.js +60 -0
  11. package/dist/id-token.js.map +1 -0
  12. package/dist/index.js +3 -3
  13. package/dist/logger.js +1 -2
  14. package/dist/oauth-browser.d.ts +13 -10
  15. package/dist/oauth-browser.d.ts.map +1 -1
  16. package/dist/oauth-browser.js +4 -2
  17. package/dist/oauth-browser.js.map +1 -1
  18. package/dist/oauth-config.d.ts +70 -0
  19. package/dist/oauth-config.d.ts.map +1 -0
  20. package/dist/oauth-logging.d.ts +4 -3
  21. package/dist/oauth-logging.d.ts.map +1 -1
  22. package/dist/oauth-logging.js +5 -5
  23. package/dist/oauth-logging.js.map +1 -1
  24. package/dist/oauth.d.ts +47 -45
  25. package/dist/oauth.d.ts.map +1 -1
  26. package/dist/oauth.js +58 -29
  27. package/dist/oauth.js.map +1 -1
  28. package/dist/oidc-discovery.d.ts +13 -4
  29. package/dist/oidc-discovery.d.ts.map +1 -1
  30. package/dist/oidc-discovery.js +82 -15
  31. package/dist/oidc-discovery.js.map +1 -1
  32. package/dist/pkce.d.ts +10 -0
  33. package/dist/pkce.d.ts.map +1 -0
  34. package/dist/pkce.js +23 -0
  35. package/dist/pkce.js.map +1 -0
  36. package/dist/providers/vipps/client.d.ts +3 -2
  37. package/dist/providers/vipps/client.d.ts.map +1 -1
  38. package/dist/providers/vipps/index.js +10 -10
  39. package/dist/providers/vipps/index.js.map +1 -1
  40. package/dist/providers/vipps/types.d.ts +2 -2
  41. package/dist/providers/vipps/types.d.ts.map +1 -1
  42. package/dist/rate-limit.js +1 -2
  43. package/dist/server/authorized-fetch.d.ts +78 -0
  44. package/dist/server/authorized-fetch.d.ts.map +1 -0
  45. package/dist/server/heartbeat-handler.d.ts +6 -4
  46. package/dist/server/heartbeat-handler.d.ts.map +1 -1
  47. package/dist/server/index.d.ts +4 -0
  48. package/dist/server/index.d.ts.map +1 -1
  49. package/dist/server/index.js +744 -94
  50. package/dist/server/index.js.map +1 -1
  51. package/dist/server/login-transaction.d.ts +55 -0
  52. package/dist/server/login-transaction.d.ts.map +1 -0
  53. package/dist/server/oidc-callback.d.ts +13 -4
  54. package/dist/server/oidc-callback.d.ts.map +1 -1
  55. package/dist/server/oidc-login.d.ts +14 -5
  56. package/dist/server/oidc-login.d.ts.map +1 -1
  57. package/dist/server/oidc-logout.d.ts +6 -4
  58. package/dist/server/oidc-logout.d.ts.map +1 -1
  59. package/dist/server/session-persistence.d.ts +102 -0
  60. package/dist/server/session-persistence.d.ts.map +1 -0
  61. package/dist/server/session-store.d.ts +39 -0
  62. package/dist/server/session-store.d.ts.map +1 -0
  63. package/dist/server/session.d.ts +35 -28
  64. package/dist/server/session.d.ts.map +1 -1
  65. package/dist/session-cookies.d.ts +1 -0
  66. package/dist/session-cookies.d.ts.map +1 -1
  67. package/dist/session-cookies.js +4 -3
  68. package/dist/session-cookies.js.map +1 -1
  69. package/dist/session-events.d.ts +10 -3
  70. package/dist/session-events.d.ts.map +1 -1
  71. package/dist/session-events.js +4 -3
  72. package/dist/session-events.js.map +1 -1
  73. package/dist/session-refresh.d.ts +1 -1
  74. package/dist/session-refresh.d.ts.map +1 -1
  75. package/dist/session-refresh.js +1 -2
  76. package/dist/session-refresh.js.map +1 -1
  77. package/dist/session-validation.d.ts.map +1 -1
  78. package/dist/session-validation.js +9 -6
  79. package/dist/session-validation.js.map +1 -1
  80. package/dist/silent-login.d.ts +1 -1
  81. package/dist/silent-login.d.ts.map +1 -1
  82. package/dist/silent-login.js +3 -3
  83. package/dist/silent-login.js.map +1 -1
  84. package/dist/types.d.ts +4 -1
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/utils.d.ts +0 -14
  87. package/dist/utils.d.ts.map +1 -1
  88. package/dist/utils.js +2 -24
  89. package/dist/utils.js.map +1 -1
  90. package/docs/discovery-cache.md +7 -3
  91. package/docs/rp-initiated-logout.md +6 -3
  92. package/docs/server-sessions.md +154 -0
  93. package/docs/session-events.md +17 -16
  94. package/package.json +14 -6
@@ -0,0 +1,78 @@
1
+ import type { RefreshFailureCause, SessionRejectedReason } from '../session-events';
2
+ import type { Session } from '../types';
3
+ import type { RefreshSessionResult } from './session';
4
+ /** Why {@link authorizedFetch} failed. */
5
+ export type AuthorizedFetchErrorReason =
6
+ /** The URL is outside `allowedBase` or carries credentials. Nothing was sent. */
7
+ 'url_not_allowed'
8
+ /** The session has no access token. Nothing was sent. */
9
+ | 'no_access_token'
10
+ /** The request failed before a response, including a refused redirect. */
11
+ | 'network_error'
12
+ /** No response within `timeoutMs`. */
13
+ | 'timeout'
14
+ /** A 401, and the refresh failed. Not retried. */
15
+ | 'refresh_failed'
16
+ /** A non-2xx response. */
17
+ | 'http_error'
18
+ /** `parse` threw. */
19
+ | 'parse_failed';
20
+ export interface AuthorizedFetchErrorDetails {
21
+ status?: number;
22
+ method?: string;
23
+ url?: string;
24
+ refreshFailure?: {
25
+ reason: SessionRejectedReason;
26
+ cause?: RefreshFailureCause;
27
+ };
28
+ response?: Response;
29
+ cause?: unknown;
30
+ }
31
+ /** A failed {@link authorizedFetch}. Never carries the token or the query string. */
32
+ export declare class AuthorizedFetchError extends Error {
33
+ readonly reason: AuthorizedFetchErrorReason;
34
+ /** HTTP status, for `http_error` and `refresh_failed`. */
35
+ readonly status?: number;
36
+ readonly method?: string;
37
+ /** Origin and path only. */
38
+ readonly url?: string;
39
+ /** Why the refresh failed. Only `cause: 'invalid_grant'` means the user must log in again. */
40
+ readonly refreshFailure?: {
41
+ reason: SessionRejectedReason;
42
+ cause?: RefreshFailureCause;
43
+ };
44
+ /** The unread non-2xx response, for `http_error`. */
45
+ readonly response?: Response;
46
+ constructor(reason: AuthorizedFetchErrorReason, details?: AuthorizedFetchErrorDetails);
47
+ }
48
+ export interface AuthorizedFetchOptions<T = undefined> extends Omit<RequestInit, 'redirect'> {
49
+ /** Absolute http(s) URL. The token goes only to its origin, under its path. */
50
+ allowedBase: string | URL;
51
+ /** Reads and validates a 2xx response. Its result is `data`; a throw is `parse_failed`. */
52
+ parse?: (response: Response) => T | Promise<T>;
53
+ /** Per request, including a retry. @default 10000 */
54
+ timeoutMs?: number;
55
+ /**
56
+ * Called once on a 401, e.g. `() => tryRefreshSessionInStore(store, config, persistence)`.
57
+ * Without it a 401 is an `http_error`. A retry resends `body`, so don't pass a stream.
58
+ */
59
+ refresh?: () => Promise<RefreshSessionResult | Session | null>;
60
+ }
61
+ export interface AuthorizedFetchResult<T> {
62
+ /** The 2xx response. `parse` has read its body, if given. */
63
+ response: Response;
64
+ /** What `parse` returned. */
65
+ data: T;
66
+ /** The session that made the call: the refreshed one if `refreshed`. Use it from now on. */
67
+ session: Session;
68
+ /** A 401 led to a refresh. Persist `session` unless `refresh` already did. */
69
+ refreshed: boolean;
70
+ }
71
+ /**
72
+ * Calls an API with the session's access token.
73
+ *
74
+ * @throws {AuthorizedFetchError} on a disallowed URL, non-2xx, timeout, network error or failed refresh.
75
+ * @throws {TypeError} when `allowedBase` is not an http(s) URL without credentials.
76
+ */
77
+ export declare function authorizedFetch<T = undefined>(session: Session, url: string | URL, options: AuthorizedFetchOptions<T>): Promise<AuthorizedFetchResult<T>>;
78
+ //# sourceMappingURL=authorized-fetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authorized-fetch.d.ts","sourceRoot":"","sources":["../../src/server/authorized-fetch.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAMtD,0CAA0C;AAC1C,MAAM,MAAM,0BAA0B;AACpC,iFAAiF;AAC/E,iBAAiB;AACnB,yDAAyD;GACvD,iBAAiB;AACnB,0EAA0E;GACxE,eAAe;AACjB,sCAAsC;GACpC,SAAS;AACX,kDAAkD;GAChD,gBAAgB;AAClB,0BAA0B;GACxB,YAAY;AACd,qBAAqB;GACnB,cAAc,CAAC;AAEnB,MAAM,WAAW,2BAA2B;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,qBAAqB,CAAC;QAAC,KAAK,CAAC,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAChF,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qFAAqF;AACrF,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC5C,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,4BAA4B;IAC5B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,8FAA8F;IAC9F,QAAQ,CAAC,cAAc,CAAC,EAAE;QAAE,MAAM,EAAE,qBAAqB,CAAC;QAAC,KAAK,CAAC,EAAE,mBAAmB,CAAA;KAAE,CAAC;IACzF,qDAAqD;IACrD,SAAiB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAErC,YAAY,MAAM,EAAE,0BAA0B,EAAE,OAAO,GAAE,2BAAgC,EAexF;CACF;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAE,SAAQ,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC;IAC1F,+EAA+E;IAC/E,WAAW,EAAE,MAAM,GAAG,GAAG,CAAC;IAC1B,2FAA2F;IAC3F,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/C,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,oBAAoB,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;CAChE;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,6DAA6D;IAC7D,QAAQ,EAAE,QAAQ,CAAC;IACnB,6BAA6B;IAC7B,IAAI,EAAE,CAAC,CAAC;IACR,4FAA4F;IAC5F,OAAO,EAAE,OAAO,CAAC;IACjB,8EAA8E;IAC9E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,CAAC,GAAG,SAAS,EACjD,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,MAAM,GAAG,GAAG,EACjB,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC,GACjC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAmCnC"}
@@ -1,14 +1,15 @@
1
- import type { OAuthConfig } from '../oauth';
1
+ import type { OAuthConfig } from '../oauth-config';
2
2
  import type { CookieStore } from './cookie-store';
3
- export interface HeartbeatHandlerConfig {
3
+ import { type SessionPersistenceConfig } from './session-persistence';
4
+ /** {@link handleHeartbeat} config. Takes `secret`, `persistence`, or both. */
5
+ export type HeartbeatHandlerConfig = HeartbeatBaseConfig & SessionPersistenceConfig;
6
+ interface HeartbeatBaseConfig {
4
7
  /** OAuth/OIDC configuration used to refresh the access token. */
5
8
  oauthConfig: OAuthConfig;
6
9
  /** Cookie store holding the session. */
7
10
  cookies: CookieStore;
8
11
  /** Optional rate-limit gate. When it resolves false, the handler responds 429. */
9
12
  rateLimit?: () => boolean | Promise<boolean>;
10
- /** Session encryption secret. Defaults to {@link getSessionSecret}. */
11
- secret?: string | Uint8Array;
12
13
  }
13
14
  /**
14
15
  * Handles a heartbeat request — refresh the active session if there is one.
@@ -25,4 +26,5 @@ export interface HeartbeatHandlerConfig {
25
26
  * failures with backoff.
26
27
  */
27
28
  export declare function handleHeartbeat(request: Request, config: HeartbeatHandlerConfig): Promise<Response>;
29
+ export {};
28
30
  //# sourceMappingURL=heartbeat-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"heartbeat-handler.d.ts","sourceRoot":"","sources":["../../src/server/heartbeat-handler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAG5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAKlD,MAAM,WAAW,sBAAsB;IACrC,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IAEzB,wCAAwC;IACxC,OAAO,EAAE,WAAW,CAAC;IAErB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE7C,uEAAuE;IACvE,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAC9B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAkDnB"}
1
+ {"version":3,"file":"heartbeat-handler.d.ts","sourceRoot":"","sources":["../../src/server/heartbeat-handler.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAmB,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAIvF,8EAA8E;AAC9E,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,GAAG,wBAAwB,CAAC;AAEpF,UAAU,mBAAmB;IAC3B,iEAAiE;IACjE,WAAW,EAAE,WAAW,CAAC;IAEzB,wCAAwC;IACxC,OAAO,EAAE,WAAW,CAAC;IAErB,kFAAkF;IAClF,SAAS,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,sBAAsB,GAC7B,OAAO,CAAC,QAAQ,CAAC,CAmDnB"}
@@ -1,5 +1,9 @@
1
1
  export type { CookieStore } from './cookie-store';
2
+ export { createMemorySessionStore, type SessionStore, type StoredSession, } from './session-store';
3
+ export { cookiePersistence, serverPersistence, type ServerPersistenceOptions, type SessionPersistence, type SessionPersistenceConfig, type SessionSecret, } from './session-persistence';
2
4
  export { persistSession, readSession, tryReadSession, refreshSessionInStore, tryRefreshSessionInStore, readIdToken, clearSession, type ClearSessionOptions, type PersistSessionOptions, type ReadSessionResult, type RefreshSessionResult, } from './session';
5
+ export { createTransaction, persistTransaction, readTransaction, clearTransaction, validateCallback, transactionCookieOptions, CallbackValidationError, type CallbackValidationReason, type CreateTransactionOptions, type LoginTransaction, type TransactionCookieOptions, type ValidateCallbackOptions, } from './login-transaction';
6
+ export { authorizedFetch, AuthorizedFetchError, type AuthorizedFetchErrorDetails, type AuthorizedFetchErrorReason, type AuthorizedFetchOptions, type AuthorizedFetchResult, } from './authorized-fetch';
3
7
  export { handleOidcLogin, type OidcLoginConfig } from './oidc-login';
4
8
  export { handleOidcCallback, type OidcCallbackConfig } from './oidc-callback';
5
9
  export { handleOidcLogout, type OidcLogoutConfig } from './oidc-logout';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACL,cAAc,EACd,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAMA,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EACL,wBAAwB,EACxB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,aAAa,GACnB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EACL,cAAc,EACd,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,WAAW,EACX,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,GAC7B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}