@absolutejs/dispatch-resend 0.0.1 → 0.0.2

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
@@ -3,6 +3,8 @@
3
3
  Resend-backed `EmailAdapter` for
4
4
  [@absolutejs/dispatch](https://github.com/absolutejs/dispatch).
5
5
 
6
+ **Docs:** [absolutejs.com/documentation/dispatch-overview#adapters](https://absolutejs.com/documentation/dispatch-overview#adapters)
7
+
6
8
  ## Install
7
9
 
8
10
  ```sh
package/dist/index.js CHANGED
@@ -1,4 +1,19 @@
1
1
  // @bun
2
+ var __defProp = Object.defineProperty;
3
+ var __returnValue = (v) => v;
4
+ function __exportSetter(name, newValue) {
5
+ this[name] = __returnValue.bind(null, newValue);
6
+ }
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, {
10
+ get: all[name],
11
+ enumerable: true,
12
+ configurable: true,
13
+ set: __exportSetter.bind(all, name)
14
+ });
15
+ };
16
+
2
17
  // src/index.ts
3
18
  var defaultTagsFromMetadata = (metadata) => {
4
19
  const tags = [];
@@ -54,5 +69,5 @@ export {
54
69
  createResendAdapter
55
70
  };
56
71
 
57
- //# debugId=00F1909FAADE107B64756E2164756E21
72
+ //# debugId=120ADBF6221F299464756E2164756E21
58
73
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -4,7 +4,7 @@
4
4
  "sourcesContent": [
5
5
  "/**\n * @absolutejs/dispatch-resend — Resend-backed `EmailAdapter` for\n * `@absolutejs/dispatch`.\n *\n * Takes the user's Resend client (so they control the API key, the\n * fetch impl, the timeout config — everything the Resend SDK accepts\n * directly). Maps `EmailMessage` to Resend's request shape and the\n * response's `id` to `DispatchResult.id`.\n *\n * Resend errors propagate as Promise rejections — `@absolutejs/dispatch`\n * captures them on the `dispatch.email.send` span, bumps the failed\n * counter, emits the `dispatch.email.failed` audit event, and re-throws.\n */\nimport type { EmailAdapter, EmailMessage } from '@absolutejs/dispatch';\n\n/**\n * Minimal subset of Resend's `Resend` client we use. Declaring it\n * locally keeps `resend` a true peer dep — its types aren't required\n * at compile time, only its tag-template-style API at runtime.\n */\nexport type ResendClientLike = {\n\temails: {\n\t\tsend: (params: {\n\t\t\tfrom: string;\n\t\t\tto: string | string[];\n\t\t\tsubject: string;\n\t\t\ttext?: string;\n\t\t\thtml?: string;\n\t\t\treply_to?: string | string[];\n\t\t\tcc?: string | string[];\n\t\t\tbcc?: string | string[];\n\t\t\theaders?: Record<string, string>;\n\t\t\ttags?: Array<{ name: string; value: string }>;\n\t\t}) => Promise<{ data?: { id?: string } | null; error?: unknown }>;\n\t};\n};\n\nexport type CreateResendAdapterOptions = {\n\t/** The Resend client (`new Resend(process.env.RESEND_KEY)`). */\n\tclient: ResendClientLike;\n\t/**\n\t * Default `from` address. Resend REQUIRES `from`; if neither the\n\t * message nor this default is set, the adapter throws.\n\t */\n\tdefaultFrom?: string;\n\t/**\n\t * Map `EmailMessage.metadata` to Resend's `tags` array. The default\n\t * passes through string-valued entries (Resend tags must be strings).\n\t * Override to filter / transform / drop based on your conventions.\n\t */\n\ttagsFromMetadata?: (\n\t\tmetadata: Record<string, unknown>\n\t) => Array<{ name: string; value: string }> | undefined;\n};\n\nconst defaultTagsFromMetadata = (\n\tmetadata: Record<string, unknown>\n): Array<{ name: string; value: string }> | undefined => {\n\tconst tags: Array<{ name: string; value: string }> = [];\n\tfor (const [name, value] of Object.entries(metadata)) {\n\t\tif (typeof value === 'string') {\n\t\t\ttags.push({ name, value });\n\t\t}\n\t}\n\treturn tags.length > 0 ? tags : undefined;\n};\n\nconst arrayOrUndefined = (\n\tvalue: string | ReadonlyArray<string> | undefined\n): string | string[] | undefined => {\n\tif (value === undefined) return undefined;\n\tif (typeof value === 'string') return value;\n\treturn [...value];\n};\n\nexport const createResendAdapter = (\n\toptions: CreateResendAdapterOptions\n): EmailAdapter => {\n\tconst { client } = options;\n\tconst tagsFromMetadata =\n\t\toptions.tagsFromMetadata ?? defaultTagsFromMetadata;\n\n\treturn {\n\t\tname: 'resend',\n\t\tsend: async (message: EmailMessage) => {\n\t\t\tconst from = message.from ?? options.defaultFrom;\n\t\t\tif (from === undefined || from.length === 0) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'[dispatch-resend] no `from` address — Resend requires one. ' +\n\t\t\t\t\t\t'Pass `message.from` per send, or `createResendAdapter({ defaultFrom })`.'\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst tags =\n\t\t\t\tmessage.metadata !== undefined\n\t\t\t\t\t? tagsFromMetadata(message.metadata)\n\t\t\t\t\t: undefined;\n\t\t\tconst response = await client.emails.send({\n\t\t\t\tfrom,\n\t\t\t\tto:\n\t\t\t\t\ttypeof message.to === 'string' ? message.to : [...message.to],\n\t\t\t\tsubject: message.subject,\n\t\t\t\t...(message.text !== undefined ? { text: message.text } : {}),\n\t\t\t\t...(message.html !== undefined ? { html: message.html } : {}),\n\t\t\t\t...(message.replyTo !== undefined\n\t\t\t\t\t? { reply_to: message.replyTo }\n\t\t\t\t\t: {}),\n\t\t\t\t...(arrayOrUndefined(message.cc) !== undefined\n\t\t\t\t\t? { cc: arrayOrUndefined(message.cc) }\n\t\t\t\t\t: {}),\n\t\t\t\t...(arrayOrUndefined(message.bcc) !== undefined\n\t\t\t\t\t? { bcc: arrayOrUndefined(message.bcc) }\n\t\t\t\t\t: {}),\n\t\t\t\t...(message.headers !== undefined\n\t\t\t\t\t? { headers: message.headers }\n\t\t\t\t\t: {}),\n\t\t\t\t...(tags !== undefined ? { tags } : {})\n\t\t\t});\n\t\t\tif (response.error !== undefined && response.error !== null) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\ttypeof response.error === 'object' &&\n\t\t\t\t\tresponse.error !== null &&\n\t\t\t\t\t'message' in response.error\n\t\t\t\t\t\t? String(\n\t\t\t\t\t\t\t\t(response.error as { message: unknown }).message\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t: `[dispatch-resend] Resend error: ${JSON.stringify(response.error)}`\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tat: Date.now(),\n\t\t\t\t...(response.data?.id !== undefined\n\t\t\t\t\t? { id: response.data.id }\n\t\t\t\t\t: {}),\n\t\t\t\tprovider: 'resend'\n\t\t\t};\n\t\t}\n\t};\n};\n"
6
6
  ],
7
- "mappings": ";;AAuDA,IAAM,0BAA0B,CAC/B,aACwD;AAAA,EACxD,MAAM,OAA+C,CAAC;AAAA,EACtD,YAAY,MAAM,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACrD,IAAI,OAAO,UAAU,UAAU;AAAA,MAC9B,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,IAC1B;AAAA,EACD;AAAA,EACA,OAAO,KAAK,SAAS,IAAI,OAAO;AAAA;AAGjC,IAAM,mBAAmB,CACxB,UACmC;AAAA,EACnC,IAAI,UAAU;AAAA,IAAW;AAAA,EACzB,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,OAAO,CAAC,GAAG,KAAK;AAAA;AAGV,IAAM,sBAAsB,CAClC,YACkB;AAAA,EAClB,QAAQ,WAAW;AAAA,EACnB,MAAM,mBACL,QAAQ,oBAAoB;AAAA,EAE7B,OAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM,OAAO,YAA0B;AAAA,MACtC,MAAM,OAAO,QAAQ,QAAQ,QAAQ;AAAA,MACrC,IAAI,SAAS,aAAa,KAAK,WAAW,GAAG;AAAA,QAC5C,MAAM,IAAI,MACT,qEACC,0EACF;AAAA,MACD;AAAA,MACA,MAAM,OACL,QAAQ,aAAa,YAClB,iBAAiB,QAAQ,QAAQ,IACjC;AAAA,MACJ,MAAM,WAAW,MAAM,OAAO,OAAO,KAAK;AAAA,QACzC;AAAA,QACA,IACC,OAAO,QAAQ,OAAO,WAAW,QAAQ,KAAK,CAAC,GAAG,QAAQ,EAAE;AAAA,QAC7D,SAAS,QAAQ;AAAA,WACb,QAAQ,SAAS,YAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,WACvD,QAAQ,SAAS,YAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,WACvD,QAAQ,YAAY,YACrB,EAAE,UAAU,QAAQ,QAAQ,IAC5B,CAAC;AAAA,WACA,iBAAiB,QAAQ,EAAE,MAAM,YAClC,EAAE,IAAI,iBAAiB,QAAQ,EAAE,EAAE,IACnC,CAAC;AAAA,WACA,iBAAiB,QAAQ,GAAG,MAAM,YACnC,EAAE,KAAK,iBAAiB,QAAQ,GAAG,EAAE,IACrC,CAAC;AAAA,WACA,QAAQ,YAAY,YACrB,EAAE,SAAS,QAAQ,QAAQ,IAC3B,CAAC;AAAA,WACA,SAAS,YAAY,EAAE,KAAK,IAAI,CAAC;AAAA,MACtC,CAAC;AAAA,MACD,IAAI,SAAS,UAAU,aAAa,SAAS,UAAU,MAAM;AAAA,QAC5D,MAAM,IAAI,MACT,OAAO,SAAS,UAAU,YAC1B,SAAS,UAAU,QACnB,aAAa,SAAS,QACnB,OACC,SAAS,MAA+B,OAC1C,IACC,mCAAmC,KAAK,UAAU,SAAS,KAAK,GACpE;AAAA,MACD;AAAA,MACA,OAAO;AAAA,QACN,IAAI,KAAK,IAAI;AAAA,WACT,SAAS,MAAM,OAAO,YACvB,EAAE,IAAI,SAAS,KAAK,GAAG,IACvB,CAAC;AAAA,QACJ,UAAU;AAAA,MACX;AAAA;AAAA,EAEF;AAAA;",
8
- "debugId": "00F1909FAADE107B64756E2164756E21",
7
+ "mappings": ";;;;;;;;;;;;;;;;;AAuDA,IAAM,0BAA0B,CAC/B,aACwD;AAAA,EACxD,MAAM,OAA+C,CAAC;AAAA,EACtD,YAAY,MAAM,UAAU,OAAO,QAAQ,QAAQ,GAAG;AAAA,IACrD,IAAI,OAAO,UAAU,UAAU;AAAA,MAC9B,KAAK,KAAK,EAAE,MAAM,MAAM,CAAC;AAAA,IAC1B;AAAA,EACD;AAAA,EACA,OAAO,KAAK,SAAS,IAAI,OAAO;AAAA;AAGjC,IAAM,mBAAmB,CACxB,UACmC;AAAA,EACnC,IAAI,UAAU;AAAA,IAAW;AAAA,EACzB,IAAI,OAAO,UAAU;AAAA,IAAU,OAAO;AAAA,EACtC,OAAO,CAAC,GAAG,KAAK;AAAA;AAGV,IAAM,sBAAsB,CAClC,YACkB;AAAA,EAClB,QAAQ,WAAW;AAAA,EACnB,MAAM,mBACL,QAAQ,oBAAoB;AAAA,EAE7B,OAAO;AAAA,IACN,MAAM;AAAA,IACN,MAAM,OAAO,YAA0B;AAAA,MACtC,MAAM,OAAO,QAAQ,QAAQ,QAAQ;AAAA,MACrC,IAAI,SAAS,aAAa,KAAK,WAAW,GAAG;AAAA,QAC5C,MAAM,IAAI,MACT,qEACC,0EACF;AAAA,MACD;AAAA,MACA,MAAM,OACL,QAAQ,aAAa,YAClB,iBAAiB,QAAQ,QAAQ,IACjC;AAAA,MACJ,MAAM,WAAW,MAAM,OAAO,OAAO,KAAK;AAAA,QACzC;AAAA,QACA,IACC,OAAO,QAAQ,OAAO,WAAW,QAAQ,KAAK,CAAC,GAAG,QAAQ,EAAE;AAAA,QAC7D,SAAS,QAAQ;AAAA,WACb,QAAQ,SAAS,YAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,WACvD,QAAQ,SAAS,YAAY,EAAE,MAAM,QAAQ,KAAK,IAAI,CAAC;AAAA,WACvD,QAAQ,YAAY,YACrB,EAAE,UAAU,QAAQ,QAAQ,IAC5B,CAAC;AAAA,WACA,iBAAiB,QAAQ,EAAE,MAAM,YAClC,EAAE,IAAI,iBAAiB,QAAQ,EAAE,EAAE,IACnC,CAAC;AAAA,WACA,iBAAiB,QAAQ,GAAG,MAAM,YACnC,EAAE,KAAK,iBAAiB,QAAQ,GAAG,EAAE,IACrC,CAAC;AAAA,WACA,QAAQ,YAAY,YACrB,EAAE,SAAS,QAAQ,QAAQ,IAC3B,CAAC;AAAA,WACA,SAAS,YAAY,EAAE,KAAK,IAAI,CAAC;AAAA,MACtC,CAAC;AAAA,MACD,IAAI,SAAS,UAAU,aAAa,SAAS,UAAU,MAAM;AAAA,QAC5D,MAAM,IAAI,MACT,OAAO,SAAS,UAAU,YAC1B,SAAS,UAAU,QACnB,aAAa,SAAS,QACnB,OACC,SAAS,MAA+B,OAC1C,IACC,mCAAmC,KAAK,UAAU,SAAS,KAAK,GACpE;AAAA,MACD;AAAA,MACA,OAAO;AAAA,QACN,IAAI,KAAK,IAAI;AAAA,WACT,SAAS,MAAM,OAAO,YACvB,EAAE,IAAI,SAAS,KAAK,GAAG,IACvB,CAAC;AAAA,QACJ,UAAU;AAAA,MACX;AAAA;AAAA,EAEF;AAAA;",
8
+ "debugId": "120ADBF6221F299464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ import type { CreateResendAdapterOptions } from './index';
2
+ export declare const manifest: import("@absolutejs/manifest").PackageManifest<CreateResendAdapterOptions, never>;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE1D,eAAO,MAAM,QAAQ,mFA4DnB,CAAC"}