@thunderid/browser 1.3.1 → 1.5.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.
@@ -0,0 +1,109 @@
1
+ import { BackendSession, ResolvedBackendEndpoints, SessionData } from '@thunderid/javascript';
2
+ /**
3
+ * Header every backend request carries. A cross-origin page cannot set it without a CORS preflight,
4
+ * which the backend never answers, so it keeps the cookie from being used cross-site.
5
+ */
6
+ export declare const BACKEND_REQUEST_HEADER = "X-Requested-With";
7
+ /**
8
+ * Talks to the app's backend when sign-in runs there: reads the session, refreshes it, and starts and ends it. The
9
+ * browser never holds a token; the backend keeps them behind an `HttpOnly` cookie.
10
+ */
11
+ declare class BackendClient {
12
+ private readonly endpoints;
13
+ private session;
14
+ private refreshing;
15
+ private hasLoadedSession;
16
+ /** Whether the session last seen was signed in, so a later read can tell it has ended. */
17
+ private wasSignedIn;
18
+ private lastCheck;
19
+ private readonly signedOutListeners;
20
+ constructor(endpoints: ResolvedBackendEndpoints);
21
+ /**
22
+ * Calls the listener when a signed-in session turns out to have ended without this client signing
23
+ * out: another app signed the user out, an administrator ended the session, or it timed out.
24
+ */
25
+ onSignedOut(listener: () => void): void;
26
+ /**
27
+ * Records that the session has ended, and tells the listeners when it had been signed in.
28
+ */
29
+ markSignedOut(): void;
30
+ /**
31
+ * Asks the backend whether the session is still live. The check neither refreshes the session nor
32
+ * counts as activity, so it can be polled without keeping an idle session alive.
33
+ *
34
+ * @returns Whether the session is live. A failed check reports the last known state.
35
+ */
36
+ checkSession(): Promise<boolean>;
37
+ /**
38
+ * Watches for the session ending while the page is open: checks it whenever the page gets focus or
39
+ * becomes visible again, and every `pollSeconds` while it is visible when that is positive.
40
+ *
41
+ * @returns A function that stops watching.
42
+ */
43
+ watch(pollSeconds: number): () => void;
44
+ /**
45
+ * Returns the session. The result is cached until a sign-in, sign-out, or refresh changes it, so
46
+ * repeated sign-in checks do not reach the server each time.
47
+ *
48
+ * @param reload - Read the session from the server even when one is cached.
49
+ */
50
+ getSession(reload?: boolean): Promise<BackendSession>;
51
+ /**
52
+ * Whether this client talks to exactly these endpoints.
53
+ */
54
+ hasEndpoints(endpoints: ResolvedBackendEndpoints): boolean;
55
+ /**
56
+ * Whether the first session read is still in flight, so it is not yet known whether the user is
57
+ * signed in.
58
+ */
59
+ isLoading(): boolean;
60
+ /**
61
+ * Refreshes the session once, sharing one request between concurrent callers.
62
+ *
63
+ * @returns Whether the session was refreshed. When it was not, the session is now signed out.
64
+ */
65
+ refresh(): Promise<boolean>;
66
+ /**
67
+ * The URL that starts sign-in at the backend and comes back to `returnTo`.
68
+ */
69
+ getSignInUrl(returnTo: string): string;
70
+ /**
71
+ * Ends the backend session.
72
+ *
73
+ * @returns The URL the browser visits to end the session at the authorization server.
74
+ */
75
+ signOut(): Promise<string>;
76
+ /**
77
+ * Maps an API URL to its backend proxy URL.
78
+ *
79
+ * @returns The proxy URL, or `undefined` when the URL is not under the API base and so cannot be
80
+ * sent with the session's credentials.
81
+ */
82
+ toProxyUrl(url: string): string | undefined;
83
+ /**
84
+ * Whether a request to this URL skips the proxy and goes straight from the browser.
85
+ */
86
+ isBypassed(url: string): boolean;
87
+ /**
88
+ * Whether requests that skip the proxy carry the access token.
89
+ */
90
+ attachesTokenOnBypass(): boolean;
91
+ /**
92
+ * Gets an access token for the requests that skip the proxy from the backend's token endpoint. It comes without a
93
+ * refresh token: when it expires, the caller asks again.
94
+ *
95
+ * @returns The token response, as the backend sent it.
96
+ */
97
+ requestAccessToken(): Promise<Partial<SessionData>>;
98
+ /**
99
+ * The headers and credentials mode every backend request is sent with.
100
+ */
101
+ static requestInit(headers?: Record<string, string>): Pick<RequestInit, 'credentials'> & {
102
+ headers: Record<string, string>;
103
+ };
104
+ private loadSession;
105
+ private signedOutSession;
106
+ private send;
107
+ }
108
+ export default BackendClient;
109
+ //# sourceMappingURL=BackendClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendClient.d.ts","sourceRoot":"","sources":["../src/BackendClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,cAAc,EAAE,wBAAwB,EAAE,WAAW,EAAyB,MAAM,uBAAuB,CAAC;AAEpH;;;GAGG;AACH,eAAO,MAAM,sBAAsB,qBAAqB,CAAC;AAOzD;;;GAGG;AACH,cAAM,aAAa;IAcL,OAAO,CAAC,QAAQ,CAAC,SAAS;IAbtC,OAAO,CAAC,OAAO,CAAsC;IAErD,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,gBAAgB,CAAS;IAEjC,0FAA0F;IAC1F,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAsB;gBAE5B,SAAS,EAAE,wBAAwB;IAEhE;;;OAGG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC;;OAEG;IACH,aAAa,IAAI,IAAI;IAUrB;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAmBtC;;;;;OAKG;IACH,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,IAAI;IA0BtC;;;;;OAKG;IACH,UAAU,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,cAAc,CAAC;IAiBnD;;OAEG;IACH,YAAY,CAAC,SAAS,EAAE,wBAAwB,GAAG,OAAO;IAS1D;;;OAGG;IACH,SAAS,IAAI,OAAO;IAIpB;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC;IAkB3B;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAItC;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAiBhC;;;;;OAKG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAe3C;;OAEG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAMhC;;OAEG;IACH,qBAAqB,IAAI,OAAO;IAIhC;;;;;OAKG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAuBzD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,GAAG,IAAI,CAAC,WAAW,EAAE,aAAa,CAAC,GAAG;QAC3F,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC;YAIa,WAAW;IA4BzB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,IAAI;CAGb;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { HttpRequestConfig, HttpResponse } from '@thunderid/javascript';
2
+ import BackendClient from './BackendClient';
3
+ import FetchHttpClient from './FetchHttpClient';
4
+ declare class BackendHttpClient extends FetchHttpClient {
5
+ private readonly backend;
6
+ private readonly getAccessToken;
7
+ /**
8
+ * @param backend - The backend client.
9
+ * @param getAccessToken - Returns the access token for bypassed requests; `renew` asks for a new one.
10
+ */
11
+ constructor(backend: BackendClient, getAccessToken: (renew: boolean) => Promise<string>);
12
+ protected transport<T = unknown>(config: HttpRequestConfig): Promise<HttpResponse<T>>;
13
+ /**
14
+ * Sends a request straight to its URL, skipping the proxy, with the cookies and the access token.
15
+ * When the API rejects the token, it gets a new one and retries once.
16
+ */
17
+ private sendBypassed;
18
+ }
19
+ export default BackendHttpClient;
20
+ //# sourceMappingURL=BackendHttpClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BackendHttpClient.d.ts","sourceRoot":"","sources":["../src/BackendHttpClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAY,iBAAiB,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAC;AACjF,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAchD,cAAM,iBAAkB,SAAQ,eAAe;IAM3C,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,cAAc;IANjC;;;OAGG;gBAEgB,OAAO,EAAE,aAAa,EACtB,cAAc,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC;cAK7C,SAAS,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAoCpG;;;OAGG;YACW,YAAY;CAyB3B;AAED,eAAe,iBAAiB,CAAC"}
@@ -10,6 +10,7 @@ import { HttpClient, HttpRequestConfig, HttpResponse } from '@thunderid/javascri
10
10
  export declare class FetchHttpClient extends HttpClient {
11
11
  private static instances;
12
12
  static getInstance(instanceId?: number, isHandlerEnabled?: boolean, attachToken?: (request: HttpRequestConfig) => Promise<void>): FetchHttpClient;
13
+ static setInstance(instanceId: number, client: FetchHttpClient): void;
13
14
  static destroyInstance(instanceId?: number): void;
14
15
  protected transport<T = any>(config: HttpRequestConfig): Promise<HttpResponse<T>>;
15
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FetchHttpClient.d.ts","sourceRoot":"","sources":["../src/FetchHttpClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAa,iBAAiB,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAE7F;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoE;IAE5F,MAAM,CAAC,WAAW,CAChB,UAAU,SAAI,EACd,gBAAgB,UAAO,EACvB,WAAW,GAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAA0C,GAClG,eAAe;IAOlB,MAAM,CAAC,eAAe,CAAC,UAAU,SAAI,GAAG,IAAI;cAI5B,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAuFxF;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"FetchHttpClient.d.ts","sourceRoot":"","sources":["../src/FetchHttpClient.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,UAAU,EAAa,iBAAiB,EAAE,YAAY,EAAC,MAAM,uBAAuB,CAAC;AAE7F;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,UAAU;IAC7C,OAAO,CAAC,MAAM,CAAC,SAAS,CAAoE;IAE5F,MAAM,CAAC,WAAW,CAChB,UAAU,SAAI,EACd,gBAAgB,UAAO,EACvB,WAAW,GAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAA0C,GAClG,eAAe;IAOlB,MAAM,CAAC,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAIrE,MAAM,CAAC,eAAe,CAAC,UAAU,SAAI,GAAG,IAAI;cAI5B,SAAS,CAAC,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAuFxF;AAED,eAAe,eAAe,CAAC"}
@@ -14,11 +14,19 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
14
14
  private _hookCallbacks;
15
15
  private _initialized;
16
16
  private _startedInitialize;
17
+ private _backend;
18
+ private _stopBackendWatch;
19
+ private _backendTokenRequest;
17
20
  constructor(instanceId?: number);
18
21
  initialize(config: T, storage?: Storage): Promise<boolean>;
19
22
  isInitialized(): Promise<boolean>;
20
23
  private _validateMethod;
21
24
  isLoading(): boolean;
25
+ /**
26
+ * Whether sign-in runs on the app's backend, which holds the tokens so the browser never does.
27
+ */
28
+ isBackendMode(): boolean;
29
+ private _rejectInBackendMode;
22
30
  signIn(config?: SignInConfig, authorizationCode?: string, state?: string, tokenRequestConfig?: {
23
31
  params: Record<string, unknown>;
24
32
  }): Promise<User | undefined>;
@@ -31,6 +39,7 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
31
39
  signOut(_options?: any, sessionIdOrAfterSignOut?: string | ((url: string) => void), afterSignOutParam?: (url: string) => void): Promise<string>;
32
40
  httpRequest(requestConfig: HttpRequestConfig): Promise<HttpResponse | undefined>;
33
41
  httpRequestAll(configs: HttpRequestConfig[]): Promise<HttpResponse[] | undefined>;
42
+ private _backendRequest;
34
43
  getUser(userId?: string): Promise<User>;
35
44
  /**
36
45
  * Fetches the signed-in user's profile from the `/users/me` endpoint (or `endpoints.usersMe` when
@@ -44,6 +53,13 @@ declare class ThunderIDBrowserClient<T = BrowserAuthConfig> extends ThunderIDJav
44
53
  url?: string;
45
54
  }): Promise<UserProfile>;
46
55
  getAccessToken(sessionId?: string): Promise<string>;
56
+ /**
57
+ * The access token for requests under `endpoints.backend.bypass`. Like a client credentials token it
58
+ * has no refresh token: it is kept in the session storage until it nears expiry, then requested again.
59
+ *
60
+ * @param renew - Request a new token even when the stored one is still valid.
61
+ */
62
+ private _getBackendAccessToken;
47
63
  getDecodedIdToken(userId?: string, idToken?: string): Promise<IdToken>;
48
64
  getIdToken(userId?: string): Promise<string>;
49
65
  getOpenIDProviderEndpoints(): Promise<Partial<OIDCEndpoints>>;
@@ -1 +1 @@
1
- {"version":3,"file":"ThunderIDBrowserClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDBrowserClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ThunderIDBrowserClient.d.ts","sourceRoot":"","sources":["../src/ThunderIDBrowserClient.ts"],"names":[],"mappings":"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"}