Skip to content

Commit 17f6f29

Browse files
authored
Feature: Support multiple runtimes other than Node.js (#774)
1 parent 08f7c63 commit 17f6f29

File tree

135 files changed

+2442
-2406
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

135 files changed

+2442
-2406
lines changed

.changeset/ninety-boats-tap.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
---
2+
"@trigger.dev/integration-kit": minor
3+
"@trigger.dev/replicate": minor
4+
"@trigger.dev/airtable": minor
5+
"@trigger.dev/sendgrid": minor
6+
"@trigger.dev/supabase": minor
7+
"@trigger.dev/typeform": minor
8+
"@trigger.dev/core-backend": minor
9+
"@trigger.dev/shopify": minor
10+
"@trigger.dev/sdk": minor
11+
"@trigger.dev/github": minor
12+
"@trigger.dev/linear": minor
13+
"@trigger.dev/openai": minor
14+
"@trigger.dev/resend": minor
15+
"@trigger.dev/stripe": minor
16+
"@trigger.dev/plain": minor
17+
"@trigger.dev/slack": minor
18+
"@trigger.dev/sveltekit": minor
19+
"@trigger.dev/express": minor
20+
"@trigger.dev/testing": minor
21+
"@trigger.dev/nestjs": minor
22+
"@trigger.dev/nextjs": minor
23+
"@trigger.dev/remix": minor
24+
"@trigger.dev/core": minor
25+
---
26+
27+
Support for Deno, Bun and Cloudflare workers, as well as conditionally exporting ESM versions of the package instead of just commonjs.
28+
29+
Cloudflare worker support requires the node compat flag turned on (https://developers.cloudflare.com/workers/runtime-apis/nodejs/)

.changeset/shaggy-crabs-sneeze.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@trigger.dev/hono": patch
3+
"@trigger.dev/cli": patch
4+
---
5+
6+
Added hono framework support

.github/workflows/unit-tests.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,16 @@ jobs:
2222
node-version: 18
2323
cache: "pnpm"
2424

25+
- name: ⎔ Setup Deno
26+
uses: denoland/setup-deno@v1
27+
with:
28+
deno-version: v1.x
29+
30+
- name: ⎔ Setup bun
31+
uses: oven-sh/setup-bun@v1
32+
with:
33+
bun-version: "1.0.15"
34+
2535
- name: 📥 Download deps
2636
run: pnpm install --frozen-lockfile
2737

.vscode/settings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
2-
"deno.enablePaths": ["references/deno-reference"],
2+
"deno.enablePaths": ["references/deno-reference", "runtime_tests/tests/deno"],
33
"debug.toolBarLocation": "commandCenter"
44
}

apps/webapp/app/components/run/RunOverview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ export function RunOverview({ run, trigger, showRerun, paths }: RunOverviewProps
150150
<PageInfoProperty
151151
icon={"list-numbers"}
152152
label={"Execution Count"}
153-
value={run.executionCount}
153+
value={<>{run.executionCount}</>}
154154
/>
155155
</PageInfoGroup>
156156
<PageInfoGroup alignment="right">

apps/webapp/app/consts.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ export const EXECUTE_JOB_RETRY_LIMIT = 10;
88
export const MAX_RUN_YIELDED_EXECUTIONS = 100;
99
export const RUN_CHUNK_EXECUTION_BUFFER = 350;
1010
export const MAX_RUN_CHUNK_EXECUTION_LIMIT = 120000; // 2 minutes
11-
export const RESPONSE_TIMEOUT_STATUS_CODES = [408, 504];
11+
export const VERCEL_RESPONSE_TIMEOUT_STATUS_CODES = [408, 504];

apps/webapp/app/models/endpoint.server.ts

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { RESPONSE_TIMEOUT_STATUS_CODES } from "~/consts";
1+
import { VERCEL_RESPONSE_TIMEOUT_STATUS_CODES } from "~/consts";
22
import { prisma } from "~/db.server";
33
import { Prettify } from "~/lib.es5";
44

@@ -20,13 +20,33 @@ export async function findEndpoint(id: string) {
2020
});
2121
}
2222

23-
export function detectResponseIsTimeout(response?: Response) {
23+
export function detectResponseIsTimeout(rawBody: string, response?: Response) {
2424
if (!response) {
2525
return false;
2626
}
2727

2828
return (
29-
RESPONSE_TIMEOUT_STATUS_CODES.includes(response.status) ||
29+
isResponseVercelTimeout(response) ||
30+
isResponseDenoDeployTimeout(rawBody, response) ||
31+
isResponseCloudflareTimeout(rawBody, response)
32+
);
33+
}
34+
35+
function isResponseCloudflareTimeout(rawBody: string, response: Response) {
36+
return (
37+
response.status === 503 &&
38+
rawBody.includes("Worker exceeded resource limits") &&
39+
typeof response.headers.get("cf-ray") === "string"
40+
);
41+
}
42+
43+
function isResponseVercelTimeout(response: Response) {
44+
return (
45+
VERCEL_RESPONSE_TIMEOUT_STATUS_CODES.includes(response.status) ||
3046
response.headers.get("x-vercel-error") === "FUNCTION_INVOCATION_TIMEOUT"
3147
);
3248
}
49+
50+
function isResponseDenoDeployTimeout(rawBody: string, response: Response) {
51+
return response.status === 502 && rawBody.includes("TIME_LIMIT");
52+
}

apps/webapp/app/services/endpointApi.server.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,7 @@ function addStandardRequestOptions(options: RequestInit) {
444444
...options.headers,
445445
"user-agent": "triggerdotdev-server/2.0.0",
446446
"x-trigger-version": API_VERSIONS.LAZY_LOADED_CACHED_TASKS,
447+
accept: "application/json",
447448
},
448449
};
449450
}

apps/webapp/app/services/endpoints/probeEndpoint.server.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { MAX_RUN_CHUNK_EXECUTION_LIMIT, RESPONSE_TIMEOUT_STATUS_CODES } from "~/consts";
1+
import { MAX_RUN_CHUNK_EXECUTION_LIMIT } from "~/consts";
22
import { prisma, PrismaClient } from "~/db.server";
33
import { EndpointApi } from "../endpointApi.server";
44
import { logger } from "../logger.server";
@@ -46,8 +46,10 @@ export class ProbeEndpointService {
4646
},
4747
});
4848

49+
const rawBody = await response.text();
50+
4951
// If the response is a 200, or it was a timeout, we can assume the endpoint is up and update the runChunkExecutionLimit
50-
if (response.status === 200 || detectResponseIsTimeout(response)) {
52+
if (response.status === 200 || detectResponseIsTimeout(rawBody, response)) {
5153
await this.#prismaClient.endpoint.update({
5254
where: {
5355
id,

apps/webapp/app/services/externalApis/integrations/supabase.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const supabase = new SupabaseManagement({
99
id: "__SLUG__",
1010
});
1111
12-
new Job(client, {
12+
client.defineJob({
1313
id: "on-new-todos",
1414
name: "On New Todos",
1515
version: "0.1.1",
@@ -32,7 +32,7 @@ const supabase = new SupabaseManagement({
3232
apiKey: process.env.SUPABASE_API_KEY!,
3333
});
3434
35-
new Job(client, {
35+
client.defineJob({
3636
id: "on-new-todos",
3737
name: "On New Todos",
3838
version: "0.1.1",
@@ -136,7 +136,7 @@ const supabase = new Supabase<Database>({
136136
supabaseKey: process.env.SUPABASE_API_KEY!,
137137
});
138138
139-
new Job(client, {
139+
client.defineJob({
140140
id: "on-new-users",
141141
name: "On New Users",
142142
version: "0.1.1",

0 commit comments

Comments
 (0)