@getstrata/bootstrap 0.2.68 → 0.4.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/CHANGELOG.md +34 -10
- package/README.md +10 -10
- package/dist/_.._/_.._/index.html +2 -2
- package/dist/bootstrap/createSpaRoutes.d.ts +9 -2
- package/dist/bootstrap/dogfoodApp.d.ts +1 -1
- package/dist/bootstrap/httpKernel.d.ts +4 -4
- package/dist/bootstrap/public-api.d.ts +1 -1
- package/dist/bootstrap/schemaTarget.d.ts +5 -0
- package/dist/bootstrap/server.d.ts +1 -1
- package/dist/bootstrap/web/index.d.ts +1 -1
- package/dist/bootstrap/web/routing.d.ts +2 -2
- package/dist/entries/buildModuleRoutes.js +2 -2
- package/dist/entries/buildWebModuleRoutes.js +2 -2
- package/dist/entries/context.js +41 -5
- package/dist/entries/createRoutes.js +57 -37
- package/dist/entries/createSpaRoutes.js +48 -24
- package/dist/entries/createWebRoutes.js +2 -2
- package/dist/entries/dependencies.js +41 -5
- package/dist/entries/httpKernel.js +2 -2
- package/dist/entries/providers.js +41 -5
- package/dist/entries/secretsGuard.js +13 -8
- package/dist/entries/web/routing.js +4 -3
- package/dist/entries/web/session.js +44 -25
- package/dist/index.js +102 -41
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -41,7 +41,7 @@ import { createRequireGlobalAdminMiddleware } from "@getstrata/core/http/require
|
|
|
41
41
|
import { createRequirePasswordConfirmMiddleware } from "@getstrata/core/http/requirePasswordConfirmMiddleware";
|
|
42
42
|
import { createRequireVerifiedMiddleware } from "@getstrata/core/http/requireVerifiedMiddleware";
|
|
43
43
|
import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebAuthMiddleware";
|
|
44
|
-
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
44
|
+
import { withErrorHandling, withJsonErrorHandling } from "@getstrata/core/http/response";
|
|
45
45
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
46
46
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
47
47
|
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
@@ -188,7 +188,7 @@ class HttpKernel {
|
|
|
188
188
|
return withMiddleware(...middleware)(handler);
|
|
189
189
|
}
|
|
190
190
|
wrapApi(handler) {
|
|
191
|
-
return this.wrap(["api", "authenticated"], handler);
|
|
191
|
+
return withJsonErrorHandling(this.wrap(["api", "authenticated"], handler));
|
|
192
192
|
}
|
|
193
193
|
wrapWeb(handler) {
|
|
194
194
|
return withErrorHandling(this.wrap("web", handler));
|
|
@@ -527,17 +527,19 @@ import {
|
|
|
527
527
|
} from "@getstrata/core/contracts/di";
|
|
528
528
|
|
|
529
529
|
// ../../src/bootstrap/providers/auth.ts
|
|
530
|
+
import { BasicAuthGuard } from "@getstrata/core/auth/basicAuthGuard";
|
|
530
531
|
import {
|
|
531
532
|
AuthManager,
|
|
532
533
|
CompositeGuard,
|
|
533
534
|
DatabaseTokenGuard,
|
|
534
535
|
GuestGuard
|
|
535
536
|
} from "@getstrata/core/auth/guard";
|
|
537
|
+
import { JwtGuard } from "@getstrata/core/auth/jwtGuard";
|
|
536
538
|
import { SessionGuard } from "@getstrata/core/auth/sessionGuard";
|
|
537
539
|
|
|
538
540
|
// ../../src/config/auth.ts
|
|
539
541
|
var authConfig = {
|
|
540
|
-
allowDevHeaders:
|
|
542
|
+
allowDevHeaders: process.env.AUTH_DEV_HEADERS === "true",
|
|
541
543
|
tokenDefaultAbilities: ["*"]
|
|
542
544
|
};
|
|
543
545
|
|
|
@@ -546,11 +548,22 @@ var authProvider = {
|
|
|
546
548
|
name: "core.auth",
|
|
547
549
|
register({ container, config }) {
|
|
548
550
|
config.set("auth.allowDevHeaders", authConfig.allowDevHeaders);
|
|
549
|
-
const
|
|
551
|
+
const apiGuard = new DatabaseTokenGuard(container);
|
|
552
|
+
const sessionGuard = new SessionGuard(container);
|
|
553
|
+
const jwtGuard = new JwtGuard;
|
|
554
|
+
const basicGuard = new BasicAuthGuard(container);
|
|
555
|
+
const guards = [apiGuard, jwtGuard, basicGuard, sessionGuard];
|
|
550
556
|
if (authConfig.allowDevHeaders) {
|
|
551
557
|
guards.push(new GuestGuard);
|
|
552
558
|
}
|
|
553
|
-
|
|
559
|
+
const auth = new AuthManager(new CompositeGuard(guards));
|
|
560
|
+
auth.registerGuard("api", apiGuard);
|
|
561
|
+
auth.registerGuard("access_token", apiGuard);
|
|
562
|
+
auth.registerGuard("jwt", jwtGuard);
|
|
563
|
+
auth.registerGuard("basic", basicGuard);
|
|
564
|
+
auth.registerGuard("web", sessionGuard);
|
|
565
|
+
auth.registerGuard("session", sessionGuard);
|
|
566
|
+
container.set(CORE_AUTH_TOKEN, auth);
|
|
554
567
|
}
|
|
555
568
|
};
|
|
556
569
|
var auth_default = authProvider;
|
|
@@ -611,8 +624,12 @@ var queueConfig = {
|
|
|
611
624
|
};
|
|
612
625
|
// ../../src/bootstrap/env.ts
|
|
613
626
|
import { defineEnvSchema } from "@getstrata/core/config/envSchema";
|
|
627
|
+
import { DEFAULT_SPA_PREFIX, FRONTEND_MODE_PATTERN } from "@getstrata/core/runtime/frontendMode";
|
|
614
628
|
var appEnvSchema = defineEnvSchema({
|
|
615
|
-
DATABASE_URL: {
|
|
629
|
+
DATABASE_URL: {
|
|
630
|
+
required: true,
|
|
631
|
+
pattern: /^(postgres(ql)?|mysql|sqlite):\/\//i
|
|
632
|
+
},
|
|
616
633
|
PORT: {
|
|
617
634
|
integer: true,
|
|
618
635
|
minimum: 1,
|
|
@@ -640,9 +657,21 @@ var appEnvSchema = defineEnvSchema({
|
|
|
640
657
|
pattern: /^(sync|async|redis)$/
|
|
641
658
|
},
|
|
642
659
|
AUTH_DEV_HEADERS: {
|
|
643
|
-
default: "
|
|
660
|
+
default: "false",
|
|
644
661
|
pattern: /^(true|false|0|1)$/
|
|
645
662
|
},
|
|
663
|
+
DB_CONNECTION: {
|
|
664
|
+
default: "",
|
|
665
|
+
pattern: /^(pgsql|postgres|postgresql|mysql|mariadb|sqlite)?$/i
|
|
666
|
+
},
|
|
667
|
+
AUTH_DEFAULT_GUARD: {
|
|
668
|
+
default: "web"
|
|
669
|
+
},
|
|
670
|
+
JWT_TTL_SECONDS: {
|
|
671
|
+
integer: true,
|
|
672
|
+
minimum: 60,
|
|
673
|
+
default: "3600"
|
|
674
|
+
},
|
|
646
675
|
APP_ENV: {
|
|
647
676
|
default: "local"
|
|
648
677
|
},
|
|
@@ -652,6 +681,13 @@ var appEnvSchema = defineEnvSchema({
|
|
|
652
681
|
APP_URL: {
|
|
653
682
|
default: "http://localhost:3000"
|
|
654
683
|
},
|
|
684
|
+
FRONTEND_MODE: {
|
|
685
|
+
default: "api",
|
|
686
|
+
pattern: FRONTEND_MODE_PATTERN
|
|
687
|
+
},
|
|
688
|
+
SPA_PREFIX: {
|
|
689
|
+
default: DEFAULT_SPA_PREFIX
|
|
690
|
+
},
|
|
655
691
|
API_PREFIX: {
|
|
656
692
|
default: "/api/v1"
|
|
657
693
|
},
|
|
@@ -1103,15 +1139,21 @@ import {
|
|
|
1103
1139
|
// ../../src/bootstrap/membershipService.ts
|
|
1104
1140
|
import { resolveMembershipService } from "@getstrata/core/auth/membershipService";
|
|
1105
1141
|
// ../../src/bootstrap/secretsGuard.ts
|
|
1106
|
-
|
|
1107
|
-
var
|
|
1108
|
-
var
|
|
1142
|
+
import { isViewsMode, parseFrontendMode } from "@getstrata/core/runtime/frontendMode";
|
|
1143
|
+
var PUBLISHED_TEST_ADMIN_API_TOKEN = "strata-admin-test-token";
|
|
1144
|
+
var PUBLISHED_TEST_MEMBER_API_TOKEN = "strata-member-test-token";
|
|
1145
|
+
var PUBLISHED_TEST_SCIM_BEARER_TOKEN = "strata-scim-test-token";
|
|
1109
1146
|
var MIN_SESSION_SECRET_LENGTH = 32;
|
|
1110
1147
|
var PUBLISHED_TEST_TOKENS = new Set([
|
|
1111
1148
|
PUBLISHED_TEST_ADMIN_API_TOKEN,
|
|
1112
|
-
PUBLISHED_TEST_MEMBER_API_TOKEN
|
|
1149
|
+
PUBLISHED_TEST_MEMBER_API_TOKEN,
|
|
1150
|
+
"workhub-admin-test-token",
|
|
1151
|
+
"workhub-member-test-token"
|
|
1152
|
+
]);
|
|
1153
|
+
var PUBLISHED_TEST_SCIM_TOKENS = new Set([
|
|
1154
|
+
PUBLISHED_TEST_SCIM_BEARER_TOKEN,
|
|
1155
|
+
"workhub-scim-test-token"
|
|
1113
1156
|
]);
|
|
1114
|
-
var PUBLISHED_TEST_SCIM_TOKENS = new Set([PUBLISHED_TEST_SCIM_BEARER_TOKEN]);
|
|
1115
1157
|
function isEnabled(value, defaultEnabled) {
|
|
1116
1158
|
if (value === undefined) {
|
|
1117
1159
|
return defaultEnabled;
|
|
@@ -1135,7 +1177,7 @@ function assertAuthDevHeadersDisabled(env) {
|
|
|
1135
1177
|
function assertSessionSecret(env) {
|
|
1136
1178
|
const secret = env.SESSION_SECRET?.trim() ?? "";
|
|
1137
1179
|
if (secret.length < MIN_SESSION_SECRET_LENGTH) {
|
|
1138
|
-
throw new Error("Production startup blocked: set SESSION_SECRET when FRONTEND_MODE=server-htmx (32+ characters).");
|
|
1180
|
+
throw new Error("Production startup blocked: set SESSION_SECRET when FRONTEND_MODE=server-htmx or hybrid (32+ characters).");
|
|
1139
1181
|
}
|
|
1140
1182
|
}
|
|
1141
1183
|
function assertPublishedTestTokensRotated(env) {
|
|
@@ -1197,8 +1239,7 @@ function assertProductionSecrets(env = process.env) {
|
|
|
1197
1239
|
assertTokenAuthProductionSecrets(env);
|
|
1198
1240
|
}
|
|
1199
1241
|
assertFeatureProductionSecrets(env);
|
|
1200
|
-
|
|
1201
|
-
if (frontendMode === "server-htmx") {
|
|
1242
|
+
if (isViewsMode(parseFrontendMode(env.FRONTEND_MODE))) {
|
|
1202
1243
|
assertSessionSecret(env);
|
|
1203
1244
|
}
|
|
1204
1245
|
}
|
|
@@ -1235,6 +1276,7 @@ async function parseFormBody(request) {
|
|
|
1235
1276
|
return { fields, files };
|
|
1236
1277
|
}
|
|
1237
1278
|
// ../../src/bootstrap/web/routing.ts
|
|
1279
|
+
import { requestPrefersJson } from "@getstrata/core/http/contentNegotiation";
|
|
1238
1280
|
import { withErrorHandling as withErrorHandling2 } from "@getstrata/core/http/response";
|
|
1239
1281
|
function routeParams(request) {
|
|
1240
1282
|
const normalized = {};
|
|
@@ -1270,7 +1312,7 @@ function wrapWebThrottle(kernel, scope, handler, onThrottled) {
|
|
|
1270
1312
|
const throttled = scope === "login" ? kernel.wrapLogin(handler) : kernel.wrapRegister(handler);
|
|
1271
1313
|
return async (request) => {
|
|
1272
1314
|
const response = await throttled(request);
|
|
1273
|
-
if (response.status === 429) {
|
|
1315
|
+
if (response.status === 429 && !requestPrefersJson(request)) {
|
|
1274
1316
|
return onThrottled(request);
|
|
1275
1317
|
}
|
|
1276
1318
|
return response;
|
|
@@ -1349,11 +1391,19 @@ function createWebServer(options) {
|
|
|
1349
1391
|
});
|
|
1350
1392
|
}
|
|
1351
1393
|
// ../../src/bootstrap/web/session.ts
|
|
1352
|
-
import {
|
|
1394
|
+
import { createHmac, randomBytes } from "crypto";
|
|
1353
1395
|
import { AuthManager as AuthManager2 } from "@getstrata/core/auth/guard";
|
|
1354
1396
|
import { getBoundDatabaseConnection as getBoundDatabaseConnection2 } from "@getstrata/core/database/boundConnection";
|
|
1355
1397
|
import { getDefaultDatabasePool as getDefaultDatabasePool2 } from "@getstrata/core/database/defaultConnection";
|
|
1398
|
+
import { currentSqlDialect } from "@getstrata/core/database/dialect";
|
|
1356
1399
|
import { readRequestCookie } from "@getstrata/core/http/cookies";
|
|
1400
|
+
import { timingSafeCompareString } from "@getstrata/core/security/timingSafeCompare";
|
|
1401
|
+
function sqlPlaceholder(index) {
|
|
1402
|
+
return currentSqlDialect().placeholder(index);
|
|
1403
|
+
}
|
|
1404
|
+
function sqlNow() {
|
|
1405
|
+
return currentSqlDialect().nowExpression();
|
|
1406
|
+
}
|
|
1357
1407
|
function isSqlClient(value) {
|
|
1358
1408
|
return typeof value.unsafe === "function";
|
|
1359
1409
|
}
|
|
@@ -1376,22 +1426,34 @@ function defaultMapSessionUser(user) {
|
|
|
1376
1426
|
role: user.is_admin ? "admin" : "member"
|
|
1377
1427
|
};
|
|
1378
1428
|
}
|
|
1429
|
+
function sessionDisplayName(row, email) {
|
|
1430
|
+
if (typeof row.name === "string" && row.name.trim() !== "") {
|
|
1431
|
+
return row.name;
|
|
1432
|
+
}
|
|
1433
|
+
const first = typeof row.first_name === "string" ? row.first_name.trim() : "";
|
|
1434
|
+
const last = typeof row.last_name === "string" ? row.last_name.trim() : "";
|
|
1435
|
+
const composed = `${first} ${last}`.trim();
|
|
1436
|
+
return composed || email;
|
|
1437
|
+
}
|
|
1438
|
+
function mapSessionUserRow(row) {
|
|
1439
|
+
const email = typeof row.email === "string" ? row.email : "";
|
|
1440
|
+
return {
|
|
1441
|
+
id: Number(row.user_id ?? row.id),
|
|
1442
|
+
name: sessionDisplayName(row, email),
|
|
1443
|
+
email,
|
|
1444
|
+
learn_subscriber: Boolean(row.learn_subscriber),
|
|
1445
|
+
is_admin: Boolean(row.is_admin)
|
|
1446
|
+
};
|
|
1447
|
+
}
|
|
1379
1448
|
async function defaultLoadSessionUser(sql, sessionId) {
|
|
1380
|
-
const rows = await sql.unsafe(`SELECT s.
|
|
1381
|
-
COALESCE(u.is_admin, false) AS is_admin
|
|
1449
|
+
const rows = await sql.unsafe(`SELECT s.user_id, s.expires_at, u.*
|
|
1382
1450
|
FROM sessions s
|
|
1383
1451
|
INNER JOIN users u ON u.id = s.user_id
|
|
1384
|
-
WHERE s.id = $1 AND s.expires_at >
|
|
1452
|
+
WHERE s.id = ${sqlPlaceholder(1)} AND s.expires_at > ${sqlNow()}`, [sessionId]);
|
|
1385
1453
|
const row = rows[0];
|
|
1386
1454
|
if (!row)
|
|
1387
1455
|
return null;
|
|
1388
|
-
return
|
|
1389
|
-
id: row.user_id,
|
|
1390
|
-
name: row.name,
|
|
1391
|
-
email: row.email,
|
|
1392
|
-
learn_subscriber: row.learn_subscriber,
|
|
1393
|
-
is_admin: row.is_admin
|
|
1394
|
-
};
|
|
1456
|
+
return mapSessionUserRow(row);
|
|
1395
1457
|
}
|
|
1396
1458
|
function redirectWithCookie(location, setCookie, status) {
|
|
1397
1459
|
return new Response(null, {
|
|
@@ -1429,7 +1491,7 @@ class CookieSessionStore {
|
|
|
1429
1491
|
if (!raw)
|
|
1430
1492
|
return null;
|
|
1431
1493
|
const [sessionId, signature] = raw.split(".");
|
|
1432
|
-
if (!sessionId || !signature || signature
|
|
1494
|
+
if (!sessionId || !signature || !timingSafeCompareString(signature, this.sign(sessionId))) {
|
|
1433
1495
|
return null;
|
|
1434
1496
|
}
|
|
1435
1497
|
return sessionId;
|
|
@@ -1447,28 +1509,24 @@ class CookieSessionStore {
|
|
|
1447
1509
|
const id = randomBytes(32).toString("hex");
|
|
1448
1510
|
const expires = new Date(Date.now() + this.maxAgeSeconds * 1000);
|
|
1449
1511
|
await this.sql().unsafe(`INSERT INTO sessions (id, user_id, expires_at, user_agent, ip_address, last_active_at)
|
|
1450
|
-
VALUES ($1, $2, $3, $4, $5,
|
|
1512
|
+
VALUES (${sqlPlaceholder(1)}, ${sqlPlaceholder(2)}, ${sqlPlaceholder(3)}, ${sqlPlaceholder(4)}, ${sqlPlaceholder(5)}, ${sqlNow()})`, [id, user.id, expires, meta.userAgent ?? null, meta.ipAddress ?? null]);
|
|
1451
1513
|
return id;
|
|
1452
1514
|
}
|
|
1453
1515
|
async destroy(sessionId) {
|
|
1454
|
-
await this.sql().unsafe(`DELETE FROM sessions WHERE id = $1`, [sessionId]);
|
|
1516
|
+
await this.sql().unsafe(`DELETE FROM sessions WHERE id = ${sqlPlaceholder(1)}`, [sessionId]);
|
|
1455
1517
|
}
|
|
1456
1518
|
async destroyOtherSessions(userId, keepSessionId) {
|
|
1457
|
-
await this.sql().unsafe(`DELETE FROM sessions WHERE user_id = $1 AND id <> $2`, [
|
|
1458
|
-
userId,
|
|
1459
|
-
keepSessionId
|
|
1460
|
-
]);
|
|
1519
|
+
await this.sql().unsafe(`DELETE FROM sessions WHERE user_id = ${sqlPlaceholder(1)} AND id <> ${sqlPlaceholder(2)}`, [userId, keepSessionId]);
|
|
1461
1520
|
}
|
|
1462
1521
|
async listForUser(userId) {
|
|
1522
|
+
const dialect = currentSqlDialect();
|
|
1463
1523
|
return this.sql().unsafe(`SELECT id, user_id, user_agent, ip_address, last_active_at, expires_at
|
|
1464
1524
|
FROM sessions
|
|
1465
|
-
WHERE user_id = $1 AND expires_at >
|
|
1466
|
-
ORDER BY last_active_at DESC
|
|
1525
|
+
WHERE user_id = ${dialect.placeholder(1)} AND expires_at > ${dialect.nowExpression()}
|
|
1526
|
+
ORDER BY last_active_at DESC${dialect.nullsLastSuffix()}, expires_at DESC`, [userId]);
|
|
1467
1527
|
}
|
|
1468
1528
|
async touch(sessionId) {
|
|
1469
|
-
await this.sql().unsafe(`UPDATE sessions SET last_active_at =
|
|
1470
|
-
sessionId
|
|
1471
|
-
]);
|
|
1529
|
+
await this.sql().unsafe(`UPDATE sessions SET last_active_at = ${sqlNow()} WHERE id = ${sqlPlaceholder(1)}`, [sessionId]);
|
|
1472
1530
|
}
|
|
1473
1531
|
async read(request) {
|
|
1474
1532
|
const sessionId = this.sessionIdFromRequest(request);
|
|
@@ -1477,7 +1535,7 @@ class CookieSessionStore {
|
|
|
1477
1535
|
return this.loadSessionUser(this.sql(), sessionId);
|
|
1478
1536
|
}
|
|
1479
1537
|
sign(value) {
|
|
1480
|
-
return
|
|
1538
|
+
return createHmac("sha256", this.secret).update(value).digest("hex").slice(0, 32);
|
|
1481
1539
|
}
|
|
1482
1540
|
}
|
|
1483
1541
|
|
|
@@ -1500,8 +1558,11 @@ class CookieSessionGuard {
|
|
|
1500
1558
|
class CookieSessionAuthManager extends AuthManager2 {
|
|
1501
1559
|
store;
|
|
1502
1560
|
constructor(store, mapUser = defaultMapSessionUser) {
|
|
1503
|
-
|
|
1561
|
+
const guard = new CookieSessionGuard(store, mapUser);
|
|
1562
|
+
super(guard);
|
|
1504
1563
|
this.store = store;
|
|
1564
|
+
this.registerGuard("web", guard);
|
|
1565
|
+
this.registerGuard("session", guard);
|
|
1505
1566
|
}
|
|
1506
1567
|
async signIn(user, meta = {}) {
|
|
1507
1568
|
const sessionId = await this.store.create(user, meta);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/bootstrap",
|
|
3
|
-
"version": "0.2
|
|
4
|
-
"description": "Strata application bootstrap
|
|
3
|
+
"version": "0.4.2",
|
|
4
|
+
"description": "Strata application bootstrap: HttpKernel, DI, web session helpers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -170,17 +170,17 @@
|
|
|
170
170
|
],
|
|
171
171
|
"scripts": {
|
|
172
172
|
"build": "bun run build:bundle && bun run build:shims && bun run build:subpaths && bun run build:types",
|
|
173
|
-
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --external @getstrata/core",
|
|
173
|
+
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --external mysql2 --external @getstrata/core",
|
|
174
174
|
"build:types": "tsc -p tsconfig.types.json && bun ../../scripts/prune-bootstrap-dist-types.ts",
|
|
175
175
|
"prepublishOnly": "bun run build",
|
|
176
|
-
"build:subpaths": "bun build entries/applicationRegistry.ts entries/buildModuleRoutes.ts entries/buildWebModuleRoutes.ts entries/cache/modelCacheTags.ts entries/config.ts entries/context.ts entries/contracts.ts entries/createWebRoutes.ts entries/createRoutes.ts entries/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --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/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/password --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/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --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/defaultConnection --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/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/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/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/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/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/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --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/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
176
|
+
"build:subpaths": "bun build entries/applicationRegistry.ts entries/buildModuleRoutes.ts entries/buildWebModuleRoutes.ts entries/cache/modelCacheTags.ts entries/config.ts entries/context.ts entries/contracts.ts entries/createWebRoutes.ts entries/createRoutes.ts entries/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external mysql2 --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --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/password --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/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --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/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/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/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/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --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/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
177
177
|
"build:shims": "true"
|
|
178
178
|
},
|
|
179
179
|
"publishConfig": {
|
|
180
180
|
"access": "public"
|
|
181
181
|
},
|
|
182
182
|
"peerDependencies": {
|
|
183
|
-
"@getstrata/core": "^0.
|
|
183
|
+
"@getstrata/core": "^0.7.2",
|
|
184
184
|
"typescript": "^5.9.0"
|
|
185
185
|
}
|
|
186
186
|
}
|