webapp-factory 0.1.0 → 0.1.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.
@@ -0,0 +1,12 @@
1
+ import type { Transport } from '../core/ports.js';
2
+ export interface ResendTransportOptions {
3
+ apiKey: string;
4
+ /** Adapternaam in het SendResult; standaard `resend`. */
5
+ name?: string;
6
+ /** Override voor tests of een runtime zonder globale `fetch`; standaard `globalThis.fetch`. */
7
+ fetch?: typeof globalThis.fetch;
8
+ /** Override voor de endpoint (bijv. een proxy of self-hosted gateway). */
9
+ endpoint?: string;
10
+ }
11
+ export declare function resendTransport(options: ResendTransportOptions): Transport;
12
+ //# sourceMappingURL=resend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resend.d.ts","sourceRoot":"","sources":["../../../src/mailer/adapters/resend.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAmB,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAInE,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,yDAAyD;IACzD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+FAA+F;IAC/F,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CA2B1E"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * US-0901 — Resend HTTP-API-transport. Praat rechtstreeks met de Resend-`/emails`-endpoint via de
3
+ * platform-`fetch` (geen SDK-dependency), en mapt `OutgoingMessage` naar het Resend-payload. De
4
+ * API-key gaat alleen in de Authorization-header en wordt via `functionTransport` nooit in fouten
5
+ * opgenomen. `fetch` is injecteerbaar voor tests of niet-standaard runtimes.
6
+ */
7
+ import { functionTransport } from './transports.js';
8
+ const RESEND_ENDPOINT = 'https://api.resend.com/emails';
9
+ /** Mapt de kit-brede `OutgoingMessage` naar het Resend-`/emails`-payload (snake_case `reply_to`). */
10
+ function toResendPayload(message) {
11
+ return {
12
+ from: message.from,
13
+ to: message.to,
14
+ subject: message.subject,
15
+ text: message.text,
16
+ html: message.html,
17
+ cc: message.cc,
18
+ bcc: message.bcc,
19
+ reply_to: message.replyTo,
20
+ headers: message.headers,
21
+ };
22
+ }
23
+ export function resendTransport(options) {
24
+ const fetchImpl = options.fetch ?? globalThis.fetch;
25
+ if (typeof fetchImpl !== 'function') {
26
+ throw new TypeError('resendTransport vereist een `fetch`-implementatie: geef `fetch` mee of draai op een runtime met globale fetch.');
27
+ }
28
+ const endpoint = options.endpoint ?? RESEND_ENDPOINT;
29
+ const send = async (message) => {
30
+ const res = await fetchImpl(endpoint, {
31
+ method: 'POST',
32
+ headers: {
33
+ Authorization: `Bearer ${options.apiKey}`,
34
+ 'Content-Type': 'application/json',
35
+ },
36
+ body: JSON.stringify(toResendPayload(message)),
37
+ });
38
+ if (!res.ok) {
39
+ const detail = await res.text().catch(() => '');
40
+ throw new Error(`Resend gaf HTTP ${res.status}${detail ? `: ${detail}` : ''}`);
41
+ }
42
+ const data = (await res.json().catch(() => ({})));
43
+ return { messageId: data.id };
44
+ };
45
+ return functionTransport(options.name ?? 'resend', send);
46
+ }
47
+ //# sourceMappingURL=resend.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resend.js","sourceRoot":"","sources":["../../../src/mailer/adapters/resend.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,iBAAiB,EAAqB,MAAM,iBAAiB,CAAC;AAGvE,MAAM,eAAe,GAAG,+BAA+B,CAAC;AAYxD,qGAAqG;AACrG,SAAS,eAAe,CAAC,OAAwB;IAC/C,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,QAAQ,EAAE,OAAO,CAAC,OAAO;QACzB,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACpD,IAAI,OAAO,SAAS,KAAK,UAAU,EAAE,CAAC;QACpC,MAAM,IAAI,SAAS,CACjB,gHAAgH,CACjH,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC;IAErD,MAAM,IAAI,GAAiB,KAAK,EAAE,OAAO,EAAE,EAAE;QAC3C,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,QAAQ,EAAE;YACpC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,OAAO,CAAC,MAAM,EAAE;gBACzC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;SAC/C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAoB,CAAC;QACrE,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC;IAChC,CAAC,CAAC;IAEF,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3D,CAAC"}
@@ -9,6 +9,7 @@ export { createMailer, type Mailer, type MailerOptions, type RenderOptions, type
9
9
  export { interpolate, renderTemplate } from './core/render.js';
10
10
  export { failoverTransport } from './core/failover.js';
11
11
  export { smtpTransport, sesTransport, functionTransport, selectTransport, type ProviderSend, } from './adapters/transports.js';
12
+ export { resendTransport, type ResendTransportOptions } from './adapters/resend.js';
12
13
  export { devInboxTransport, type DevInboxTransport, type CapturedMessage } from './adapters/dev-inbox.js';
13
14
  export { inMemoryTemplateStore } from './adapters/in-memory-templates.js';
14
15
  export { i18nRenderer } from './adapters/i18n-renderer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,YAAY,EACZ,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,YAAY,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,QAAQ,EACR,aAAa,EACb,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EACL,YAAY,EACZ,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,GACzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,KAAK,YAAY,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAGpF,OAAO,EAAE,iBAAiB,EAAE,KAAK,iBAAiB,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG1G,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAG3D,YAAY,EACV,SAAS,EACT,eAAe,EACf,UAAU,EACV,QAAQ,EACR,aAAa,EACb,eAAe,EACf,QAAQ,EACR,UAAU,GACX,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
@@ -11,6 +11,7 @@ export { interpolate, renderTemplate } from './core/render.js';
11
11
  // Transport + failover (US-0901)
12
12
  export { failoverTransport } from './core/failover.js';
13
13
  export { smtpTransport, sesTransport, functionTransport, selectTransport, } from './adapters/transports.js';
14
+ export { resendTransport } from './adapters/resend.js';
14
15
  // Dev-inbox (US-0901/0904)
15
16
  export { devInboxTransport } from './adapters/dev-inbox.js';
16
17
  // Adapters
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qCAAqC;AACrC,OAAO,EACL,YAAY,GAKb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE/D,iCAAiC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAElC,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAgD,MAAM,yBAAyB,CAAC;AAE1G,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAc3D,SAAS;AACT,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mailer/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qCAAqC;AACrC,OAAO,EACL,YAAY,GAKb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAE/D,iCAAiC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,eAAe,EAA+B,MAAM,sBAAsB,CAAC;AAEpF,2BAA2B;AAC3B,OAAO,EAAE,iBAAiB,EAAgD,MAAM,yBAAyB,CAAC;AAE1G,WAAW;AACX,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAc3D,SAAS;AACT,OAAO,EACL,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,GAChB,MAAM,kBAAkB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "webapp-factory",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "webapp-factory — verzamelpackage. De backend-foundation-collectie (domein-loze, herbruikbare backend-kits: config, http, persistence, ...) is bereikbaar onder de subpath `webapp-factory/backend-foundation`.",
5
5
  "type": "module",
6
6
  "license": "MIT",