Skip to content

Commit 3759dfc

Browse files
committed
Breakout resend into it’s own package
1 parent c8e8713 commit 3759dfc

16 files changed

Lines changed: 472 additions & 10 deletions

File tree

apps/webapp/app/services/requests/performIntegrationRequest.server.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ import type {
44
NormalizedResponse,
55
PerformedRequestResponse,
66
} from "@trigger.dev/integration-sdk";
7-
import { resend, shopify } from "internal-integrations";
7+
import { shopify } from "internal-integrations";
88
import * as slack from "@trigger.dev/slack/internal";
9+
import * as resend from "@trigger.dev/resend/internal";
910
import type { PrismaClient } from "~/db.server";
1011
import { prisma } from "~/db.server";
1112
import type { IntegrationRequest } from "~/models/integrationRequest.server";

apps/webapp/remix.config.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module.exports = {
1616
"@trigger.dev/providers",
1717
"@trigger.dev/github",
1818
"@trigger.dev/slack",
19+
"@trigger.dev/resend",
1920
"@trigger.dev/common-schemas",
2021
"@trigger.dev/sdk",
2122
"@trigger.dev/integrations",
@@ -36,6 +37,8 @@ module.exports = {
3637
"../../packages/trigger-sdk/src/**/*",
3738
"../../packages/trigger-integrations/src/**/*",
3839
"../../integrations/github/src/**/*",
40+
"../../integrations/slack/src/**/*",
41+
"../../integrations/resend/src/**/*",
3942
];
4043
},
4144
};

apps/webapp/tsconfig.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,9 @@
5353
"@trigger.dev/github": ["../../integrations/github/src/index"],
5454
"@trigger.dev/github/*": ["../../integrations/github/src/*"],
5555
"@trigger.dev/slack": ["../../integrations/slack/src/index"],
56-
"@trigger.dev/slack/*": ["../../integrations/slack/src/*"]
56+
"@trigger.dev/slack/*": ["../../integrations/slack/src/*"],
57+
"@trigger.dev/resend": ["../../integrations/resend/src/index"],
58+
"@trigger.dev/resend/*": ["../../integrations/resend/src/*"]
5759
},
5860
"noEmit": true
5961
}

config-packages/tsconfig/examples.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@
4141
],
4242
"@trigger.dev/slack/*": [
4343
"../../integrations/slack/src/*"
44+
],
45+
"@trigger.dev/resend": [
46+
"../../integrations/resend/src/index"
47+
],
48+
"@trigger.dev/resend/*": [
49+
"../../integrations/resend/src/*"
4450
]
4551
}
4652
}

examples/resend/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
"@react-email/render": "^0.0.3",
1717
"@react-email/section": "^0.0.1",
1818
"@react-email/text": "^0.0.2",
19-
"@trigger.dev/integrations": "workspace:*",
19+
"@trigger.dev/resend": "workspace:*",
2020
"@trigger.dev/sdk": "workspace:*",
2121
"react": "^18.2.0",
2222
"zod": "^3.20.2"
@@ -31,4 +31,4 @@
3131
"scripts": {
3232
"dev": "tsx src/index.tsx"
3333
}
34-
}
34+
}

examples/resend/src/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Trigger, customEvent } from "@trigger.dev/sdk";
2-
import { resend } from "@trigger.dev/integrations";
2+
import * as resend from "@trigger.dev/resend";
33
import { Head } from "@react-email/head";
44
import { Html } from "@react-email/html";
55
import { Link } from "@react-email/link";
@@ -13,7 +13,7 @@ import { z } from "zod";
1313
new Trigger({
1414
id: "resend",
1515
name: "Resend text/html",
16-
apiKey: "trigger_development_YpG7UQygbuT3",
16+
apiKey: "trigger_development_Du0Tt9gYwsVg",
1717
endpoint: "ws://localhost:8889/ws",
1818
logLevel: "debug",
1919
on: customEvent({
@@ -48,7 +48,7 @@ new Trigger({
4848
new Trigger({
4949
id: "resend-react",
5050
name: "Resend React",
51-
apiKey: "trigger_development_YpG7UQygbuT3",
51+
apiKey: "trigger_development_Du0Tt9gYwsVg",
5252
endpoint: "ws://localhost:8889/ws",
5353
logLevel: "debug",
5454
on: customEvent({

integrations/resend/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Trigger.dev resend.com integration
2+
3+
View more documentation [here](https://docs.trigger.dev)

integrations/resend/package.json

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
{
2+
"name": "@trigger.dev/resend",
3+
"version": "0.1.16",
4+
"description": "The official resend.com integration for Trigger.dev",
5+
"exports": {
6+
".": {
7+
"import": "./dist/index.js",
8+
"require": "./dist/index.js",
9+
"types": "./dist/index.d.ts"
10+
},
11+
"./package.json": "./package.json"
12+
},
13+
"publishConfig": {
14+
"access": "public"
15+
},
16+
"files": [
17+
"dist"
18+
],
19+
"devDependencies": {
20+
"@trigger.dev/integration-sdk": "workspace:*",
21+
"@trigger.dev/sdk": "workspace:*",
22+
"@trigger.dev/tsconfig": "workspace:*",
23+
"@types/debug": "^4.1.7",
24+
"@types/node": "16",
25+
"@types/react": "^18.0.26",
26+
"rimraf": "^3.0.2",
27+
"tsup": "^6.5.0"
28+
},
29+
"peerDependencies": {
30+
"@trigger.dev/sdk": "workspace:*"
31+
},
32+
"scripts": {
33+
"clean": "rimraf dist",
34+
"build": "npm run clean && npm run build:tsup",
35+
"build:tsup": "tsup"
36+
},
37+
"dependencies": {
38+
"debug": "^4.3.4",
39+
"zod": "^3.20.2",
40+
"@react-email/render": "^0.0.3"
41+
}
42+
}

integrations/resend/src/index.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import { getTriggerRun } from "@trigger.dev/sdk";
2+
import { z } from "zod";
3+
import { render } from "@react-email/render";
4+
import {
5+
SendEmailOptionsSchema,
6+
SendEmailSuccessResponseSchema,
7+
} from "./schemas";
8+
9+
export type SendEmailOptions = z.infer<typeof SendEmailOptionsSchema>;
10+
11+
export type SendEmailResponse = z.infer<typeof SendEmailSuccessResponseSchema>;
12+
13+
export async function sendEmail(
14+
key: string,
15+
message: SendEmailOptions
16+
): Promise<SendEmailResponse> {
17+
const run = getTriggerRun();
18+
19+
if (!run) {
20+
throw new Error("Cannot call sendEmail outside of a trigger run");
21+
}
22+
23+
//if the supplied email body is react, we need to turn it into html
24+
let html: string | undefined = undefined;
25+
if (message.react) {
26+
html = render(message.react, {
27+
pretty: true,
28+
});
29+
} else if (message.html) {
30+
html = message.html;
31+
}
32+
33+
let params: any;
34+
if (html) {
35+
params = {
36+
...message,
37+
reply_to: message.replyTo,
38+
html,
39+
};
40+
} else {
41+
params = {
42+
...message,
43+
reply_to: message.replyTo,
44+
};
45+
delete params.html;
46+
}
47+
delete params.replyTo;
48+
delete params.react;
49+
50+
const output = await run.performRequest(key, {
51+
service: "resend",
52+
endpoint: "email.send",
53+
params,
54+
response: {
55+
schema: SendEmailSuccessResponseSchema,
56+
},
57+
});
58+
59+
return output;
60+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { ResendRequestIntegration } from "./internal/requests";
2+
3+
export const requests = new ResendRequestIntegration();
4+
5+
export * as schemas from "./schemas";
6+
7+
export const metadata = {
8+
name: "Resend",
9+
slug: "resend",
10+
icon: "/integrations/resend.png",
11+
enabledFor: "all",
12+
authentication: {
13+
type: "api_key",
14+
header_name: "Authorization",
15+
header_type: "access_token",
16+
documentation: `1. Login to [Resend](https://resend.com)
17+
2. Go to the API Keys page
18+
3. Generate a new API key
19+
4. Paste it into the field below`,
20+
},
21+
};

0 commit comments

Comments
 (0)