@getstrata/core 0.5.87 → 0.5.89
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/README.md +1 -1
- package/dist/core/auth/intendedUrlCookie.d.ts +1 -1
- package/dist/core/auth/passwordConfirmCookie.d.ts +1 -1
- package/dist/core/auth/sessionCookie.d.ts +1 -1
- package/dist/core/http/csrfToken.d.ts +1 -1
- package/dist/core/http/flashSession.d.ts +1 -1
- package/dist/entries/auth/intendedUrlCookie.js +1 -1
- package/dist/entries/auth/passwordConfirmCookie.js +1 -1
- package/dist/entries/auth/sessionCookie.js +1 -1
- package/dist/entries/auth/sessionGuard.js +1 -1
- package/dist/entries/http/csrfMiddleware.js +1 -1
- package/dist/entries/http/csrfToken.js +1 -1
- package/dist/entries/http/flashMiddleware.js +1 -1
- package/dist/entries/http/flashSession.js +1 -1
- package/dist/entries/openapi/generator.js +2 -0
- package/dist/entries/view.js +2 -2
- package/dist/index.js +2 -0
- package/package.json +2 -7
- package/dist/core/jobs/dispatchWebhookJob.d.ts +0 -1
- package/dist/entries/jobs/dispatchWebhookJob.js +0 -93
- package/dist/modules/webhook/dispatchWebhookJob.d.ts +0 -18
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
# @getstrata/core changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.89
|
|
4
|
+
|
|
5
|
+
- **Breaking:** removed `@getstrata/core/jobs/dispatchWebhookJob`. Import `DispatchWebhookJob` from the app webhook module (`src/modules/webhook/dispatchWebhookJob.ts`).
|
|
6
|
+
|
|
7
|
+
## 0.5.88
|
|
8
|
+
|
|
9
|
+
- Exported cookie name constants (`SESSION_COOKIE`, `CSRF_COOKIE`, `FLASH_COOKIE`, `INTENDED_URL_COOKIE`, `PASSWORD_CONFIRM_COOKIE`) are `appCookieName(...)` so they match the default prefix instead of a hardcoded `workhub_` string.
|
|
10
|
+
- `@getstrata/core/jobs/dispatchWebhookJob` is a deprecated compatibility re-export of the WorkHub webhook job.
|
|
11
|
+
|
|
3
12
|
## 0.5.87
|
|
4
13
|
|
|
5
14
|
- `AuthUserDirectory.hasActiveBrowserSession?(userId, issuedAt)` is optional. `SessionGuard` calls it after `session_valid_after` and rejects the HMAC cookie when it returns false so WorkHub can revoke a single browser session by deleting the `sessions` row.
|
package/README.md
CHANGED
|
@@ -82,7 +82,7 @@ import type { Migration } from "@getstrata/core/database/migrations/types";
|
|
|
82
82
|
Package name: **`@getstrata/core`** (npm org [`@getstrata`](https://www.npmjs.com/org/getstrata)).
|
|
83
83
|
|
|
84
84
|
1. Add `NPM_TOKEN` to GitHub repository secrets.
|
|
85
|
-
2. Tag a release: `git tag v0.5.
|
|
85
|
+
2. Tag a release: `git tag v0.5.94 && git push origin v0.5.94`
|
|
86
86
|
3. [Release workflow](../../.github/workflows/release.yml) builds and runs `npm publish --access public`.
|
|
87
87
|
|
|
88
88
|
Previously published as `@eyk-workhub/framework@0.1.0`, deprecated in favor of this package.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
declare const PASSWORD_CONFIRM_COOKIE
|
|
1
|
+
declare const PASSWORD_CONFIRM_COOKIE: string;
|
|
2
2
|
declare const DEFAULT_PASSWORD_CONFIRM_TTL_SECONDS: number;
|
|
3
3
|
declare function passwordConfirmCookieName(): string;
|
|
4
4
|
declare function passwordConfirmTtlSeconds(): number;
|
|
@@ -87,7 +87,7 @@ function sdkClientClassName() {
|
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
// ../../src/core/auth/intendedUrlCookie.ts
|
|
90
|
-
var INTENDED_URL_COOKIE = "
|
|
90
|
+
var INTENDED_URL_COOKIE = appCookieName("intended");
|
|
91
91
|
var DEFAULT_INTENDED_URL_TTL_SECONDS = 60 * 60 * 24;
|
|
92
92
|
var SKIP_EXACT_PATHS = new Set([
|
|
93
93
|
"/email/verify",
|
|
@@ -57,7 +57,7 @@ function sdkClientClassName() {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// ../../src/core/auth/passwordConfirmCookie.ts
|
|
60
|
-
var PASSWORD_CONFIRM_COOKIE = "
|
|
60
|
+
var PASSWORD_CONFIRM_COOKIE = appCookieName("password_confirmed");
|
|
61
61
|
var DEFAULT_PASSWORD_CONFIRM_TTL_SECONDS = 3 * 60 * 60;
|
|
62
62
|
function passwordConfirmCookieName() {
|
|
63
63
|
return process.env.PASSWORD_CONFIRM_COOKIE_NAME?.trim() || appCookieName("password_confirmed");
|
|
@@ -57,7 +57,7 @@ function sdkClientClassName() {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// ../../src/core/auth/sessionCookie.ts
|
|
60
|
-
var SESSION_COOKIE = "
|
|
60
|
+
var SESSION_COOKIE = appCookieName("session");
|
|
61
61
|
var SESSION_TTL_SECONDS = 60 * 60 * 24 * 7;
|
|
62
62
|
var SESSION_REMEMBER_TTL_SECONDS = 60 * 60 * 24 * 30;
|
|
63
63
|
function sessionCookieName() {
|
|
@@ -142,7 +142,7 @@ function sdkClientClassName() {
|
|
|
142
142
|
}
|
|
143
143
|
|
|
144
144
|
// ../../src/core/auth/sessionCookie.ts
|
|
145
|
-
var SESSION_COOKIE = "
|
|
145
|
+
var SESSION_COOKIE = appCookieName("session");
|
|
146
146
|
var SESSION_TTL_SECONDS = 60 * 60 * 24 * 7;
|
|
147
147
|
var SESSION_REMEMBER_TTL_SECONDS = 60 * 60 * 24 * 30;
|
|
148
148
|
function sessionCookieName() {
|
|
@@ -114,7 +114,7 @@ function currentRequestMeta() {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
// ../../src/core/http/csrfToken.ts
|
|
117
|
-
var CSRF_COOKIE = "
|
|
117
|
+
var CSRF_COOKIE = appCookieName("csrf");
|
|
118
118
|
var CSRF_TTL_MS = 60 * 60 * 1000;
|
|
119
119
|
function csrfCookieName() {
|
|
120
120
|
return process.env.CSRF_COOKIE_NAME?.trim() || appCookieName("csrf");
|
|
@@ -111,7 +111,7 @@ function currentRequestMeta() {
|
|
|
111
111
|
}
|
|
112
112
|
|
|
113
113
|
// ../../src/core/http/csrfToken.ts
|
|
114
|
-
var CSRF_COOKIE = "
|
|
114
|
+
var CSRF_COOKIE = appCookieName("csrf");
|
|
115
115
|
var CSRF_TTL_MS = 60 * 60 * 1000;
|
|
116
116
|
function csrfCookieName() {
|
|
117
117
|
return process.env.CSRF_COOKIE_NAME?.trim() || appCookieName("csrf");
|
|
@@ -57,7 +57,7 @@ function sdkClientClassName() {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// ../../src/core/http/flashSession.ts
|
|
60
|
-
var FLASH_COOKIE = "
|
|
60
|
+
var FLASH_COOKIE = appCookieName("flash");
|
|
61
61
|
var FLASH_TTL_MS = 60 * 1000;
|
|
62
62
|
function flashCookieName() {
|
|
63
63
|
return process.env.FLASH_COOKIE_NAME?.trim() || appCookieName("flash");
|
|
@@ -57,7 +57,7 @@ function sdkClientClassName() {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// ../../src/core/http/flashSession.ts
|
|
60
|
-
var FLASH_COOKIE = "
|
|
60
|
+
var FLASH_COOKIE = appCookieName("flash");
|
|
61
61
|
var FLASH_TTL_MS = 60 * 1000;
|
|
62
62
|
function flashCookieName() {
|
|
63
63
|
return process.env.FLASH_COOKIE_NAME?.trim() || appCookieName("flash");
|
|
@@ -71,6 +71,8 @@ var PUBLIC_ROUTE_DESCRIPTIONS = {
|
|
|
71
71
|
"GET /users/me/invitations": "List pending team invitations for the signed-in email",
|
|
72
72
|
"POST /users/me/invitations/:id/accept": "Accept a pending team invitation",
|
|
73
73
|
"DELETE /users/me/invitations/:id": "Decline a pending team invitation",
|
|
74
|
+
"GET /users/me/sessions": "List active browser sessions for the signed-in user",
|
|
75
|
+
"DELETE /users/me/sessions/:id": "Revoke one browser session (HMAC cookie then fails SessionGuard)",
|
|
74
76
|
"DELETE /users/me": "GDPR account erasure (anonymize user, revoke tokens)",
|
|
75
77
|
"GET /organizations": "List organizations",
|
|
76
78
|
"POST /organizations": "Create organization",
|
package/dist/entries/view.js
CHANGED
|
@@ -493,7 +493,7 @@ function currentRequestMeta3() {
|
|
|
493
493
|
}
|
|
494
494
|
|
|
495
495
|
// ../../src/core/http/csrfToken.ts
|
|
496
|
-
var CSRF_COOKIE = "
|
|
496
|
+
var CSRF_COOKIE = appCookieName("csrf");
|
|
497
497
|
var CSRF_TTL_MS = 60 * 60 * 1000;
|
|
498
498
|
function csrfCookieName() {
|
|
499
499
|
return process.env.CSRF_COOKIE_NAME?.trim() || appCookieName("csrf");
|
|
@@ -576,7 +576,7 @@ function resolveCsrfTokenForRequest(request) {
|
|
|
576
576
|
|
|
577
577
|
// ../../src/core/http/flashSession.ts
|
|
578
578
|
import { createHmac, timingSafeEqual as timingSafeEqual2 } from "crypto";
|
|
579
|
-
var FLASH_COOKIE = "
|
|
579
|
+
var FLASH_COOKIE = appCookieName("flash");
|
|
580
580
|
var FLASH_TTL_MS = 60 * 1000;
|
|
581
581
|
function flashCookieName() {
|
|
582
582
|
return process.env.FLASH_COOKIE_NAME?.trim() || appCookieName("flash");
|
package/dist/index.js
CHANGED
|
@@ -4576,6 +4576,7 @@ function currentRequestMeta() {
|
|
|
4576
4576
|
}
|
|
4577
4577
|
|
|
4578
4578
|
// ../../src/core/http/csrfToken.ts
|
|
4579
|
+
var CSRF_COOKIE = appCookieName("csrf");
|
|
4579
4580
|
var CSRF_TTL_MS = 60 * 60 * 1000;
|
|
4580
4581
|
function csrfCookieName() {
|
|
4581
4582
|
return process.env.CSRF_COOKIE_NAME?.trim() || appCookieName("csrf");
|
|
@@ -4707,6 +4708,7 @@ function createCsrfProtection(secret, options = {}) {
|
|
|
4707
4708
|
}
|
|
4708
4709
|
// ../../src/core/http/flashSession.ts
|
|
4709
4710
|
import { createHmac, timingSafeEqual as timingSafeEqual3 } from "crypto";
|
|
4711
|
+
var FLASH_COOKIE = appCookieName("flash");
|
|
4710
4712
|
var FLASH_TTL_MS = 60 * 1000;
|
|
4711
4713
|
function flashCookieName() {
|
|
4712
4714
|
return process.env.FLASH_COOKIE_NAME?.trim() || appCookieName("flash");
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@getstrata/core",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.89",
|
|
4
4
|
"description": "Strata — Laravel-inspired Bun framework public API",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -555,11 +555,6 @@
|
|
|
555
555
|
"import": "./dist/entries/http/validation.js",
|
|
556
556
|
"default": "./dist/entries/http/validation.js"
|
|
557
557
|
},
|
|
558
|
-
"./jobs/dispatchWebhookJob": {
|
|
559
|
-
"types": "./dist/core/jobs/dispatchWebhookJob.d.ts",
|
|
560
|
-
"import": "./dist/entries/jobs/dispatchWebhookJob.js",
|
|
561
|
-
"default": "./dist/entries/jobs/dispatchWebhookJob.js"
|
|
562
|
-
},
|
|
563
558
|
"./jobs/exportAuditLogsJob": {
|
|
564
559
|
"types": "./dist/core/jobs/exportAuditLogsJob.d.ts",
|
|
565
560
|
"import": "./dist/entries/jobs/exportAuditLogsJob.js",
|
|
@@ -843,7 +838,7 @@
|
|
|
843
838
|
"build:bundle": "bun build index.ts --outdir dist --target bun --external bun --external eta",
|
|
844
839
|
"build:types": "tsc -p tsconfig.types.json",
|
|
845
840
|
"prepublishOnly": "bun run build && bun ../../scripts/prepare-core-package-publish.ts",
|
|
846
|
-
"build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/emailVerification.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/password.ts entries/auth/intendedUrlCookie.ts entries/auth/passwordConfirmCookie.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/model.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/loginThrottleMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/requireVerifiedMiddleware.ts entries/http/requirePasswordConfirmMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webErrorResponse.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/validation.ts entries/jobs/dispatchWebhookJob.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/lifecycle/gracefulShutdown.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appKeyPrefix.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/schedule.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/recoveryCodes.ts entries/security/safeFetch.ts entries/security/safeUrl.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts entries/view.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --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/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --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/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --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/frontendMode --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/recoveryCodes --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",
|
|
841
|
+
"build:subpaths": "bun build entries/auth/accessControl.ts entries/auth/abilityChecker.ts entries/auth/emailVerification.ts entries/auth/membershipMiddleware.ts entries/auth/membershipScope.ts entries/auth/membershipService.ts entries/auth/oauth/oidcProvider.ts entries/auth/oauth/providers.ts entries/auth/oauth/samlProvider.ts entries/auth/oauth/types.ts entries/auth/password.ts entries/auth/intendedUrlCookie.ts entries/auth/passwordConfirmCookie.ts entries/auth/policy.ts entries/auth/scimAuthMiddleware.ts entries/auth/sessionCookie.ts entries/auth/sessionGuard.ts entries/auth/tokenHash.ts entries/audit/exportAuditLogs.ts entries/audit/siemFormatter.ts entries/admin/formatValue.ts entries/admin/registry.ts entries/admin/types.ts entries/cache/tags.ts entries/cache/createCacheStore.ts entries/cache/repository.ts entries/cache/simpleCache.ts entries/cache/simpleCacheStore.ts entries/config/envSchema.ts entries/contracts/serviceTokens.ts entries/contracts/container.ts entries/contracts/di.ts entries/crypto/fieldEncryption.ts entries/crypto/mfaSecret.ts entries/database/errors.ts entries/database/factory.ts entries/database/migrations.ts entries/database/migrations/types.ts entries/database/model.ts entries/database/query.ts entries/database/relationships.ts entries/database/repositoryQuery.ts entries/database/seeders.ts entries/database/seeders/types.ts entries/database/schema.ts entries/database/table.ts entries/database/types.ts entries/database/whereBuilder.ts entries/facades.ts entries/http/authMiddleware.ts entries/http/authorizeMiddleware.ts entries/http/bodySizeLimitMiddleware.ts entries/http/clientIp.ts entries/http/cookies.ts entries/http/contentNegotiation.ts entries/http/conditionalResponse.ts entries/http/corsMiddleware.ts entries/http/csrfMiddleware.ts entries/http/csrfProtection.ts entries/http/csrfToken.ts entries/http/etag.ts entries/http/flashSession.ts entries/http/flashMiddleware.ts entries/http/formRequest.ts entries/http/metricsMiddleware.ts entries/http/loginThrottleMiddleware.ts entries/http/memoryThrottleMiddleware.ts entries/http/pagination.ts entries/http/parseFormBody.ts entries/http/parseMultipartUpload.ts entries/http/requireAbilityMiddleware.ts entries/http/requireAuthMiddleware.ts entries/http/requireGlobalAdminMiddleware.ts entries/http/requireWebAuthMiddleware.ts entries/http/requireVerifiedMiddleware.ts entries/http/requirePasswordConfirmMiddleware.ts entries/http/resources.ts entries/http/response.ts entries/http/route.ts entries/http/routeMiddleware.ts entries/http/routeModelBinding.ts entries/http/safeInternalPath.ts entries/http/signedUrl.ts entries/http/scimThrottleMiddleware.ts entries/http/securityHeadersMiddleware.ts entries/http/securedRouteModelBinding.ts entries/http/webErrorResponse.ts entries/http/webFormRequest.ts entries/http/throttleMiddleware.ts entries/http/validation.ts entries/jobs/exportAuditLogsJob.ts entries/jobs/invalidateCacheTagsJob.ts entries/lifecycle/gracefulShutdown.ts entries/logging/logger.ts entries/logging/requestLoggingMiddleware.ts entries/mail/mailer.ts entries/mail/markdownMail.ts entries/mail/markdownMailable.ts entries/mail/sanitizeMailHtml.ts entries/media/imageTransform.ts entries/metrics/prometheus.ts entries/openapi/generator.ts entries/openapi/registeredRoute.ts entries/openapi/validate.ts entries/pagination.ts entries/queue.ts entries/queue/createAppQueue.ts entries/queue/failedJobRepository.ts entries/queue/failedJobService.ts entries/queue/jobRunner.ts entries/queue/queueMetrics.ts entries/queue/publicQueue.ts entries/queue/redisQueue.ts entries/queue/types.ts entries/runtime/appKeyPrefix.ts entries/runtime/frontendMode.ts entries/runtime/asyncContextStore.ts entries/scheduler/schedule.ts entries/scheduler/osCron.ts entries/security/oauthState.ts entries/security/publicReads.ts entries/security/recoveryCodes.ts entries/security/safeFetch.ts entries/security/safeUrl.ts entries/security/scimTenantTokens.ts entries/security/stripeWebhook.ts entries/security/timingSafeCompare.ts entries/security/tokenExpiry.ts entries/security/totp.ts entries/storage/storage.ts entries/tenant/tenancyConfig.ts entries/tenant/tenantDatabaseScope.ts entries/tenant/databaseTenantContext.ts entries/terminal/runShell.ts entries/tracing/tracingMiddleware.ts entries/validation/rules.ts entries/view.ts --outdir dist --root . --target bun --external bun --external eta --external @getstrata/core --external @getstrata/core/auth/accessControl --external @getstrata/core/auth/abilityChecker --external @getstrata/core/auth/authContext --external @getstrata/core/auth/emailVerification --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/intendedUrlCookie --external @getstrata/core/auth/passwordConfirmCookie --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/requireVerifiedMiddleware --external @getstrata/core/http/requirePasswordConfirmMiddleware --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/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/frontendMode --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/recoveryCodes --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",
|
|
847
842
|
"build:shims": "bun ../../scripts/write-core-shared-shims.ts"
|
|
848
843
|
},
|
|
849
844
|
"publishConfig": {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { DispatchWebhookJob, type DispatchWebhookPayload, default, } from "../../modules/webhook/dispatchWebhookJob";
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
// @bun
|
|
2
|
-
// ../../src/modules/webhook/dispatchWebhookJob.ts
|
|
3
|
-
import { createHmac } from "crypto";
|
|
4
|
-
import { repositoryConnection as db } from "@getstrata/core/database/repositoryConnection";
|
|
5
|
-
import { BadRequestError } from "@getstrata/core/errors/http";
|
|
6
|
-
import { Job } from "@getstrata/core/queue";
|
|
7
|
-
import { webhookSignatureHeader } from "@getstrata/core/runtime/appKeyPrefix";
|
|
8
|
-
import { safeFetch } from "@getstrata/core/security/safeFetch";
|
|
9
|
-
import { assertSafeOutboundUrl } from "@getstrata/core/security/safeUrl";
|
|
10
|
-
import { resolveTenant } from "@getstrata/core/tenant/resolveTenant";
|
|
11
|
-
import { runWithTenantDatabase } from "@getstrata/core/tenant/tenantDatabaseScope";
|
|
12
|
-
|
|
13
|
-
class DispatchWebhookJob extends Job {
|
|
14
|
-
maxAttempts = 3;
|
|
15
|
-
backoffMs = 2000;
|
|
16
|
-
async handle(payload) {
|
|
17
|
-
const tenantId = Number(payload.tenantId);
|
|
18
|
-
const tenant = await resolveTenant(tenantId) ?? {
|
|
19
|
-
id: tenantId,
|
|
20
|
-
slug: "job",
|
|
21
|
-
plan: "free",
|
|
22
|
-
region: "eu"
|
|
23
|
-
};
|
|
24
|
-
const failure = await runWithTenantDatabase(tenant, async () => await this.deliver(payload));
|
|
25
|
-
if (failure) {
|
|
26
|
-
throw failure;
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
async deliver(payload) {
|
|
30
|
-
const queuedUrl = typeof payload.url === "string" ? payload.url : "";
|
|
31
|
-
const queuedSecret = typeof payload.secret === "string" ? payload.secret : "";
|
|
32
|
-
const queued = queuedUrl !== "" && queuedSecret !== "" ? { id: payload.webhookId, url: queuedUrl, secret: queuedSecret } : null;
|
|
33
|
-
const rows = queued ? [] : await db`
|
|
34
|
-
SELECT id, url, secret
|
|
35
|
-
FROM webhook
|
|
36
|
-
WHERE id = ${payload.webhookId} AND active = TRUE
|
|
37
|
-
LIMIT 1
|
|
38
|
-
`;
|
|
39
|
-
const webhook = queued ?? rows[0];
|
|
40
|
-
if (!webhook) {
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
const body = JSON.stringify({ event: payload.event, payload: payload.payload });
|
|
44
|
-
const signature = createHmac("sha256", webhook.secret).update(body).digest("hex");
|
|
45
|
-
const allowHttp = (process.env.APP_ENV ?? "local") !== "production";
|
|
46
|
-
const signatureHeader = webhookSignatureHeader();
|
|
47
|
-
let responseStatus = null;
|
|
48
|
-
let errorMessage = null;
|
|
49
|
-
try {
|
|
50
|
-
assertSafeOutboundUrl(webhook.url, { allowHttp });
|
|
51
|
-
const response = await safeFetch(webhook.url, {
|
|
52
|
-
method: "POST",
|
|
53
|
-
headers: {
|
|
54
|
-
"content-type": "application/json",
|
|
55
|
-
[signatureHeader]: signature
|
|
56
|
-
},
|
|
57
|
-
body
|
|
58
|
-
}, { allowHttp });
|
|
59
|
-
responseStatus = response.status;
|
|
60
|
-
if (!response.ok) {
|
|
61
|
-
throw new Error(`Webhook delivery failed with status ${response.status}.`);
|
|
62
|
-
}
|
|
63
|
-
} catch (error) {
|
|
64
|
-
errorMessage = error instanceof Error ? error.message : String(error);
|
|
65
|
-
await db`
|
|
66
|
-
INSERT INTO webhook_delivery (webhook_id, event, payload, response_status, error)
|
|
67
|
-
VALUES (
|
|
68
|
-
${webhook.id},
|
|
69
|
-
${payload.event},
|
|
70
|
-
${JSON.stringify(payload.payload)}::jsonb,
|
|
71
|
-
${responseStatus},
|
|
72
|
-
${errorMessage}
|
|
73
|
-
)
|
|
74
|
-
`;
|
|
75
|
-
if (error instanceof BadRequestError) {
|
|
76
|
-
return;
|
|
77
|
-
}
|
|
78
|
-
return error instanceof Error ? error : new Error(errorMessage);
|
|
79
|
-
}
|
|
80
|
-
await db`
|
|
81
|
-
INSERT INTO webhook_delivery (webhook_id, event, payload, response_status)
|
|
82
|
-
VALUES (
|
|
83
|
-
${webhook.id},
|
|
84
|
-
${payload.event},
|
|
85
|
-
${JSON.stringify(payload.payload)}::jsonb,
|
|
86
|
-
${responseStatus}
|
|
87
|
-
)
|
|
88
|
-
`;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
export {
|
|
92
|
-
DispatchWebhookJob
|
|
93
|
-
};
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Job } from "@getstrata/core/queue";
|
|
2
|
-
interface DispatchWebhookPayload {
|
|
3
|
-
webhookId: number;
|
|
4
|
-
tenantId: number;
|
|
5
|
-
event: string;
|
|
6
|
-
payload: Record<string, unknown>;
|
|
7
|
-
url?: string;
|
|
8
|
-
secret?: string;
|
|
9
|
-
}
|
|
10
|
-
declare class DispatchWebhookJob extends Job<DispatchWebhookPayload> {
|
|
11
|
-
readonly maxAttempts = 3;
|
|
12
|
-
readonly backoffMs = 2000;
|
|
13
|
-
handle(payload: DispatchWebhookPayload): Promise<void>;
|
|
14
|
-
private deliver;
|
|
15
|
-
}
|
|
16
|
-
export { DispatchWebhookJob };
|
|
17
|
-
export default DispatchWebhookJob;
|
|
18
|
-
export type { DispatchWebhookPayload };
|