@getstrata/bootstrap 0.2.47 → 0.2.49

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
@@ -1,96 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/bootstrap/public-api.ts
3
- import { appSchedule as appSchedule3, runDueScheduledTasks as runDueScheduledTasks2, Schedule as Schedule2 } from "@getstrata/core/scheduler/schedule";
3
+ import { appSchedule, runDueScheduledTasks, Schedule } from "@getstrata/core/scheduler/schedule";
4
4
 
5
- // ../../src/core/scheduler/schedule.ts
6
- class Schedule {
7
- tasks = [];
8
- command(expression, name, run) {
9
- this.tasks.push({ expression, name, run });
10
- return this;
11
- }
12
- dueTasks(now = new Date) {
13
- const minute = now.getMinutes();
14
- return this.tasks.filter((task) => {
15
- if (task.expression === "* * * * *") {
16
- return true;
17
- }
18
- if (task.expression.startsWith("*/")) {
19
- const interval = Number.parseInt(task.expression.slice(2), 10);
20
- return Number.isInteger(interval) && interval > 0 && minute % interval === 0;
21
- }
22
- return false;
23
- });
24
- }
25
- tasksList() {
26
- return [...this.tasks];
27
- }
28
- }
29
- var appSchedule = new Schedule;
30
- async function runDueScheduledTasks(schedule = appSchedule, now = new Date) {
31
- const due = schedule.dueTasks(now);
32
- for (const task of due) {
33
- await task.run();
34
- }
35
- return due.length;
36
- }
37
-
38
- // ../../src/bootstrap/schedule.ts
39
- import { exportPendingAuditLogs } from "@getstrata/core/audit/exportAuditLogs";
40
- import { appLogger } from "@getstrata/core/logging/logger";
41
- import { appSchedule as appSchedule2 } from "@getstrata/core/scheduler/schedule";
42
-
43
- // ../../src/config/features.ts
44
- function readFeatureFlags() {
45
- return {
46
- webhooks: (process.env.FEATURE_WEBHOOKS ?? "true") !== "false",
47
- fullTextSearch: (process.env.FEATURE_SEARCH ?? "true") !== "false",
48
- auditLog: (process.env.FEATURE_AUDIT_LOG ?? "true") !== "false",
49
- oauthLogin: (process.env.FEATURE_OAUTH ?? "true") !== "false",
50
- samlLogin: (process.env.FEATURE_SAML ?? "false") === "true",
51
- scim: (process.env.FEATURE_SCIM ?? "true") !== "false",
52
- billing: (process.env.FEATURE_BILLING ?? "true") !== "false",
53
- siemExport: (process.env.FEATURE_SIEM_EXPORT ?? "true") !== "false",
54
- publicReads: (process.env.FEATURE_PUBLIC_READS ?? "true") !== "false",
55
- emailVerification: (process.env.FEATURE_EMAIL_VERIFICATION ?? "false") === "true",
56
- mfa: (process.env.FEATURE_MFA ?? "false") === "true"
57
- };
58
- }
59
- var featureFlags = readFeatureFlags();
60
- function isFeatureEnabled(feature) {
61
- return readFeatureFlags()[feature];
62
- }
63
-
64
- // ../../src/bootstrap/schedule.ts
65
- appSchedule2.command("* * * * *", "heartbeat", () => {
66
- appLogger.debug("Scheduler heartbeat");
67
- });
68
- appSchedule2.command("* * * * *", "audit-export", async () => {
69
- if (!isFeatureEnabled("siemExport")) {
70
- return;
71
- }
72
- try {
73
- const exported = await exportPendingAuditLogs();
74
- if (exported > 0) {
75
- appLogger.info(`Exported ${exported} audit log entries to SIEM.`);
76
- }
77
- } catch (error) {
78
- appLogger.error("Audit export failed.", { error: String(error) });
79
- }
80
- });
81
-
82
- // ../../src/cli/commands/scheduleRun.ts
83
- async function scheduleRunCommand() {
84
- const due = appSchedule.dueTasks();
85
- if (due.length === 0) {
86
- console.log("No scheduled tasks due.");
87
- return;
88
- }
89
- for (const task of due) {
90
- console.log(`Running scheduled task: ${task.name}`);
91
- }
92
- await runDueScheduledTasks(appSchedule);
93
- }
94
5
  // ../../src/bootstrap/applicationRegistry.ts
95
6
  import {
96
7
  resolveApplicationAuth,
@@ -123,6 +34,7 @@ import { createRequireAbilityMiddleware } from "@getstrata/core/http/requireAbil
123
34
  import { createRequireAuthMiddleware } from "@getstrata/core/http/requireAuthMiddleware";
124
35
  import { createRequireGlobalAdminMiddleware } from "@getstrata/core/http/requireGlobalAdminMiddleware";
125
36
  import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebAuthMiddleware";
37
+ import { withErrorHandling } from "@getstrata/core/http/response";
126
38
  import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
127
39
  import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
128
40
  import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
@@ -271,7 +183,7 @@ class HttpKernel {
271
183
  return this.wrap(["api", "authenticated"], handler);
272
184
  }
273
185
  wrapWeb(handler) {
274
- return handler;
186
+ return withErrorHandling(this.wrap("web", handler));
275
187
  }
276
188
  wrapWebPublicRead(handler) {
277
189
  if (isPublicReadsEnabled()) {
@@ -281,19 +193,19 @@ class HttpKernel {
281
193
  }
282
194
  wrapWebAuthenticated(handler) {
283
195
  const auth = this.dependencies.container.resolve(CORE_AUTH_TOKEN);
284
- return withMiddleware(createRequireWebAuthMiddleware(auth))(handler);
196
+ return this.wrapWeb(withMiddleware(createRequireWebAuthMiddleware(auth))(handler));
285
197
  }
286
198
  wrapWebAbility(ability, handler) {
287
199
  const auth = this.dependencies.container.resolve(CORE_AUTH_TOKEN);
288
200
  const abilityChecker = this.dependencies.container.resolve(CORE_TOKEN_SERVICE_TOKEN);
289
201
  const requireAbility = createRequireAbilityMiddleware(abilityChecker);
290
202
  const middleware = [createRequireWebAuthMiddleware(auth), requireAbility(ability)];
291
- return withMiddleware(...middleware)(handler);
203
+ return this.wrapWeb(withMiddleware(...middleware)(handler));
292
204
  }
293
205
  wrapWebGlobalAdmin(handler) {
294
206
  const auth = this.dependencies.container.resolve(CORE_AUTH_TOKEN);
295
207
  const middleware = [createRequireWebAuthMiddleware(auth), createRequireGlobalAdminMiddleware()];
296
- return withMiddleware(...middleware)(handler);
208
+ return this.wrapWeb(withMiddleware(...middleware)(handler));
297
209
  }
298
210
  wrapAuthenticated(handler) {
299
211
  return this.wrap("authenticated", handler);
@@ -392,7 +304,7 @@ function resolveModulesDirectory(options) {
392
304
  if (state.configuredModulesDir) {
393
305
  return state.configuredModulesDir;
394
306
  }
395
- return join(import.meta.dir, "../modules");
307
+ throw new Error("configureModulesDirectory() must be called before discovering modules. WorkHub and the starter do this from preload.");
396
308
  }
397
309
  async function loadDiscoveredModules(options) {
398
310
  const modulesDirectory = resolveModulesDirectory(options);
@@ -514,7 +426,7 @@ function buildWebModuleRoutes(dependencies, options = {}) {
514
426
  routeRegistry.clear();
515
427
  }
516
428
  const kernel = createHttpKernel(dependencies);
517
- const middleware = [...kernel.globalMiddleware(), ...kernel.group("web")];
429
+ const middleware = kernel.globalMiddleware();
518
430
  const moduleRoutes = { ...seedRoutes };
519
431
  for (const module of modules) {
520
432
  if (!module.webRoutes) {
@@ -907,64 +819,6 @@ var coreProviders = [
907
819
  viewProvider
908
820
  ];
909
821
 
910
- // ../../src/domain/auth.ts
911
- var TEST_ADMIN_API_TOKEN = "workhub-admin-test-token";
912
- var TEST_MEMBER_API_TOKEN = "workhub-member-test-token";
913
-
914
- // ../../src/domain/scim.ts
915
- var TEST_SCIM_BEARER_TOKEN = "workhub-scim-test-token";
916
- var DEFAULT_SCIM_BEARER_TOKEN = TEST_SCIM_BEARER_TOKEN;
917
-
918
- // ../../src/bootstrap/secretsGuard.ts
919
- var DEFAULT_TOKENS = new Set([TEST_ADMIN_API_TOKEN, TEST_MEMBER_API_TOKEN]);
920
- var DEFAULT_SCIM_TOKENS = new Set([TEST_SCIM_BEARER_TOKEN, DEFAULT_SCIM_BEARER_TOKEN]);
921
- function assertProductionSecrets(env = process.env) {
922
- const appEnv = env.APP_ENV ?? appConfig.env;
923
- if (appEnv !== "production") {
924
- return;
925
- }
926
- const adminToken = env.ADMIN_API_TOKEN ?? TEST_ADMIN_API_TOKEN;
927
- const memberToken = env.MEMBER_API_TOKEN ?? TEST_MEMBER_API_TOKEN;
928
- const scimToken = env.SCIM_BEARER_TOKEN ?? DEFAULT_SCIM_BEARER_TOKEN;
929
- const encryptionEnabled = env.FEATURE_FIELD_ENCRYPTION !== "false";
930
- const devHeadersEnabled = (env.AUTH_DEV_HEADERS ?? "true") !== "false";
931
- if (devHeadersEnabled) {
932
- throw new Error("Production startup blocked: set AUTH_DEV_HEADERS=false to disable development auth headers.");
933
- }
934
- if (DEFAULT_TOKENS.has(adminToken) || DEFAULT_TOKENS.has(memberToken)) {
935
- throw new Error("Production startup blocked: rotate ADMIN_API_TOKEN and MEMBER_API_TOKEN away from default WorkHub test values.");
936
- }
937
- if (DEFAULT_SCIM_TOKENS.has(scimToken)) {
938
- throw new Error("Production startup blocked: rotate SCIM_BEARER_TOKEN away from default WorkHub test values.");
939
- }
940
- if (encryptionEnabled && !env.KMS_ENCRYPTION_KEY?.trim()) {
941
- throw new Error("Production startup blocked: set KMS_ENCRYPTION_KEY when field encryption is enabled.");
942
- }
943
- if (!env.SIEM_EXPORT_URL?.trim() && isFeatureEnabled("siemExport")) {
944
- console.warn("[secrets] SIEM_EXPORT_URL is not configured; audit logs remain database-only.");
945
- }
946
- const billingEnabled = (env.FEATURE_BILLING ?? "true") !== "false";
947
- if (billingEnabled && !env.STRIPE_WEBHOOK_SECRET?.trim()) {
948
- throw new Error("Production startup blocked: set STRIPE_WEBHOOK_SECRET when billing webhooks are enabled.");
949
- }
950
- const corsOrigins = (env.CORS_ALLOWED_ORIGINS ?? "*").split(",").map((origin) => origin.trim());
951
- if (corsOrigins.includes("*")) {
952
- throw new Error("Production startup blocked: set explicit CORS_ALLOWED_ORIGINS instead of wildcard.");
953
- }
954
- if ((env.FEATURE_PUBLIC_READS ?? "true") !== "false") {
955
- throw new Error("Production startup blocked: set FEATURE_PUBLIC_READS=false for authenticated-only reads.");
956
- }
957
- if (!env.OAUTH_STATE_SECRET?.trim()) {
958
- throw new Error("Production startup blocked: set OAUTH_STATE_SECRET for OAuth CSRF protection.");
959
- }
960
- if (!env.TOKEN_HASH_PEPPER?.trim()) {
961
- throw new Error("Production startup blocked: set TOKEN_HASH_PEPPER for API token hashing.");
962
- }
963
- if (!env.API_TOKEN_DEFAULT_EXPIRY_DAYS?.trim()) {
964
- throw new Error("Production startup blocked: set API_TOKEN_DEFAULT_EXPIRY_DAYS to enforce token rotation.");
965
- }
966
- }
967
-
968
822
  // ../../src/bootstrap/context.ts
969
823
  function collectProviders(modules = discoverModules()) {
970
824
  return [...coreProviders, ...modules.flatMap((module) => module.providers ?? [])];
@@ -975,7 +829,6 @@ function runProviderPhase(providers, phase, context) {
975
829
  }
976
830
  }
977
831
  function createAppContext() {
978
- assertProductionSecrets();
979
832
  const container = new ServiceContainer;
980
833
  const config = new ConfigStore;
981
834
  const dependencies = {
@@ -1045,6 +898,67 @@ import {
1045
898
  } from "@getstrata/core/http/securedRouteModelBinding";
1046
899
  // ../../src/bootstrap/membershipService.ts
1047
900
  import { resolveMembershipService } from "@getstrata/core/auth/membershipService";
901
+ // ../../src/bootstrap/secretsGuard.ts
902
+ var DEFAULT_ADMIN_API_TOKEN = "workhub-admin-test-token";
903
+ var DEFAULT_MEMBER_API_TOKEN = "workhub-member-test-token";
904
+ var DEFAULT_SCIM_BEARER_TOKEN = "workhub-scim-test-token";
905
+ var DEFAULT_TOKENS = new Set([DEFAULT_ADMIN_API_TOKEN, DEFAULT_MEMBER_API_TOKEN]);
906
+ var DEFAULT_SCIM_TOKENS = new Set([DEFAULT_SCIM_BEARER_TOKEN]);
907
+ function isEnabled(value, defaultEnabled) {
908
+ if (value === undefined) {
909
+ return defaultEnabled;
910
+ }
911
+ return defaultEnabled ? value !== "false" : value === "true";
912
+ }
913
+ function assertProductionSecrets(env = process.env) {
914
+ const appEnv = env.APP_ENV ?? "local";
915
+ if (appEnv !== "production") {
916
+ return;
917
+ }
918
+ const adminToken = env.ADMIN_API_TOKEN ?? DEFAULT_ADMIN_API_TOKEN;
919
+ const memberToken = env.MEMBER_API_TOKEN ?? DEFAULT_MEMBER_API_TOKEN;
920
+ const scimToken = env.SCIM_BEARER_TOKEN ?? DEFAULT_SCIM_BEARER_TOKEN;
921
+ const encryptionEnabled = isEnabled(env.FEATURE_FIELD_ENCRYPTION, true);
922
+ const devHeadersEnabled = isEnabled(env.AUTH_DEV_HEADERS, true);
923
+ if (devHeadersEnabled) {
924
+ throw new Error("Production startup blocked: set AUTH_DEV_HEADERS=false to disable development auth headers.");
925
+ }
926
+ if (DEFAULT_TOKENS.has(adminToken) || DEFAULT_TOKENS.has(memberToken)) {
927
+ throw new Error("Production startup blocked: rotate ADMIN_API_TOKEN and MEMBER_API_TOKEN away from default WorkHub test values.");
928
+ }
929
+ if (DEFAULT_SCIM_TOKENS.has(scimToken)) {
930
+ throw new Error("Production startup blocked: rotate SCIM_BEARER_TOKEN away from default WorkHub test values.");
931
+ }
932
+ if (encryptionEnabled && !env.KMS_ENCRYPTION_KEY?.trim()) {
933
+ throw new Error("Production startup blocked: set KMS_ENCRYPTION_KEY when field encryption is enabled.");
934
+ }
935
+ if (!env.SIEM_EXPORT_URL?.trim() && isEnabled(env.FEATURE_SIEM_EXPORT, true)) {
936
+ console.warn("[secrets] SIEM_EXPORT_URL is not configured; audit logs remain database-only.");
937
+ }
938
+ if (isEnabled(env.FEATURE_BILLING, true) && !env.STRIPE_WEBHOOK_SECRET?.trim()) {
939
+ throw new Error("Production startup blocked: set STRIPE_WEBHOOK_SECRET when billing webhooks are enabled.");
940
+ }
941
+ const corsOrigins = (env.CORS_ALLOWED_ORIGINS ?? "*").split(",").map((origin) => origin.trim());
942
+ if (corsOrigins.includes("*")) {
943
+ throw new Error("Production startup blocked: set explicit CORS_ALLOWED_ORIGINS instead of wildcard.");
944
+ }
945
+ if (isEnabled(env.FEATURE_PUBLIC_READS, true)) {
946
+ throw new Error("Production startup blocked: set FEATURE_PUBLIC_READS=false for authenticated-only reads.");
947
+ }
948
+ if (!env.OAUTH_STATE_SECRET?.trim()) {
949
+ throw new Error("Production startup blocked: set OAUTH_STATE_SECRET for OAuth CSRF protection.");
950
+ }
951
+ if (!env.TOKEN_HASH_PEPPER?.trim()) {
952
+ throw new Error("Production startup blocked: set TOKEN_HASH_PEPPER for API token hashing.");
953
+ }
954
+ if (!env.API_TOKEN_DEFAULT_EXPIRY_DAYS?.trim()) {
955
+ throw new Error("Production startup blocked: set API_TOKEN_DEFAULT_EXPIRY_DAYS to enforce token rotation.");
956
+ }
957
+ const frontendMode = (env.FRONTEND_MODE ?? "api").trim();
958
+ if (frontendMode === "server-htmx" && !env.SESSION_SECRET?.trim()) {
959
+ throw new Error("Production startup blocked: set SESSION_SECRET when FRONTEND_MODE=server-htmx.");
960
+ }
961
+ }
1048
962
  // ../../src/bootstrap/web/forms.ts
1049
963
  import {
1050
964
  createCsrfProtection
@@ -1078,7 +992,7 @@ async function parseFormBody(request) {
1078
992
  return { fields, files };
1079
993
  }
1080
994
  // ../../src/bootstrap/web/routing.ts
1081
- import { withErrorHandling } from "@getstrata/core/http/response";
995
+ import { withErrorHandling as withErrorHandling2 } from "@getstrata/core/http/response";
1082
996
  function routeParams(request) {
1083
997
  const normalized = {};
1084
998
  const raw = request.params;
@@ -1100,14 +1014,14 @@ function toRouteRequest(request) {
1100
1014
  return request;
1101
1015
  }
1102
1016
  function wrapSecuredRouteModelByKey(param, resolver, authorization, handler) {
1103
- const bound = withErrorHandling(securedBindRouteModelByKey(param, resolver, authorization, handler));
1017
+ const bound = withErrorHandling2(securedBindRouteModelByKey(param, resolver, authorization, handler));
1104
1018
  return async (request) => bound(toRouteRequest(request));
1105
1019
  }
1106
1020
  function wrapWebLogin(kernel, handler, onThrottled) {
1107
- return wrapWebThrottle(kernel, "login", handler, onThrottled);
1021
+ return kernel.wrapWeb(wrapWebThrottle(kernel, "login", handler, onThrottled));
1108
1022
  }
1109
1023
  function wrapWebRegister(kernel, handler, onThrottled) {
1110
- return wrapWebThrottle(kernel, "register", handler, onThrottled);
1024
+ return kernel.wrapWeb(wrapWebThrottle(kernel, "register", handler, onThrottled));
1111
1025
  }
1112
1026
  function wrapWebThrottle(kernel, scope, handler, onThrottled) {
1113
1027
  const throttled = scope === "login" ? kernel.wrapLogin(handler) : kernel.wrapRegister(handler);
@@ -1249,66 +1163,65 @@ function slugify(value) {
1249
1163
  return value.toLowerCase().trim().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "").slice(0, 80);
1250
1164
  }
1251
1165
  export {
1252
- wrapWebRegister,
1253
- wrapWebLogin,
1254
- wrapSecuredRouteModelByKey,
1255
- toRouteRequest,
1256
- slugify,
1257
- setActiveApplicationContext,
1258
- securedBindRouteModelByKey,
1259
- securedBindRouteModel,
1260
- scheduleRunCommand,
1261
- runProviderPhase,
1262
- runDueScheduledTasks2 as runDueScheduledTasks,
1263
- routeRegistry,
1264
- routeParams,
1265
- resolveService,
1266
- resolveMembershipService,
1267
- resolveApplicationQueue,
1268
- resolveApplicationPolicyGate,
1269
- resolveApplicationLogger,
1270
- resolveApplicationEventBus,
1271
- resolveApplicationDependencies,
1272
- resolveApplicationConfig,
1273
- resolveApplicationCache,
1274
- resolveApplicationAuth,
1275
- registerDefaultJobs,
1276
- prefixRouteMap,
1277
- parseFormBody,
1278
- mergeWebRoutes,
1279
- getRequiredDependency,
1280
- ensureModulesLoaded,
1281
- discoverModules,
1282
- discoverModelTableNames,
1283
- createWebServer,
1284
- createWebRoutes,
1285
- createRouteKernel,
1286
- createHttpKernel,
1287
- createCsrfProtection,
1288
- createAppDependencies,
1289
- createAppContext,
1290
- coreProviders,
1291
- configureModulesDirectory,
1292
- collectProviders,
1293
- cacheTagsForModelWrite,
1294
- buildWebModuleRoutes,
1295
- buildModuleRoutes,
1296
- assertProductionSecrets,
1297
- assertAppDependenciesComplete,
1298
- appSchedule3 as appSchedule,
1299
- ServiceContainer,
1300
- Schedule2 as Schedule,
1301
- RouteRegistry,
1302
- REDIS_URL_CONFIG_KEY,
1303
- DEFAULT_APP_PORT,
1304
- DATABASE_URL_CONFIG_KEY,
1305
- CookieSessionStore,
1306
- CORE_TOKEN_SERVICE_TOKEN,
1307
- CORE_QUEUE_TOKEN,
1308
- CORE_POLICY_GATE_TOKEN,
1309
- CORE_EVENT_BUS_TOKEN,
1310
- CORE_CONFIG_TOKEN,
1311
- CORE_CACHE_TOKEN,
1166
+ APP_PORT_CONFIG_KEY,
1312
1167
  CORE_AUTH_TOKEN,
1313
- APP_PORT_CONFIG_KEY
1168
+ CORE_CACHE_TOKEN,
1169
+ CORE_CONFIG_TOKEN,
1170
+ CORE_EVENT_BUS_TOKEN,
1171
+ CORE_POLICY_GATE_TOKEN,
1172
+ CORE_QUEUE_TOKEN,
1173
+ CORE_TOKEN_SERVICE_TOKEN,
1174
+ CookieSessionStore,
1175
+ DATABASE_URL_CONFIG_KEY,
1176
+ DEFAULT_APP_PORT,
1177
+ REDIS_URL_CONFIG_KEY,
1178
+ RouteRegistry,
1179
+ Schedule,
1180
+ ServiceContainer,
1181
+ appSchedule,
1182
+ assertAppDependenciesComplete,
1183
+ assertProductionSecrets,
1184
+ buildModuleRoutes,
1185
+ buildWebModuleRoutes,
1186
+ cacheTagsForModelWrite,
1187
+ collectProviders,
1188
+ configureModulesDirectory,
1189
+ coreProviders,
1190
+ createAppContext,
1191
+ createAppDependencies,
1192
+ createCsrfProtection,
1193
+ createHttpKernel,
1194
+ createRouteKernel,
1195
+ createWebRoutes,
1196
+ createWebServer,
1197
+ discoverModelTableNames,
1198
+ discoverModules,
1199
+ ensureModulesLoaded,
1200
+ getRequiredDependency,
1201
+ mergeWebRoutes,
1202
+ parseFormBody,
1203
+ prefixRouteMap,
1204
+ registerDefaultJobs,
1205
+ resolveApplicationAuth,
1206
+ resolveApplicationCache,
1207
+ resolveApplicationConfig,
1208
+ resolveApplicationDependencies,
1209
+ resolveApplicationEventBus,
1210
+ resolveApplicationLogger,
1211
+ resolveApplicationPolicyGate,
1212
+ resolveApplicationQueue,
1213
+ resolveMembershipService,
1214
+ resolveService,
1215
+ routeParams,
1216
+ routeRegistry,
1217
+ runDueScheduledTasks,
1218
+ runProviderPhase,
1219
+ securedBindRouteModel,
1220
+ securedBindRouteModelByKey,
1221
+ setActiveApplicationContext,
1222
+ slugify,
1223
+ toRouteRequest,
1224
+ wrapSecuredRouteModelByKey,
1225
+ wrapWebLogin,
1226
+ wrapWebRegister
1314
1227
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/bootstrap",
3
- "version": "0.2.47",
3
+ "version": "0.2.49",
4
4
  "description": "Strata application bootstrap — HttpKernel, DI, web session helpers",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -172,14 +172,14 @@
172
172
  "build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --external @getstrata/core",
173
173
  "build:types": "tsc -p tsconfig.types.json && bun ../../scripts/prune-bootstrap-dist-types.ts",
174
174
  "prepublishOnly": "bun run build",
175
- "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/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/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/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/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/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
175
+ "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/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
176
  "build:shims": "true"
177
177
  },
178
178
  "publishConfig": {
179
179
  "access": "public"
180
180
  },
181
181
  "peerDependencies": {
182
- "@getstrata/core": "^0.5.33",
182
+ "@getstrata/core": "^0.5.58",
183
183
  "typescript": "^5.9.0"
184
184
  }
185
185
  }