@getstrata/bootstrap 2.2.11 → 2.2.13

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,15 @@
1
1
  # @getstrata/bootstrap changelog
2
2
 
3
+ ## 2.2.13
4
+
5
+ - Improve view rendering and better htmx support
6
+
7
+ ## 2.2.12
8
+
9
+ - Require Bun >=1.4.3; align CI, generated/existing example runtime pins and Docker stages to 1.4.3, with bun-types >=1.4.3 behind the official @types/bun shim.
10
+
11
+ Add identified field-encryption keyrings, reader-first email/MFA configuration, and explicit transactional maintenance rotation for ciphertext and lookup keys with durable checkpoints, RLS scopes, fresh retirement audits and backup/rollback guidance. Fix SQLite primary-key compilation for non-generated keys. Preserve legacy auth defaults; no automatic data migration.
12
+
3
13
  ## 2.2.11
4
14
 
5
15
  Add independently interruptible read-only SQLite and MySQL observations; extend bounded failed-job and outbox metrics to file-backed SQLite and URL-backed MySQL with schema/index guards, real-engine regressions and three-process consistency tests. Preserve Postgres RLS and business transaction behavior.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @getstrata/bootstrap
2
2
 
3
- Application bootstrap for [Strata](https://github.com/EyK-26/strata) apps: HttpKernel, service container, and web session helpers. Requires Bun (tested on 1.4.x).
3
+ Application bootstrap for [Strata](https://github.com/EyK-26/strata) apps: HttpKernel, service container, and web session helpers. Requires Bun >=1.4.3 (tested on 1.4.3).
4
4
 
5
5
  Generate an app rather than wiring this by hand:
6
6
 
@@ -1,5 +1,14 @@
1
+ import type { WebLayoutDataOptions } from "@getstrata/core/view";
1
2
  import type { ServiceProvider } from "../contracts";
2
3
  declare const CORE_VIEW_TOKEN = "core.view";
3
4
  declare const VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
5
+ interface ViewProviderOptions {
6
+ directory?: string;
7
+ layout?: string | false;
8
+ data?: WebLayoutDataOptions;
9
+ }
10
+ /** Per-app view configuration for generated and custom bootstraps. */
11
+ declare function createViewProvider(options?: ViewProviderOptions): ServiceProvider;
4
12
  declare const viewProvider: ServiceProvider;
5
- export { CORE_VIEW_TOKEN, VIEW_DIRECTORY_CONFIG_KEY, viewProvider };
13
+ export type { ViewProviderOptions };
14
+ export { CORE_VIEW_TOKEN, createViewProvider, VIEW_DIRECTORY_CONFIG_KEY, viewProvider };
@@ -835,15 +835,35 @@ import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
835
835
  import { appDisplayName } from "@getstrata/core/runtime/appKeyPrefix";
836
836
  import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
837
837
  import {
838
+ CORE_VIEW_RENDERER_TOKEN,
838
839
  configureWebErrorView,
839
840
  configureWebLayoutData,
841
+ createWebLayoutDataResolver,
840
842
  DEFAULT_VIEWS_DIRECTORY,
841
843
  EtaViewEngine,
842
844
  errorTemplateName,
843
- resolveWebLayoutData
845
+ resolveWebLayoutData,
846
+ ViewRenderer
844
847
  } from "@getstrata/core/view";
845
848
  var CORE_VIEW_TOKEN = "core.view";
846
849
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
850
+ function createViewProvider(options = {}) {
851
+ const directory = options.directory;
852
+ const layout = options.layout;
853
+ const data = { ...options.data };
854
+ return {
855
+ name: "view",
856
+ register({ container, config }) {
857
+ if (!isViewsEnabled())
858
+ return;
859
+ const viewsDirectory = directory ?? (process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY);
860
+ config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
861
+ const engine = new EtaViewEngine(viewsDirectory, createWebLayoutDataResolver(container, data));
862
+ container.set(CORE_VIEW_TOKEN, engine);
863
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine, layout));
864
+ }
865
+ };
866
+ }
847
867
  var viewProvider = {
848
868
  name: "view",
849
869
  register({ container, config }) {
@@ -854,6 +874,7 @@ var viewProvider = {
854
874
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
855
875
  const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
856
876
  container.set(CORE_VIEW_TOKEN, engine);
877
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine));
857
878
  configureWebLayoutData({
858
879
  extra: async () => ({
859
880
  appName: appDisplayName(),
@@ -835,15 +835,35 @@ import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
835
835
  import { appDisplayName } from "@getstrata/core/runtime/appKeyPrefix";
836
836
  import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
837
837
  import {
838
+ CORE_VIEW_RENDERER_TOKEN,
838
839
  configureWebErrorView,
839
840
  configureWebLayoutData,
841
+ createWebLayoutDataResolver,
840
842
  DEFAULT_VIEWS_DIRECTORY,
841
843
  EtaViewEngine,
842
844
  errorTemplateName,
843
- resolveWebLayoutData
845
+ resolveWebLayoutData,
846
+ ViewRenderer
844
847
  } from "@getstrata/core/view";
845
848
  var CORE_VIEW_TOKEN = "core.view";
846
849
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
850
+ function createViewProvider(options = {}) {
851
+ const directory = options.directory;
852
+ const layout = options.layout;
853
+ const data = { ...options.data };
854
+ return {
855
+ name: "view",
856
+ register({ container, config }) {
857
+ if (!isViewsEnabled())
858
+ return;
859
+ const viewsDirectory = directory ?? (process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY);
860
+ config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
861
+ const engine = new EtaViewEngine(viewsDirectory, createWebLayoutDataResolver(container, data));
862
+ container.set(CORE_VIEW_TOKEN, engine);
863
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine, layout));
864
+ }
865
+ };
866
+ }
847
867
  var viewProvider = {
848
868
  name: "view",
849
869
  register({ container, config }) {
@@ -854,6 +874,7 @@ var viewProvider = {
854
874
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
855
875
  const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
856
876
  container.set(CORE_VIEW_TOKEN, engine);
877
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine));
857
878
  configureWebLayoutData({
858
879
  extra: async () => ({
859
880
  appName: appDisplayName(),
@@ -4,15 +4,35 @@ import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
4
4
  import { appDisplayName } from "@getstrata/core/runtime/appKeyPrefix";
5
5
  import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
6
6
  import {
7
+ CORE_VIEW_RENDERER_TOKEN,
7
8
  configureWebErrorView,
8
9
  configureWebLayoutData,
10
+ createWebLayoutDataResolver,
9
11
  DEFAULT_VIEWS_DIRECTORY,
10
12
  EtaViewEngine,
11
13
  errorTemplateName,
12
- resolveWebLayoutData
14
+ resolveWebLayoutData,
15
+ ViewRenderer
13
16
  } from "@getstrata/core/view";
14
17
  var CORE_VIEW_TOKEN = "core.view";
15
18
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
19
+ function createViewProvider(options = {}) {
20
+ const directory = options.directory;
21
+ const layout = options.layout;
22
+ const data = { ...options.data };
23
+ return {
24
+ name: "view",
25
+ register({ container, config }) {
26
+ if (!isViewsEnabled())
27
+ return;
28
+ const viewsDirectory = directory ?? (process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY);
29
+ config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
30
+ const engine = new EtaViewEngine(viewsDirectory, createWebLayoutDataResolver(container, data));
31
+ container.set(CORE_VIEW_TOKEN, engine);
32
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine, layout));
33
+ }
34
+ };
35
+ }
16
36
  var viewProvider = {
17
37
  name: "view",
18
38
  register({ container, config }) {
@@ -23,6 +43,7 @@ var viewProvider = {
23
43
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
24
44
  const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
25
45
  container.set(CORE_VIEW_TOKEN, engine);
46
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine));
26
47
  configureWebLayoutData({
27
48
  extra: async () => ({
28
49
  appName: appDisplayName(),
@@ -42,5 +63,6 @@ var viewProvider = {
42
63
  export {
43
64
  CORE_VIEW_TOKEN,
44
65
  VIEW_DIRECTORY_CONFIG_KEY,
66
+ createViewProvider,
45
67
  viewProvider
46
68
  };
@@ -820,15 +820,35 @@ import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
820
820
  import { appDisplayName } from "@getstrata/core/runtime/appKeyPrefix";
821
821
  import { isViewsEnabled } from "@getstrata/core/runtime/frontendMode";
822
822
  import {
823
+ CORE_VIEW_RENDERER_TOKEN,
823
824
  configureWebErrorView,
824
825
  configureWebLayoutData,
826
+ createWebLayoutDataResolver,
825
827
  DEFAULT_VIEWS_DIRECTORY,
826
828
  EtaViewEngine,
827
829
  errorTemplateName,
828
- resolveWebLayoutData
830
+ resolveWebLayoutData,
831
+ ViewRenderer
829
832
  } from "@getstrata/core/view";
830
833
  var CORE_VIEW_TOKEN = "core.view";
831
834
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
835
+ function createViewProvider(options = {}) {
836
+ const directory = options.directory;
837
+ const layout = options.layout;
838
+ const data = { ...options.data };
839
+ return {
840
+ name: "view",
841
+ register({ container, config }) {
842
+ if (!isViewsEnabled())
843
+ return;
844
+ const viewsDirectory = directory ?? (process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY);
845
+ config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
846
+ const engine = new EtaViewEngine(viewsDirectory, createWebLayoutDataResolver(container, data));
847
+ container.set(CORE_VIEW_TOKEN, engine);
848
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine, layout));
849
+ }
850
+ };
851
+ }
832
852
  var viewProvider = {
833
853
  name: "view",
834
854
  register({ container, config }) {
@@ -839,6 +859,7 @@ var viewProvider = {
839
859
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
840
860
  const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
841
861
  container.set(CORE_VIEW_TOKEN, engine);
862
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine));
842
863
  configureWebLayoutData({
843
864
  extra: async () => ({
844
865
  appName: appDisplayName(),
@@ -1,5 +1,6 @@
1
1
  // @bun
2
2
  // ../../src/bootstrap/secretsGuard.ts
3
+ import { resolveFieldEncryptionKeyring } from "@getstrata/core/crypto/fieldEncryption";
3
4
  import { getDefaultDatabasePool } from "@getstrata/core/database/defaultConnection";
4
5
  import { envFlagEnabled, isProductionEnv } from "@getstrata/core/runtime/appEnv";
5
6
  import { isViewsMode, parseFrontendMode } from "@getstrata/core/runtime/frontendMode";
@@ -92,8 +93,8 @@ function assertFeatureProductionSecrets(env) {
92
93
  throw new Error("Production startup blocked: rotate SCIM_BEARER_TOKEN away from published test defaults.");
93
94
  }
94
95
  }
95
- if ((envFlagEnabled(env.FEATURE_FIELD_ENCRYPTION) || envFlagEnabled(env.FEATURE_MFA)) && !env.KMS_ENCRYPTION_KEY?.trim()) {
96
- throw new Error("Production startup blocked: set KMS_ENCRYPTION_KEY when field encryption or MFA is enabled.");
96
+ if ((envFlagEnabled(env.FEATURE_FIELD_ENCRYPTION) || envFlagEnabled(env.FEATURE_MFA)) && !env.KMS_ENCRYPTION_KEY?.trim() && !env.KMS_ENCRYPTION_KEYRING) {
97
+ throw new Error("Production startup blocked: set KMS_ENCRYPTION_KEY or KMS_ENCRYPTION_KEYRING when field encryption or MFA is enabled.");
97
98
  }
98
99
  if (envFlagEnabled(env.FEATURE_SAML)) {
99
100
  const required = [
@@ -205,6 +206,7 @@ function assertPublicAppUrl(env) {
205
206
  }
206
207
  }
207
208
  function assertProductionSecrets(env = process.env) {
209
+ resolveFieldEncryptionKeyring(env);
208
210
  if (!isProductionEnv(env)) {
209
211
  return;
210
212
  }
package/dist/index.js CHANGED
@@ -1263,12 +1263,15 @@ import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
1263
1263
  import { appDisplayName } from "@getstrata/core/runtime/appKeyPrefix";
1264
1264
  import { isViewsEnabled as isViewsEnabled2 } from "@getstrata/core/runtime/frontendMode";
1265
1265
  import {
1266
+ CORE_VIEW_RENDERER_TOKEN,
1266
1267
  configureWebErrorView,
1267
1268
  configureWebLayoutData,
1269
+ createWebLayoutDataResolver,
1268
1270
  DEFAULT_VIEWS_DIRECTORY,
1269
1271
  EtaViewEngine,
1270
1272
  errorTemplateName,
1271
- resolveWebLayoutData
1273
+ resolveWebLayoutData,
1274
+ ViewRenderer
1272
1275
  } from "@getstrata/core/view";
1273
1276
  var CORE_VIEW_TOKEN = "core.view";
1274
1277
  var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
@@ -1282,6 +1285,7 @@ var viewProvider = {
1282
1285
  config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
1283
1286
  const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
1284
1287
  container.set(CORE_VIEW_TOKEN, engine);
1288
+ container.set(CORE_VIEW_RENDERER_TOKEN, new ViewRenderer(engine));
1285
1289
  configureWebLayoutData({
1286
1290
  extra: async () => ({
1287
1291
  appName: appDisplayName(),
@@ -1750,6 +1754,7 @@ strata_${name}_collector_success 0
1750
1754
  };
1751
1755
  }
1752
1756
  // ../../src/bootstrap/secretsGuard.ts
1757
+ import { resolveFieldEncryptionKeyring } from "@getstrata/core/crypto/fieldEncryption";
1753
1758
  import { getDefaultDatabasePool as getDefaultDatabasePool2 } from "@getstrata/core/database/defaultConnection";
1754
1759
  import { envFlagEnabled as envFlagEnabled3, isProductionEnv as isProductionEnv2 } from "@getstrata/core/runtime/appEnv";
1755
1760
  import { isViewsMode, parseFrontendMode } from "@getstrata/core/runtime/frontendMode";
@@ -1842,8 +1847,8 @@ function assertFeatureProductionSecrets(env) {
1842
1847
  throw new Error("Production startup blocked: rotate SCIM_BEARER_TOKEN away from published test defaults.");
1843
1848
  }
1844
1849
  }
1845
- if ((envFlagEnabled3(env.FEATURE_FIELD_ENCRYPTION) || envFlagEnabled3(env.FEATURE_MFA)) && !env.KMS_ENCRYPTION_KEY?.trim()) {
1846
- throw new Error("Production startup blocked: set KMS_ENCRYPTION_KEY when field encryption or MFA is enabled.");
1850
+ if ((envFlagEnabled3(env.FEATURE_FIELD_ENCRYPTION) || envFlagEnabled3(env.FEATURE_MFA)) && !env.KMS_ENCRYPTION_KEY?.trim() && !env.KMS_ENCRYPTION_KEYRING) {
1851
+ throw new Error("Production startup blocked: set KMS_ENCRYPTION_KEY or KMS_ENCRYPTION_KEYRING when field encryption or MFA is enabled.");
1847
1852
  }
1848
1853
  if (envFlagEnabled3(env.FEATURE_SAML)) {
1849
1854
  const required = [
@@ -1930,6 +1935,7 @@ function assertPublicAppUrl(env) {
1930
1935
  }
1931
1936
  }
1932
1937
  function assertProductionSecrets(env = process.env) {
1938
+ resolveFieldEncryptionKeyring(env);
1933
1939
  if (!isProductionEnv2(env)) {
1934
1940
  return;
1935
1941
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/bootstrap",
3
- "version": "2.2.11",
3
+ "version": "2.2.13",
4
4
  "description": "Strata application bootstrap: HttpKernel, DI, web session helpers",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -183,17 +183,17 @@
183
183
  "build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --external mysql2 --external @getstrata/core",
184
184
  "build:types": "tsc -p tsconfig.types.json && bun ../../scripts/prune-bootstrap-dist-types.ts",
185
185
  "prepublishOnly": "bun run build",
186
- "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/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/discoverListeners.ts entries/discoverModels.ts entries/discoverJobs.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external mysql2 --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/discoverListeners --external @getstrata/bootstrap/discoverModels --external @getstrata/bootstrap/discoverJobs --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --external @getstrata/core/auth/guard --external @getstrata/core/auth/jwt --external @getstrata/core/auth/jwtGuard --external @getstrata/core/auth/basicAuthGuard --external @getstrata/core/auth/tokenAbilityChecker --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipMiddleware --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/oauth/oidcProvider --external @getstrata/core/auth/oauth/providers --external @getstrata/core/auth/oauth/samlProvider --external @getstrata/core/auth/oauth/types --external @getstrata/core/auth/saml/samlServiceProvider --external @getstrata/core/auth/password --external @getstrata/core/auth/passwordLogin --external @getstrata/core/auth/oneTimeToken --external @getstrata/core/auth/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --external @getstrata/core/auth/policy --external @getstrata/core/auth/scimAuthMiddleware --external @getstrata/core/auth/sessionCookie --external @getstrata/core/auth/sessionGuard --external @getstrata/core/auth/tokenHash --external @getstrata/core/audit/exportAuditLogs --external @getstrata/core/audit/siemFormatter --external @getstrata/core/admin/formatValue --external @getstrata/core/admin/registry --external @getstrata/core/admin/types --external @getstrata/core/cache/tags --external @getstrata/core/cache/createCacheStore --external @getstrata/core/cache/repository --external @getstrata/core/cache/simpleCache --external @getstrata/core/cache/simpleCacheStore --external @getstrata/core/config/envSchema --external @getstrata/core/contracts/serviceTokens --external @getstrata/core/contracts/authUserDirectory --external @getstrata/core/contracts/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --external @getstrata/core/crypto/mfaSecret --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/bunSql --external @getstrata/core/database/connection --external @getstrata/core/database/connectionContext --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/dialect --external @getstrata/core/database/mysqlConnection --external @getstrata/core/database/namedConnections --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/sqliteConnection --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/events/outbox --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/clientIp --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/contentSecurityPolicy --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/response --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/safeInternalPath --external @getstrata/core/http/signedUrl --external @getstrata/core/http/statelessAuth --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/uploads --external @getstrata/core/http/validation --external @getstrata/core/jobs/exportAuditLogsJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/mail/sanitizeMailHtml --external @getstrata/core/media/imageTransform --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/appEnv --external @getstrata/core/runtime/appKeyPrefix --external @getstrata/core/runtime/frontendMode --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/recoveryCodes --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safePath --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/webhookSignature --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/tenant/enableTenantRls --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
186
+ "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/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/discoverListeners.ts entries/discoverModels.ts entries/discoverJobs.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external mysql2 --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/discoverListeners --external @getstrata/bootstrap/discoverModels --external @getstrata/bootstrap/discoverJobs --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --external @getstrata/core/auth/guard --external @getstrata/core/auth/jwt --external @getstrata/core/auth/jwtGuard --external @getstrata/core/auth/basicAuthGuard --external @getstrata/core/auth/tokenAbilityChecker --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipMiddleware --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/oauth/oidcProvider --external @getstrata/core/auth/oauth/providers --external @getstrata/core/auth/oauth/samlProvider --external @getstrata/core/auth/oauth/types --external @getstrata/core/auth/saml/samlServiceProvider --external @getstrata/core/auth/password --external @getstrata/core/auth/passwordLogin --external @getstrata/core/auth/oneTimeToken --external @getstrata/core/auth/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --external @getstrata/core/auth/policy --external @getstrata/core/auth/scimAuthMiddleware --external @getstrata/core/auth/sessionCookie --external @getstrata/core/auth/sessionGuard --external @getstrata/core/auth/tokenHash --external @getstrata/core/audit/exportAuditLogs --external @getstrata/core/audit/siemFormatter --external @getstrata/core/admin/formatValue --external @getstrata/core/admin/registry --external @getstrata/core/admin/types --external @getstrata/core/cache/tags --external @getstrata/core/cache/createCacheStore --external @getstrata/core/cache/repository --external @getstrata/core/cache/simpleCache --external @getstrata/core/cache/simpleCacheStore --external @getstrata/core/config/envSchema --external @getstrata/core/contracts/serviceTokens --external @getstrata/core/contracts/authUserDirectory --external @getstrata/core/contracts/container --external @getstrata/core/contracts/di --external @getstrata/core/crypto/fieldEncryption --external @getstrata/core/crypto/fieldEncryptionRotation --external @getstrata/core/crypto/mfaSecret --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/bunSql --external @getstrata/core/database/connection --external @getstrata/core/database/connectionContext --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/dialect --external @getstrata/core/database/mysqlConnection --external @getstrata/core/database/namedConnections --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/sqliteConnection --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/events/outbox --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/clientIp --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/contentSecurityPolicy --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/response --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/safeInternalPath --external @getstrata/core/http/signedUrl --external @getstrata/core/http/statelessAuth --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/uploads --external @getstrata/core/http/validation --external @getstrata/core/jobs/exportAuditLogsJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/mail/sanitizeMailHtml --external @getstrata/core/media/imageTransform --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/appEnv --external @getstrata/core/runtime/appKeyPrefix --external @getstrata/core/runtime/frontendMode --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/recoveryCodes --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safePath --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/webhookSignature --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/tenant/enableTenantRls --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
187
187
  "build:shims": "true"
188
188
  },
189
189
  "publishConfig": {
190
190
  "access": "public"
191
191
  },
192
192
  "peerDependencies": {
193
- "@getstrata/core": "^2.2.11",
193
+ "@getstrata/core": "^2.2.13",
194
194
  "typescript": "^5.9.0 || ^6.0.0 || ^7.0.0"
195
195
  },
196
196
  "engines": {
197
- "bun": ">=1.4.0"
197
+ "bun": ">=1.4.3"
198
198
  }
199
199
  }