@getstrata/core 0.5.88 → 0.5.90

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.
Files changed (42) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +1 -1
  3. package/dist/entries/audit/exportAuditLogs.js +2 -2
  4. package/dist/entries/audit/siemFormatter.js +2 -2
  5. package/dist/entries/auth/intendedUrlCookie.js +2 -2
  6. package/dist/entries/auth/oauth/providers.js +2 -2
  7. package/dist/entries/auth/oauth/samlProvider.js +2 -2
  8. package/dist/entries/auth/passwordConfirmCookie.js +2 -2
  9. package/dist/entries/auth/sessionCookie.js +2 -2
  10. package/dist/entries/auth/sessionGuard.js +2 -2
  11. package/dist/entries/auth/tokenHash.js +2 -2
  12. package/dist/entries/cache/createCacheStore.js +2 -2
  13. package/dist/entries/facades.js +2 -2
  14. package/dist/entries/http/csrfMiddleware.js +2 -2
  15. package/dist/entries/http/csrfToken.js +2 -2
  16. package/dist/entries/http/flashMiddleware.js +2 -2
  17. package/dist/entries/http/flashSession.js +2 -2
  18. package/dist/entries/http/loginThrottleMiddleware.js +2 -2
  19. package/dist/entries/http/memoryThrottleMiddleware.js +2 -2
  20. package/dist/entries/http/scimThrottleMiddleware.js +2 -2
  21. package/dist/entries/http/securityHeadersMiddleware.js +2 -2
  22. package/dist/entries/http/signedUrl.js +2 -2
  23. package/dist/entries/http/throttleMiddleware.js +2 -2
  24. package/dist/entries/jobs/exportAuditLogsJob.js +2 -2
  25. package/dist/entries/mail/mailer.js +2 -2
  26. package/dist/entries/openapi/generator.js +5 -5
  27. package/dist/entries/queue/createAppQueue.js +2 -2
  28. package/dist/entries/queue/publicQueue.js +2 -2
  29. package/dist/entries/queue/queueMetrics.js +2 -2
  30. package/dist/entries/queue/redisQueue.js +2 -2
  31. package/dist/entries/runtime/appKeyPrefix.js +2 -2
  32. package/dist/entries/scheduler/schedule.js +13 -2
  33. package/dist/entries/security/oauthState.js +2 -2
  34. package/dist/entries/security/safeFetch.js +2 -2
  35. package/dist/entries/security/totp.js +2 -2
  36. package/dist/entries/tracing/tracingMiddleware.js +2 -2
  37. package/dist/entries/view.js +2 -2
  38. package/dist/index.js +14 -3
  39. package/package.json +2 -7
  40. package/dist/core/jobs/dispatchWebhookJob.d.ts +0 -2
  41. package/dist/entries/jobs/dispatchWebhookJob.js +0 -93
  42. package/dist/modules/webhook/dispatchWebhookJob.d.ts +0 -18
package/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # @getstrata/core changelog
2
2
 
3
+ ## 0.5.90
4
+
5
+ - **Breaking identity defaults:** `appKeyPrefix()` is `strata` and `appDisplayName()` is `Strata` when `APP_KEY_PREFIX` / `APP_NAME` are unset (were `workhub` / `WorkHub`). WorkHub pins those env vars.
6
+ - `Schedule.command()` rejects cron strings other than `* * * * *` and `*/N * * * *` instead of silently never running them.
7
+ - OpenAPI marks `GET /users/me/*` as bearer-authenticated.
8
+ - OpenAPI `/users/me/current-organization` summaries no longer say Jetstream.
9
+
10
+ ## 0.5.89
11
+
12
+ - **Breaking:** removed `@getstrata/core/jobs/dispatchWebhookJob`. Import `DispatchWebhookJob` from the app webhook module (`src/modules/webhook/dispatchWebhookJob.ts`).
13
+
3
14
  ## 0.5.88
4
15
 
5
16
  - 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.
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.93 && git push origin v0.5.93`
85
+ 2. Tag a release: `git tag v0.5.95 && git push origin v0.5.95`
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.
@@ -4,7 +4,7 @@ import { repositoryConnection as db2 } from "@getstrata/core/database/repository
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -34,7 +34,7 @@ function loginRedirectLocation(request) {
34
34
 
35
35
  // ../../src/core/runtime/appKeyPrefix.ts
36
36
  function appKeyPrefix() {
37
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
37
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
38
38
  }
39
39
  function appCookieName(kind) {
40
40
  return `${appKeyPrefix()}_${kind}`;
@@ -63,7 +63,7 @@ function webhookSignatureHeader() {
63
63
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
64
64
  }
65
65
  function appDisplayName() {
66
- return process.env.APP_NAME?.trim() || "WorkHub";
66
+ return process.env.APP_NAME?.trim() || "Strata";
67
67
  }
68
68
  function appEnv() {
69
69
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { createHmac, timingSafeEqual } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { createHmac, timingSafeEqual } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -89,7 +89,7 @@ import { createHmac, timingSafeEqual } from "crypto";
89
89
 
90
90
  // ../../src/core/runtime/appKeyPrefix.ts
91
91
  function appKeyPrefix() {
92
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
92
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
93
93
  }
94
94
  function appCookieName(kind) {
95
95
  return `${appKeyPrefix()}_${kind}`;
@@ -118,7 +118,7 @@ function webhookSignatureHeader() {
118
118
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
119
119
  }
120
120
  function appDisplayName() {
121
- return process.env.APP_NAME?.trim() || "WorkHub";
121
+ return process.env.APP_NAME?.trim() || "Strata";
122
122
  }
123
123
  function appEnv() {
124
124
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { createHash, createHmac } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ var {RedisClient } = globalThis.Bun;
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -13,7 +13,7 @@ import {
13
13
 
14
14
  // ../../src/core/runtime/appKeyPrefix.ts
15
15
  function appKeyPrefix() {
16
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
16
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
17
17
  }
18
18
  function appCookieName(kind) {
19
19
  return `${appKeyPrefix()}_${kind}`;
@@ -42,7 +42,7 @@ function webhookSignatureHeader() {
42
42
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
43
43
  }
44
44
  function appDisplayName() {
45
- return process.env.APP_NAME?.trim() || "WorkHub";
45
+ return process.env.APP_NAME?.trim() || "Strata";
46
46
  }
47
47
  function appEnv() {
48
48
  return process.env.APP_ENV?.trim() || "local";
@@ -7,7 +7,7 @@ import { timingSafeEqual } from "crypto";
7
7
 
8
8
  // ../../src/core/runtime/appKeyPrefix.ts
9
9
  function appKeyPrefix() {
10
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
10
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
11
11
  }
12
12
  function appCookieName(kind) {
13
13
  return `${appKeyPrefix()}_${kind}`;
@@ -36,7 +36,7 @@ function webhookSignatureHeader() {
36
36
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
37
37
  }
38
38
  function appDisplayName() {
39
- return process.env.APP_NAME?.trim() || "WorkHub";
39
+ return process.env.APP_NAME?.trim() || "Strata";
40
40
  }
41
41
  function appEnv() {
42
42
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { timingSafeEqual } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { createHmac, timingSafeEqual } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { createHmac, timingSafeEqual } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ var {RedisClient } = globalThis.Bun;
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ var {RedisClient } = globalThis.Bun;
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -9,7 +9,7 @@ import { currentRequestMeta, runWithRequestMeta } from "@getstrata/core/http/req
9
9
 
10
10
  // ../../src/core/runtime/appKeyPrefix.ts
11
11
  function appKeyPrefix() {
12
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
12
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
13
13
  }
14
14
  function appCookieName(kind) {
15
15
  return `${appKeyPrefix()}_${kind}`;
@@ -38,7 +38,7 @@ function webhookSignatureHeader() {
38
38
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
39
39
  }
40
40
  function appDisplayName() {
41
- return process.env.APP_NAME?.trim() || "WorkHub";
41
+ return process.env.APP_NAME?.trim() || "Strata";
42
42
  }
43
43
  function appEnv() {
44
44
  return process.env.APP_ENV?.trim() || "local";
@@ -6,7 +6,7 @@ import { timingSafeCompareString } from "@getstrata/core/security/timingSafeComp
6
6
 
7
7
  // ../../src/core/runtime/appKeyPrefix.ts
8
8
  function appKeyPrefix() {
9
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
9
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
10
10
  }
11
11
  function appCookieName(kind) {
12
12
  return `${appKeyPrefix()}_${kind}`;
@@ -35,7 +35,7 @@ function webhookSignatureHeader() {
35
35
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
36
36
  }
37
37
  function appDisplayName() {
38
- return process.env.APP_NAME?.trim() || "WorkHub";
38
+ return process.env.APP_NAME?.trim() || "Strata";
39
39
  }
40
40
  function appEnv() {
41
41
  return process.env.APP_ENV?.trim() || "local";
@@ -6,7 +6,7 @@ var {RedisClient } = globalThis.Bun;
6
6
 
7
7
  // ../../src/core/runtime/appKeyPrefix.ts
8
8
  function appKeyPrefix() {
9
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
9
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
10
10
  }
11
11
  function appCookieName(kind) {
12
12
  return `${appKeyPrefix()}_${kind}`;
@@ -35,7 +35,7 @@ function webhookSignatureHeader() {
35
35
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
36
36
  }
37
37
  function appDisplayName() {
38
- return process.env.APP_NAME?.trim() || "WorkHub";
38
+ return process.env.APP_NAME?.trim() || "Strata";
39
39
  }
40
40
  function appEnv() {
41
41
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { repositoryConnection as db2 } from "@getstrata/core/database/repository
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -66,8 +66,8 @@ var PUBLIC_ROUTE_DESCRIPTIONS = {
66
66
  "POST /auth/tokens": "Create API token",
67
67
  "DELETE /auth/tokens/:id": "Revoke API token",
68
68
  "GET /users/me/export": "GDPR export of user data",
69
- "GET /users/me/current-organization": "Current Jetstream organization",
70
- "PUT /users/me/current-organization": "Switch current Jetstream organization",
69
+ "GET /users/me/current-organization": "Current organization",
70
+ "PUT /users/me/current-organization": "Switch current organization",
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",
@@ -126,7 +126,7 @@ function requiresBearerAuth(path, method) {
126
126
  if (method === "GET" && ["/organizations", "/projects", "/tasks", "/search"].some((prefix) => relative.startsWith(prefix) || path.startsWith(prefix))) {
127
127
  return false;
128
128
  }
129
- return relative.startsWith("/auth/") || ["POST", "PATCH", "PUT", "DELETE"].includes(method);
129
+ return relative.startsWith("/auth/") || relative.startsWith("/users/me") || path.startsWith("/users/me") || ["POST", "PATCH", "PUT", "DELETE"].includes(method);
130
130
  }
131
131
  function generateOpenApiSpec(routes) {
132
132
  const paths = {};
@@ -158,7 +158,7 @@ var {RedisClient } = globalThis.Bun;
158
158
 
159
159
  // ../../src/core/runtime/appKeyPrefix.ts
160
160
  function appKeyPrefix() {
161
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
161
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
162
162
  }
163
163
  function appCookieName(kind) {
164
164
  return `${appKeyPrefix()}_${kind}`;
@@ -187,7 +187,7 @@ function webhookSignatureHeader() {
187
187
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
188
188
  }
189
189
  function appDisplayName() {
190
- return process.env.APP_NAME?.trim() || "WorkHub";
190
+ return process.env.APP_NAME?.trim() || "Strata";
191
191
  }
192
192
  function appEnv() {
193
193
  return process.env.APP_ENV?.trim() || "local";
@@ -158,7 +158,7 @@ var {RedisClient } = globalThis.Bun;
158
158
 
159
159
  // ../../src/core/runtime/appKeyPrefix.ts
160
160
  function appKeyPrefix() {
161
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
161
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
162
162
  }
163
163
  function appCookieName(kind) {
164
164
  return `${appKeyPrefix()}_${kind}`;
@@ -187,7 +187,7 @@ function webhookSignatureHeader() {
187
187
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
188
188
  }
189
189
  function appDisplayName() {
190
- return process.env.APP_NAME?.trim() || "WorkHub";
190
+ return process.env.APP_NAME?.trim() || "Strata";
191
191
  }
192
192
  function appEnv() {
193
193
  return process.env.APP_ENV?.trim() || "local";
@@ -161,7 +161,7 @@ var {RedisClient } = globalThis.Bun;
161
161
 
162
162
  // ../../src/core/runtime/appKeyPrefix.ts
163
163
  function appKeyPrefix() {
164
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
164
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
165
165
  }
166
166
  function appCookieName(kind) {
167
167
  return `${appKeyPrefix()}_${kind}`;
@@ -190,7 +190,7 @@ function webhookSignatureHeader() {
190
190
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
191
191
  }
192
192
  function appDisplayName() {
193
- return process.env.APP_NAME?.trim() || "WorkHub";
193
+ return process.env.APP_NAME?.trim() || "Strata";
194
194
  }
195
195
  function appEnv() {
196
196
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ var {RedisClient } = globalThis.Bun;
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -1,8 +1,18 @@
1
1
  // @bun
2
2
  // ../../src/core/scheduler/schedule.ts
3
+ function isSupportedScheduleExpression(expression) {
4
+ if (expression === "* * * * *") {
5
+ return true;
6
+ }
7
+ return /^(\*\/\d+)( \*){4}$/.test(expression);
8
+ }
9
+
3
10
  class Schedule {
4
11
  tasks = [];
5
12
  command(expression, name, run) {
13
+ if (!isSupportedScheduleExpression(expression)) {
14
+ throw new Error(`Unsupported schedule expression "${expression}". Only "* * * * *" and "*/N * * * *" are implemented.`);
15
+ }
6
16
  this.tasks.push({ expression, name, run });
7
17
  return this;
8
18
  }
@@ -12,8 +22,9 @@ class Schedule {
12
22
  if (task.expression === "* * * * *") {
13
23
  return true;
14
24
  }
15
- if (task.expression.startsWith("*/")) {
16
- const interval = Number.parseInt(task.expression.slice(2), 10);
25
+ const intervalMatch = task.expression.match(/^\*\/(\d+)(?: \*){4}$/);
26
+ if (intervalMatch) {
27
+ const interval = Number.parseInt(intervalMatch[1] ?? "", 10);
17
28
  return Number.isInteger(interval) && interval > 0 && minute % interval === 0;
18
29
  }
19
30
  return false;
@@ -4,7 +4,7 @@ import { createHmac, randomBytes, timingSafeEqual } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -1,7 +1,7 @@
1
1
  // @bun
2
2
  // ../../src/core/runtime/appKeyPrefix.ts
3
3
  function appKeyPrefix() {
4
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
4
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
5
5
  }
6
6
  function appCookieName(kind) {
7
7
  return `${appKeyPrefix()}_${kind}`;
@@ -30,7 +30,7 @@ function webhookSignatureHeader() {
30
30
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
31
31
  }
32
32
  function appDisplayName() {
33
- return process.env.APP_NAME?.trim() || "WorkHub";
33
+ return process.env.APP_NAME?.trim() || "Strata";
34
34
  }
35
35
  function appEnv() {
36
36
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { createHmac, randomBytes } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -4,7 +4,7 @@ import { randomBytes } from "crypto";
4
4
 
5
5
  // ../../src/core/runtime/appKeyPrefix.ts
6
6
  function appKeyPrefix() {
7
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
7
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
8
8
  }
9
9
  function appCookieName(kind) {
10
10
  return `${appKeyPrefix()}_${kind}`;
@@ -33,7 +33,7 @@ function webhookSignatureHeader() {
33
33
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
34
34
  }
35
35
  function appDisplayName() {
36
- return process.env.APP_NAME?.trim() || "WorkHub";
36
+ return process.env.APP_NAME?.trim() || "Strata";
37
37
  }
38
38
  function appEnv() {
39
39
  return process.env.APP_ENV?.trim() || "local";
@@ -386,7 +386,7 @@ import { timingSafeEqual } from "crypto";
386
386
 
387
387
  // ../../src/core/runtime/appKeyPrefix.ts
388
388
  function appKeyPrefix() {
389
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
389
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
390
390
  }
391
391
  function appCookieName(kind) {
392
392
  return `${appKeyPrefix()}_${kind}`;
@@ -415,7 +415,7 @@ function webhookSignatureHeader() {
415
415
  return process.env.WEBHOOK_SIGNATURE_HEADER?.trim() || `x-${appKeyPrefix()}-signature`;
416
416
  }
417
417
  function appDisplayName() {
418
- return process.env.APP_NAME?.trim() || "WorkHub";
418
+ return process.env.APP_NAME?.trim() || "Strata";
419
419
  }
420
420
  function appEnv() {
421
421
  return process.env.APP_ENV?.trim() || "local";
package/dist/index.js CHANGED
@@ -977,7 +977,7 @@ var {RedisClient } = globalThis.Bun;
977
977
 
978
978
  // ../../src/core/runtime/appKeyPrefix.ts
979
979
  function appKeyPrefix() {
980
- return process.env.APP_KEY_PREFIX?.trim() || "workhub";
980
+ return process.env.APP_KEY_PREFIX?.trim() || "strata";
981
981
  }
982
982
  function appCookieName(kind) {
983
983
  return `${appKeyPrefix()}_${kind}`;
@@ -6557,9 +6557,19 @@ async function collectQueueMetrics() {
6557
6557
  };
6558
6558
  }
6559
6559
  // ../../src/core/scheduler/schedule.ts
6560
+ function isSupportedScheduleExpression(expression) {
6561
+ if (expression === "* * * * *") {
6562
+ return true;
6563
+ }
6564
+ return /^(\*\/\d+)( \*){4}$/.test(expression);
6565
+ }
6566
+
6560
6567
  class Schedule {
6561
6568
  tasks = [];
6562
6569
  command(expression, name, run) {
6570
+ if (!isSupportedScheduleExpression(expression)) {
6571
+ throw new Error(`Unsupported schedule expression "${expression}". Only "* * * * *" and "*/N * * * *" are implemented.`);
6572
+ }
6563
6573
  this.tasks.push({ expression, name, run });
6564
6574
  return this;
6565
6575
  }
@@ -6569,8 +6579,9 @@ class Schedule {
6569
6579
  if (task.expression === "* * * * *") {
6570
6580
  return true;
6571
6581
  }
6572
- if (task.expression.startsWith("*/")) {
6573
- const interval = Number.parseInt(task.expression.slice(2), 10);
6582
+ const intervalMatch = task.expression.match(/^\*\/(\d+)(?: \*){4}$/);
6583
+ if (intervalMatch) {
6584
+ const interval = Number.parseInt(intervalMatch[1] ?? "", 10);
6574
6585
  return Number.isInteger(interval) && interval > 0 && minute % interval === 0;
6575
6586
  }
6576
6587
  return false;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@getstrata/core",
3
- "version": "0.5.88",
3
+ "version": "0.5.90",
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,2 +0,0 @@
1
- /** @deprecated Import `DispatchWebhookJob` from the app webhook module. This path is a compatibility re-export. */
2
- 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 };