@getstrata/bootstrap 0.2.51 → 0.2.52

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 CHANGED
@@ -1,5 +1,11 @@
1
1
  # @getstrata/bootstrap changelog
2
2
 
3
+ ## 0.2.52
4
+
5
+ - View provider registers `configureWebErrorView` so `errors/*.eta` render through the app Eta layout. `EtaViewEngine` receives `Request` from the layout-data resolver.
6
+ - `createWebServer` unknown routes and null handlers return styled HTML 404s and run inside request ALS so `configureWebLayoutData` can read the session cookie.
7
+ - `wrapSecuredRouteModelByKey` is documented as the wrong default for public HTML show pages; a missing model is a styled 404 and HTML/composite GET ETags stay off.
8
+
3
9
  ## 0.2.51
4
10
 
5
11
  - `createCookieSessionAuthManager` returns `CookieSessionAuthManager` (`signIn`, `signOut`, `signInRedirect`, `signOutRedirect`). Controllers no longer need a local cookie helper.
@@ -9,10 +9,16 @@ export declare function routeParams(request: Request): Record<string, string>;
9
9
  * Mutates the request in place so instanceof Request and Bun internals stay valid.
10
10
  */
11
11
  export declare function toRouteRequest<TParams extends Record<string, string>>(request: Request): RouteRequest<TParams>;
12
- /** Laravel-style secured route-model binding for string keys (slugs, UUIDs). */
12
+ /**
13
+ * Laravel-style secured route-model binding for string keys (slugs, UUIDs).
14
+ * Public HTML show pages should look up the model in the controller instead.
15
+ * If this wrapper is still used on HTML, a missing model becomes a styled 404
16
+ * and GET ETags are skipped for HTML / composite objects unless `etag: true`.
17
+ */
13
18
  export declare function wrapSecuredRouteModelByKey<TParams extends Record<string, string>, TModel, TParam extends keyof TParams & string>(param: TParam, resolver: (key: string, request: RouteRequest<TParams>) => Promise<TModel>, authorization: {
14
19
  resource: string;
15
20
  action: "view" | "create" | "update" | "delete";
21
+ etag?: boolean;
16
22
  }, handler: (request: RouteRequest<TParams>, model: TModel) => Response | Promise<Response>): RouteHandler;
17
23
  /** Web group (CSRF + flash + HTML errors) plus login throttle. Do not wrap with wrapWeb again. */
18
24
  export declare function wrapWebLogin(kernel: HttpKernel, handler: RouteHandler, onThrottled: (request: Request) => Response | Promise<Response>): RouteHandler;
@@ -460,7 +460,13 @@ var storage_default = storageProvider;
460
460
 
461
461
  // ../../src/bootstrap/providers/view.ts
462
462
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
463
- import { DEFAULT_VIEWS_DIRECTORY, EtaViewEngine, resolveWebLayoutData } from "@getstrata/core/view";
463
+ import {
464
+ configureWebErrorView,
465
+ DEFAULT_VIEWS_DIRECTORY,
466
+ EtaViewEngine,
467
+ errorTemplateName,
468
+ resolveWebLayoutData
469
+ } from "@getstrata/core/view";
464
470
 
465
471
  // ../../src/config/frontend.ts
466
472
  function readFrontendMode() {
@@ -491,7 +497,15 @@ var viewProvider = {
491
497
  }
492
498
  const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
493
499
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
494
- container.set(CORE_VIEW_TOKEN, new EtaViewEngine(viewsDirectory, () => resolveWebLayoutData(container, currentRequestMeta().request)));
500
+ const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
501
+ container.set(CORE_VIEW_TOKEN, engine);
502
+ configureWebErrorView({
503
+ render: async (input) => engine.render(errorTemplateName(input.status), {
504
+ title: input.title,
505
+ message: input.message,
506
+ errors: input.errors
507
+ })
508
+ });
495
509
  }
496
510
  };
497
511
 
@@ -4,7 +4,7 @@ var __jsonParse = (a) => JSON.parse(a);
4
4
  // ../../src/bootstrap/createRoutes.ts
5
5
  import { applyMiddlewareToRoutes as applyMiddlewareToRoutes3 } from "@getstrata/core/http/middleware";
6
6
  import { jsonResponse as jsonResponse4 } from "@getstrata/core/http/response";
7
- import { htmlResponse as htmlResponse2 } from "@getstrata/core/view";
7
+ import { notFoundHtmlResponse as notFoundHtmlResponse2 } from "@getstrata/core/view";
8
8
 
9
9
  // ../../index.html
10
10
  var strata_default = __jsonParse("{\"index\":\"_.._/_.._/index.html\",\"files\":[{\"input\":\"../../index.html\",\"path\":\"./index-sfreg6q3.js\",\"loader\":\"js\",\"isEntry\":true,\"headers\":{\"etag\":\"Oc_YLpCmV6M\",\"content-type\":\"text/javascript;charset=utf-8\"}},{\"input\":\"../../index.html\",\"path\":\"_.._/_.._/index.html\",\"loader\":\"html\",\"isEntry\":true,\"headers\":{\"etag\":\"rWY90LWIcx8\",\"content-type\":\"text/html;charset=utf-8\"}}]}");
@@ -508,7 +508,7 @@ function mergeSpaRoutes(dependencies, routes) {
508
508
 
509
509
  // ../../src/bootstrap/createWebRoutes.ts
510
510
  import { join as join3 } from "path";
511
- import { htmlResponse } from "@getstrata/core/view";
511
+ import { notFoundHtmlResponse } from "@getstrata/core/view";
512
512
 
513
513
  // ../../src/bootstrap/buildWebModuleRoutes.ts
514
514
  import { applyMiddlewareToRoutes as applyMiddlewareToRoutes2 } from "@getstrata/core/http/middleware";
@@ -551,7 +551,7 @@ function createWebRoutes(dependencies) {
551
551
  const relativePath = pathname.replace(/^\//, "");
552
552
  const file = Bun.file(join3(process.cwd(), "public", relativePath));
553
553
  if (!await file.exists()) {
554
- return htmlResponse("Not Found", { status: 404 });
554
+ return notFoundHtmlResponse();
555
555
  }
556
556
  return new Response(file);
557
557
  };
@@ -1428,7 +1428,7 @@ function createRoutes(dependencies) {
1428
1428
  "/*": async () => {
1429
1429
  registerRoute2("GET", "/*", []);
1430
1430
  if (isViewsEnabled()) {
1431
- return htmlResponse2("Not Found", { status: 404 });
1431
+ return notFoundHtmlResponse2();
1432
1432
  }
1433
1433
  if (isSpaEnabled()) {
1434
1434
  return jsonResponse4({ error: "Not Found" }, { status: 404 });
@@ -3,7 +3,7 @@ var __jsonParse = (a) => JSON.parse(a);
3
3
 
4
4
  // ../../src/bootstrap/createWebRoutes.ts
5
5
  import { join as join2 } from "path";
6
- import { htmlResponse } from "@getstrata/core/view";
6
+ import { notFoundHtmlResponse } from "@getstrata/core/view";
7
7
 
8
8
  // ../../src/config/frontend.ts
9
9
  function readFrontendMode() {
@@ -478,7 +478,7 @@ function createWebRoutes(dependencies) {
478
478
  const relativePath = pathname.replace(/^\//, "");
479
479
  const file = Bun.file(join2(process.cwd(), "public", relativePath));
480
480
  if (!await file.exists()) {
481
- return htmlResponse("Not Found", { status: 404 });
481
+ return notFoundHtmlResponse();
482
482
  }
483
483
  return new Response(file);
484
484
  };
@@ -460,7 +460,13 @@ var storage_default = storageProvider;
460
460
 
461
461
  // ../../src/bootstrap/providers/view.ts
462
462
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
463
- import { DEFAULT_VIEWS_DIRECTORY, EtaViewEngine, resolveWebLayoutData } from "@getstrata/core/view";
463
+ import {
464
+ configureWebErrorView,
465
+ DEFAULT_VIEWS_DIRECTORY,
466
+ EtaViewEngine,
467
+ errorTemplateName,
468
+ resolveWebLayoutData
469
+ } from "@getstrata/core/view";
464
470
 
465
471
  // ../../src/config/frontend.ts
466
472
  function readFrontendMode() {
@@ -491,7 +497,15 @@ var viewProvider = {
491
497
  }
492
498
  const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
493
499
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
494
- container.set(CORE_VIEW_TOKEN, new EtaViewEngine(viewsDirectory, () => resolveWebLayoutData(container, currentRequestMeta().request)));
500
+ const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
501
+ container.set(CORE_VIEW_TOKEN, engine);
502
+ configureWebErrorView({
503
+ render: async (input) => engine.render(errorTemplateName(input.status), {
504
+ title: input.title,
505
+ message: input.message,
506
+ errors: input.errors
507
+ })
508
+ });
495
509
  }
496
510
  };
497
511
 
@@ -3,7 +3,13 @@ var __jsonParse = (a) => JSON.parse(a);
3
3
 
4
4
  // ../../src/bootstrap/providers/view.ts
5
5
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
6
- import { DEFAULT_VIEWS_DIRECTORY, EtaViewEngine, resolveWebLayoutData } from "@getstrata/core/view";
6
+ import {
7
+ configureWebErrorView,
8
+ DEFAULT_VIEWS_DIRECTORY,
9
+ EtaViewEngine,
10
+ errorTemplateName,
11
+ resolveWebLayoutData
12
+ } from "@getstrata/core/view";
7
13
 
8
14
  // ../../src/config/frontend.ts
9
15
  function readFrontendMode() {
@@ -34,7 +40,15 @@ var viewProvider = {
34
40
  }
35
41
  const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
36
42
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
37
- container.set(CORE_VIEW_TOKEN, new EtaViewEngine(viewsDirectory, () => resolveWebLayoutData(container, currentRequestMeta().request)));
43
+ const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
44
+ container.set(CORE_VIEW_TOKEN, engine);
45
+ configureWebErrorView({
46
+ render: async (input) => engine.render(errorTemplateName(input.status), {
47
+ title: input.title,
48
+ message: input.message,
49
+ errors: input.errors
50
+ })
51
+ });
38
52
  }
39
53
  };
40
54
  export {
@@ -450,7 +450,13 @@ var storage_default = storageProvider;
450
450
 
451
451
  // ../../src/bootstrap/providers/view.ts
452
452
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
453
- import { DEFAULT_VIEWS_DIRECTORY, EtaViewEngine, resolveWebLayoutData } from "@getstrata/core/view";
453
+ import {
454
+ configureWebErrorView,
455
+ DEFAULT_VIEWS_DIRECTORY,
456
+ EtaViewEngine,
457
+ errorTemplateName,
458
+ resolveWebLayoutData
459
+ } from "@getstrata/core/view";
454
460
 
455
461
  // ../../src/config/frontend.ts
456
462
  function readFrontendMode() {
@@ -481,7 +487,15 @@ var viewProvider = {
481
487
  }
482
488
  const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
483
489
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
484
- container.set(CORE_VIEW_TOKEN, new EtaViewEngine(viewsDirectory, () => resolveWebLayoutData(container, currentRequestMeta().request)));
490
+ const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
491
+ container.set(CORE_VIEW_TOKEN, engine);
492
+ configureWebErrorView({
493
+ render: async (input) => engine.render(errorTemplateName(input.status), {
494
+ title: input.title,
495
+ message: input.message,
496
+ errors: input.errors
497
+ })
498
+ });
485
499
  }
486
500
  };
487
501
 
@@ -2,10 +2,21 @@
2
2
  var __jsonParse = (a) => JSON.parse(a);
3
3
 
4
4
  // ../../src/bootstrap/web/server.ts
5
+ import { currentRequestMeta, runWithRequestMeta } from "@getstrata/core/http/requestMetaContext";
6
+ import { notFoundHtmlResponse } from "@getstrata/core/view";
7
+ async function missingHtmlResponse() {
8
+ return notFoundHtmlResponse();
9
+ }
5
10
  function wrapRouteHandler(handler) {
6
11
  return async (request) => {
7
- const response = await handler(request);
8
- return response ?? new Response("Not Found", { status: 404 });
12
+ return await runWithRequestMeta({
13
+ ...currentRequestMeta(),
14
+ request,
15
+ userAgent: request.headers.get("user-agent")
16
+ }, async () => {
17
+ const response = await handler(request);
18
+ return response ?? await missingHtmlResponse();
19
+ });
9
20
  };
10
21
  }
11
22
  function convertAppRoutesToBunRoutes(routes) {
@@ -37,19 +48,25 @@ function createWebServer(options) {
37
48
  port: options.port,
38
49
  ...bunRoutes ? { routes: bunRoutes } : {},
39
50
  async fetch(request) {
40
- await options.onRequest?.(request);
41
- const url = new URL(request.url);
42
- if (url.pathname.startsWith("/assets/")) {
43
- const file = Bun.file(`${publicDir}${url.pathname}`);
44
- if (await file.exists()) {
45
- return new Response(file);
51
+ return await runWithRequestMeta({
52
+ ...currentRequestMeta(),
53
+ request,
54
+ userAgent: request.headers.get("user-agent")
55
+ }, async () => {
56
+ await options.onRequest?.(request);
57
+ const url = new URL(request.url);
58
+ if (url.pathname.startsWith("/assets/")) {
59
+ const file = Bun.file(`${publicDir}${url.pathname}`);
60
+ if (await file.exists()) {
61
+ return new Response(file);
62
+ }
46
63
  }
47
- }
48
- if (options.handle) {
49
- const response = await options.handle(request);
50
- return response ?? new Response("Not Found", { status: 404 });
51
- }
52
- return new Response("Not Found", { status: 404 });
64
+ if (options.handle) {
65
+ const response = await options.handle(request);
66
+ return response ?? await missingHtmlResponse();
67
+ }
68
+ return await missingHtmlResponse();
69
+ });
53
70
  }
54
71
  });
55
72
  }
package/dist/index.js CHANGED
@@ -806,7 +806,13 @@ var storage_default = storageProvider;
806
806
 
807
807
  // ../../src/bootstrap/providers/view.ts
808
808
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
809
- import { DEFAULT_VIEWS_DIRECTORY, EtaViewEngine, resolveWebLayoutData } from "@getstrata/core/view";
809
+ import {
810
+ configureWebErrorView,
811
+ DEFAULT_VIEWS_DIRECTORY,
812
+ EtaViewEngine,
813
+ errorTemplateName,
814
+ resolveWebLayoutData
815
+ } from "@getstrata/core/view";
810
816
  var CORE_VIEW_TOKEN = "core.view";
811
817
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
812
818
  var viewProvider = {
@@ -817,7 +823,15 @@ var viewProvider = {
817
823
  }
818
824
  const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
819
825
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
820
- container.set(CORE_VIEW_TOKEN, new EtaViewEngine(viewsDirectory, () => resolveWebLayoutData(container, currentRequestMeta().request)));
826
+ const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
827
+ container.set(CORE_VIEW_TOKEN, engine);
828
+ configureWebErrorView({
829
+ render: async (input) => engine.render(errorTemplateName(input.status), {
830
+ title: input.title,
831
+ message: input.message,
832
+ errors: input.errors
833
+ })
834
+ });
821
835
  }
822
836
  };
823
837
 
@@ -868,7 +882,7 @@ function createAppContext() {
868
882
  }
869
883
  // ../../src/bootstrap/createWebRoutes.ts
870
884
  import { join as join3 } from "path";
871
- import { htmlResponse } from "@getstrata/core/view";
885
+ import { notFoundHtmlResponse } from "@getstrata/core/view";
872
886
  function registerRoute(method, path, middleware) {
873
887
  routeRegistry.register({ method, path, middleware });
874
888
  }
@@ -886,7 +900,7 @@ function createWebRoutes(dependencies) {
886
900
  const relativePath = pathname.replace(/^\//, "");
887
901
  const file = Bun.file(join3(process.cwd(), "public", relativePath));
888
902
  if (!await file.exists()) {
889
- return htmlResponse("Not Found", { status: 404 });
903
+ return notFoundHtmlResponse();
890
904
  }
891
905
  return new Response(file);
892
906
  };
@@ -1201,10 +1215,21 @@ function createRouteKernel(dependencies) {
1201
1215
  return createHttpKernel(dependencies);
1202
1216
  }
1203
1217
  // ../../src/bootstrap/web/server.ts
1218
+ import { currentRequestMeta as currentRequestMeta2, runWithRequestMeta } from "@getstrata/core/http/requestMetaContext";
1219
+ import { notFoundHtmlResponse as notFoundHtmlResponse2 } from "@getstrata/core/view";
1220
+ async function missingHtmlResponse() {
1221
+ return notFoundHtmlResponse2();
1222
+ }
1204
1223
  function wrapRouteHandler(handler) {
1205
1224
  return async (request) => {
1206
- const response = await handler(request);
1207
- return response ?? new Response("Not Found", { status: 404 });
1225
+ return await runWithRequestMeta({
1226
+ ...currentRequestMeta2(),
1227
+ request,
1228
+ userAgent: request.headers.get("user-agent")
1229
+ }, async () => {
1230
+ const response = await handler(request);
1231
+ return response ?? await missingHtmlResponse();
1232
+ });
1208
1233
  };
1209
1234
  }
1210
1235
  function convertAppRoutesToBunRoutes(routes) {
@@ -1236,19 +1261,25 @@ function createWebServer(options) {
1236
1261
  port: options.port,
1237
1262
  ...bunRoutes ? { routes: bunRoutes } : {},
1238
1263
  async fetch(request) {
1239
- await options.onRequest?.(request);
1240
- const url = new URL(request.url);
1241
- if (url.pathname.startsWith("/assets/")) {
1242
- const file = Bun.file(`${publicDir}${url.pathname}`);
1243
- if (await file.exists()) {
1244
- return new Response(file);
1264
+ return await runWithRequestMeta({
1265
+ ...currentRequestMeta2(),
1266
+ request,
1267
+ userAgent: request.headers.get("user-agent")
1268
+ }, async () => {
1269
+ await options.onRequest?.(request);
1270
+ const url = new URL(request.url);
1271
+ if (url.pathname.startsWith("/assets/")) {
1272
+ const file = Bun.file(`${publicDir}${url.pathname}`);
1273
+ if (await file.exists()) {
1274
+ return new Response(file);
1275
+ }
1245
1276
  }
1246
- }
1247
- if (options.handle) {
1248
- const response = await options.handle(request);
1249
- return response ?? new Response("Not Found", { status: 404 });
1250
- }
1251
- return new Response("Not Found", { status: 404 });
1277
+ if (options.handle) {
1278
+ const response = await options.handle(request);
1279
+ return response ?? await missingHtmlResponse();
1280
+ }
1281
+ return await missingHtmlResponse();
1282
+ });
1252
1283
  }
1253
1284
  });
1254
1285
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/bootstrap",
3
- "version": "0.2.51",
3
+ "version": "0.2.52",
4
4
  "description": "Strata application bootstrap — HttpKernel, DI, web session helpers",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -173,14 +173,14 @@
173
173
  "build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --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/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/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/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/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/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/dispatchWebhookJob --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/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/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/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 @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/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/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/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/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/dispatchWebhookJob --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/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/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/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.60",
183
+ "@getstrata/core": "^0.5.61",
184
184
  "typescript": "^5.9.0"
185
185
  }
186
186
  }