@getstrata/core 2.2.33 → 2.2.34
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/CHANGELOG.md +6 -0
- package/dist/core/auth/accountState.d.ts +9 -0
- package/dist/core/auth/accountStateMigration.d.ts +7 -0
- package/dist/core/auth/authContext.d.ts +3 -0
- package/dist/core/auth/guard.d.ts +1 -0
- package/dist/core/auth/jwt.d.ts +1 -0
- package/dist/core/auth/oneTimeToken.d.ts +2 -0
- package/dist/core/auth/passwordConfirmCookie.d.ts +2 -2
- package/dist/core/auth/passwordLogin.d.ts +2 -2
- package/dist/core/auth/pendingMfaCookie.d.ts +9 -0
- package/dist/core/auth/sessionCookie.d.ts +3 -0
- package/dist/core/contracts/authUserDirectory.d.ts +5 -0
- package/dist/entries/auth/accountState.js +18 -0
- package/dist/entries/auth/accountStateMigration.js +923 -0
- package/dist/entries/auth/basicAuthGuard.js +19 -1
- package/dist/entries/auth/jwtGuard.js +71 -23
- package/dist/entries/auth/oneTimeToken.js +16 -12
- package/dist/entries/auth/passwordConfirmCookie.js +63 -22
- package/dist/entries/auth/passwordLogin.js +15 -0
- package/dist/entries/auth/pendingMfaCookie.js +100 -0
- package/dist/entries/auth/sessionCookie.js +49 -21
- package/dist/entries/auth/sessionGuard.js +66 -22
- package/dist/entries/http/cookies.js +5 -1
- package/dist/entries/http/csrfMiddleware.js +5 -1
- package/dist/entries/http/csrfToken.js +5 -1
- package/dist/entries/http/requirePasswordConfirmMiddleware.js +1 -1
- package/dist/index.js +72 -38
- package/package.json +17 -2
|
@@ -147,9 +147,54 @@ function resolveAbilitiesForRole(role) {
|
|
|
147
147
|
return [...MEMBER_ABILITIES];
|
|
148
148
|
}
|
|
149
149
|
|
|
150
|
+
// ../../src/core/auth/accountState.ts
|
|
151
|
+
function isAccountActive(record) {
|
|
152
|
+
return record.is_active === undefined || record.is_active === true;
|
|
153
|
+
}
|
|
154
|
+
function isAuthUserActive(user) {
|
|
155
|
+
return user.isActive === undefined || user.isActive === true;
|
|
156
|
+
}
|
|
157
|
+
function matchesAuthVersion(issued, current) {
|
|
158
|
+
if (current === undefined)
|
|
159
|
+
return true;
|
|
160
|
+
return Number.isSafeInteger(current) && current >= 0 && typeof issued === "number" && Number.isSafeInteger(issued) && issued >= 0 && issued === current;
|
|
161
|
+
}
|
|
162
|
+
|
|
150
163
|
// ../../src/core/auth/sessionCookie.ts
|
|
151
164
|
import { createHmac, timingSafeEqual } from "crypto";
|
|
152
165
|
|
|
166
|
+
// ../../src/core/http/cookies.ts
|
|
167
|
+
function readRequestCookie(request, name) {
|
|
168
|
+
const cookies = request.cookies;
|
|
169
|
+
if (cookies && typeof cookies.get === "function") {
|
|
170
|
+
const value = cookies.get(name);
|
|
171
|
+
if (value) {
|
|
172
|
+
return value;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const header = request.headers.get("cookie");
|
|
176
|
+
if (!header) {
|
|
177
|
+
return null;
|
|
178
|
+
}
|
|
179
|
+
for (const part of header.split(";")) {
|
|
180
|
+
const idx = part.indexOf("=");
|
|
181
|
+
if (idx === -1)
|
|
182
|
+
continue;
|
|
183
|
+
const cookieName = part.slice(0, idx).trim();
|
|
184
|
+
if (cookieName !== name)
|
|
185
|
+
continue;
|
|
186
|
+
try {
|
|
187
|
+
return decodeURIComponent(part.slice(idx + 1).trim());
|
|
188
|
+
} catch {
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
function readBunRequestCookie(request, name) {
|
|
195
|
+
return request.cookies.get(name) ?? readRequestCookie(request, name);
|
|
196
|
+
}
|
|
197
|
+
|
|
153
198
|
// ../../src/core/runtime/appEnv.ts
|
|
154
199
|
var NON_PRODUCTION_APP_ENVS = new Set(["local", "development", "dev", "test", "testing", "ci"]);
|
|
155
200
|
function normalizeEnvValue(value) {
|
|
@@ -256,25 +301,12 @@ function sessionRememberTtlSeconds() {
|
|
|
256
301
|
function resolveSessionSecret() {
|
|
257
302
|
return requireConfiguredSecret(["SESSION_SECRET"], "session-secret");
|
|
258
303
|
}
|
|
259
|
-
function signSession(userId, issuedAt, ttlSeconds) {
|
|
260
|
-
const payload = ttlSeconds === undefined ? `${userId}.${issuedAt}` : `${userId}.${issuedAt}.${ttlSeconds}`;
|
|
304
|
+
function signSession(userId, issuedAt, ttlSeconds, authVersion) {
|
|
305
|
+
const payload = authVersion !== undefined ? `v2.${userId}.${issuedAt}.${ttlSeconds}.${authVersion}` : ttlSeconds === undefined ? `${userId}.${issuedAt}` : `${userId}.${issuedAt}.${ttlSeconds}`;
|
|
261
306
|
const signature = createHmac("sha256", resolveSessionSecret()).update(payload).digest("hex");
|
|
262
307
|
return `${payload}.${signature}`;
|
|
263
308
|
}
|
|
264
|
-
function
|
|
265
|
-
const cookieHeader = request.headers.get("cookie");
|
|
266
|
-
if (!cookieHeader) {
|
|
267
|
-
return null;
|
|
268
|
-
}
|
|
269
|
-
for (const part of cookieHeader.split(";")) {
|
|
270
|
-
const [name, ...rest] = part.trim().split("=");
|
|
271
|
-
if (name === cookieName) {
|
|
272
|
-
return decodeURIComponent(rest.join("="));
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return null;
|
|
276
|
-
}
|
|
277
|
-
function readSignedSession(userIdRaw, issuedAtRaw, cookieSignature, ttlSeconds, remember) {
|
|
309
|
+
function readSignedSession(userIdRaw, issuedAtRaw, cookieSignature, ttlSeconds, remember, authVersion) {
|
|
278
310
|
const userId = Number.parseInt(userIdRaw, 10);
|
|
279
311
|
const issuedAt = Number.parseInt(issuedAtRaw, 10);
|
|
280
312
|
if (!Number.isInteger(userId) || userId <= 0 || !Number.isFinite(issuedAt)) {
|
|
@@ -286,7 +318,7 @@ function readSignedSession(userIdRaw, issuedAtRaw, cookieSignature, ttlSeconds,
|
|
|
286
318
|
if (Date.now() - issuedAt > ttlSeconds * 1000) {
|
|
287
319
|
return null;
|
|
288
320
|
}
|
|
289
|
-
const expectedSignature = (remember ? signSession(userId, issuedAt, ttlSeconds) : signSession(userId, issuedAt)).split(".").pop();
|
|
321
|
+
const expectedSignature = (authVersion !== undefined ? signSession(userId, issuedAt, ttlSeconds, authVersion) : remember ? signSession(userId, issuedAt, ttlSeconds) : signSession(userId, issuedAt)).split(".").pop();
|
|
290
322
|
if (!expectedSignature || !cookieSignature) {
|
|
291
323
|
return null;
|
|
292
324
|
}
|
|
@@ -298,14 +330,20 @@ function readSignedSession(userIdRaw, issuedAtRaw, cookieSignature, ttlSeconds,
|
|
|
298
330
|
if (!timingSafeEqual(expectedBuffer, actualBuffer)) {
|
|
299
331
|
return null;
|
|
300
332
|
}
|
|
301
|
-
return { userId, issuedAt };
|
|
333
|
+
return { userId, issuedAt, ...authVersion !== undefined ? { authVersion } : {} };
|
|
302
334
|
}
|
|
303
335
|
function readSession(request) {
|
|
304
|
-
const cookieValue =
|
|
336
|
+
const cookieValue = readRequestCookie(request, sessionCookieName());
|
|
305
337
|
if (!cookieValue) {
|
|
306
338
|
return null;
|
|
307
339
|
}
|
|
308
340
|
const parts = cookieValue.split(".");
|
|
341
|
+
if (parts.length === 6 && parts[0] === "v2") {
|
|
342
|
+
const fields = parts.slice(1, 5);
|
|
343
|
+
if (fields.some((value) => !/^(0|[1-9][0-9]*)$/.test(value) || !Number.isSafeInteger(Number(value))))
|
|
344
|
+
return null;
|
|
345
|
+
return readSignedSession(String(parts[1]), String(parts[2]), parts[5], Number(parts[3]), true, Number(parts[4]));
|
|
346
|
+
}
|
|
309
347
|
if (parts.length === 4) {
|
|
310
348
|
const [userIdRaw, issuedAtRaw, ttlRaw, cookieSignature] = parts;
|
|
311
349
|
return readSignedSession(String(userIdRaw), String(issuedAtRaw), cookieSignature, Number.parseInt(String(ttlRaw), 10), true);
|
|
@@ -330,15 +368,18 @@ function isSessionInvalidated(issuedAt, validAfter) {
|
|
|
330
368
|
return issuedAt < timestamp;
|
|
331
369
|
}
|
|
332
370
|
function createSessionCookieDetails(userId, options = {}) {
|
|
371
|
+
if (options.authVersion !== undefined && (!Number.isSafeInteger(options.authVersion) || options.authVersion < 0))
|
|
372
|
+
throw new RangeError("authVersion must be a non-negative safe integer.");
|
|
333
373
|
const issuedAt = Date.now();
|
|
334
374
|
const ttlSeconds = options.remember ? sessionRememberTtlSeconds() : sessionTtlSeconds();
|
|
335
|
-
const value = options.remember ? signSession(userId, issuedAt, ttlSeconds) : signSession(userId, issuedAt);
|
|
375
|
+
const value = options.authVersion !== undefined ? signSession(userId, issuedAt, ttlSeconds, options.authVersion) : options.remember ? signSession(userId, issuedAt, ttlSeconds) : signSession(userId, issuedAt);
|
|
336
376
|
const secure = isProductionEnv() ? "; Secure" : "";
|
|
337
377
|
return {
|
|
338
378
|
header: `${sessionCookieName()}=${encodeURIComponent(value)}; Path=/; HttpOnly; SameSite=Lax; Max-Age=${ttlSeconds}${secure}`,
|
|
339
379
|
userId,
|
|
340
380
|
issuedAt,
|
|
341
|
-
ttlSeconds
|
|
381
|
+
ttlSeconds,
|
|
382
|
+
...options.authVersion !== undefined ? { authVersion: options.authVersion } : {}
|
|
342
383
|
};
|
|
343
384
|
}
|
|
344
385
|
function createSessionCookie(userId, options = {}) {
|
|
@@ -366,7 +407,9 @@ class SessionGuard {
|
|
|
366
407
|
}
|
|
367
408
|
try {
|
|
368
409
|
const user = await tokenService.findByIdOrThrow(session.userId);
|
|
369
|
-
if (
|
|
410
|
+
if (!isAccountActive(user) || !matchesAuthVersion(session.authVersion, user.auth_version))
|
|
411
|
+
return null;
|
|
412
|
+
if (user.auth_version === undefined && isSessionInvalidated(session.issuedAt, user.session_valid_after)) {
|
|
370
413
|
return null;
|
|
371
414
|
}
|
|
372
415
|
if (typeof tokenService.hasActiveBrowserSession === "function") {
|
|
@@ -378,6 +421,7 @@ class SessionGuard {
|
|
|
378
421
|
return {
|
|
379
422
|
id: user.id,
|
|
380
423
|
role: user.role,
|
|
424
|
+
...user.auth_version !== undefined ? { authVersion: user.auth_version } : {},
|
|
381
425
|
abilities: resolveAbilitiesForRole(user.role),
|
|
382
426
|
emailVerifiedAt: user.email_verified_at ?? null
|
|
383
427
|
};
|
|
@@ -19,7 +19,11 @@ function readRequestCookie(request, name) {
|
|
|
19
19
|
const cookieName = part.slice(0, idx).trim();
|
|
20
20
|
if (cookieName !== name)
|
|
21
21
|
continue;
|
|
22
|
-
|
|
22
|
+
try {
|
|
23
|
+
return decodeURIComponent(part.slice(idx + 1).trim());
|
|
24
|
+
} catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
23
27
|
}
|
|
24
28
|
return null;
|
|
25
29
|
}
|
|
@@ -139,7 +139,11 @@ function readRequestCookie(request, name) {
|
|
|
139
139
|
const cookieName = part.slice(0, idx).trim();
|
|
140
140
|
if (cookieName !== name)
|
|
141
141
|
continue;
|
|
142
|
-
|
|
142
|
+
try {
|
|
143
|
+
return decodeURIComponent(part.slice(idx + 1).trim());
|
|
144
|
+
} catch {
|
|
145
|
+
return null;
|
|
146
|
+
}
|
|
143
147
|
}
|
|
144
148
|
return null;
|
|
145
149
|
}
|
|
@@ -135,7 +135,11 @@ function readRequestCookie(request, name) {
|
|
|
135
135
|
const cookieName = part.slice(0, idx).trim();
|
|
136
136
|
if (cookieName !== name)
|
|
137
137
|
continue;
|
|
138
|
-
|
|
138
|
+
try {
|
|
139
|
+
return decodeURIComponent(part.slice(idx + 1).trim());
|
|
140
|
+
} catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
139
143
|
}
|
|
140
144
|
return null;
|
|
141
145
|
}
|
|
@@ -106,7 +106,7 @@ function createRequirePasswordConfirmMiddleware() {
|
|
|
106
106
|
return Response.redirect("/login", 302);
|
|
107
107
|
}
|
|
108
108
|
const userId = resolveUserId(user);
|
|
109
|
-
if (hasFreshPasswordConfirmation(request, userId)) {
|
|
109
|
+
if (hasFreshPasswordConfirmation(request, userId, user.authVersion)) {
|
|
110
110
|
return await next();
|
|
111
111
|
}
|
|
112
112
|
if (requestPrefersJson(request)) {
|
package/dist/index.js
CHANGED
|
@@ -1348,6 +1348,19 @@ function readBasicCredentials(request) {
|
|
|
1348
1348
|
// ../../src/core/auth/basicAuthGuard.ts
|
|
1349
1349
|
init_databaseTenantContext();
|
|
1350
1350
|
|
|
1351
|
+
// ../../src/core/auth/accountState.ts
|
|
1352
|
+
function isAccountActive(record) {
|
|
1353
|
+
return record.is_active === undefined || record.is_active === true;
|
|
1354
|
+
}
|
|
1355
|
+
function isAuthUserActive(user) {
|
|
1356
|
+
return user.isActive === undefined || user.isActive === true;
|
|
1357
|
+
}
|
|
1358
|
+
function matchesAuthVersion(issued, current) {
|
|
1359
|
+
if (current === undefined)
|
|
1360
|
+
return true;
|
|
1361
|
+
return Number.isSafeInteger(current) && current >= 0 && typeof issued === "number" && Number.isSafeInteger(issued) && issued >= 0 && issued === current;
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1351
1364
|
// ../../src/core/auth/password.ts
|
|
1352
1365
|
async function hashPassword(password) {
|
|
1353
1366
|
return await Bun.password.hash(password, {
|
|
@@ -1741,6 +1754,8 @@ function parseRecoveryHashes(raw) {
|
|
|
1741
1754
|
}
|
|
1742
1755
|
}
|
|
1743
1756
|
function completePasswordLogin(user, options = {}) {
|
|
1757
|
+
if (!isAccountActive(user))
|
|
1758
|
+
return { ok: false, error: "account_inactive" };
|
|
1744
1759
|
if (!user.mfa_enabled) {
|
|
1745
1760
|
return { ok: true };
|
|
1746
1761
|
}
|
|
@@ -1804,6 +1819,8 @@ class BasicAuthGuard {
|
|
|
1804
1819
|
return null;
|
|
1805
1820
|
}
|
|
1806
1821
|
const record = typeof directory.findByEmail === "function" ? await directory.findByEmail(credentials.username) : null;
|
|
1822
|
+
if (record && !isAccountActive(record))
|
|
1823
|
+
return null;
|
|
1807
1824
|
if (record?.password) {
|
|
1808
1825
|
if (!await verifyPassword(credentials.password, record.password)) {
|
|
1809
1826
|
return null;
|
|
@@ -1821,12 +1838,13 @@ class BasicAuthGuard {
|
|
|
1821
1838
|
return {
|
|
1822
1839
|
id: record.id,
|
|
1823
1840
|
role: record.role,
|
|
1841
|
+
...record.auth_version !== undefined ? { authVersion: record.auth_version } : {},
|
|
1824
1842
|
emailVerifiedAt: record.email_verified_at ?? null
|
|
1825
1843
|
};
|
|
1826
1844
|
}
|
|
1827
1845
|
if (typeof directory.verifyCredentials === "function") {
|
|
1828
1846
|
const user = await directory.verifyCredentials(credentials.username, credentials.password);
|
|
1829
|
-
if (!user) {
|
|
1847
|
+
if (!user || !isAuthUserActive(user)) {
|
|
1830
1848
|
return null;
|
|
1831
1849
|
}
|
|
1832
1850
|
let record = typeof directory.findByEmail === "function" ? await directory.findByEmail(credentials.username) : null;
|
|
@@ -1959,6 +1977,38 @@ function verifyJwt(token, secret) {
|
|
|
1959
1977
|
return payload;
|
|
1960
1978
|
}
|
|
1961
1979
|
|
|
1980
|
+
// ../../src/core/http/cookies.ts
|
|
1981
|
+
function readRequestCookie(request, name) {
|
|
1982
|
+
const cookies = request.cookies;
|
|
1983
|
+
if (cookies && typeof cookies.get === "function") {
|
|
1984
|
+
const value = cookies.get(name);
|
|
1985
|
+
if (value) {
|
|
1986
|
+
return value;
|
|
1987
|
+
}
|
|
1988
|
+
}
|
|
1989
|
+
const header = request.headers.get("cookie");
|
|
1990
|
+
if (!header) {
|
|
1991
|
+
return null;
|
|
1992
|
+
}
|
|
1993
|
+
for (const part of header.split(";")) {
|
|
1994
|
+
const idx = part.indexOf("=");
|
|
1995
|
+
if (idx === -1)
|
|
1996
|
+
continue;
|
|
1997
|
+
const cookieName = part.slice(0, idx).trim();
|
|
1998
|
+
if (cookieName !== name)
|
|
1999
|
+
continue;
|
|
2000
|
+
try {
|
|
2001
|
+
return decodeURIComponent(part.slice(idx + 1).trim());
|
|
2002
|
+
} catch {
|
|
2003
|
+
return null;
|
|
2004
|
+
}
|
|
2005
|
+
}
|
|
2006
|
+
return null;
|
|
2007
|
+
}
|
|
2008
|
+
function readBunRequestCookie(request, name) {
|
|
2009
|
+
return request.cookies.get(name) ?? readRequestCookie(request, name);
|
|
2010
|
+
}
|
|
2011
|
+
|
|
1962
2012
|
// ../../src/core/auth/sessionCookie.ts
|
|
1963
2013
|
var SESSION_COOKIE = appCookieName("session");
|
|
1964
2014
|
var SESSION_TTL_SECONDS = 60 * 60 * 24 * 7;
|
|
@@ -2025,10 +2075,15 @@ class JwtGuard {
|
|
|
2025
2075
|
} catch {
|
|
2026
2076
|
return null;
|
|
2027
2077
|
}
|
|
2028
|
-
if (
|
|
2078
|
+
if (!isAccountActive(record) || !matchesAuthVersion(payload.authVersion, record.auth_version))
|
|
2079
|
+
return null;
|
|
2080
|
+
if (record.auth_version === undefined && isSessionInvalidated(payload.iat * 1000, record.session_valid_after)) {
|
|
2029
2081
|
return null;
|
|
2030
2082
|
}
|
|
2031
|
-
return
|
|
2083
|
+
return {
|
|
2084
|
+
...authUserFromJwt(payload),
|
|
2085
|
+
...record.auth_version !== undefined ? { authVersion: record.auth_version } : {}
|
|
2086
|
+
};
|
|
2032
2087
|
}
|
|
2033
2088
|
}
|
|
2034
2089
|
|
|
@@ -2074,7 +2129,7 @@ class ApiTokenGuard {
|
|
|
2074
2129
|
if (!token || !timingSafeCompareString(token, this.options.token)) {
|
|
2075
2130
|
return null;
|
|
2076
2131
|
}
|
|
2077
|
-
return this.options.user;
|
|
2132
|
+
return isAuthUserActive(this.options.user) ? this.options.user : null;
|
|
2078
2133
|
}
|
|
2079
2134
|
}
|
|
2080
2135
|
|
|
@@ -2092,7 +2147,8 @@ class DatabaseTokenGuard {
|
|
|
2092
2147
|
if (!tokenService || typeof tokenService.resolveUserFromToken !== "function") {
|
|
2093
2148
|
return null;
|
|
2094
2149
|
}
|
|
2095
|
-
|
|
2150
|
+
const user = await tokenService.resolveUserFromToken(token);
|
|
2151
|
+
return user && isAuthUserActive(user) ? user : null;
|
|
2096
2152
|
}
|
|
2097
2153
|
}
|
|
2098
2154
|
|
|
@@ -2104,7 +2160,7 @@ class CompositeGuard {
|
|
|
2104
2160
|
async resolve(request) {
|
|
2105
2161
|
for (const guard of this.guards) {
|
|
2106
2162
|
const user = await Promise.resolve(guard.resolve(request));
|
|
2107
|
-
if (user) {
|
|
2163
|
+
if (user && isAuthUserActive(user)) {
|
|
2108
2164
|
return user;
|
|
2109
2165
|
}
|
|
2110
2166
|
}
|
|
@@ -2148,7 +2204,8 @@ class AuthManager {
|
|
|
2148
2204
|
}
|
|
2149
2205
|
async resolveWithSource(request) {
|
|
2150
2206
|
if (!request) {
|
|
2151
|
-
|
|
2207
|
+
const user = currentAuthUser();
|
|
2208
|
+
return { user: user && isAuthUserActive(user) ? user : null, credentialSource: null };
|
|
2152
2209
|
}
|
|
2153
2210
|
if (authorizationScheme(request) !== "basic") {
|
|
2154
2211
|
this.basicResolutions.delete(request);
|
|
@@ -2183,6 +2240,10 @@ class AuthManager {
|
|
|
2183
2240
|
}
|
|
2184
2241
|
return user;
|
|
2185
2242
|
}
|
|
2243
|
+
async resolveGuard(guard, request) {
|
|
2244
|
+
const user = await guard.resolve(request);
|
|
2245
|
+
return user && isAuthUserActive(user) ? user : null;
|
|
2246
|
+
}
|
|
2186
2247
|
async authenticateRequest(request) {
|
|
2187
2248
|
const scheme = authorizationScheme(request);
|
|
2188
2249
|
if (scheme === "bearer") {
|
|
@@ -2191,7 +2252,7 @@ class AuthManager {
|
|
|
2191
2252
|
return { user: fromNamed, credentialSource: "bearer" };
|
|
2192
2253
|
}
|
|
2193
2254
|
if (isBearerCapableGuard(this.guard)) {
|
|
2194
|
-
const fromDefault = await
|
|
2255
|
+
const fromDefault = await this.resolveGuard(this.guard, request);
|
|
2195
2256
|
return { user: fromDefault, credentialSource: fromDefault ? "bearer" : null };
|
|
2196
2257
|
}
|
|
2197
2258
|
return { user: null, credentialSource: null };
|
|
@@ -2202,7 +2263,7 @@ class AuthManager {
|
|
|
2202
2263
|
return { user: fromNamed, credentialSource: "basic" };
|
|
2203
2264
|
}
|
|
2204
2265
|
if (this.guard instanceof BasicAuthGuard) {
|
|
2205
|
-
const fromDefault = await this.guard
|
|
2266
|
+
const fromDefault = await this.resolveGuard(this.guard, request);
|
|
2206
2267
|
return { user: fromDefault, credentialSource: fromDefault ? "basic" : null };
|
|
2207
2268
|
}
|
|
2208
2269
|
return { user: null, credentialSource: null };
|
|
@@ -2211,7 +2272,7 @@ class AuthManager {
|
|
|
2211
2272
|
if (fromSession) {
|
|
2212
2273
|
return { user: fromSession, credentialSource: "session" };
|
|
2213
2274
|
}
|
|
2214
|
-
const fromDefault = await
|
|
2275
|
+
const fromDefault = await this.resolveGuard(this.guard, request);
|
|
2215
2276
|
if (!fromDefault) {
|
|
2216
2277
|
return { user: null, credentialSource: null };
|
|
2217
2278
|
}
|
|
@@ -2226,7 +2287,7 @@ class AuthManager {
|
|
|
2226
2287
|
continue;
|
|
2227
2288
|
}
|
|
2228
2289
|
seen.add(named);
|
|
2229
|
-
const user = await
|
|
2290
|
+
const user = await this.resolveGuard(named, request);
|
|
2230
2291
|
if (user) {
|
|
2231
2292
|
return user;
|
|
2232
2293
|
}
|
|
@@ -11743,33 +11804,6 @@ function resolveContentSecurityPolicy(response, options = {}) {
|
|
|
11743
11804
|
}
|
|
11744
11805
|
return resolveHtmlContentSecurityPolicy(options);
|
|
11745
11806
|
}
|
|
11746
|
-
// ../../src/core/http/cookies.ts
|
|
11747
|
-
function readRequestCookie(request, name) {
|
|
11748
|
-
const cookies = request.cookies;
|
|
11749
|
-
if (cookies && typeof cookies.get === "function") {
|
|
11750
|
-
const value = cookies.get(name);
|
|
11751
|
-
if (value) {
|
|
11752
|
-
return value;
|
|
11753
|
-
}
|
|
11754
|
-
}
|
|
11755
|
-
const header = request.headers.get("cookie");
|
|
11756
|
-
if (!header) {
|
|
11757
|
-
return null;
|
|
11758
|
-
}
|
|
11759
|
-
for (const part of header.split(";")) {
|
|
11760
|
-
const idx = part.indexOf("=");
|
|
11761
|
-
if (idx === -1)
|
|
11762
|
-
continue;
|
|
11763
|
-
const cookieName = part.slice(0, idx).trim();
|
|
11764
|
-
if (cookieName !== name)
|
|
11765
|
-
continue;
|
|
11766
|
-
return decodeURIComponent(part.slice(idx + 1).trim());
|
|
11767
|
-
}
|
|
11768
|
-
return null;
|
|
11769
|
-
}
|
|
11770
|
-
function readBunRequestCookie(request, name) {
|
|
11771
|
-
return request.cookies.get(name) ?? readRequestCookie(request, name);
|
|
11772
|
-
}
|
|
11773
11807
|
// ../../src/core/http/corsMiddleware.ts
|
|
11774
11808
|
function additionalHeaders(options) {
|
|
11775
11809
|
const configured = process.env.CORS_ADDITIONAL_ALLOWED_HEADERS?.trim();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/core",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.34",
|
|
4
4
|
"description": "Strata Bun framework public API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -15,6 +15,16 @@
|
|
|
15
15
|
"import": "./dist/index.js",
|
|
16
16
|
"default": "./dist/index.js"
|
|
17
17
|
},
|
|
18
|
+
"./auth/accountState": {
|
|
19
|
+
"types": "./dist/core/auth/accountState.d.ts",
|
|
20
|
+
"import": "./dist/entries/auth/accountState.js",
|
|
21
|
+
"default": "./dist/entries/auth/accountState.js"
|
|
22
|
+
},
|
|
23
|
+
"./auth/accountStateMigration": {
|
|
24
|
+
"types": "./dist/core/auth/accountStateMigration.d.ts",
|
|
25
|
+
"import": "./dist/entries/auth/accountStateMigration.js",
|
|
26
|
+
"default": "./dist/entries/auth/accountStateMigration.js"
|
|
27
|
+
},
|
|
18
28
|
"./auth/accessControl": {
|
|
19
29
|
"types": "./dist/core/auth/accessControl.d.ts",
|
|
20
30
|
"import": "./dist/entries/auth/accessControl.js",
|
|
@@ -115,6 +125,11 @@
|
|
|
115
125
|
"import": "./dist/entries/auth/passwordLogin.js",
|
|
116
126
|
"default": "./dist/entries/auth/passwordLogin.js"
|
|
117
127
|
},
|
|
128
|
+
"./auth/pendingMfaCookie": {
|
|
129
|
+
"types": "./dist/core/auth/pendingMfaCookie.d.ts",
|
|
130
|
+
"import": "./dist/entries/auth/pendingMfaCookie.js",
|
|
131
|
+
"default": "./dist/entries/auth/pendingMfaCookie.js"
|
|
132
|
+
},
|
|
118
133
|
"./auth/oneTimeToken": {
|
|
119
134
|
"types": "./dist/core/auth/oneTimeToken.d.ts",
|
|
120
135
|
"import": "./dist/entries/auth/oneTimeToken.js",
|
|
@@ -943,7 +958,7 @@
|
|
|
943
958
|
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml",
|
|
944
959
|
"build:types": "tsc -p tsconfig.types.json",
|
|
945
960
|
"prepublishOnly": "bun run build && bun ../../scripts/prepare-core-package-publish.ts",
|
|
946
|
-
"build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/emailVerification.ts entries/auth/jwt.ts entries/auth/jwtGuard.ts entries/auth/basicAuthGuard.ts entries/auth/tokenAbilityChecker.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/saml/samlServiceProvider.ts entries/auth/password.ts entries/auth/passwordLogin.ts entries/auth/oneTimeToken.ts entries/auth/intendedUrlCookie.ts entries/auth/passwordConfirmCookie.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/authUserDirectory.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/sqliteConnection.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/requireVerifiedMiddleware.ts entries/http/requirePasswordConfirmMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/statelessAuth.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/uploads.ts entries/http/validation.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appEnv.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/recoveryCodes.ts entries/security/safeFetch.ts entries/security/safePath.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/webhookSignature.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/tenant/enableTenantRls.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts --outdir dist --root . --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml --external @getstrata/core --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --external @getstrata/core/auth/guard --external @getstrata/core/auth/jwt --external @getstrata/core/auth/jwtGuard --external @getstrata/core/auth/basicAuthGuard --external @getstrata/core/auth/tokenAbilityChecker --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipMiddleware --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/oauth/oidcProvider --external @getstrata/core/auth/oauth/providers --external @getstrata/core/auth/oauth/samlProvider --external @getstrata/core/auth/oauth/types --external @getstrata/core/auth/saml/samlServiceProvider --external @getstrata/core/auth/password --external @getstrata/core/auth/passwordLogin --external @getstrata/core/auth/oneTimeToken --external @getstrata/core/auth/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --external @getstrata/core/auth/policy --external @getstrata/core/auth/scimAuthMiddleware --external @getstrata/core/auth/sessionCookie --external @getstrata/core/auth/sessionGuard --external @getstrata/core/auth/tokenHash --external @getstrata/core/audit/exportAuditLogs --external @getstrata/core/audit/siemFormatter --external @getstrata/core/admin/formatValue --external @getstrata/core/admin/registry --external @getstrata/core/admin/types --external @getstrata/core/cache/tags --external @getstrata/core/cache/createCacheStore --external @getstrata/core/cache/repository --external @getstrata/core/cache/simpleCache --external @getstrata/core/cache/simpleCacheStore --external @getstrata/core/config/envSchema --external @getstrata/core/contracts/serviceTokens --external @getstrata/core/contracts/authUserDirectory --external @getstrata/core/contracts/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --external @getstrata/core/crypto/fieldEncryptionRotation --external @getstrata/core/crypto/mfaSecret --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/bunSql --external @getstrata/core/database/connection --external @getstrata/core/database/connectionContext --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/dialect --external @getstrata/core/database/mysqlConnection --external @getstrata/core/database/namedConnections --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/sqliteConnection --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/events/outbox --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/clientIp --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/contentSecurityPolicy --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/response --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/safeInternalPath --external @getstrata/core/http/signedUrl --external @getstrata/core/http/statelessAuth --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/uploads --external @getstrata/core/http/validation --external @getstrata/core/jobs/exportAuditLogsJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/mail/sanitizeMailHtml --external @getstrata/core/media/imageTransform --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/appEnv --external @getstrata/core/runtime/appKeyPrefix --external @getstrata/core/runtime/frontendMode --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/recoveryCodes --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safePath --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/webhookSignature --external @getstrata/core/security/timingSafeCompare --external @getstrata/core/security/tokenExpiry --external @getstrata/core/security/totp --external @getstrata/core/storage/storage --external @getstrata/core/tenant/tenancyConfig --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tenant/enableTenantRls --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
961
|
+
"build:subpaths": "bun build entries/auth/accountState.ts entries/auth/accountStateMigration.ts entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/emailVerification.ts entries/auth/jwt.ts entries/auth/jwtGuard.ts entries/auth/basicAuthGuard.ts entries/auth/tokenAbilityChecker.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/saml/samlServiceProvider.ts entries/auth/password.ts entries/auth/passwordLogin.ts entries/auth/pendingMfaCookie.ts entries/auth/oneTimeToken.ts entries/auth/intendedUrlCookie.ts entries/auth/passwordConfirmCookie.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/authUserDirectory.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/sqliteConnection.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/requireVerifiedMiddleware.ts entries/http/requirePasswordConfirmMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/statelessAuth.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/uploads.ts entries/http/validation.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appEnv.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/recoveryCodes.ts entries/security/safeFetch.ts entries/security/safePath.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/webhookSignature.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/tenant/enableTenantRls.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts --outdir dist --root . --target bun --external bun --external '@opentelemetry/*' --external eta --external mysql2 --external @node-saml/node-saml --external @getstrata/core --external @getstrata/core/auth/accountState --external @getstrata/core/auth/accountStateMigration --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --external @getstrata/core/auth/guard --external @getstrata/core/auth/jwt --external @getstrata/core/auth/jwtGuard --external @getstrata/core/auth/basicAuthGuard --external @getstrata/core/auth/tokenAbilityChecker --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipMiddleware --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/oauth/oidcProvider --external @getstrata/core/auth/oauth/providers --external @getstrata/core/auth/oauth/samlProvider --external @getstrata/core/auth/oauth/types --external @getstrata/core/auth/saml/samlServiceProvider --external @getstrata/core/auth/password --external @getstrata/core/auth/passwordLogin --external @getstrata/core/auth/pendingMfaCookie --external @getstrata/core/auth/oneTimeToken --external @getstrata/core/auth/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --external @getstrata/core/auth/policy --external @getstrata/core/auth/scimAuthMiddleware --external @getstrata/core/auth/sessionCookie --external @getstrata/core/auth/sessionGuard --external @getstrata/core/auth/tokenHash --external @getstrata/core/audit/exportAuditLogs --external @getstrata/core/audit/siemFormatter --external @getstrata/core/admin/formatValue --external @getstrata/core/admin/registry --external @getstrata/core/admin/types --external @getstrata/core/cache/tags --external @getstrata/core/cache/createCacheStore --external @getstrata/core/cache/repository --external @getstrata/core/cache/simpleCache --external @getstrata/core/cache/simpleCacheStore --external @getstrata/core/config/envSchema --external @getstrata/core/contracts/serviceTokens --external @getstrata/core/contracts/authUserDirectory --external @getstrata/core/contracts/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --external @getstrata/core/crypto/fieldEncryptionRotation --external @getstrata/core/crypto/mfaSecret --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/bunSql --external @getstrata/core/database/connection --external @getstrata/core/database/connectionContext --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/dialect --external @getstrata/core/database/mysqlConnection --external @getstrata/core/database/namedConnections --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/sqliteConnection --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/events/outbox --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/clientIp --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/contentSecurityPolicy --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/response --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/safeInternalPath --external @getstrata/core/http/signedUrl --external @getstrata/core/http/statelessAuth --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/uploads --external @getstrata/core/http/validation --external @getstrata/core/jobs/exportAuditLogsJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/mail/sanitizeMailHtml --external @getstrata/core/media/imageTransform --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/appEnv --external @getstrata/core/runtime/appKeyPrefix --external @getstrata/core/runtime/frontendMode --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/recoveryCodes --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safePath --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/webhookSignature --external @getstrata/core/security/timingSafeCompare --external @getstrata/core/security/tokenExpiry --external @getstrata/core/security/totp --external @getstrata/core/storage/storage --external @getstrata/core/tenant/tenancyConfig --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tenant/enableTenantRls --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
947
962
|
"build:shims": "bun ../../scripts/write-core-shared-shims.ts"
|
|
948
963
|
},
|
|
949
964
|
"publishConfig": {
|