@farm.js/email 0.1.0-beta.99 → 0.1.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,10 +2,10 @@
2
2
 
3
3
  Email and Resend integration for Farm.js
4
4
 
5
- Farm.js is currently in beta.
5
+ See [Stability and Support](https://farmjs.dev/docs/stability) for what this package guarantees.
6
6
 
7
7
  ```bash
8
- npm install @farm.js/email@beta
8
+ npm install @farm.js/email
9
9
  ```
10
10
 
11
11
  See the [Farm.js repository](https://github.com/farming-labs/farm.js) for documentation, examples, and support.
package/dist/client.d.ts CHANGED
@@ -24,7 +24,6 @@ export interface EmailSendBaseInput {
24
24
  bcc?: string | string[];
25
25
  from?: string;
26
26
  replyTo?: string | string[];
27
- headers?: Record<string, string>;
28
27
  tags?: Tag[];
29
28
  attachments?: Attachment[];
30
29
  topicId?: string | null;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -14,6 +14,16 @@ export interface ResendIntegrationDefaults {
14
14
  from?: string;
15
15
  replyTo?: string | string[];
16
16
  }
17
+ /** Which mounted route an authorization decision is being made for. */
18
+ export interface ResendEmailAuthorizeContext {
19
+ route: "send" | "schedule" | "preview";
20
+ }
21
+ /**
22
+ * Decide whether a caller may use the mounted email routes. Return `true` to
23
+ * allow, `false` for a generic 401, or a `Response` to answer the caller
24
+ * directly (for example a redirect or a domain-specific error body).
25
+ */
26
+ export type ResendEmailAuthorize = (request: Request, context: ResendEmailAuthorizeContext) => boolean | Response | Promise<boolean | Response>;
17
27
  export interface ResendIntegrationInput<TTemplates extends EmailTemplates = EmailTemplates> {
18
28
  apiKey?: string;
19
29
  instance?: ResendIntegrationInstance;
@@ -22,6 +32,19 @@ export interface ResendIntegrationInput<TTemplates extends EmailTemplates = Emai
22
32
  templates: TTemplates;
23
33
  webhooks?: ResendWebhookConfig;
24
34
  log?: FarmIntegrationLogger;
35
+ /**
36
+ * Required to expose the send, schedule, and preview routes. These routes
37
+ * spend the application's own Resend credits and send from its verified
38
+ * domain, so they are never anonymously callable by default.
39
+ */
40
+ authorize?: ResendEmailAuthorize;
41
+ /**
42
+ * Serve the routes with no authorization at all. Only for an application
43
+ * that already gates the base path in middleware or at the edge.
44
+ */
45
+ allowUnauthenticated?: boolean;
46
+ /** Extra trusted origins, using the `serverActions.allowedOrigins` syntax. */
47
+ allowedOrigins?: readonly string[];
25
48
  }
26
49
  interface ResolvedResendConfig {
27
50
  apiKey?: string;
@@ -41,7 +64,7 @@ export declare function resend<const TTemplates extends EmailTemplates>(input: R
41
64
  templateIds: string[];
42
65
  liveMode: boolean;
43
66
  };
44
- config: import("@farm.js/core").FarmIntegrationConfigDefinition<ResolvedResendConfig, import("@farm.js/core").FarmIntegrationSchema | undefined>;
67
+ config: import("@farm.js/core").FarmIntegrationConfigDefinition<ResolvedResendConfig, import("@farm.js/core").FarmSchema | undefined>;
45
68
  api: {
46
69
  send: {
47
70
  post: {
@@ -125,6 +148,6 @@ export declare function resend<const TTemplates extends EmailTemplates>(input: R
125
148
  };
126
149
  };
127
150
  log: FarmIntegrationLogger | undefined;
128
- routes: (import("@farm.js/core").FarmTypedIntegrationRoute<string, never, never, import("@farm.js/integration-utils").FarmWebhookAckResult, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/send`, ResendEmailSendInput<TTemplates>, never, ResendEmailSendResult<TTemplates>, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/schedule`, ResendEmailScheduleInput<TTemplates>, never, ResendEmailScheduleResult<TTemplates>, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/preview`, ResendEmailPreviewInput<TTemplates>, never, ResendEmailPreviewResult<TTemplates>, false, "POST", import("@farm.js/core").FarmIntegrationSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/templates`, never, never, ResendEmailTemplateInfo<TTemplates>[], false, "GET", import("@farm.js/core").FarmIntegrationSchema | undefined>)[];
151
+ routes: (import("@farm.js/core").FarmTypedIntegrationRoute<string, never, never, import("@farm.js/integration-utils").FarmWebhookAckResult, false, "POST", import("@farm.js/core").FarmSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/send`, ResendEmailSendInput<TTemplates>, never, ResendEmailSendResult<TTemplates>, false, "POST", import("@farm.js/core").FarmSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/schedule`, ResendEmailScheduleInput<TTemplates>, never, ResendEmailScheduleResult<TTemplates>, false, "POST", import("@farm.js/core").FarmSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/preview`, ResendEmailPreviewInput<TTemplates>, never, ResendEmailPreviewResult<TTemplates>, false, "POST", import("@farm.js/core").FarmSchema | undefined> | import("@farm.js/core").FarmTypedIntegrationRoute<`${string}/templates`, never, never, ResendEmailTemplateInfo<TTemplates>[], false, "GET", import("@farm.js/core").FarmSchema | undefined>)[];
129
152
  }>;
130
153
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAuC,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAEhG,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,qCAAqC,CAAC;AAC/F,OAAO,EAGL,KAAK,cAAc,EAInB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAG7B,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,MAAM,IAAI,SAAS,EAAE,KAAK,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAEvE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,WAAW,kBAAmB,SAAQ,gBAAgB,CAC1D,QAAQ,EACR,mBAAmB,CAAC,MAAM,CAAC,EAC3B,mBAAmB,CAAC,MAAM,CAAC,EAC3B,mBAAmB,CACpB;CAAG;AAEJ,MAAM,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,kBAAkB,CAAC,CAAC;AACxE,MAAM,MAAM,yBAAyB,GAAG,SAAS,CAAC;AAElD,MAAM,WAAW,yBAAyB;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,sBAAsB,CAAC,UAAU,SAAS,cAAc,GAAG,cAAc;IACxF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,yBAAyB,CAAC;IACrC,SAAS,EAAE,UAAU,CAAC;IACtB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,GAAG,CAAC,EAAE,qBAAqB,CAAC;CAC7B;AAED,UAAU,oBAAoB;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAoED,wBAAgB,MAAM,CAAC,KAAK,CAAC,UAAU,SAAS,cAAc,EAC5D,KAAK,EAAE,sBAAsB,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8b1C"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { render, toPlainText } from "@react-email/render";
2
- import { defineIntegration, integrationRoute } from "@farm.js/core";
2
+ import { defineIntegration, describeIntegrationOriginRejection, integrationRoute, validateIntegrationRequestOrigin, } from "@farm.js/core";
3
3
  import { integrationConfig, normalizeWebhookConfig } from "@farm.js/integration-utils";
4
4
  import { createResendClientApi, } from "./client.js";
5
5
  import { createElement } from "react";
@@ -10,6 +10,53 @@ export { emailSchedule } from "./schedule.js";
10
10
  function createResendApi(input = {}) {
11
11
  return createResendClientApi(input);
12
12
  }
13
+ const MISSING_EMAIL_AUTHORIZE_ERROR = "The email routes are not authorized. These routes spend your Resend credits and send " +
14
+ "from your verified domain, so they refuse anonymous callers. Pass `authorize` to the " +
15
+ "email integration, or set `allowUnauthenticated: true` if the base path is already " +
16
+ "gated by your own middleware.";
17
+ /**
18
+ * Gate a mounted email route.
19
+ *
20
+ * Two layers, because either alone is insufficient. The origin check stops a
21
+ * cross-site page from spending the application's credits through a visitor's
22
+ * session, but it cannot stop a visitor on the application's own origin from
23
+ * calling the route directly. `authorize` is therefore the real gate, and the
24
+ * route fails closed without it. Origin metadata is not required, so a
25
+ * server-to-server caller that authenticates through `authorize` still works.
26
+ */
27
+ async function guardEmailRoute(request, route, input) {
28
+ const origin = validateIntegrationRequestOrigin(request, {
29
+ allowedOrigins: input.allowedOrigins,
30
+ requireOriginMetadata: false,
31
+ });
32
+ if (!origin.ok) {
33
+ return Response.json({ error: describeIntegrationOriginRejection(origin.reason) }, { status: 403 });
34
+ }
35
+ if (input.authorize) {
36
+ const decision = await input.authorize(request, { route });
37
+ if (decision instanceof Response)
38
+ return decision;
39
+ if (decision !== true) {
40
+ return Response.json({ error: "Unauthorized email request." }, { status: 401 });
41
+ }
42
+ return null;
43
+ }
44
+ if (input.allowUnauthenticated === true)
45
+ return null;
46
+ return Response.json({ error: MISSING_EMAIL_AUTHORIZE_ERROR }, { status: 401 });
47
+ }
48
+ async function readEmailRouteJson(request) {
49
+ try {
50
+ const body = await request.json();
51
+ if (body && typeof body === "object" && !Array.isArray(body)) {
52
+ return body;
53
+ }
54
+ }
55
+ catch {
56
+ // Report malformed input below without leaking the parser error.
57
+ }
58
+ return Response.json({ error: "Email request body must be a valid JSON object." }, { status: 400 });
59
+ }
13
60
  function normalizeBasePath(path) {
14
61
  if (!path) {
15
62
  return "/api/email";
@@ -174,7 +221,13 @@ export function resend(input) {
174
221
  integrationRoute.post(sendPath, {
175
222
  responseFormat: "json",
176
223
  async handler(request, context) {
177
- const body = (await request.json());
224
+ const denied = await guardEmailRoute(request, "send", input);
225
+ if (denied)
226
+ return denied;
227
+ const parsedBody = await readEmailRouteJson(request);
228
+ if (parsedBody instanceof Response)
229
+ return parsedBody;
230
+ const body = parsedBody;
178
231
  const resolved = await resolveTemplate(body.templateId);
179
232
  if (!resolved) {
180
233
  return Response.json({
@@ -217,7 +270,6 @@ export function resend(input) {
217
270
  replyTo: replyTo ?? undefined,
218
271
  subject,
219
272
  react: reactNode,
220
- headers: body.headers,
221
273
  tags: body.tags,
222
274
  attachments: body.attachments,
223
275
  topicId: body.topicId,
@@ -244,7 +296,13 @@ export function resend(input) {
244
296
  integrationRoute.post(schedulePath, {
245
297
  responseFormat: "json",
246
298
  async handler(request, context) {
247
- const body = (await request.json());
299
+ const denied = await guardEmailRoute(request, "schedule", input);
300
+ if (denied)
301
+ return denied;
302
+ const parsedBody = await readEmailRouteJson(request);
303
+ if (parsedBody instanceof Response)
304
+ return parsedBody;
305
+ const body = parsedBody;
248
306
  let when;
249
307
  try {
250
308
  when = resolveEmailScheduleWhen(body.when);
@@ -299,7 +357,6 @@ export function resend(input) {
299
357
  replyTo: replyTo ?? undefined,
300
358
  subject,
301
359
  react: reactNode,
302
- headers: body.headers,
303
360
  tags: body.tags,
304
361
  attachments: body.attachments,
305
362
  topicId: body.topicId,
@@ -327,7 +384,13 @@ export function resend(input) {
327
384
  integrationRoute.post(previewPath, {
328
385
  responseFormat: "json",
329
386
  async handler(request, context) {
330
- const body = (await request.json());
387
+ const denied = await guardEmailRoute(request, "preview", input);
388
+ if (denied)
389
+ return denied;
390
+ const parsedBody = await readEmailRouteJson(request);
391
+ if (parsedBody instanceof Response)
392
+ return parsedBody;
393
+ const body = parsedBody;
331
394
  const resolved = await resolveTemplate(body.templateId);
332
395
  if (!resolved) {
333
396
  return Response.json({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@farm.js/email",
3
- "version": "0.1.0-beta.99",
3
+ "version": "0.1.1-beta.1",
4
4
  "description": "Email and Resend integration for Farm.js",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -35,8 +35,8 @@
35
35
  "dependencies": {
36
36
  "@react-email/render": "2.0.6",
37
37
  "resend": "6.10.0",
38
- "@farm.js/integration-utils": "0.1.0-beta.99",
39
- "@farm.js/core": "0.1.0-beta.99"
38
+ "@farm.js/core": "0.1.1-beta.1",
39
+ "@farm.js/integration-utils": "0.1.1-beta.1"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/react": "19.2.13"
@@ -48,6 +48,6 @@
48
48
  "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc",
49
49
  "dev": "tsc --watch",
50
50
  "type-check": "tsc --noEmit",
51
- "test": "echo 'No tests in this package'"
51
+ "test": "pnpm run build && node --test test/*.test.mjs"
52
52
  }
53
53
  }