@getstrata/core 0.5.50 → 0.5.52

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.
@@ -0,0 +1,378 @@
1
+ // @bun
2
+ // ../../src/core/facades/index.ts
3
+ import { eventBus } from "@getstrata/core/events";
4
+ import {
5
+ resolveApplicationAuth,
6
+ resolveApplicationCache,
7
+ resolveApplicationConfig,
8
+ resolveApplicationEventBus,
9
+ resolveApplicationLogger,
10
+ resolveApplicationPolicyGate,
11
+ resolveApplicationQueue
12
+ } from "@getstrata/core/runtime/applicationRegistry";
13
+
14
+ // ../../src/core/mail/mailer.ts
15
+ function resolveSmtpConfig() {
16
+ const host = process.env.MAIL_HOST?.trim();
17
+ if (!host) {
18
+ throw new Error('MAIL_DRIVER="smtp" requires MAIL_HOST to be set.');
19
+ }
20
+ const from = process.env.MAIL_FROM?.trim();
21
+ if (!from) {
22
+ throw new Error('MAIL_DRIVER="smtp" requires MAIL_FROM to be set.');
23
+ }
24
+ const port = Number.parseInt(process.env.MAIL_PORT ?? "587", 10);
25
+ if (!Number.isInteger(port) || port <= 0) {
26
+ throw new Error('Environment variable "MAIL_PORT" must be a positive integer.');
27
+ }
28
+ return {
29
+ host,
30
+ port,
31
+ from,
32
+ secure: (process.env.MAIL_SECURE ?? "false") === "true",
33
+ ...process.env.MAIL_USERNAME?.trim() ? { username: process.env.MAIL_USERNAME.trim() } : {},
34
+ ...process.env.MAIL_PASSWORD?.trim() ? { password: process.env.MAIL_PASSWORD.trim() } : {}
35
+ };
36
+ }
37
+ function encodeBase64(value) {
38
+ return Buffer.from(value, "utf8").toString("base64");
39
+ }
40
+ function parseSmtpResponses(buffer) {
41
+ const responses = [];
42
+ let remainder = buffer;
43
+ while (remainder.includes(`\r
44
+ `)) {
45
+ const index = remainder.indexOf(`\r
46
+ `);
47
+ const line = remainder.slice(0, index);
48
+ remainder = remainder.slice(index + 2);
49
+ if (line.length >= 4 && line[3] === "-") {
50
+ continue;
51
+ }
52
+ responses.push(line);
53
+ }
54
+ return { responses, remainder };
55
+ }
56
+ async function waitForSmtpResponse(readResponse, expectedCodes) {
57
+ const response = await readResponse();
58
+ const code = response.slice(0, 3);
59
+ if (!expectedCodes.includes(code)) {
60
+ throw new Error(`Unexpected SMTP response: ${response}`);
61
+ }
62
+ return response;
63
+ }
64
+ async function openSmtpConnection(config) {
65
+ let buffer = "";
66
+ const waiters = [];
67
+ const readResponse = () => new Promise((resolve, reject) => {
68
+ const parsed = parseSmtpResponses(buffer);
69
+ if (parsed.responses.length > 0) {
70
+ buffer = parsed.remainder;
71
+ resolve(parsed.responses.shift());
72
+ return;
73
+ }
74
+ waiters.push({ resolve, reject });
75
+ });
76
+ const socket = await Bun.connect({
77
+ hostname: config.host,
78
+ port: config.port,
79
+ socket: {
80
+ open() {},
81
+ data(_socket, chunk) {
82
+ buffer += Buffer.from(chunk).toString("utf8");
83
+ const parsed = parseSmtpResponses(buffer);
84
+ buffer = parsed.remainder;
85
+ while (parsed.responses.length > 0 && waiters.length > 0) {
86
+ const response = parsed.responses.shift();
87
+ waiters.shift()?.resolve(response);
88
+ }
89
+ },
90
+ error(_socket, error) {
91
+ const pending = waiters.splice(0);
92
+ for (const waiter of pending) {
93
+ waiter.reject(error instanceof Error ? error : new Error(String(error)));
94
+ }
95
+ }
96
+ }
97
+ });
98
+ return { socket, readResponse };
99
+ }
100
+ async function defaultSmtpTransport(config, message) {
101
+ const { socket, readResponse } = await openSmtpConnection(config);
102
+ try {
103
+ await waitForSmtpResponse(readResponse, ["220"]);
104
+ await socket.write(`EHLO workhub.local\r
105
+ `);
106
+ await waitForSmtpResponse(readResponse, ["250"]);
107
+ if (config.username && config.password) {
108
+ await socket.write(`AUTH LOGIN\r
109
+ `);
110
+ await waitForSmtpResponse(readResponse, ["334"]);
111
+ await socket.write(`${encodeBase64(config.username)}\r
112
+ `);
113
+ await waitForSmtpResponse(readResponse, ["334"]);
114
+ await socket.write(`${encodeBase64(config.password)}\r
115
+ `);
116
+ await waitForSmtpResponse(readResponse, ["235"]);
117
+ }
118
+ await socket.write(`MAIL FROM:<${config.from}>\r
119
+ `);
120
+ await waitForSmtpResponse(readResponse, ["250"]);
121
+ await socket.write(`RCPT TO:<${message.to}>\r
122
+ `);
123
+ await waitForSmtpResponse(readResponse, ["250", "251"]);
124
+ await socket.write(`DATA\r
125
+ `);
126
+ await waitForSmtpResponse(readResponse, ["354"]);
127
+ const payload = buildSmtpPayload(config.from, message);
128
+ await socket.write(payload);
129
+ await waitForSmtpResponse(readResponse, ["250"]);
130
+ await socket.write(`QUIT\r
131
+ `);
132
+ await waitForSmtpResponse(readResponse, ["221"]);
133
+ } finally {
134
+ socket.end();
135
+ }
136
+ }
137
+ function buildSmtpPayload(from, message) {
138
+ const headers = [
139
+ `From: ${from}`,
140
+ `To: ${message.to}`,
141
+ `Subject: ${message.subject}`,
142
+ "MIME-Version: 1.0"
143
+ ];
144
+ if (message.html) {
145
+ const boundary = `strata-${Date.now().toString(36)}`;
146
+ headers.push(`Content-Type: multipart/alternative; boundary="${boundary}"`);
147
+ const parts = [
148
+ `--${boundary}`,
149
+ "Content-Type: text/plain; charset=utf-8",
150
+ "",
151
+ message.body,
152
+ `--${boundary}`,
153
+ "Content-Type: text/html; charset=utf-8",
154
+ "",
155
+ message.html,
156
+ `--${boundary}--`,
157
+ ""
158
+ ];
159
+ return [...headers, "", ...parts, ".", ""].join(`\r
160
+ `);
161
+ }
162
+ headers.push("Content-Type: text/plain; charset=utf-8");
163
+ return [...headers, "", message.body, ".", ""].join(`\r
164
+ `);
165
+ }
166
+
167
+ class LogMailDriver {
168
+ async send(message) {
169
+ console.log(JSON.stringify({
170
+ level: "info",
171
+ channel: "mail",
172
+ to: message.to,
173
+ subject: message.subject,
174
+ body: message.body,
175
+ ...message.html ? { html: message.html } : {}
176
+ }));
177
+ }
178
+ }
179
+
180
+ class SmtpMailDriver {
181
+ config;
182
+ transport;
183
+ constructor(config, transport = defaultSmtpTransport) {
184
+ this.config = config;
185
+ this.transport = transport;
186
+ }
187
+ send(message) {
188
+ return this.transport(this.config, message);
189
+ }
190
+ }
191
+
192
+ class Mailer {
193
+ driver;
194
+ constructor(driver) {
195
+ this.driver = driver;
196
+ }
197
+ send(message) {
198
+ return this.driver.send(message);
199
+ }
200
+ }
201
+ function createMailDriver() {
202
+ const driver = process.env.MAIL_DRIVER ?? "log";
203
+ if (driver === "smtp") {
204
+ return new SmtpMailDriver(resolveSmtpConfig());
205
+ }
206
+ return new LogMailDriver;
207
+ }
208
+ var appMailer = new Mailer(createMailDriver());
209
+ function mailer() {
210
+ return appMailer;
211
+ }
212
+
213
+ // ../../src/core/storage/storage.ts
214
+ import { mkdir, readFile, unlink, writeFile } from "fs/promises";
215
+ import { dirname, join } from "path";
216
+ var {S3Client } = globalThis.Bun;
217
+
218
+ class LocalStorageDriver {
219
+ rootDirectory;
220
+ constructor(rootDirectory) {
221
+ this.rootDirectory = rootDirectory;
222
+ }
223
+ resolveRootDirectory() {
224
+ return this.rootDirectory ?? process.env.STORAGE_PATH ?? "storage";
225
+ }
226
+ resolvePath(path) {
227
+ return join(this.resolveRootDirectory(), path.replace(/^\/+/, ""));
228
+ }
229
+ async put(path, contents) {
230
+ const absolutePath = this.resolvePath(path);
231
+ await mkdir(dirname(absolutePath), { recursive: true });
232
+ await writeFile(absolutePath, contents);
233
+ return path;
234
+ }
235
+ async get(path) {
236
+ try {
237
+ return await readFile(this.resolvePath(path));
238
+ } catch {
239
+ return null;
240
+ }
241
+ }
242
+ async delete(path) {
243
+ try {
244
+ await unlink(this.resolvePath(path));
245
+ return true;
246
+ } catch {
247
+ return false;
248
+ }
249
+ }
250
+ }
251
+
252
+ class S3StorageDriver {
253
+ client;
254
+ constructor(client) {
255
+ this.client = client;
256
+ }
257
+ async put(path, contents) {
258
+ await this.client.write(path.replace(/^\/+/, ""), contents);
259
+ return path;
260
+ }
261
+ async get(path) {
262
+ const normalizedPath = path.replace(/^\/+/, "");
263
+ const file = this.client.file(normalizedPath);
264
+ if (!await file.exists()) {
265
+ return null;
266
+ }
267
+ return new Uint8Array(await file.arrayBuffer());
268
+ }
269
+ async delete(path) {
270
+ try {
271
+ await this.client.unlink(path.replace(/^\/+/, ""));
272
+ return true;
273
+ } catch {
274
+ return false;
275
+ }
276
+ }
277
+ }
278
+
279
+ class StorageManager {
280
+ driver;
281
+ constructor(driver) {
282
+ this.driver = driver;
283
+ }
284
+ put(path, contents) {
285
+ return this.driver.put(path, contents);
286
+ }
287
+ get(path) {
288
+ return this.driver.get(path);
289
+ }
290
+ delete(path) {
291
+ return this.driver.delete(path);
292
+ }
293
+ }
294
+ function resolveS3Config() {
295
+ const accessKeyId = process.env.AWS_ACCESS_KEY_ID?.trim();
296
+ const secretAccessKey = process.env.AWS_SECRET_ACCESS_KEY?.trim();
297
+ const bucket = process.env.AWS_BUCKET?.trim();
298
+ if (!accessKeyId || !secretAccessKey || !bucket) {
299
+ throw new Error('STORAGE_DRIVER="s3" requires AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, and AWS_BUCKET.');
300
+ }
301
+ return {
302
+ accessKeyId,
303
+ secretAccessKey,
304
+ bucket,
305
+ ...process.env.AWS_REGION?.trim() ? { region: process.env.AWS_REGION.trim() } : {},
306
+ ...process.env.AWS_ENDPOINT?.trim() ? { endpoint: process.env.AWS_ENDPOINT.trim() } : {}
307
+ };
308
+ }
309
+ function createS3Client(config = resolveS3Config()) {
310
+ return new S3Client({
311
+ accessKeyId: config.accessKeyId,
312
+ secretAccessKey: config.secretAccessKey,
313
+ bucket: config.bucket,
314
+ ...config.region ? { region: config.region } : {},
315
+ ...config.endpoint ? { endpoint: config.endpoint } : {}
316
+ });
317
+ }
318
+ function createStorageDriver() {
319
+ const driver = process.env.STORAGE_DRIVER ?? "local";
320
+ if (driver === "s3") {
321
+ return new S3StorageDriver(createS3Client());
322
+ }
323
+ return new LocalStorageDriver;
324
+ }
325
+ var defaultStorage = { current: null };
326
+ function storage() {
327
+ if (!defaultStorage.current) {
328
+ defaultStorage.current = new StorageManager(createStorageDriver());
329
+ }
330
+ return defaultStorage.current;
331
+ }
332
+ function resetDefaultStorage() {
333
+ defaultStorage.current = null;
334
+ }
335
+
336
+ // ../../src/core/facades/index.ts
337
+ function cache() {
338
+ return resolveApplicationCache();
339
+ }
340
+ function auth() {
341
+ return resolveApplicationAuth();
342
+ }
343
+ function policyGate() {
344
+ return resolveApplicationPolicyGate();
345
+ }
346
+ function queue() {
347
+ return resolveApplicationQueue();
348
+ }
349
+ function events() {
350
+ try {
351
+ return resolveApplicationEventBus();
352
+ } catch {
353
+ return eventBus;
354
+ }
355
+ }
356
+ function config(key) {
357
+ return resolveApplicationConfig().get(key);
358
+ }
359
+ function log() {
360
+ return resolveApplicationLogger();
361
+ }
362
+ function mail() {
363
+ return mailer();
364
+ }
365
+ function storageFacade() {
366
+ return storage();
367
+ }
368
+ export {
369
+ storageFacade as storage,
370
+ queue,
371
+ policyGate,
372
+ mail,
373
+ log,
374
+ events,
375
+ config,
376
+ cache,
377
+ auth
378
+ };
@@ -47,7 +47,7 @@ export { runInTransaction } from "../core/database/transaction.ts";
47
47
  export type { QueryJoin, QueryJoinOn, QueryOptions, QueryOrder, QuerySelectItem, QueryWhere, } from "../core/database/types.ts";
48
48
  export type { WhereNode } from "../core/database/whereBuilder.ts";
49
49
  export { WhereBuilder } from "../core/database/whereBuilder.ts";
50
- export { BadRequestError, ConflictError, ForbiddenError, NotFoundError, PreconditionFailedError, UnauthorizedError, UnprocessableEntityError, ValidationError, } from "../core/errors/http.ts";
50
+ export { BadRequestError, ConflictError, ForbiddenError, HttpError, NotFoundError, PayloadTooLargeError, PreconditionFailedError, UnauthorizedError, UnprocessableEntityError, ValidationError, } from "../core/errors/http.ts";
51
51
  export type { EventListener } from "../core/events/eventBus.ts";
52
52
  export { EventBus, eventBus } from "../core/events/eventBus.ts";
53
53
  export { modelEventName } from "../core/events/index.ts";
@@ -105,7 +105,8 @@ export type { SecurityEventDetails } from "../core/security/securityEvents.ts";
105
105
  export { logSecurityEvent } from "../core/security/securityEvents.ts";
106
106
  export type { StorageDriver } from "../core/storage/storage.ts";
107
107
  export { createStorageDriver, LocalStorageDriver, resetDefaultStorage, StorageManager, } from "../core/storage/storage.ts";
108
- export { currentTenant, currentTenantId, runWithTenant } from "../core/tenant/tenantContext.ts";
108
+ export type { TenantContext } from "../core/tenant/tenantContext.ts";
109
+ export { currentTenant, currentTenantId, rateLimitMultiplierForPlan, runWithTenant, } from "../core/tenant/tenantContext.ts";
109
110
  export { isInsideTenantDatabaseScope, runWithTenantDatabase, } from "../core/tenant/tenantDatabaseScope.ts";
110
111
  export { auditChecksum, createTenantMiddleware, DEFAULT_TENANT, resolveUserTenantId, } from "../core/tenant/tenantMiddleware.ts";
111
112
  export type { TraceContext } from "../core/tracing/traceContext.ts";
package/dist/index.js CHANGED
@@ -6758,6 +6758,7 @@ export {
6758
6758
  readSubmittedCsrfToken,
6759
6759
  readRequestCookie,
6760
6760
  readBunRequestCookie,
6761
+ rateLimitMultiplierForPlan,
6761
6762
  queue,
6762
6763
  prometheusRegistry,
6763
6764
  policyGate,
@@ -6907,6 +6908,7 @@ export {
6907
6908
  PostgresGrammar,
6908
6909
  PolicyGate,
6909
6910
  Policy,
6911
+ PayloadTooLargeError,
6910
6912
  NotificationDispatcher,
6911
6913
  Notification,
6912
6914
  NotFoundError,
@@ -6917,6 +6919,7 @@ export {
6917
6919
  LogMailDriver,
6918
6920
  LocalStorageDriver,
6919
6921
  Job,
6922
+ HttpError,
6920
6923
  GuestGuard,
6921
6924
  FormRequest,
6922
6925
  ForeignIdColumnDefinition,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.50",
3
+ "version": "0.5.52",
4
4
  "description": "Strata — Laravel-inspired Bun framework public API",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -295,6 +295,11 @@
295
295
  "import": "./dist/entries/events.js",
296
296
  "default": "./dist/entries/events.js"
297
297
  },
298
+ "./facades": {
299
+ "types": "./dist/core/facades.d.ts",
300
+ "import": "./dist/entries/facades.js",
301
+ "default": "./dist/entries/facades.js"
302
+ },
298
303
  "./http": {
299
304
  "types": "./dist/core/http/index.d.ts",
300
305
  "import": "./dist/entries/http.js",
@@ -722,7 +727,7 @@
722
727
  "build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta",
723
728
  "build:types": "tsc -p tsconfig.types.json",
724
729
  "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",
730
+ "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/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/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",
726
731
  "build:shims": "bun ../../scripts/write-core-shared-shims.ts"
727
732
  },
728
733
  "publishConfig": {