@multiplatform.one/auth 7.7.2
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/LICENSE +201 -0
- package/README.md +49 -0
- package/dist/cjs/accessTokenRefresh.cjs +70 -0
- package/dist/cjs/accessTokenRefresh.native.js +78 -0
- package/dist/cjs/accessTokenRefresh.native.js.map +1 -0
- package/dist/cjs/index.cjs +369 -0
- package/dist/cjs/index.native.js +411 -0
- package/dist/cjs/index.native.js.map +1 -0
- package/dist/esm/accessTokenRefresh.mjs +40 -0
- package/dist/esm/accessTokenRefresh.mjs.map +1 -0
- package/dist/esm/accessTokenRefresh.native.js +45 -0
- package/dist/esm/accessTokenRefresh.native.js.map +1 -0
- package/dist/esm/index.mjs +336 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/esm/index.native.js +375 -0
- package/dist/esm/index.native.js.map +1 -0
- package/dist/jsx/accessTokenRefresh.mjs +40 -0
- package/dist/jsx/accessTokenRefresh.mjs.map +1 -0
- package/dist/jsx/accessTokenRefresh.native.js +78 -0
- package/dist/jsx/accessTokenRefresh.native.js.map +1 -0
- package/dist/jsx/index.js +336 -0
- package/dist/jsx/index.js.map +1 -0
- package/dist/jsx/index.mjs +336 -0
- package/dist/jsx/index.mjs.map +1 -0
- package/dist/jsx/index.native.js +411 -0
- package/dist/jsx/index.native.js.map +1 -0
- package/package.json +78 -0
- package/src/accessTokenRefresh.ts +80 -0
- package/src/index.ts +665 -0
- package/types/accessTokenRefresh.d.ts +45 -0
- package/types/accessTokenRefresh.d.ts.map +1 -0
- package/types/index.d.ts +108 -0
- package/types/index.d.ts.map +1 -0
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "async_hooks";
|
|
2
|
+
import { betterAuth, matchesHostPattern } from "better-auth";
|
|
3
|
+
import { APIError, createAuthEndpoint, createAuthMiddleware, getSessionFromCtx, isAPIError } from "better-auth/api";
|
|
4
|
+
import { deleteSessionCookie, getAccountCookie } from "better-auth/cookies";
|
|
5
|
+
import { genericOAuth, keycloak } from "better-auth/plugins";
|
|
6
|
+
import { expo } from "@better-auth/expo";
|
|
7
|
+
import { FAILED_TO_GET_ACCESS_TOKEN, TOKEN_REFRESH_UNAVAILABLE } from "./accessTokenRefresh.native.js";
|
|
8
|
+
import { ACCESS_TOKEN_RETRY_DELAYS_MS, FAILED_TO_GET_ACCESS_TOKEN as FAILED_TO_GET_ACCESS_TOKEN2, TOKEN_REFRESH_UNAVAILABLE as TOKEN_REFRESH_UNAVAILABLE2, classifyAccessTokenResponse, retryWhileTransient, watchDocumentVisible } from "./accessTokenRefresh.native.js";
|
|
9
|
+
var requestOriginStorage = new AsyncLocalStorage();
|
|
10
|
+
function deriveRequestOrigin(req) {
|
|
11
|
+
var isDevHost = function isDevHost2(host) {
|
|
12
|
+
return DEV_LAN_HOST_PATTERNS.some(function (pattern) {
|
|
13
|
+
return matchesHostPattern(host, pattern);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
var forwardedHost = req.headers.get("x-forwarded-host");
|
|
17
|
+
if (forwardedHost && isDevHost(forwardedHost)) {
|
|
18
|
+
var proto = req.headers.get("x-forwarded-proto") === "https" ? "https" : "http";
|
|
19
|
+
return `${proto}://${forwardedHost}`;
|
|
20
|
+
}
|
|
21
|
+
var originHeader = req.headers.get("origin");
|
|
22
|
+
if (originHeader) {
|
|
23
|
+
try {
|
|
24
|
+
var url = new URL(originHeader);
|
|
25
|
+
if (isDevHost(url.host)) return url.origin;
|
|
26
|
+
} catch (unused) {}
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
return new URL(req.url).origin;
|
|
30
|
+
} catch (unused) {
|
|
31
|
+
return void 0;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
var DEV_LAN_HOST_PATTERNS = ["localhost", "localhost:*", "127.0.0.1", "127.0.0.1:*", "10.*", "192.168.*", "172.*", "*.local", "*.local:*"];
|
|
35
|
+
function createKeycloakSsoPlugin(options) {
|
|
36
|
+
var {
|
|
37
|
+
realm,
|
|
38
|
+
clientId,
|
|
39
|
+
clientSecret,
|
|
40
|
+
issuer,
|
|
41
|
+
baseUrl,
|
|
42
|
+
publicKeycloakBaseFor
|
|
43
|
+
} = options;
|
|
44
|
+
var tokenEndpoint = `${issuer}/protocol/openid-connect/token`;
|
|
45
|
+
var resolveVisitorOrigin = function resolveVisitorOrigin2(request) {
|
|
46
|
+
var _requestOriginStorage_getStore;
|
|
47
|
+
return (_requestOriginStorage_getStore = requestOriginStorage.getStore()) !== null && _requestOriginStorage_getStore !== void 0 ? _requestOriginStorage_getStore : request ? deriveRequestOrigin(request) : void 0;
|
|
48
|
+
};
|
|
49
|
+
var isRefreshDefinitivelyDead = async function isRefreshDefinitivelyDead2(refreshToken) {
|
|
50
|
+
try {
|
|
51
|
+
var res = await fetch(tokenEndpoint, {
|
|
52
|
+
method: "POST",
|
|
53
|
+
headers: {
|
|
54
|
+
"content-type": "application/x-www-form-urlencoded"
|
|
55
|
+
},
|
|
56
|
+
body: new URLSearchParams({
|
|
57
|
+
grant_type: "refresh_token",
|
|
58
|
+
refresh_token: refreshToken,
|
|
59
|
+
client_id: clientId,
|
|
60
|
+
client_secret: clientSecret
|
|
61
|
+
}),
|
|
62
|
+
signal: AbortSignal.timeout(5e3)
|
|
63
|
+
});
|
|
64
|
+
if (res.ok) return false;
|
|
65
|
+
if (res.status !== 400 && res.status !== 401) return false;
|
|
66
|
+
var body = await res.json().catch(function () {
|
|
67
|
+
return null;
|
|
68
|
+
});
|
|
69
|
+
return (body === null || body === void 0 ? void 0 : body.error) === "invalid_grant" || (body === null || body === void 0 ? void 0 : body.error) === "invalid_token";
|
|
70
|
+
} catch (unused) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
var signOutSso = createAuthEndpoint("/sign-out/sso", {
|
|
75
|
+
method: "GET"
|
|
76
|
+
}, async function (ctx) {
|
|
77
|
+
var _resolveVisitorOrigin, _ref;
|
|
78
|
+
var visitorOrigin = (_resolveVisitorOrigin = resolveVisitorOrigin(ctx.request)) !== null && _resolveVisitorOrigin !== void 0 ? _resolveVisitorOrigin : baseUrl;
|
|
79
|
+
var searchParams = ctx.request ? new URL(ctx.request.url).searchParams : void 0;
|
|
80
|
+
var rawCallback = (_ref = searchParams === null || searchParams === void 0 ? void 0 : searchParams.get("callbackURL")) !== null && _ref !== void 0 ? _ref : null;
|
|
81
|
+
var jsonMode = (searchParams === null || searchParams === void 0 ? void 0 : searchParams.get("mode")) === "json";
|
|
82
|
+
var answer = function answer2(url, redirect) {
|
|
83
|
+
if (jsonMode) return ctx.json({
|
|
84
|
+
redirect,
|
|
85
|
+
url
|
|
86
|
+
});
|
|
87
|
+
throw ctx.redirect(url);
|
|
88
|
+
};
|
|
89
|
+
var callbackURL = rawCallback || "/";
|
|
90
|
+
var postLogoutRedirect = callbackURL.startsWith("/") ? `${visitorOrigin}${callbackURL}` : callbackURL;
|
|
91
|
+
var idTokenHint;
|
|
92
|
+
var sessionToken = await ctx.getSignedCookie(ctx.context.authCookies.sessionToken.name, ctx.context.secret);
|
|
93
|
+
var session = await getSessionFromCtx(ctx).catch(function () {
|
|
94
|
+
return null;
|
|
95
|
+
});
|
|
96
|
+
if (session) {
|
|
97
|
+
var _ref1;
|
|
98
|
+
var _accounts_find;
|
|
99
|
+
var accounts = await ctx.context.internalAdapter.findAccounts(session.user.id).catch(function () {
|
|
100
|
+
return [];
|
|
101
|
+
});
|
|
102
|
+
idTokenHint = (_ref1 = (_accounts_find = accounts.find(function (account) {
|
|
103
|
+
return account.providerId === "keycloak";
|
|
104
|
+
})) === null || _accounts_find === void 0 ? void 0 : _accounts_find.idToken) !== null && _ref1 !== void 0 ? _ref1 : void 0;
|
|
105
|
+
}
|
|
106
|
+
if (!idTokenHint) {
|
|
107
|
+
var accountCookie = await getAccountCookie(ctx).catch(function () {
|
|
108
|
+
return null;
|
|
109
|
+
});
|
|
110
|
+
if ((accountCookie === null || accountCookie === void 0 ? void 0 : accountCookie.providerId) === "keycloak" && accountCookie.idToken) {
|
|
111
|
+
idTokenHint = accountCookie.idToken;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (sessionToken) {
|
|
115
|
+
await ctx.context.internalAdapter.deleteSession(sessionToken).catch(function (error) {
|
|
116
|
+
ctx.context.logger.error("Failed to delete session during SSO sign-out", error);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
deleteSessionCookie(ctx);
|
|
120
|
+
var keycloakBase = publicKeycloakBaseFor(visitorOrigin);
|
|
121
|
+
if (!keycloakBase || !session && !idTokenHint && !sessionToken) {
|
|
122
|
+
return answer(postLogoutRedirect, false);
|
|
123
|
+
}
|
|
124
|
+
var endSession = new URL(`${keycloakBase}/realms/${realm}/protocol/openid-connect/logout`);
|
|
125
|
+
endSession.searchParams.set("post_logout_redirect_uri", postLogoutRedirect);
|
|
126
|
+
endSession.searchParams.set("client_id", clientId);
|
|
127
|
+
if (idTokenHint) endSession.searchParams.set("id_token_hint", idTokenHint);
|
|
128
|
+
return answer(endSession.toString(), true);
|
|
129
|
+
});
|
|
130
|
+
return {
|
|
131
|
+
id: "keycloak-sso",
|
|
132
|
+
endpoints: {
|
|
133
|
+
signOutSso
|
|
134
|
+
},
|
|
135
|
+
hooks: {
|
|
136
|
+
after: [{
|
|
137
|
+
matcher: function matcher(ctx) {
|
|
138
|
+
return ctx.path === "/get-access-token";
|
|
139
|
+
},
|
|
140
|
+
handler: createAuthMiddleware(async function (ctx) {
|
|
141
|
+
var _ctx_body, _accounts_find;
|
|
142
|
+
var returned = ctx.context.returned;
|
|
143
|
+
if (!isAPIError(returned)) return;
|
|
144
|
+
var body = returned.body;
|
|
145
|
+
if ((body === null || body === void 0 ? void 0 : body.code) !== FAILED_TO_GET_ACCESS_TOKEN) return;
|
|
146
|
+
var providerId = (_ctx_body = ctx.body) === null || _ctx_body === void 0 ? void 0 : _ctx_body.providerId;
|
|
147
|
+
if (providerId && providerId !== "keycloak") return;
|
|
148
|
+
var session = await getSessionFromCtx(ctx).catch(function () {
|
|
149
|
+
return null;
|
|
150
|
+
});
|
|
151
|
+
if (!session) return;
|
|
152
|
+
var accounts = await ctx.context.internalAdapter.findAccounts(session.user.id).catch(function () {
|
|
153
|
+
return [];
|
|
154
|
+
});
|
|
155
|
+
var refreshToken = (_accounts_find = accounts.find(function (account) {
|
|
156
|
+
return account.providerId === "keycloak";
|
|
157
|
+
})) === null || _accounts_find === void 0 ? void 0 : _accounts_find.refreshToken;
|
|
158
|
+
if (!refreshToken) {
|
|
159
|
+
var accountCookie = await getAccountCookie(ctx).catch(function () {
|
|
160
|
+
return null;
|
|
161
|
+
});
|
|
162
|
+
if ((accountCookie === null || accountCookie === void 0 ? void 0 : accountCookie.providerId) === "keycloak") {
|
|
163
|
+
refreshToken = accountCookie.refreshToken;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
var definitive = refreshToken ? await isRefreshDefinitivelyDead(refreshToken) : true;
|
|
167
|
+
if (!definitive) {
|
|
168
|
+
return new APIError("INTERNAL_SERVER_ERROR", {
|
|
169
|
+
message: "Keycloak token refresh temporarily unavailable",
|
|
170
|
+
code: TOKEN_REFRESH_UNAVAILABLE
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
ctx.context.logger.warn("Keycloak refresh token is dead (invalid_grant); revoking the stale Better Auth session");
|
|
174
|
+
var sessionToken = await ctx.getSignedCookie(ctx.context.authCookies.sessionToken.name, ctx.context.secret);
|
|
175
|
+
if (sessionToken) {
|
|
176
|
+
await ctx.context.internalAdapter.deleteSession(sessionToken).catch(function (error) {
|
|
177
|
+
ctx.context.logger.error("Failed to delete stale session", error);
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
deleteSessionCookie(ctx);
|
|
181
|
+
var headers = new Headers();
|
|
182
|
+
var accumulated = ctx.responseHeaders;
|
|
183
|
+
accumulated === null || accumulated === void 0 ? void 0 : accumulated.getSetCookie().forEach(function (cookie) {
|
|
184
|
+
headers.append("set-cookie", cookie);
|
|
185
|
+
});
|
|
186
|
+
return new APIError("BAD_REQUEST", {
|
|
187
|
+
message: (body === null || body === void 0 ? void 0 : body.message) || "Failed to get a valid access token",
|
|
188
|
+
code: FAILED_TO_GET_ACCESS_TOKEN
|
|
189
|
+
}, headers);
|
|
190
|
+
})
|
|
191
|
+
}]
|
|
192
|
+
}
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
function createAuth() {
|
|
196
|
+
var options = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
197
|
+
var _options_plugins, _options_database, _options_sessionMaxAge;
|
|
198
|
+
var _options_keycloak, _options_keycloak1, _options_keycloak2, _options_keycloak3;
|
|
199
|
+
var baseUrl = options.baseUrl || process.env.BASE_URL || `http://localhost:${process.env.ONE_PORT || "3000"}`;
|
|
200
|
+
var isProduction = process.env.NODE_ENV === "production";
|
|
201
|
+
var keycloakBaseUrl = ((_options_keycloak = options.keycloak) === null || _options_keycloak === void 0 ? void 0 : _options_keycloak.baseUrl) || process.env.KEYCLOAK_BACKCHANNEL_URL || `${baseUrl}/auth`;
|
|
202
|
+
var keycloakRealm = ((_options_keycloak1 = options.keycloak) === null || _options_keycloak1 === void 0 ? void 0 : _options_keycloak1.realm) || process.env.KEYCLOAK_REALM || "master";
|
|
203
|
+
var issuer = `${keycloakBaseUrl}/realms/${keycloakRealm}`;
|
|
204
|
+
var keycloakClientId = ((_options_keycloak2 = options.keycloak) === null || _options_keycloak2 === void 0 ? void 0 : _options_keycloak2.clientId) || process.env.KEYCLOAK_CLIENT_ID || "";
|
|
205
|
+
var keycloakClientSecret = ((_options_keycloak3 = options.keycloak) === null || _options_keycloak3 === void 0 ? void 0 : _options_keycloak3.clientSecret) || process.env.KEYCLOAK_CLIENT_SECRET || "";
|
|
206
|
+
var expoPlugin = options.enableExpo !== false ? expo() : void 0;
|
|
207
|
+
var basePath = options.basePath || "/api/auth";
|
|
208
|
+
var keycloakProviderConfig = {
|
|
209
|
+
...keycloak({
|
|
210
|
+
clientId: keycloakClientId,
|
|
211
|
+
clientSecret: keycloakClientSecret,
|
|
212
|
+
issuer
|
|
213
|
+
}),
|
|
214
|
+
// Backchannel token/userinfo: `/get-access-token` refresh keeps these
|
|
215
|
+
// when discovery fails (Keycloak restart), so we don't depend on the
|
|
216
|
+
// well-known document coming up in the same instant as the token
|
|
217
|
+
// endpoint. Browser-facing authorize/issuer stay on the public /auth
|
|
218
|
+
// proxy (getters below).
|
|
219
|
+
tokenUrl: `${issuer}/protocol/openid-connect/token`,
|
|
220
|
+
userInfoUrl: `${issuer}/protocol/openid-connect/userinfo`,
|
|
221
|
+
// Wallet (SIWE-style) users authenticate by signature and have NO email —
|
|
222
|
+
// Keycloak issues them a username = wallet address and no email claim.
|
|
223
|
+
// better-auth's genericOAuth callback hard-rejects a user with no email
|
|
224
|
+
// ("email_is_missing"), so synthesize a stable, unique placeholder from the
|
|
225
|
+
// wallet address / subject. `.wallet` is a non-routable placeholder domain;
|
|
226
|
+
// the address stays the stable identity.
|
|
227
|
+
mapProfileToUser: function mapProfileToUser(profile) {
|
|
228
|
+
var _profile_email_verified;
|
|
229
|
+
var handle = profile.preferred_username || profile.sub || profile.id || profile.name;
|
|
230
|
+
var email = profile.email || (handle ? `${handle}@wallet` : void 0);
|
|
231
|
+
return {
|
|
232
|
+
...profile,
|
|
233
|
+
email,
|
|
234
|
+
emailVerified: (_profile_email_verified = profile.email_verified) !== null && _profile_email_verified !== void 0 ? _profile_email_verified : true,
|
|
235
|
+
name: profile.name || handle
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
var keycloakPublicPath = function () {
|
|
240
|
+
try {
|
|
241
|
+
var path = new URL(keycloakBaseUrl).pathname.replace(/\/+$/, "");
|
|
242
|
+
return path && path !== "/" ? path : void 0;
|
|
243
|
+
} catch (unused) {
|
|
244
|
+
return void 0;
|
|
245
|
+
}
|
|
246
|
+
}();
|
|
247
|
+
var publicKeycloakBaseFor = function publicKeycloakBaseFor2(requestOrigin) {
|
|
248
|
+
if (!keycloakPublicPath) return keycloakBaseUrl;
|
|
249
|
+
try {
|
|
250
|
+
var url = new URL(baseUrl);
|
|
251
|
+
if (!isProduction && requestOrigin) {
|
|
252
|
+
url.hostname = new URL(requestOrigin).hostname;
|
|
253
|
+
}
|
|
254
|
+
return `${url.origin}${keycloakPublicPath}`;
|
|
255
|
+
} catch (unused) {
|
|
256
|
+
return void 0;
|
|
257
|
+
}
|
|
258
|
+
};
|
|
259
|
+
if (!isProduction) {
|
|
260
|
+
Object.defineProperty(keycloakProviderConfig, "redirectURI", {
|
|
261
|
+
enumerable: true,
|
|
262
|
+
get() {
|
|
263
|
+
var origin = requestOriginStorage.getStore();
|
|
264
|
+
return origin ? `${origin}${basePath}/oauth2/callback/keycloak` : void 0;
|
|
265
|
+
}
|
|
266
|
+
});
|
|
267
|
+
var keycloakPublicBase = function keycloakPublicBase2() {
|
|
268
|
+
var origin = requestOriginStorage.getStore();
|
|
269
|
+
if (!origin || !keycloakPublicPath) return void 0;
|
|
270
|
+
return publicKeycloakBaseFor(origin);
|
|
271
|
+
};
|
|
272
|
+
if (keycloakPublicPath) {
|
|
273
|
+
Object.defineProperty(keycloakProviderConfig, "authorizationUrl", {
|
|
274
|
+
enumerable: true,
|
|
275
|
+
get() {
|
|
276
|
+
var base = keycloakPublicBase();
|
|
277
|
+
return base ? `${base}/realms/${keycloakRealm}/protocol/openid-connect/auth` : void 0;
|
|
278
|
+
}
|
|
279
|
+
});
|
|
280
|
+
Object.defineProperty(keycloakProviderConfig, "issuer", {
|
|
281
|
+
enumerable: true,
|
|
282
|
+
get() {
|
|
283
|
+
var base = keycloakPublicBase();
|
|
284
|
+
return base ? `${base}/realms/${keycloakRealm}` : void 0;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
var oauthPlugin = genericOAuth({
|
|
290
|
+
config: [keycloakProviderConfig]
|
|
291
|
+
});
|
|
292
|
+
var keycloakSsoPlugin = createKeycloakSsoPlugin({
|
|
293
|
+
realm: keycloakRealm,
|
|
294
|
+
clientId: keycloakClientId,
|
|
295
|
+
clientSecret: keycloakClientSecret,
|
|
296
|
+
issuer,
|
|
297
|
+
baseUrl,
|
|
298
|
+
publicKeycloakBaseFor
|
|
299
|
+
});
|
|
300
|
+
var plugins = [...(expoPlugin ? [expoPlugin] : []), oauthPlugin, keycloakSsoPlugin, ...((_options_plugins = options.plugins) !== null && _options_plugins !== void 0 ? _options_plugins : [])];
|
|
301
|
+
var database = (_options_database = options.database) !== null && _options_database !== void 0 ? _options_database : process.env.DATABASE_URL || void 0;
|
|
302
|
+
return betterAuth({
|
|
303
|
+
basePath,
|
|
304
|
+
// Static on purpose: better-auth's dynamic `baseURL` config (allowedHosts)
|
|
305
|
+
// is not honored by the genericOAuth plugin — it pins redirect URIs at
|
|
306
|
+
// init time, which turned them relative and bounced callbacks to the
|
|
307
|
+
// Keycloak host. Dev multi-host support comes from the per-request
|
|
308
|
+
// redirectURI getter above + the LAN trustedOrigins below instead.
|
|
309
|
+
baseURL: baseUrl,
|
|
310
|
+
...(database ? {
|
|
311
|
+
database
|
|
312
|
+
} : {}),
|
|
313
|
+
secret: options.secret || process.env.SECRET || "",
|
|
314
|
+
trustedOrigins: options.trustedOrigins || [baseUrl, keycloakBaseUrl,
|
|
315
|
+
// In dev, ONE_PORT may differ from BASE_URL; ensure the dev server origin is trusted.
|
|
316
|
+
...(process.env.ONE_PORT && !baseUrl.includes(`:${process.env.ONE_PORT}`) ? [`http://localhost:${process.env.ONE_PORT}`] : []), "multiplatform-one://",
|
|
317
|
+
// Expo Go (dev) receives OAuth returns on the exp:// scheme — the app
|
|
318
|
+
// derives its callbackURL via Linking.createURL, which yields
|
|
319
|
+
// exp://<host>:<port>/--/ there. Never trusted in production builds.
|
|
320
|
+
// Dev also trusts private-network origins (see DEV_LAN_HOST_PATTERNS)
|
|
321
|
+
// so sign-in from a phone / the machine's LAN IP is not rejected.
|
|
322
|
+
...(isProduction ? [] : ["exp://", ...DEV_LAN_HOST_PATTERNS.map(function (host) {
|
|
323
|
+
return `http://${host}`;
|
|
324
|
+
})])],
|
|
325
|
+
session: {
|
|
326
|
+
cookieCache: {
|
|
327
|
+
enabled: true,
|
|
328
|
+
maxAge: (_options_sessionMaxAge = options.sessionMaxAge) !== null && _options_sessionMaxAge !== void 0 ? _options_sessionMaxAge : 7 * 24 * 60 * 60,
|
|
329
|
+
strategy: "jwe",
|
|
330
|
+
refreshCache: true
|
|
331
|
+
}
|
|
332
|
+
},
|
|
333
|
+
account: {
|
|
334
|
+
storeStateStrategy: "cookie",
|
|
335
|
+
storeAccountCookie: true
|
|
336
|
+
},
|
|
337
|
+
plugins
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
function createAuthRouteHandler(auth) {
|
|
341
|
+
var handler = function handler2(req) {
|
|
342
|
+
var origin = deriveRequestOrigin(req);
|
|
343
|
+
return origin ? requestOriginStorage.run(origin, function () {
|
|
344
|
+
return auth.handler(req);
|
|
345
|
+
}) : auth.handler(req);
|
|
346
|
+
};
|
|
347
|
+
return {
|
|
348
|
+
GET: handler,
|
|
349
|
+
POST: handler
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
function createSessionHelpers(auth) {
|
|
353
|
+
async function getSession(req) {
|
|
354
|
+
return auth.api.getSession({
|
|
355
|
+
headers: req.headers
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
async function verifyAuth(req) {
|
|
359
|
+
var session = await auth.api.getSession({
|
|
360
|
+
headers: req.headers
|
|
361
|
+
});
|
|
362
|
+
if (!session) {
|
|
363
|
+
throw new Response("Unauthorized", {
|
|
364
|
+
status: 401
|
|
365
|
+
});
|
|
366
|
+
}
|
|
367
|
+
return session;
|
|
368
|
+
}
|
|
369
|
+
return {
|
|
370
|
+
verifyAuth,
|
|
371
|
+
getSession
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
export { ACCESS_TOKEN_RETRY_DELAYS_MS, FAILED_TO_GET_ACCESS_TOKEN2 as FAILED_TO_GET_ACCESS_TOKEN, TOKEN_REFRESH_UNAVAILABLE2 as TOKEN_REFRESH_UNAVAILABLE, classifyAccessTokenResponse, createAuth, createAuthRouteHandler, createSessionHelpers, retryWhileTransient, watchDocumentVisible };
|
|
375
|
+
//# sourceMappingURL=index.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AsyncLocalStorage","betterAuth","matchesHostPattern","APIError","createAuthEndpoint","createAuthMiddleware","getSessionFromCtx","isAPIError","deleteSessionCookie","getAccountCookie","genericOAuth","keycloak","expo","FAILED_TO_GET_ACCESS_TOKEN","TOKEN_REFRESH_UNAVAILABLE","ACCESS_TOKEN_RETRY_DELAYS_MS","FAILED_TO_GET_ACCESS_TOKEN2","TOKEN_REFRESH_UNAVAILABLE2","classifyAccessTokenResponse","retryWhileTransient","watchDocumentVisible","requestOriginStorage","deriveRequestOrigin","req","isDevHost","isDevHost2","host","DEV_LAN_HOST_PATTERNS","some","pattern","forwardedHost","headers","get","proto","originHeader","url","URL","origin","unused","createKeycloakSsoPlugin","options","realm","clientId","clientSecret","issuer","baseUrl","publicKeycloakBaseFor","tokenEndpoint","resolveVisitorOrigin","resolveVisitorOrigin2","request","_requestOriginStorage_getStore","getStore","isRefreshDefinitivelyDead","isRefreshDefinitivelyDead2","refreshToken","res","fetch","method","body","URLSearchParams","grant_type","refresh_token","client_id","client_secret","signal","AbortSignal","timeout","ok","status","json","catch","error","signOutSso","ctx","_resolveVisitorOrigin","_ref","visitorOrigin","searchParams","rawCallback","jsonMode","answer","answer2","redirect","callbackURL","postLogoutRedirect","startsWith","idTokenHint","sessionToken","getSignedCookie","context","authCookies","name","secret","session","_ref1","_accounts_find","accounts","internalAdapter","findAccounts","user","id","find","account","providerId","idToken","accountCookie","deleteSession","logger","keycloakBase","endSession","set","toString","endpoints","hooks","after","matcher","path","handler","_ctx_body","returned","code","definitive","message","warn","Headers","accumulated","responseHeaders","getSetCookie","forEach","cookie","append","createAuth","arguments","length","_options_plugins","_options_database","_options_sessionMaxAge","_options_keycloak","_options_keycloak1","_options_keycloak2","_options_keycloak3","process","env","BASE_URL","ONE_PORT","isProduction","NODE_ENV","keycloakBaseUrl","KEYCLOAK_BACKCHANNEL_URL","keycloakRealm","KEYCLOAK_REALM","keycloakClientId","KEYCLOAK_CLIENT_ID","keycloakClientSecret","KEYCLOAK_CLIENT_SECRET","expoPlugin","enableExpo","basePath","keycloakProviderConfig","tokenUrl","userInfoUrl","mapProfileToUser","profile","_profile_email_verified","handle","preferred_username","sub","email","emailVerified","email_verified","keycloakPublicPath","pathname","replace","publicKeycloakBaseFor2","requestOrigin","hostname","Object","defineProperty","enumerable","keycloakPublicBase","keycloakPublicBase2","base","oauthPlugin","config","keycloakSsoPlugin","plugins","database","DATABASE_URL","baseURL","SECRET","trustedOrigins","includes","map","cookieCache","enabled","maxAge","sessionMaxAge","strategy","refreshCache","storeStateStrategy","storeAccountCookie"],"sources":["../../src/index.ts"],"sourcesContent":[null],"mappings":"AAgBA,SAASA,iBAAA,QAAyB;AAClC,SAASC,UAAA,EAAYC,kBAAA,QAA0B;AAE/C,SAAAC,QAAA,EAAAC,kBAAA,EAAAC,oBAAA,EAAAC,iBAAA,EAAAC,UAAA;AAAA,SACEC,mBAAA,EAAAC,gBAAA;AAAA,SACAC,YAAA,EAAAC,QAAA;AAAA,SACAC,IAAA;AAAA,SACAC,0BAAA,EAAAC,yBAAA;AAAA,SACAC,4BAAA,EAAAF,0BAAA,IAAAG,2BAAA,EAAAF,yBAAA,IAAAG,0BAAA,EAAAC,2BAAA,EAAAC,mBAAA,EAAAC,oBAAA;AAAA,IAAAC,oBACK,OAAArB,iBAAA;AACP,SAASsB,oBAAAC,GAAqB;EAC9B,IAAAC,SAAS,YAAcC,WAAAC,IAAgB;IACvC,OAASC,qBAAY,CAAAC,IAAA,WAAAC,OAAA;MACrB,OAAS3B,kBAAA,CAAAwB,IAAA,EAA4BG,OAAA;IAErC;EACE;EACA,IAAAC,aAAA,GAAAP,GAAA,CAAAQ,OAAA,CAAAC,GAAA;EACA,IAAAF,aAAA,IAAAN,SAAA,CAAAM,aAAA;IACA,IAAAG,KAAA,GAAAV,GAAA,CAAAQ,OAAA,CAAAC,GAAA;IACA,UAAAC,KAAA,MAAAH,aAAA;EACA;EAAA,IAAAI,YACK,GAAAX,GAAA,CAAAQ,OAAA,CAAAC,GAAA;EAYP,IAAME,YAAA;IAWN;MACE,IAAMC,GAAA,OAAYC,GAAC,CAAAF,YACjB;MAEF,IAAMV,SAAA,CAAAW,GAAA,CAAgBT,IAAI,UAAQS,GAAI,CAAAE,MAAA;IACtC,EAAI,OAAAC,MAAA,GACF;EACA;EACF;IAEA,OAAM,IAAAF,GAAA,CAAAb,GAAA,CAAeY,GAAA,CAAI,CAAAE,MAAA;EACzB,SAAIC,MAAA;IACF,OAAI;EACF;AACA;AAAoC,IACtCX,qBAAQ,eAER,EACF,eAEA,WAAI,EACF,aAAW,EACb,QACE,WAAO,EACT,SACF,WAqDA,WAAM,CAAwB;AAC5B,SACAY,wBAAAC,OAAA;EACA;IAAAC,KAAA;IAAAC,QAAA;IAAAC,YAAA;IAAAC,MAAA;IAAAC,OAAA;IAAAC;EAAA,IAAAN,OAAA;EACA,IAAAO,aAAA,MAAAH,MAAA;EACA,IAAAI,oBAAA,YAAAC,sBAAAC,OAAA;IACA,IAAAC,8BAAA;IACA,QAAAA,8BAAA,GAAA9B,oBAAA,CAAA+B,QAAA,gBAAAD,8BAAA,cAAAA,8BAAA,GAAAD,OAAA,GAAA5B,mBAAA,CAAA4B,OAAA;EACA;EACA,IAAAG,yBAAA,kBAAAC,2BAAAC,YAAA;IACF;MAsDA,IAASC,GAAA,SAAAC,KAAA,CAAAV,aAAwB,EAAmC;QAC5DW,MAAE,QAAO;QACT3B,OAAA;UAGA;QASA;QACA4B,IAAA,MAAAC,eAAA;UACFC,UAAY,iBAAY;UACtBC,aAAQ,EAAAP,YAAA;UACRQ,SAAW,EAAArB,QAAA;UACXsB,aAAU,EAAArB;QAAgB,EACxB;QAAYsB,MACZ,EAAAC,WAAe,CAAAC,OAAA;MAAA;MACJ,IACXX,GAAA,CAAAY,EAAA,SAAe;MAAA,IAChBZ,GAAA,CAAAa,MAAA,YAAAb,GAAA,CAAAa,MAAA;MAAA,IACDV,IAAA,GAAQ,MAAAH,GAAA,CAAAc,IAAY,GAAAC,KAAY;QACjC;MACD;MACA,OAAI,CAAIZ,IAAA,SAAW,IAAAA,IAAO,KAAI,SAAW,KAAK,IAAAA,IAAO,CAAAa,KAAA,0BAAAb,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAAa,KAAA;IACrD,SAAMlC,MAAQ;MACd,OAAO;IACT;EACE;EAAO,IACTmC,UAAA,GAAArE,kBAAA;IACFsD,MAAA;EAEA,mBAAMgB,GAAa;IACjB,IAAAC,qBAAsB,EAAAC,IAAA;IACtB,IAAAC,aAAM,IAAeF,qBAAkB,GAAI3B,oBAAiB,CAAA0B,GAAA,CAAAxB,OAAe,eAAAyB,qBAAA,cAAAA,qBAAA,GAAA9B,OAAA;IAC3E,IAAAiC,YAAM,GAAAJ,GAAc,CAAAxB,OAAA,OAAcd,GAAI,CAAAsC,GAAA,CAAAxB,OAAa,CAAAf,GAAK,EAAA2C,YAAA;IAExD,IAAAC,WAAM,GAAW,CAAAH,IAAA,GAAAE,YAAkB,KAAM,IAAM,IAAAA,YAAA,uBAAAA,YAAA,CAAA9C,GAAA,6BAAA4C,IAAA,cAAAA,IAAA;IAC/C,IAAAI,QAAM,GAAS,CAACF,YAAa,SAAsB,IAAAA,YAAA,uBAAAA,YAAA,CAAA9C,GAAA;IACjD,IAAAiD,MAAI,YAAUC,OAAWA,CAAA/C,GAAK,EAAEgD,QAAA,EAAU;MAC1C,IAAAH,QAAU,SAASN,GAAG,CAAAJ,IAAA;QACxBa,QAAA;QACAhD;MAGA;MASA,MAAIuC,GAAA,CAAAS,QAAA,CAAAhD,GAAA;IACJ;IAA+B,IAC7BiD,WAAY,GAAAL,WAAY;IAAa,IACrCM,kBAAY,GAAAD,WAAA,CAAAE,UAAA,WAAAT,aAAA,GAAAO,WAAA,KAAAA,WAAA;IACd,IAAAG,WAAA;IACA,IAAAC,YAAgB,SAAMd,GAAA,CAAAe,eAAqB,CAAEf,GAAA,CAAAgB,OAAM,CAAMC,WAAI,CAAAH,YAAA,CAAAI,IAAA,EAAAlB,GAAA,CAAAgB,OAAA,CAAAG,MAAA;IAC7D,IAAIC,OAAA,GAAS,MAAAxF,iBAAA,CAAAoE,GAAA,EAAAH,KAAA;MACX,OAAM;IAGN;IAEF,IAAAuB,OAAA;MACA,IAAKC,KAAA;MACH,IAAAC,cAAM;MAA6C,IACjDC,QAAM,SAAAvB,GAAA,CAAAgB,OAAA,CAAAQ,eAAA,CAAAC,YAAA,CAAAL,OAAA,CAAAM,IAAA,CAAAC,EAAA,EAAA9B,KAAA;QACR;MACA;MACEgB,WAAA,IAAAQ,KAAc,IAAAC,cAAc,GAAAC,QAAA,CAAAK,IAAA,WAAAC,OAAA;QAC9B,OAAAA,OAAA,CAAAC,UAAA;MACF,gBAAAR,cAAA,uBAAAA,cAAA,CAAAS,OAAA,cAAAV,KAAA,cAAAA,KAAA;IAEA;IACE,KAAAR,WAAU;MACR,IAAAmB,aAAY,SAAOjG,gBAAM,CAAAiE,GAAA,EAAAH,KAAA;QAC1B;MACH;MACA,KAAAmC,aAAoB,KAAG,QAAAA,aAAA,uBAAAA,aAAA,CAAAF,UAAA,oBAAAE,aAAA,CAAAD,OAAA;QAOvBlB,WAAM,GAAAmB,aAAe,CAAAD,OAAA;MACrB;IACE;IACF,IAAAjB,YAAA;MAEA,MAAMd,GAAA,CAAAgB,OAAa,CAAAQ,eAAW,CAAAS,aAAY,CAAAnB,YAAgB,EAAAjB,KAAA,WAAAC,KAAA;QAC1DE,GAAA,CAAAgB,OAAW,CAAAkB,MAAA,CAAApC,KAAiB,+CAA8C,EAAAA,KAAA;MAC1E;IACA;IACAhE,mBAAc,CAAAkE,GAAA;IACf,IAAAmC,YAAA,GAAA/D,qBAAA,CAAA+B,aAAA;IAED,KAAOgC,YAAA,KAAAf,OAAA,KAAAP,WAAA,KAAAC,YAAA;MACL,OAAIP,MAAA,CAAAI,kBAAA;IACJ;IAAW,IACTyB,UAAA,OAAA1E,GAAA,IAAAyE,YAAA,WAAApE,KAAA;IACFqE,UAAA,CAAAhC,YAAA,CAAAiC,GAAA,6BAAA1B,kBAAA;IACAyB,UAAO,CAAAhC,YAAA,CAAAiC,GAAA,cAAArE,QAAA;IAAA,IACL6C,WAAO,EAAAuB,UAAA,CAAAhC,YAAA,CAAAiC,GAAA,kBAAAxB,WAAA;IAAA,OACLN,MAAA,CAAA6B,UAAA,CAAAE,QAAA;EAAA;EACiC;IAE7BX,EAAA,gBAAM;IACNY,SAAA;MACAxC;IACA;IACAyC,KAAA;MACAC,KAAA,GAEA;QACAC,OAAK,WAASA,QAAA1C,GAAA;UAKd,OAAMA,GAAA,CAAA2C,IAAA,KAAY,mBAAkB;QAGpC;QAA4BC,OACzB,EAAAjH,oBAAoB,iBAAeqE,GAAA;UACtC,IAAG6C,SAAA,EAAAvB,cAAA;UACH,IAAIwB,QAAC,GAAA9C,GAAA,CAAcgB,OAAA,CAAA8B,QAAA;UACjB,KAAAjH,UAAM,CAAAiH,QAAiB;UAA4B,IACjD7D,IAAA,GAAM6D,QAAA,CAAA7D,IAAA;UAAA,IACR,CAAAA,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAA8D,IAAA,MAAA5G,0BAAA;UACA,IAAA2F,UAAI,IAAAe,SAAe,GAAA7C,GAAA,CAAAf,IAAe,UAAY,IAAA4D,SAAA,uBAAAA,SAAA,CAAAf,UAAA;UAC5C,IAAAA,UAAA,IAAAA,UAAe,KAAc;UAAA,IAC/BV,OAAA,SAAAxF,iBAAA,CAAAoE,GAAA,EAAAH,KAAA;YACF;UACA;UACA,IAAI,CAACuB,OAAA;UAIH,IAAAG,QAAO,GAAI,MAAAvB,GAAS,CAAAgB,OAAA,CAAAQ,eAAyB,CAAAC,YAAA,CAAAL,OAAA,CAAAM,IAAA,CAAAC,EAAA,EAAA9B,KAAA;YAAA,OAC3C;UAAS;UACH,IACPhB,YAAA,IAAAyC,cAAA,GAAAC,QAAA,CAAAK,IAAA,WAAAC,OAAA;YACH,OAAAA,OAAA,CAAAC,UAAA;UAEA,QAAI,IAAQ,IAAAR,cAAO,uBAAAA,cAAA,CAAAzC,YAAA;UAAA,IACjB,CAAAA,YAAA;YACF,IAAAmD,aAAA,SAAAjG,gBAAA,CAAAiE,GAAA,EAAAH,KAAA;cACA,OAAM;YACJ;YACA,IAAI,CAAAmC,aAAQ,aAAAA,aAAA,uBAAAA,aAAA,CAAAF,UAAA;cACdjD,YAAA,GAAAmD,aAAA,CAAAnD,YAAA;YACA;UACE;UAGI,IAAAmE,UAAI,GAAQnE,YAAa,SAAAF,yBAAkC,CAAAE,YAAK;UAAA,IACjE,CAAAmE,UAAA;YACL,WAAAvH,QAAA;cACAwH,OAAA,kDAAuB;cAKvBF,IAAM,EAAA3G;YACN;UACA;UACE4D,GAAA,CAAAgB,OAAQ,CAAAkB,MAAO,CAAAgB,IAAA,yFAAoB;UACrC,IAACpC,YAAA,SAAAd,GAAA,CAAAe,eAAA,CAAAf,GAAA,CAAAgB,OAAA,CAAAC,WAAA,CAAAH,YAAA,CAAAI,IAAA,EAAAlB,GAAA,CAAAgB,OAAA,CAAAG,MAAA;UACD,IAAAL,YAAW;YACT,MAAAd,GAAA,CAAAgB,OAAA,CAAAQ,eAAA,CAAAS,aAAA,CAAAnB,YAAA,EAAAjB,KAAA,WAAAC,KAAA;cACAE,GAAA,CAAAgB,OAAA,CAAAkB,MAAA,CAAApC,KAAA,mCAAAA,KAAA;YAAA,EACE;UAA0B;UACpBhE,mBACR,CAAAkE,GAAA;UAAA,IACA3C,OAAA,OAAA8F,OAAA;UACF,IAAAC,WAAA,GAAApD,GAAA,CAAAqD,eAAA;UACDD,WAAA,aAAAA,WAAA,uBAAAA,WAAA,CAAAE,YAAA,GAAAC,OAAA,WAAAC,MAAA;YACHnG,OAAA,CAAAoG,MAAA,eAAAD,MAAA;UACF;UACF,WAAA/H,QAAA;YACFwH,OAAA,GAAAhE,IAAA,aAAAA,IAAA,uBAAAA,IAAA,CAAAgE,OAAA;YACFF,IAAA,EAAA5G;UAMgB,GAAAkB,OAAW;QACnB;MAEA;IAMN;EACA;AAEA;AACA,SAAMqG,WAAA;EAGN,IAAA5F,OAAM,GAAA6F,SAAa,CAAAC,MAAQ,QAAAD,SAAe,GAAQ,KAAK,KAAI,IAAAA,SAAA;EAE3D,IAAAE,gBAAiB,EAAAC,iBAAoB,EAAAC,sBAAA;EAErC,IAAAC,iBAAM,EAAAC,kBAAyB,EAAAC,kBAAA,EAAAC,kBAAA;EAAA,IAC7BhG,OAAG,GAASL,OAAA,CAAAK,OAAA,IAAAiG,OAAA,CAAAC,GAAA,CAAAC,QAAA,wBAAAF,OAAA,CAAAC,GAAA,CAAAE,QAAA;EAAA,IACVC,YAAU,GAAAJ,OAAA,CAAAC,GAAA,CAAAI,QAAA;EAAA,IACVC,eAAc,KAAAV,iBAAA,GAAAlG,OAAA,CAAA7B,QAAA,cAAA+H,iBAAA,uBAAAA,iBAAA,CAAA7F,OAAA,KAAAiG,OAAA,CAAAC,GAAA,CAAAM,wBAAA,OAAAxG,OAAA;EAAA,IACdyG,aAAA,KAAAX,kBAAA,GAAAnG,OAAA,CAAA7B,QAAA,cAAAgI,kBAAA,uBAAAA,kBAAA,CAAAlG,KAAA,KAAAqG,OAAA,CAAAC,GAAA,CAAAQ,cAAA;EAAA,IACD3G,MAAA,MAAAwG,eAAA,WAAAE,aAAA;EAAA,IAAAE,gBAAA,KAAAZ,kBAAA,GAAApG,OAAA,CAAA7B,QAAA,cAAAiI,kBAAA,uBAAAA,kBAAA,CAAAlG,QAAA,KAAAoG,OAAA,CAAAC,GAAA,CAAAU,kBAAA;EAAA,IAAAC,oBAAA,KAAAb,kBAAA,GAAArG,OAAA,CAAA7B,QAAA,cAAAkI,kBAAA,uBAAAA,kBAAA,CAAAlG,YAAA,KAAAmG,OAAA,CAAAC,GAAA,CAAAY,sBAAA;EAAA,IAAAC,UAAA,GAAApH,OAAA,CAAAqH,UAAA,aAAAjJ,IAAA;EAAA,IAAAkJ,QAAA,GAAAtH,OAAA,CAAAsH,QAAA;EAAA,IAAAC,sBAAA;IAMD,GAAApJ,QAAU;MACV+B,QAAA,EAAA8G,gBAAsB;MAAA7G,YAAA,EAAA+G,oBAAA;MAAA9G;IAAA;IAAA;IAAA;IAAA;IAOtB;IACE;IACAoH,QAAM,KAAApH,MAAQ,gCAA8B;IAC5CqH,WAAO,KAAArH,MAAA;IAAA;IACF;IACH;IACyC;IACnB;IAE1B;IACFsH,gBAAA,WAAAA,iBAAAC,OAAA;MAGA,IAAMC,uBAAsB;MAC1B,IAAIC,MAAA,GAAAF,OAAA,CAAAG,kBAAA,IAAAH,OAAA,CAAAI,GAAA,IAAAJ,OAAA,CAAA9D,EAAA,IAAA8D,OAAA,CAAAvE,IAAA;MACF,IAAA4E,KAAM,GAAAL,OAAW,CAAAK,KAAI,KAAAH,MAAe,GAAE,GAAAA,MAAS,SAAQ,QAAU;MACjE,OAAO;QACT,GAAAF,OAAQ;QACNK,KAAO;QACTC,aAAA,GAAAL,uBAAA,GAAAD,OAAA,CAAAO,cAAA,cAAAN,uBAAA,cAAAA,uBAAA;QACCxE,IAAA,EAAAuE,OAAA,CAAAvE,IAAA,IAAAyE;MASH;IACE;EACA;EACE,IAAAM,kBAAgB,GAAI,YAAO;IAC3B;MACE,IAAAtD,IAAI,OAAAjF,GAAW,CAAAgH,eAAQ,EAAAwB,QAAe,CAAAC,OAAA;MACxC,OAAAxD,IAAA,IAAAA,IAAA,WAAAA,IAAA;IACA,SAAO/E,MAAG,EAAI;MAChB,OAAQ;IACN;EAAO,EACT;EACF,IAAAQ,qBAAA,YAAAgI,uBAAAC,aAAA;IAEA,IAAK,CAAAJ,kBAAc,SAAAvB,eAAA;IAQjB;MACE,IAAAjH,GAAA,OAAYC,GAAA,CAAAS,OAAA;MACZ,KAAAqG,YAAM,IAAA6B,aAAA;QACJ5I,GAAA,CAAA6I,QAAM,GAAS,IAAA5I,GAAA,CAAA2I,aAAqB,EAAAC,QAAS;MAC7C;MACF,UAAA7I,GAAA,CAAAE,MAAA,GAAAsI,kBAAA;IACF,CAAC,QAAArI,MAAA;MAsBD,OAAM;IACJ;EACA;EACA,KAAA4G,YAAO;IACT+B,MAAA,CAAAC,cAAA,CAAAnB,sBAAA;MACAoB,UAAI;MACFnJ,IAAA;QACE,IAAAK,MAAA,GAAYhB,oBAAA,CAAA+B,QAAA;QACZ,OAAMf,MAAA,MAAAA,MAAA,GAAAyH,QAAA;MACJ;IACA;IAA+E,IACjFsB,kBAAA,YAAAC,oBAAA;MACF,IAAChJ,MAAA,GAAAhB,oBAAA,CAAA+B,QAAA;MAQD,KAAAf,MAAO,KAAAsI,kBAAe,cAAwB;MAAU,OACtD7H,qBAAY,CAAAT,MAAA;IAAA;IAEV,IAAAsI,kBAAa;MACbM,MAAA,CAAAC,cAAiB,CAAAnB,sBAAe,oBAAkB;QACpDoB,UAAA;QACDnJ,IAAA;UACH,IAAAsJ,IAAA,GAAAF,kBAAA;UACF,OAAAE,IAAA,MAAAA,IAAA,WAAAhC,aAAA;QAIM;MACJ;MACD2B,MAAA,CAAAC,cAAA,CAAAnB,sBAAA;QAEKoB,UAAA;QACJnJ,GAAOA,CAAA;UACP,IAAUsJ,IAAA,GAAAF,kBAAA;UACV,OAAAE,IAAc,MAAAA,IAAA,WAAAhC,aAAA;QACd;MACA;IACA;EACF;EAEA,IAAAiC,WAAM,GAAiB7K,YAAA;IACrB8K,MAAI,GACJzB,sBAAA;EACA,EACA;EACF,IAAA0B,iBAAA,GAAAlJ,uBAAA;IAIAE,KAAM,EAAA6G,aAAW;IAEjB5G,QAAO,EAAA8G,gBAAW;IAChB7G,YAAA,EAAA+G,oBAAA;IAAA9G,MAAA;IAAAC,OAAA;IAAAC;EAAA;EAAA,IAAA4I,OAAA,IAMA,IAAA9B,UAAS,IACTA,UAAI,CACJ,QACA2B,WAAA,EAA0CE,iBACxC,MACA,CAAAlD,gBAAA,GAAA/F,OAAA,CAAAkJ,OAAA,cAAAnD,gBAAA,cAAAA,gBAAA;EAAA,IAEAoD,QAAI,GAAQ,CAAAnD,iBAAiB,GAAAhG,OAAQ,CAAAmJ,QAAS,MAAI,IAAQ,IAAInD,iBACzD,cAAAA,iBAAgC,GAAAM,OAAU,CAAAC,GAC1C,CAAA6C,YAAA;EAAA,OACL3L,UAAA;IAAA6J,QAAA;IAAA;IAAA;IAAA;IAAA;IAAA;IAOF+B,OAAA,EAAAhJ,OAAA;IACA,IAAA8I,QAAS;MACPA;IAAa,IACX;IAAS9F,MACT,EAAArD,OAAQ,CAAAqD,MAAQ,IAAAiD,OAAA,CAAAC,GAAiB,CAAA+C,MAAI,IAAK;IAAKC,cACrC,EAAAvJ,OAAA,CAAAuJ,cAAA,KAAAlJ,OACV,EACFuG,eAAA;IACF;IACA,IAAAN,OAAS,CAAAC,GAAA,CAAAE,QAAA,KAAApG,OAAA,CAAAmJ,QAAA,KAAAlD,OAAA,CAAAC,GAAA,CAAAE,QAAA,OACP,oBAAoBH,OAAA,CAAAC,GAAA,CAAAE,QAAA,GACpB,QACF;IACA;IACD;IACH;IAmBO;IAKL;IACE,IAAAC,YAAe,SACf,QAAO,EACT,GAAAvH,qBAAA,CAAAsK,GAAA,WAAAvK,IAAA;MACO,OAAO,UAASA,IAAM;IAC/B,GASO,EAEL;IACEoE,OAAO;MACToG,WAAA;QAGAC,OAAA,EAAe;QACbC,MAAM,GAAA3D,sBAAyB,GAAAjG,OAAa,CAAA6J,aAAa,MAAQ,IAAC,IAAA5D,sBAAA,cAAAA,sBAAA;QAC9D6D,QAAC,EAAS;QACZC,YAAU;MACZ;IACA;IACFhG,OAAA;MAEAiG,kBAAqB,UAAW;MAClCC,kBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
const FAILED_TO_GET_ACCESS_TOKEN = "FAILED_TO_GET_ACCESS_TOKEN";
|
|
2
|
+
const TOKEN_REFRESH_UNAVAILABLE = "TOKEN_REFRESH_UNAVAILABLE";
|
|
3
|
+
const ACCESS_TOKEN_RETRY_DELAYS_MS = [0, 400, 1e3];
|
|
4
|
+
function classifyAccessTokenResponse(status, body) {
|
|
5
|
+
if (status === 401 || status === 403) return "signed-out";
|
|
6
|
+
if (status === 400 && body?.code === FAILED_TO_GET_ACCESS_TOKEN) return "signed-out";
|
|
7
|
+
return "transient";
|
|
8
|
+
}
|
|
9
|
+
async function retryWhileTransient(attempt, opts) {
|
|
10
|
+
const delays = opts?.delaysMs ?? ACCESS_TOKEN_RETRY_DELAYS_MS;
|
|
11
|
+
const sleep = opts?.sleep ?? (ms => new Promise(resolve => setTimeout(resolve, ms)));
|
|
12
|
+
let last = {
|
|
13
|
+
ok: false,
|
|
14
|
+
kind: "transient"
|
|
15
|
+
};
|
|
16
|
+
for (let i = 0; i < delays.length; i++) {
|
|
17
|
+
const wait = delays[i];
|
|
18
|
+
if (wait) await sleep(wait);
|
|
19
|
+
last = await attempt();
|
|
20
|
+
if (last.ok) return last;
|
|
21
|
+
if (last.kind === "signed-out") return last;
|
|
22
|
+
}
|
|
23
|
+
return last;
|
|
24
|
+
}
|
|
25
|
+
function watchDocumentVisible(revalidate) {
|
|
26
|
+
if (typeof document === "undefined" || typeof window === "undefined") {
|
|
27
|
+
return () => {};
|
|
28
|
+
}
|
|
29
|
+
const onVisible = () => {
|
|
30
|
+
if (document.visibilityState === "visible") revalidate();
|
|
31
|
+
};
|
|
32
|
+
document.addEventListener("visibilitychange", onVisible);
|
|
33
|
+
window.addEventListener("focus", onVisible);
|
|
34
|
+
return () => {
|
|
35
|
+
document.removeEventListener("visibilitychange", onVisible);
|
|
36
|
+
window.removeEventListener("focus", onVisible);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export { ACCESS_TOKEN_RETRY_DELAYS_MS, FAILED_TO_GET_ACCESS_TOKEN, TOKEN_REFRESH_UNAVAILABLE, classifyAccessTokenResponse, retryWhileTransient, watchDocumentVisible };
|
|
40
|
+
//# sourceMappingURL=accessTokenRefresh.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["FAILED_TO_GET_ACCESS_TOKEN","TOKEN_REFRESH_UNAVAILABLE","ACCESS_TOKEN_RETRY_DELAYS_MS","classifyAccessTokenResponse","status","body","code","retryWhileTransient","attempt","opts","delays","delaysMs","sleep","ms","Promise","resolve","setTimeout","last","ok","kind","i","length","wait","watchDocumentVisible","revalidate","document","window","onVisible","visibilityState","addEventListener","removeEventListener"],"sources":["../../src/accessTokenRefresh.ts"],"sourcesContent":[null],"mappings":"AAeO,MAAMA,0BAAA,GAA6B;AACnC,MAAMC,yBAAA,GAA4B;AAKlC,MAAMC,4BAAA,GAA+B,CAAC,GAAG,KAAK,GAAI;AAElD,SAASC,4BACdC,MAAA,EACAC,IAAA,EACwB;EACxB,IAAID,MAAA,KAAW,OAAOA,MAAA,KAAW,KAAK,OAAO;EAC7C,IAAIA,MAAA,KAAW,OAAOC,IAAA,EAAMC,IAAA,KAASN,0BAAA,EAA4B,OAAO;EACxE,OAAO;AACT;AAWA,eAAsBO,oBACpBC,OAAA,EACAC,IAAA,EAIgC;EAChC,MAAMC,MAAA,GAASD,IAAA,EAAME,QAAA,IAAYT,4BAAA;EACjC,MAAMU,KAAA,GAAQH,IAAA,EAAMG,KAAA,KAAWC,EAAA,IAAe,IAAIC,OAAA,CAASC,OAAA,IAAYC,UAAA,CAAWD,OAAA,EAASF,EAAE,CAAC;EAC9F,IAAII,IAAA,GAA8B;IAAEC,EAAA,EAAI;IAAOC,IAAA,EAAM;EAAY;EACjE,SAASC,CAAA,GAAI,GAAGA,CAAA,GAAIV,MAAA,CAAOW,MAAA,EAAQD,CAAA,IAAK;IACtC,MAAME,IAAA,GAAOZ,MAAA,CAAOU,CAAC;IACrB,IAAIE,IAAA,EAAM,MAAMV,KAAA,CAAMU,IAAI;IAC1BL,IAAA,GAAO,MAAMT,OAAA,CAAQ;IACrB,IAAIS,IAAA,CAAKC,EAAA,EAAI,OAAOD,IAAA;IACpB,IAAIA,IAAA,CAAKE,IAAA,KAAS,cAAc,OAAOF,IAAA;EACzC;EACA,OAAOA,IAAA;AACT;AAOO,SAASM,qBAAqBC,UAAA,EAAoC;EACvE,IAAI,OAAOC,QAAA,KAAa,eAAe,OAAOC,MAAA,KAAW,aAAa;IACpE,OAAO,MAAM,CAAC;EAChB;EACA,MAAMC,SAAA,GAAYA,CAAA,KAAM;IACtB,IAAIF,QAAA,CAASG,eAAA,KAAoB,WAAWJ,UAAA,CAAW;EACzD;EACAC,QAAA,CAASI,gBAAA,CAAiB,oBAAoBF,SAAS;EACvDD,MAAA,CAAOG,gBAAA,CAAiB,SAASF,SAAS;EAC1C,OAAO,MAAM;IACXF,QAAA,CAASK,mBAAA,CAAoB,oBAAoBH,SAAS;IAC1DD,MAAA,CAAOI,mBAAA,CAAoB,SAASH,SAAS;EAC/C;AACF","ignoreList":[]}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
16
|
+
get: () => from[key],
|
|
17
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
23
|
+
value: true
|
|
24
|
+
}), mod);
|
|
25
|
+
var accessTokenRefresh_exports = {};
|
|
26
|
+
__export(accessTokenRefresh_exports, {
|
|
27
|
+
ACCESS_TOKEN_RETRY_DELAYS_MS: () => ACCESS_TOKEN_RETRY_DELAYS_MS,
|
|
28
|
+
FAILED_TO_GET_ACCESS_TOKEN: () => FAILED_TO_GET_ACCESS_TOKEN,
|
|
29
|
+
TOKEN_REFRESH_UNAVAILABLE: () => TOKEN_REFRESH_UNAVAILABLE,
|
|
30
|
+
classifyAccessTokenResponse: () => classifyAccessTokenResponse,
|
|
31
|
+
retryWhileTransient: () => retryWhileTransient,
|
|
32
|
+
watchDocumentVisible: () => watchDocumentVisible
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(accessTokenRefresh_exports);
|
|
35
|
+
var FAILED_TO_GET_ACCESS_TOKEN = "FAILED_TO_GET_ACCESS_TOKEN";
|
|
36
|
+
var TOKEN_REFRESH_UNAVAILABLE = "TOKEN_REFRESH_UNAVAILABLE";
|
|
37
|
+
var ACCESS_TOKEN_RETRY_DELAYS_MS = [0, 400, 1e3];
|
|
38
|
+
function classifyAccessTokenResponse(status, body) {
|
|
39
|
+
if (status === 401 || status === 403) return "signed-out";
|
|
40
|
+
if (status === 400 && (body === null || body === void 0 ? void 0 : body.code) === FAILED_TO_GET_ACCESS_TOKEN) return "signed-out";
|
|
41
|
+
return "transient";
|
|
42
|
+
}
|
|
43
|
+
async function retryWhileTransient(attempt, opts) {
|
|
44
|
+
var _ref, _ref1;
|
|
45
|
+
var delays = (_ref = opts === null || opts === void 0 ? void 0 : opts.delaysMs) !== null && _ref !== void 0 ? _ref : ACCESS_TOKEN_RETRY_DELAYS_MS;
|
|
46
|
+
var sleep = (_ref1 = opts === null || opts === void 0 ? void 0 : opts.sleep) !== null && _ref1 !== void 0 ? _ref1 : function (ms) {
|
|
47
|
+
return new Promise(function (resolve) {
|
|
48
|
+
return setTimeout(resolve, ms);
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
var last = {
|
|
52
|
+
ok: false,
|
|
53
|
+
kind: "transient"
|
|
54
|
+
};
|
|
55
|
+
for (var i = 0; i < delays.length; i++) {
|
|
56
|
+
var wait = delays[i];
|
|
57
|
+
if (wait) await sleep(wait);
|
|
58
|
+
last = await attempt();
|
|
59
|
+
if (last.ok) return last;
|
|
60
|
+
if (last.kind === "signed-out") return last;
|
|
61
|
+
}
|
|
62
|
+
return last;
|
|
63
|
+
}
|
|
64
|
+
function watchDocumentVisible(revalidate) {
|
|
65
|
+
if (typeof document === "undefined" || typeof window === "undefined") {
|
|
66
|
+
return function () {};
|
|
67
|
+
}
|
|
68
|
+
var onVisible = function onVisible2() {
|
|
69
|
+
if (document.visibilityState === "visible") revalidate();
|
|
70
|
+
};
|
|
71
|
+
document.addEventListener("visibilitychange", onVisible);
|
|
72
|
+
window.addEventListener("focus", onVisible);
|
|
73
|
+
return function () {
|
|
74
|
+
document.removeEventListener("visibilitychange", onVisible);
|
|
75
|
+
window.removeEventListener("focus", onVisible);
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=accessTokenRefresh.native.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["__defProp","Object","defineProperty","__getOwnPropDesc","getOwnPropertyDescriptor","__getOwnPropNames","getOwnPropertyNames","__hasOwnProp","prototype","hasOwnProperty","__export","target","all","name","get","enumerable","__copyProps","to","from","except","desc","key","call","__toCommonJS","mod","value","accessTokenRefresh_exports","ACCESS_TOKEN_RETRY_DELAYS_MS","FAILED_TO_GET_ACCESS_TOKEN","TOKEN_REFRESH_UNAVAILABLE","classifyAccessTokenResponse","retryWhileTransient","watchDocumentVisible","module","exports","status","body"],"sources":["../../src/accessTokenRefresh.ts"],"sourcesContent":[null],"mappings":"AAeO,YAAM;;AACN,IAAAA,SAAM,GAAAC,MAAA,CAAAC,cAA4B;AAKlC,IAAAC,gBAAM,GAAAF,MAAA,CAAAG,wBAA4C;AAElD,IAAAC,iBAAS,GAAAJ,MAAA,CAAAK,mBAEd;AAEA,IAAAC,YAAI,GAAWN,MAAO,CAAAO,SAAW,CAAAC,cAAY;AAC7C,IAAAC,QAAI,GAAAA,CAAAC,MAAW,EAAOC,GAAA,KAAM;EAC5B,SAAOC,IAAA,IAAAD,GAAA,EACTZ,SAAA,CAAAW,MAAA,EAAAE,IAAA;IAAAC,GAAA,EAAAF,GAAA,CAAAC,IAAA;IAAAE,UAAA;EAAA;AAWA;AAOE,IAAAC,WAAM,GAASA,CAAAC,EAAA,EAAMC,IAAA,EAAAC,MAAY,EAAAC,IAAA;EACjC,IAAAF,IAAM,WAAQA,IAAM,aAAW,IAAe,OAAIA,IAAS,eAAY;IACvE,KAAI,IAA8BG,GAAE,IAAIhB,iBAAa,CAAAa,IAAA,GACrD,KAASX,YAAW,CAAAe,IAAA,CAAOL,EAAA,EAAAI,GAAA,CAAQ,IAAAA,GAAK,KAAAF,MAAA,EACtCnB,SAAa,CAAAiB,EAAA,EAAAI,GAAQ;MAAAP,GAAA,EAAAA,CAAA,KAAAI,IAAA,CAAAG,GAAA;MAAAN,UAAA,IAAAK,IAAA,GAAAjB,gBAAA,CAAAe,IAAA,EAAAG,GAAA,MAAAD,IAAA,CAAAL;IAAA;EACrB;EACA,OAAAE,EAAO;AACP;AACA,IAAAM,YAAS,GAAAC,GAAS,IAAAR,WAAc,CAAAhB,SAAO;EAAAyB,KAAA;AAAA,IAAAD,GAAA;AAAA,IACzCE,0BAAA;AACAhB,QAAA,CAAOgB,0BAAA;EACTC,4BAAA,EAAAA,CAAA,KAAAA,4BAAA;EAOOC,0BAAS,EAAqBA,CAAA,KAAAA,0BAAoC;EACvEC,yBAAwB,EAAAA,CAAA,KAAAA,yBAAiC;EACvDC,2BAAa,EAAAA,CAAA,KAAAA,2BAAA;EAAAC,mBAAC,EAAAA,CAAA,KAAAA,mBAAA;EAChBC,oBAAA,EAAAA,CAAA,KAAAA;AACA;AACEC,MAAA,CAAAC,OAAI,GAASX,YAAA,CAAAG,0BAA+B;AAAW,IACzDE,0BAAA;AACA,IAAAC,yBAA0B,8BAA6B;AACvD,IAAAF,4BAAwB,GAAS,CACjC,GACE,KACA,IAA6C;AAEjD,SAAAG,4BAAAK,MAAA,EAAAC,IAAA","ignoreList":[]}
|