@getstrata/bootstrap 0.2.53 → 0.2.55

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,13 @@
1
1
  # @getstrata/bootstrap changelog
2
2
 
3
+ ## 0.2.55
4
+
5
+ - HttpKernel and route builders read `isViewsEnabled` / `isSpaEnabled` from `@getstrata/core/runtime/frontendMode` instead of WorkHub `src/config/frontend`.
6
+
7
+ ## 0.2.54
8
+
9
+ - `HttpKernel.wrapSigned()` applies `createValidateSignatureMiddleware` so HTMX routes can require a valid signed URL.
10
+
3
11
  ## 0.2.53
4
12
 
5
13
  - `registerDefaultJobs()` also registers `audit.export` (`ExportAuditLogsJob`).
@@ -20,6 +20,7 @@ declare class HttpKernel {
20
20
  wrapAbility(ability: string, handler: RouteHandler): RouteHandler;
21
21
  wrapPolicy(resource: string, action: keyof Policy, handler: RouteHandler): RouteHandler;
22
22
  wrapLogin(handler: RouteHandler): RouteHandler;
23
+ wrapSigned(handler: RouteHandler): RouteHandler;
23
24
  wrapRegister(handler: RouteHandler): RouteHandler;
24
25
  private wrapThrottle;
25
26
  }
@@ -25,30 +25,14 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
25
25
  import { withErrorHandling } from "@getstrata/core/http/response";
26
26
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
27
27
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
28
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
28
29
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
29
30
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
31
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
30
32
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
31
33
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
32
34
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
33
35
 
34
- // ../../src/config/frontend.ts
35
- function readFrontendMode() {
36
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
37
- if (mode === "server-htmx") {
38
- return "server-htmx";
39
- }
40
- if (mode === "spa-react") {
41
- return "spa-react";
42
- }
43
- return "api";
44
- }
45
- function isViewsEnabled() {
46
- return readFrontendMode() === "server-htmx";
47
- }
48
- function isSpaEnabled() {
49
- return readFrontendMode() === "spa-react";
50
- }
51
-
52
36
  // ../../src/config/rateLimit.ts
53
37
  var LOCAL_LOGIN_RATE_LIMIT = {
54
38
  maxAttempts: 100,
@@ -240,6 +224,9 @@ class HttpKernel {
240
224
  wrapLogin(handler) {
241
225
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
242
226
  }
227
+ wrapSigned(handler) {
228
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
229
+ }
243
230
  wrapRegister(handler) {
244
231
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
245
232
  }
@@ -28,30 +28,14 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
28
28
  import { withErrorHandling } from "@getstrata/core/http/response";
29
29
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
30
30
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
31
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
31
32
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
32
33
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
34
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
33
35
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
34
36
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
35
37
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
36
38
 
37
- // ../../src/config/frontend.ts
38
- function readFrontendMode() {
39
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
40
- if (mode === "server-htmx") {
41
- return "server-htmx";
42
- }
43
- if (mode === "spa-react") {
44
- return "spa-react";
45
- }
46
- return "api";
47
- }
48
- function isViewsEnabled() {
49
- return readFrontendMode() === "server-htmx";
50
- }
51
- function isSpaEnabled() {
52
- return readFrontendMode() === "spa-react";
53
- }
54
-
55
39
  // ../../src/config/rateLimit.ts
56
40
  var LOCAL_LOGIN_RATE_LIMIT = {
57
41
  maxAttempts: 100,
@@ -243,6 +227,9 @@ class HttpKernel {
243
227
  wrapLogin(handler) {
244
228
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
245
229
  }
230
+ wrapSigned(handler) {
231
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
232
+ }
246
233
  wrapRegister(handler) {
247
234
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
248
235
  }
@@ -177,14 +177,28 @@ var appConfig = {
177
177
  apiPrefix: process.env.API_PREFIX ?? "/api/v1"
178
178
  };
179
179
 
180
- // ../../src/config/queue.ts
181
- import { DEFAULT_QUEUE_DRIVER as DEFAULT_QUEUE_DRIVER2 } from "@getstrata/bootstrap/config";
180
+ // ../../src/core/queue/queueConfig.ts
181
+ function resolveQueueConfig() {
182
+ const driver = process.env.QUEUE_DRIVER;
183
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
184
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
185
+ return {
186
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
187
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
188
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
189
+ };
190
+ }
182
191
  var queueConfig = {
183
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER2,
184
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
185
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
192
+ get driver() {
193
+ return resolveQueueConfig().driver;
194
+ },
195
+ get maxAttempts() {
196
+ return resolveQueueConfig().maxAttempts;
197
+ },
198
+ get backoffMs() {
199
+ return resolveQueueConfig().backoffMs;
200
+ }
186
201
  };
187
-
188
202
  // ../../src/bootstrap/env.ts
189
203
  import { defineEnvSchema } from "@getstrata/core/config/envSchema";
190
204
  var appEnvSchema = defineEnvSchema({
@@ -462,6 +476,7 @@ var storage_default = storageProvider;
462
476
 
463
477
  // ../../src/bootstrap/providers/view.ts
464
478
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
479
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
465
480
  import {
466
481
  configureWebErrorView,
467
482
  DEFAULT_VIEWS_DIRECTORY,
@@ -469,26 +484,6 @@ import {
469
484
  errorTemplateName,
470
485
  resolveWebLayoutData
471
486
  } from "@getstrata/core/view";
472
-
473
- // ../../src/config/frontend.ts
474
- function readFrontendMode() {
475
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
476
- if (mode === "server-htmx") {
477
- return "server-htmx";
478
- }
479
- if (mode === "spa-react") {
480
- return "spa-react";
481
- }
482
- return "api";
483
- }
484
- function isViewsEnabled() {
485
- return readFrontendMode() === "server-htmx";
486
- }
487
- function isSpaEnabled() {
488
- return readFrontendMode() === "spa-react";
489
- }
490
-
491
- // ../../src/bootstrap/providers/view.ts
492
487
  var CORE_VIEW_TOKEN = "core.view";
493
488
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
494
489
  var viewProvider = {
@@ -4,6 +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 { isSpaEnabled as isSpaEnabled2, isViewsEnabled as isViewsEnabled3 } from "@getstrata/core/runtime/frontendMode";
7
8
  import { notFoundHtmlResponse as notFoundHtmlResponse2 } from "@getstrata/core/view";
8
9
 
9
10
  // ../../index.html
@@ -39,24 +40,6 @@ function isFeatureEnabled(feature) {
39
40
  return readFeatureFlags()[feature];
40
41
  }
41
42
 
42
- // ../../src/config/frontend.ts
43
- function readFrontendMode() {
44
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
45
- if (mode === "server-htmx") {
46
- return "server-htmx";
47
- }
48
- if (mode === "spa-react") {
49
- return "spa-react";
50
- }
51
- return "api";
52
- }
53
- function isViewsEnabled() {
54
- return readFrontendMode() === "server-htmx";
55
- }
56
- function isSpaEnabled() {
57
- return readFrontendMode() === "spa-react";
58
- }
59
-
60
43
  // ../../src/bootstrap/buildModuleRoutes.ts
61
44
  import { conditionalJsonResponse } from "@getstrata/core/http/conditionalResponse";
62
45
  import { applyMiddlewareToRoutes } from "@getstrata/core/http/middleware";
@@ -81,8 +64,10 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
81
64
  import { withErrorHandling } from "@getstrata/core/http/response";
82
65
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
83
66
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
67
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
84
68
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
85
69
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
70
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
86
71
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
87
72
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
88
73
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
@@ -278,6 +263,9 @@ class HttpKernel {
278
263
  wrapLogin(handler) {
279
264
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
280
265
  }
266
+ wrapSigned(handler) {
267
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
268
+ }
281
269
  wrapRegister(handler) {
282
270
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
283
271
  }
@@ -472,6 +460,7 @@ function buildModuleRoutes(dependencies, options = {}) {
472
460
  // ../../src/bootstrap/createSpaRoutes.ts
473
461
  import { join as join2 } from "path";
474
462
  import { jsonResponse } from "@getstrata/core/http/response";
463
+ import { isSpaEnabled } from "@getstrata/core/runtime/frontendMode";
475
464
  var SPA_DIST_DIRECTORY = join2(process.cwd(), "frontend/dist");
476
465
  var SPA_INDEX_FILE = join2(SPA_DIST_DIRECTORY, "index.html");
477
466
  function createSpaRoutes(_dependencies) {
@@ -508,6 +497,7 @@ function mergeSpaRoutes(dependencies, routes) {
508
497
 
509
498
  // ../../src/bootstrap/createWebRoutes.ts
510
499
  import { join as join3 } from "path";
500
+ import { isViewsEnabled as isViewsEnabled2 } from "@getstrata/core/runtime/frontendMode";
511
501
  import { notFoundHtmlResponse } from "@getstrata/core/view";
512
502
 
513
503
  // ../../src/bootstrap/buildWebModuleRoutes.ts
@@ -559,7 +549,7 @@ function createWebRoutes(dependencies) {
559
549
  return wrappedRoutes;
560
550
  }
561
551
  function mergeWebRoutes(dependencies, routes) {
562
- if (!isViewsEnabled()) {
552
+ if (!isViewsEnabled2()) {
563
553
  return routes;
564
554
  }
565
555
  return {
@@ -751,7 +741,7 @@ function assertScimIfMatch(request, etagSource) {
751
741
  }
752
742
 
753
743
  // ../../src/modules/scim/service.ts
754
- import { hashPassword as hashPassword2 } from "@getstrata/core/auth/password";
744
+ import { hashPassword as hashPassword3 } from "@getstrata/core/auth/password";
755
745
  import { resolveService } from "@getstrata/core/contracts/di";
756
746
  import { NotFoundError as NotFoundError4 } from "@getstrata/core/errors/http";
757
747
  import { currentTenantId as currentTenantId4 } from "@getstrata/core/tenant/tenantContext";
@@ -1013,7 +1003,7 @@ var apiTokenTable = defineTable2({
1013
1003
  });
1014
1004
 
1015
1005
  // ../../src/modules/user/authService.ts
1016
- import { verifyPassword } from "@getstrata/core/auth/password";
1006
+ import { hashPassword, verifyPassword } from "@getstrata/core/auth/password";
1017
1007
  import { protectMfaSecret, revealMfaSecret } from "@getstrata/core/crypto/mfaSecret";
1018
1008
  import { UnauthorizedError, ValidationError } from "@getstrata/core/errors/http";
1019
1009
  import { logSecurityEvent } from "@getstrata/core/security/securityEvents";
@@ -1076,7 +1066,7 @@ var oauthIdentityTable = defineTable4({
1076
1066
  });
1077
1067
 
1078
1068
  // ../../src/modules/user/passwordResetService.ts
1079
- import { hashPassword } from "@getstrata/core/auth/password";
1069
+ import { hashPassword as hashPassword2 } from "@getstrata/core/auth/password";
1080
1070
  import { hashApiToken } from "@getstrata/core/auth/tokenHash";
1081
1071
  import { repositoryConnection as db2 } from "@getstrata/core/database/repositoryConnection";
1082
1072
  import { ValidationError as ValidationError2 } from "@getstrata/core/errors/http";
@@ -1189,7 +1179,7 @@ class ScimService {
1189
1179
  if (!email) {
1190
1180
  throw new Error("SCIM userName or email is required.");
1191
1181
  }
1192
- const passwordHash = await hashPassword2(crypto.randomUUID());
1182
+ const passwordHash = await hashPassword3(crypto.randomUUID());
1193
1183
  const user = await this.users.create({
1194
1184
  name: payload.name?.formatted ?? email.split("@")[0] ?? "SCIM User",
1195
1185
  email,
@@ -1432,7 +1422,7 @@ function createRoutes(dependencies) {
1432
1422
  ...healthRoutes,
1433
1423
  ...metricsRoutes,
1434
1424
  ...scimRoutes,
1435
- ...isViewsEnabled() || isSpaEnabled() ? {} : { "/": strata_default },
1425
+ ...isViewsEnabled3() || isSpaEnabled2() ? {} : { "/": strata_default },
1436
1426
  ...wrappedModuleRoutes,
1437
1427
  [`${appConfig.apiPrefix}/*`]: async () => {
1438
1428
  registerRoute2("GET", `${appConfig.apiPrefix}/*`, ["global", "api"]);
@@ -1440,10 +1430,10 @@ function createRoutes(dependencies) {
1440
1430
  },
1441
1431
  "/*": async () => {
1442
1432
  registerRoute2("GET", "/*", []);
1443
- if (isViewsEnabled()) {
1433
+ if (isViewsEnabled3()) {
1444
1434
  return notFoundHtmlResponse2();
1445
1435
  }
1446
- if (isSpaEnabled()) {
1436
+ if (isSpaEnabled2()) {
1447
1437
  return jsonResponse4({ error: "Not Found" }, { status: 404 });
1448
1438
  }
1449
1439
  return jsonResponse4({ error: "Not Found" }, { status: 404 });
@@ -4,26 +4,7 @@ var __jsonParse = (a) => JSON.parse(a);
4
4
  // ../../src/bootstrap/createSpaRoutes.ts
5
5
  import { join } from "path";
6
6
  import { jsonResponse } from "@getstrata/core/http/response";
7
-
8
- // ../../src/config/frontend.ts
9
- function readFrontendMode() {
10
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
11
- if (mode === "server-htmx") {
12
- return "server-htmx";
13
- }
14
- if (mode === "spa-react") {
15
- return "spa-react";
16
- }
17
- return "api";
18
- }
19
- function isViewsEnabled() {
20
- return readFrontendMode() === "server-htmx";
21
- }
22
- function isSpaEnabled() {
23
- return readFrontendMode() === "spa-react";
24
- }
25
-
26
- // ../../src/bootstrap/createSpaRoutes.ts
7
+ import { isSpaEnabled } from "@getstrata/core/runtime/frontendMode";
27
8
  var SPA_DIST_DIRECTORY = join(process.cwd(), "frontend/dist");
28
9
  var SPA_INDEX_FILE = join(SPA_DIST_DIRECTORY, "index.html");
29
10
  function createSpaRoutes(_dependencies) {
@@ -3,26 +3,9 @@ var __jsonParse = (a) => JSON.parse(a);
3
3
 
4
4
  // ../../src/bootstrap/createWebRoutes.ts
5
5
  import { join as join2 } from "path";
6
+ import { isViewsEnabled as isViewsEnabled2 } from "@getstrata/core/runtime/frontendMode";
6
7
  import { notFoundHtmlResponse } from "@getstrata/core/view";
7
8
 
8
- // ../../src/config/frontend.ts
9
- function readFrontendMode() {
10
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
11
- if (mode === "server-htmx") {
12
- return "server-htmx";
13
- }
14
- if (mode === "spa-react") {
15
- return "spa-react";
16
- }
17
- return "api";
18
- }
19
- function isViewsEnabled() {
20
- return readFrontendMode() === "server-htmx";
21
- }
22
- function isSpaEnabled() {
23
- return readFrontendMode() === "spa-react";
24
- }
25
-
26
9
  // ../../src/bootstrap/buildWebModuleRoutes.ts
27
10
  import { applyMiddlewareToRoutes as applyMiddlewareToRoutes2 } from "@getstrata/core/http/middleware";
28
11
 
@@ -50,8 +33,10 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
50
33
  import { withErrorHandling } from "@getstrata/core/http/response";
51
34
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
52
35
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
36
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
53
37
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
54
38
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
39
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
55
40
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
56
41
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
57
42
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
@@ -247,6 +232,9 @@ class HttpKernel {
247
232
  wrapLogin(handler) {
248
233
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
249
234
  }
235
+ wrapSigned(handler) {
236
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
237
+ }
250
238
  wrapRegister(handler) {
251
239
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
252
240
  }
@@ -486,7 +474,7 @@ function createWebRoutes(dependencies) {
486
474
  return wrappedRoutes;
487
475
  }
488
476
  function mergeWebRoutes(dependencies, routes) {
489
- if (!isViewsEnabled()) {
477
+ if (!isViewsEnabled2()) {
490
478
  return routes;
491
479
  }
492
480
  return {
@@ -177,14 +177,28 @@ var appConfig = {
177
177
  apiPrefix: process.env.API_PREFIX ?? "/api/v1"
178
178
  };
179
179
 
180
- // ../../src/config/queue.ts
181
- import { DEFAULT_QUEUE_DRIVER as DEFAULT_QUEUE_DRIVER2 } from "@getstrata/bootstrap/config";
180
+ // ../../src/core/queue/queueConfig.ts
181
+ function resolveQueueConfig() {
182
+ const driver = process.env.QUEUE_DRIVER;
183
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
184
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
185
+ return {
186
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
187
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
188
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
189
+ };
190
+ }
182
191
  var queueConfig = {
183
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER2,
184
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
185
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
192
+ get driver() {
193
+ return resolveQueueConfig().driver;
194
+ },
195
+ get maxAttempts() {
196
+ return resolveQueueConfig().maxAttempts;
197
+ },
198
+ get backoffMs() {
199
+ return resolveQueueConfig().backoffMs;
200
+ }
186
201
  };
187
-
188
202
  // ../../src/bootstrap/env.ts
189
203
  import { defineEnvSchema } from "@getstrata/core/config/envSchema";
190
204
  var appEnvSchema = defineEnvSchema({
@@ -462,6 +476,7 @@ var storage_default = storageProvider;
462
476
 
463
477
  // ../../src/bootstrap/providers/view.ts
464
478
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
479
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
465
480
  import {
466
481
  configureWebErrorView,
467
482
  DEFAULT_VIEWS_DIRECTORY,
@@ -469,26 +484,6 @@ import {
469
484
  errorTemplateName,
470
485
  resolveWebLayoutData
471
486
  } from "@getstrata/core/view";
472
-
473
- // ../../src/config/frontend.ts
474
- function readFrontendMode() {
475
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
476
- if (mode === "server-htmx") {
477
- return "server-htmx";
478
- }
479
- if (mode === "spa-react") {
480
- return "spa-react";
481
- }
482
- return "api";
483
- }
484
- function isViewsEnabled() {
485
- return readFrontendMode() === "server-htmx";
486
- }
487
- function isSpaEnabled() {
488
- return readFrontendMode() === "spa-react";
489
- }
490
-
491
- // ../../src/bootstrap/providers/view.ts
492
487
  var CORE_VIEW_TOKEN = "core.view";
493
488
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
494
489
  var viewProvider = {
@@ -21,30 +21,14 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
21
21
  import { withErrorHandling } from "@getstrata/core/http/response";
22
22
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
23
23
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
24
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
24
25
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
25
26
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
27
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
26
28
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
27
29
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
28
30
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
29
31
 
30
- // ../../src/config/frontend.ts
31
- function readFrontendMode() {
32
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
33
- if (mode === "server-htmx") {
34
- return "server-htmx";
35
- }
36
- if (mode === "spa-react") {
37
- return "spa-react";
38
- }
39
- return "api";
40
- }
41
- function isViewsEnabled() {
42
- return readFrontendMode() === "server-htmx";
43
- }
44
- function isSpaEnabled() {
45
- return readFrontendMode() === "spa-react";
46
- }
47
-
48
32
  // ../../src/config/rateLimit.ts
49
33
  var LOCAL_LOGIN_RATE_LIMIT = {
50
34
  maxAttempts: 100,
@@ -236,6 +220,9 @@ class HttpKernel {
236
220
  wrapLogin(handler) {
237
221
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
238
222
  }
223
+ wrapSigned(handler) {
224
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
225
+ }
239
226
  wrapRegister(handler) {
240
227
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
241
228
  }
@@ -3,6 +3,7 @@ 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 { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
6
7
  import {
7
8
  configureWebErrorView,
8
9
  DEFAULT_VIEWS_DIRECTORY,
@@ -10,26 +11,6 @@ import {
10
11
  errorTemplateName,
11
12
  resolveWebLayoutData
12
13
  } from "@getstrata/core/view";
13
-
14
- // ../../src/config/frontend.ts
15
- function readFrontendMode() {
16
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
17
- if (mode === "server-htmx") {
18
- return "server-htmx";
19
- }
20
- if (mode === "spa-react") {
21
- return "spa-react";
22
- }
23
- return "api";
24
- }
25
- function isViewsEnabled() {
26
- return readFrontendMode() === "server-htmx";
27
- }
28
- function isSpaEnabled() {
29
- return readFrontendMode() === "spa-react";
30
- }
31
-
32
- // ../../src/bootstrap/providers/view.ts
33
14
  var CORE_VIEW_TOKEN = "core.view";
34
15
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
35
16
  var viewProvider = {
@@ -88,14 +88,28 @@ var appConfig = {
88
88
  apiPrefix: process.env.API_PREFIX ?? "/api/v1"
89
89
  };
90
90
 
91
- // ../../src/config/queue.ts
92
- import { DEFAULT_QUEUE_DRIVER as DEFAULT_QUEUE_DRIVER2 } from "@getstrata/bootstrap/config";
91
+ // ../../src/core/queue/queueConfig.ts
92
+ function resolveQueueConfig() {
93
+ const driver = process.env.QUEUE_DRIVER;
94
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
95
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
96
+ return {
97
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
98
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
99
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
100
+ };
101
+ }
93
102
  var queueConfig = {
94
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER2,
95
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
96
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
103
+ get driver() {
104
+ return resolveQueueConfig().driver;
105
+ },
106
+ get maxAttempts() {
107
+ return resolveQueueConfig().maxAttempts;
108
+ },
109
+ get backoffMs() {
110
+ return resolveQueueConfig().backoffMs;
111
+ }
97
112
  };
98
-
99
113
  // ../../src/bootstrap/env.ts
100
114
  import { defineEnvSchema } from "@getstrata/core/config/envSchema";
101
115
  var appEnvSchema = defineEnvSchema({
@@ -452,6 +466,7 @@ var storage_default = storageProvider;
452
466
 
453
467
  // ../../src/bootstrap/providers/view.ts
454
468
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
469
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
455
470
  import {
456
471
  configureWebErrorView,
457
472
  DEFAULT_VIEWS_DIRECTORY,
@@ -459,26 +474,6 @@ import {
459
474
  errorTemplateName,
460
475
  resolveWebLayoutData
461
476
  } from "@getstrata/core/view";
462
-
463
- // ../../src/config/frontend.ts
464
- function readFrontendMode() {
465
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
466
- if (mode === "server-htmx") {
467
- return "server-htmx";
468
- }
469
- if (mode === "spa-react") {
470
- return "spa-react";
471
- }
472
- return "api";
473
- }
474
- function isViewsEnabled() {
475
- return readFrontendMode() === "server-htmx";
476
- }
477
- function isSpaEnabled() {
478
- return readFrontendMode() === "spa-react";
479
- }
480
-
481
- // ../../src/bootstrap/providers/view.ts
482
477
  var CORE_VIEW_TOKEN = "core.view";
483
478
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
484
479
  var viewProvider = {
@@ -30,30 +30,14 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
30
30
  import { withErrorHandling } from "@getstrata/core/http/response";
31
31
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
32
32
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
33
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
33
34
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
34
35
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
36
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
35
37
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
36
38
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
37
39
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
38
40
 
39
- // ../../src/config/frontend.ts
40
- function readFrontendMode() {
41
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
42
- if (mode === "server-htmx") {
43
- return "server-htmx";
44
- }
45
- if (mode === "spa-react") {
46
- return "spa-react";
47
- }
48
- return "api";
49
- }
50
- function isViewsEnabled() {
51
- return readFrontendMode() === "server-htmx";
52
- }
53
- function isSpaEnabled() {
54
- return readFrontendMode() === "spa-react";
55
- }
56
-
57
41
  // ../../src/config/rateLimit.ts
58
42
  var LOCAL_LOGIN_RATE_LIMIT = {
59
43
  maxAttempts: 100,
@@ -245,6 +229,9 @@ class HttpKernel {
245
229
  wrapLogin(handler) {
246
230
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
247
231
  }
232
+ wrapSigned(handler) {
233
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
234
+ }
248
235
  wrapRegister(handler) {
249
236
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
250
237
  }
package/dist/index.js CHANGED
@@ -38,27 +38,14 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
38
38
  import { withErrorHandling } from "@getstrata/core/http/response";
39
39
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
40
40
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
41
+ import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
41
42
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
42
43
  import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
44
+ import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
43
45
  import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
44
46
  import { createTenantMiddleware } from "@getstrata/core/tenant/tenantMiddleware";
45
47
  import { createTracingMiddleware } from "@getstrata/core/tracing/tracingMiddleware";
46
48
 
47
- // ../../src/config/frontend.ts
48
- function readFrontendMode() {
49
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
50
- if (mode === "server-htmx") {
51
- return "server-htmx";
52
- }
53
- if (mode === "spa-react") {
54
- return "spa-react";
55
- }
56
- return "api";
57
- }
58
- function isViewsEnabled() {
59
- return readFrontendMode() === "server-htmx";
60
- }
61
-
62
49
  // ../../src/config/rateLimit.ts
63
50
  var LOCAL_LOGIN_RATE_LIMIT = {
64
51
  maxAttempts: 100,
@@ -249,6 +236,9 @@ class HttpKernel {
249
236
  wrapLogin(handler) {
250
237
  return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
251
238
  }
239
+ wrapSigned(handler) {
240
+ return withMiddleware(createValidateSignatureMiddleware())(handler);
241
+ }
252
242
  wrapRegister(handler) {
253
243
  return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
254
244
  }
@@ -538,13 +528,28 @@ var appConfig = {
538
528
  apiPrefix: process.env.API_PREFIX ?? "/api/v1"
539
529
  };
540
530
 
541
- // ../../src/config/queue.ts
531
+ // ../../src/core/queue/queueConfig.ts
532
+ function resolveQueueConfig() {
533
+ const driver = process.env.QUEUE_DRIVER;
534
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
535
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
536
+ return {
537
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
538
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
539
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
540
+ };
541
+ }
542
542
  var queueConfig = {
543
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
544
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
545
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
543
+ get driver() {
544
+ return resolveQueueConfig().driver;
545
+ },
546
+ get maxAttempts() {
547
+ return resolveQueueConfig().maxAttempts;
548
+ },
549
+ get backoffMs() {
550
+ return resolveQueueConfig().backoffMs;
551
+ }
546
552
  };
547
-
548
553
  // ../../src/bootstrap/env.ts
549
554
  import { defineEnvSchema } from "@getstrata/core/config/envSchema";
550
555
  var appEnvSchema = defineEnvSchema({
@@ -808,6 +813,7 @@ var storage_default = storageProvider;
808
813
 
809
814
  // ../../src/bootstrap/providers/view.ts
810
815
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
816
+ import { isViewsEnabled as isViewsEnabled2 } from "@getstrata/core/runtime/frontendMode";
811
817
  import {
812
818
  configureWebErrorView,
813
819
  DEFAULT_VIEWS_DIRECTORY,
@@ -820,7 +826,7 @@ var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
820
826
  var viewProvider = {
821
827
  name: "view",
822
828
  register({ container, config }) {
823
- if (!isViewsEnabled()) {
829
+ if (!isViewsEnabled2()) {
824
830
  return;
825
831
  }
826
832
  const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
@@ -884,6 +890,7 @@ function createAppContext() {
884
890
  }
885
891
  // ../../src/bootstrap/createWebRoutes.ts
886
892
  import { join as join3 } from "path";
893
+ import { isViewsEnabled as isViewsEnabled3 } from "@getstrata/core/runtime/frontendMode";
887
894
  import { notFoundHtmlResponse } from "@getstrata/core/view";
888
895
  function registerRoute(method, path, middleware) {
889
896
  routeRegistry.register({ method, path, middleware });
@@ -910,7 +917,7 @@ function createWebRoutes(dependencies) {
910
917
  return wrappedRoutes;
911
918
  }
912
919
  function mergeWebRoutes(dependencies, routes) {
913
- if (!isViewsEnabled()) {
920
+ if (!isViewsEnabled3()) {
914
921
  return routes;
915
922
  }
916
923
  return {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/bootstrap",
3
- "version": "0.2.53",
3
+ "version": "0.2.55",
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/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/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/dispatchWebhookJob --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/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/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/dispatchWebhookJob --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/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.62",
183
+ "@getstrata/core": "^0.5.68",
184
184
  "typescript": "^5.9.0"
185
185
  }
186
186
  }