@getstrata/bootstrap 0.2.51 → 0.2.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.
- package/CHANGELOG.md +11 -0
- package/dist/bootstrap/web/routing.d.ts +7 -1
- package/dist/entries/context.js +19 -3
- package/dist/entries/createRoutes.js +24 -11
- package/dist/entries/createWebRoutes.js +2 -2
- package/dist/entries/dependencies.js +19 -3
- package/dist/entries/providers/view.js +16 -2
- package/dist/entries/providers.js +19 -3
- package/dist/entries/queue/defaultJobs.js +2 -0
- package/dist/entries/schedule.js +2 -5
- package/dist/entries/web/server.js +31 -14
- package/dist/index.js +52 -19
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @getstrata/bootstrap changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.53
|
|
4
|
+
|
|
5
|
+
- `registerDefaultJobs()` also registers `audit.export` (`ExportAuditLogsJob`).
|
|
6
|
+
- In-process `audit-export` schedule runs that job instead of calling `exportPendingAuditLogs()` inline.
|
|
7
|
+
|
|
8
|
+
## 0.2.52
|
|
9
|
+
|
|
10
|
+
- View provider registers `configureWebErrorView` so `errors/*.eta` render through the app Eta layout. `EtaViewEngine` receives `Request` from the layout-data resolver.
|
|
11
|
+
- `createWebServer` unknown routes and null handlers return styled HTML 404s and run inside request ALS so `configureWebLayoutData` can read the session cookie.
|
|
12
|
+
- `wrapSecuredRouteModelByKey` is documented as the wrong default for public HTML show pages; a missing model is a styled 404 and HTML/composite GET ETags stay off.
|
|
13
|
+
|
|
3
14
|
## 0.2.51
|
|
4
15
|
|
|
5
16
|
- `createCookieSessionAuthManager` returns `CookieSessionAuthManager` (`signIn`, `signOut`, `signInRedirect`, `signOutRedirect`). Controllers no longer need a local cookie helper.
|
|
@@ -9,10 +9,16 @@ export declare function routeParams(request: Request): Record<string, string>;
|
|
|
9
9
|
* Mutates the request in place so instanceof Request and Bun internals stay valid.
|
|
10
10
|
*/
|
|
11
11
|
export declare function toRouteRequest<TParams extends Record<string, string>>(request: Request): RouteRequest<TParams>;
|
|
12
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Laravel-style secured route-model binding for string keys (slugs, UUIDs).
|
|
14
|
+
* Public HTML show pages should look up the model in the controller instead.
|
|
15
|
+
* If this wrapper is still used on HTML, a missing model becomes a styled 404
|
|
16
|
+
* and GET ETags are skipped for HTML / composite objects unless `etag: true`.
|
|
17
|
+
*/
|
|
13
18
|
export declare function wrapSecuredRouteModelByKey<TParams extends Record<string, string>, TModel, TParam extends keyof TParams & string>(param: TParam, resolver: (key: string, request: RouteRequest<TParams>) => Promise<TModel>, authorization: {
|
|
14
19
|
resource: string;
|
|
15
20
|
action: "view" | "create" | "update" | "delete";
|
|
21
|
+
etag?: boolean;
|
|
16
22
|
}, handler: (request: RouteRequest<TParams>, model: TModel) => Response | Promise<Response>): RouteHandler;
|
|
17
23
|
/** Web group (CSRF + flash + HTML errors) plus login throttle. Do not wrap with wrapWeb again. */
|
|
18
24
|
export declare function wrapWebLogin(kernel: HttpKernel, handler: RouteHandler, onThrottled: (request: Request) => Response | Promise<Response>): RouteHandler;
|
package/dist/entries/context.js
CHANGED
|
@@ -170,7 +170,7 @@ import { validateEnv } from "@getstrata/core/config/envSchema";
|
|
|
170
170
|
|
|
171
171
|
// ../../src/config/app.ts
|
|
172
172
|
var appConfig = {
|
|
173
|
-
name: "WorkHub",
|
|
173
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
174
174
|
env: process.env.APP_ENV ?? "local",
|
|
175
175
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
176
176
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -424,6 +424,7 @@ import {
|
|
|
424
424
|
|
|
425
425
|
// ../../src/bootstrap/queue/defaultJobs.ts
|
|
426
426
|
import { DispatchWebhookJob } from "@getstrata/core/jobs/dispatchWebhookJob";
|
|
427
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
427
428
|
import { InvalidateCacheTagsJob as InvalidateCacheTagsJob2 } from "@getstrata/core/jobs/invalidateCacheTagsJob";
|
|
428
429
|
import { jobRegistry } from "@getstrata/core/queue/jobRegistry";
|
|
429
430
|
import { resolveApplicationCache as resolveApplicationCache2 } from "@getstrata/core/runtime/applicationRegistry";
|
|
@@ -432,6 +433,7 @@ function registerDefaultJobs() {
|
|
|
432
433
|
return new InvalidateCacheTagsJob2(resolveApplicationCache2());
|
|
433
434
|
});
|
|
434
435
|
jobRegistry.register("webhook.dispatch", () => new DispatchWebhookJob);
|
|
436
|
+
jobRegistry.register("audit.export", () => new ExportAuditLogsJob);
|
|
435
437
|
}
|
|
436
438
|
|
|
437
439
|
// ../../src/bootstrap/providers/queue.ts
|
|
@@ -460,7 +462,13 @@ var storage_default = storageProvider;
|
|
|
460
462
|
|
|
461
463
|
// ../../src/bootstrap/providers/view.ts
|
|
462
464
|
import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
463
|
-
import {
|
|
465
|
+
import {
|
|
466
|
+
configureWebErrorView,
|
|
467
|
+
DEFAULT_VIEWS_DIRECTORY,
|
|
468
|
+
EtaViewEngine,
|
|
469
|
+
errorTemplateName,
|
|
470
|
+
resolveWebLayoutData
|
|
471
|
+
} from "@getstrata/core/view";
|
|
464
472
|
|
|
465
473
|
// ../../src/config/frontend.ts
|
|
466
474
|
function readFrontendMode() {
|
|
@@ -491,7 +499,15 @@ var viewProvider = {
|
|
|
491
499
|
}
|
|
492
500
|
const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
|
|
493
501
|
config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
|
|
494
|
-
|
|
502
|
+
const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
|
|
503
|
+
container.set(CORE_VIEW_TOKEN, engine);
|
|
504
|
+
configureWebErrorView({
|
|
505
|
+
render: async (input) => engine.render(errorTemplateName(input.status), {
|
|
506
|
+
title: input.title,
|
|
507
|
+
message: input.message,
|
|
508
|
+
errors: input.errors
|
|
509
|
+
})
|
|
510
|
+
});
|
|
495
511
|
}
|
|
496
512
|
};
|
|
497
513
|
|
|
@@ -4,14 +4,14 @@ var __jsonParse = (a) => JSON.parse(a);
|
|
|
4
4
|
// ../../src/bootstrap/createRoutes.ts
|
|
5
5
|
import { applyMiddlewareToRoutes as applyMiddlewareToRoutes3 } from "@getstrata/core/http/middleware";
|
|
6
6
|
import { jsonResponse as jsonResponse4 } from "@getstrata/core/http/response";
|
|
7
|
-
import {
|
|
7
|
+
import { notFoundHtmlResponse as notFoundHtmlResponse2 } from "@getstrata/core/view";
|
|
8
8
|
|
|
9
9
|
// ../../index.html
|
|
10
10
|
var strata_default = __jsonParse("{\"index\":\"_.._/_.._/index.html\",\"files\":[{\"input\":\"../../index.html\",\"path\":\"./index-sfreg6q3.js\",\"loader\":\"js\",\"isEntry\":true,\"headers\":{\"etag\":\"Oc_YLpCmV6M\",\"content-type\":\"text/javascript;charset=utf-8\"}},{\"input\":\"../../index.html\",\"path\":\"_.._/_.._/index.html\",\"loader\":\"html\",\"isEntry\":true,\"headers\":{\"etag\":\"rWY90LWIcx8\",\"content-type\":\"text/html;charset=utf-8\"}}]}");
|
|
11
11
|
|
|
12
12
|
// ../../src/config/app.ts
|
|
13
13
|
var appConfig = {
|
|
14
|
-
name: "WorkHub",
|
|
14
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
15
15
|
env: process.env.APP_ENV ?? "local",
|
|
16
16
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
17
17
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -508,7 +508,7 @@ function mergeSpaRoutes(dependencies, routes) {
|
|
|
508
508
|
|
|
509
509
|
// ../../src/bootstrap/createWebRoutes.ts
|
|
510
510
|
import { join as join3 } from "path";
|
|
511
|
-
import {
|
|
511
|
+
import { notFoundHtmlResponse } from "@getstrata/core/view";
|
|
512
512
|
|
|
513
513
|
// ../../src/bootstrap/buildWebModuleRoutes.ts
|
|
514
514
|
import { applyMiddlewareToRoutes as applyMiddlewareToRoutes2 } from "@getstrata/core/http/middleware";
|
|
@@ -551,7 +551,7 @@ function createWebRoutes(dependencies) {
|
|
|
551
551
|
const relativePath = pathname.replace(/^\//, "");
|
|
552
552
|
const file = Bun.file(join3(process.cwd(), "public", relativePath));
|
|
553
553
|
if (!await file.exists()) {
|
|
554
|
-
return
|
|
554
|
+
return notFoundHtmlResponse();
|
|
555
555
|
}
|
|
556
556
|
return new Response(file);
|
|
557
557
|
};
|
|
@@ -751,7 +751,7 @@ function assertScimIfMatch(request, etagSource) {
|
|
|
751
751
|
}
|
|
752
752
|
|
|
753
753
|
// ../../src/modules/scim/service.ts
|
|
754
|
-
import { hashPassword } from "@getstrata/core/auth/password";
|
|
754
|
+
import { hashPassword as hashPassword2 } from "@getstrata/core/auth/password";
|
|
755
755
|
import { resolveService } from "@getstrata/core/contracts/di";
|
|
756
756
|
import { NotFoundError as NotFoundError4 } from "@getstrata/core/errors/http";
|
|
757
757
|
import { currentTenantId as currentTenantId4 } from "@getstrata/core/tenant/tenantContext";
|
|
@@ -1014,11 +1014,11 @@ var apiTokenTable = defineTable2({
|
|
|
1014
1014
|
|
|
1015
1015
|
// ../../src/modules/user/authService.ts
|
|
1016
1016
|
import { verifyPassword } from "@getstrata/core/auth/password";
|
|
1017
|
-
import { revealMfaSecret } from "@getstrata/core/crypto/mfaSecret";
|
|
1018
|
-
import { UnauthorizedError } from "@getstrata/core/errors/http";
|
|
1017
|
+
import { protectMfaSecret, revealMfaSecret } from "@getstrata/core/crypto/mfaSecret";
|
|
1018
|
+
import { UnauthorizedError, ValidationError } from "@getstrata/core/errors/http";
|
|
1019
1019
|
import { logSecurityEvent } from "@getstrata/core/security/securityEvents";
|
|
1020
1020
|
import { resolveDefaultTokenExpiryDays } from "@getstrata/core/security/tokenExpiry";
|
|
1021
|
-
import { verifyTotp } from "@getstrata/core/security/totp";
|
|
1021
|
+
import { buildOtpauthUrl, generateTotpSecret, verifyTotp } from "@getstrata/core/security/totp";
|
|
1022
1022
|
import { currentTenantId as currentTenantId2 } from "@getstrata/core/tenant/tenantContext";
|
|
1023
1023
|
|
|
1024
1024
|
// ../../src/core/auth/abilityCatalog.ts
|
|
@@ -1075,6 +1075,19 @@ var oauthIdentityTable = defineTable4({
|
|
|
1075
1075
|
columns: ["id", "user_id", "provider", "provider_user_id", "email", "created_at"]
|
|
1076
1076
|
});
|
|
1077
1077
|
|
|
1078
|
+
// ../../src/modules/user/passwordResetService.ts
|
|
1079
|
+
import { hashPassword } from "@getstrata/core/auth/password";
|
|
1080
|
+
import { hashApiToken } from "@getstrata/core/auth/tokenHash";
|
|
1081
|
+
import { repositoryConnection as db2 } from "@getstrata/core/database/repositoryConnection";
|
|
1082
|
+
import { ValidationError as ValidationError2 } from "@getstrata/core/errors/http";
|
|
1083
|
+
import { absoluteTemporarySignedUrl } from "@getstrata/core/http/signedUrl";
|
|
1084
|
+
import { mailer } from "@getstrata/core/mail/mailer";
|
|
1085
|
+
import { sendMarkdownMail } from "@getstrata/core/mail/markdownMailable";
|
|
1086
|
+
import { logSecurityEvent as logSecurityEvent2 } from "@getstrata/core/security/securityEvents";
|
|
1087
|
+
import { timingSafeCompareString } from "@getstrata/core/security/timingSafeCompare";
|
|
1088
|
+
var RESET_TTL_SECONDS = 60 * 60;
|
|
1089
|
+
var VERIFY_TTL_SECONDS = 60 * 60 * 24;
|
|
1090
|
+
|
|
1078
1091
|
// ../../src/modules/user/repository.ts
|
|
1079
1092
|
import {
|
|
1080
1093
|
emailLookupForQuery,
|
|
@@ -1108,7 +1121,7 @@ var userTable = defineTable5({
|
|
|
1108
1121
|
});
|
|
1109
1122
|
|
|
1110
1123
|
// ../../src/modules/user/tokenService.ts
|
|
1111
|
-
import { hashApiToken } from "@getstrata/core/auth/tokenHash";
|
|
1124
|
+
import { hashApiToken as hashApiToken2 } from "@getstrata/core/auth/tokenHash";
|
|
1112
1125
|
import { ForbiddenError, NotFoundError as NotFoundError3 } from "@getstrata/core/errors/http";
|
|
1113
1126
|
import { resolveDefaultTokenExpiryDays as resolveDefaultTokenExpiryDays2 } from "@getstrata/core/security/tokenExpiry";
|
|
1114
1127
|
|
|
@@ -1176,7 +1189,7 @@ class ScimService {
|
|
|
1176
1189
|
if (!email) {
|
|
1177
1190
|
throw new Error("SCIM userName or email is required.");
|
|
1178
1191
|
}
|
|
1179
|
-
const passwordHash = await
|
|
1192
|
+
const passwordHash = await hashPassword2(crypto.randomUUID());
|
|
1180
1193
|
const user = await this.users.create({
|
|
1181
1194
|
name: payload.name?.formatted ?? email.split("@")[0] ?? "SCIM User",
|
|
1182
1195
|
email,
|
|
@@ -1428,7 +1441,7 @@ function createRoutes(dependencies) {
|
|
|
1428
1441
|
"/*": async () => {
|
|
1429
1442
|
registerRoute2("GET", "/*", []);
|
|
1430
1443
|
if (isViewsEnabled()) {
|
|
1431
|
-
return
|
|
1444
|
+
return notFoundHtmlResponse2();
|
|
1432
1445
|
}
|
|
1433
1446
|
if (isSpaEnabled()) {
|
|
1434
1447
|
return jsonResponse4({ error: "Not Found" }, { status: 404 });
|
|
@@ -3,7 +3,7 @@ var __jsonParse = (a) => JSON.parse(a);
|
|
|
3
3
|
|
|
4
4
|
// ../../src/bootstrap/createWebRoutes.ts
|
|
5
5
|
import { join as join2 } from "path";
|
|
6
|
-
import {
|
|
6
|
+
import { notFoundHtmlResponse } from "@getstrata/core/view";
|
|
7
7
|
|
|
8
8
|
// ../../src/config/frontend.ts
|
|
9
9
|
function readFrontendMode() {
|
|
@@ -478,7 +478,7 @@ function createWebRoutes(dependencies) {
|
|
|
478
478
|
const relativePath = pathname.replace(/^\//, "");
|
|
479
479
|
const file = Bun.file(join2(process.cwd(), "public", relativePath));
|
|
480
480
|
if (!await file.exists()) {
|
|
481
|
-
return
|
|
481
|
+
return notFoundHtmlResponse();
|
|
482
482
|
}
|
|
483
483
|
return new Response(file);
|
|
484
484
|
};
|
|
@@ -170,7 +170,7 @@ import { validateEnv } from "@getstrata/core/config/envSchema";
|
|
|
170
170
|
|
|
171
171
|
// ../../src/config/app.ts
|
|
172
172
|
var appConfig = {
|
|
173
|
-
name: "WorkHub",
|
|
173
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
174
174
|
env: process.env.APP_ENV ?? "local",
|
|
175
175
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
176
176
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -424,6 +424,7 @@ import {
|
|
|
424
424
|
|
|
425
425
|
// ../../src/bootstrap/queue/defaultJobs.ts
|
|
426
426
|
import { DispatchWebhookJob } from "@getstrata/core/jobs/dispatchWebhookJob";
|
|
427
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
427
428
|
import { InvalidateCacheTagsJob as InvalidateCacheTagsJob2 } from "@getstrata/core/jobs/invalidateCacheTagsJob";
|
|
428
429
|
import { jobRegistry } from "@getstrata/core/queue/jobRegistry";
|
|
429
430
|
import { resolveApplicationCache as resolveApplicationCache2 } from "@getstrata/core/runtime/applicationRegistry";
|
|
@@ -432,6 +433,7 @@ function registerDefaultJobs() {
|
|
|
432
433
|
return new InvalidateCacheTagsJob2(resolveApplicationCache2());
|
|
433
434
|
});
|
|
434
435
|
jobRegistry.register("webhook.dispatch", () => new DispatchWebhookJob);
|
|
436
|
+
jobRegistry.register("audit.export", () => new ExportAuditLogsJob);
|
|
435
437
|
}
|
|
436
438
|
|
|
437
439
|
// ../../src/bootstrap/providers/queue.ts
|
|
@@ -460,7 +462,13 @@ var storage_default = storageProvider;
|
|
|
460
462
|
|
|
461
463
|
// ../../src/bootstrap/providers/view.ts
|
|
462
464
|
import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
463
|
-
import {
|
|
465
|
+
import {
|
|
466
|
+
configureWebErrorView,
|
|
467
|
+
DEFAULT_VIEWS_DIRECTORY,
|
|
468
|
+
EtaViewEngine,
|
|
469
|
+
errorTemplateName,
|
|
470
|
+
resolveWebLayoutData
|
|
471
|
+
} from "@getstrata/core/view";
|
|
464
472
|
|
|
465
473
|
// ../../src/config/frontend.ts
|
|
466
474
|
function readFrontendMode() {
|
|
@@ -491,7 +499,15 @@ var viewProvider = {
|
|
|
491
499
|
}
|
|
492
500
|
const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
|
|
493
501
|
config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
|
|
494
|
-
|
|
502
|
+
const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
|
|
503
|
+
container.set(CORE_VIEW_TOKEN, engine);
|
|
504
|
+
configureWebErrorView({
|
|
505
|
+
render: async (input) => engine.render(errorTemplateName(input.status), {
|
|
506
|
+
title: input.title,
|
|
507
|
+
message: input.message,
|
|
508
|
+
errors: input.errors
|
|
509
|
+
})
|
|
510
|
+
});
|
|
495
511
|
}
|
|
496
512
|
};
|
|
497
513
|
|
|
@@ -3,7 +3,13 @@ var __jsonParse = (a) => JSON.parse(a);
|
|
|
3
3
|
|
|
4
4
|
// ../../src/bootstrap/providers/view.ts
|
|
5
5
|
import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
configureWebErrorView,
|
|
8
|
+
DEFAULT_VIEWS_DIRECTORY,
|
|
9
|
+
EtaViewEngine,
|
|
10
|
+
errorTemplateName,
|
|
11
|
+
resolveWebLayoutData
|
|
12
|
+
} from "@getstrata/core/view";
|
|
7
13
|
|
|
8
14
|
// ../../src/config/frontend.ts
|
|
9
15
|
function readFrontendMode() {
|
|
@@ -34,7 +40,15 @@ var viewProvider = {
|
|
|
34
40
|
}
|
|
35
41
|
const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
|
|
36
42
|
config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
|
|
37
|
-
|
|
43
|
+
const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
|
|
44
|
+
container.set(CORE_VIEW_TOKEN, engine);
|
|
45
|
+
configureWebErrorView({
|
|
46
|
+
render: async (input) => engine.render(errorTemplateName(input.status), {
|
|
47
|
+
title: input.title,
|
|
48
|
+
message: input.message,
|
|
49
|
+
errors: input.errors
|
|
50
|
+
})
|
|
51
|
+
});
|
|
38
52
|
}
|
|
39
53
|
};
|
|
40
54
|
export {
|
|
@@ -81,7 +81,7 @@ import { validateEnv } from "@getstrata/core/config/envSchema";
|
|
|
81
81
|
|
|
82
82
|
// ../../src/config/app.ts
|
|
83
83
|
var appConfig = {
|
|
84
|
-
name: "WorkHub",
|
|
84
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
85
85
|
env: process.env.APP_ENV ?? "local",
|
|
86
86
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
87
87
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -414,6 +414,7 @@ import {
|
|
|
414
414
|
|
|
415
415
|
// ../../src/bootstrap/queue/defaultJobs.ts
|
|
416
416
|
import { DispatchWebhookJob } from "@getstrata/core/jobs/dispatchWebhookJob";
|
|
417
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
417
418
|
import { InvalidateCacheTagsJob as InvalidateCacheTagsJob2 } from "@getstrata/core/jobs/invalidateCacheTagsJob";
|
|
418
419
|
import { jobRegistry } from "@getstrata/core/queue/jobRegistry";
|
|
419
420
|
import { resolveApplicationCache as resolveApplicationCache2 } from "@getstrata/core/runtime/applicationRegistry";
|
|
@@ -422,6 +423,7 @@ function registerDefaultJobs() {
|
|
|
422
423
|
return new InvalidateCacheTagsJob2(resolveApplicationCache2());
|
|
423
424
|
});
|
|
424
425
|
jobRegistry.register("webhook.dispatch", () => new DispatchWebhookJob);
|
|
426
|
+
jobRegistry.register("audit.export", () => new ExportAuditLogsJob);
|
|
425
427
|
}
|
|
426
428
|
|
|
427
429
|
// ../../src/bootstrap/providers/queue.ts
|
|
@@ -450,7 +452,13 @@ var storage_default = storageProvider;
|
|
|
450
452
|
|
|
451
453
|
// ../../src/bootstrap/providers/view.ts
|
|
452
454
|
import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
453
|
-
import {
|
|
455
|
+
import {
|
|
456
|
+
configureWebErrorView,
|
|
457
|
+
DEFAULT_VIEWS_DIRECTORY,
|
|
458
|
+
EtaViewEngine,
|
|
459
|
+
errorTemplateName,
|
|
460
|
+
resolveWebLayoutData
|
|
461
|
+
} from "@getstrata/core/view";
|
|
454
462
|
|
|
455
463
|
// ../../src/config/frontend.ts
|
|
456
464
|
function readFrontendMode() {
|
|
@@ -481,7 +489,15 @@ var viewProvider = {
|
|
|
481
489
|
}
|
|
482
490
|
const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
|
|
483
491
|
config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
|
|
484
|
-
|
|
492
|
+
const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
|
|
493
|
+
container.set(CORE_VIEW_TOKEN, engine);
|
|
494
|
+
configureWebErrorView({
|
|
495
|
+
render: async (input) => engine.render(errorTemplateName(input.status), {
|
|
496
|
+
title: input.title,
|
|
497
|
+
message: input.message,
|
|
498
|
+
errors: input.errors
|
|
499
|
+
})
|
|
500
|
+
});
|
|
485
501
|
}
|
|
486
502
|
};
|
|
487
503
|
|
|
@@ -3,6 +3,7 @@ var __jsonParse = (a) => JSON.parse(a);
|
|
|
3
3
|
|
|
4
4
|
// ../../src/bootstrap/queue/defaultJobs.ts
|
|
5
5
|
import { DispatchWebhookJob } from "@getstrata/core/jobs/dispatchWebhookJob";
|
|
6
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
6
7
|
import { InvalidateCacheTagsJob } from "@getstrata/core/jobs/invalidateCacheTagsJob";
|
|
7
8
|
import { jobRegistry } from "@getstrata/core/queue/jobRegistry";
|
|
8
9
|
import { resolveApplicationCache } from "@getstrata/core/runtime/applicationRegistry";
|
|
@@ -11,6 +12,7 @@ function registerDefaultJobs() {
|
|
|
11
12
|
return new InvalidateCacheTagsJob(resolveApplicationCache());
|
|
12
13
|
});
|
|
13
14
|
jobRegistry.register("webhook.dispatch", () => new DispatchWebhookJob);
|
|
15
|
+
jobRegistry.register("audit.export", () => new ExportAuditLogsJob);
|
|
14
16
|
}
|
|
15
17
|
export {
|
|
16
18
|
registerDefaultJobs
|
package/dist/entries/schedule.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
var __jsonParse = (a) => JSON.parse(a);
|
|
3
3
|
|
|
4
4
|
// ../../src/bootstrap/schedule.ts
|
|
5
|
-
import {
|
|
5
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
6
6
|
import { appLogger } from "@getstrata/core/logging/logger";
|
|
7
7
|
import { appSchedule } from "@getstrata/core/scheduler/schedule";
|
|
8
8
|
|
|
@@ -36,10 +36,7 @@ appSchedule.command("* * * * *", "audit-export", async () => {
|
|
|
36
36
|
return;
|
|
37
37
|
}
|
|
38
38
|
try {
|
|
39
|
-
|
|
40
|
-
if (exported > 0) {
|
|
41
|
-
appLogger.info(`Exported ${exported} audit log entries to SIEM.`);
|
|
42
|
-
}
|
|
39
|
+
await new ExportAuditLogsJob().handle({});
|
|
43
40
|
} catch (error) {
|
|
44
41
|
appLogger.error("Audit export failed.", { error: String(error) });
|
|
45
42
|
}
|
|
@@ -2,10 +2,21 @@
|
|
|
2
2
|
var __jsonParse = (a) => JSON.parse(a);
|
|
3
3
|
|
|
4
4
|
// ../../src/bootstrap/web/server.ts
|
|
5
|
+
import { currentRequestMeta, runWithRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
6
|
+
import { notFoundHtmlResponse } from "@getstrata/core/view";
|
|
7
|
+
async function missingHtmlResponse() {
|
|
8
|
+
return notFoundHtmlResponse();
|
|
9
|
+
}
|
|
5
10
|
function wrapRouteHandler(handler) {
|
|
6
11
|
return async (request) => {
|
|
7
|
-
|
|
8
|
-
|
|
12
|
+
return await runWithRequestMeta({
|
|
13
|
+
...currentRequestMeta(),
|
|
14
|
+
request,
|
|
15
|
+
userAgent: request.headers.get("user-agent")
|
|
16
|
+
}, async () => {
|
|
17
|
+
const response = await handler(request);
|
|
18
|
+
return response ?? await missingHtmlResponse();
|
|
19
|
+
});
|
|
9
20
|
};
|
|
10
21
|
}
|
|
11
22
|
function convertAppRoutesToBunRoutes(routes) {
|
|
@@ -37,19 +48,25 @@ function createWebServer(options) {
|
|
|
37
48
|
port: options.port,
|
|
38
49
|
...bunRoutes ? { routes: bunRoutes } : {},
|
|
39
50
|
async fetch(request) {
|
|
40
|
-
await
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
51
|
+
return await runWithRequestMeta({
|
|
52
|
+
...currentRequestMeta(),
|
|
53
|
+
request,
|
|
54
|
+
userAgent: request.headers.get("user-agent")
|
|
55
|
+
}, async () => {
|
|
56
|
+
await options.onRequest?.(request);
|
|
57
|
+
const url = new URL(request.url);
|
|
58
|
+
if (url.pathname.startsWith("/assets/")) {
|
|
59
|
+
const file = Bun.file(`${publicDir}${url.pathname}`);
|
|
60
|
+
if (await file.exists()) {
|
|
61
|
+
return new Response(file);
|
|
62
|
+
}
|
|
46
63
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
64
|
+
if (options.handle) {
|
|
65
|
+
const response = await options.handle(request);
|
|
66
|
+
return response ?? await missingHtmlResponse();
|
|
67
|
+
}
|
|
68
|
+
return await missingHtmlResponse();
|
|
69
|
+
});
|
|
53
70
|
}
|
|
54
71
|
});
|
|
55
72
|
}
|
package/dist/index.js
CHANGED
|
@@ -531,7 +531,7 @@ import { validateEnv } from "@getstrata/core/config/envSchema";
|
|
|
531
531
|
|
|
532
532
|
// ../../src/config/app.ts
|
|
533
533
|
var appConfig = {
|
|
534
|
-
name: "WorkHub",
|
|
534
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
535
535
|
env: process.env.APP_ENV ?? "local",
|
|
536
536
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
537
537
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -770,6 +770,7 @@ import {
|
|
|
770
770
|
|
|
771
771
|
// ../../src/bootstrap/queue/defaultJobs.ts
|
|
772
772
|
import { DispatchWebhookJob } from "@getstrata/core/jobs/dispatchWebhookJob";
|
|
773
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
773
774
|
import { InvalidateCacheTagsJob as InvalidateCacheTagsJob2 } from "@getstrata/core/jobs/invalidateCacheTagsJob";
|
|
774
775
|
import { jobRegistry } from "@getstrata/core/queue/jobRegistry";
|
|
775
776
|
import { resolveApplicationCache as resolveApplicationCache2 } from "@getstrata/core/runtime/applicationRegistry";
|
|
@@ -778,6 +779,7 @@ function registerDefaultJobs() {
|
|
|
778
779
|
return new InvalidateCacheTagsJob2(resolveApplicationCache2());
|
|
779
780
|
});
|
|
780
781
|
jobRegistry.register("webhook.dispatch", () => new DispatchWebhookJob);
|
|
782
|
+
jobRegistry.register("audit.export", () => new ExportAuditLogsJob);
|
|
781
783
|
}
|
|
782
784
|
|
|
783
785
|
// ../../src/bootstrap/providers/queue.ts
|
|
@@ -806,7 +808,13 @@ var storage_default = storageProvider;
|
|
|
806
808
|
|
|
807
809
|
// ../../src/bootstrap/providers/view.ts
|
|
808
810
|
import { currentRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
809
|
-
import {
|
|
811
|
+
import {
|
|
812
|
+
configureWebErrorView,
|
|
813
|
+
DEFAULT_VIEWS_DIRECTORY,
|
|
814
|
+
EtaViewEngine,
|
|
815
|
+
errorTemplateName,
|
|
816
|
+
resolveWebLayoutData
|
|
817
|
+
} from "@getstrata/core/view";
|
|
810
818
|
var CORE_VIEW_TOKEN = "core.view";
|
|
811
819
|
var VIEW_DIRECTORY_CONFIG_KEY = "view.directory";
|
|
812
820
|
var viewProvider = {
|
|
@@ -817,7 +825,15 @@ var viewProvider = {
|
|
|
817
825
|
}
|
|
818
826
|
const viewsDirectory = process.env.VIEW_DIRECTORY?.trim() || DEFAULT_VIEWS_DIRECTORY;
|
|
819
827
|
config.set(VIEW_DIRECTORY_CONFIG_KEY, viewsDirectory);
|
|
820
|
-
|
|
828
|
+
const engine = new EtaViewEngine(viewsDirectory, (request) => resolveWebLayoutData(container, request ?? currentRequestMeta().request));
|
|
829
|
+
container.set(CORE_VIEW_TOKEN, engine);
|
|
830
|
+
configureWebErrorView({
|
|
831
|
+
render: async (input) => engine.render(errorTemplateName(input.status), {
|
|
832
|
+
title: input.title,
|
|
833
|
+
message: input.message,
|
|
834
|
+
errors: input.errors
|
|
835
|
+
})
|
|
836
|
+
});
|
|
821
837
|
}
|
|
822
838
|
};
|
|
823
839
|
|
|
@@ -868,7 +884,7 @@ function createAppContext() {
|
|
|
868
884
|
}
|
|
869
885
|
// ../../src/bootstrap/createWebRoutes.ts
|
|
870
886
|
import { join as join3 } from "path";
|
|
871
|
-
import {
|
|
887
|
+
import { notFoundHtmlResponse } from "@getstrata/core/view";
|
|
872
888
|
function registerRoute(method, path, middleware) {
|
|
873
889
|
routeRegistry.register({ method, path, middleware });
|
|
874
890
|
}
|
|
@@ -886,7 +902,7 @@ function createWebRoutes(dependencies) {
|
|
|
886
902
|
const relativePath = pathname.replace(/^\//, "");
|
|
887
903
|
const file = Bun.file(join3(process.cwd(), "public", relativePath));
|
|
888
904
|
if (!await file.exists()) {
|
|
889
|
-
return
|
|
905
|
+
return notFoundHtmlResponse();
|
|
890
906
|
}
|
|
891
907
|
return new Response(file);
|
|
892
908
|
};
|
|
@@ -1201,10 +1217,21 @@ function createRouteKernel(dependencies) {
|
|
|
1201
1217
|
return createHttpKernel(dependencies);
|
|
1202
1218
|
}
|
|
1203
1219
|
// ../../src/bootstrap/web/server.ts
|
|
1220
|
+
import { currentRequestMeta as currentRequestMeta2, runWithRequestMeta } from "@getstrata/core/http/requestMetaContext";
|
|
1221
|
+
import { notFoundHtmlResponse as notFoundHtmlResponse2 } from "@getstrata/core/view";
|
|
1222
|
+
async function missingHtmlResponse() {
|
|
1223
|
+
return notFoundHtmlResponse2();
|
|
1224
|
+
}
|
|
1204
1225
|
function wrapRouteHandler(handler) {
|
|
1205
1226
|
return async (request) => {
|
|
1206
|
-
|
|
1207
|
-
|
|
1227
|
+
return await runWithRequestMeta({
|
|
1228
|
+
...currentRequestMeta2(),
|
|
1229
|
+
request,
|
|
1230
|
+
userAgent: request.headers.get("user-agent")
|
|
1231
|
+
}, async () => {
|
|
1232
|
+
const response = await handler(request);
|
|
1233
|
+
return response ?? await missingHtmlResponse();
|
|
1234
|
+
});
|
|
1208
1235
|
};
|
|
1209
1236
|
}
|
|
1210
1237
|
function convertAppRoutesToBunRoutes(routes) {
|
|
@@ -1236,19 +1263,25 @@ function createWebServer(options) {
|
|
|
1236
1263
|
port: options.port,
|
|
1237
1264
|
...bunRoutes ? { routes: bunRoutes } : {},
|
|
1238
1265
|
async fetch(request) {
|
|
1239
|
-
await
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1266
|
+
return await runWithRequestMeta({
|
|
1267
|
+
...currentRequestMeta2(),
|
|
1268
|
+
request,
|
|
1269
|
+
userAgent: request.headers.get("user-agent")
|
|
1270
|
+
}, async () => {
|
|
1271
|
+
await options.onRequest?.(request);
|
|
1272
|
+
const url = new URL(request.url);
|
|
1273
|
+
if (url.pathname.startsWith("/assets/")) {
|
|
1274
|
+
const file = Bun.file(`${publicDir}${url.pathname}`);
|
|
1275
|
+
if (await file.exists()) {
|
|
1276
|
+
return new Response(file);
|
|
1277
|
+
}
|
|
1245
1278
|
}
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1279
|
+
if (options.handle) {
|
|
1280
|
+
const response = await options.handle(request);
|
|
1281
|
+
return response ?? await missingHtmlResponse();
|
|
1282
|
+
}
|
|
1283
|
+
return await missingHtmlResponse();
|
|
1284
|
+
});
|
|
1252
1285
|
}
|
|
1253
1286
|
});
|
|
1254
1287
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/bootstrap",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.53",
|
|
4
4
|
"description": "Strata application bootstrap — HttpKernel, DI, web session helpers",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -173,14 +173,14 @@
|
|
|
173
173
|
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta --external @getstrata/core",
|
|
174
174
|
"build:types": "tsc -p tsconfig.types.json && bun ../../scripts/prune-bootstrap-dist-types.ts",
|
|
175
175
|
"prepublishOnly": "bun run build",
|
|
176
|
-
"build:subpaths": "bun build entries/applicationRegistry.ts entries/buildModuleRoutes.ts entries/buildWebModuleRoutes.ts entries/cache/modelCacheTags.ts entries/config.ts entries/context.ts entries/contracts.ts entries/createWebRoutes.ts entries/createRoutes.ts entries/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/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/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/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/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/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",
|
|
176
|
+
"build:subpaths": "bun build entries/applicationRegistry.ts entries/buildModuleRoutes.ts entries/buildWebModuleRoutes.ts entries/cache/modelCacheTags.ts entries/config.ts entries/context.ts entries/contracts.ts entries/createWebRoutes.ts entries/createRoutes.ts entries/createSpaRoutes.ts entries/dependencies.ts entries/discoverModules.ts entries/health.ts entries/http/securedRouteModelBinding.ts entries/httpKernel.ts entries/listeners/invalidateCacheOnModelWrite.ts entries/membershipService.ts entries/metricsRoutes.ts entries/queue/defaultJobs.ts entries/providers.ts entries/providers/view.ts entries/routeRegistry.ts entries/schedule.ts entries/secretsGuard.ts entries/web/forms.ts entries/web/routing.ts entries/web/server.ts entries/web/session.ts entries/web/slug.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/bootstrap --external @getstrata/bootstrap/applicationRegistry --external @getstrata/bootstrap/buildModuleRoutes --external @getstrata/bootstrap/buildWebModuleRoutes --external @getstrata/bootstrap/cache/modelCacheTags --external @getstrata/bootstrap/config --external @getstrata/bootstrap/context --external @getstrata/bootstrap/contracts --external @getstrata/bootstrap/createWebRoutes --external @getstrata/bootstrap/createRoutes --external @getstrata/bootstrap/createSpaRoutes --external @getstrata/bootstrap/dependencies --external @getstrata/bootstrap/discoverModules --external @getstrata/bootstrap/health --external @getstrata/bootstrap/http/securedRouteModelBinding --external @getstrata/bootstrap/httpKernel --external @getstrata/bootstrap/listeners/invalidateCacheOnModelWrite --external @getstrata/bootstrap/membershipService --external @getstrata/bootstrap/metricsRoutes --external @getstrata/bootstrap/queue/defaultJobs --external @getstrata/bootstrap/providers --external @getstrata/bootstrap/providers/view --external @getstrata/bootstrap/routeRegistry --external @getstrata/bootstrap/schedule --external @getstrata/bootstrap/secretsGuard --external @getstrata/bootstrap/web/forms --external @getstrata/bootstrap/web/routing --external @getstrata/bootstrap/web/server --external @getstrata/bootstrap/web/session --external @getstrata/bootstrap/web/slug --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/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/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",
|
|
177
177
|
"build:shims": "true"
|
|
178
178
|
},
|
|
179
179
|
"publishConfig": {
|
|
180
180
|
"access": "public"
|
|
181
181
|
},
|
|
182
182
|
"peerDependencies": {
|
|
183
|
-
"@getstrata/core": "^0.5.
|
|
183
|
+
"@getstrata/core": "^0.5.62",
|
|
184
184
|
"typescript": "^5.9.0"
|
|
185
185
|
}
|
|
186
186
|
}
|