@getstrata/bootstrap 0.2.68 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.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: (process.env.AUTH_DEV_HEADERS ?? "true") !== "false",
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 guards = [new DatabaseTokenGuard(container), new SessionGuard(container)];
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
- container.set(CORE_AUTH_TOKEN, new AuthManager(new CompositeGuard(guards)));
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: { required: true, pattern: /^postgres(ql)?:\/\// },
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: "true",
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
- var PUBLISHED_TEST_ADMIN_API_TOKEN = "workhub-admin-test-token";
1107
- var PUBLISHED_TEST_MEMBER_API_TOKEN = "workhub-member-test-token";
1108
- var PUBLISHED_TEST_SCIM_BEARER_TOKEN = "workhub-scim-test-token";
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
- const frontendMode = (env.FRONTEND_MODE ?? "api").trim();
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 { createHash, randomBytes } from "crypto";
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
  }
@@ -1373,25 +1423,39 @@ function defaultSessionSql() {
1373
1423
  function defaultMapSessionUser(user) {
1374
1424
  return {
1375
1425
  id: user.id,
1376
- role: user.is_admin ? "admin" : "member"
1426
+ role: user.is_admin ? "admin" : "member",
1427
+ ...user.email_verified_at !== undefined ? { emailVerifiedAt: user.email_verified_at } : {}
1428
+ };
1429
+ }
1430
+ function sessionDisplayName(row, email) {
1431
+ if (typeof row.name === "string" && row.name.trim() !== "") {
1432
+ return row.name;
1433
+ }
1434
+ const first = typeof row.first_name === "string" ? row.first_name.trim() : "";
1435
+ const last = typeof row.last_name === "string" ? row.last_name.trim() : "";
1436
+ const composed = `${first} ${last}`.trim();
1437
+ return composed || email;
1438
+ }
1439
+ function mapSessionUserRow(row) {
1440
+ const email = typeof row.email === "string" ? row.email : "";
1441
+ return {
1442
+ id: Number(row.user_id ?? row.id),
1443
+ name: sessionDisplayName(row, email),
1444
+ email,
1445
+ learn_subscriber: Boolean(row.learn_subscriber),
1446
+ is_admin: Boolean(row.is_admin),
1447
+ ...row.email_verified_at !== undefined ? { email_verified_at: row.email_verified_at } : {}
1377
1448
  };
1378
1449
  }
1379
1450
  async function defaultLoadSessionUser(sql, sessionId) {
1380
- const rows = await sql.unsafe(`SELECT s.id, s.user_id, s.expires_at, u.name, u.email, u.learn_subscriber,
1381
- COALESCE(u.is_admin, false) AS is_admin
1451
+ const rows = await sql.unsafe(`SELECT s.user_id, s.expires_at, u.*
1382
1452
  FROM sessions s
1383
1453
  INNER JOIN users u ON u.id = s.user_id
1384
- WHERE s.id = $1 AND s.expires_at > NOW()`, [sessionId]);
1454
+ WHERE s.id = ${sqlPlaceholder(1)} AND s.expires_at > ${sqlNow()}`, [sessionId]);
1385
1455
  const row = rows[0];
1386
1456
  if (!row)
1387
1457
  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
- };
1458
+ return mapSessionUserRow(row);
1395
1459
  }
1396
1460
  function redirectWithCookie(location, setCookie, status) {
1397
1461
  return new Response(null, {
@@ -1429,7 +1493,7 @@ class CookieSessionStore {
1429
1493
  if (!raw)
1430
1494
  return null;
1431
1495
  const [sessionId, signature] = raw.split(".");
1432
- if (!sessionId || !signature || signature !== this.sign(sessionId)) {
1496
+ if (!sessionId || !signature || !timingSafeCompareString(signature, this.sign(sessionId))) {
1433
1497
  return null;
1434
1498
  }
1435
1499
  return sessionId;
@@ -1447,28 +1511,24 @@ class CookieSessionStore {
1447
1511
  const id = randomBytes(32).toString("hex");
1448
1512
  const expires = new Date(Date.now() + this.maxAgeSeconds * 1000);
1449
1513
  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, NOW())`, [id, user.id, expires, meta.userAgent ?? null, meta.ipAddress ?? null]);
1514
+ VALUES (${sqlPlaceholder(1)}, ${sqlPlaceholder(2)}, ${sqlPlaceholder(3)}, ${sqlPlaceholder(4)}, ${sqlPlaceholder(5)}, ${sqlNow()})`, [id, user.id, expires.toISOString(), meta.userAgent ?? null, meta.ipAddress ?? null]);
1451
1515
  return id;
1452
1516
  }
1453
1517
  async destroy(sessionId) {
1454
- await this.sql().unsafe(`DELETE FROM sessions WHERE id = $1`, [sessionId]);
1518
+ await this.sql().unsafe(`DELETE FROM sessions WHERE id = ${sqlPlaceholder(1)}`, [sessionId]);
1455
1519
  }
1456
1520
  async destroyOtherSessions(userId, keepSessionId) {
1457
- await this.sql().unsafe(`DELETE FROM sessions WHERE user_id = $1 AND id <> $2`, [
1458
- userId,
1459
- keepSessionId
1460
- ]);
1521
+ await this.sql().unsafe(`DELETE FROM sessions WHERE user_id = ${sqlPlaceholder(1)} AND id <> ${sqlPlaceholder(2)}`, [userId, keepSessionId]);
1461
1522
  }
1462
1523
  async listForUser(userId) {
1524
+ const dialect = currentSqlDialect();
1463
1525
  return this.sql().unsafe(`SELECT id, user_id, user_agent, ip_address, last_active_at, expires_at
1464
1526
  FROM sessions
1465
- WHERE user_id = $1 AND expires_at > NOW()
1466
- ORDER BY last_active_at DESC NULLS LAST, expires_at DESC`, [userId]);
1527
+ WHERE user_id = ${dialect.placeholder(1)} AND expires_at > ${dialect.nowExpression()}
1528
+ ORDER BY last_active_at DESC${dialect.nullsLastSuffix()}, expires_at DESC`, [userId]);
1467
1529
  }
1468
1530
  async touch(sessionId) {
1469
- await this.sql().unsafe(`UPDATE sessions SET last_active_at = NOW() WHERE id = $1`, [
1470
- sessionId
1471
- ]);
1531
+ await this.sql().unsafe(`UPDATE sessions SET last_active_at = ${sqlNow()} WHERE id = ${sqlPlaceholder(1)}`, [sessionId]);
1472
1532
  }
1473
1533
  async read(request) {
1474
1534
  const sessionId = this.sessionIdFromRequest(request);
@@ -1477,7 +1537,7 @@ class CookieSessionStore {
1477
1537
  return this.loadSessionUser(this.sql(), sessionId);
1478
1538
  }
1479
1539
  sign(value) {
1480
- return createHash("sha256").update(`${value}.${this.secret}`).digest("hex").slice(0, 32);
1540
+ return createHmac("sha256", this.secret).update(value).digest("hex").slice(0, 32);
1481
1541
  }
1482
1542
  }
1483
1543
 
@@ -1500,8 +1560,11 @@ class CookieSessionGuard {
1500
1560
  class CookieSessionAuthManager extends AuthManager2 {
1501
1561
  store;
1502
1562
  constructor(store, mapUser = defaultMapSessionUser) {
1503
- super(new CookieSessionGuard(store, mapUser));
1563
+ const guard = new CookieSessionGuard(store, mapUser);
1564
+ super(guard);
1504
1565
  this.store = store;
1566
+ this.registerGuard("web", guard);
1567
+ this.registerGuard("session", guard);
1505
1568
  }
1506
1569
  async signIn(user, meta = {}) {
1507
1570
  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.68",
4
- "description": "Strata application bootstrap HttpKernel, DI, web session helpers",
3
+ "version": "0.4.3",
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.5.75",
183
+ "@getstrata/core": "^0.7.2",
184
184
  "typescript": "^5.9.0"
185
185
  }
186
186
  }