@getstrata/bootstrap 0.2.52 → 0.2.54
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 +9 -0
- package/dist/bootstrap/httpKernel.d.ts +1 -0
- package/dist/entries/buildModuleRoutes.js +4 -0
- package/dist/entries/buildWebModuleRoutes.js +4 -0
- package/dist/entries/context.js +3 -1
- package/dist/entries/createRoutes.js +25 -8
- package/dist/entries/createWebRoutes.js +4 -0
- package/dist/entries/dependencies.js +3 -1
- package/dist/entries/httpKernel.js +4 -0
- package/dist/entries/providers.js +3 -1
- package/dist/entries/queue/defaultJobs.js +2 -0
- package/dist/entries/schedule.js +2 -5
- package/dist/entries/web/routing.js +4 -0
- package/dist/index.js +7 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @getstrata/bootstrap changelog
|
|
2
2
|
|
|
3
|
+
## 0.2.54
|
|
4
|
+
|
|
5
|
+
- `HttpKernel.wrapSigned()` applies `createValidateSignatureMiddleware` so HTMX routes can require a valid signed URL.
|
|
6
|
+
|
|
7
|
+
## 0.2.53
|
|
8
|
+
|
|
9
|
+
- `registerDefaultJobs()` also registers `audit.export` (`ExportAuditLogsJob`).
|
|
10
|
+
- In-process `audit-export` schedule runs that job instead of calling `exportPendingAuditLogs()` inline.
|
|
11
|
+
|
|
3
12
|
## 0.2.52
|
|
4
13
|
|
|
5
14
|
- View provider registers `configureWebErrorView` so `errors/*.eta` render through the app Eta layout. `EtaViewEngine` receives `Request` from the layout-data resolver.
|
|
@@ -20,6 +20,7 @@ declare class HttpKernel {
|
|
|
20
20
|
wrapAbility(ability: string, handler: RouteHandler): RouteHandler;
|
|
21
21
|
wrapPolicy(resource: string, action: keyof Policy, handler: RouteHandler): RouteHandler;
|
|
22
22
|
wrapLogin(handler: RouteHandler): RouteHandler;
|
|
23
|
+
wrapSigned(handler: RouteHandler): RouteHandler;
|
|
23
24
|
wrapRegister(handler: RouteHandler): RouteHandler;
|
|
24
25
|
private wrapThrottle;
|
|
25
26
|
}
|
|
@@ -25,6 +25,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
25
25
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
26
26
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
27
27
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
28
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
28
29
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
29
30
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
30
31
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -240,6 +241,9 @@ class HttpKernel {
|
|
|
240
241
|
wrapLogin(handler) {
|
|
241
242
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
242
243
|
}
|
|
244
|
+
wrapSigned(handler) {
|
|
245
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
246
|
+
}
|
|
243
247
|
wrapRegister(handler) {
|
|
244
248
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
245
249
|
}
|
|
@@ -28,6 +28,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
28
28
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
29
29
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
30
30
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
31
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
31
32
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
32
33
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
33
34
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -243,6 +244,9 @@ class HttpKernel {
|
|
|
243
244
|
wrapLogin(handler) {
|
|
244
245
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
245
246
|
}
|
|
247
|
+
wrapSigned(handler) {
|
|
248
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
249
|
+
}
|
|
246
250
|
wrapRegister(handler) {
|
|
247
251
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
248
252
|
}
|
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
|
|
@@ -11,7 +11,7 @@ var strata_default = __jsonParse("{\"index\":\"_.._/_.._/index.html\",\"files\":
|
|
|
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",
|
|
@@ -81,6 +81,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
81
81
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
82
82
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
83
83
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
84
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
84
85
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
85
86
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
86
87
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -278,6 +279,9 @@ class HttpKernel {
|
|
|
278
279
|
wrapLogin(handler) {
|
|
279
280
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
280
281
|
}
|
|
282
|
+
wrapSigned(handler) {
|
|
283
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
284
|
+
}
|
|
281
285
|
wrapRegister(handler) {
|
|
282
286
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
283
287
|
}
|
|
@@ -751,7 +755,7 @@ function assertScimIfMatch(request, etagSource) {
|
|
|
751
755
|
}
|
|
752
756
|
|
|
753
757
|
// ../../src/modules/scim/service.ts
|
|
754
|
-
import { hashPassword } from "@getstrata/core/auth/password";
|
|
758
|
+
import { hashPassword as hashPassword3 } from "@getstrata/core/auth/password";
|
|
755
759
|
import { resolveService } from "@getstrata/core/contracts/di";
|
|
756
760
|
import { NotFoundError as NotFoundError4 } from "@getstrata/core/errors/http";
|
|
757
761
|
import { currentTenantId as currentTenantId4 } from "@getstrata/core/tenant/tenantContext";
|
|
@@ -1013,12 +1017,12 @@ var apiTokenTable = defineTable2({
|
|
|
1013
1017
|
});
|
|
1014
1018
|
|
|
1015
1019
|
// ../../src/modules/user/authService.ts
|
|
1016
|
-
import { verifyPassword } from "@getstrata/core/auth/password";
|
|
1017
|
-
import { revealMfaSecret } from "@getstrata/core/crypto/mfaSecret";
|
|
1018
|
-
import { UnauthorizedError } from "@getstrata/core/errors/http";
|
|
1020
|
+
import { hashPassword, verifyPassword } from "@getstrata/core/auth/password";
|
|
1021
|
+
import { protectMfaSecret, revealMfaSecret } from "@getstrata/core/crypto/mfaSecret";
|
|
1022
|
+
import { UnauthorizedError, ValidationError } from "@getstrata/core/errors/http";
|
|
1019
1023
|
import { logSecurityEvent } from "@getstrata/core/security/securityEvents";
|
|
1020
1024
|
import { resolveDefaultTokenExpiryDays } from "@getstrata/core/security/tokenExpiry";
|
|
1021
|
-
import { verifyTotp } from "@getstrata/core/security/totp";
|
|
1025
|
+
import { buildOtpauthUrl, generateTotpSecret, verifyTotp } from "@getstrata/core/security/totp";
|
|
1022
1026
|
import { currentTenantId as currentTenantId2 } from "@getstrata/core/tenant/tenantContext";
|
|
1023
1027
|
|
|
1024
1028
|
// ../../src/core/auth/abilityCatalog.ts
|
|
@@ -1075,6 +1079,19 @@ var oauthIdentityTable = defineTable4({
|
|
|
1075
1079
|
columns: ["id", "user_id", "provider", "provider_user_id", "email", "created_at"]
|
|
1076
1080
|
});
|
|
1077
1081
|
|
|
1082
|
+
// ../../src/modules/user/passwordResetService.ts
|
|
1083
|
+
import { hashPassword as hashPassword2 } from "@getstrata/core/auth/password";
|
|
1084
|
+
import { hashApiToken } from "@getstrata/core/auth/tokenHash";
|
|
1085
|
+
import { repositoryConnection as db2 } from "@getstrata/core/database/repositoryConnection";
|
|
1086
|
+
import { ValidationError as ValidationError2 } from "@getstrata/core/errors/http";
|
|
1087
|
+
import { absoluteTemporarySignedUrl } from "@getstrata/core/http/signedUrl";
|
|
1088
|
+
import { mailer } from "@getstrata/core/mail/mailer";
|
|
1089
|
+
import { sendMarkdownMail } from "@getstrata/core/mail/markdownMailable";
|
|
1090
|
+
import { logSecurityEvent as logSecurityEvent2 } from "@getstrata/core/security/securityEvents";
|
|
1091
|
+
import { timingSafeCompareString } from "@getstrata/core/security/timingSafeCompare";
|
|
1092
|
+
var RESET_TTL_SECONDS = 60 * 60;
|
|
1093
|
+
var VERIFY_TTL_SECONDS = 60 * 60 * 24;
|
|
1094
|
+
|
|
1078
1095
|
// ../../src/modules/user/repository.ts
|
|
1079
1096
|
import {
|
|
1080
1097
|
emailLookupForQuery,
|
|
@@ -1108,7 +1125,7 @@ var userTable = defineTable5({
|
|
|
1108
1125
|
});
|
|
1109
1126
|
|
|
1110
1127
|
// ../../src/modules/user/tokenService.ts
|
|
1111
|
-
import { hashApiToken } from "@getstrata/core/auth/tokenHash";
|
|
1128
|
+
import { hashApiToken as hashApiToken2 } from "@getstrata/core/auth/tokenHash";
|
|
1112
1129
|
import { ForbiddenError, NotFoundError as NotFoundError3 } from "@getstrata/core/errors/http";
|
|
1113
1130
|
import { resolveDefaultTokenExpiryDays as resolveDefaultTokenExpiryDays2 } from "@getstrata/core/security/tokenExpiry";
|
|
1114
1131
|
|
|
@@ -1176,7 +1193,7 @@ class ScimService {
|
|
|
1176
1193
|
if (!email) {
|
|
1177
1194
|
throw new Error("SCIM userName or email is required.");
|
|
1178
1195
|
}
|
|
1179
|
-
const passwordHash = await
|
|
1196
|
+
const passwordHash = await hashPassword3(crypto.randomUUID());
|
|
1180
1197
|
const user = await this.users.create({
|
|
1181
1198
|
name: payload.name?.formatted ?? email.split("@")[0] ?? "SCIM User",
|
|
1182
1199
|
email,
|
|
@@ -50,6 +50,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
50
50
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
51
51
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
52
52
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
53
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
53
54
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
54
55
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
55
56
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -247,6 +248,9 @@ class HttpKernel {
|
|
|
247
248
|
wrapLogin(handler) {
|
|
248
249
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
249
250
|
}
|
|
251
|
+
wrapSigned(handler) {
|
|
252
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
253
|
+
}
|
|
250
254
|
wrapRegister(handler) {
|
|
251
255
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
252
256
|
}
|
|
@@ -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
|
|
@@ -21,6 +21,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
21
21
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
22
22
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
23
23
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
24
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
24
25
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
25
26
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
26
27
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -236,6 +237,9 @@ class HttpKernel {
|
|
|
236
237
|
wrapLogin(handler) {
|
|
237
238
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
238
239
|
}
|
|
240
|
+
wrapSigned(handler) {
|
|
241
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
242
|
+
}
|
|
239
243
|
wrapRegister(handler) {
|
|
240
244
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
241
245
|
}
|
|
@@ -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
|
|
@@ -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
|
}
|
|
@@ -30,6 +30,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
30
30
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
31
31
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
32
32
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
33
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
33
34
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
34
35
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
35
36
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -245,6 +246,9 @@ class HttpKernel {
|
|
|
245
246
|
wrapLogin(handler) {
|
|
246
247
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
247
248
|
}
|
|
249
|
+
wrapSigned(handler) {
|
|
250
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
251
|
+
}
|
|
248
252
|
wrapRegister(handler) {
|
|
249
253
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
250
254
|
}
|
package/dist/index.js
CHANGED
|
@@ -38,6 +38,7 @@ import { createRequireWebAuthMiddleware } from "@getstrata/core/http/requireWebA
|
|
|
38
38
|
import { withErrorHandling } from "@getstrata/core/http/response";
|
|
39
39
|
import { withMiddleware } from "@getstrata/core/http/routeMiddleware";
|
|
40
40
|
import { createSecurityHeadersMiddleware } from "@getstrata/core/http/securityHeadersMiddleware";
|
|
41
|
+
import { createValidateSignatureMiddleware } from "@getstrata/core/http/signedUrl";
|
|
41
42
|
import { createThrottleMiddleware } from "@getstrata/core/http/throttleMiddleware";
|
|
42
43
|
import { createRequestLoggingMiddleware } from "@getstrata/core/logging/requestLoggingMiddleware";
|
|
43
44
|
import { isPublicReadsEnabled } from "@getstrata/core/security/publicReads";
|
|
@@ -249,6 +250,9 @@ class HttpKernel {
|
|
|
249
250
|
wrapLogin(handler) {
|
|
250
251
|
return this.wrapThrottle("login", resolveLoginRateLimit(), handler);
|
|
251
252
|
}
|
|
253
|
+
wrapSigned(handler) {
|
|
254
|
+
return withMiddleware(createValidateSignatureMiddleware())(handler);
|
|
255
|
+
}
|
|
252
256
|
wrapRegister(handler) {
|
|
253
257
|
return this.wrapThrottle("register", resolveRegisterRateLimit(), handler);
|
|
254
258
|
}
|
|
@@ -531,7 +535,7 @@ import { validateEnv } from "@getstrata/core/config/envSchema";
|
|
|
531
535
|
|
|
532
536
|
// ../../src/config/app.ts
|
|
533
537
|
var appConfig = {
|
|
534
|
-
name: "WorkHub",
|
|
538
|
+
name: process.env.APP_NAME?.trim() || "WorkHub",
|
|
535
539
|
env: process.env.APP_ENV ?? "local",
|
|
536
540
|
debug: (process.env.APP_DEBUG ?? "true") !== "false",
|
|
537
541
|
url: process.env.APP_URL ?? "http://localhost:3000",
|
|
@@ -770,6 +774,7 @@ import {
|
|
|
770
774
|
|
|
771
775
|
// ../../src/bootstrap/queue/defaultJobs.ts
|
|
772
776
|
import { DispatchWebhookJob } from "@getstrata/core/jobs/dispatchWebhookJob";
|
|
777
|
+
import { ExportAuditLogsJob } from "@getstrata/core/jobs/exportAuditLogsJob";
|
|
773
778
|
import { InvalidateCacheTagsJob as InvalidateCacheTagsJob2 } from "@getstrata/core/jobs/invalidateCacheTagsJob";
|
|
774
779
|
import { jobRegistry } from "@getstrata/core/queue/jobRegistry";
|
|
775
780
|
import { resolveApplicationCache as resolveApplicationCache2 } from "@getstrata/core/runtime/applicationRegistry";
|
|
@@ -778,6 +783,7 @@ function registerDefaultJobs() {
|
|
|
778
783
|
return new InvalidateCacheTagsJob2(resolveApplicationCache2());
|
|
779
784
|
});
|
|
780
785
|
jobRegistry.register("webhook.dispatch", () => new DispatchWebhookJob);
|
|
786
|
+
jobRegistry.register("audit.export", () => new ExportAuditLogsJob);
|
|
781
787
|
}
|
|
782
788
|
|
|
783
789
|
// ../../src/bootstrap/providers/queue.ts
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/bootstrap",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.54",
|
|
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/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/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/appKeyPrefix --external @getstrata/core/runtime/applicationRegistry --external @getstrata/core/runtime/asyncContextStore --external @getstrata/core/scheduler/schedule --external @getstrata/core/scheduler/osCron --external @getstrata/core/security/oauthState --external @getstrata/core/security/publicReads --external @getstrata/core/security/safeFetch --external @getstrata/core/security/safeUrl --external @getstrata/core/security/scimTenantTokens --external @getstrata/core/security/securityEvents --external @getstrata/core/security/stripeWebhook --external @getstrata/core/security/timingSafeCompare --external @getstrata/core/security/tokenExpiry --external @getstrata/core/security/totp --external @getstrata/core/storage/storage --external @getstrata/core/tenant/tenancyConfig --external @getstrata/core/tenant/tenantContext --external @getstrata/core/tenant/tenantDatabaseScope --external @getstrata/core/tenant/databaseTenantContext --external @getstrata/core/tenant/tenantMiddleware --external @getstrata/core/terminal/runShell --external @getstrata/core/tracing/traceContext --external @getstrata/core/tracing/tracingMiddleware --external @getstrata/core/validation/rules --external @getstrata/core/view",
|
|
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.66",
|
|
184
184
|
"typescript": "^5.9.0"
|
|
185
185
|
}
|
|
186
186
|
}
|