samva 0.27.0 → 0.28.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.
Files changed (105) hide show
  1. package/AGENTS.md +7 -0
  2. package/README.md +14 -7
  3. package/dist/client/sdk.gen.d.ts +322 -143
  4. package/dist/client/sdk.gen.js +604 -95
  5. package/dist/client/types.gen.d.ts +1342 -479
  6. package/dist/effect/agents.d.ts +6 -8
  7. package/dist/effect/analytics.d.ts +1 -1
  8. package/dist/effect/api-keys.d.ts +6 -6
  9. package/dist/effect/attachments.d.ts +1 -1
  10. package/dist/effect/brands.d.ts +2 -0
  11. package/dist/effect/campaigns.d.ts +275 -25
  12. package/dist/effect/campaigns.js +7 -1
  13. package/dist/effect/contact-groups.d.ts +9 -9
  14. package/dist/effect/contacts.d.ts +74 -81
  15. package/dist/effect/contacts.js +7 -3
  16. package/dist/effect/conversations.d.ts +14 -6
  17. package/dist/effect/email.d.ts +34 -34
  18. package/dist/effect/errors.d.ts +1 -1
  19. package/dist/effect/errors.js +2 -2
  20. package/dist/effect/extension-installations.d.ts +3 -3
  21. package/dist/effect/extensions.d.ts +6 -6
  22. package/dist/effect/generated/agents.d.ts +6 -28
  23. package/dist/effect/generated/agents.js +2 -3
  24. package/dist/effect/generated/analytics.d.ts +3 -3
  25. package/dist/effect/generated/analytics.js +1 -1
  26. package/dist/effect/generated/api-keys.d.ts +6 -6
  27. package/dist/effect/generated/api-keys.js +2 -2
  28. package/dist/effect/generated/attachments.d.ts +3 -3
  29. package/dist/effect/generated/attachments.js +1 -1
  30. package/dist/effect/generated/brands.d.ts +16 -0
  31. package/dist/effect/generated/campaigns.d.ts +1181 -302
  32. package/dist/effect/generated/campaigns.js +169 -36
  33. package/dist/effect/generated/contact-events.d.ts +3 -3
  34. package/dist/effect/generated/contact-events.js +1 -1
  35. package/dist/effect/generated/contact-groups.d.ts +9 -9
  36. package/dist/effect/generated/contact-groups.js +7 -7
  37. package/dist/effect/generated/contacts.d.ts +2063 -290
  38. package/dist/effect/generated/contacts.js +343 -75
  39. package/dist/effect/generated/conversations.d.ts +14 -6
  40. package/dist/effect/generated/conversations.js +6 -6
  41. package/dist/effect/generated/email.d.ts +40 -40
  42. package/dist/effect/generated/email.js +15 -15
  43. package/dist/effect/generated/extension-installations.d.ts +3 -3
  44. package/dist/effect/generated/extension-installations.js +1 -1
  45. package/dist/effect/generated/extensions.d.ts +6 -6
  46. package/dist/effect/generated/extensions.js +2 -2
  47. package/dist/effect/generated/index.d.ts +5 -3
  48. package/dist/effect/generated/journeys.d.ts +9 -9
  49. package/dist/effect/generated/journeys.js +3 -3
  50. package/dist/effect/generated/mailboxes.d.ts +172 -124
  51. package/dist/effect/generated/mailboxes.js +22 -14
  52. package/dist/effect/generated/messages.d.ts +53 -29
  53. package/dist/effect/generated/messages.js +9 -5
  54. package/dist/effect/generated/namespaces.d.ts +3 -3
  55. package/dist/effect/generated/namespaces.js +1 -1
  56. package/dist/effect/generated/operations.d.ts +3 -3
  57. package/dist/effect/generated/operations.js +1 -1
  58. package/dist/effect/generated/organizations.d.ts +0 -9
  59. package/dist/effect/generated/organizations.js +1 -4
  60. package/dist/effect/generated/scheduled-messages.d.ts +69 -20
  61. package/dist/effect/generated/scheduled-messages.js +22 -3
  62. package/dist/effect/generated/shared.d.ts +396 -107
  63. package/dist/effect/generated/shared.js +170 -89
  64. package/dist/effect/generated/subscriptions.d.ts +4 -7
  65. package/dist/effect/generated/subscriptions.js +3 -4
  66. package/dist/effect/generated/templates.d.ts +71 -407
  67. package/dist/effect/generated/templates.js +23 -23
  68. package/dist/effect/generated/topic-forms.d.ts +656 -0
  69. package/dist/effect/generated/topic-forms.js +145 -0
  70. package/dist/effect/generated/{unsubscribe-groups.d.ts → topics.d.ts} +640 -435
  71. package/dist/effect/generated/topics.js +267 -0
  72. package/dist/effect/generated/webhooks.d.ts +6 -6
  73. package/dist/effect/generated/webhooks.js +2 -2
  74. package/dist/effect/generated-metadata.d.ts +78 -24
  75. package/dist/effect/generated-metadata.js +61 -27
  76. package/dist/effect/index.d.ts +2 -1
  77. package/dist/effect/index.js +4 -3
  78. package/dist/effect/internal/operation.js +3 -3
  79. package/dist/effect/internal/send.d.ts +4 -4
  80. package/dist/effect/journeys.d.ts +7 -7
  81. package/dist/effect/mailboxes.d.ts +137 -121
  82. package/dist/effect/messages.d.ts +19 -11
  83. package/dist/effect/namespaces.d.ts +3 -3
  84. package/dist/effect/operations.d.ts +3 -3
  85. package/dist/effect/scheduled-messages.d.ts +6 -6
  86. package/dist/effect/subscriptions.d.ts +1 -2
  87. package/dist/effect/templates.d.ts +13 -13
  88. package/dist/effect/topic-forms.d.ts +30 -0
  89. package/dist/effect/topic-forms.js +21 -0
  90. package/dist/effect/topics.d.ts +94 -0
  91. package/dist/effect/topics.js +29 -0
  92. package/dist/effect/webhooks.d.ts +6 -6
  93. package/dist/index.js +2 -2
  94. package/dist/package.js +1 -1
  95. package/dist/promises/errors.gen.d.ts +65 -8
  96. package/dist/promises/errors.gen.js +139 -7
  97. package/dist/promises/index.d.ts +5 -3
  98. package/dist/promises/index.js +7 -5
  99. package/dist/promises/types.gen.d.ts +1 -1
  100. package/dist/service-map.d.ts +74 -25
  101. package/dist/service-map.js +43 -12
  102. package/package.json +12 -8
  103. package/dist/effect/generated/unsubscribe-groups.js +0 -284
  104. package/dist/effect/unsubscribe-groups.d.ts +0 -74
  105. package/dist/effect/unsubscribe-groups.js +0 -29
package/AGENTS.md CHANGED
@@ -29,3 +29,10 @@ not recipient delivery. A timeout preserves the original idempotency key and bod
29
29
  send another email. `uncertain` requires reconciliation. Only a permitted person can cancel before
30
30
  acceptance or retry an eligible original action without extending its deadline. Approval is also
31
31
  asynchronous. See https://samva.dev/docs/mailboxes/approvals for the receipt contract.
32
+
33
+ Use `client.topics` (Promise) or `Topics` from `samva/effect/topics` (Effect) for topic management
34
+ and per-channel subscription preferences. `setSubscriptions` writes explicit `subscribed` or
35
+ `unsubscribed` status; `checkSubscription` resolves effective status including topic defaults.
36
+ `subscriptions.subscribe` requires `topicId` and requests recipient confirmation; acceptance
37
+ does not create a confirmed contact or subscription. Campaigns require `audience.topicId`, and
38
+ email content accepts `topicId`.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # samva
2
2
 
3
+ Samva is the email API for your app: transactional and campaign sending, inbound mail, and webhooks behind one API.
4
+
3
5
  TypeScript SDK for Samva's public customer API.
4
6
 
5
7
  ## Documentation
@@ -54,7 +56,7 @@ const message = await client.messages.send({
54
56
  },
55
57
  });
56
58
 
57
- const messages = await client.messages.list({ limit: "20" });
59
+ const messages = await client.messages.list({ limit: 20 });
58
60
  // Pass `messages.nextCursor` back as `cursor` for the next page; it is null on the last page.
59
61
  ```
60
62
 
@@ -210,7 +212,8 @@ The Promise client exposes:
210
212
  - `organizations`
211
213
  - `scheduledMessages`
212
214
  - `templates`
213
- - `unsubscribeGroups`
215
+ - `topics`
216
+ - `topicForms`
214
217
  - `webhooks`
215
218
  - `whoami`
216
219
 
@@ -238,7 +241,7 @@ The Effect SDK exposes Pascal-cased domain modules with lower-camel operations:
238
241
  - `Organizations`
239
242
  - `ScheduledMessages`
240
243
  - `Templates`
241
- - `UnsubscribeGroups`
244
+ - `Topics`
242
245
  - `Webhooks`
243
246
  - `Whoami`
244
247
 
@@ -316,10 +319,10 @@ const allContacts = Stream.runCollect(Contacts.list.items());
316
319
  const firstFifty = Stream.runCollect(Contacts.list.items().pipe(Stream.take(50)));
317
320
 
318
321
  // Caller params (start cursor, limit, filters) are respected:
319
- const recent = Contacts.list.items({ limit: "100", after: "2026-01-01T00:00:00Z" });
322
+ const recent = Contacts.list.items({ limit: 100, after: "2026-01-01T00:00:00Z" });
320
323
  ```
321
324
 
322
- The companions are attached uniformly to every paginated list, including `Messages.list`, `Contacts.list`, `Campaigns.list`, `Email.listDomains`, and `Webhooks.list`. Each page fetch reuses the ambient `Retry` policy. Reads retry per page; pagination does not nest retries. The `limit` input retains its OpenAPI wire-string representation. A list bounded by design, such as `CustomFields.list`, answers `{ items }` in one response and carries no companions. The Promise client is unchanged; stream pagination is Effect-only.
325
+ The companions are attached uniformly to every paginated list, including `Messages.list`, `Contacts.list`, `Campaigns.list`, `Email.listDomains`, and `Webhooks.list`. Each page fetch reuses the ambient `Retry` policy. Reads retry per page; pagination does not nest retries. Pass `limit` as a number; both clients serialize it as a query string. A list bounded by design, such as `CustomFields.list`, answers `{ items }` in one response and carries no companions. Stream pagination is Effect-only.
323
326
 
324
327
  ### Redacted secrets
325
328
 
@@ -397,7 +400,7 @@ const message =
397
400
 
398
401
  ```typescript
399
402
  const response = await client.conversations.list({
400
- limit: "20",
403
+ limit: 20,
401
404
  status: "active",
402
405
  });
403
406
  ```
@@ -428,7 +431,11 @@ const campaign = await client.campaigns.create({
428
431
  channel: "email",
429
432
  email: { subject: "What's new", html: "<h1>Updates</h1>" },
430
433
  },
431
- audience: { includeTags: ["subscribers"], excludeTags: ["bounced"] },
434
+ audience: {
435
+ topicId: "unsub_1234567890abcdef",
436
+ includeTags: ["subscribers"],
437
+ excludeTags: ["bounced"],
438
+ },
432
439
  });
433
440
 
434
441
  const run = await client.campaigns.scheduleRun({