@getstrata/core 0.5.51 → 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.
- package/dist/entries/facades.js +378 -0
- package/package.json +7 -2
|
@@ -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
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/core",
|
|
3
|
-
"version": "0.5.
|
|
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": {
|