sently 0.9.2 → 1.0.0

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.
Files changed (245) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +86 -0
  3. package/README.md +39 -34
  4. package/SECURITY.md +59 -0
  5. package/dist/adapters/bun.js +1 -1
  6. package/dist/adapters/cf.js +2 -2
  7. package/dist/adapters/cf.js.map +1 -1
  8. package/dist/adapters/deno.js +1 -1
  9. package/dist/adapters/node.js +1 -1
  10. package/dist/auth/oauth2.js +2 -2
  11. package/dist/auth/oauth2.js.map +1 -1
  12. package/dist/channel-result.d.ts +6 -0
  13. package/dist/channel-result.js +1 -0
  14. package/dist/{chunk-skqhj0rm.js → chunk-1ke3nmyg.js} +3 -3
  15. package/dist/{chunk-skqhj0rm.js.map → chunk-1ke3nmyg.js.map} +1 -1
  16. package/dist/{chunk-7gy2q9sh.js → chunk-5es0v1j7.js} +2 -2
  17. package/dist/{chunk-7gy2q9sh.js.map → chunk-5es0v1j7.js.map} +1 -1
  18. package/dist/{chunk-0qxws3kj.js → chunk-7wtfjx0d.js} +2 -2
  19. package/dist/{chunk-0qxws3kj.js.map → chunk-7wtfjx0d.js.map} +1 -1
  20. package/dist/chunk-8kpgbrba.js +4 -0
  21. package/dist/{chunk-93vqxxj2.js.map → chunk-8kpgbrba.js.map} +2 -2
  22. package/dist/{chunk-vjpds2pf.js → chunk-a057jzsy.js} +2 -2
  23. package/dist/{chunk-vjpds2pf.js.map → chunk-a057jzsy.js.map} +1 -1
  24. package/dist/{chunk-8njyga62.js → chunk-bhr7w3gg.js} +2 -2
  25. package/dist/{chunk-8njyga62.js.map → chunk-bhr7w3gg.js.map} +1 -1
  26. package/dist/chunk-cs1tvehn.js +4 -0
  27. package/dist/chunk-cs1tvehn.js.map +10 -0
  28. package/dist/{chunk-29z7fkzy.js → chunk-d5aw5vag.js} +3 -3
  29. package/dist/{chunk-29z7fkzy.js.map → chunk-d5aw5vag.js.map} +1 -1
  30. package/dist/chunk-f5x8vesr.js +4 -0
  31. package/dist/{chunk-b602dhck.js.map → chunk-f5x8vesr.js.map} +2 -2
  32. package/dist/chunk-fv0bemgf.js +4 -0
  33. package/dist/{chunk-yp311efr.js.map → chunk-fv0bemgf.js.map} +3 -3
  34. package/dist/{chunk-ywq6s10g.js → chunk-hnzmn4s4.js} +2 -2
  35. package/dist/{chunk-ywq6s10g.js.map → chunk-hnzmn4s4.js.map} +1 -1
  36. package/dist/chunk-htdg075t.js +4 -0
  37. package/dist/{chunk-qtkd5bak.js.map → chunk-htdg075t.js.map} +4 -3
  38. package/dist/{chunk-0gqy32pe.js → chunk-q2mahnb7.js} +3 -3
  39. package/dist/chunk-q2mahnb7.js.map +10 -0
  40. package/dist/chunk-sbgt4165.js +4 -0
  41. package/dist/chunk-sbgt4165.js.map +10 -0
  42. package/dist/{chunk-6npp3x3c.js → chunk-th4cwrpb.js} +2 -2
  43. package/dist/{chunk-6npp3x3c.js.map → chunk-th4cwrpb.js.map} +1 -1
  44. package/dist/{chunk-tamww15j.js → chunk-ttbwyxmh.js} +2 -2
  45. package/dist/{chunk-tamww15j.js.map → chunk-ttbwyxmh.js.map} +1 -1
  46. package/dist/chunk-w4c9kj70.js +13 -0
  47. package/dist/{chunk-n0qeyzqm.js.map → chunk-w4c9kj70.js.map} +2 -2
  48. package/dist/chunk-w9sabmb0.js +4 -0
  49. package/dist/chunk-w9sabmb0.js.map +10 -0
  50. package/dist/{chunk-8dty8c4p.js → chunk-yg3kj723.js} +3 -3
  51. package/dist/{chunk-8dty8c4p.js.map → chunk-yg3kj723.js.map} +2 -2
  52. package/dist/chunk-z1589fjk.js +4 -0
  53. package/dist/chunk-z1589fjk.js.map +10 -0
  54. package/dist/core/channel-result.d.ts +36 -0
  55. package/dist/core/channel-result.js +3 -0
  56. package/dist/core/channel-result.js.map +10 -0
  57. package/dist/core/decorated-transport.d.ts +30 -0
  58. package/dist/core/decorator-hooks.d.ts +17 -0
  59. package/dist/core/errors.js +2 -2
  60. package/dist/core/errors.js.map +1 -1
  61. package/dist/core/provider-label.d.ts +7 -3
  62. package/dist/core/push-endpoint.d.ts +5 -0
  63. package/dist/core/push-types.d.ts +48 -14
  64. package/dist/core/sms-types.d.ts +12 -0
  65. package/dist/core/smtp.js +2 -2
  66. package/dist/core/smtp.js.map +1 -1
  67. package/dist/core/whatsapp-types.d.ts +12 -0
  68. package/dist/detect.js +2 -2
  69. package/dist/detect.js.map +1 -1
  70. package/dist/dkim.js +2 -2
  71. package/dist/dkim.js.map +2 -2
  72. package/dist/idempotency.js +2 -2
  73. package/dist/idempotency.js.map +1 -1
  74. package/dist/index.d.ts +4 -0
  75. package/dist/index.js +5 -0
  76. package/dist/mailer.js +2 -2
  77. package/dist/mailer.js.map +1 -1
  78. package/dist/observability/console.js +1 -1
  79. package/dist/plugins/react.js +2 -2
  80. package/dist/plugins/react.js.map +1 -1
  81. package/dist/plugins/template.js +1 -1
  82. package/dist/pool/pool.js +2 -2
  83. package/dist/pool/pool.js.map +1 -1
  84. package/dist/push.d.ts +1 -0
  85. package/dist/push.js +2 -2
  86. package/dist/push.js.map +3 -3
  87. package/dist/sms.d.ts +1 -0
  88. package/dist/sms.js +2 -2
  89. package/dist/sms.js.map +3 -3
  90. package/dist/smtp-mailer.js +2 -2
  91. package/dist/smtp-mailer.js.map +1 -1
  92. package/dist/transports/brevo.js +2 -2
  93. package/dist/transports/brevo.js.map +2 -2
  94. package/dist/transports/cloudflare-email.js +2 -2
  95. package/dist/transports/cloudflare-email.js.map +2 -2
  96. package/dist/transports/fallback.d.ts +32 -6
  97. package/dist/transports/fallback.js +2 -2
  98. package/dist/transports/fallback.js.map +1 -1
  99. package/dist/transports/fcm.d.ts +55 -0
  100. package/dist/transports/fcm.js +4 -0
  101. package/dist/transports/fcm.js.map +10 -0
  102. package/dist/transports/loops.js +2 -2
  103. package/dist/transports/loops.js.map +1 -1
  104. package/dist/transports/mailersend.js +2 -2
  105. package/dist/transports/mailersend.js.map +2 -2
  106. package/dist/transports/mailgun.js +2 -2
  107. package/dist/transports/mailgun.js.map +2 -2
  108. package/dist/transports/mailpit.d.ts +166 -0
  109. package/dist/transports/mailpit.js +3 -0
  110. package/dist/transports/mailpit.js.map +10 -0
  111. package/dist/transports/mailtrap.js +2 -2
  112. package/dist/transports/mailtrap.js.map +2 -2
  113. package/dist/transports/msegat.js +2 -2
  114. package/dist/transports/msegat.js.map +1 -1
  115. package/dist/transports/plunk.js +2 -2
  116. package/dist/transports/plunk.js.map +1 -1
  117. package/dist/transports/postmark.js +2 -2
  118. package/dist/transports/postmark.js.map +2 -2
  119. package/dist/transports/preview.js +2 -2
  120. package/dist/transports/preview.js.map +1 -1
  121. package/dist/transports/resend.js +2 -2
  122. package/dist/transports/resend.js.map +2 -2
  123. package/dist/transports/retry.d.ts +28 -9
  124. package/dist/transports/retry.js +2 -2
  125. package/dist/transports/retry.js.map +3 -3
  126. package/dist/transports/sendgrid.js +2 -2
  127. package/dist/transports/sendgrid.js.map +2 -2
  128. package/dist/transports/ses.js +2 -2
  129. package/dist/transports/ses.js.map +2 -2
  130. package/dist/transports/smtp.js +2 -2
  131. package/dist/transports/smtp.js.map +1 -1
  132. package/dist/transports/sndr.js +2 -2
  133. package/dist/transports/sndr.js.map +1 -1
  134. package/dist/transports/sparkpost.js +2 -2
  135. package/dist/transports/sparkpost.js.map +2 -2
  136. package/dist/transports/taqnyat-mail.js +2 -2
  137. package/dist/transports/taqnyat-mail.js.map +1 -1
  138. package/dist/transports/taqnyat-sms.js +2 -2
  139. package/dist/transports/taqnyat-sms.js.map +1 -1
  140. package/dist/transports/taqnyat-whatsapp.js +2 -2
  141. package/dist/transports/taqnyat-whatsapp.js.map +1 -1
  142. package/dist/transports/twilio-sms.js +2 -2
  143. package/dist/transports/twilio-sms.js.map +2 -2
  144. package/dist/transports/unifonic.d.ts +81 -0
  145. package/dist/transports/unifonic.js +3 -0
  146. package/dist/transports/unifonic.js.map +10 -0
  147. package/dist/transports/webpush.js +2 -2
  148. package/dist/transports/webpush.js.map +3 -3
  149. package/dist/transports/weighted-fallback.d.ts +11 -9
  150. package/dist/transports/weighted-fallback.js +2 -2
  151. package/dist/transports/weighted-fallback.js.map +3 -3
  152. package/dist/transports/whatsapp-cloud.js +2 -2
  153. package/dist/transports/whatsapp-cloud.js.map +1 -1
  154. package/dist/webhooks/brevo.js +2 -2
  155. package/dist/webhooks/brevo.js.map +1 -1
  156. package/dist/webhooks/mailgun.js +2 -2
  157. package/dist/webhooks/mailgun.js.map +1 -1
  158. package/dist/webhooks/postmark.js +2 -2
  159. package/dist/webhooks/postmark.js.map +1 -1
  160. package/dist/webhooks/resend.js +2 -2
  161. package/dist/webhooks/resend.js.map +1 -1
  162. package/dist/webhooks/sendgrid.js +2 -2
  163. package/dist/webhooks/sendgrid.js.map +1 -1
  164. package/dist/webhooks/ses.js +2 -2
  165. package/dist/webhooks/ses.js.map +1 -1
  166. package/dist/webhooks/sndr.js +2 -2
  167. package/dist/webhooks/sndr.js.map +1 -1
  168. package/dist/webhooks/timing-safe-equal.js +1 -1
  169. package/dist/webhooks/twilio-sms.d.ts +20 -0
  170. package/dist/webhooks/twilio-sms.js +3 -0
  171. package/dist/webhooks/twilio-sms.js.map +10 -0
  172. package/dist/webhooks/types.d.ts +37 -3
  173. package/dist/webhooks/types.js +3 -0
  174. package/dist/webhooks/types.js.map +9 -0
  175. package/dist/webhooks/unifonic.d.ts +13 -0
  176. package/dist/webhooks/unifonic.js +3 -0
  177. package/dist/webhooks/unifonic.js.map +10 -0
  178. package/dist/webhooks/whatsapp-cloud.d.ts +14 -0
  179. package/dist/webhooks/whatsapp-cloud.js +3 -0
  180. package/dist/webhooks/whatsapp-cloud.js.map +10 -0
  181. package/dist/webhooks.d.ts +10 -5
  182. package/dist/webhooks.js +11 -0
  183. package/dist/whatsapp.d.ts +1 -0
  184. package/dist/whatsapp.js +2 -2
  185. package/dist/whatsapp.js.map +3 -3
  186. package/package.json +39 -2
  187. package/site/content/docs/ai/llms-txt.mdx +47 -2
  188. package/site/content/docs/channels/email.mdx +3 -0
  189. package/site/content/docs/channels/hooks.mdx +6 -5
  190. package/site/content/docs/channels/index.mdx +5 -3
  191. package/site/content/docs/channels/push.mdx +31 -21
  192. package/site/content/docs/channels/sms.mdx +4 -1
  193. package/site/content/docs/decorators/fallback.mdx +45 -13
  194. package/site/content/docs/decorators/index.mdx +31 -13
  195. package/site/content/docs/decorators/preview.mdx +52 -9
  196. package/site/content/docs/decorators/retry.mdx +32 -9
  197. package/site/content/docs/decorators/weighted-fallback.mdx +27 -6
  198. package/site/content/docs/get-started/entrypoints.mdx +11 -8
  199. package/site/content/docs/get-started/index.mdx +8 -2
  200. package/site/content/docs/get-started/installation.mdx +3 -2
  201. package/site/content/docs/get-started/introduction.mdx +7 -3
  202. package/site/content/docs/get-started/meta.json +4 -1
  203. package/site/content/docs/get-started/migrate-nodemailer.mdx +132 -5
  204. package/site/content/docs/get-started/non-goals.mdx +57 -0
  205. package/site/content/docs/get-started/stability.mdx +69 -0
  206. package/site/content/docs/get-started/support-matrix.mdx +62 -0
  207. package/site/content/docs/guides/compare.mdx +87 -0
  208. package/site/content/docs/guides/failover.mdx +121 -0
  209. package/site/content/docs/guides/index.mdx +2 -0
  210. package/site/content/docs/guides/meta.json +2 -0
  211. package/site/content/docs/guides/security.mdx +38 -8
  212. package/site/content/docs/guides/webhooks.mdx +35 -20
  213. package/site/content/docs/index.mdx +78 -4
  214. package/site/content/docs/meta.json +0 -1
  215. package/site/content/docs/reference/channel-result.mdx +82 -0
  216. package/site/content/docs/reference/exports.mdx +9 -4
  217. package/site/content/docs/reference/meta.json +1 -0
  218. package/site/content/docs/reference/push-options.mdx +58 -3
  219. package/site/content/docs/reference/sms-options.mdx +18 -2
  220. package/site/content/docs/reference/webhook-events.mdx +38 -14
  221. package/site/content/docs/reference/whatsapp-options.mdx +19 -1
  222. package/site/content/docs/transports/fcm.mdx +84 -0
  223. package/site/content/docs/transports/index.mdx +11 -3
  224. package/site/content/docs/transports/mailpit.mdx +123 -0
  225. package/site/content/docs/transports/meta.json +4 -1
  226. package/site/content/docs/transports/smtp.mdx +61 -22
  227. package/site/content/docs/transports/unifonic.mdx +85 -0
  228. package/dist/chunk-0gqy32pe.js.map +0 -10
  229. package/dist/chunk-5915vbcj.js +0 -4
  230. package/dist/chunk-5915vbcj.js.map +0 -10
  231. package/dist/chunk-93vqxxj2.js +0 -4
  232. package/dist/chunk-b602dhck.js +0 -4
  233. package/dist/chunk-gp4fwrs8.js +0 -4
  234. package/dist/chunk-gp4fwrs8.js.map +0 -10
  235. package/dist/chunk-n0qeyzqm.js +0 -13
  236. package/dist/chunk-q8k3m6qe.js +0 -4
  237. package/dist/chunk-q8k3m6qe.js.map +0 -10
  238. package/dist/chunk-qtkd5bak.js +0 -4
  239. package/dist/chunk-yp311efr.js +0 -4
  240. package/site/content/docs/quick-start/email.mdx +0 -40
  241. package/site/content/docs/quick-start/index.mdx +0 -15
  242. package/site/content/docs/quick-start/meta.json +0 -5
  243. package/site/content/docs/quick-start/push.mdx +0 -36
  244. package/site/content/docs/quick-start/sms.mdx +0 -36
  245. package/site/content/docs/quick-start/whatsapp.mdx +0 -38
@@ -1,15 +0,0 @@
1
- ---
2
- title: Quick start
3
- description: Send your first message on each channel.
4
- icon: Zap
5
- source: "README.md"
6
- ---
7
-
8
- Pick a channel and send in a few lines. Same model every time — sender, transport, send.
9
-
10
- <Cards>
11
- <Card title="Email" href="/docs/quick-start/email" />
12
- <Card title="SMS" href="/docs/quick-start/sms" />
13
- <Card title="WhatsApp" href="/docs/quick-start/whatsapp" />
14
- <Card title="Push" href="/docs/quick-start/push" />
15
- </Cards>
@@ -1,5 +0,0 @@
1
- {
2
- "title": "Quick start",
3
- "icon": "Zap",
4
- "pages": ["index", "email", "sms", "whatsapp", "push"]
5
- }
@@ -1,36 +0,0 @@
1
- ---
2
- title: Push
3
- description: Send a browser notification through a channel sender.
4
- icon: Bell
5
- source: "src/push.ts"
6
- ---
7
-
8
- <Callout title="The one rule">Store the browser subscription and send it back unchanged as `subscription`.</Callout>
9
-
10
- <Steps>
11
- <Step title="Create the sender">
12
-
13
- ```ts
14
- import { createPushSender } from "sently/push";
15
- import { WebPushTransport } from "sently/transports/webpush";
16
-
17
- const push = createPushSender({
18
- transport: new WebPushTransport({
19
- vapidPublicKey: process.env.VAPID_PUBLIC_KEY!,
20
- vapidPrivateKey: process.env.VAPID_PRIVATE_KEY!,
21
- subject: "mailto:you@example.com",
22
- }),
23
- });
24
- ```
25
-
26
- </Step>
27
- <Step title="Send">
28
-
29
- ```ts
30
- await push.send({ subscription, title: "Update", body: "Your report is ready." });
31
- ```
32
-
33
- </Step>
34
- </Steps>
35
-
36
- <Cards><Card title="Push channel" href="/docs/channels/push" /></Cards>
@@ -1,36 +0,0 @@
1
- ---
2
- title: SMS
3
- description: Send an SMS through a channel sender.
4
- icon: MessageSquareText
5
- source: "src/sms.ts"
6
- ---
7
-
8
- <Callout title="The one rule">Create the SMS sender once, then call `send` with `to` and `body`.</Callout>
9
-
10
- <Steps>
11
- <Step title="Create the sender">
12
-
13
- ```ts
14
- import { createSmsSender } from "sently/sms";
15
- import { TwilioSmsTransport } from "sently/transports/twilio-sms";
16
-
17
- const sms = createSmsSender({
18
- transport: new TwilioSmsTransport({
19
- accountSid: process.env.TWILIO_ACCOUNT_SID!,
20
- authToken: process.env.TWILIO_AUTH_TOKEN!,
21
- from: "+15557654321",
22
- }),
23
- });
24
- ```
25
-
26
- </Step>
27
- <Step title="Send">
28
-
29
- ```ts
30
- await sms.send({ to: "+15551234567", body: "Your code is ready." });
31
- ```
32
-
33
- </Step>
34
- </Steps>
35
-
36
- <Cards><Card title="SMS channel" href="/docs/channels/sms" /></Cards>
@@ -1,38 +0,0 @@
1
- ---
2
- title: WhatsApp
3
- description: Send a WhatsApp message through a channel sender.
4
- icon: MessagesSquare
5
- source: "src/whatsapp.ts"
6
- ---
7
-
8
- <Callout title="The one rule">Use a template outside the open customer-service window; use free text only inside it.</Callout>
9
-
10
- <Steps>
11
- <Step title="Create the sender">
12
-
13
- ```ts
14
- import { createWhatsAppSender } from "sently/whatsapp";
15
- import { WhatsAppCloudTransport } from "sently/transports/whatsapp-cloud";
16
-
17
- const whatsapp = createWhatsAppSender({
18
- transport: new WhatsAppCloudTransport({
19
- accessToken: process.env.WHATSAPP_TOKEN!,
20
- phoneNumberId: process.env.WHATSAPP_PHONE_NUMBER_ID!,
21
- }),
22
- });
23
- ```
24
-
25
- </Step>
26
- <Step title="Send a template">
27
-
28
- ```ts
29
- await whatsapp.send({
30
- to: "15551234567",
31
- template: { name: "welcome", language: "en_US" },
32
- });
33
- ```
34
-
35
- </Step>
36
- </Steps>
37
-
38
- <Cards><Card title="WhatsApp channel" href="/docs/channels/whatsapp" /></Cards>