@beignet/provider-mail-smtp 0.0.33 → 0.0.35
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/CHANGELOG.md +12 -0
- package/README.md +7 -4
- package/dist/index.d.ts +15 -44
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -11
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +24 -16
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @beignet/provider-mail-smtp
|
|
2
2
|
|
|
3
|
+
## 0.0.35
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7d0c795: Expose stable named provider types while keeping private config schemas out of package declarations and preserving validated config and contributed-port inference. Drizzle's Postgres and MySQL config schema constants are now internal; use the exported config interfaces for validated shapes.
|
|
8
|
+
|
|
9
|
+
## 0.0.34
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- 9345cc9: Stabilize the pre-1.0 public surface around factory-only providers, canonical server and testing imports, consistent memory naming, and the removal of deprecated aliases.
|
|
14
|
+
|
|
3
15
|
## 0.0.33
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -10,6 +10,9 @@ The provider installs the app-facing `ctx.ports.mailer` port and exposes
|
|
|
10
10
|
`ctx.ports.smtp.transporter` only as an escape hatch for Nodemailer-specific
|
|
11
11
|
features.
|
|
12
12
|
|
|
13
|
+
`createSmtpMailProvider(...)` returns the stable `SmtpMailProvider` type.
|
|
14
|
+
`MailConfig` describes its validated config; the Zod schema remains internal.
|
|
15
|
+
|
|
13
16
|
## Install
|
|
14
17
|
|
|
15
18
|
```bash
|
|
@@ -19,12 +22,12 @@ bun add @beignet/provider-mail-smtp @beignet/core nodemailer
|
|
|
19
22
|
## Setup
|
|
20
23
|
|
|
21
24
|
```typescript
|
|
22
|
-
import {
|
|
25
|
+
import { createSmtpMailProvider } from "@beignet/provider-mail-smtp";
|
|
23
26
|
import { createServer } from "@beignet/core/server";
|
|
24
27
|
|
|
25
28
|
const server = await createServer({
|
|
26
29
|
ports: basePorts,
|
|
27
|
-
providers: [
|
|
30
|
+
providers: [createSmtpMailProvider()],
|
|
28
31
|
context: ({ ports }) => ({ ports }),
|
|
29
32
|
routes,
|
|
30
33
|
});
|
|
@@ -61,8 +64,8 @@ export const providers = [
|
|
|
61
64
|
];
|
|
62
65
|
```
|
|
63
66
|
|
|
64
|
-
`
|
|
65
|
-
|
|
67
|
+
Calling `createSmtpMailProvider()` with no options uses the env-backed
|
|
68
|
+
configuration.
|
|
66
69
|
|
|
67
70
|
## Use in application code
|
|
68
71
|
|
package/dist/index.d.ts
CHANGED
|
@@ -4,20 +4,18 @@
|
|
|
4
4
|
* SMTP-backed mail provider for Beignet.
|
|
5
5
|
*/
|
|
6
6
|
import { type MailAddress, type MailerPort } from "@beignet/core/mail";
|
|
7
|
-
import { type ProviderInstrumentationTarget } from "@beignet/core/providers";
|
|
7
|
+
import { type AnyProviderConfigSchema, type ProviderInstrumentationTarget, type ServiceProvider } from "@beignet/core/providers";
|
|
8
8
|
import type { Transporter } from "nodemailer";
|
|
9
|
-
import { z } from "zod";
|
|
10
|
-
declare const MailConfigSchema: z.ZodObject<{
|
|
11
|
-
HOST: z.ZodString;
|
|
12
|
-
PORT: z.ZodCoercedNumber<unknown>;
|
|
13
|
-
USER: z.ZodString;
|
|
14
|
-
PASS: z.ZodString;
|
|
15
|
-
FROM: z.ZodString;
|
|
16
|
-
}, z.core.$strip>;
|
|
17
9
|
/**
|
|
18
10
|
* SMTP provider config loaded from `MAIL_*` env vars.
|
|
19
11
|
*/
|
|
20
|
-
export
|
|
12
|
+
export interface MailConfig {
|
|
13
|
+
HOST: string;
|
|
14
|
+
PORT: number;
|
|
15
|
+
USER: string;
|
|
16
|
+
PASS: string;
|
|
17
|
+
FROM: string;
|
|
18
|
+
}
|
|
21
19
|
/**
|
|
22
20
|
* Escape hatch for apps that need the raw Nodemailer transporter.
|
|
23
21
|
*/
|
|
@@ -28,7 +26,7 @@ export interface SmtpMailEscapeHatch {
|
|
|
28
26
|
transporter: Transporter;
|
|
29
27
|
}
|
|
30
28
|
/**
|
|
31
|
-
* Ports contributed by `
|
|
29
|
+
* Ports contributed by `createSmtpMailProvider`.
|
|
32
30
|
*/
|
|
33
31
|
export interface SmtpMailProviderPorts {
|
|
34
32
|
/**
|
|
@@ -40,6 +38,10 @@ export interface SmtpMailProviderPorts {
|
|
|
40
38
|
*/
|
|
41
39
|
smtp: SmtpMailEscapeHatch;
|
|
42
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* SMTP mail lifecycle provider with stable contributed-port typing.
|
|
43
|
+
*/
|
|
44
|
+
export type SmtpMailProvider = ServiceProvider<unknown, AnyProviderConfigSchema<MailConfig>, Pick<SmtpMailProviderPorts, keyof SmtpMailProviderPorts>>;
|
|
43
45
|
/**
|
|
44
46
|
* Options for creating an SMTP-backed mailer directly.
|
|
45
47
|
*/
|
|
@@ -60,7 +62,7 @@ export interface CreateSmtpMailerOptions {
|
|
|
60
62
|
/**
|
|
61
63
|
* Create a Beignet mailer port backed by Nodemailer SMTP.
|
|
62
64
|
*
|
|
63
|
-
* Use this directly for custom wiring, or install `
|
|
65
|
+
* Use this directly for custom wiring, or install `createSmtpMailProvider` to load
|
|
64
66
|
* config from env and contribute ports during server startup.
|
|
65
67
|
*/
|
|
66
68
|
export declare function createSmtpMailer({ transporter, from, instrumentation: instrumentationTarget, }: CreateSmtpMailerOptions): MailerPort;
|
|
@@ -94,36 +96,5 @@ export interface CreateSmtpMailProviderOptions {
|
|
|
94
96
|
*
|
|
95
97
|
* Options override the corresponding `MAIL_*` env values.
|
|
96
98
|
*/
|
|
97
|
-
export declare function createSmtpMailProvider(options?: CreateSmtpMailProviderOptions):
|
|
98
|
-
HOST: z.ZodString;
|
|
99
|
-
PORT: z.ZodCoercedNumber<unknown>;
|
|
100
|
-
USER: z.ZodString;
|
|
101
|
-
PASS: z.ZodString;
|
|
102
|
-
FROM: z.ZodString;
|
|
103
|
-
}, z.core.$strip>, {
|
|
104
|
-
mailer: MailerPort;
|
|
105
|
-
smtp: {
|
|
106
|
-
transporter: Transporter<import("nodemailer/lib/smtp-transport/index.js").SentMessageInfo, import("nodemailer/lib/smtp-transport/index.js").Options>;
|
|
107
|
-
};
|
|
108
|
-
}, unknown, void>;
|
|
109
|
-
/**
|
|
110
|
-
* Default env-backed SMTP mail provider.
|
|
111
|
-
*
|
|
112
|
-
* Reads `MAIL_HOST`, `MAIL_PORT`, `MAIL_USER`, `MAIL_PASS`, and `MAIL_FROM`,
|
|
113
|
-
* verifies the transporter during setup, contributes `ports.mailer`, and
|
|
114
|
-
* exposes `ports.smtp.transporter` as an escape hatch.
|
|
115
|
-
*/
|
|
116
|
-
export declare const smtpMailProvider: import("@beignet/core/providers").ServiceProvider<unknown, z.ZodObject<{
|
|
117
|
-
HOST: z.ZodString;
|
|
118
|
-
PORT: z.ZodCoercedNumber<unknown>;
|
|
119
|
-
USER: z.ZodString;
|
|
120
|
-
PASS: z.ZodString;
|
|
121
|
-
FROM: z.ZodString;
|
|
122
|
-
}, z.core.$strip>, {
|
|
123
|
-
mailer: MailerPort;
|
|
124
|
-
smtp: {
|
|
125
|
-
transporter: Transporter<import("nodemailer/lib/smtp-transport/index.js").SentMessageInfo, import("nodemailer/lib/smtp-transport/index.js").Options>;
|
|
126
|
-
};
|
|
127
|
-
}, unknown, void>;
|
|
128
|
-
export {};
|
|
99
|
+
export declare function createSmtpMailProvider(options?: CreateSmtpMailProviderOptions): SmtpMailProvider;
|
|
129
100
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,KAAK,WAAW,EAEhB,KAAK,UAAU,EAIhB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,KAAK,uBAAuB,EAG5B,KAAK,6BAA6B,EAClC,KAAK,eAAe,EACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAEV,WAAW,EACZ,MAAM,YAAY,CAAC;AAYpB;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,IAAI,EAAE,mBAAmB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAC5C,OAAO,EACP,uBAAuB,CAAC,UAAU,CAAC,EACnC,IAAI,CAAC,qBAAqB,EAAE,MAAM,qBAAqB,CAAC,CACzD,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAC;IACzB;;OAEG;IACH,IAAI,EAAE,WAAW,CAAC;IAClB;;OAEG;IACH,eAAe,CAAC,EAAE,6BAA6B,CAAC;CACjD;AA0DD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAW,EACX,IAAI,EACJ,eAAe,EAAE,qBAAqB,GACvC,EAAE,uBAAuB,GAAG,UAAU,CAqEtC;AAED;;GAEG;AACH,MAAM,WAAW,6BAA6B;IAC5C;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,6BAAkC,GAC1C,gBAAgB,CAyElB"}
|
package/dist/index.js
CHANGED
|
@@ -47,7 +47,7 @@ function createSmtpPayload(message, defaultFrom) {
|
|
|
47
47
|
/**
|
|
48
48
|
* Create a Beignet mailer port backed by Nodemailer SMTP.
|
|
49
49
|
*
|
|
50
|
-
* Use this directly for custom wiring, or install `
|
|
50
|
+
* Use this directly for custom wiring, or install `createSmtpMailProvider` to load
|
|
51
51
|
* config from env and contribute ports during server startup.
|
|
52
52
|
*/
|
|
53
53
|
export function createSmtpMailer({ transporter, from, instrumentation: instrumentationTarget, }) {
|
|
@@ -136,7 +136,7 @@ export function createSmtpMailProvider(options = {}) {
|
|
|
136
136
|
},
|
|
137
137
|
async setup({ config, ports }) {
|
|
138
138
|
if (!config) {
|
|
139
|
-
throw new Error("[
|
|
139
|
+
throw new Error("[createSmtpMailProvider] Missing Mail config. " +
|
|
140
140
|
"Please set MAIL_HOST, MAIL_PORT, MAIL_USER, MAIL_PASS, and MAIL_FROM environment variables.");
|
|
141
141
|
}
|
|
142
142
|
const { HOST: host, PORT: port, USER: user, PASS: pass, FROM: from, } = config;
|
|
@@ -153,7 +153,7 @@ export function createSmtpMailProvider(options = {}) {
|
|
|
153
153
|
await transporter.verify();
|
|
154
154
|
}
|
|
155
155
|
catch (error) {
|
|
156
|
-
throw new Error(`[
|
|
156
|
+
throw new Error(`[createSmtpMailProvider] Failed to connect to mail server at ${host}:${port}: ${error instanceof Error ? error.message : String(error)}`);
|
|
157
157
|
}
|
|
158
158
|
const instrumentation = createProviderInstrumentation(ports, {
|
|
159
159
|
providerName: "mail-smtp",
|
|
@@ -176,12 +176,4 @@ export function createSmtpMailProvider(options = {}) {
|
|
|
176
176
|
},
|
|
177
177
|
});
|
|
178
178
|
}
|
|
179
|
-
/**
|
|
180
|
-
* Default env-backed SMTP mail provider.
|
|
181
|
-
*
|
|
182
|
-
* Reads `MAIL_HOST`, `MAIL_PORT`, `MAIL_USER`, `MAIL_PASS`, and `MAIL_FROM`,
|
|
183
|
-
* verifies the transporter during setup, contributes `ports.mailer`, and
|
|
184
|
-
* exposes `ports.smtp.transporter` as an escape hatch.
|
|
185
|
-
*/
|
|
186
|
-
export const smtpMailProvider = createSmtpMailProvider();
|
|
187
179
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EAErB,iBAAiB,EAEjB,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@beignet/provider-mail-smtp",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.35",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "SMTP mail provider for Beignet - adds mailer port using nodemailer",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -102,7 +102,7 @@
|
|
|
102
102
|
"registration": {
|
|
103
103
|
"required": true,
|
|
104
104
|
"tokens": [
|
|
105
|
-
"
|
|
105
|
+
"createSmtpMailProvider"
|
|
106
106
|
]
|
|
107
107
|
}
|
|
108
108
|
}
|
package/src/index.ts
CHANGED
|
@@ -15,9 +15,11 @@ import {
|
|
|
15
15
|
type SendMailResult,
|
|
16
16
|
} from "@beignet/core/mail";
|
|
17
17
|
import {
|
|
18
|
+
type AnyProviderConfigSchema,
|
|
18
19
|
createProvider,
|
|
19
20
|
createProviderInstrumentation,
|
|
20
21
|
type ProviderInstrumentationTarget,
|
|
22
|
+
type ServiceProvider,
|
|
21
23
|
} from "@beignet/core/providers";
|
|
22
24
|
import type {
|
|
23
25
|
SendMailOptions as NodemailerSendMailOptions,
|
|
@@ -32,12 +34,18 @@ const MailConfigSchema = z.object({
|
|
|
32
34
|
USER: z.string(),
|
|
33
35
|
PASS: z.string(),
|
|
34
36
|
FROM: z.string().min(1),
|
|
35
|
-
})
|
|
37
|
+
}) satisfies z.ZodType<MailConfig>;
|
|
36
38
|
|
|
37
39
|
/**
|
|
38
40
|
* SMTP provider config loaded from `MAIL_*` env vars.
|
|
39
41
|
*/
|
|
40
|
-
export
|
|
42
|
+
export interface MailConfig {
|
|
43
|
+
HOST: string;
|
|
44
|
+
PORT: number;
|
|
45
|
+
USER: string;
|
|
46
|
+
PASS: string;
|
|
47
|
+
FROM: string;
|
|
48
|
+
}
|
|
41
49
|
|
|
42
50
|
/**
|
|
43
51
|
* Escape hatch for apps that need the raw Nodemailer transporter.
|
|
@@ -50,7 +58,7 @@ export interface SmtpMailEscapeHatch {
|
|
|
50
58
|
}
|
|
51
59
|
|
|
52
60
|
/**
|
|
53
|
-
* Ports contributed by `
|
|
61
|
+
* Ports contributed by `createSmtpMailProvider`.
|
|
54
62
|
*/
|
|
55
63
|
export interface SmtpMailProviderPorts {
|
|
56
64
|
/**
|
|
@@ -63,6 +71,15 @@ export interface SmtpMailProviderPorts {
|
|
|
63
71
|
smtp: SmtpMailEscapeHatch;
|
|
64
72
|
}
|
|
65
73
|
|
|
74
|
+
/**
|
|
75
|
+
* SMTP mail lifecycle provider with stable contributed-port typing.
|
|
76
|
+
*/
|
|
77
|
+
export type SmtpMailProvider = ServiceProvider<
|
|
78
|
+
unknown,
|
|
79
|
+
AnyProviderConfigSchema<MailConfig>,
|
|
80
|
+
Pick<SmtpMailProviderPorts, keyof SmtpMailProviderPorts>
|
|
81
|
+
>;
|
|
82
|
+
|
|
66
83
|
/**
|
|
67
84
|
* Options for creating an SMTP-backed mailer directly.
|
|
68
85
|
*/
|
|
@@ -140,7 +157,7 @@ function createSmtpPayload(
|
|
|
140
157
|
/**
|
|
141
158
|
* Create a Beignet mailer port backed by Nodemailer SMTP.
|
|
142
159
|
*
|
|
143
|
-
* Use this directly for custom wiring, or install `
|
|
160
|
+
* Use this directly for custom wiring, or install `createSmtpMailProvider` to load
|
|
144
161
|
* config from env and contribute ports during server startup.
|
|
145
162
|
*/
|
|
146
163
|
export function createSmtpMailer({
|
|
@@ -251,7 +268,7 @@ export interface CreateSmtpMailProviderOptions {
|
|
|
251
268
|
*/
|
|
252
269
|
export function createSmtpMailProvider(
|
|
253
270
|
options: CreateSmtpMailProviderOptions = {},
|
|
254
|
-
) {
|
|
271
|
+
): SmtpMailProvider {
|
|
255
272
|
return createProvider({
|
|
256
273
|
name: "mail-smtp",
|
|
257
274
|
|
|
@@ -271,7 +288,7 @@ export function createSmtpMailProvider(
|
|
|
271
288
|
async setup({ config, ports }) {
|
|
272
289
|
if (!config) {
|
|
273
290
|
throw new Error(
|
|
274
|
-
"[
|
|
291
|
+
"[createSmtpMailProvider] Missing Mail config. " +
|
|
275
292
|
"Please set MAIL_HOST, MAIL_PORT, MAIL_USER, MAIL_PASS, and MAIL_FROM environment variables.",
|
|
276
293
|
);
|
|
277
294
|
}
|
|
@@ -297,7 +314,7 @@ export function createSmtpMailProvider(
|
|
|
297
314
|
await transporter.verify();
|
|
298
315
|
} catch (error) {
|
|
299
316
|
throw new Error(
|
|
300
|
-
`[
|
|
317
|
+
`[createSmtpMailProvider] Failed to connect to mail server at ${host}:${port}: ${
|
|
301
318
|
error instanceof Error ? error.message : String(error)
|
|
302
319
|
}`,
|
|
303
320
|
);
|
|
@@ -325,12 +342,3 @@ export function createSmtpMailProvider(
|
|
|
325
342
|
},
|
|
326
343
|
});
|
|
327
344
|
}
|
|
328
|
-
|
|
329
|
-
/**
|
|
330
|
-
* Default env-backed SMTP mail provider.
|
|
331
|
-
*
|
|
332
|
-
* Reads `MAIL_HOST`, `MAIL_PORT`, `MAIL_USER`, `MAIL_PASS`, and `MAIL_FROM`,
|
|
333
|
-
* verifies the transporter during setup, contributes `ports.mailer`, and
|
|
334
|
-
* exposes `ports.smtp.transporter` as an escape hatch.
|
|
335
|
-
*/
|
|
336
|
-
export const smtpMailProvider = createSmtpMailProvider();
|