@getstrata/core 0.5.51 → 0.5.53

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.
@@ -3,12 +3,65 @@
3
3
  import { currentAuthUser } from "@getstrata/core/auth/authContext";
4
4
  import { BadRequestError } from "@getstrata/core/errors/http";
5
5
  import { currentTenantId } from "@getstrata/core/tenant/tenantContext";
6
+ function buildRequestCacheKey(fallbackPath, request) {
7
+ if (!request) {
8
+ return fallbackPath;
9
+ }
10
+ const url = new URL(request.url);
11
+ const user = currentAuthUser();
12
+ const authScope = user ? `u:${user.id}` : "guest";
13
+ const tenantScope = `t:${currentTenantId()}`;
14
+ return `${authScope}|${tenantScope}|${url.pathname}${url.search}`;
15
+ }
6
16
  function getQueryParams(request) {
7
17
  if (!request) {
8
18
  return new URLSearchParams;
9
19
  }
10
20
  return new URL(request.url).searchParams;
11
21
  }
22
+ function parseOptionalPositiveIntQueryParam(params, name) {
23
+ const value = params.get(name);
24
+ if (value === null || value.trim() === "") {
25
+ return;
26
+ }
27
+ const parsed = Number.parseInt(value, 10);
28
+ if (!Number.isInteger(parsed) || parsed <= 0) {
29
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected a positive integer.`);
30
+ }
31
+ return parsed;
32
+ }
33
+ function parseOptionalBooleanQueryParam(params, name) {
34
+ const value = params.get(name);
35
+ if (value === null || value.trim() === "") {
36
+ return;
37
+ }
38
+ switch (value.toLowerCase()) {
39
+ case "true":
40
+ case "1":
41
+ return true;
42
+ case "false":
43
+ case "0":
44
+ return false;
45
+ default:
46
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected a boolean.`);
47
+ }
48
+ }
49
+ function parseOptionalEnumQueryParam(params, name, allowedValues) {
50
+ const value = params.get(name);
51
+ if (value === null || value.trim() === "") {
52
+ return;
53
+ }
54
+ if (!allowedValues.includes(value)) {
55
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected one of: ${allowedValues.join(", ")}.`);
56
+ }
57
+ return value;
58
+ }
59
+ function expectObject(value, label = "request body") {
60
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
61
+ throw new BadRequestError(`${label} must be a JSON object.`);
62
+ }
63
+ return value;
64
+ }
12
65
  async function parseJsonBody(request, validator) {
13
66
  let payload;
14
67
  try {
@@ -18,6 +71,55 @@ async function parseJsonBody(request, validator) {
18
71
  }
19
72
  return validator(payload);
20
73
  }
74
+ function readRequiredString(payload, field, options = {}) {
75
+ const value = payload[field];
76
+ if (typeof value !== "string" || value.trim() === "") {
77
+ throw new BadRequestError(`"${field}" is required and must be a string.`);
78
+ }
79
+ const trimmed = value.trim();
80
+ if (options.minLength !== undefined && trimmed.length < options.minLength) {
81
+ throw new BadRequestError(`"${field}" must be at least ${options.minLength} characters.`);
82
+ }
83
+ if (options.maxLength !== undefined && trimmed.length > options.maxLength) {
84
+ throw new BadRequestError(`"${field}" must be at most ${options.maxLength} characters.`);
85
+ }
86
+ if (options.pattern && !options.pattern.test(trimmed)) {
87
+ throw new BadRequestError(`"${field}" has an invalid format.`);
88
+ }
89
+ return trimmed;
90
+ }
91
+ function readOptionalString(payload, field, options = {}) {
92
+ if (!(field in payload) || payload[field] === undefined) {
93
+ return;
94
+ }
95
+ return readRequiredString(payload, field, options);
96
+ }
97
+ function readRequiredEnum(payload, field, allowedValues) {
98
+ const value = readRequiredString(payload, field);
99
+ if (!allowedValues.includes(value)) {
100
+ throw new BadRequestError(`"${field}" must be one of: ${allowedValues.join(", ")}.`);
101
+ }
102
+ return value;
103
+ }
104
+ function readOptionalEnum(payload, field, allowedValues) {
105
+ if (!(field in payload) || payload[field] === undefined) {
106
+ return;
107
+ }
108
+ return readRequiredEnum(payload, field, allowedValues);
109
+ }
110
+ function readRequiredPositiveInt(payload, field) {
111
+ const value = payload[field];
112
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
113
+ throw new BadRequestError(`"${field}" is required and must be a positive integer.`);
114
+ }
115
+ return value;
116
+ }
117
+ function readOptionalPositiveInt(payload, field) {
118
+ if (!(field in payload) || payload[field] === undefined) {
119
+ return;
120
+ }
121
+ return readRequiredPositiveInt(payload, field);
122
+ }
21
123
  function parsePositiveIntParam(value, name = "id") {
22
124
  const parsed = Number.parseInt(value, 10);
23
125
  if (!Number.isInteger(parsed) || parsed <= 0) {
@@ -109,12 +109,65 @@ function applyConditionalGet(request, response, etag) {
109
109
  import { currentAuthUser } from "@getstrata/core/auth/authContext";
110
110
  import { BadRequestError } from "@getstrata/core/errors/http";
111
111
  import { currentTenantId } from "@getstrata/core/tenant/tenantContext";
112
+ function buildRequestCacheKey(fallbackPath, request) {
113
+ if (!request) {
114
+ return fallbackPath;
115
+ }
116
+ const url = new URL(request.url);
117
+ const user = currentAuthUser();
118
+ const authScope = user ? `u:${user.id}` : "guest";
119
+ const tenantScope = `t:${currentTenantId()}`;
120
+ return `${authScope}|${tenantScope}|${url.pathname}${url.search}`;
121
+ }
112
122
  function getQueryParams(request) {
113
123
  if (!request) {
114
124
  return new URLSearchParams;
115
125
  }
116
126
  return new URL(request.url).searchParams;
117
127
  }
128
+ function parseOptionalPositiveIntQueryParam(params, name) {
129
+ const value = params.get(name);
130
+ if (value === null || value.trim() === "") {
131
+ return;
132
+ }
133
+ const parsed = Number.parseInt(value, 10);
134
+ if (!Number.isInteger(parsed) || parsed <= 0) {
135
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected a positive integer.`);
136
+ }
137
+ return parsed;
138
+ }
139
+ function parseOptionalBooleanQueryParam(params, name) {
140
+ const value = params.get(name);
141
+ if (value === null || value.trim() === "") {
142
+ return;
143
+ }
144
+ switch (value.toLowerCase()) {
145
+ case "true":
146
+ case "1":
147
+ return true;
148
+ case "false":
149
+ case "0":
150
+ return false;
151
+ default:
152
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected a boolean.`);
153
+ }
154
+ }
155
+ function parseOptionalEnumQueryParam(params, name, allowedValues) {
156
+ const value = params.get(name);
157
+ if (value === null || value.trim() === "") {
158
+ return;
159
+ }
160
+ if (!allowedValues.includes(value)) {
161
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected one of: ${allowedValues.join(", ")}.`);
162
+ }
163
+ return value;
164
+ }
165
+ function expectObject(value, label = "request body") {
166
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
167
+ throw new BadRequestError(`${label} must be a JSON object.`);
168
+ }
169
+ return value;
170
+ }
118
171
  async function parseJsonBody(request, validator) {
119
172
  let payload;
120
173
  try {
@@ -124,6 +177,55 @@ async function parseJsonBody(request, validator) {
124
177
  }
125
178
  return validator(payload);
126
179
  }
180
+ function readRequiredString(payload, field, options = {}) {
181
+ const value = payload[field];
182
+ if (typeof value !== "string" || value.trim() === "") {
183
+ throw new BadRequestError(`"${field}" is required and must be a string.`);
184
+ }
185
+ const trimmed = value.trim();
186
+ if (options.minLength !== undefined && trimmed.length < options.minLength) {
187
+ throw new BadRequestError(`"${field}" must be at least ${options.minLength} characters.`);
188
+ }
189
+ if (options.maxLength !== undefined && trimmed.length > options.maxLength) {
190
+ throw new BadRequestError(`"${field}" must be at most ${options.maxLength} characters.`);
191
+ }
192
+ if (options.pattern && !options.pattern.test(trimmed)) {
193
+ throw new BadRequestError(`"${field}" has an invalid format.`);
194
+ }
195
+ return trimmed;
196
+ }
197
+ function readOptionalString(payload, field, options = {}) {
198
+ if (!(field in payload) || payload[field] === undefined) {
199
+ return;
200
+ }
201
+ return readRequiredString(payload, field, options);
202
+ }
203
+ function readRequiredEnum(payload, field, allowedValues) {
204
+ const value = readRequiredString(payload, field);
205
+ if (!allowedValues.includes(value)) {
206
+ throw new BadRequestError(`"${field}" must be one of: ${allowedValues.join(", ")}.`);
207
+ }
208
+ return value;
209
+ }
210
+ function readOptionalEnum(payload, field, allowedValues) {
211
+ if (!(field in payload) || payload[field] === undefined) {
212
+ return;
213
+ }
214
+ return readRequiredEnum(payload, field, allowedValues);
215
+ }
216
+ function readRequiredPositiveInt(payload, field) {
217
+ const value = payload[field];
218
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
219
+ throw new BadRequestError(`"${field}" is required and must be a positive integer.`);
220
+ }
221
+ return value;
222
+ }
223
+ function readOptionalPositiveInt(payload, field) {
224
+ if (!(field in payload) || payload[field] === undefined) {
225
+ return;
226
+ }
227
+ return readRequiredPositiveInt(payload, field);
228
+ }
127
229
  function parsePositiveIntParam(value, name = "id") {
128
230
  const parsed = Number.parseInt(value, 10);
129
231
  if (!Number.isInteger(parsed) || parsed <= 0) {
@@ -0,0 +1,145 @@
1
+ // @bun
2
+ // ../../src/core/http/validation.ts
3
+ import { currentAuthUser } from "@getstrata/core/auth/authContext";
4
+ import { BadRequestError } from "@getstrata/core/errors/http";
5
+ import { currentTenantId } from "@getstrata/core/tenant/tenantContext";
6
+ function buildRequestCacheKey(fallbackPath, request) {
7
+ if (!request) {
8
+ return fallbackPath;
9
+ }
10
+ const url = new URL(request.url);
11
+ const user = currentAuthUser();
12
+ const authScope = user ? `u:${user.id}` : "guest";
13
+ const tenantScope = `t:${currentTenantId()}`;
14
+ return `${authScope}|${tenantScope}|${url.pathname}${url.search}`;
15
+ }
16
+ function getQueryParams(request) {
17
+ if (!request) {
18
+ return new URLSearchParams;
19
+ }
20
+ return new URL(request.url).searchParams;
21
+ }
22
+ function parseOptionalPositiveIntQueryParam(params, name) {
23
+ const value = params.get(name);
24
+ if (value === null || value.trim() === "") {
25
+ return;
26
+ }
27
+ const parsed = Number.parseInt(value, 10);
28
+ if (!Number.isInteger(parsed) || parsed <= 0) {
29
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected a positive integer.`);
30
+ }
31
+ return parsed;
32
+ }
33
+ function parseOptionalBooleanQueryParam(params, name) {
34
+ const value = params.get(name);
35
+ if (value === null || value.trim() === "") {
36
+ return;
37
+ }
38
+ switch (value.toLowerCase()) {
39
+ case "true":
40
+ case "1":
41
+ return true;
42
+ case "false":
43
+ case "0":
44
+ return false;
45
+ default:
46
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected a boolean.`);
47
+ }
48
+ }
49
+ function parseOptionalEnumQueryParam(params, name, allowedValues) {
50
+ const value = params.get(name);
51
+ if (value === null || value.trim() === "") {
52
+ return;
53
+ }
54
+ if (!allowedValues.includes(value)) {
55
+ throw new BadRequestError(`Invalid query parameter "${name}". Expected one of: ${allowedValues.join(", ")}.`);
56
+ }
57
+ return value;
58
+ }
59
+ function expectObject(value, label = "request body") {
60
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
61
+ throw new BadRequestError(`${label} must be a JSON object.`);
62
+ }
63
+ return value;
64
+ }
65
+ async function parseJsonBody(request, validator) {
66
+ let payload;
67
+ try {
68
+ payload = await request.json();
69
+ } catch {
70
+ throw new BadRequestError("Request body must be valid JSON.");
71
+ }
72
+ return validator(payload);
73
+ }
74
+ function readRequiredString(payload, field, options = {}) {
75
+ const value = payload[field];
76
+ if (typeof value !== "string" || value.trim() === "") {
77
+ throw new BadRequestError(`"${field}" is required and must be a string.`);
78
+ }
79
+ const trimmed = value.trim();
80
+ if (options.minLength !== undefined && trimmed.length < options.minLength) {
81
+ throw new BadRequestError(`"${field}" must be at least ${options.minLength} characters.`);
82
+ }
83
+ if (options.maxLength !== undefined && trimmed.length > options.maxLength) {
84
+ throw new BadRequestError(`"${field}" must be at most ${options.maxLength} characters.`);
85
+ }
86
+ if (options.pattern && !options.pattern.test(trimmed)) {
87
+ throw new BadRequestError(`"${field}" has an invalid format.`);
88
+ }
89
+ return trimmed;
90
+ }
91
+ function readOptionalString(payload, field, options = {}) {
92
+ if (!(field in payload) || payload[field] === undefined) {
93
+ return;
94
+ }
95
+ return readRequiredString(payload, field, options);
96
+ }
97
+ function readRequiredEnum(payload, field, allowedValues) {
98
+ const value = readRequiredString(payload, field);
99
+ if (!allowedValues.includes(value)) {
100
+ throw new BadRequestError(`"${field}" must be one of: ${allowedValues.join(", ")}.`);
101
+ }
102
+ return value;
103
+ }
104
+ function readOptionalEnum(payload, field, allowedValues) {
105
+ if (!(field in payload) || payload[field] === undefined) {
106
+ return;
107
+ }
108
+ return readRequiredEnum(payload, field, allowedValues);
109
+ }
110
+ function readRequiredPositiveInt(payload, field) {
111
+ const value = payload[field];
112
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
113
+ throw new BadRequestError(`"${field}" is required and must be a positive integer.`);
114
+ }
115
+ return value;
116
+ }
117
+ function readOptionalPositiveInt(payload, field) {
118
+ if (!(field in payload) || payload[field] === undefined) {
119
+ return;
120
+ }
121
+ return readRequiredPositiveInt(payload, field);
122
+ }
123
+ function parsePositiveIntParam(value, name = "id") {
124
+ const parsed = Number.parseInt(value, 10);
125
+ if (!Number.isInteger(parsed) || parsed <= 0) {
126
+ throw new BadRequestError(`Invalid ${name}. Expected a positive integer.`);
127
+ }
128
+ return parsed;
129
+ }
130
+ export {
131
+ readRequiredString,
132
+ readRequiredPositiveInt,
133
+ readRequiredEnum,
134
+ readOptionalString,
135
+ readOptionalPositiveInt,
136
+ readOptionalEnum,
137
+ parsePositiveIntParam,
138
+ parseOptionalPositiveIntQueryParam,
139
+ parseOptionalEnumQueryParam,
140
+ parseOptionalBooleanQueryParam,
141
+ parseJsonBody,
142
+ getQueryParams,
143
+ expectObject,
144
+ buildRequestCacheKey
145
+ };
@@ -48,12 +48,65 @@ function formDataToRecord(formData) {
48
48
  import { currentAuthUser } from "@getstrata/core/auth/authContext";
49
49
  import { BadRequestError as BadRequestError2 } from "@getstrata/core/errors/http";
50
50
  import { currentTenantId } from "@getstrata/core/tenant/tenantContext";
51
+ function buildRequestCacheKey(fallbackPath, request) {
52
+ if (!request) {
53
+ return fallbackPath;
54
+ }
55
+ const url = new URL(request.url);
56
+ const user = currentAuthUser();
57
+ const authScope = user ? `u:${user.id}` : "guest";
58
+ const tenantScope = `t:${currentTenantId()}`;
59
+ return `${authScope}|${tenantScope}|${url.pathname}${url.search}`;
60
+ }
51
61
  function getQueryParams(request) {
52
62
  if (!request) {
53
63
  return new URLSearchParams;
54
64
  }
55
65
  return new URL(request.url).searchParams;
56
66
  }
67
+ function parseOptionalPositiveIntQueryParam(params, name) {
68
+ const value = params.get(name);
69
+ if (value === null || value.trim() === "") {
70
+ return;
71
+ }
72
+ const parsed = Number.parseInt(value, 10);
73
+ if (!Number.isInteger(parsed) || parsed <= 0) {
74
+ throw new BadRequestError2(`Invalid query parameter "${name}". Expected a positive integer.`);
75
+ }
76
+ return parsed;
77
+ }
78
+ function parseOptionalBooleanQueryParam(params, name) {
79
+ const value = params.get(name);
80
+ if (value === null || value.trim() === "") {
81
+ return;
82
+ }
83
+ switch (value.toLowerCase()) {
84
+ case "true":
85
+ case "1":
86
+ return true;
87
+ case "false":
88
+ case "0":
89
+ return false;
90
+ default:
91
+ throw new BadRequestError2(`Invalid query parameter "${name}". Expected a boolean.`);
92
+ }
93
+ }
94
+ function parseOptionalEnumQueryParam(params, name, allowedValues) {
95
+ const value = params.get(name);
96
+ if (value === null || value.trim() === "") {
97
+ return;
98
+ }
99
+ if (!allowedValues.includes(value)) {
100
+ throw new BadRequestError2(`Invalid query parameter "${name}". Expected one of: ${allowedValues.join(", ")}.`);
101
+ }
102
+ return value;
103
+ }
104
+ function expectObject(value, label = "request body") {
105
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
106
+ throw new BadRequestError2(`${label} must be a JSON object.`);
107
+ }
108
+ return value;
109
+ }
57
110
  async function parseJsonBody(request, validator) {
58
111
  let payload;
59
112
  try {
@@ -63,6 +116,55 @@ async function parseJsonBody(request, validator) {
63
116
  }
64
117
  return validator(payload);
65
118
  }
119
+ function readRequiredString(payload, field, options = {}) {
120
+ const value = payload[field];
121
+ if (typeof value !== "string" || value.trim() === "") {
122
+ throw new BadRequestError2(`"${field}" is required and must be a string.`);
123
+ }
124
+ const trimmed = value.trim();
125
+ if (options.minLength !== undefined && trimmed.length < options.minLength) {
126
+ throw new BadRequestError2(`"${field}" must be at least ${options.minLength} characters.`);
127
+ }
128
+ if (options.maxLength !== undefined && trimmed.length > options.maxLength) {
129
+ throw new BadRequestError2(`"${field}" must be at most ${options.maxLength} characters.`);
130
+ }
131
+ if (options.pattern && !options.pattern.test(trimmed)) {
132
+ throw new BadRequestError2(`"${field}" has an invalid format.`);
133
+ }
134
+ return trimmed;
135
+ }
136
+ function readOptionalString(payload, field, options = {}) {
137
+ if (!(field in payload) || payload[field] === undefined) {
138
+ return;
139
+ }
140
+ return readRequiredString(payload, field, options);
141
+ }
142
+ function readRequiredEnum(payload, field, allowedValues) {
143
+ const value = readRequiredString(payload, field);
144
+ if (!allowedValues.includes(value)) {
145
+ throw new BadRequestError2(`"${field}" must be one of: ${allowedValues.join(", ")}.`);
146
+ }
147
+ return value;
148
+ }
149
+ function readOptionalEnum(payload, field, allowedValues) {
150
+ if (!(field in payload) || payload[field] === undefined) {
151
+ return;
152
+ }
153
+ return readRequiredEnum(payload, field, allowedValues);
154
+ }
155
+ function readRequiredPositiveInt(payload, field) {
156
+ const value = payload[field];
157
+ if (typeof value !== "number" || !Number.isInteger(value) || value <= 0) {
158
+ throw new BadRequestError2(`"${field}" is required and must be a positive integer.`);
159
+ }
160
+ return value;
161
+ }
162
+ function readOptionalPositiveInt(payload, field) {
163
+ if (!(field in payload) || payload[field] === undefined) {
164
+ return;
165
+ }
166
+ return readRequiredPositiveInt(payload, field);
167
+ }
66
168
  function parsePositiveIntParam(value, name = "id") {
67
169
  const parsed = Number.parseInt(value, 10);
68
170
  if (!Number.isInteger(parsed) || parsed <= 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.51",
3
+ "version": "0.5.53",
4
4
  "description": "Strata — Laravel-inspired Bun framework public API",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -255,6 +255,11 @@
255
255
  "import": "./dist/entries/database/repositoryConnection.js",
256
256
  "default": "./dist/entries/database/repositoryConnection.js"
257
257
  },
258
+ "./database/repositoryQuery": {
259
+ "types": "./dist/core/database/repositoryQuery.d.ts",
260
+ "import": "./dist/entries/database/repositoryQuery.js",
261
+ "default": "./dist/entries/database/repositoryQuery.js"
262
+ },
258
263
  "./database/seeders": {
259
264
  "types": "./dist/core/database/seeders/runner.d.ts",
260
265
  "import": "./dist/entries/database/seeders.js",
@@ -285,6 +290,11 @@
285
290
  "import": "./dist/entries/database/types.js",
286
291
  "default": "./dist/entries/database/types.js"
287
292
  },
293
+ "./database/whereBuilder": {
294
+ "types": "./dist/core/database/whereBuilder.d.ts",
295
+ "import": "./dist/entries/database/whereBuilder.js",
296
+ "default": "./dist/entries/database/whereBuilder.js"
297
+ },
288
298
  "./errors/http": {
289
299
  "types": "./dist/core/errors/http.d.ts",
290
300
  "import": "./dist/entries/errors/http.js",
@@ -295,6 +305,11 @@
295
305
  "import": "./dist/entries/events.js",
296
306
  "default": "./dist/entries/events.js"
297
307
  },
308
+ "./facades": {
309
+ "types": "./dist/core/facades.d.ts",
310
+ "import": "./dist/entries/facades.js",
311
+ "default": "./dist/entries/facades.js"
312
+ },
298
313
  "./http": {
299
314
  "types": "./dist/core/http/index.d.ts",
300
315
  "import": "./dist/entries/http.js",
@@ -480,6 +495,11 @@
480
495
  "import": "./dist/entries/http/throttleMiddleware.js",
481
496
  "default": "./dist/entries/http/throttleMiddleware.js"
482
497
  },
498
+ "./http/validation": {
499
+ "types": "./dist/core/http/validation.d.ts",
500
+ "import": "./dist/entries/http/validation.js",
501
+ "default": "./dist/entries/http/validation.js"
502
+ },
483
503
  "./jobs/dispatchWebhookJob": {
484
504
  "types": "./dist/core/jobs/dispatchWebhookJob.d.ts",
485
505
  "import": "./dist/entries/jobs/dispatchWebhookJob.js",
@@ -722,7 +742,7 @@
722
742
  "build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta",
723
743
  "build:types": "tsc -p tsconfig.types.json",
724
744
  "prepublishOnly": "bun run build && bun ../../scripts/prepare-core-package-publish.ts",
725
- "build:subpaths": "bun build entries/auth/abilityChecker.ts entries/auth/membershipMiddleware.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/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/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/table.ts entries/database/types.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.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/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.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/jobs/dispatchWebhookJob.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/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/asyncContextStore.ts entries/scheduler/schedule.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/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.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/authContext --external @getstrata/core/auth/guard --external @getstrata/core/auth/membershipContext --external @getstrata/core/auth/membershipScope --external @getstrata/core/auth/membershipService --external @getstrata/core/auth/policy --external @getstrata/core/database --external @getstrata/core/database/baseRepository --external @getstrata/core/database/bindConnection --external @getstrata/core/database/boundConnection --external @getstrata/core/database/connection --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/transaction --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/http --external @getstrata/core/http/middleware --external @getstrata/core/http/requestMetaContext --external @getstrata/core/notifications --external @getstrata/core/queue/jobRegistry --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/security/securityEvents --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tracing/traceContext",
745
+ "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/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/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.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/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/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/asyncContextStore.ts entries/scheduler/schedule.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/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.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/connection --external @getstrata/core/database/defaultConnection --external @getstrata/core/database/errors --external @getstrata/core/database/factory --external @getstrata/core/database/migrations --external @getstrata/core/database/migrations/types --external @getstrata/core/database/model --external @getstrata/core/database/query --external @getstrata/core/database/relationships --external @getstrata/core/database/repositoryConnection --external @getstrata/core/database/repositoryQuery --external @getstrata/core/database/seeders --external @getstrata/core/database/seeders/types --external @getstrata/core/database/schema --external @getstrata/core/database/table --external @getstrata/core/database/transaction --external @getstrata/core/database/types --external @getstrata/core/database/whereBuilder --external @getstrata/core/errors/http --external @getstrata/core/events --external @getstrata/core/facades --external @getstrata/core/http --external @getstrata/core/http/authMiddleware --external @getstrata/core/http/authorizeMiddleware --external @getstrata/core/http/bodySizeLimitMiddleware --external @getstrata/core/http/cookies --external @getstrata/core/http/contentNegotiation --external @getstrata/core/http/conditionalResponse --external @getstrata/core/http/corsMiddleware --external @getstrata/core/http/csrfMiddleware --external @getstrata/core/http/csrfProtection --external @getstrata/core/http/csrfToken --external @getstrata/core/http/etag --external @getstrata/core/http/flashSession --external @getstrata/core/http/flashMiddleware --external @getstrata/core/http/formRequest --external @getstrata/core/http/middleware --external @getstrata/core/http/metricsMiddleware --external @getstrata/core/http/loginThrottleMiddleware --external @getstrata/core/http/memoryThrottleMiddleware --external @getstrata/core/http/pagination --external @getstrata/core/http/parseFormBody --external @getstrata/core/http/parseMultipartUpload --external @getstrata/core/http/requireAbilityMiddleware --external @getstrata/core/http/requireAuthMiddleware --external @getstrata/core/http/requireGlobalAdminMiddleware --external @getstrata/core/http/requireWebAuthMiddleware --external @getstrata/core/http/resources --external @getstrata/core/http/route --external @getstrata/core/http/routeMiddleware --external @getstrata/core/http/routeModelBinding --external @getstrata/core/http/scimThrottleMiddleware --external @getstrata/core/http/securityHeadersMiddleware --external @getstrata/core/http/securedRouteModelBinding --external @getstrata/core/http/requestMetaContext --external @getstrata/core/http/webErrorResponse --external @getstrata/core/http/webFormRequest --external @getstrata/core/http/throttleMiddleware --external @getstrata/core/http/validation --external @getstrata/core/jobs/dispatchWebhookJob --external @getstrata/core/jobs/invalidateCacheTagsJob --external @getstrata/core/lifecycle/gracefulShutdown --external @getstrata/core/logging/logger --external @getstrata/core/logging/requestLoggingMiddleware --external @getstrata/core/mail/mailer --external @getstrata/core/mail/markdownMail --external @getstrata/core/mail/markdownMailable --external @getstrata/core/metrics/prometheus --external @getstrata/core/notifications --external @getstrata/core/openapi/generator --external @getstrata/core/openapi/registeredRoute --external @getstrata/core/openapi/validate --external @getstrata/core/pagination --external @getstrata/core/queue --external @getstrata/core/queue/createAppQueue --external @getstrata/core/queue/failedJobRepository --external @getstrata/core/queue/failedJobService --external @getstrata/core/queue/jobRegistry --external @getstrata/core/queue/jobRunner --external @getstrata/core/queue/queueMetrics --external @getstrata/core/queue/publicQueue --external @getstrata/core/queue/redisQueue --external @getstrata/core/queue/types --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/timingSafeCompare --external @getstrata/core/security/tokenExpiry --external @getstrata/core/security/totp --external @getstrata/core/storage/storage --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
726
746
  "build:shims": "bun ../../scripts/write-core-shared-shims.ts"
727
747
  },
728
748
  "publishConfig": {