@atlasauth/js 0.1.8 → 0.2.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/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/native-session.d.ts +193 -0
- package/dist/native-session.js +336 -0
- package/dist/native-session.js.map +1 -0
- package/dist/native.js +10 -4
- package/dist/native.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ __exportStar(require("./attempt"), exports);
|
|
|
21
21
|
__exportStar(require("./redirect"), exports);
|
|
22
22
|
__exportStar(require("./fapi"), exports);
|
|
23
23
|
__exportStar(require("./native"), exports);
|
|
24
|
+
__exportStar(require("./native-session"), exports);
|
|
24
25
|
__exportStar(require("./passkey"), exports);
|
|
25
26
|
__exportStar(require("./telegram"), exports);
|
|
26
27
|
__exportStar(require("./siwe"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,2CAAyB;AACzB,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,8CAA4B;AAC5B,2CAAyB;AACzB,4CAA0B;AAC1B,mDAAiC;AACjC,kDAAgC;AAChC,0EAA0E;AAC1E,4EAA4E;AAC5E,0CAa0B;AARxB,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AACtB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,2CAAyB;AACzB,mDAAiC;AACjC,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,8CAA4B;AAC5B,2CAAyB;AACzB,4CAA0B;AAC1B,mDAAiC;AACjC,kDAAgC;AAChC,0EAA0E;AAC1E,4EAA4E;AAC5E,0CAa0B;AARxB,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AACtB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native session — the first-party OAuth→session exchange, cookie-free.
|
|
3
|
+
*
|
|
4
|
+
* A FIRST-PARTY OAuth client (the app IS the tenant's own property, not a
|
|
5
|
+
* third-party integration) already holds an Atlas OAuth access token. On the web
|
|
6
|
+
* that token would ride in a cookie and the browser would carry the session for
|
|
7
|
+
* free; a native app — React Native, Electron, an extension service worker — has
|
|
8
|
+
* no cookie jar against the FAPI origin, so it trades that OAuth access token for
|
|
9
|
+
* a real Atlas SESSION and then carries the session itself, by hand, as a bearer.
|
|
10
|
+
*
|
|
11
|
+
* This module is the framework-agnostic, SSR-safe half of that:
|
|
12
|
+
*
|
|
13
|
+
* 1. {@link exchangeForSession} — POST the RFC 8693 token-exchange form to
|
|
14
|
+
* `/oauth2/token` and get back a {@link NativeSession}.
|
|
15
|
+
* 2. {@link refreshNativeSession} — rotate the session WITHOUT a cookie, via
|
|
16
|
+
* `POST /v1/client/sessions/:sid/tokens` with the stored refresh token.
|
|
17
|
+
* 3. {@link NativeSessionManager} — holds the current session, hands out a live
|
|
18
|
+
* JWT (auth-refreshing near expiry), and fires `onChange` so a platform's
|
|
19
|
+
* secure store can persist each rotated refresh token.
|
|
20
|
+
*
|
|
21
|
+
* Nothing here touches a DOM, a cookie, or a global besides `fetch` (which is
|
|
22
|
+
* injectable), so the same code runs in a browser, a service worker, Node SSR,
|
|
23
|
+
* and a React Native runtime. Neither network helper ever throws — a failure is
|
|
24
|
+
* a `null`, the caller's cue to re-run the OAuth flow rather than crash.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* A live Atlas session held outside a cookie.
|
|
28
|
+
*
|
|
29
|
+
* `sessionToken` is the short-lived (~60s) session JWT sent as `Authorization:
|
|
30
|
+
* Bearer …` on `/v1/client/me/*`. `refreshToken` mints the next one and ROTATES
|
|
31
|
+
* on every refresh — store the new value, discard the old. `expiresInSeconds` is
|
|
32
|
+
* the lifetime the server reported for `sessionToken`, a scheduling hint only.
|
|
33
|
+
*/
|
|
34
|
+
export interface NativeSession {
|
|
35
|
+
/** The short-lived session JWT. Bearer it on `/v1/client/me/*`. */
|
|
36
|
+
sessionToken: string;
|
|
37
|
+
/** The rotating refresh token. Persist the latest; the previous one is dead. */
|
|
38
|
+
refreshToken: string;
|
|
39
|
+
/** The session id (`sess_…`), the path segment the refresh call needs. */
|
|
40
|
+
sessionId: string;
|
|
41
|
+
/** Reported lifetime of `sessionToken`, in seconds. A hint, not a guarantee. */
|
|
42
|
+
expiresInSeconds: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Exchange a first-party OAuth access token for an Atlas session.
|
|
46
|
+
*
|
|
47
|
+
* POSTs the RFC 8693 token-exchange form to `{baseUrl}/oauth2/token` and parses
|
|
48
|
+
* the result into a {@link NativeSession}. Returns `null` — never throws — on a
|
|
49
|
+
* network failure, a non-2xx, or a body missing the session token or id, so a
|
|
50
|
+
* caller treats a failed exchange as "re-run OAuth" rather than a crash.
|
|
51
|
+
*
|
|
52
|
+
* Uses `opts.fetchImpl` when supplied (tests, a bearer-wrapped fetch), else the
|
|
53
|
+
* global `fetch`; makes no assumption about `window`, so it is SSR-safe.
|
|
54
|
+
*/
|
|
55
|
+
export declare function exchangeForSession(opts: {
|
|
56
|
+
/** The instance's FAPI origin, e.g. `https://fapi.acme.atlasauth.net`. */
|
|
57
|
+
baseUrl: string;
|
|
58
|
+
/** The first-party OAuth client id. */
|
|
59
|
+
clientId: string;
|
|
60
|
+
/** The OAuth access token the app already holds. */
|
|
61
|
+
accessToken: string;
|
|
62
|
+
fetchImpl?: typeof fetch;
|
|
63
|
+
}): Promise<NativeSession | null>;
|
|
64
|
+
/**
|
|
65
|
+
* Rotate a native session WITHOUT a cookie.
|
|
66
|
+
*
|
|
67
|
+
* POSTs the stored refresh token to `/v1/client/sessions/{sessionId}/tokens`
|
|
68
|
+
* with the publishable-key header, and returns the rotated {@link NativeSession}.
|
|
69
|
+
* Each refresh ROTATES the refresh token: the returned session carries the new
|
|
70
|
+
* one, and the old one is dead the moment this resolves — so the caller MUST
|
|
71
|
+
* persist what comes back. If the server omits a fresh `refresh_token` (it may,
|
|
72
|
+
* when it reuses the presented one), the presented token is carried forward.
|
|
73
|
+
*
|
|
74
|
+
* Returns `null` — never throws — on a network failure, a non-2xx (an expired or
|
|
75
|
+
* already-rotated refresh token answers 4xx), or a body with no `jwt`. A null is
|
|
76
|
+
* the caller's cue that the session is gone and OAuth must run again.
|
|
77
|
+
*/
|
|
78
|
+
export declare function refreshNativeSession(opts: {
|
|
79
|
+
baseUrl: string;
|
|
80
|
+
publishableKey: string;
|
|
81
|
+
sessionId: string;
|
|
82
|
+
refreshToken: string;
|
|
83
|
+
fetchImpl?: typeof fetch;
|
|
84
|
+
}): Promise<NativeSession | null>;
|
|
85
|
+
/**
|
|
86
|
+
* Serialize a session for a secure store. The wrappers persist the WHOLE session
|
|
87
|
+
* (not just the refresh token) because the refresh call needs the session id too,
|
|
88
|
+
* and a rehydrated manager needs the current JWT to answer the first request
|
|
89
|
+
* before any refresh. It is plain JSON — the store supplies the encryption.
|
|
90
|
+
*/
|
|
91
|
+
export declare function serializeNativeSession(session: NativeSession): string;
|
|
92
|
+
/**
|
|
93
|
+
* Parse a session a secure store held, validating the shape. Returns null for
|
|
94
|
+
* anything that is not a complete session (absent, malformed JSON, missing a
|
|
95
|
+
* field) so a wrapper boots signed-out rather than trusting a half-value.
|
|
96
|
+
*/
|
|
97
|
+
export declare function parseNativeSession(raw: string | null | undefined): NativeSession | null;
|
|
98
|
+
/** A callback handed the session after every change, so a store can persist it. */
|
|
99
|
+
export type NativeSessionListener = (session: NativeSession) => void;
|
|
100
|
+
export interface NativeSessionManagerOptions {
|
|
101
|
+
/** The instance's FAPI origin. */
|
|
102
|
+
baseUrl: string;
|
|
103
|
+
/** The publishable key, sent on the refresh call and in {@link NativeSessionManager.authHeaders}. */
|
|
104
|
+
publishableKey: string;
|
|
105
|
+
/** The first-party OAuth client id (kept for a future in-manager exchange; optional). */
|
|
106
|
+
clientId?: string;
|
|
107
|
+
/** Seed the manager with a session the app already holds (e.g. loaded from a secure store). */
|
|
108
|
+
initial?: NativeSession;
|
|
109
|
+
/** Injectable for tests; defaults to the platform `fetch`. */
|
|
110
|
+
fetchImpl?: typeof fetch;
|
|
111
|
+
/**
|
|
112
|
+
* Called with the session after every change (set or rotate). The one hook a
|
|
113
|
+
* secure-store wrapper needs to persist each rotated refresh token. Equivalent
|
|
114
|
+
* to registering an {@link NativeSessionManager.onChange} listener at
|
|
115
|
+
* construction — both fire.
|
|
116
|
+
*/
|
|
117
|
+
persist?: (session: NativeSession) => void;
|
|
118
|
+
/** Injectable clock, epoch ms. Defaults to `Date.now`. Keeps refresh timing testable. */
|
|
119
|
+
now?: () => number;
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Holds the current {@link NativeSession} and keeps its JWT live.
|
|
123
|
+
*
|
|
124
|
+
* The manager is deliberately pure: it owns no timer and reaches for no global
|
|
125
|
+
* besides the injected `fetch` and clock, so it is as happy in a service worker
|
|
126
|
+
* or an SSR render as in a React Native runtime, and a test drives its whole
|
|
127
|
+
* lifecycle with a fake fetch and a fake clock.
|
|
128
|
+
*
|
|
129
|
+
* It refreshes LAZILY — on {@link getToken}/{@link authHeaders}, when the token
|
|
130
|
+
* is within {@link REFRESH_LEAD_MS} of expiry — rather than on an interval,
|
|
131
|
+
* because the native hosts this backs (an MV3 worker, a backgrounded app) cannot
|
|
132
|
+
* keep a long-lived timer alive anyway. Each rotation fires `persist` and every
|
|
133
|
+
* {@link onChange} listener so the platform's secure store captures the new
|
|
134
|
+
* refresh token; the previous one is dead.
|
|
135
|
+
*/
|
|
136
|
+
export declare class NativeSessionManager {
|
|
137
|
+
private session;
|
|
138
|
+
/** Absolute expiry of the current `sessionToken`, epoch ms. */
|
|
139
|
+
private expiresAt;
|
|
140
|
+
private readonly listeners;
|
|
141
|
+
/** Single-flight guard: concurrent getToken() calls share one refresh. */
|
|
142
|
+
private refreshing;
|
|
143
|
+
private readonly baseUrl;
|
|
144
|
+
private readonly publishableKey;
|
|
145
|
+
readonly clientId?: string;
|
|
146
|
+
private readonly fetchImpl?;
|
|
147
|
+
private readonly now;
|
|
148
|
+
constructor(options: NativeSessionManagerOptions);
|
|
149
|
+
/** The current session, or null when signed out. Does NOT refresh. */
|
|
150
|
+
get current(): NativeSession | null;
|
|
151
|
+
/**
|
|
152
|
+
* Replace the current session (e.g. right after {@link exchangeForSession}) and
|
|
153
|
+
* notify listeners so it is persisted. Recomputes the absolute expiry off the
|
|
154
|
+
* injected clock.
|
|
155
|
+
*/
|
|
156
|
+
setSession(session: NativeSession): void;
|
|
157
|
+
/** Forget the session (sign-out). Does not notify — there is nothing to persist. */
|
|
158
|
+
clear(): void;
|
|
159
|
+
/**
|
|
160
|
+
* Register a listener fired with the session after every change, and get back
|
|
161
|
+
* an unsubscribe. A secure-store wrapper uses this to persist each rotated
|
|
162
|
+
* refresh token.
|
|
163
|
+
*/
|
|
164
|
+
onChange(cb: NativeSessionListener): () => void;
|
|
165
|
+
private notify;
|
|
166
|
+
/** Whether the current token is within the refresh lead of expiry (or gone). */
|
|
167
|
+
private needsRefresh;
|
|
168
|
+
/**
|
|
169
|
+
* The current session JWT, refreshed first if it is within ~10s of expiry.
|
|
170
|
+
*
|
|
171
|
+
* Returns null when signed out. When a refresh is owed it is attempted
|
|
172
|
+
* (single-flight, so twenty concurrent callers make one call); if the refresh
|
|
173
|
+
* fails the EXISTING token is handed back rather than null — the server will
|
|
174
|
+
* reject a truly-dead token on use, which is a better failure than pre-emptive
|
|
175
|
+
* sign-out on a flaky connection. A refresh that fails because the session is
|
|
176
|
+
* genuinely gone leaves `current` in place; the caller detects the dead session
|
|
177
|
+
* on the 401 and re-runs OAuth.
|
|
178
|
+
*/
|
|
179
|
+
getToken(): Promise<string | null>;
|
|
180
|
+
/**
|
|
181
|
+
* The headers an authenticated `/v1/client/me/*` call needs: a fresh bearer
|
|
182
|
+
* (auto-refreshed like {@link getToken}) plus the publishable key. When signed
|
|
183
|
+
* out, only the publishable key is returned — there is no bearer to add.
|
|
184
|
+
*/
|
|
185
|
+
authHeaders(): Promise<Record<string, string>>;
|
|
186
|
+
/**
|
|
187
|
+
* Rotate the session now. Single-flight: a refresh already in progress is
|
|
188
|
+
* shared rather than duplicated. On success the new session is stored and
|
|
189
|
+
* listeners fire; on failure the current session is left untouched and null is
|
|
190
|
+
* returned.
|
|
191
|
+
*/
|
|
192
|
+
refresh(): Promise<NativeSession | null>;
|
|
193
|
+
}
|
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Native session — the first-party OAuth→session exchange, cookie-free.
|
|
4
|
+
*
|
|
5
|
+
* A FIRST-PARTY OAuth client (the app IS the tenant's own property, not a
|
|
6
|
+
* third-party integration) already holds an Atlas OAuth access token. On the web
|
|
7
|
+
* that token would ride in a cookie and the browser would carry the session for
|
|
8
|
+
* free; a native app — React Native, Electron, an extension service worker — has
|
|
9
|
+
* no cookie jar against the FAPI origin, so it trades that OAuth access token for
|
|
10
|
+
* a real Atlas SESSION and then carries the session itself, by hand, as a bearer.
|
|
11
|
+
*
|
|
12
|
+
* This module is the framework-agnostic, SSR-safe half of that:
|
|
13
|
+
*
|
|
14
|
+
* 1. {@link exchangeForSession} — POST the RFC 8693 token-exchange form to
|
|
15
|
+
* `/oauth2/token` and get back a {@link NativeSession}.
|
|
16
|
+
* 2. {@link refreshNativeSession} — rotate the session WITHOUT a cookie, via
|
|
17
|
+
* `POST /v1/client/sessions/:sid/tokens` with the stored refresh token.
|
|
18
|
+
* 3. {@link NativeSessionManager} — holds the current session, hands out a live
|
|
19
|
+
* JWT (auth-refreshing near expiry), and fires `onChange` so a platform's
|
|
20
|
+
* secure store can persist each rotated refresh token.
|
|
21
|
+
*
|
|
22
|
+
* Nothing here touches a DOM, a cookie, or a global besides `fetch` (which is
|
|
23
|
+
* injectable), so the same code runs in a browser, a service worker, Node SSR,
|
|
24
|
+
* and a React Native runtime. Neither network helper ever throws — a failure is
|
|
25
|
+
* a `null`, the caller's cue to re-run the OAuth flow rather than crash.
|
|
26
|
+
*/
|
|
27
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
28
|
+
exports.NativeSessionManager = void 0;
|
|
29
|
+
exports.exchangeForSession = exchangeForSession;
|
|
30
|
+
exports.refreshNativeSession = refreshNativeSession;
|
|
31
|
+
exports.serializeNativeSession = serializeNativeSession;
|
|
32
|
+
exports.parseNativeSession = parseNativeSession;
|
|
33
|
+
const token_cache_1 = require("./token-cache");
|
|
34
|
+
/** RFC 8693 token-exchange grant. */
|
|
35
|
+
const TOKEN_EXCHANGE_GRANT = 'urn:ietf:params:oauth:grant-type:token-exchange';
|
|
36
|
+
/** The subject token the first-party app presents is an OAuth access token. */
|
|
37
|
+
const ACCESS_TOKEN_TYPE = 'urn:ietf:params:oauth:token-type:access_token';
|
|
38
|
+
/** What we ask for in return: an Atlas session, not another OAuth token. */
|
|
39
|
+
const SESSION_TOKEN_TYPE = 'urn:atlas:token-type:session';
|
|
40
|
+
const asNumber = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0);
|
|
41
|
+
/**
|
|
42
|
+
* Exchange a first-party OAuth access token for an Atlas session.
|
|
43
|
+
*
|
|
44
|
+
* POSTs the RFC 8693 token-exchange form to `{baseUrl}/oauth2/token` and parses
|
|
45
|
+
* the result into a {@link NativeSession}. Returns `null` — never throws — on a
|
|
46
|
+
* network failure, a non-2xx, or a body missing the session token or id, so a
|
|
47
|
+
* caller treats a failed exchange as "re-run OAuth" rather than a crash.
|
|
48
|
+
*
|
|
49
|
+
* Uses `opts.fetchImpl` when supplied (tests, a bearer-wrapped fetch), else the
|
|
50
|
+
* global `fetch`; makes no assumption about `window`, so it is SSR-safe.
|
|
51
|
+
*/
|
|
52
|
+
async function exchangeForSession(opts) {
|
|
53
|
+
const doFetch = opts.fetchImpl ?? fetch;
|
|
54
|
+
// Form-urlencoded, per the grant. `URLSearchParams` escapes the token values.
|
|
55
|
+
const form = new URLSearchParams({
|
|
56
|
+
grant_type: TOKEN_EXCHANGE_GRANT,
|
|
57
|
+
client_id: opts.clientId,
|
|
58
|
+
subject_token: opts.accessToken,
|
|
59
|
+
subject_token_type: ACCESS_TOKEN_TYPE,
|
|
60
|
+
requested_token_type: SESSION_TOKEN_TYPE,
|
|
61
|
+
});
|
|
62
|
+
let response;
|
|
63
|
+
try {
|
|
64
|
+
response = await doFetch(`${opts.baseUrl}/oauth2/token`, {
|
|
65
|
+
method: 'POST',
|
|
66
|
+
headers: { 'content-type': 'application/x-www-form-urlencoded' },
|
|
67
|
+
body: form.toString(),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
if (!response.ok)
|
|
74
|
+
return null;
|
|
75
|
+
let body = null;
|
|
76
|
+
try {
|
|
77
|
+
body = (await response.json());
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
// A session is only a session if it carries both the JWT and the id the
|
|
83
|
+
// refresh path needs; anything short of that is unusable, so report it as a
|
|
84
|
+
// failed exchange rather than hand back a half-session.
|
|
85
|
+
if (!body || typeof body.access_token !== 'string' || typeof body.session_id !== 'string') {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
sessionToken: body.access_token,
|
|
90
|
+
refreshToken: typeof body.refresh_token === 'string' ? body.refresh_token : '',
|
|
91
|
+
sessionId: body.session_id,
|
|
92
|
+
expiresInSeconds: asNumber(body.expires_in),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Rotate a native session WITHOUT a cookie.
|
|
97
|
+
*
|
|
98
|
+
* POSTs the stored refresh token to `/v1/client/sessions/{sessionId}/tokens`
|
|
99
|
+
* with the publishable-key header, and returns the rotated {@link NativeSession}.
|
|
100
|
+
* Each refresh ROTATES the refresh token: the returned session carries the new
|
|
101
|
+
* one, and the old one is dead the moment this resolves — so the caller MUST
|
|
102
|
+
* persist what comes back. If the server omits a fresh `refresh_token` (it may,
|
|
103
|
+
* when it reuses the presented one), the presented token is carried forward.
|
|
104
|
+
*
|
|
105
|
+
* Returns `null` — never throws — on a network failure, a non-2xx (an expired or
|
|
106
|
+
* already-rotated refresh token answers 4xx), or a body with no `jwt`. A null is
|
|
107
|
+
* the caller's cue that the session is gone and OAuth must run again.
|
|
108
|
+
*/
|
|
109
|
+
async function refreshNativeSession(opts) {
|
|
110
|
+
const doFetch = opts.fetchImpl ?? fetch;
|
|
111
|
+
let response;
|
|
112
|
+
try {
|
|
113
|
+
response = await doFetch(`${opts.baseUrl}/v1/client/sessions/${encodeURIComponent(opts.sessionId)}/tokens`, {
|
|
114
|
+
method: 'POST',
|
|
115
|
+
headers: {
|
|
116
|
+
'content-type': 'application/json',
|
|
117
|
+
'x-publishable-key': opts.publishableKey,
|
|
118
|
+
},
|
|
119
|
+
body: JSON.stringify({ refresh_token: opts.refreshToken }),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
if (!response.ok)
|
|
126
|
+
return null;
|
|
127
|
+
let body = null;
|
|
128
|
+
try {
|
|
129
|
+
body = (await response.json());
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
if (!body || typeof body.jwt !== 'string')
|
|
135
|
+
return null;
|
|
136
|
+
return {
|
|
137
|
+
sessionToken: body.jwt,
|
|
138
|
+
// Carry the rotated token; fall back to the presented one if the server
|
|
139
|
+
// reused it rather than issuing a new value.
|
|
140
|
+
refreshToken: typeof body.refresh_token === 'string' ? body.refresh_token : opts.refreshToken,
|
|
141
|
+
sessionId: typeof body.session_id === 'string' ? body.session_id : opts.sessionId,
|
|
142
|
+
expiresInSeconds: asNumber(body.expires_in),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Serialize a session for a secure store. The wrappers persist the WHOLE session
|
|
147
|
+
* (not just the refresh token) because the refresh call needs the session id too,
|
|
148
|
+
* and a rehydrated manager needs the current JWT to answer the first request
|
|
149
|
+
* before any refresh. It is plain JSON — the store supplies the encryption.
|
|
150
|
+
*/
|
|
151
|
+
function serializeNativeSession(session) {
|
|
152
|
+
return JSON.stringify(session);
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Parse a session a secure store held, validating the shape. Returns null for
|
|
156
|
+
* anything that is not a complete session (absent, malformed JSON, missing a
|
|
157
|
+
* field) so a wrapper boots signed-out rather than trusting a half-value.
|
|
158
|
+
*/
|
|
159
|
+
function parseNativeSession(raw) {
|
|
160
|
+
if (typeof raw !== 'string' || raw === '')
|
|
161
|
+
return null;
|
|
162
|
+
let parsed;
|
|
163
|
+
try {
|
|
164
|
+
parsed = JSON.parse(raw);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
if (!parsed || typeof parsed !== 'object')
|
|
170
|
+
return null;
|
|
171
|
+
const s = parsed;
|
|
172
|
+
if (typeof s.sessionToken !== 'string' ||
|
|
173
|
+
typeof s.refreshToken !== 'string' ||
|
|
174
|
+
typeof s.sessionId !== 'string' ||
|
|
175
|
+
typeof s.expiresInSeconds !== 'number') {
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
sessionToken: s.sessionToken,
|
|
180
|
+
refreshToken: s.refreshToken,
|
|
181
|
+
sessionId: s.sessionId,
|
|
182
|
+
expiresInSeconds: s.expiresInSeconds,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Holds the current {@link NativeSession} and keeps its JWT live.
|
|
187
|
+
*
|
|
188
|
+
* The manager is deliberately pure: it owns no timer and reaches for no global
|
|
189
|
+
* besides the injected `fetch` and clock, so it is as happy in a service worker
|
|
190
|
+
* or an SSR render as in a React Native runtime, and a test drives its whole
|
|
191
|
+
* lifecycle with a fake fetch and a fake clock.
|
|
192
|
+
*
|
|
193
|
+
* It refreshes LAZILY — on {@link getToken}/{@link authHeaders}, when the token
|
|
194
|
+
* is within {@link REFRESH_LEAD_MS} of expiry — rather than on an interval,
|
|
195
|
+
* because the native hosts this backs (an MV3 worker, a backgrounded app) cannot
|
|
196
|
+
* keep a long-lived timer alive anyway. Each rotation fires `persist` and every
|
|
197
|
+
* {@link onChange} listener so the platform's secure store captures the new
|
|
198
|
+
* refresh token; the previous one is dead.
|
|
199
|
+
*/
|
|
200
|
+
class NativeSessionManager {
|
|
201
|
+
session = null;
|
|
202
|
+
/** Absolute expiry of the current `sessionToken`, epoch ms. */
|
|
203
|
+
expiresAt = 0;
|
|
204
|
+
listeners = new Set();
|
|
205
|
+
/** Single-flight guard: concurrent getToken() calls share one refresh. */
|
|
206
|
+
refreshing = null;
|
|
207
|
+
baseUrl;
|
|
208
|
+
publishableKey;
|
|
209
|
+
clientId;
|
|
210
|
+
fetchImpl;
|
|
211
|
+
now;
|
|
212
|
+
constructor(options) {
|
|
213
|
+
this.baseUrl = options.baseUrl;
|
|
214
|
+
this.publishableKey = options.publishableKey;
|
|
215
|
+
this.clientId = options.clientId;
|
|
216
|
+
this.fetchImpl = options.fetchImpl;
|
|
217
|
+
this.now = options.now ?? (() => Date.now());
|
|
218
|
+
if (options.persist)
|
|
219
|
+
this.listeners.add(options.persist);
|
|
220
|
+
// Seed without notifying — the caller already has this session (it loaded it
|
|
221
|
+
// from the store), so persisting it back on construction would be a no-op
|
|
222
|
+
// write and could clobber a newer value.
|
|
223
|
+
if (options.initial) {
|
|
224
|
+
this.session = options.initial;
|
|
225
|
+
this.expiresAt = this.now() + options.initial.expiresInSeconds * 1000;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/** The current session, or null when signed out. Does NOT refresh. */
|
|
229
|
+
get current() {
|
|
230
|
+
return this.session;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Replace the current session (e.g. right after {@link exchangeForSession}) and
|
|
234
|
+
* notify listeners so it is persisted. Recomputes the absolute expiry off the
|
|
235
|
+
* injected clock.
|
|
236
|
+
*/
|
|
237
|
+
setSession(session) {
|
|
238
|
+
this.session = session;
|
|
239
|
+
this.expiresAt = this.now() + session.expiresInSeconds * 1000;
|
|
240
|
+
this.notify(session);
|
|
241
|
+
}
|
|
242
|
+
/** Forget the session (sign-out). Does not notify — there is nothing to persist. */
|
|
243
|
+
clear() {
|
|
244
|
+
this.session = null;
|
|
245
|
+
this.expiresAt = 0;
|
|
246
|
+
this.refreshing = null;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Register a listener fired with the session after every change, and get back
|
|
250
|
+
* an unsubscribe. A secure-store wrapper uses this to persist each rotated
|
|
251
|
+
* refresh token.
|
|
252
|
+
*/
|
|
253
|
+
onChange(cb) {
|
|
254
|
+
this.listeners.add(cb);
|
|
255
|
+
return () => this.listeners.delete(cb);
|
|
256
|
+
}
|
|
257
|
+
notify(session) {
|
|
258
|
+
for (const cb of this.listeners) {
|
|
259
|
+
try {
|
|
260
|
+
cb(session);
|
|
261
|
+
}
|
|
262
|
+
catch {
|
|
263
|
+
// A listener that throws must not break a refresh or sibling listeners.
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
/** Whether the current token is within the refresh lead of expiry (or gone). */
|
|
268
|
+
needsRefresh() {
|
|
269
|
+
if (!this.session)
|
|
270
|
+
return false;
|
|
271
|
+
return this.expiresAt - token_cache_1.REFRESH_LEAD_MS <= this.now();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* The current session JWT, refreshed first if it is within ~10s of expiry.
|
|
275
|
+
*
|
|
276
|
+
* Returns null when signed out. When a refresh is owed it is attempted
|
|
277
|
+
* (single-flight, so twenty concurrent callers make one call); if the refresh
|
|
278
|
+
* fails the EXISTING token is handed back rather than null — the server will
|
|
279
|
+
* reject a truly-dead token on use, which is a better failure than pre-emptive
|
|
280
|
+
* sign-out on a flaky connection. A refresh that fails because the session is
|
|
281
|
+
* genuinely gone leaves `current` in place; the caller detects the dead session
|
|
282
|
+
* on the 401 and re-runs OAuth.
|
|
283
|
+
*/
|
|
284
|
+
async getToken() {
|
|
285
|
+
if (!this.session)
|
|
286
|
+
return null;
|
|
287
|
+
if (this.needsRefresh()) {
|
|
288
|
+
const rotated = await this.refresh();
|
|
289
|
+
if (rotated)
|
|
290
|
+
return rotated.sessionToken;
|
|
291
|
+
}
|
|
292
|
+
return this.session.sessionToken;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* The headers an authenticated `/v1/client/me/*` call needs: a fresh bearer
|
|
296
|
+
* (auto-refreshed like {@link getToken}) plus the publishable key. When signed
|
|
297
|
+
* out, only the publishable key is returned — there is no bearer to add.
|
|
298
|
+
*/
|
|
299
|
+
async authHeaders() {
|
|
300
|
+
const token = await this.getToken();
|
|
301
|
+
return token
|
|
302
|
+
? { Authorization: `Bearer ${token}`, 'x-publishable-key': this.publishableKey }
|
|
303
|
+
: { 'x-publishable-key': this.publishableKey };
|
|
304
|
+
}
|
|
305
|
+
/**
|
|
306
|
+
* Rotate the session now. Single-flight: a refresh already in progress is
|
|
307
|
+
* shared rather than duplicated. On success the new session is stored and
|
|
308
|
+
* listeners fire; on failure the current session is left untouched and null is
|
|
309
|
+
* returned.
|
|
310
|
+
*/
|
|
311
|
+
async refresh() {
|
|
312
|
+
if (this.refreshing)
|
|
313
|
+
return this.refreshing;
|
|
314
|
+
const session = this.session;
|
|
315
|
+
if (!session)
|
|
316
|
+
return null;
|
|
317
|
+
this.refreshing = refreshNativeSession({
|
|
318
|
+
baseUrl: this.baseUrl,
|
|
319
|
+
publishableKey: this.publishableKey,
|
|
320
|
+
sessionId: session.sessionId,
|
|
321
|
+
refreshToken: session.refreshToken,
|
|
322
|
+
fetchImpl: this.fetchImpl,
|
|
323
|
+
})
|
|
324
|
+
.then((rotated) => {
|
|
325
|
+
if (rotated)
|
|
326
|
+
this.setSession(rotated);
|
|
327
|
+
return rotated;
|
|
328
|
+
})
|
|
329
|
+
.finally(() => {
|
|
330
|
+
this.refreshing = null;
|
|
331
|
+
});
|
|
332
|
+
return this.refreshing;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
exports.NativeSessionManager = NativeSessionManager;
|
|
336
|
+
//# sourceMappingURL=native-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-session.js","sourceRoot":"","sources":["../src/native-session.ts"],"names":[],"mappings":"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"}
|
package/dist/native.js
CHANGED
|
@@ -278,11 +278,17 @@ async function renderGoogleOverlayButton(opts) {
|
|
|
278
278
|
// it IS the real, operable button — leave it exposed.
|
|
279
279
|
if (!visible)
|
|
280
280
|
overlay.setAttribute('aria-hidden', 'true');
|
|
281
|
-
// On top, click-catching.
|
|
282
|
-
//
|
|
283
|
-
//
|
|
281
|
+
// On top, click-catching. Google's own button shown visibly => opacity 1. Invisible
|
|
282
|
+
// overlay (host styling) => a NEAR-zero opacity, NOT exactly 0: GSI's visibility /
|
|
283
|
+
// anti-clickjacking check treats an element at exactly `opacity:0` as not-visible and
|
|
284
|
+
// SILENTLY refuses the click (dead button, no callback, no error — the reported bug),
|
|
285
|
+
// while it accepts a tiny non-zero opacity that is still invisible to the user (the
|
|
286
|
+
// host button shows through). This is the specific cause of "opacity 0 dead / opacity
|
|
287
|
+
// 1 works, regardless of geometry". NO flex centring — the iframe is stretched to fill
|
|
288
|
+
// the wrapper below (inline) so every click lands on the real GSI button.
|
|
289
|
+
const INVISIBLE_OPACITY = 0.004;
|
|
284
290
|
overlay.style.cssText =
|
|
285
|
-
`position:absolute;inset:0;z-index:2;opacity:${visible ? 1 :
|
|
291
|
+
`position:absolute;inset:0;z-index:2;opacity:${visible ? 1 : INVISIBLE_OPACITY};overflow:hidden;`;
|
|
286
292
|
opts.wrapper.appendChild(overlay);
|
|
287
293
|
const mounted = { provider: 'google', wrapper: opts.wrapper, overlay };
|
|
288
294
|
mountedOverlays.add(mounted);
|
package/dist/native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"native.js","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;AAYH,4CAUC;AAeD,8DASC;AAUD,0CAQC;AASD,oCAoBC;AA0BD,8DAuBC;AAqDD,gEAgBC;AAGD,kEAEC;AAOD,0DAuBC;AAUD,gDA8BC;AAgCD,8DA8LC;AAyGD,4CAkCC;AAGD,8DAEC;AAzoBD,iCAAsE;AAQtE,8DAA8D;AAC9D,SAAgB,gBAAgB,CAAC,KAIhC;IACC,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,OAAO;QACvB,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/C,CAAC;AACJ,CAAC;AASD;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,IAAa;IACrD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnD,MAAM,CAAC,GAAG,IAA4D,CAAC;IACvE,IAAI,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1E,OAAO;QACL,SAAS,EAAE,CAAC,CAAC,EAAE;QACf,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,eAAe,CACnC,MAAkB,EAClB,QAAgB;IAEhB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAqB,oCAAoC,EAAE;QAC3F,QAAQ;KACT,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,YAAY,CAChC,MAAkB,EAClB,KAA4D;IAE5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,8BAA8B,EAC9B,gBAAgB,CAAC,KAAK,CAAC,CACxB,CAAC;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,kBAAW,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;IAClE,CAAC;IAED,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,IAAI;QACtB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,KAAK;QACX,UAAU,EAAE,kBAAW,CAAC,UAAU;QAClC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI;KACrC,CAAC;AACJ,CAAC;AAOD;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAgB,yBAAyB,CACvC,MAAkB,EAClB,QAAgB,EAChB,MAAiC;IAEjC,4DAA4D;IAC5D,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO;IAC9E,IAAI,CAAC;QACH,4EAA4E;QAC5E,6EAA6E;QAC7E,kEAAkE;QAClE,KAAK,MAAM;aACR,OAAO,CAAC,2CAA2C,EAAE;YACpD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;YAC1C,SAAS,EAAE,IAAI;SAChB,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,eAAe;QACjB,CAAC,CAAC,CAAC;IACP,CAAC;IAAC,MAAM,CAAC;QACP,cAAc;IAChB,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,MAAM,OAAO,GAAG,wCAAwC,CAAC;AACzD,IAAI,OAAO,GAAyB,IAAI,CAAC;AAQzC,SAAS,QAAQ;IACf,OAAO,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,YAAY,CAAC;AACnF,CAAC;AAaD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;AAElD;;;;;;GAMG;AACH,IAAI,iCAAiC,GAAG,KAAK,CAAC;AAe9C,6DAA6D;AAC7D,SAAgB,0BAA0B,CAAC,GAAa;IACtD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAC5B,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC9C,IAAI,GAAG,CAAC,aAAa,CAAC,eAAe,OAAO,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC3C,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC;QACrB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QACpB,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC,CAAC,CAAC;QACtG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,yCAAyC;AACzC,SAAgB,2BAA2B;IACzC,OAAO,GAAG,IAAI,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,uBAAuB,CAAC,IAK7C;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAK,MAA6B,CAAC;IACzD,MAAM,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IACrC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAElE,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7C,EAAE,CAAC,UAAU,CAAC;YACZ,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK;YACrC,QAAQ,EAAE,CAAC,QAAiC,EAAE,EAAE;gBAC9C,IAAI,QAAQ,CAAC,UAAU;oBAAE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;;oBACjD,MAAM,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;YAC3D,CAAC;SACF,CAAC,CAAC;QACH,EAAE,CAAC,MAAM,EAAE,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CAAC,IAWxC;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAK,MAA6B,CAAC;IACzD,MAAM,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IACrC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAElE,EAAE,CAAC,UAAU,CAAC;QACZ,SAAS,EAAE,IAAI,CAAC,QAAQ;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,CAAC,QAAiC,EAAE,EAAE;YAC9C,IAAI,QAAQ,CAAC,UAAU;gBAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;;gBAC3D,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACnE,CAAC;KACF,CAAC,CAAC;IACH,EAAE,CAAC,YAAY,CACb,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,aAAa,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,CAC7F,CAAC;IACF,IAAI,IAAI,CAAC,MAAM;QAAE,EAAE,CAAC,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACI,KAAK,UAAU,yBAAyB,CAAC,IAe/C;IACC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAK,MAA6B,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC1B,MAAM,0BAA0B,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC;IACrC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAElE,EAAE,CAAC,UAAU,CAAC;QACZ,SAAS,EAAE,IAAI,CAAC,QAAQ;QACxB,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,CAAC,QAAiC,EAAE,EAAE;YAC9C,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC;gBACxB,yEAAyE;gBACzE,qEAAqE;gBACrE,iCAAiC,GAAG,IAAI,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACzC,CAAC;;gBAAM,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC;QACrE,CAAC;KACF,CAAC,CAAC;IAEH,kEAAkE;IAClE,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,EAAE,CAAC;IACvD,IAAI,CAAC,WAAW;QAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IAE3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IAEtC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACzC,kFAAkF;IAClF,mFAAmF;IACnF,iFAAiF;IACjF,sDAAsD;IACtD,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IAC1D,oFAAoF;IACpF,mFAAmF;IACnF,sFAAsF;IACtF,sFAAsF;IACtF,oFAAoF;IACpF,sFAAsF;IACtF,uFAAuF;IACvF,0EAA0E;IAC1E,MAAM,iBAAiB,GAAG,KAAK,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,OAAO;QACnB,+CAA+C,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,iBAAiB,mBAAmB,CAAC;IACpG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,OAAO,GAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;IACvF,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAE7B,wEAAwE;IACxE,kFAAkF;IAClF,gFAAgF;IAChF,6EAA6E;IAC7E,MAAM,aAAa,GAAG,CAAC,EAA8B,EAAQ,EAAE;QAC7D,MAAM,KAAK,GAAI,EAAqC,EAAE,KAAK,CAAC;QAC5D,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,+EAA+E;QAC/E,4CAA4C;QAC5C,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM;YAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACjD,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;IACrD,CAAC,CAAC;IACF,oFAAoF;IACpF,oFAAoF;IACpF,qFAAqF;IACrF,oFAAoF;IACpF,qFAAqF;IACrF,MAAM,YAAY,GAAG,GAAS,EAAE;QAC9B,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACzC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,2EAA2E;QAC3E,iFAAiF;QACjF,iFAAiF;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC;QAC/E,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC;QACrD,OAAO,CAAC,eAAe,EAAE,CAAC;QAC1B,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE;YACvB,IAAI,EAAE,UAAU;YAChB,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,OAAO;YAC1B,IAAI,EAAE,eAAe;YACrB,KAAK;SACN,CAAC,CAAC;QACH,iFAAiF;QACjF,gFAAgF;QAChF,iFAAiF;QACjF,oCAAoC;QACpC,YAAY,EAAE,CAAC;QACf,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,kFAAkF;IAClF,oFAAoF;IACpF,yEAAyE;IACzE,MAAM,MAAM,GAAG,CAAC,CAAU,EAAQ,EAAE,CAAC,CAAC;QACpC,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,MAAM,EAAE,CAAC,CAAC,MAAM;KACjB,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,IAAI,CAAC,QAAQ,EAAE;YAAE,OAAO;QACxB,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,CAAC,2BAA2B;QACtE,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC1C,+EAA+E;YAC/E,2DAA2D;YAC3D,MAAM,MAAM,GACV,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;gBACpB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;gBAClB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;gBACtB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAG,KAAK,EAAE,qBAAqB,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC;YACzD,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CACV,yFAAyF,EACzF;oBACE,MAAM;oBACN,QAAQ;oBACR,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;oBAClB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;oBAClB,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;iBAC3D,CACF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,qDAAqD;QACvD,CAAC;IACH,CAAC,CAAC;IAEF,IAAI,EAAE,CAAC;IAEP,IAAI,QAAoC,CAAC;IACzC,MAAM,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,CAAC,OAAO,cAAc,KAAK,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACvG,IAAI,EAAE,EAAE,CAAC;QACP,QAAQ,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,6EAA6E;IAC7E,gFAAgF;IAChF,kFAAkF;IAClF,0CAA0C;IAC1C,IAAI,gBAA8C,CAAC;IACnD,MAAM,EAAE,GACN,IAAI,CAAC,gBAAgB,IAAI,CAAC,OAAO,gBAAgB,KAAK,WAAW,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpG,IAAI,EAAE,EAAE,CAAC;QACP,gBAAgB,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC,CAAC;QAChD,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE;YAChC,SAAS,EAAE,IAAI;YACf,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,mDAAmD;IACnD,IAAI,IAAI,CAAC,MAAM;QAAE,EAAE,CAAC,MAAM,EAAE,CAAC;IAE7B,OAAO;QACL,OAAO,EAAE,GAAG,EAAE;YACZ,QAAQ,EAAE,UAAU,EAAE,CAAC;YACvB,gBAAgB,EAAE,UAAU,EAAE,CAAC;YAC/B,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAChC,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,WAAW;gBAAE,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC;QACrD,CAAC;KACF,CAAC;AACJ,CAAC;AAqDD,6EAA6E;AAC7E,SAAS,qBAAqB,CAAC,QAAgB;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,QAAQ,KAAK,QAAQ;YAAE,SAAS;QACtC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC5C,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC5C,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,EAAE,qBAAqB,EAAE,CAAC;YAC1C,OAAO;gBACL,MAAM,EACJ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC;oBACpB,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;oBAClB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC;oBACtB,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;gBAC1B,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB;gBACD,OAAO,EAAE;oBACP,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,GAAG,EAAE,CAAC,CAAC,GAAG;oBACV,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;iBACjB;gBACD,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI;aAC3D,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,gBAAgB,CACpC,MAAkB,EAClB,QAAgB;IAEhB,MAAM,MAAM,GACV,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnF,IAAI,IAAI,GAAiC,IAAI,CAAC;IAC9C,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAC1B,wBAAwB,CACzB,CAAC;QACF,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC;QAC3E,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC;YAC3B,QAAQ,GAAG,OAAO,CAAC,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAChE,iFAAiF;YACjF,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QACxG,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,wEAAwE;IAC1E,CAAC;IAED,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,QAAQ;QACR,MAAM;QACN,MAAM;QACN,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC;QACxC,2BAA2B,EAAE,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,iCAAiC,CAAC,CAAC,CAAC,KAAK;KAC/F,CAAC;AACJ,CAAC;AAED,iDAAiD;AACjD,SAAgB,yBAAyB;IACvC,iCAAiC,GAAG,KAAK,CAAC;AAC5C,CAAC"}
|