@flytedesk/app-kit 6.0.0 → 7.1.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.
- package/README.md +192 -41
- package/dist/auth/client/authSession.d.ts +168 -0
- package/dist/auth/client/authSession.js +581 -0
- package/dist/auth/client/authSession.js.map +1 -0
- package/dist/auth/client/browserEnvironment.d.ts +22 -0
- package/dist/auth/client/browserEnvironment.js +87 -0
- package/dist/auth/client/browserEnvironment.js.map +1 -0
- package/dist/auth/client/httpClient.d.ts +32 -28
- package/dist/auth/client/httpClient.js +91 -84
- package/dist/auth/client/httpClient.js.map +1 -1
- package/dist/auth/client/index.d.ts +15 -8
- package/dist/auth/client/index.js +13 -7
- package/dist/auth/client/index.js.map +1 -1
- package/dist/auth/client/testing.d.ts +6 -0
- package/dist/auth/client/testing.js +20 -0
- package/dist/auth/client/testing.js.map +1 -0
- package/dist/auth/client/useAuthSession.d.ts +54 -91
- package/dist/auth/client/useAuthSession.js +65 -252
- package/dist/auth/client/useAuthSession.js.map +1 -1
- package/dist/auth/index.d.ts +3 -4
- package/dist/auth/index.js +1 -2
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/oidc-client.d.ts +18 -4
- package/dist/auth/oidc-client.js +18 -1
- package/dist/auth/oidc-client.js.map +1 -1
- package/dist/auth/plugin.js +244 -225
- package/dist/auth/plugin.js.map +1 -1
- package/dist/auth/returnTarget.d.ts +30 -0
- package/dist/auth/returnTarget.js +48 -0
- package/dist/auth/returnTarget.js.map +1 -0
- package/dist/auth/shared-types.d.ts +18 -41
- package/dist/auth/shared-types.js +18 -45
- package/dist/auth/shared-types.js.map +1 -1
- package/dist/auth/testing/fake-idp.d.ts +29 -1
- package/dist/auth/testing/fake-idp.js +142 -31
- package/dist/auth/testing/fake-idp.js.map +1 -1
- package/dist/auth/types.d.ts +26 -29
- package/dist/bigquery/index.d.ts +1 -1
- package/dist/bigquery/params.d.ts +6 -0
- package/dist/bigquery/params.js +79 -0
- package/dist/bigquery/params.js.map +1 -0
- package/dist/bigquery/query.js +3 -0
- package/dist/bigquery/query.js.map +1 -1
- package/dist/bigquery/types.d.ts +37 -4
- package/package.json +9 -3
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The real browser behind `./authSession.ts`'s `AuthSessionEnvironment` (AK-35), and the
|
|
3
|
+
* one per-tab `authSession` every app reads. Browser-safe, ZERO Node imports.
|
|
4
|
+
*
|
|
5
|
+
* This package's tsconfig deliberately has no "DOM" lib (it is Node-first — see
|
|
6
|
+
* `./httpClient.ts`'s own `declare const window`), so the few browser globals used here
|
|
7
|
+
* are declared below with exactly the members this file touches. The declarations are
|
|
8
|
+
* erased at compile time and resolve to the real browser objects at runtime.
|
|
9
|
+
*/
|
|
10
|
+
import { createAuthSession, SESSION_CHANNEL, } from "./authSession.js";
|
|
11
|
+
function isSessionMessage(data) {
|
|
12
|
+
if (typeof data !== "object" || data === null)
|
|
13
|
+
return false;
|
|
14
|
+
const { type, userId } = data;
|
|
15
|
+
return (type === "signed-out" ||
|
|
16
|
+
(type === "signed-in" && typeof userId === "string"));
|
|
17
|
+
}
|
|
18
|
+
export function browserEnvironment() {
|
|
19
|
+
return {
|
|
20
|
+
href: () => window.location.href,
|
|
21
|
+
navigate: (url) => window.location.assign(url),
|
|
22
|
+
replaceUrl: (url) => window.history.replaceState(null, "", url),
|
|
23
|
+
reload: () => window.location.reload(),
|
|
24
|
+
isVisible: () => document.visibilityState === "visible",
|
|
25
|
+
onAttention(listener) {
|
|
26
|
+
const onVisibility = () => {
|
|
27
|
+
if (document.visibilityState === "visible")
|
|
28
|
+
listener();
|
|
29
|
+
};
|
|
30
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
31
|
+
window.addEventListener("focus", listener);
|
|
32
|
+
return () => {
|
|
33
|
+
document.removeEventListener("visibilitychange", onVisibility);
|
|
34
|
+
window.removeEventListener("focus", listener);
|
|
35
|
+
};
|
|
36
|
+
},
|
|
37
|
+
onRestore(listener) {
|
|
38
|
+
const onPageShow = (event) => {
|
|
39
|
+
if (event.persisted)
|
|
40
|
+
listener();
|
|
41
|
+
};
|
|
42
|
+
window.addEventListener("pageshow", onPageShow);
|
|
43
|
+
return () => window.removeEventListener("pageshow", onPageShow);
|
|
44
|
+
},
|
|
45
|
+
// Read lazily, per call: merely touching `window.sessionStorage` throws when site data
|
|
46
|
+
// is blocked, which the lifecycle handles per key.
|
|
47
|
+
sessionStorage: () => window.sessionStorage,
|
|
48
|
+
localStorage: () => window.localStorage,
|
|
49
|
+
openChannel(onMessage) {
|
|
50
|
+
const channel = new BroadcastChannel(SESSION_CHANNEL);
|
|
51
|
+
channel.onmessage = (event) => {
|
|
52
|
+
if (isSessionMessage(event.data))
|
|
53
|
+
onMessage(event.data);
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
post: (message) => channel.postMessage(message),
|
|
57
|
+
close: () => channel.close(),
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
let instance = null;
|
|
63
|
+
function current() {
|
|
64
|
+
instance ??= createAuthSession(browserEnvironment());
|
|
65
|
+
return instance;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* THE session of this tab — one lifecycle, however many components or modules read it.
|
|
69
|
+
* Created on first use (never at import, so importing this module is safe during SSR or
|
|
70
|
+
* in a Node test). React code reads it through `useAuthSession()`; anything else (an
|
|
71
|
+
* API helper, a store outside React) through `authSession.getSnapshot()` and
|
|
72
|
+
* `authSession.subscribe()`.
|
|
73
|
+
*/
|
|
74
|
+
export const authSession = {
|
|
75
|
+
getSnapshot: () => current().getSnapshot(),
|
|
76
|
+
subscribe: (listener) => current().subscribe(listener),
|
|
77
|
+
signOut: () => current().signOut(),
|
|
78
|
+
retry: () => current().retry(),
|
|
79
|
+
refreshUser: () => current().refreshUser(),
|
|
80
|
+
};
|
|
81
|
+
/** Test seam (`@flytedesk/app-kit/auth/client/testing`): stops and forgets the tab's
|
|
82
|
+
* lifecycle, so the next use starts a fresh one. */
|
|
83
|
+
export function resetAuthSession() {
|
|
84
|
+
instance?.stop();
|
|
85
|
+
instance = null;
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=browserEnvironment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browserEnvironment.js","sourceRoot":"","sources":["../../../src/auth/client/browserEnvironment.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,8 +43,8 @@ export type AuthUnavailableErrorCode = AuthUnavailableCode | typeof AUTH_UNREACH
|
|
|
43
43
|
* carrying one of `AUTH_UNAVAILABLE_CODES`) — or the automatic refresh reached no
|
|
44
44
|
* decision at all (`AUTH_UNREACHABLE_CODE`). Transient, and NOT a sign-out: the session
|
|
45
45
|
* (its refresh cookie) is intact and the same request can succeed once the dependency
|
|
46
|
-
* recovers.
|
|
47
|
-
* session and retries with backoff (its `"unavailable"` status). A subclass of
|
|
46
|
+
* recovers. It never announces a session end (`onSessionEnded`); `./authSession.ts` keeps
|
|
47
|
+
* the session and retries with backoff (its `"unavailable"` status). A subclass of
|
|
48
48
|
* ApiRequestError, so existing `instanceof ApiRequestError` handling still sees it.
|
|
49
49
|
*/
|
|
50
50
|
export declare class AuthUnavailableError extends ApiRequestError {
|
|
@@ -58,7 +58,7 @@ type AuthUnavailableListener = (error: AuthUnavailableError) => void;
|
|
|
58
58
|
* layer learns that an ordinary request hit an outage, so it can show "reconnecting"
|
|
59
59
|
* instead of treating the user as signed out. Returns the unsubscribe function. */
|
|
60
60
|
export declare function onAuthUnavailable(listener: AuthUnavailableListener): () => void;
|
|
61
|
-
/** A request that missed its deadline (see
|
|
61
|
+
/** A request that missed its deadline (see withCancellation). */
|
|
62
62
|
export declare class RequestDeadlineError extends Error {
|
|
63
63
|
constructor(what: string, ms: number);
|
|
64
64
|
}
|
|
@@ -70,33 +70,31 @@ export declare function getAccessToken(): string | null;
|
|
|
70
70
|
/** As configured via configureApiClient — same origin/path every request in this
|
|
71
71
|
* module targets. */
|
|
72
72
|
export declare function getBaseUrl(): string;
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
* then just reports the second 401 as a failure, with no recovery attempt. */
|
|
86
|
-
export declare function setAuthRecovery(recovery: AuthRecovery): () => void;
|
|
73
|
+
type SessionEndedListener = () => void;
|
|
74
|
+
/**
|
|
75
|
+
* Subscribes to the ONE signal that a session is over (AK-35): a request answered 401
|
|
76
|
+
* and the shared `refreshAccessToken()` then resolved `null` — the plugin itself refused
|
|
77
|
+
* the refresh cookie. That verdict, and only that, is what `./authSession.ts` turns into
|
|
78
|
+
* the session-expired state and an automatic sign-in. A 401 that follows a SUCCESSFUL
|
|
79
|
+
* refresh-and-retry is that route's own answer about that request (the session was just
|
|
80
|
+
* proven live), so it is thrown to the caller and never announced here — treating it as
|
|
81
|
+
* a session loss would loop: expired -> sign in -> authenticated -> the same 401.
|
|
82
|
+
* Internal to `@flytedesk/app-kit/auth/client`: an app never subscribes itself.
|
|
83
|
+
*/
|
|
84
|
+
export declare function onSessionEnded(listener: SessionEndedListener): () => void;
|
|
87
85
|
/**
|
|
88
86
|
* Runs — or joins, when one is already in flight — THE one `POST {routePrefix}/refresh`,
|
|
89
87
|
* and resolves the new access token (also stored via setAccessToken). Single-flighted and
|
|
90
|
-
* always deadline-bound: every caller that 401s, and
|
|
88
|
+
* always deadline-bound: every caller that 401s, and `./authSession.ts`'s own loads, share
|
|
91
89
|
* this one refresh — the refresh cookie rotates on every call, so two concurrent
|
|
92
90
|
* refreshes presenting one cookie would race, and a refresh that never answered would
|
|
93
91
|
* stall them all.
|
|
94
92
|
*
|
|
95
93
|
* AK-23 (L-c): only the plugin's verdict signs anyone out. A 401 — the one answer the
|
|
96
94
|
* plugin gives a refresh it refuses — resolves `null` ("no new token"), which
|
|
97
|
-
*
|
|
98
|
-
* AuthUnavailableError, shared by every waiting caller, so no caller
|
|
99
|
-
*
|
|
95
|
+
* sendWithAuthRetry treats as the session being over (`onSessionEnded`). Every other
|
|
96
|
+
* outcome rejects with AuthUnavailableError, shared by every waiting caller, so no caller
|
|
97
|
+
* ever announces a session end over an outage: the plugin's own 503 "could not decide",
|
|
100
98
|
* and an outcome that is no decision at all (AUTH_UNREACHABLE_CODE) — a network error,
|
|
101
99
|
* the deadline (the server's `/refresh` can legitimately outlast it: a contended
|
|
102
100
|
* session lock plus a slow flytedesk-id `/token` and authorization call), or a status
|
|
@@ -113,17 +111,23 @@ export interface RequestOptions {
|
|
|
113
111
|
* body decode. Past it the call rejects with a RequestDeadlineError and does nothing
|
|
114
112
|
* further (no retry, no auth-failure event). */
|
|
115
113
|
deadlineMs?: number;
|
|
116
|
-
/** Set only by a session layer's own bootstrap/probe calls, which ARE the auth
|
|
117
|
-
* recovery (or start it): a 401 that survives the refresh still starts the shared
|
|
118
|
-
* recovery, but this call does not wait for it — waiting would mean the recovery
|
|
119
|
-
* waiting on itself. */
|
|
120
|
-
ownsAuthRecovery?: boolean;
|
|
121
114
|
/** Passed straight to `fetch`'s own `keepalive` — lets a request started right
|
|
122
115
|
* before the page unloads actually complete instead of being cancelled the instant
|
|
123
116
|
* the page goes away. Only meaningfully used with a small body: the browser caps
|
|
124
117
|
* the total size of in-flight keepalive requests (~64KB combined). */
|
|
125
118
|
keepalive?: boolean;
|
|
119
|
+
/** An external abort signal (e.g. a hook's cleanup when a newer request supersedes
|
|
120
|
+
* this one) — aborts the in-flight fetch immediately, independent of deadlineMs, and
|
|
121
|
+
* the call rejects with the signal's reason (the standard AbortError unless the caller
|
|
122
|
+
* passed another). An aborted call is nothing but cancelled: it never retries, starts
|
|
123
|
+
* no refresh and announces no session end. The shared token refresh a 401 may have
|
|
124
|
+
* started is not cancelled (other callers may be waiting on it). */
|
|
125
|
+
signal?: AbortSignal;
|
|
126
126
|
}
|
|
127
|
+
/** The absolute URL of `path` on this client's api — for a top-level navigation (the
|
|
128
|
+
* sign-in route), which, unlike a fetch, can't be left relative to a dev proxy. A
|
|
129
|
+
* same-origin `baseUrl` resolves against `pageOrigin`. */
|
|
130
|
+
export declare function absoluteApiUrl(path: string, pageOrigin: string): string;
|
|
127
131
|
/** The one place a browser app talks to its own BFF api. Handles bearer auth,
|
|
128
132
|
* transparent access-token refresh on 401, and the { error, code, field? } error
|
|
129
133
|
* contract every @flytedesk/app-kit/auth-backed api returns. */
|
|
@@ -141,8 +145,8 @@ export interface ApiDownloadOptions {
|
|
|
141
145
|
/** Bounds the whole call exactly like RequestOptions.deadlineMs — first attempt, any
|
|
142
146
|
* refresh it waits on, the retry and the blob read. */
|
|
143
147
|
deadlineMs?: number;
|
|
144
|
-
/** An external abort signal (e.g. a component's cleanup) —
|
|
145
|
-
* fetch immediately, independent of deadlineMs. */
|
|
148
|
+
/** An external abort signal (e.g. a component's cleanup) — exactly RequestOptions.signal:
|
|
149
|
+
* aborts the in-flight fetch immediately, independent of deadlineMs. */
|
|
146
150
|
signal?: AbortSignal;
|
|
147
151
|
skipAuthRetry?: boolean;
|
|
148
152
|
}
|
|
@@ -47,8 +47,8 @@ export const AUTH_UNREACHABLE_CODE = "auth_unreachable";
|
|
|
47
47
|
* carrying one of `AUTH_UNAVAILABLE_CODES`) — or the automatic refresh reached no
|
|
48
48
|
* decision at all (`AUTH_UNREACHABLE_CODE`). Transient, and NOT a sign-out: the session
|
|
49
49
|
* (its refresh cookie) is intact and the same request can succeed once the dependency
|
|
50
|
-
* recovers.
|
|
51
|
-
* session and retries with backoff (its `"unavailable"` status). A subclass of
|
|
50
|
+
* recovers. It never announces a session end (`onSessionEnded`); `./authSession.ts` keeps
|
|
51
|
+
* the session and retries with backoff (its `"unavailable"` status). A subclass of
|
|
52
52
|
* ApiRequestError, so existing `instanceof ApiRequestError` handling still sees it.
|
|
53
53
|
*/
|
|
54
54
|
export class AuthUnavailableError extends ApiRequestError {
|
|
@@ -87,7 +87,7 @@ async function errorFromResponse(res) {
|
|
|
87
87
|
}
|
|
88
88
|
return new ApiRequestError(res.status, body);
|
|
89
89
|
}
|
|
90
|
-
/** A request that missed its deadline (see
|
|
90
|
+
/** A request that missed its deadline (see withCancellation). */
|
|
91
91
|
export class RequestDeadlineError extends Error {
|
|
92
92
|
constructor(what, ms) {
|
|
93
93
|
super(`${what} did not complete within ${ms}ms`);
|
|
@@ -111,46 +111,64 @@ export function getAccessToken() {
|
|
|
111
111
|
export function getBaseUrl() {
|
|
112
112
|
return baseUrl;
|
|
113
113
|
}
|
|
114
|
-
|
|
115
|
-
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
|
|
123
|
-
|
|
114
|
+
const sessionEndedListeners = new Set();
|
|
115
|
+
/**
|
|
116
|
+
* Subscribes to the ONE signal that a session is over (AK-35): a request answered 401
|
|
117
|
+
* and the shared `refreshAccessToken()` then resolved `null` — the plugin itself refused
|
|
118
|
+
* the refresh cookie. That verdict, and only that, is what `./authSession.ts` turns into
|
|
119
|
+
* the session-expired state and an automatic sign-in. A 401 that follows a SUCCESSFUL
|
|
120
|
+
* refresh-and-retry is that route's own answer about that request (the session was just
|
|
121
|
+
* proven live), so it is thrown to the caller and never announced here — treating it as
|
|
122
|
+
* a session loss would loop: expired -> sign in -> authenticated -> the same 401.
|
|
123
|
+
* Internal to `@flytedesk/app-kit/auth/client`: an app never subscribes itself.
|
|
124
|
+
*/
|
|
125
|
+
export function onSessionEnded(listener) {
|
|
126
|
+
sessionEndedListeners.add(listener);
|
|
124
127
|
return () => {
|
|
125
|
-
|
|
126
|
-
authRecovery = null;
|
|
128
|
+
sessionEndedListeners.delete(listener);
|
|
127
129
|
};
|
|
128
130
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
131
|
+
function announceSessionEnded() {
|
|
132
|
+
for (const listener of sessionEndedListeners)
|
|
133
|
+
listener();
|
|
134
|
+
}
|
|
135
|
+
/** Runs `run` under an optional deadline and an optional caller abort signal — the one
|
|
136
|
+
* cancellation mechanism every request this client makes goes through. `run` gets an
|
|
137
|
+
* AbortSignal that aborts (so the underlying fetch, and any body read on it, is
|
|
138
|
+
* cancelled) when the deadline `ms` passes or when `externalSignal` aborts. The
|
|
139
|
+
* returned promise then rejects — with a RequestDeadlineError for the deadline, with the
|
|
140
|
+
* caller's own abort reason (the standard AbortError unless they passed another) for the
|
|
141
|
+
* signal — and that rejection does not depend on whatever `run` awaits honouring the
|
|
142
|
+
* signal, so this settles no matter what. A signal that is already aborted rejects
|
|
143
|
+
* before `run` starts. */
|
|
144
|
+
async function withCancellation(what, ms, run, externalSignal) {
|
|
145
|
+
externalSignal?.throwIfAborted();
|
|
134
146
|
const controller = new AbortController();
|
|
135
|
-
if (externalSignal) {
|
|
136
|
-
if (externalSignal.aborted)
|
|
137
|
-
controller.abort(externalSignal.reason);
|
|
138
|
-
else
|
|
139
|
-
externalSignal.addEventListener("abort", () => controller.abort(externalSignal.reason), { once: true });
|
|
140
|
-
}
|
|
141
147
|
let timer;
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
+
let onExternalAbort;
|
|
149
|
+
const interrupted = new Promise((_, reject) => {
|
|
150
|
+
if (externalSignal) {
|
|
151
|
+
onExternalAbort = () => {
|
|
152
|
+
controller.abort(externalSignal.reason);
|
|
153
|
+
reject(externalSignal.reason);
|
|
154
|
+
};
|
|
155
|
+
externalSignal.addEventListener("abort", onExternalAbort, { once: true });
|
|
156
|
+
}
|
|
157
|
+
if (ms !== undefined) {
|
|
158
|
+
timer = setTimeout(() => {
|
|
159
|
+
const reason = new RequestDeadlineError(what, ms);
|
|
160
|
+
controller.abort(reason);
|
|
161
|
+
reject(reason);
|
|
162
|
+
}, ms);
|
|
163
|
+
}
|
|
148
164
|
});
|
|
149
165
|
try {
|
|
150
|
-
return await Promise.race([run(controller.signal),
|
|
166
|
+
return await Promise.race([run(controller.signal), interrupted]);
|
|
151
167
|
}
|
|
152
168
|
finally {
|
|
153
169
|
clearTimeout(timer);
|
|
170
|
+
if (onExternalAbort)
|
|
171
|
+
externalSignal?.removeEventListener("abort", onExternalAbort);
|
|
154
172
|
}
|
|
155
173
|
}
|
|
156
174
|
/** The AuthUnavailableError (announced to onAuthUnavailable listeners) for a refresh
|
|
@@ -164,16 +182,16 @@ function refreshUnreachable(status, cause) {
|
|
|
164
182
|
/**
|
|
165
183
|
* Runs — or joins, when one is already in flight — THE one `POST {routePrefix}/refresh`,
|
|
166
184
|
* and resolves the new access token (also stored via setAccessToken). Single-flighted and
|
|
167
|
-
* always deadline-bound: every caller that 401s, and
|
|
185
|
+
* always deadline-bound: every caller that 401s, and `./authSession.ts`'s own loads, share
|
|
168
186
|
* this one refresh — the refresh cookie rotates on every call, so two concurrent
|
|
169
187
|
* refreshes presenting one cookie would race, and a refresh that never answered would
|
|
170
188
|
* stall them all.
|
|
171
189
|
*
|
|
172
190
|
* AK-23 (L-c): only the plugin's verdict signs anyone out. A 401 — the one answer the
|
|
173
191
|
* plugin gives a refresh it refuses — resolves `null` ("no new token"), which
|
|
174
|
-
*
|
|
175
|
-
* AuthUnavailableError, shared by every waiting caller, so no caller
|
|
176
|
-
*
|
|
192
|
+
* sendWithAuthRetry treats as the session being over (`onSessionEnded`). Every other
|
|
193
|
+
* outcome rejects with AuthUnavailableError, shared by every waiting caller, so no caller
|
|
194
|
+
* ever announces a session end over an outage: the plugin's own 503 "could not decide",
|
|
177
195
|
* and an outcome that is no decision at all (AUTH_UNREACHABLE_CODE) — a network error,
|
|
178
196
|
* the deadline (the server's `/refresh` can legitimately outlast it: a contended
|
|
179
197
|
* session lock plus a slow flytedesk-id `/token` and authorization call), or a status
|
|
@@ -182,7 +200,7 @@ function refreshUnreachable(status, cause) {
|
|
|
182
200
|
export async function refreshAccessToken() {
|
|
183
201
|
if (!refreshPromise) {
|
|
184
202
|
const refreshPath = authRoutePath(AUTH_ROUTE_PREFIX, "refresh");
|
|
185
|
-
refreshPromise =
|
|
203
|
+
refreshPromise = withCancellation(`POST ${refreshPath}`, DEFAULT_REQUEST_DEADLINE_MS, async (signal) => {
|
|
186
204
|
const res = await fetch(`${baseUrl}${refreshPath}`, {
|
|
187
205
|
method: "POST",
|
|
188
206
|
credentials: "include",
|
|
@@ -216,6 +234,12 @@ export async function refreshAccessToken() {
|
|
|
216
234
|
function isAbsoluteUrl(value) {
|
|
217
235
|
return /^[a-z][a-z\d+.-]*:\/\//i.test(value);
|
|
218
236
|
}
|
|
237
|
+
/** The absolute URL of `path` on this client's api — for a top-level navigation (the
|
|
238
|
+
* sign-in route), which, unlike a fetch, can't be left relative to a dev proxy. A
|
|
239
|
+
* same-origin `baseUrl` resolves against `pageOrigin`. */
|
|
240
|
+
export function absoluteApiUrl(path, pageOrigin) {
|
|
241
|
+
return isAbsoluteUrl(baseUrl) ? `${baseUrl}${path}` : `${pageOrigin}${baseUrl}${path}`;
|
|
242
|
+
}
|
|
219
243
|
function buildUrl(path, query) {
|
|
220
244
|
const url = new URL(baseUrl + path, typeof window !== "undefined" ? window.location.origin : "http://localhost");
|
|
221
245
|
if (query) {
|
|
@@ -235,54 +259,40 @@ function buildUrl(path, query) {
|
|
|
235
259
|
return isAbsoluteUrl(baseUrl) ? url.toString() : url.pathname + url.search;
|
|
236
260
|
}
|
|
237
261
|
/** Shared tail of both apiRequest and apiUpload: fires `doFetch`, transparently
|
|
238
|
-
* retries once after a refresh on 401 (unless skipped)
|
|
239
|
-
* more after the shared auth recovery (see setAuthRecovery) — and applies the same
|
|
262
|
+
* retries once after a refresh on 401 (unless skipped), and applies the same
|
|
240
263
|
* { error, code, field? } error contract / 204-handling / JSON decode to the result —
|
|
241
|
-
* all under `deadlineMs`
|
|
264
|
+
* all under the optional `deadlineMs` and the caller's optional abort `signal` (see
|
|
265
|
+
* withCancellation). Kept as one place so
|
|
242
266
|
* the auth-retry dance can't drift between the JSON and multipart transports. */
|
|
243
267
|
async function sendAndDecode(label, doFetch, options) {
|
|
244
|
-
const { deadlineMs } = options;
|
|
245
|
-
|
|
246
|
-
return decodeWithAuthRetry(doFetch, options);
|
|
247
|
-
return withDeadline(label, deadlineMs, (signal) => decodeWithAuthRetry(doFetch, options, signal));
|
|
268
|
+
const { deadlineMs, signal } = options;
|
|
269
|
+
return withCancellation(label, deadlineMs, (fetchSignal) => decodeWithAuthRetry(doFetch, options, fetchSignal), signal);
|
|
248
270
|
}
|
|
249
|
-
/** The shared tail of every transport this client offers: fires `doFetch`,
|
|
250
|
-
*
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
const recovery = authRecovery;
|
|
258
|
-
const sentAs = recovery?.principal() ?? null;
|
|
271
|
+
/** The shared tail of every transport this client offers: fires `doFetch`, and on a
|
|
272
|
+
* 401 (unless skipped) refreshes once through the shared single-flighted
|
|
273
|
+
* `refreshAccessToken` and retries. When that refresh is REFUSED (it resolves `null`),
|
|
274
|
+
* the session is over: `onSessionEnded` listeners hear it and the 401 is thrown. Any
|
|
275
|
+
* non-2xx left after that is thrown decoded. Returns the successful raw Response so
|
|
276
|
+
* each transport (JSON body, blob download) can decode it its own way; this is the ONE
|
|
277
|
+
* place the auth-retry dance lives, so it can't drift between them. */
|
|
278
|
+
async function sendWithAuthRetry(doFetch, { skipAuthRetry }, signal) {
|
|
259
279
|
let res = await doFetch(signal);
|
|
260
280
|
if (res.status === 401 && !skipAuthRetry) {
|
|
261
281
|
// Rejects with AuthUnavailableError on an outage (AK-23) — straight out of this
|
|
262
|
-
// call
|
|
282
|
+
// call: an outage is not a sign-out.
|
|
263
283
|
const refreshed = await refreshAccessToken();
|
|
264
|
-
// The shared refresh is not cancelled by this call's deadline (other callers
|
|
265
|
-
// still want it) — but a call that has already missed its deadline
|
|
266
|
-
//
|
|
284
|
+
// The shared refresh is not cancelled by this call's deadline or abort (other callers
|
|
285
|
+
// may still want it) — but a call that has already missed its deadline, or whose
|
|
286
|
+
// caller aborted it (AK-29), must not act on its outcome: no retry, and no
|
|
287
|
+
// session-ended announcement for a caller that gave up.
|
|
267
288
|
signal?.throwIfAborted();
|
|
268
|
-
if (refreshed)
|
|
289
|
+
if (refreshed === null) {
|
|
290
|
+
// AK-35: the plugin refused the refresh cookie — the only verdict that ends a
|
|
291
|
+
// session. See onSessionEnded.
|
|
292
|
+
announceSessionEnded();
|
|
293
|
+
}
|
|
294
|
+
else {
|
|
269
295
|
res = await doFetch(signal);
|
|
270
|
-
signal?.throwIfAborted();
|
|
271
|
-
if (res.status === 401) {
|
|
272
|
-
// Both the original request and the refresh-then-retry (or the refresh call
|
|
273
|
-
// itself, if it never returned a token) came back 401 — the session is gone,
|
|
274
|
-
// not just this in-memory access token. See setAuthRecovery.
|
|
275
|
-
if (recovery && ownsAuthRecovery) {
|
|
276
|
-
void recovery.recover();
|
|
277
|
-
}
|
|
278
|
-
else if (recovery) {
|
|
279
|
-
await recovery.recover();
|
|
280
|
-
signal?.throwIfAborted();
|
|
281
|
-
// Replay only for the same user. A recovery that ended signed out, or signed
|
|
282
|
-
// in as someone else, leaves this request failed.
|
|
283
|
-
if (sentAs !== null && recovery.principal() === sentAs)
|
|
284
|
-
res = await doFetch(signal);
|
|
285
|
-
}
|
|
286
296
|
signal?.throwIfAborted();
|
|
287
297
|
}
|
|
288
298
|
}
|
|
@@ -300,8 +310,8 @@ async function decodeWithAuthRetry(doFetch, options, signal) {
|
|
|
300
310
|
* transparent access-token refresh on 401, and the { error, code, field? } error
|
|
301
311
|
* contract every @flytedesk/app-kit/auth-backed api returns. */
|
|
302
312
|
export async function apiRequest(path, options = {}) {
|
|
303
|
-
const { method = "GET", body, query, skipAuthRetry, deadlineMs,
|
|
304
|
-
const doFetch = async (
|
|
313
|
+
const { method = "GET", body, query, skipAuthRetry, deadlineMs, keepalive, signal } = options;
|
|
314
|
+
const doFetch = async (fetchSignal) => fetch(buildUrl(path, query), {
|
|
305
315
|
method,
|
|
306
316
|
credentials: "include",
|
|
307
317
|
headers: {
|
|
@@ -309,10 +319,10 @@ export async function apiRequest(path, options = {}) {
|
|
|
309
319
|
...(accessToken ? { Authorization: `Bearer ${accessToken}` } : {}),
|
|
310
320
|
},
|
|
311
321
|
body: body != null ? JSON.stringify(body) : undefined,
|
|
312
|
-
signal,
|
|
322
|
+
signal: fetchSignal,
|
|
313
323
|
...(keepalive ? { keepalive: true } : {}),
|
|
314
324
|
});
|
|
315
|
-
return sendAndDecode(`${method} ${path}`, doFetch, { skipAuthRetry, deadlineMs,
|
|
325
|
+
return sendAndDecode(`${method} ${path}`, doFetch, { skipAuthRetry, deadlineMs, signal });
|
|
316
326
|
}
|
|
317
327
|
/** Sibling to apiRequest for multipart/form-data uploads. Same bearer auth, 401 ->
|
|
318
328
|
* refresh -> retry-once dance, and error contract — but always POSTs `formData` as-is
|
|
@@ -377,10 +387,7 @@ export async function apiDownload(path, options = {}) {
|
|
|
377
387
|
const filename = parseContentDispositionFilename(res.headers.get("content-disposition"));
|
|
378
388
|
return { blob, filename, contentType };
|
|
379
389
|
};
|
|
380
|
-
|
|
381
|
-
if (deadlineMs === undefined)
|
|
382
|
-
return run(signal);
|
|
383
|
-
return withDeadline(`GET ${path}`, deadlineMs, run, signal);
|
|
390
|
+
return withCancellation(`GET ${path}`, deadlineMs, async (fetchSignal) => decode(await sendWithAuthRetry(doFetch, { skipAuthRetry }, fetchSignal)), signal);
|
|
384
391
|
}
|
|
385
392
|
/** Triggers a browser "Save As" for an already-fetched blob (e.g. from apiDownload) —
|
|
386
393
|
* a transient off-DOM anchor is the standard way to do this without navigating away.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../../src/auth/client/httpClient.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"httpClient.js","sourceRoot":"","sources":["../../../src/auth/client/httpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser-safe client for `@flytedesk/app-kit/auth` — a separate subpath export (see
|
|
3
3
|
* package.json's "exports") so this never drags a single Node/Fastify import into a
|
|
4
|
-
* browser bundle.
|
|
5
|
-
*
|
|
4
|
+
* browser bundle.
|
|
5
|
+
*
|
|
6
|
+
* Two things live here, and an app uses both:
|
|
7
|
+
* - the flytedesk ID session lifecycle (AK-35): `SessionBoundary`, `useAuthSession` and
|
|
8
|
+
* `authSession` — sign-in, session loss, checks, sign-out and cross-tab, decided in
|
|
9
|
+
* ONE place (`./authSession.ts`). An app never builds any of it itself; see the
|
|
10
|
+
* README's "Building a flytedesk ID app";
|
|
11
|
+
* - the api client every request goes through (`apiRequest`, `apiUpload`,
|
|
12
|
+
* `apiDownload`), which carries the session's access token and refreshes it.
|
|
6
13
|
*/
|
|
7
|
-
export { ApiRequestError, AuthUnavailableError, AUTH_UNREACHABLE_CODE, type AuthUnavailableErrorCode, RequestDeadlineError,
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export type { AppSwitcherEntry, AuthedUserDto, IdpRole, ApiErrorBody, AuthUnavailableCode,
|
|
12
|
-
export { AUTH_ROUTE_PREFIX, AUTH_ROUTE_SEGMENTS, AUTH_UNAVAILABLE_CODES, authRoutePath,
|
|
14
|
+
export { ApiRequestError, AuthUnavailableError, AUTH_UNREACHABLE_CODE, type AuthUnavailableErrorCode, RequestDeadlineError, DEFAULT_REQUEST_DEADLINE_MS, configureApiClient, getBaseUrl, apiRequest, apiUpload, apiDownload, saveBlob, type RequestOptions, type ApiDownloadOptions, type ApiDownloadResult, } from "./httpClient.js";
|
|
15
|
+
export { type AuthSessionState, type AuthenticatedState, type CheckingState, type ErrorState, type SigningInState, type SigningOutState, type UnavailableState, } from "./authSession.js";
|
|
16
|
+
export { authSession } from "./browserEnvironment.js";
|
|
17
|
+
export { SessionBoundary, useAuthSession, type AuthSession, type AuthSessionActions, type SessionBoundaryProps, type SessionScreenKind, type SessionScreenState, type UsableSession, } from "./useAuthSession.js";
|
|
18
|
+
export type { AppSwitcherEntry, AuthedUserDto, IdpRole, ApiErrorBody, AuthUnavailableCode, } from "../shared-types.js";
|
|
19
|
+
export { AUTH_ROUTE_PREFIX, AUTH_ROUTE_SEGMENTS, AUTH_UNAVAILABLE_CODES, authRoutePath, type AuthRouteSegment, } from "../shared-types.js";
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Browser-safe client for `@flytedesk/app-kit/auth` — a separate subpath export (see
|
|
3
3
|
* package.json's "exports") so this never drags a single Node/Fastify import into a
|
|
4
|
-
* browser bundle.
|
|
5
|
-
*
|
|
4
|
+
* browser bundle.
|
|
5
|
+
*
|
|
6
|
+
* Two things live here, and an app uses both:
|
|
7
|
+
* - the flytedesk ID session lifecycle (AK-35): `SessionBoundary`, `useAuthSession` and
|
|
8
|
+
* `authSession` — sign-in, session loss, checks, sign-out and cross-tab, decided in
|
|
9
|
+
* ONE place (`./authSession.ts`). An app never builds any of it itself; see the
|
|
10
|
+
* README's "Building a flytedesk ID app";
|
|
11
|
+
* - the api client every request goes through (`apiRequest`, `apiUpload`,
|
|
12
|
+
* `apiDownload`), which carries the session's access token and refreshes it.
|
|
6
13
|
*/
|
|
7
|
-
export { ApiRequestError, AuthUnavailableError, AUTH_UNREACHABLE_CODE, RequestDeadlineError,
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export {
|
|
11
|
-
export { AUTH_ROUTE_PREFIX, AUTH_ROUTE_SEGMENTS, AUTH_UNAVAILABLE_CODES, authRoutePath, SILENT_AUTH_DETAIL_CODES, SIGNIN_ERROR_QUERY_PARAM, SIGNIN_ERROR_CODES, } from "../shared-types.js";
|
|
14
|
+
export { ApiRequestError, AuthUnavailableError, AUTH_UNREACHABLE_CODE, RequestDeadlineError, DEFAULT_REQUEST_DEADLINE_MS, configureApiClient, getBaseUrl, apiRequest, apiUpload, apiDownload, saveBlob, } from "./httpClient.js";
|
|
15
|
+
export { authSession } from "./browserEnvironment.js";
|
|
16
|
+
export { SessionBoundary, useAuthSession, } from "./useAuthSession.js";
|
|
17
|
+
export { AUTH_ROUTE_PREFIX, AUTH_ROUTE_SEGMENTS, AUTH_UNAVAILABLE_CODES, authRoutePath, } from "../shared-types.js";
|
|
12
18
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/client/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/auth/client/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,EAErB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EAClB,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,QAAQ,GAIT,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EACL,eAAe,EACf,cAAc,GAOf,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,GAEd,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** Makes every following `apiRequest`/`apiUpload`/`apiDownload` send `token` as its
|
|
2
|
+
* Bearer — as if the session had just refreshed. `null` clears it. */
|
|
3
|
+
export declare function setTestAccessToken(token: string | null): void;
|
|
4
|
+
/** Stops the tab's session lifecycle, forgets its state and clears the access token, so
|
|
5
|
+
* the next test starts from a fresh boot. */
|
|
6
|
+
export declare function resetAuthSessionForTests(): void;
|