@getstrata/core 0.5.67 → 0.5.69

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,14 @@
1
1
  # @getstrata/core changelog
2
2
 
3
+ ## 0.5.69
4
+
5
+ - `MembershipLookup.updateMemberRole(organizationId, userId, role)` is required. The uninitialized lookup throws until `configureMembershipLookup()` is called. `MembershipService.updateMemberRole` delegates to the adapter.
6
+
7
+ ## 0.5.68
8
+
9
+ - Published core no longer imports WorkHub `src/config`. Frontend mode, queue retries, CORS, and upload limits read env (`FRONTEND_MODE`, `QUEUE_*`, `CORS_ALLOWED_ORIGINS`, `MAX_UPLOAD_BYTES`).
10
+ - `@getstrata/core/runtime/frontendMode` exports `readFrontendMode` / `isViewsEnabled` / `isSpaEnabled`.
11
+
3
12
  ## 0.5.67
4
13
 
5
14
  - OpenAPI title, server URLs, and generated SDK class name come from `APP_NAME` / `APP_URL` / `API_PREFIX` / `APP_SDK_CLASS` instead of importing WorkHub `src/config/app`.
package/README.md CHANGED
@@ -82,7 +82,7 @@ import type { Migration } from "@getstrata/core/database/migrations/types";
82
82
  Package name: **`@getstrata/core`** (npm org [`@getstrata`](https://www.npmjs.com/org/getstrata)).
83
83
 
84
84
  1. Add `NPM_TOKEN` to GitHub repository secrets.
85
- 2. Tag a release: `git tag v0.5.69 && git push origin v0.5.69`
85
+ 2. Tag a release: `git tag v0.5.70 && git push origin v0.5.70`
86
86
  3. [Release workflow](../../.github/workflows/release.yml) builds and runs `npm publish --access public`.
87
87
 
88
88
  Previously published as `@eyk-workhub/framework@0.1.0`, deprecated in favor of this package.
@@ -16,6 +16,7 @@ declare class MembershipService {
16
16
  role?: OrganizationMemberRole;
17
17
  }): Promise<import("../contracts/membership").MembershipRecord>;
18
18
  removeMember(organizationId: number, userId: number): Promise<unknown>;
19
+ updateMemberRole(organizationId: number, userId: number, role: OrganizationMemberRole): Promise<import("../contracts/membership").MembershipRecord>;
19
20
  }
20
21
  export type { MembershipRepositoryLike };
21
22
  export default MembershipService;
@@ -16,5 +16,6 @@ interface MembershipLookup {
16
16
  role?: OrganizationMemberRole;
17
17
  }): Promise<MembershipRecord>;
18
18
  removeMember(organizationId: number, userId: number): Promise<unknown>;
19
+ updateMemberRole(organizationId: number, userId: number, role: OrganizationMemberRole): Promise<MembershipRecord>;
19
20
  }
20
21
  export type { MembershipLookup, MembershipRecord, OrganizationMemberRole };
@@ -1,3 +1,10 @@
1
1
  import type { Middleware } from "./middleware";
2
+ interface CorsConfig {
3
+ allowedOrigins: string[];
4
+ allowedMethods: string[];
5
+ allowedHeaders: string[];
6
+ maxAgeSeconds: number;
7
+ }
8
+ declare function resolveCorsConfig(): CorsConfig;
2
9
  declare function createCorsMiddleware(): Middleware;
3
- export { createCorsMiddleware };
10
+ export { createCorsMiddleware, resolveCorsConfig };
@@ -3,6 +3,7 @@ interface QueueConfig {
3
3
  maxAttempts: number;
4
4
  backoffMs: number;
5
5
  }
6
+ declare function resolveQueueConfig(): QueueConfig;
6
7
  declare const queueConfig: QueueConfig;
7
8
  export type { QueueConfig };
8
- export { queueConfig };
9
+ export { queueConfig, resolveQueueConfig };
@@ -69,6 +69,9 @@ var uninitializedMembershipLookup = {
69
69
  },
70
70
  async removeMember() {
71
71
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
72
+ },
73
+ async updateMemberRole() {
74
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
72
75
  }
73
76
  };
74
77
  var membershipRepository = uninitializedMembershipLookup;
@@ -73,6 +73,9 @@ var uninitializedMembershipLookup = {
73
73
  },
74
74
  async removeMember() {
75
75
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
76
+ },
77
+ async updateMemberRole() {
78
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
76
79
  }
77
80
  };
78
81
  var membershipRepository = uninitializedMembershipLookup;
@@ -72,6 +72,9 @@ var uninitializedMembershipLookup = {
72
72
  },
73
73
  async removeMember() {
74
74
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
75
+ },
76
+ async updateMemberRole() {
77
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
75
78
  }
76
79
  };
77
80
  var membershipRepository = uninitializedMembershipLookup;
@@ -157,6 +160,9 @@ class MembershipService {
157
160
  removeMember(organizationId, userId) {
158
161
  return this.members.removeMember(organizationId, userId);
159
162
  }
163
+ updateMemberRole(organizationId, userId, role) {
164
+ return this.members.updateMemberRole(organizationId, userId, role);
165
+ }
160
166
  }
161
167
  var membershipService_default = MembershipService;
162
168
  export {
@@ -1,22 +1,22 @@
1
1
  // @bun
2
- // ../../src/config/cors.ts
3
- var corsConfig = {
4
- allowedOrigins: (process.env.CORS_ALLOWED_ORIGINS ?? "*").split(",").map((origin) => origin.trim()).filter(Boolean),
5
- allowedMethods: ["GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS"],
6
- allowedHeaders: [
7
- "Authorization",
8
- "Content-Type",
9
- "X-Request-Id",
10
- "X-Tenant-Id",
11
- "X-Authenticated-User-Id",
12
- "X-Authenticated-User-Role",
13
- "If-Match",
14
- "If-None-Match"
15
- ],
16
- maxAgeSeconds: 86400
17
- };
18
-
19
2
  // ../../src/core/http/corsMiddleware.ts
3
+ function resolveCorsConfig() {
4
+ return {
5
+ allowedOrigins: (process.env.CORS_ALLOWED_ORIGINS ?? "*").split(",").map((origin) => origin.trim()).filter(Boolean),
6
+ allowedMethods: ["GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS"],
7
+ allowedHeaders: [
8
+ "Authorization",
9
+ "Content-Type",
10
+ "X-Request-Id",
11
+ "X-Tenant-Id",
12
+ "X-Authenticated-User-Id",
13
+ "X-Authenticated-User-Role",
14
+ "If-Match",
15
+ "If-None-Match"
16
+ ],
17
+ maxAgeSeconds: 86400
18
+ };
19
+ }
20
20
  function createCorsMiddleware() {
21
21
  return async (request, next) => {
22
22
  if (request.method === "OPTIONS") {
@@ -40,6 +40,7 @@ function createCorsMiddleware() {
40
40
  function buildCorsHeaders(request) {
41
41
  const headers = new Headers;
42
42
  const origin = request.headers.get("origin");
43
+ const corsConfig = resolveCorsConfig();
43
44
  const allowedOrigins = corsConfig.allowedOrigins;
44
45
  const allowOrigin = allowedOrigins.includes("*") || origin && allowedOrigins.includes(origin) ? origin ?? "*" : allowedOrigins[0] ?? "*";
45
46
  headers.set("Access-Control-Allow-Origin", allowOrigin);
@@ -50,5 +51,6 @@ function buildCorsHeaders(request) {
50
51
  return headers;
51
52
  }
52
53
  export {
53
- createCorsMiddleware
54
+ createCorsMiddleware,
55
+ resolveCorsConfig
54
56
  };
@@ -2,7 +2,7 @@
2
2
  // ../../src/core/http/parseMultipartUpload.ts
3
3
  import { BadRequestError, PayloadTooLargeError } from "@getstrata/core/errors/http";
4
4
 
5
- // ../../src/config/uploads.ts
5
+ // ../../src/core/http/uploads.ts
6
6
  var DEFAULT_MAX_UPLOAD_BYTES = 5 * 1024 * 1024;
7
7
  var ALLOWED_UPLOAD_MIME_TYPES = new Set([
8
8
  "application/pdf",
@@ -3,7 +3,7 @@
3
3
  import { currentAuthUser } from "@getstrata/core/auth/authContext";
4
4
  import { ForbiddenError } from "@getstrata/core/errors/http";
5
5
 
6
- // ../../src/config/frontend.ts
6
+ // ../../src/core/runtime/frontendMode.ts
7
7
  function readFrontendMode() {
8
8
  const mode = (process.env.FRONTEND_MODE ?? "api").trim();
9
9
  if (mode === "server-htmx") {
@@ -17,6 +17,9 @@ function readFrontendMode() {
17
17
  function isViewsEnabled() {
18
18
  return readFrontendMode() === "server-htmx";
19
19
  }
20
+ function isSpaEnabled() {
21
+ return readFrontendMode() === "spa-react";
22
+ }
20
23
 
21
24
  // ../../src/core/http/contentNegotiation.ts
22
25
  function requestPrefersJson(request) {
@@ -68,7 +68,7 @@ async function withDatabaseErrorHandling(operation) {
68
68
  // ../../src/core/http/webErrorResponse.ts
69
69
  import { HttpError as HttpError2, UnauthorizedError, ValidationError } from "@getstrata/core/errors/http";
70
70
 
71
- // ../../src/config/frontend.ts
71
+ // ../../src/core/runtime/frontendMode.ts
72
72
  function readFrontendMode() {
73
73
  const mode = (process.env.FRONTEND_MODE ?? "api").trim();
74
74
  if (mode === "server-htmx") {
@@ -82,6 +82,9 @@ function readFrontendMode() {
82
82
  function isViewsEnabled() {
83
83
  return readFrontendMode() === "server-htmx";
84
84
  }
85
+ function isSpaEnabled() {
86
+ return readFrontendMode() === "spa-react";
87
+ }
85
88
 
86
89
  // ../../src/core/view/webErrorView.ts
87
90
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
@@ -2,21 +2,6 @@
2
2
  // ../../src/core/http/webErrorResponse.ts
3
3
  import { HttpError as HttpError2, UnauthorizedError, ValidationError } from "@getstrata/core/errors/http";
4
4
 
5
- // ../../src/config/frontend.ts
6
- function readFrontendMode() {
7
- const mode = (process.env.FRONTEND_MODE ?? "api").trim();
8
- if (mode === "server-htmx") {
9
- return "server-htmx";
10
- }
11
- if (mode === "spa-react") {
12
- return "spa-react";
13
- }
14
- return "api";
15
- }
16
- function isViewsEnabled() {
17
- return readFrontendMode() === "server-htmx";
18
- }
19
-
20
5
  // ../../src/core/database/errors.ts
21
6
  import {
22
7
  BadRequestError,
@@ -80,6 +65,24 @@ async function withDatabaseErrorHandling(operation) {
80
65
  }
81
66
  }
82
67
 
68
+ // ../../src/core/runtime/frontendMode.ts
69
+ function readFrontendMode() {
70
+ const mode = (process.env.FRONTEND_MODE ?? "api").trim();
71
+ if (mode === "server-htmx") {
72
+ return "server-htmx";
73
+ }
74
+ if (mode === "spa-react") {
75
+ return "spa-react";
76
+ }
77
+ return "api";
78
+ }
79
+ function isViewsEnabled() {
80
+ return readFrontendMode() === "server-htmx";
81
+ }
82
+ function isSpaEnabled() {
83
+ return readFrontendMode() === "spa-react";
84
+ }
85
+
83
86
  // ../../src/core/view/webErrorView.ts
84
87
  import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
85
88
 
@@ -100,25 +100,27 @@ function readSharedJobRegistry() {
100
100
  }
101
101
  var jobRegistry = readSharedJobRegistry();
102
102
 
103
- // ../../src/bootstrap/config.ts
104
- import {
105
- CORE_ABILITY_CHECKER_TOKEN,
106
- CORE_AUTH_TOKEN,
107
- CORE_AUTH_USER_DIRECTORY_TOKEN,
108
- CORE_CACHE_TOKEN,
109
- CORE_CONFIG_TOKEN,
110
- CORE_EVENT_BUS_TOKEN,
111
- CORE_POLICY_GATE_TOKEN,
112
- CORE_QUEUE_TOKEN,
113
- CORE_TOKEN_SERVICE_TOKEN
114
- } from "@getstrata/core/contracts/serviceTokens";
115
- var DEFAULT_QUEUE_DRIVER = "sync";
116
-
117
- // ../../src/config/queue.ts
103
+ // ../../src/core/queue/queueConfig.ts
104
+ function resolveQueueConfig() {
105
+ const driver = process.env.QUEUE_DRIVER;
106
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
107
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
108
+ return {
109
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
110
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
111
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
112
+ };
113
+ }
118
114
  var queueConfig = {
119
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
120
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
121
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
115
+ get driver() {
116
+ return resolveQueueConfig().driver;
117
+ },
118
+ get maxAttempts() {
119
+ return resolveQueueConfig().maxAttempts;
120
+ },
121
+ get backoffMs() {
122
+ return resolveQueueConfig().backoffMs;
123
+ }
122
124
  };
123
125
 
124
126
  // ../../src/core/queue/jobRunner.ts
@@ -1,25 +1,4 @@
1
1
  // @bun
2
- // ../../src/bootstrap/config.ts
3
- import {
4
- CORE_ABILITY_CHECKER_TOKEN,
5
- CORE_AUTH_TOKEN,
6
- CORE_AUTH_USER_DIRECTORY_TOKEN,
7
- CORE_CACHE_TOKEN,
8
- CORE_CONFIG_TOKEN,
9
- CORE_EVENT_BUS_TOKEN,
10
- CORE_POLICY_GATE_TOKEN,
11
- CORE_QUEUE_TOKEN,
12
- CORE_TOKEN_SERVICE_TOKEN
13
- } from "@getstrata/core/contracts/serviceTokens";
14
- var DEFAULT_QUEUE_DRIVER = "sync";
15
-
16
- // ../../src/config/queue.ts
17
- var queueConfig = {
18
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
19
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
20
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
21
- };
22
-
23
2
  // ../../src/core/queue/jobRegistry.ts
24
3
  class JobRegistry {
25
4
  factories = new Map;
@@ -57,6 +36,29 @@ function readSharedJobRegistry() {
57
36
  }
58
37
  var jobRegistry = readSharedJobRegistry();
59
38
 
39
+ // ../../src/core/queue/queueConfig.ts
40
+ function resolveQueueConfig() {
41
+ const driver = process.env.QUEUE_DRIVER;
42
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
43
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
44
+ return {
45
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
46
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
47
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
48
+ };
49
+ }
50
+ var queueConfig = {
51
+ get driver() {
52
+ return resolveQueueConfig().driver;
53
+ },
54
+ get maxAttempts() {
55
+ return resolveQueueConfig().maxAttempts;
56
+ },
57
+ get backoffMs() {
58
+ return resolveQueueConfig().backoffMs;
59
+ }
60
+ };
61
+
60
62
  // ../../src/core/queue/jobRunner.ts
61
63
  async function runQueueJob(envelope, failedJobs) {
62
64
  const job = jobRegistry.create(envelope.name);
@@ -100,25 +100,27 @@ function readSharedJobRegistry() {
100
100
  }
101
101
  var jobRegistry = readSharedJobRegistry();
102
102
 
103
- // ../../src/bootstrap/config.ts
104
- import {
105
- CORE_ABILITY_CHECKER_TOKEN,
106
- CORE_AUTH_TOKEN,
107
- CORE_AUTH_USER_DIRECTORY_TOKEN,
108
- CORE_CACHE_TOKEN,
109
- CORE_CONFIG_TOKEN,
110
- CORE_EVENT_BUS_TOKEN,
111
- CORE_POLICY_GATE_TOKEN,
112
- CORE_QUEUE_TOKEN,
113
- CORE_TOKEN_SERVICE_TOKEN
114
- } from "@getstrata/core/contracts/serviceTokens";
115
- var DEFAULT_QUEUE_DRIVER = "sync";
116
-
117
- // ../../src/config/queue.ts
103
+ // ../../src/core/queue/queueConfig.ts
104
+ function resolveQueueConfig() {
105
+ const driver = process.env.QUEUE_DRIVER;
106
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
107
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
108
+ return {
109
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
110
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
111
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
112
+ };
113
+ }
118
114
  var queueConfig = {
119
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
120
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
121
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
115
+ get driver() {
116
+ return resolveQueueConfig().driver;
117
+ },
118
+ get maxAttempts() {
119
+ return resolveQueueConfig().maxAttempts;
120
+ },
121
+ get backoffMs() {
122
+ return resolveQueueConfig().backoffMs;
123
+ }
122
124
  };
123
125
 
124
126
  // ../../src/core/queue/jobRunner.ts
@@ -2,27 +2,6 @@
2
2
  // ../../src/core/queue/queueMetrics.ts
3
3
  var {RedisClient: RedisClient2 } = globalThis.Bun;
4
4
 
5
- // ../../src/bootstrap/config.ts
6
- import {
7
- CORE_ABILITY_CHECKER_TOKEN,
8
- CORE_AUTH_TOKEN,
9
- CORE_AUTH_USER_DIRECTORY_TOKEN,
10
- CORE_CACHE_TOKEN,
11
- CORE_CONFIG_TOKEN,
12
- CORE_EVENT_BUS_TOKEN,
13
- CORE_POLICY_GATE_TOKEN,
14
- CORE_QUEUE_TOKEN,
15
- CORE_TOKEN_SERVICE_TOKEN
16
- } from "@getstrata/core/contracts/serviceTokens";
17
- var DEFAULT_QUEUE_DRIVER = "sync";
18
-
19
- // ../../src/config/queue.ts
20
- var queueConfig = {
21
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
22
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
23
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
24
- };
25
-
26
5
  // ../../src/core/queue/failedJobRepository.ts
27
6
  import { BaseRepository } from "@getstrata/core/database/baseRepository";
28
7
 
@@ -124,6 +103,29 @@ function readSharedJobRegistry() {
124
103
  }
125
104
  var jobRegistry = readSharedJobRegistry();
126
105
 
106
+ // ../../src/core/queue/queueConfig.ts
107
+ function resolveQueueConfig() {
108
+ const driver = process.env.QUEUE_DRIVER;
109
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
110
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
111
+ return {
112
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
113
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
114
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
115
+ };
116
+ }
117
+ var queueConfig = {
118
+ get driver() {
119
+ return resolveQueueConfig().driver;
120
+ },
121
+ get maxAttempts() {
122
+ return resolveQueueConfig().maxAttempts;
123
+ },
124
+ get backoffMs() {
125
+ return resolveQueueConfig().backoffMs;
126
+ }
127
+ };
128
+
127
129
  // ../../src/core/queue/jobRunner.ts
128
130
  async function runQueueJob(envelope, failedJobs) {
129
131
  const job = jobRegistry.create(envelope.name);
@@ -87,25 +87,27 @@ function readSharedJobRegistry() {
87
87
  }
88
88
  var jobRegistry = readSharedJobRegistry();
89
89
 
90
- // ../../src/bootstrap/config.ts
91
- import {
92
- CORE_ABILITY_CHECKER_TOKEN,
93
- CORE_AUTH_TOKEN,
94
- CORE_AUTH_USER_DIRECTORY_TOKEN,
95
- CORE_CACHE_TOKEN,
96
- CORE_CONFIG_TOKEN,
97
- CORE_EVENT_BUS_TOKEN,
98
- CORE_POLICY_GATE_TOKEN,
99
- CORE_QUEUE_TOKEN,
100
- CORE_TOKEN_SERVICE_TOKEN
101
- } from "@getstrata/core/contracts/serviceTokens";
102
- var DEFAULT_QUEUE_DRIVER = "sync";
103
-
104
- // ../../src/config/queue.ts
90
+ // ../../src/core/queue/queueConfig.ts
91
+ function resolveQueueConfig() {
92
+ const driver = process.env.QUEUE_DRIVER;
93
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
94
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
95
+ return {
96
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
97
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
98
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
99
+ };
100
+ }
105
101
  var queueConfig = {
106
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
107
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
108
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
102
+ get driver() {
103
+ return resolveQueueConfig().driver;
104
+ },
105
+ get maxAttempts() {
106
+ return resolveQueueConfig().maxAttempts;
107
+ },
108
+ get backoffMs() {
109
+ return resolveQueueConfig().backoffMs;
110
+ }
109
111
  };
110
112
 
111
113
  // ../../src/core/queue/jobRunner.ts
@@ -0,0 +1,23 @@
1
+ // @bun
2
+ // ../../src/core/runtime/frontendMode.ts
3
+ function readFrontendMode() {
4
+ const mode = (process.env.FRONTEND_MODE ?? "api").trim();
5
+ if (mode === "server-htmx") {
6
+ return "server-htmx";
7
+ }
8
+ if (mode === "spa-react") {
9
+ return "spa-react";
10
+ }
11
+ return "api";
12
+ }
13
+ function isViewsEnabled() {
14
+ return readFrontendMode() === "server-htmx";
15
+ }
16
+ function isSpaEnabled() {
17
+ return readFrontendMode() === "spa-react";
18
+ }
19
+ export {
20
+ isSpaEnabled,
21
+ isViewsEnabled,
22
+ readFrontendMode
23
+ };
@@ -1,28 +1,7 @@
1
1
  // @bun
2
- // ../../src/config/features.ts
3
- function readFeatureFlags() {
4
- return {
5
- webhooks: (process.env.FEATURE_WEBHOOKS ?? "true") !== "false",
6
- fullTextSearch: (process.env.FEATURE_SEARCH ?? "true") !== "false",
7
- auditLog: (process.env.FEATURE_AUDIT_LOG ?? "true") !== "false",
8
- oauthLogin: (process.env.FEATURE_OAUTH ?? "true") !== "false",
9
- samlLogin: (process.env.FEATURE_SAML ?? "false") === "true",
10
- scim: (process.env.FEATURE_SCIM ?? "true") !== "false",
11
- billing: (process.env.FEATURE_BILLING ?? "true") !== "false",
12
- siemExport: (process.env.FEATURE_SIEM_EXPORT ?? "true") !== "false",
13
- publicReads: (process.env.FEATURE_PUBLIC_READS ?? "true") !== "false",
14
- emailVerification: (process.env.FEATURE_EMAIL_VERIFICATION ?? "false") === "true",
15
- mfa: (process.env.FEATURE_MFA ?? "false") === "true"
16
- };
17
- }
18
- var featureFlags = readFeatureFlags();
19
- function isFeatureEnabled(feature) {
20
- return readFeatureFlags()[feature];
21
- }
22
-
23
2
  // ../../src/core/security/publicReads.ts
24
3
  function isPublicReadsEnabled() {
25
- return isFeatureEnabled("publicReads");
4
+ return (process.env.FEATURE_PUBLIC_READS ?? "true") !== "false";
26
5
  }
27
6
  function guestCanViewResource() {
28
7
  return isPublicReadsEnabled();
package/dist/index.js CHANGED
@@ -364,6 +364,9 @@ var uninitializedMembershipLookup = {
364
364
  },
365
365
  async removeMember() {
366
366
  throw new Error("configureMembershipLookup() must be called before mutating memberships.");
367
+ },
368
+ async updateMemberRole() {
369
+ throw new Error("configureMembershipLookup() must be called before mutating memberships.");
367
370
  }
368
371
  };
369
372
  var membershipRepository = uninitializedMembershipLookup;
@@ -688,6 +691,9 @@ class MembershipService {
688
691
  removeMember(organizationId, userId) {
689
692
  return this.members.removeMember(organizationId, userId);
690
693
  }
694
+ updateMemberRole(organizationId, userId, role) {
695
+ return this.members.updateMemberRole(organizationId, userId, role);
696
+ }
691
697
  }
692
698
  var membershipService_default = MembershipService;
693
699
  // ../../src/core/auth/policy.ts
@@ -4485,24 +4491,24 @@ function readRequestCookie(request, name) {
4485
4491
  function readBunRequestCookie(request, name) {
4486
4492
  return request.cookies.get(name) ?? readRequestCookie(request, name);
4487
4493
  }
4488
- // ../../src/config/cors.ts
4489
- var corsConfig = {
4490
- allowedOrigins: (process.env.CORS_ALLOWED_ORIGINS ?? "*").split(",").map((origin) => origin.trim()).filter(Boolean),
4491
- allowedMethods: ["GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS"],
4492
- allowedHeaders: [
4493
- "Authorization",
4494
- "Content-Type",
4495
- "X-Request-Id",
4496
- "X-Tenant-Id",
4497
- "X-Authenticated-User-Id",
4498
- "X-Authenticated-User-Role",
4499
- "If-Match",
4500
- "If-None-Match"
4501
- ],
4502
- maxAgeSeconds: 86400
4503
- };
4504
-
4505
4494
  // ../../src/core/http/corsMiddleware.ts
4495
+ function resolveCorsConfig() {
4496
+ return {
4497
+ allowedOrigins: (process.env.CORS_ALLOWED_ORIGINS ?? "*").split(",").map((origin) => origin.trim()).filter(Boolean),
4498
+ allowedMethods: ["GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS"],
4499
+ allowedHeaders: [
4500
+ "Authorization",
4501
+ "Content-Type",
4502
+ "X-Request-Id",
4503
+ "X-Tenant-Id",
4504
+ "X-Authenticated-User-Id",
4505
+ "X-Authenticated-User-Role",
4506
+ "If-Match",
4507
+ "If-None-Match"
4508
+ ],
4509
+ maxAgeSeconds: 86400
4510
+ };
4511
+ }
4506
4512
  function createCorsMiddleware() {
4507
4513
  return async (request, next) => {
4508
4514
  if (request.method === "OPTIONS") {
@@ -4526,6 +4532,7 @@ function createCorsMiddleware() {
4526
4532
  function buildCorsHeaders(request) {
4527
4533
  const headers = new Headers;
4528
4534
  const origin = request.headers.get("origin");
4535
+ const corsConfig = resolveCorsConfig();
4529
4536
  const allowedOrigins = corsConfig.allowedOrigins;
4530
4537
  const allowOrigin = allowedOrigins.includes("*") || origin && allowedOrigins.includes(origin) ? origin ?? "*" : allowedOrigins[0] ?? "*";
4531
4538
  headers.set("Access-Control-Allow-Origin", allowOrigin);
@@ -4950,7 +4957,7 @@ function parsePaginationQuery(request) {
4950
4957
  function paginatedResponse(data, meta, init = {}) {
4951
4958
  return Response.json({ data, meta }, init);
4952
4959
  }
4953
- // ../../src/config/uploads.ts
4960
+ // ../../src/core/http/uploads.ts
4954
4961
  var DEFAULT_MAX_UPLOAD_BYTES = 5 * 1024 * 1024;
4955
4962
  var ALLOWED_UPLOAD_MIME_TYPES = new Set([
4956
4963
  "application/pdf",
@@ -5046,7 +5053,7 @@ function toPaginatedResourceCollection(items, meta, transformer) {
5046
5053
  meta
5047
5054
  };
5048
5055
  }
5049
- // ../../src/config/frontend.ts
5056
+ // ../../src/core/runtime/frontendMode.ts
5050
5057
  function readFrontendMode() {
5051
5058
  const mode = (process.env.FRONTEND_MODE ?? "api").trim();
5052
5059
  if (mode === "server-htmx") {
@@ -6243,14 +6250,28 @@ function readSharedJobRegistry() {
6243
6250
  return registry;
6244
6251
  }
6245
6252
  var jobRegistry = readSharedJobRegistry();
6246
- // ../../src/bootstrap/config.ts
6247
- var DEFAULT_QUEUE_DRIVER = "sync";
6248
6253
 
6249
- // ../../src/config/queue.ts
6254
+ // ../../src/core/queue/queueConfig.ts
6255
+ function resolveQueueConfig() {
6256
+ const driver = process.env.QUEUE_DRIVER;
6257
+ const maxAttempts = Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3");
6258
+ const backoffMs = Number(process.env.QUEUE_BACKOFF_MS ?? "1000");
6259
+ return {
6260
+ driver: driver === "redis" || driver === "async" || driver === "sync" ? driver : "sync",
6261
+ maxAttempts: Number.isFinite(maxAttempts) && maxAttempts > 0 ? maxAttempts : 3,
6262
+ backoffMs: Number.isFinite(backoffMs) && backoffMs >= 0 ? backoffMs : 1000
6263
+ };
6264
+ }
6250
6265
  var queueConfig = {
6251
- driver: process.env.QUEUE_DRIVER === "redis" || process.env.QUEUE_DRIVER === "async" || process.env.QUEUE_DRIVER === "sync" ? process.env.QUEUE_DRIVER : DEFAULT_QUEUE_DRIVER,
6252
- maxAttempts: Number(process.env.QUEUE_MAX_ATTEMPTS ?? "3"),
6253
- backoffMs: Number(process.env.QUEUE_BACKOFF_MS ?? "1000")
6266
+ get driver() {
6267
+ return resolveQueueConfig().driver;
6268
+ },
6269
+ get maxAttempts() {
6270
+ return resolveQueueConfig().maxAttempts;
6271
+ },
6272
+ get backoffMs() {
6273
+ return resolveQueueConfig().backoffMs;
6274
+ }
6254
6275
  };
6255
6276
 
6256
6277
  // ../../src/core/queue/jobRunner.ts
@@ -6549,30 +6570,9 @@ async function runDueScheduledTasks(schedule = appSchedule, now = new Date) {
6549
6570
  }
6550
6571
  return due.length;
6551
6572
  }
6552
- // ../../src/config/features.ts
6553
- function readFeatureFlags() {
6554
- return {
6555
- webhooks: (process.env.FEATURE_WEBHOOKS ?? "true") !== "false",
6556
- fullTextSearch: (process.env.FEATURE_SEARCH ?? "true") !== "false",
6557
- auditLog: (process.env.FEATURE_AUDIT_LOG ?? "true") !== "false",
6558
- oauthLogin: (process.env.FEATURE_OAUTH ?? "true") !== "false",
6559
- samlLogin: (process.env.FEATURE_SAML ?? "false") === "true",
6560
- scim: (process.env.FEATURE_SCIM ?? "true") !== "false",
6561
- billing: (process.env.FEATURE_BILLING ?? "true") !== "false",
6562
- siemExport: (process.env.FEATURE_SIEM_EXPORT ?? "true") !== "false",
6563
- publicReads: (process.env.FEATURE_PUBLIC_READS ?? "true") !== "false",
6564
- emailVerification: (process.env.FEATURE_EMAIL_VERIFICATION ?? "false") === "true",
6565
- mfa: (process.env.FEATURE_MFA ?? "false") === "true"
6566
- };
6567
- }
6568
- var featureFlags = readFeatureFlags();
6569
- function isFeatureEnabled(feature) {
6570
- return readFeatureFlags()[feature];
6571
- }
6572
-
6573
6573
  // ../../src/core/security/publicReads.ts
6574
6574
  function isPublicReadsEnabled() {
6575
- return isFeatureEnabled("publicReads");
6575
+ return (process.env.FEATURE_PUBLIC_READS ?? "true") !== "false";
6576
6576
  }
6577
6577
  function guestCanViewResource() {
6578
6578
  return isPublicReadsEnabled();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.67",
3
+ "version": "0.5.69",
4
4
  "description": "Strata — Laravel-inspired Bun framework public API",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -670,6 +670,11 @@
670
670
  "import": "./dist/entries/runtime/appKeyPrefix.js",
671
671
  "default": "./dist/entries/runtime/appKeyPrefix.js"
672
672
  },
673
+ "./runtime/frontendMode": {
674
+ "types": "./dist/core/runtime/frontendMode.d.ts",
675
+ "import": "./dist/entries/runtime/frontendMode.js",
676
+ "default": "./dist/entries/runtime/frontendMode.js"
677
+ },
673
678
  "./runtime/applicationRegistry": {
674
679
  "types": "./dist/core/runtime/applicationRegistry.d.ts",
675
680
  "import": "./dist/entries/runtime/applicationRegistry.js",
@@ -808,7 +813,7 @@
808
813
  "build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta",
809
814
  "build:types": "tsc -p tsconfig.types.json",
810
815
  "prepublishOnly": "bun run build && bun ../../scripts/prepare-core-package-publish.ts",
811
- "build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/password.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/model.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/loginThrottleMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webErrorResponse.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/validation.ts entries/jobs/dispatchWebhookJob.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/lifecycle/gracefulShutdown.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appKeyPrefix.ts entries/runtime/asyncContextStore.ts entries/scheduler/schedule.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/safeFetch.ts entries/security/safeUrl.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts entries/view.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --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/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",
816
+ "build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/password.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/model.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/loginThrottleMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webErrorResponse.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/validation.ts entries/jobs/dispatchWebhookJob.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/lifecycle/gracefulShutdown.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appKeyPrefix.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/schedule.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/safeFetch.ts entries/security/safeUrl.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts entries/view.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --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",
812
817
  "build:shims": "bun ../../scripts/write-core-shared-shims.ts"
813
818
  },
814
819
  "publishConfig": {
@@ -1,15 +0,0 @@
1
- declare const APP_PORT_CONFIG_KEY = "app.port";
2
- declare const CACHE_TTL_MS_CONFIG_KEY = "cache.ttlMs";
3
- declare const CACHE_MAX_ENTRIES_CONFIG_KEY = "cache.maxEntries";
4
- declare const CACHE_DRIVER_CONFIG_KEY = "cache.driver";
5
- declare const REDIS_URL_CONFIG_KEY = "cache.redisUrl";
6
- declare const DATABASE_URL_CONFIG_KEY = "database.url";
7
- export { CORE_ABILITY_CHECKER_TOKEN, CORE_AUTH_TOKEN, CORE_AUTH_USER_DIRECTORY_TOKEN, CORE_CACHE_TOKEN, CORE_CONFIG_TOKEN, CORE_EVENT_BUS_TOKEN, CORE_POLICY_GATE_TOKEN, CORE_QUEUE_TOKEN, CORE_TOKEN_SERVICE_TOKEN, } from "@getstrata/core/contracts/serviceTokens";
8
- declare const AUTH_DEV_HEADERS_CONFIG_KEY = "auth.allowDevHeaders";
9
- declare const DEFAULT_APP_PORT = 3000;
10
- declare const DEFAULT_CACHE_TTL_MS = 3600000;
11
- declare const DEFAULT_CACHE_MAX_ENTRIES = 100;
12
- declare const DEFAULT_CACHE_DRIVER = "array";
13
- declare const DEFAULT_API_TOKEN = "";
14
- declare const DEFAULT_QUEUE_DRIVER = "sync";
15
- export { APP_PORT_CONFIG_KEY, AUTH_DEV_HEADERS_CONFIG_KEY, CACHE_DRIVER_CONFIG_KEY, CACHE_MAX_ENTRIES_CONFIG_KEY, CACHE_TTL_MS_CONFIG_KEY, DATABASE_URL_CONFIG_KEY, DEFAULT_API_TOKEN, DEFAULT_APP_PORT, DEFAULT_CACHE_DRIVER, DEFAULT_CACHE_MAX_ENTRIES, DEFAULT_CACHE_TTL_MS, DEFAULT_QUEUE_DRIVER, REDIS_URL_CONFIG_KEY, };
@@ -1,9 +0,0 @@
1
- interface CorsConfig {
2
- allowedOrigins: string[];
3
- allowedMethods: string[];
4
- allowedHeaders: string[];
5
- maxAgeSeconds: number;
6
- }
7
- declare const corsConfig: CorsConfig;
8
- export type { CorsConfig };
9
- export { corsConfig };
@@ -1,18 +0,0 @@
1
- interface FeatureFlags {
2
- webhooks: boolean;
3
- fullTextSearch: boolean;
4
- auditLog: boolean;
5
- oauthLogin: boolean;
6
- samlLogin: boolean;
7
- scim: boolean;
8
- billing: boolean;
9
- siemExport: boolean;
10
- publicReads: boolean;
11
- emailVerification: boolean;
12
- mfa: boolean;
13
- }
14
- declare function readFeatureFlags(): FeatureFlags;
15
- declare const featureFlags: FeatureFlags;
16
- declare function isFeatureEnabled(feature: keyof FeatureFlags): boolean;
17
- export type { FeatureFlags };
18
- export { featureFlags, isFeatureEnabled, readFeatureFlags };
File without changes