@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 +2 -0
- package/dist/index.js +16 -1
- package/dist/index.js.map +2 -2
- package/dist/manifest.d.ts +3 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +8545 -0
- package/dist/manifest.js.map +123 -0
- package/dist/manifest.json +73 -0
- package/package.json +21 -4
package/README.md
CHANGED
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=
|
|
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": "
|
|
8
|
-
"debugId": "
|
|
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 @@
|
|
|
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"}
|