@t4h.framework/smtp 0.7.5 → 0.7.6

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.
@@ -13,7 +13,7 @@ description: >-
13
13
 
14
14
  SMTP activity, claim, and a reconciler-aware client for sending email inside workflows. Package path: `framework/packages/smtp`. Peer dependency: `@t4h.framework/core` (for `SyncActivity`, `Claim`, `History`, `Binary`, `SerializableClass`).
15
15
 
16
- Import surface (from `src/smtp.ts` only — do not reference unexported modules):
16
+ Import surface (the package entry; its `exports` map has only `.`, so `tsc` rejects a deep import):
17
17
 
18
18
  ```typescript
19
19
  import {
@@ -44,7 +44,7 @@ Node `>=22`. See [README.md](../../../README.md) for a short overview (note: REA
44
44
  └─────────────┘ └────────────────────────┘ └─────────────────────┘
45
45
  ```
46
46
 
47
- Never call nodemailer or raw SMTP sockets directly in workflow code if the step must be replayable — use `Smtp` / `SmtpSendEmailActivity`.
47
+ `@t4h.framework/core/no-io-in-workflow` rejects `nodemailer` and raw sockets in a workflow. Use `Smtp`.
48
48
 
49
49
  ---
50
50
 
@@ -121,7 +121,7 @@ Use framework `Binary` instances (e.g. from an HTTP `response.body`).
121
121
 
122
122
  ## Smtp client
123
123
 
124
- High-level API: holds `connectionString` (a `Secret` from the `EnvDesign`, since the URL `smtp://user:pass@host:587` carries the password — a string is a `tsc` error) and optional default `from`, extends `SerializableClass` for workflow persistence.
124
+ High-level API: holds `connectionString` and optional default `from`, extends `SerializableClass` for workflow persistence. `connectionString` is typed `Secret` (a string is a `tsc` error): pass the `EnvDesign` entry declared `type: Secret`, because the URL `smtp://user:pass@host:587` carries the password.
125
125
 
126
126
  ```typescript
127
127
  const smtp = new Smtp(environments.SMTP_URL, {
@@ -157,7 +157,7 @@ await smtp.send({
157
157
 
158
158
  Prefer `smtp.send` in workflows. When you need the exported activity directly,
159
159
  drive the **shipped** `SmtpSendEmailActivity` through `History.reconciler` — a
160
- ready, replay-safe helper. Never define or extend your own activity:
160
+ ready, replay-safe helper. `@t4h.framework/core/no-framework-activity-in-app` rejects `new` and `extends` on it:
161
161
 
162
162
  ```typescript
163
163
  import { History } from '@t4h.framework/core'
@@ -171,8 +171,6 @@ const result = await History.reconciler(SmtpSendEmailActivity, smtp, {
171
171
  })
172
172
  ```
173
173
 
174
- Runs inside a workflow (the runtime, or `TestWorkflowEnvironment` in tests, provides the reconciler context).
175
-
176
174
  ---
177
175
 
178
176
  ## SmtpSendEmailOutput
@@ -191,17 +189,24 @@ Activity and `Smtp.send` surface this type, not the raw `{ messageId }` object.
191
189
  ## Workflow example
192
190
 
193
191
  ```typescript
194
- import { App, EnvDesign, Secret, Workflow } from '@t4h.framework/core'
195
- import { http } from '@t4h.framework/http'
196
- import { Smtp } from '@t4h.framework/smtp'
197
- import Type from 'typebox'
192
+ // src/constants/environments.ts
193
+ import { EnvDesign, Secret } from '@t4h.framework/core'
198
194
 
199
- const env = EnvDesign({
195
+ export const environments = EnvDesign({
200
196
  SMTP_CONNECTION_STRING: { type: Secret }, // carries the password
201
197
  SMTP_FROM: { type: String },
202
198
  })
199
+ ```
200
+
201
+ ```typescript
202
+ import { App, Workflow } from '@t4h.framework/core'
203
+ import { http } from '@t4h.framework/http'
204
+ import { Smtp } from '@t4h.framework/smtp'
205
+ import Type from 'typebox'
206
+
207
+ import { environments } from './constants/environments.js'
203
208
 
204
- const smtp = new Smtp(env.SMTP_CONNECTION_STRING)
209
+ const smtp = new Smtp(environments.SMTP_CONNECTION_STRING)
205
210
 
206
211
  export default new App({
207
212
  id: 'email',
@@ -210,7 +215,7 @@ export default new App({
210
215
  const response = await http.get('https://picsum.photos/300/200')
211
216
 
212
217
  await smtp.send({
213
- from: env.SMTP_FROM,
218
+ from: environments.SMTP_FROM,
214
219
  to: input,
215
220
  subject: 'Hello World!',
216
221
  html: '<p>...</p>',
@@ -269,14 +274,10 @@ expect(mockSend.mock.calls[0][0]).toMatchObject({
269
274
 
270
275
  ## Checklist for agents
271
276
 
272
- 1. In workflows, use **`Smtp` + `smtp.send()`** (or `History.reconciler` with the exported `SmtpSendEmailActivity`) — never define or extend your own activity.
277
+ 1. In workflows, use **`Smtp` + `smtp.send()`** (or `History.reconciler` with the exported `SmtpSendEmailActivity`).
273
278
  2. Ensure runtime provides **`SmtpSendEmailClaim`** (or a mock in tests).
274
- 3. Use **`html`** for the message body; required fields on send options are **`to`**, **`subject`**, **`html`**.
275
- 4. Set default **`from`** on `new Smtp(connectionString, { from })` or per-send; per-send wins.
276
- 5. Pass **`Binary`** for attachment `content`, not raw `Buffer` in activity options.
277
- 6. Expect **`SmtpSendEmailOutput`** from `send`, not a plain object — use `.messageId`.
278
- 7. Test workflows with **`TestWorkflowEnvironment`** + **`mockClaim(SmtpSendEmailClaim, { send })`**; assert on the mock's `mock.calls`.
279
- 8. Do not document or import APIs not exported from `@t4h.framework/smtp`.
280
- 9. For core workflow/reconciler concepts, use the **framework-core** skill (`@t4h.framework/core`).
279
+ 3. Set default **`from`** on `new Smtp(connectionString, { from })` or per-send; per-send wins.
280
+ 4. Test workflows with **`TestWorkflowEnvironment`** + **`mockClaim(SmtpSendEmailClaim, { send })`**; assert on the mock's `mock.calls`.
281
+ 5. For core workflow/reconciler concepts, use the **framework-core** skill (`@t4h.framework/core`).
281
282
 
282
283
  See also: `packages/smtp/README.md`; **framework-workflow-testing** for the test harness.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # @t4h.framework/smtp
2
2
 
3
+ ## 0.7.6
4
+
5
+ ### Patch Changes
6
+
7
+ - [#241](https://github.com/tech4humans-brasil/framework/pull/241) [`f6b8454`](https://github.com/tech4humans-brasil/framework/commit/f6b845484d22e7c8e7240fe2e113f1cdea7c8ce3) Thanks [@gusteycamargo](https://github.com/gusteycamargo)! - Adds seven rules to `@t4h.framework/core/eslint` and turns them on in `configs.recommended`:
8
+ - `no-io-in-workflow` reports `fetch` and calls to network, file, database and mail modules in a workflow and in the `constructor`, `toInput` and `toOutput` of an activity. It also reports `zlib` and `stream` calls there, because they work on the content in memory on each replay.
9
+ - `no-binary-subclass` reports a class that extends `Binary`.
10
+ - `no-framework-activity-in-app` reports `new` and `extends` on an activity of a framework package other than the core.
11
+ - `no-testing-import-in-source` reports an import of a `@t4h.framework/<package>/testing` entry out of a test file.
12
+ - `require-workflow-id` reports a `Workflow` with no `id`.
13
+ - `no-secret-to-string` reports a `Secret` that becomes a string.
14
+ - `no-literal-secret-in-authorization` reports a string literal in the `secret` or `clientSecret` field of an `Authorization`.
15
+
16
+ The package skills now name these rules in place of the text that the rules enforce. The docs and skills give each `Workflow` an `id`, read the HMAC secret from `EnvDesign`, and do not document a custom HTTP activity.
17
+
18
+ - [#243](https://github.com/tech4humans-brasil/framework/pull/243) [`0ffd663`](https://github.com/tech4humans-brasil/framework/commit/0ffd663ce8369edd7b54206cb3216568ad1de471) Thanks [@gusteycamargo](https://github.com/gusteycamargo)! - The README examples read each value from `environments`, an `EnvDesign` in `src/constants/environments.ts`, and pass each credential as a `Secret`. They no longer use `process.env`, the raw `env` from the core or a literal in a `Secret` field. The jwks README describes the real context fields (`signature`, `rawPayload`) and says that a token that `jwt.verify` rejects throws.
19
+
20
+ - [#240](https://github.com/tech4humans-brasil/framework/pull/240) [`0606115`](https://github.com/tech4humans-brasil/framework/commit/0606115e2e0baa994e9f0ed3559ee54ecac88e44) Thanks [@gusteycamargo](https://github.com/gusteycamargo)! - The skills do not repeat a rule that a lint rule, `tsc` or a runtime error already enforces. Each such rule is now one line that names the gate. The examples that broke a gate (`process.env`, `as any`, an inline secret, an `EnvDesign` in a workflow file, `ref.output` before `wait()`) are correct now.
21
+
22
+ - [#228](https://github.com/tech4humans-brasil/framework/pull/228) [`d29e1ab`](https://github.com/tech4humans-brasil/framework/commit/d29e1ab29a039b13c3e4b075472bd615566ae75e) Thanks [@gusteycamargo](https://github.com/gusteycamargo)! - Uses exact types and `unknown` in place of `any`, and checks external data with guards.
23
+ - harness: the fix-issues prompt lists each sensor as `- checkTypes: PASS`. Before, it printed `- 0: [object Object]`.
24
+ - hmac: an algorithm name such as `constructor` throws `Unsupported algorithm`.
25
+ - oidc: a discovery response with no `introspection_endpoint`, or a null introspection body, throws a clear error.
26
+ - `HttpRequestActivity.toOutput` takes `HttpRequestActivityOutput` in place of `any`.
27
+
3
28
  ## 0.7.5
4
29
 
5
30
  ## 0.7.4
package/README.md CHANGED
@@ -41,10 +41,23 @@ High-level SMTP client that wraps `SmtpSendEmailActivity` behind a simple API. I
41
41
 
42
42
  ### Basic usage
43
43
 
44
+ The connection string `smtp://user:pass@host:587` carries the password, so the constructor takes a `Secret` and `tsc` rejects a string. Declare it with `type: Secret` in the `EnvDesign` in `src/constants/environments.ts`:
45
+
46
+ ```typescript
47
+ // src/constants/environments.ts
48
+ import { EnvDesign, Secret } from '@t4h.framework/core'
49
+
50
+ export const environments = EnvDesign({
51
+ SMTP_URL: { type: Secret },
52
+ })
53
+ ```
54
+
44
55
  ```typescript
45
56
  import { Smtp } from '@t4h.framework/smtp'
46
57
 
47
- const smtp = new Smtp('smtp://user:pass@smtp.example.com:587')
58
+ import { environments } from './constants/environments.js'
59
+
60
+ const smtp = new Smtp(environments.SMTP_URL)
48
61
 
49
62
  const result = await smtp.send({
50
63
  from: 'noreply@example.com',
@@ -59,7 +72,7 @@ result.messageId // string
59
72
  ### Default sender
60
73
 
61
74
  ```typescript
62
- const smtp = new Smtp('smtp://user:pass@smtp.example.com:587', {
75
+ const smtp = new Smtp(environments.SMTP_URL, {
63
76
  from: 'noreply@example.com',
64
77
  })
65
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"SmtpSendEmailActivity.d.ts","sourceRoot":"","sources":["../../src/activities/SmtpSendEmailActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAS,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAE7C,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAA;AAEzC,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IACrB,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtB,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAA;CACzD,CAAA;AAED,QAAA,MAAM,+BAA+B,eAEpC,CAAA;AAED,qBAAa,qBAAsB,SAAQ,YAAY,CACrD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,CAAC,EAC5D,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,CACpB;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,+BAA+B,CAAC,CAEhD;IAEK,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,4BAA4B,GACpC,0BAA0B;IA6BtB,GAAG,CAAC,OAAO,EAAE,0BAA0B;IAIvC,QAAQ,CAAC,MAAM,EAAE,oBAAoB;CAG7C"}
1
+ {"version":3,"file":"SmtpSendEmailActivity.d.ts","sourceRoot":"","sources":["../../src/activities/SmtpSendEmailActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAS,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAE7C,OAAO,EACL,mBAAmB,EACnB,KAAK,oBAAoB,EAC1B,MAAM,kCAAkC,CAAA;AAEzC,MAAM,MAAM,+BAA+B,GAAG;IAC5C,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG;IACzC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAC9B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAC/B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAA;IAChC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAA;CACzD,CAAA;AAED,MAAM,MAAM,0BAA0B,GAAG;IACvC,gBAAgB,EAAE,MAAM,CAAA;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,SAAS,MAAM,EAAE,CAAA;IACrB,EAAE,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACtB,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,+BAA+B,EAAE,CAAA;CACzD,CAAA;AAUD,QAAA,MAAM,+BAA+B,eAEpC,CAAA;AAED,qBAAa,qBAAsB,SAAQ,YAAY,CACrD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,4BAA4B,CAAC,EAC5D,0BAA0B,EAC1B,oBAAoB,EACpB,mBAAmB,CACpB;IACC,OAAO,CAAC,QAAQ,CAAC,CAAC,+BAA+B,CAAC,CAEhD;IAEK,OAAO,CACZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,4BAA4B,GACpC,0BAA0B;IAqBtB,GAAG,CAAC,OAAO,EAAE,0BAA0B;IAIvC,QAAQ,CAAC,MAAM,EAAE,oBAAoB;CAG7C"}
@@ -1,6 +1,11 @@
1
1
  import { Binary, Claim, SyncActivity } from '@t4h.framework/core';
2
2
  import { SmtpSendEmailClaim } from '../models/SmtpSendEmailClaim.js';
3
3
  import { SmtpSendEmailOutput, } from '../models/SmtpSendEmailOutput.js';
4
+ function toOptionalRecipients(recipients) {
5
+ if (!recipients)
6
+ return undefined;
7
+ return typeof recipients === 'string' ? [recipients] : recipients;
8
+ }
4
9
  const SMTP_SEND_EMAIL_ACTIVITY_CLAIMS = Symbol('smtp-send-email-activity-claims');
5
10
  export class SmtpSendEmailActivity extends SyncActivity {
6
11
  [SMTP_SEND_EMAIL_ACTIVITY_CLAIMS] = new Claim({
@@ -8,17 +13,9 @@ export class SmtpSendEmailActivity extends SyncActivity {
8
13
  });
9
14
  toInput(smtp, content) {
10
15
  const from = content.from ?? smtp.options.from;
11
- const to = Array.isArray(content.to) ? content.to : [content.to];
12
- const cc = content.cc
13
- ? Array.isArray(content.cc)
14
- ? content.cc
15
- : [content.cc]
16
- : undefined;
17
- const bcc = content.bcc
18
- ? Array.isArray(content.bcc)
19
- ? content.bcc
20
- : [content.bcc]
21
- : undefined;
16
+ const to = typeof content.to === 'string' ? [content.to] : content.to;
17
+ const cc = toOptionalRecipients(content.cc);
18
+ const bcc = toOptionalRecipients(content.bcc);
22
19
  return {
23
20
  connectionString: smtp.connectionString,
24
21
  from,
@@ -1 +1 @@
1
- {"version":3,"file":"SmtpSendEmailActivity.js","sourceRoot":"","sources":["../../src/activities/SmtpSendEmailActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAA;AAG9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EACL,mBAAmB,GAEpB,MAAM,kCAAkC,CAAA;AA4BzC,MAAM,+BAA+B,GAAG,MAAM,CAC5C,iCAAiC,CAClC,CAAA;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAK1C;IACkB,CAAC,+BAA+B,CAAC,GAAG,IAAI,KAAK,CAAC;QAC7D,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAA;IAEK,OAAO,CACZ,IAAU,EACV,OAAqC;QAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;QAE9C,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAEhE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE;YACnB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,CAAC,CAAC,OAAO,CAAC,EAAE;gBACZ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;YAChB,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG;YACrB,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;gBAC1B,CAAC,CAAC,OAAO,CAAC,GAAG;gBACb,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC;YACjB,CAAC,CAAC,SAAS,CAAA;QAEb,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE;YACF,EAAE;YACF,GAAG;YACH,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAA;IACH,CAAC;IAEM,GAAG,CAAC,OAAmC;QAC5C,OAAO,IAAI,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjE,CAAC;IAEM,QAAQ,CAAC,MAA4B;QAC1C,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;CACF"}
1
+ {"version":3,"file":"SmtpSendEmailActivity.js","sourceRoot":"","sources":["../../src/activities/SmtpSendEmailActivity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAe,MAAM,qBAAqB,CAAA;AAG9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EACL,mBAAmB,GAEpB,MAAM,kCAAkC,CAAA;AA4BzC,SAAS,oBAAoB,CAC3B,UAAkD;IAElD,IAAI,CAAC,UAAU;QAAE,OAAO,SAAS,CAAA;IAEjC,OAAO,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;AACnE,CAAC;AAED,MAAM,+BAA+B,GAAG,MAAM,CAC5C,iCAAiC,CAClC,CAAA;AAED,MAAM,OAAO,qBAAsB,SAAQ,YAK1C;IACkB,CAAC,+BAA+B,CAAC,GAAG,IAAI,KAAK,CAAC;QAC7D,IAAI,EAAE,kBAAkB;KACzB,CAAC,CAAA;IAEK,OAAO,CACZ,IAAU,EACV,OAAqC;QAErC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;QAE9C,MAAM,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAA;QAErE,MAAM,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAE3C,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAE7C,OAAO;YACL,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,IAAI;YACJ,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,EAAE;YACF,EAAE;YACF,GAAG;YACH,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAA;IACH,CAAC;IAEM,GAAG,CAAC,OAAmC;QAC5C,OAAO,IAAI,CAAC,+BAA+B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACjE,CAAC;IAEM,QAAQ,CAAC,MAA4B;QAC1C,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t4h.framework/smtp",
3
- "version": "0.7.5",
3
+ "version": "0.7.6",
4
4
  "description": "SMTP module for the T4H Framework",
5
5
  "homepage": "https://github.com/tech4humans-brasil/framework/tree/main/packages/smtp",
6
6
  "bugs": "https://github.com/tech4humans-brasil/framework/issues",
@@ -26,12 +26,14 @@
26
26
  "scripts": {
27
27
  "build": "tsc --project tsconfig.build.json",
28
28
  "check-types": "tsc --noEmit",
29
+ "check-package": "publint --strict && attw --pack . --profile esm-only",
30
+ "lint": "eslint . --max-warnings 0",
29
31
  "prepublishOnly": "yarn build",
30
32
  "test": "vitest run",
31
33
  "test:watch": "vitest"
32
34
  },
33
35
  "devDependencies": {
34
- "@t4h.framework/core": "^0.19.0",
36
+ "@t4h.framework/core": "^0.20.0",
35
37
  "typescript": "^5.9.3",
36
38
  "vitest": "^4.0.18"
37
39
  },