@molecule/api-emails-ses 1.0.0 → 1.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 ADDED
@@ -0,0 +1,313 @@
1
+ <!--
2
+ AUTO-GENERATED — DO NOT EDIT THIS FILE.
3
+ Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
4
+ Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
5
+ To change this document, edit the module-level JSDoc in src/index.ts.
6
+ Generated: 2026-08-16T14:04:37.385Z
7
+ -->
8
+
9
+ # @molecule/api-emails-ses
10
+
11
+ > **Auto-generated, AI-first package reference** for the [molecule.dev](https://molecule.dev) ecosystem.
12
+ > It is written to be read by coding agents as much as by people, and is generated from this
13
+ > package's source — edit `src/index.ts` JSDoc, not this file.
14
+
15
+ AWS SES email provider for molecule.dev.
16
+
17
+ ## Quick Start
18
+
19
+ ```typescript
20
+ import { setTransport } from '@molecule/api-emails'
21
+ import { provider } from '@molecule/api-emails-ses'
22
+
23
+ setTransport(provider)
24
+ ```
25
+
26
+ ## Type
27
+
28
+ `provider`
29
+
30
+ ## Installation
31
+
32
+ ```bash
33
+ npm install @molecule/api-emails-ses @aws-sdk/client-sesv2 @aws-sdk/credential-provider-node @molecule/api-bond @molecule/api-emails @molecule/api-proxy-agent @molecule/api-secrets nodemailer
34
+ npm install -D @types/nodemailer
35
+ ```
36
+
37
+ ## API
38
+
39
+ ### Interfaces
40
+
41
+ #### `EmailMessage`
42
+
43
+ Email message options.
44
+
45
+ ```typescript
46
+ interface EmailMessage {
47
+ /**
48
+ * Sender address.
49
+ */
50
+ from: string | EmailAddress
51
+ /**
52
+ * Recipient(s).
53
+ */
54
+ to: string | EmailAddress | (string | EmailAddress)[]
55
+ /**
56
+ * CC recipient(s).
57
+ */
58
+ cc?: string | EmailAddress | (string | EmailAddress)[]
59
+ /**
60
+ * BCC recipient(s).
61
+ */
62
+ bcc?: string | EmailAddress | (string | EmailAddress)[]
63
+ /**
64
+ * Reply-to address.
65
+ */
66
+ replyTo?: string | EmailAddress
67
+ /**
68
+ * Email subject.
69
+ */
70
+ subject: string
71
+ /**
72
+ * Plain text body.
73
+ */
74
+ text?: string
75
+ /**
76
+ * HTML body.
77
+ */
78
+ html?: string
79
+ /**
80
+ * File attachments.
81
+ */
82
+ attachments?: EmailAttachment[]
83
+ /**
84
+ * i18n key for the subject (for client-side translation).
85
+ */
86
+ subjectKey?: string
87
+ /**
88
+ * i18n key for the plain text body (for client-side translation).
89
+ */
90
+ textKey?: string
91
+ /**
92
+ * i18n key for the HTML body (for client-side translation).
93
+ */
94
+ htmlKey?: string
95
+ }
96
+ ```
97
+
98
+ #### `EmailSendResult`
99
+
100
+ Result of sending an email.
101
+
102
+ ```typescript
103
+ interface EmailSendResult {
104
+ /**
105
+ * Whether the email was accepted for delivery.
106
+ */
107
+ accepted: string[]
108
+ /**
109
+ * Addresses that were rejected.
110
+ */
111
+ rejected: string[]
112
+ /**
113
+ * Message ID from the provider.
114
+ */
115
+ messageId?: string
116
+ /**
117
+ * Raw response from the provider.
118
+ */
119
+ response?: string
120
+ }
121
+ ```
122
+
123
+ #### `EmailTransport`
124
+
125
+ Email transport interface.
126
+
127
+ All email providers must implement this interface.
128
+
129
+ ```typescript
130
+ interface EmailTransport {
131
+ /**
132
+ * Sends an email message.
133
+ * @returns The send result.
134
+ */
135
+ sendMail(message: EmailMessage): Promise<EmailSendResult>
136
+ }
137
+ ```
138
+
139
+ ### Functions
140
+
141
+ #### `getSesClient()`
142
+
143
+ Returns the AWS SESv2 client, constructing it from the environment on the
144
+ FIRST call and memoizing thereafter.
145
+
146
+ Construction is deferred to first use — NOT module load — so a region resolved
147
+ into `process.env` AFTER this module is imported (late secrets resolution via
148
+ a secrets bond) is honored: `AWS_SES_REGION` (default `us-east-1`) and the
149
+ optional `AWS_SES_ENDPOINT` are read at send time, not frozen at import.
150
+ Reading them at import instead pinned an empty/default region and every send
151
+ failed in the WRONG region ("Email address is not verified"). Credentials
152
+ still resolve lazily via the AWS default chain (`AWS_ACCESS_KEY_ID`/
153
+ `AWS_SECRET_ACCESS_KEY`, shared config, or an instance role) at send time, so
154
+ a missing credential surfaces then as a descriptive AWS SDK error.
155
+
156
+ nodemailer 7 requires the SESv2 client + `SendEmailCommand` pair — the old
157
+ `{ ses, aws }` (@aws-sdk/client-ses) shape made `createTransport` THROW
158
+ ("legacy SES configuration"), breaking every real consumer of this bond.
159
+
160
+ ```typescript
161
+ function getSesClient(): SESv2Client
162
+ ```
163
+
164
+ **Returns:** The configured SESv2 client.
165
+
166
+ #### `sendMail(message)`
167
+
168
+ Sends an email through AWS SES via nodemailer. The SES client and transport
169
+ are configured lazily from the environment on the first call, so late-resolved
170
+ region/credentials are honored.
171
+
172
+ ```typescript
173
+ function sendMail(message: EmailMessage): Promise<EmailSendResult>
174
+ ```
175
+
176
+ - `message` — The email message (to, from, subject, text/html, attachments).
177
+
178
+ **Returns:** Send result with accepted/rejected addresses and message ID.
179
+
180
+ ### Constants
181
+
182
+ #### `email` _(deprecated)_
183
+
184
+ Raw nodemailer transport alias.
185
+
186
+ ```typescript
187
+ const email: { sendMail: (msg: nodemailer.SendMailOptions) => Promise<any> }
188
+ ```
189
+
190
+ #### `emailsSesSecretDefinitions`
191
+
192
+ Secret definitions required by the AWS SES email bond.
193
+
194
+ ```typescript
195
+ const emailsSesSecretDefinitions: SecretDefinition[]
196
+ ```
197
+
198
+ #### `provider`
199
+
200
+ The SES email provider implementing the `EmailTransport` interface.
201
+
202
+ ```typescript
203
+ const provider: EmailTransport
204
+ ```
205
+
206
+ #### `transport` _(deprecated)_
207
+
208
+ Raw nodemailer transport for direct access. Lazily configured on first send.
209
+
210
+ ```typescript
211
+ const transport: { sendMail: (msg: nodemailer.SendMailOptions) => Promise<any> }
212
+ ```
213
+
214
+ ## Core Interface
215
+
216
+ Implements `@molecule/api-emails` interface.
217
+
218
+ ## Bond Wiring
219
+
220
+ Setup function to register this provider with the core interface:
221
+
222
+ ```typescript
223
+ import { setTransport } from '@molecule/api-emails'
224
+ import { provider } from '@molecule/api-emails-ses'
225
+
226
+ export function setupEmailsSes(): void {
227
+ setTransport(provider)
228
+ }
229
+ ```
230
+
231
+ ## Injection Notes
232
+
233
+ ### Requirements
234
+
235
+ Peer dependencies:
236
+
237
+ - `@molecule/api-bond` ^1.0.1
238
+ - `@molecule/api-emails` ^1.0.1
239
+ - `@molecule/api-secrets` ^1.0.1
240
+
241
+ ### Environment Variables
242
+
243
+ - `AWS_ACCESS_KEY_ID` _(required)_ — AWS access key ID
244
+ - Setup: Create an IAM user with the needed policy (SES/S3/SQS) and create an access key under Security credentials.
245
+ - Get it here: [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)
246
+ - Example: `AKIA...`
247
+ - `AWS_SECRET_ACCESS_KEY` _(required)_ — AWS secret access key
248
+ - Setup: Shown once when creating the IAM access key — store it immediately.
249
+ - Get it here: [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)
250
+ - `AWS_SES_REGION` _(required)_ — AWS SES region
251
+ - Setup: The AWS region where SES is set up (and out of sandbox for production sending).
252
+ - Example: `us-east-1`
253
+
254
+ ### Runtime Dependencies
255
+
256
+ - `@aws-sdk/client-sesv2`
257
+ - `@aws-sdk/credential-provider-node`
258
+ - `@molecule/api-bond`
259
+ - `@molecule/api-emails`
260
+ - `@molecule/api-proxy-agent`
261
+ - `@molecule/api-secrets`
262
+ - `nodemailer`
263
+
264
+ - **Configuration is lazy and env-driven**: the SES client is constructed on
265
+ the FIRST send — NOT at import — so `AWS_SES_REGION` (default `us-east-1`)
266
+ and the optional `AWS_SES_ENDPOINT` are read at send time. A region resolved
267
+ into env AFTER this module is imported (late secrets resolution via a
268
+ secrets bond) is honored; reading it at import instead froze the
269
+ default/empty region and sends failed in the WRONG region ("Email address
270
+ is not verified"). Credentials resolve lazily via the AWS default chain
271
+ (`AWS_ACCESS_KEY_ID`/`AWS_SECRET_ACCESS_KEY`, shared config, or an instance
272
+ role), so they may arrive after import too.
273
+ - **No fail-fast**: because credentials can legitimately come from an instance
274
+ role or shared config (not env), missing credentials are not pre-checked —
275
+ they surface at first send as a descriptive AWS SDK error ("Could not load
276
+ credentials…"), not a tagged config error naming the env var.
277
+ - New SES accounts are sandboxed: both the sender identity AND every
278
+ recipient must be verified until production access is granted.
279
+ - On success `accepted` is mapped from `envelope.to` — nodemailer's SES
280
+ transport never sets `accepted`/`rejected` (the `@types/nodemailer` typings
281
+ claiming otherwise are drift); a resolved send means SES accepted the
282
+ message for every envelope recipient.
283
+ - **Runs behind an outbound proxy when `HTTPS_PROXY` is set.** The AWS SDK v3
284
+ builds its own agent and reads no proxy variable, so on a host whose only
285
+ egress path is a proxy every send used to fail with a bare connection
286
+ error. The client now gets a CONNECT-capable agent through its own
287
+ `requestHandler` hook (`@molecule/api-proxy-agent`, resolved against
288
+ `AWS_SES_ENDPOINT` when set and the regional endpoint otherwise, so
289
+ `NO_PROXY` is honoured). With no proxy configured nothing is passed and the
290
+ SDK keeps its default handler. Allowlist `*.amazonaws.com` on the proxy.
291
+
292
+ ## E2E Tests
293
+
294
+ Integration checklist — drive the real UI (live preview, no mocks). The
295
+ sandbox CAPTURES outbound email instead of sending — read each message with
296
+ the `read_activity` tool (filter type 'email'); the verification/reset link
297
+ is in its payload. Never mock the send or modify production code to expose
298
+ it. Adapt each item to this app's actual screens/flows, and check every box
299
+ off one by one. A box you can't check is an integration bug to fix — not a
300
+ skip:
301
+
302
+ - [ ] Each email-triggering flow (signup verification, password-reset request,
303
+ invites/notifications the app defines) confirms the send in the UI ("check
304
+ your inbox") and a message actually reaches the transport.
305
+ - [ ] The password-reset round-trip completes: request a reset → open the
306
+ captured message → follow its single-use link → set a new password → log
307
+ in with it (and the old password no longer works).
308
+ - [ ] The message body contains a LINK, never the raw token/secret, and renders
309
+ with the app's real name/content (no `undefined` placeholders).
310
+ - [ ] Requesting a reset for an unknown email shows the same neutral UI response
311
+ as a known one (no account-existence oracle).
312
+ - [ ] Account emails go only to the account's own address — no UI or endpoint
313
+ lets an unauthenticated caller send to an arbitrary address.
package/dist/index.d.ts CHANGED
@@ -24,6 +24,14 @@
24
24
  * transport never sets `accepted`/`rejected` (the `@types/nodemailer` typings
25
25
  * claiming otherwise are drift); a resolved send means SES accepted the
26
26
  * message for every envelope recipient.
27
+ * - **Runs behind an outbound proxy when `HTTPS_PROXY` is set.** The AWS SDK v3
28
+ * builds its own agent and reads no proxy variable, so on a host whose only
29
+ * egress path is a proxy every send used to fail with a bare connection
30
+ * error. The client now gets a CONNECT-capable agent through its own
31
+ * `requestHandler` hook (`@molecule/api-proxy-agent`, resolved against
32
+ * `AWS_SES_ENDPOINT` when set and the regional endpoint otherwise, so
33
+ * `NO_PROXY` is honoured). With no proxy configured nothing is passed and the
34
+ * SDK keeps its default handler. Allowlist `*.amazonaws.com` on the proxy.
27
35
  *
28
36
  * @example
29
37
  * ```typescript
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -24,6 +24,14 @@
24
24
  * transport never sets `accepted`/`rejected` (the `@types/nodemailer` typings
25
25
  * claiming otherwise are drift); a resolved send means SES accepted the
26
26
  * message for every envelope recipient.
27
+ * - **Runs behind an outbound proxy when `HTTPS_PROXY` is set.** The AWS SDK v3
28
+ * builds its own agent and reads no proxy variable, so on a host whose only
29
+ * egress path is a proxy every send used to fail with a bare connection
30
+ * error. The client now gets a CONNECT-capable agent through its own
31
+ * `requestHandler` hook (`@molecule/api-proxy-agent`, resolved against
32
+ * `AWS_SES_ENDPOINT` when set and the regional endpoint otherwise, so
33
+ * `NO_PROXY` is honoured). With no proxy configured nothing is passed and the
34
+ * SDK keeps its default handler. Allowlist `*.amazonaws.com` on the proxy.
27
35
  *
28
36
  * @example
29
37
  * ```typescript
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,cAAc,CAAA;AACrB,OAAO,EAAoB,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAErE,OAAO,UAAU,MAAM,YAAY,CAAA;AAGnC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAWzF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,QAAO,WAS/B,CAAA;AAkBD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,eAAe,CAsB7E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,cAEtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS;oBACJ,UAAU,CAAC,eAAe;CAC3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK;oBAPA,UAAU,CAAC,eAAe;CAOd,CAAA"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,cAAc,CAAA;AACrB,OAAO,EAAoB,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAErE,OAAO,UAAU,MAAM,YAAY,CAAA;AAGnC,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAYzF;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,YAAY,QAAO,WAqB/B,CAAA;AAkBD;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,GAAU,SAAS,YAAY,KAAG,OAAO,CAAC,eAAe,CAsB7E,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,QAAQ,EAAE,cAEtB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,SAAS;oBACJ,UAAU,CAAC,eAAe;CAC3C,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,KAAK;oBAPA,UAAU,CAAC,eAAe;CAOd,CAAA"}
package/dist/provider.js CHANGED
@@ -14,6 +14,7 @@ import { SendEmailCommand, SESv2Client } from '@aws-sdk/client-sesv2';
14
14
  import { defaultProvider } from '@aws-sdk/credential-provider-node';
15
15
  import nodemailer from 'nodemailer';
16
16
  import { getLogger } from '@molecule/api-bond';
17
+ import { getProxyAgents } from '@molecule/api-proxy-agent';
17
18
  const logger = getLogger();
18
19
  /**
19
20
  * The lazily-constructed AWS SESv2 client and nodemailer transport. Both are
@@ -43,10 +44,22 @@ let _nodemailerTransport;
43
44
  */
44
45
  export const getSesClient = () => {
45
46
  if (!_ses) {
47
+ const region = process.env.AWS_SES_REGION || 'us-east-1';
48
+ const endpoint = process.env.AWS_SES_ENDPOINT;
49
+ // The AWS SDK v3 builds its own `https.Agent` and reads no proxy variable
50
+ // (`NODE_USE_ENV_PROXY` does not reach it either — it never goes through
51
+ // Node's proxy-aware paths), so on a host whose only egress path is a proxy
52
+ // every send failed with a bare connection error. `requestHandler` takes
53
+ // NodeHttpHandler OPTIONS, so the agent goes in with no `@smithy/*`
54
+ // dependency. Resolved against the endpoint actually in use so a custom
55
+ // endpoint's own NO_PROXY entry is honoured; undefined when nothing is
56
+ // proxied, leaving the SDK's default handler in place.
57
+ const proxy = getProxyAgents(endpoint || `https://email.${region}.amazonaws.com`);
46
58
  _ses = new SESv2Client({
47
- region: process.env.AWS_SES_REGION || 'us-east-1',
59
+ region,
48
60
  credentialDefaultProvider: defaultProvider,
49
- ...(process.env.AWS_SES_ENDPOINT ? { endpoint: process.env.AWS_SES_ENDPOINT } : {}),
61
+ ...(endpoint ? { endpoint } : {}),
62
+ ...(proxy ? { requestHandler: proxy } : {}),
50
63
  });
51
64
  }
52
65
  return _ses;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,sEAAsE;AACtE,2EAA2E;AAC3E,oCAAoC;AACpC,OAAO,cAAc,CAAA;AACrB,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAA;AACnE,OAAO,UAAU,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAG9C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAA;AAE1B;;;GAGG;AACH,IAAI,IAA6B,CAAA;AACjC,IAAI,oBAAwD,CAAA;AAE5D;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAAgB,EAAE;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,IAAI,WAAW,CAAC;YACrB,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,WAAW;YACjD,yBAAyB,EAAE,eAAe;YAC1C,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpF,CAAC,CAAA;IACJ,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,YAAY,GAAG,GAA2B,EAAE;IAChD,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC1B,oBAAoB,GAAG,UAAU,CAAC,eAAe,CAAC;YAChD,GAAG,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,gBAAgB,EAAE;SACD,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,oBAAoB,CAAA;AAC7B,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAAE,OAAqB,EAA4B,EAAE;IAChF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC,QAAQ,CAAC,OAAqC,CAAC,CAAA;QAEnF,OAAO;YACL,mEAAmE;YACnE,wEAAwE;YACxE,0EAA0E;YAC1E,yEAAyE;YACzE,gEAAgE;YAChE,4DAA4D;YAC5D,oEAAoE;YACpE,6BAA6B;YAC7B,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAa;YACpE,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAa;YAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAA;QAC1C,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAmB;IACtC,QAAQ;CACT,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,CAAC,GAA+B,EAAE,EAAE,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;CAC5E,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,SAAS,CAAA"}
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molecule/api-emails-ses",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "AWS SES email provider for molecule.dev.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -17,7 +17,8 @@
17
17
  }
18
18
  },
19
19
  "files": [
20
- "dist"
20
+ "dist",
21
+ "README.md"
21
22
  ],
22
23
  "keywords": [
23
24
  "molecule",
@@ -30,19 +31,20 @@
30
31
  "dependencies": {
31
32
  "@aws-sdk/client-sesv2": "3.1098.0",
32
33
  "@aws-sdk/credential-provider-node": "3.972.75",
34
+ "@molecule/api-proxy-agent": "1.1.0",
33
35
  "nodemailer": "9.0.3"
34
36
  },
35
37
  "devDependencies": {
36
- "@molecule/api-bond": "1.0.0",
38
+ "@molecule/api-bond": "1.0.1",
37
39
  "@types/node": "26.1.2",
38
40
  "@types/nodemailer": "8.0.1",
39
41
  "typescript": "6.0.3",
40
42
  "vitest": "4.1.10"
41
43
  },
42
44
  "peerDependencies": {
43
- "@molecule/api-bond": "^1.0.0",
44
- "@molecule/api-emails": "^1.0.0",
45
- "@molecule/api-secrets": "^1.0.0"
45
+ "@molecule/api-bond": "^1.0.1",
46
+ "@molecule/api-emails": "^1.0.1",
47
+ "@molecule/api-secrets": "^1.0.1"
46
48
  },
47
49
  "repository": {
48
50
  "type": "git",