@trigger.dev/sdk 4.5.1 → 4.5.3

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 (68) hide show
  1. package/dist/commonjs/v3/ai-shared.d.ts +3 -127
  2. package/dist/commonjs/v3/ai-shared.js.map +1 -1
  3. package/dist/commonjs/v3/ai.js +66 -22
  4. package/dist/commonjs/v3/ai.js.map +1 -1
  5. package/dist/commonjs/v3/chat-react.d.ts +1 -0
  6. package/dist/commonjs/v3/chat-react.js +4 -1
  7. package/dist/commonjs/v3/chat-react.js.map +1 -1
  8. package/dist/commonjs/v3/chat.d.ts +204 -1
  9. package/dist/commonjs/v3/chat.js +203 -19
  10. package/dist/commonjs/v3/chat.js.map +1 -1
  11. package/dist/commonjs/v3/index.d.ts +1 -1
  12. package/dist/commonjs/v3/index.js.map +1 -1
  13. package/dist/commonjs/v3/runs-bulk.test.d.ts +1 -0
  14. package/dist/commonjs/v3/runs-bulk.test.js +141 -0
  15. package/dist/commonjs/v3/runs-bulk.test.js.map +1 -0
  16. package/dist/commonjs/v3/runs.d.ts +23 -6
  17. package/dist/commonjs/v3/runs.js +87 -0
  18. package/dist/commonjs/v3/runs.js.map +1 -1
  19. package/dist/commonjs/v3/sessions.js +5 -2
  20. package/dist/commonjs/v3/sessions.js.map +1 -1
  21. package/dist/commonjs/v3/shared.d.ts +2 -2
  22. package/dist/commonjs/v3/shared.js +79 -4
  23. package/dist/commonjs/v3/shared.js.map +1 -1
  24. package/dist/commonjs/v3/shared.test.js +37 -0
  25. package/dist/commonjs/v3/shared.test.js.map +1 -1
  26. package/dist/commonjs/version.js +1 -1
  27. package/dist/esm/v3/ai-shared.d.ts +3 -127
  28. package/dist/esm/v3/ai-shared.js.map +1 -1
  29. package/dist/esm/v3/ai.js +66 -22
  30. package/dist/esm/v3/ai.js.map +1 -1
  31. package/dist/esm/v3/chat-react.d.ts +1 -0
  32. package/dist/esm/v3/chat-react.js +4 -1
  33. package/dist/esm/v3/chat-react.js.map +1 -1
  34. package/dist/esm/v3/chat.d.ts +204 -1
  35. package/dist/esm/v3/chat.js +204 -20
  36. package/dist/esm/v3/chat.js.map +1 -1
  37. package/dist/esm/v3/index.d.ts +1 -1
  38. package/dist/esm/v3/index.js.map +1 -1
  39. package/dist/esm/v3/runs-bulk.test.d.ts +1 -0
  40. package/dist/esm/v3/runs-bulk.test.js +139 -0
  41. package/dist/esm/v3/runs-bulk.test.js.map +1 -0
  42. package/dist/esm/v3/runs.d.ts +18 -1
  43. package/dist/esm/v3/runs.js +87 -0
  44. package/dist/esm/v3/runs.js.map +1 -1
  45. package/dist/esm/v3/sessions.js +5 -2
  46. package/dist/esm/v3/sessions.js.map +1 -1
  47. package/dist/esm/v3/shared.d.ts +2 -2
  48. package/dist/esm/v3/shared.js +79 -5
  49. package/dist/esm/v3/shared.js.map +1 -1
  50. package/dist/esm/v3/shared.test.js +38 -1
  51. package/dist/esm/v3/shared.test.js.map +1 -1
  52. package/dist/esm/version.js +1 -1
  53. package/docs/ai-chat/frontend.mdx +46 -0
  54. package/docs/ai-chat/pending-messages.mdx +3 -1
  55. package/docs/ai-chat/reference.mdx +20 -0
  56. package/docs/billing-limits.mdx +73 -0
  57. package/docs/github-repo.mdx +1 -1
  58. package/docs/how-to-reduce-your-spend.mdx +1 -14
  59. package/docs/limits.mdx +5 -0
  60. package/docs/quick-start.mdx +1 -1
  61. package/docs/self-hosting/docker.mdx +24 -1
  62. package/docs/self-hosting/env/webapp.mdx +6 -1
  63. package/docs/self-hosting/kubernetes.mdx +26 -0
  64. package/docs/self-hosting/overview.mdx +4 -1
  65. package/docs/self-hosting/security.mdx +50 -0
  66. package/docs/troubleshooting.mdx +4 -0
  67. package/package.json +2 -2
  68. package/docs/open-source-self-hosting.mdx +0 -541
@@ -630,10 +630,30 @@ Options for the frontend transport constructor and `useTriggerChatTransport` hoo
630
630
  | `clientData` | Typed by `clientDataSchema` | — | Default client data merged into per-turn `metadata` and threaded through `startSession`'s params (so the first run's `payload.metadata` matches per-turn `metadata`). Live-updated when the option value changes. |
631
631
  | `sessions` | `Record<string, ChatSession>` | — | Restore sessions from storage. See [ChatSession](#chatsession). |
632
632
  | `onSessionChange` | `(chatId, session \| null) => void` | — | Fires when session state changes. `session` is the full `ChatSession` or `null` when the run ends. |
633
+ | `onEvent` | `(event: ChatTransportEvent) => void` | — | Observability callback for transport lifecycle events (send outcomes, stream connects, first chunk, turn completion). See [Transport events](#transport-events). Exceptions thrown by the callback are swallowed. |
633
634
  | `multiTab` | `boolean` | `false` | Enable multi-tab claim coordination via `BroadcastChannel`. See [Frontend → multi-tab](/ai-chat/frontend#multi-tab-coordination). |
634
635
  | `watch` | `boolean` | `false` | Read-only watcher mode — keep the SSE subscription open across `trigger:turn-complete` so a viewer sees turns 2, 3, … through one long-lived stream. |
635
636
  | `headStart` | `string` | — | URL of a [`chat.headStart`](/ai-chat/fast-starts#head-start) route handler. When set, the FIRST message of a brand-new chat POSTs to this URL so step 1's LLM call runs in your warm process while the agent run boots in parallel. Subsequent turns bypass it. |
636
637
 
638
+ ### Transport events
639
+
640
+ The `onEvent` callback receives a `ChatTransportEvent` (exported from `@trigger.dev/sdk/chat` and `@trigger.dev/sdk/chat/react`) for each lifecycle moment the transport observes. All events carry `chatId` and `timestamp`.
641
+
642
+ | Event | Extra fields | Fires when |
643
+ | --- | --- | --- |
644
+ | `message-sent` | `messageId?`, `source`, `durationMs`, `partId?`, `bodyBytes?` | A send was durably acknowledged — a 2xx from the session input stream append (or the `headStart` POST), after any internal token-refresh retries. This means the message is durably written to the stream the agent consumes from, not merely "request accepted". `partId` is the append's idempotency key, also stored on the server-side record. |
645
+ | `message-send-failed` | `messageId?`, `source`, `error`, `status?`, `durationMs`, `partId?`, `bodyBytes?` | A send definitively failed after internal retries. Fires in addition to `useChat`'s `onError`. |
646
+ | `stream-connected` | `resumed`, `lastEventId?`, `messageId?` | The SSE subscription to the session's output stream started delivering. `resumed: true` when reconnecting from a stored cursor (page reload) rather than following a fresh send. `lastEventId` is the cursor it connected from. |
647
+ | `first-chunk` | `chunkType?`, `lastEventId?`, `messageId?`, `sinceSendMs?` | The first response chunk of a turn arrived. `sinceSendMs` is the delta from the last turn-producing send — time to first token without any bookkeeping. |
648
+ | `turn-completed` | `lastEventId?`, `sessionInEventId?`, `messageId?`, `sinceSendMs?` | The agent's turn-complete control record arrived — the "finished answering" signal. `sinceSendMs` is the full turn latency; `sessionInEventId` is the agent's committed input-stream cursor. |
649
+ | `stream-error` | `error`, `status?` | The output stream failed unrecoverably. |
650
+
651
+ `source` identifies the send path: `"submit-message"`, `"regenerate-message"`, `"steer"` (`sendPendingMessage`), `"action"` (`sendAction`), `"stop"` (`stopGeneration`), or `"head-start"`.
652
+
653
+ `messageId` on the response-side events is client-side attribution: the id from the most recent turn-producing send (`submit-message`, `regenerate-message`, or `head-start`) on that chat.
654
+
655
+ See [Monitoring message delivery](/ai-chat/frontend#monitoring-message-delivery) for the metrics and watchdog patterns these enable.
656
+
637
657
  ### `accessToken` callback
638
658
 
639
659
  The transport invokes `accessToken` whenever it needs a *fresh* session-scoped PAT — initial use after no PAT is cached, or after a 401/403 from any session-PAT-authed request. The callback's job is to **return a token, not to start a run.**
@@ -0,0 +1,73 @@
1
+ ---
2
+ title: "Billing limits and alerts"
3
+ sidebarTitle: "Billing limits & alerts"
4
+ description: "Set a monthly compute spend cap for your organization and get email alerts before you reach it."
5
+ ---
6
+
7
+ Billing limits let you cap your organization's monthly compute spend so a runaway task or unexpected traffic spike can't blow your budget. Billing alerts notify you by email as you approach thresholds you choose.
8
+
9
+ <Note>Billing limits and alerts are available to all [Trigger.dev Cloud](https://trigger.dev) organizations. They don't apply to self-hosted instances.</Note>
10
+
11
+ You can find the settings in the dashboard: open the **Organization** menu in the top left, then **Settings** → **Billing limits**.
12
+
13
+ <picture>
14
+ <source srcSet="/images/billing-docs.webp" type="image/webp" />
15
+ <img src="/images/billing-docs.png" alt="Billing limit settings" />
16
+ </picture>
17
+
18
+ ## Setting a billing limit
19
+
20
+ Choose one of three options:
21
+
22
+ - **Plan limit**: Use your plan's maximum as the spending cap.
23
+ - **Custom limit**: Set your own monthly spend threshold.
24
+ - **No limit**: No cap is enforced. This is the default.
25
+
26
+ A billing limit applies to your whole organization and covers billable environments: `production`, `staging`, and `preview`. Your `dev` environment is not affected.
27
+
28
+ Optionally, enable **Cancel in-progress runs when this limit is reached** to immediately cancel executing runs when the limit is hit, instead of letting them finish naturally.
29
+
30
+ ## Billing alerts
31
+
32
+ Billing alerts are email notifications sent when your monthly spend crosses a threshold. You can add multiple thresholds:
33
+
34
+ - **With a billing limit set**: thresholds are percentages of your limit (e.g. 50%, 80%).
35
+ - **Without a billing limit**: thresholds are dollar amounts.
36
+
37
+ <picture>
38
+ <source srcSet="/images/billing-alerts-docs.webp" type="image/webp" />
39
+ <img src="/images/billing-alerts-docs.png" alt="Billing alerts settings" />
40
+ </picture>
41
+
42
+ Alerts only notify you — they never pause environments or reject runs. Use them on their own for visibility, or alongside a limit to get advance warning before enforcement kicks in.
43
+
44
+ ## What happens when you reach your limit
45
+
46
+ When your organization's spend reaches the billing limit, billable environments enter a **grace period**:
47
+
48
+ 1. Queues pause across `production`, `staging`, and `preview`. In-progress runs finish naturally (unless you enabled **Cancel in-progress runs**).
49
+ 2. New runs can still be triggered and are queued, but they won't start executing. Queued runs incur no compute cost until they start.
50
+ 3. You have **24 hours** to review and decide what to do.
51
+
52
+ If you don't act before the grace period ends, queued runs are canceled and new triggers are rejected for the rest of the billing cycle.
53
+
54
+ <Note>
55
+ Billing limits are **soft limits**, not instantaneous hard caps. Usage is evaluated on a short
56
+ delay, so spend can briefly exceed your limit before enforcement applies. See our
57
+ [terms](https://trigger.dev/terms) for refund policy details.
58
+ </Note>
59
+
60
+ ## Resuming after hitting a limit
61
+
62
+ To resume execution, increase or remove the billing limit from the **Billing limits** page. You'll be asked what to do with the runs that queued up during the pause:
63
+
64
+ - **Resume queued runs**: everything that built up during the pause runs in order.
65
+ - **Cancel queued runs**: the backlog is discarded and only new triggers run going forward.
66
+
67
+ Execution resumes automatically once you've resolved the limit. Limits also reset at the start of each billing cycle.
68
+
69
+ ## Tracking spend against your limit
70
+
71
+ On the **Usage** page (Organization menu → **Usage**), a **Billing limit** marker appears on the usage bar alongside your current spend and plan included usage, so you can see how close you are at a glance.
72
+
73
+ For tips on lowering your spend in the first place, see [How to reduce your spend](/how-to-reduce-your-spend).
@@ -5,4 +5,4 @@ url: "https://github.com/triggerdotdev/trigger.dev"
5
5
 
6
6
  Trigger.dev is [Open Source on GitHub](https://github.com/triggerdotdev/trigger.dev). You can contribute to the project by submitting issues, pull requests, or simply by using it and providing feedback.
7
7
 
8
- You can also [self-host](/open-source-self-hosting) the project if you want to run it on your own infrastructure.
8
+ You can also [self-host](/self-hosting/overview) the project if you want to run it on your own infrastructure.
@@ -24,20 +24,7 @@ Configure billing limits and alerts in your dashboard to protect against unexpec
24
24
  - Catch unexpected cost increases early
25
25
  - Identify runaway tasks before they become expensive
26
26
 
27
- The **Billing limits** settings page has two sections:
28
-
29
- - **Billing limit**: Choose your plan limit, a custom amount, or no limit. When a limit is reached, billable environments (`production`, `staging`, and `preview`) enter a **grace period** — queues pause and new runs queue without starting. After grace expires, new triggers are rejected until you increase or remove the limit.
30
- - **Billing alerts**: Add email alerts at specific spend thresholds (% of your limit when a limit is set, or dollar amounts when no limit is configured). Alerts notify you only; they do **not** pause environments or reject triggers.
31
-
32
- **Limits vs alerts:** A billing limit enforces spend (grace → reject). Billing alerts are optional notifications at thresholds you choose.
33
-
34
- **Soft limits:** Billing limits are not instantaneous hard caps. Usage is evaluated on a short delay, so spend can briefly exceed your limit before enforcement applies. Queued runs during grace incur no compute cost until they start. See our [terms](https://trigger.dev/terms) for refund policy details.
35
-
36
- On the **Usage** page, when you have a custom billing limit (or a plan limit that differs from included usage), a **Billing limit** marker appears on the usage bar alongside your current spend and plan included usage.
37
-
38
- ![Billing limits and alerts settings](./images/billing-alerts-ui.png)
39
-
40
- You can open the page from the **Organization** menu in the top left of the dashboard, then **Settings** → **Billing limits**.
27
+ You can open the settings from the **Organization** menu in the top left of the dashboard, then **Settings** → **Billing limits**. [Read the full billing limits and alerts docs](/billing-limits) for how limits are enforced, the grace period, and resuming after hitting a limit.
41
28
 
42
29
  ## Reduce your machine sizes
43
30
 
package/docs/limits.mdx CHANGED
@@ -7,6 +7,11 @@ import RateLimitHitUseBatchTrigger from "/snippets/rate-limit-hit-use-batchtrigg
7
7
 
8
8
  You can view your current limits, quotas, and rate limit usage in real-time by visiting the **Limits** page in the dashboard (accessible from the left sidebar). This page shows current rate limit token availability, quota usage, and plan features for your organization.
9
9
 
10
+ <Note>
11
+ Looking to cap your monthly spend? That's a setting you control, not a platform limit — see
12
+ [Billing limits and alerts](/billing-limits).
13
+ </Note>
14
+
10
15
  ## Concurrency limits
11
16
 
12
17
  | Pricing tier | Limit |
@@ -57,7 +57,7 @@ If I've already run init and want the MCP server, run: npx trigger.dev@latest in
57
57
 
58
58
  <Step title="Create a Trigger.dev account">
59
59
 
60
- Sign up at [Trigger.dev Cloud](https://cloud.trigger.dev) (or [self-host](/open-source-self-hosting)). The onboarding flow will guide you through creating your first organization and project.
60
+ Sign up at [Trigger.dev Cloud](https://cloud.trigger.dev) (or [self-host](/self-hosting/overview)). The onboarding flow will guide you through creating your first organization and project.
61
61
 
62
62
  </Step>
63
63
 
@@ -339,9 +339,11 @@ There are several reasons to lock the version of your Docker images:
339
339
  By default, the images will point at the latest versioned release via the `latest` tag. You can override this by specifying a different tag in your `.env` file. For example:
340
340
 
341
341
  ```bash
342
- TRIGGER_IMAGE_TAG=v4.0.0
342
+ TRIGGER_IMAGE_TAG=v4.5.0
343
343
  ```
344
344
 
345
+ We patch the latest released version line only, so keep an eye on new releases to receive security fixes. See [Security & vulnerability reporting](/self-hosting/security).
346
+
345
347
  ## Task events
346
348
 
347
349
  By default, task events (timeline, logs, spans) are stored in PostgreSQL. For production deployments we recommend storing them in ClickHouse instead, it scales to much higher volumes and avoids unbounded growth of the `TaskEvent` table.
@@ -354,6 +356,27 @@ EVENT_REPOSITORY_DEFAULT_STORE=clickhouse_v2
354
356
 
355
357
  This only affects new runs; existing runs continue to read from wherever their events were originally stored.
356
358
 
359
+ ## Realtime streams
360
+
361
+ Realtime streams power AI-agent token streaming and run streams. They default to **v2**, backed by the bundled `s2` service — [s2-lite](https://s2.dev), the open-source, self-hostable S2 server. It stores stream data in a persistent volume and is preconfigured in the webapp compose file, so no setup is required.
362
+
363
+ To fall back to the Redis-backed **v1** streams, set on the webapp in your `.env`:
364
+
365
+ ```bash
366
+ REALTIME_STREAMS_DEFAULT_VERSION=v1
367
+ ```
368
+
369
+ To use a hosted S2 at [s2.dev](https://s2.dev) instead of the bundled s2-lite, point the endpoint at your basin and supply an access token:
370
+
371
+ ```bash
372
+ REALTIME_STREAMS_S2_BASIN=your-basin
373
+ REALTIME_STREAMS_S2_ENDPOINT=https://your-basin.b.aws.s2.dev/v1
374
+ REALTIME_STREAMS_S2_SKIP_ACCESS_TOKENS=false
375
+ REALTIME_STREAMS_S2_ACCESS_TOKEN=your-access-token
376
+ ```
377
+
378
+ See the [webapp environment variables](/self-hosting/env/webapp) for the full list of realtime stream settings.
379
+
357
380
  ## Troubleshooting
358
381
 
359
382
  - **Deployment fails at the push step.** The machine running `deploy` needs registry access. See the [registry setup](#registry-setup) section for more details.
@@ -139,9 +139,14 @@ mode: "wide"
139
139
  | **Task events** | | | |
140
140
  | `EVENT_REPOSITORY_DEFAULT_STORE` | No | postgres | Where to store task events. Set to `clickhouse_v2` to store in ClickHouse (recommended for production). |
141
141
  | **Realtime** | | | |
142
- | `REALTIME_STREAM_VERSION` | No | v1 | Realtime stream protocol version. One of `v1`, `v2`. |
142
+ | `REALTIME_STREAM_VERSION` | No | v1 | Stream version exposed to tasks via the `TRIGGER_REALTIME_STREAM_VERSION` variable. Distinct from `REALTIME_STREAMS_DEFAULT_VERSION`. One of `v1`, `v2`. |
143
143
  | `REALTIME_STREAM_MAX_LENGTH` | No | 1000 | Realtime stream max length. |
144
144
  | `REALTIME_STREAM_TTL` | No | 86400 (1d) | Realtime stream TTL (s). |
145
+ | `REALTIME_STREAMS_DEFAULT_VERSION` | No | v1 | Server-side default the webapp uses when a stream request doesn't pin a version (modern SDKs request `v2`). The Docker and Helm self-hosting defaults set this to `v2`. One of `v1`, `v2`. |
146
+ | `REALTIME_STREAMS_S2_BASIN` | No | — | S2 basin that holds v2 realtime streams. Required for `v2`. Must be at least 8 characters. |
147
+ | `REALTIME_STREAMS_S2_ENDPOINT` | No | — | Custom S2 API endpoint, including the `/v1` suffix (e.g. `http://s2/v1` for the bundled s2-lite). Omit to use hosted S2 at s2.dev. |
148
+ | `REALTIME_STREAMS_S2_SKIP_ACCESS_TOKENS` | No | false | Skip minting per-stream access tokens. Set to `true` for s2-lite, which needs no authentication. |
149
+ | `REALTIME_STREAMS_S2_ACCESS_TOKEN` | No | — | S2 access token. Required for hosted S2 unless `REALTIME_STREAMS_S2_SKIP_ACCESS_TOKENS` is `true`. |
145
150
  | **Bootstrap** | | | |
146
151
  | `TRIGGER_BOOTSTRAP_ENABLED` | No | 0 | Trigger bootstrap enabled. |
147
152
  | `TRIGGER_BOOTSTRAP_WORKER_GROUP_NAME` | No | — | Trigger bootstrap worker group name. |
@@ -375,6 +375,32 @@ webapp:
375
375
 
376
376
  This only affects new runs; existing runs continue to read from wherever their events were originally stored.
377
377
 
378
+ ## Realtime streams
379
+
380
+ Realtime streams power AI-agent token streaming and run streams. They default to **v2**, backed by the bundled `s2` deployment — [s2-lite](https://s2.dev), the open-source, self-hostable S2 server. The chart deploys it with a persistent volume, so no extra services are required.
381
+
382
+ To fall back to the Redis-backed **v1** streams, set the default version to `v1`:
383
+
384
+ ```yaml
385
+ s2:
386
+ defaultStreamVersion: "v1"
387
+ ```
388
+
389
+ To use a hosted S2 at [s2.dev](https://s2.dev) instead of the bundled s2-lite, disable the bundled deployment and point at your basin. Supply the access token via an existing secret:
390
+
391
+ ```yaml
392
+ s2:
393
+ deploy: false
394
+ skipAccessTokens: false
395
+ external:
396
+ endpoint: "https://your-basin.b.aws.s2.dev/v1"
397
+ existingSecret: "s2-credentials"
398
+ existingSecretAccessTokenKey: "access-token"
399
+ basin: "your-basin"
400
+ ```
401
+
402
+ To disable realtime streams v2 entirely and use v1, set `s2.deploy: false` with no external endpoint. See `helm show values` for all `s2` options.
403
+
378
404
  ## Worker token
379
405
 
380
406
  When using the default bootstrap configuration, worker creation and authentication is handled automatically. The webapp generates a worker token and makes it available to the supervisor via a shared volume.
@@ -6,7 +6,7 @@ description: "You can self-host Trigger.dev on your own infrastructure."
6
6
 
7
7
  Self-hosting Trigger.dev means you run and manage the platform on your own infrastructure, giving you full control over your environment, deployment process, and the URLs you expose the service on.
8
8
 
9
- You are responsible for provisioning resources, handling updates, and managing any security, scaling or reliability challenges that arise.
9
+ You are responsible for provisioning resources, handling updates, and managing any security, scaling or reliability challenges that arise. See [Security & vulnerability reporting](/self-hosting/security) for how to report issues and stay informed about security releases.
10
10
 
11
11
  We provide version-tagged releases for self-hosted deployments. It's highly advised to use these tags exclusively and keep them locked with your CLI version.
12
12
 
@@ -106,4 +106,7 @@ It's dangerous to go alone! Join the self-hosting channel on our [Discord server
106
106
  <Card title="Kubernetes" color="#326CE5" icon="dharmachakra" href="/self-hosting/kubernetes">
107
107
  Learn how to self-host Trigger.dev with Kubernetes.
108
108
  </Card>
109
+ <Card title="Security" icon="shield-halved" href="/self-hosting/security">
110
+ Report vulnerabilities and stay informed about security releases.
111
+ </Card>
109
112
  </CardGroup>
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: "Security & vulnerability reporting"
3
+ description: "How to report security issues in Trigger.dev, our response targets, and how self-hosters receive security notices."
4
+ sidebarTitle: "Security"
5
+ ---
6
+
7
+ We take the security of Trigger.dev seriously, for both Cloud and self-hosted deployments. This page covers how to report a vulnerability, what to expect, and how to stay informed about security releases.
8
+
9
+ <Warning>
10
+ Do not report security vulnerabilities through public GitHub issues, pull requests, or Discord. Use one of the private channels below.
11
+ </Warning>
12
+
13
+ ## Reporting a vulnerability
14
+
15
+ <Steps>
16
+ <Step title="Choose a private channel">
17
+ - **GitHub (preferred):** open a private report from the repository's **Security** tab using **"Report a vulnerability"** ([direct link](https://github.com/triggerdotdev/trigger.dev/security/advisories/new)).
18
+ - **Email:** `security-advisories@trigger.dev`
19
+ </Step>
20
+ <Step title="Include the details">
21
+ A description and impact, steps to reproduce (a proof of concept helps), affected versions/components, and any suggested fix.
22
+ </Step>
23
+ <Step title="We track it privately">
24
+ Every report is tracked in a private GitHub Security Advisory. If you email us, we open the advisory on your behalf.
25
+ </Step>
26
+ </Steps>
27
+
28
+ ## What to expect
29
+
30
+ | Stage | Target |
31
+ | --- | --- |
32
+ | Acknowledgement | within 3 business days |
33
+ | Validation + CVSS 3.1 severity assessment | within 1 week |
34
+
35
+ We score issues with CVSS 3.1 and prioritise remediation by severity:
36
+
37
+ | Severity (CVSS 3.1) | Target time to resolve |
38
+ | --- | --- |
39
+ | Critical (9.0–10.0) | 7 days |
40
+ | High (7.0–8.9) | 30 days |
41
+ | Medium (4.0–6.9) | 90 days |
42
+ | Low (0.1–3.9) | As needed |
43
+
44
+ <Note>
45
+ These are best-effort targets measured from when we validate and accept a report, not guarantees. We follow coordinated disclosure with a default 90-day window, and publish a GitHub Security Advisory (requesting a CVE where applicable) once a fix ships.
46
+ </Note>
47
+
48
+ ## Supported versions
49
+
50
+ We patch the **latest released version line** only. Run the latest version-tagged release to receive security fixes — see [Self-hosting overview](/self-hosting/overview).
@@ -242,6 +242,10 @@ If runs are staying in the `QUEUED` state for extended periods, check your concu
242
242
  - **Review queue concurrency limits** - Check if individual queues have restrictive `concurrencyLimit` settings
243
243
  - **Check for stuck runs** - See if stalled runs are blocking new executions
244
244
 
245
+ ### Runs queued because a billing limit was reached
246
+
247
+ If your organization reaches a billing limit, billable environments (`production`, `staging`, and `preview`) pause: new runs still queue, but they won't start executing until you raise or remove the limit and choose whether to resume or cancel the queued runs. See [Billing limits and alerts](/billing-limits) for the full flow.
248
+
245
249
  ### `Crypto is not defined`
246
250
 
247
251
  This can happen in different situations, for example when using plain strings as idempotency keys. Support for `Crypto` without a special flag was added in Node `v19.0.0`. You will have to upgrade Node - we recommend even-numbered major releases, e.g. `v20` or `v22`. Alternatively, you can switch from plain strings to the `idempotencyKeys.create` SDK function. [Read the guide](/idempotency).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trigger.dev/sdk",
3
- "version": "4.5.1",
3
+ "version": "4.5.3",
4
4
  "description": "trigger.dev Node.JS SDK",
5
5
  "license": "MIT",
6
6
  "publishConfig": {
@@ -66,7 +66,7 @@
66
66
  "dependencies": {
67
67
  "@opentelemetry/api": "1.9.1",
68
68
  "@opentelemetry/semantic-conventions": "1.41.1",
69
- "@trigger.dev/core": "4.5.1",
69
+ "@trigger.dev/core": "4.5.3",
70
70
  "chalk": "^5.2.0",
71
71
  "cronstrue": "^2.21.0",
72
72
  "debug": "^4.3.4",