@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 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.92 && git push origin v0.5.92`
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 INTENDED_URL_COOKIE = "workhub_intended";
1
+ declare const INTENDED_URL_COOKIE: string;
2
2
  declare const DEFAULT_INTENDED_URL_TTL_SECONDS: number;
3
3
  declare function intendedUrlCookieName(): string;
4
4
  declare function intendedUrlTtlSeconds(): number;
@@ -1,4 +1,4 @@
1
- declare const PASSWORD_CONFIRM_COOKIE = "workhub_password_confirmed";
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;
@@ -1,4 +1,4 @@
1
- declare const SESSION_COOKIE = "workhub_session";
1
+ declare const SESSION_COOKIE: string;
2
2
  declare const SESSION_TTL_SECONDS: number;
3
3
  declare const SESSION_REMEMBER_TTL_SECONDS: number;
4
4
  interface CreateSessionCookieOptions {
@@ -1,4 +1,4 @@
1
- declare const CSRF_COOKIE = "workhub_csrf";
1
+ declare const CSRF_COOKIE: string;
2
2
  declare function csrfCookieName(): string;
3
3
  declare function createCsrfTokenCookie(): {
4
4
  token: string;
@@ -1,4 +1,4 @@
1
- declare const FLASH_COOKIE = "workhub_flash";
1
+ declare const FLASH_COOKIE: string;
2
2
  declare function flashCookieName(): string;
3
3
  type FlashLevel = "success" | "error" | "info";
4
4
  interface FlashMessage {
@@ -87,7 +87,7 @@ function sdkClientClassName() {
87
87
  }
88
88
 
89
89
  // ../../src/core/auth/intendedUrlCookie.ts
90
- var INTENDED_URL_COOKIE = "workhub_intended";
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 = "workhub_password_confirmed";
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 = "workhub_session";
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 = "workhub_session";
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 = "workhub_csrf";
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 = "workhub_csrf";
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 = "workhub_flash";
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 = "workhub_flash";
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",
@@ -493,7 +493,7 @@ function currentRequestMeta3() {
493
493
  }
494
494
 
495
495
  // ../../src/core/http/csrfToken.ts
496
- var CSRF_COOKIE = "workhub_csrf";
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 = "workhub_flash";
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.87",
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 };