samva 0.26.0 → 0.28.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 (107) 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 +1085 -332
  5. package/dist/client/types.gen.d.ts +1342 -479
  6. package/dist/effect/agents.d.ts +119 -0
  7. package/dist/effect/agents.js +29 -0
  8. package/dist/effect/analytics.d.ts +1 -1
  9. package/dist/effect/analytics.js +1 -1
  10. package/dist/effect/api-keys.d.ts +6 -6
  11. package/dist/effect/attachments.d.ts +1 -1
  12. package/dist/effect/brands.d.ts +2 -0
  13. package/dist/effect/campaigns.d.ts +275 -25
  14. package/dist/effect/campaigns.js +7 -1
  15. package/dist/effect/contact-groups.d.ts +9 -9
  16. package/dist/effect/contacts.d.ts +74 -81
  17. package/dist/effect/contacts.js +7 -3
  18. package/dist/effect/conversations.d.ts +14 -6
  19. package/dist/effect/email.d.ts +34 -34
  20. package/dist/effect/errors.d.ts +1 -1
  21. package/dist/effect/errors.js +2 -2
  22. package/dist/effect/extension-installations.d.ts +3 -3
  23. package/dist/effect/extensions.d.ts +6 -6
  24. package/dist/effect/generated/agents.d.ts +6 -28
  25. package/dist/effect/generated/agents.js +270 -0
  26. package/dist/effect/generated/analytics.d.ts +3 -3
  27. package/dist/effect/generated/analytics.js +1 -1
  28. package/dist/effect/generated/api-keys.d.ts +6 -6
  29. package/dist/effect/generated/api-keys.js +2 -2
  30. package/dist/effect/generated/attachments.d.ts +3 -3
  31. package/dist/effect/generated/attachments.js +1 -1
  32. package/dist/effect/generated/brands.d.ts +16 -0
  33. package/dist/effect/generated/campaigns.d.ts +1181 -302
  34. package/dist/effect/generated/campaigns.js +169 -36
  35. package/dist/effect/generated/contact-events.d.ts +3 -3
  36. package/dist/effect/generated/contact-events.js +1 -1
  37. package/dist/effect/generated/contact-groups.d.ts +9 -9
  38. package/dist/effect/generated/contact-groups.js +7 -7
  39. package/dist/effect/generated/contacts.d.ts +2063 -290
  40. package/dist/effect/generated/contacts.js +343 -75
  41. package/dist/effect/generated/conversations.d.ts +14 -6
  42. package/dist/effect/generated/conversations.js +6 -6
  43. package/dist/effect/generated/email.d.ts +55 -70
  44. package/dist/effect/generated/email.js +18 -21
  45. package/dist/effect/generated/extension-installations.d.ts +3 -3
  46. package/dist/effect/generated/extension-installations.js +1 -1
  47. package/dist/effect/generated/extensions.d.ts +6 -6
  48. package/dist/effect/generated/extensions.js +2 -2
  49. package/dist/effect/generated/index.d.ts +5 -3
  50. package/dist/effect/generated/journeys.d.ts +9 -9
  51. package/dist/effect/generated/journeys.js +3 -3
  52. package/dist/effect/generated/mailboxes.d.ts +466 -712
  53. package/dist/effect/generated/mailboxes.js +22 -14
  54. package/dist/effect/generated/messages.d.ts +53 -29
  55. package/dist/effect/generated/messages.js +9 -5
  56. package/dist/effect/generated/namespaces.d.ts +3 -3
  57. package/dist/effect/generated/namespaces.js +1 -1
  58. package/dist/effect/generated/operations.d.ts +3 -3
  59. package/dist/effect/generated/operations.js +1 -1
  60. package/dist/effect/generated/organizations.d.ts +0 -9
  61. package/dist/effect/generated/organizations.js +1 -4
  62. package/dist/effect/generated/scheduled-messages.d.ts +69 -20
  63. package/dist/effect/generated/scheduled-messages.js +22 -3
  64. package/dist/effect/generated/shared.d.ts +431 -177
  65. package/dist/effect/generated/shared.js +216 -108
  66. package/dist/effect/generated/subscriptions.d.ts +4 -7
  67. package/dist/effect/generated/subscriptions.js +3 -4
  68. package/dist/effect/generated/templates.d.ts +71 -407
  69. package/dist/effect/generated/templates.js +23 -23
  70. package/dist/effect/generated/topic-forms.d.ts +656 -0
  71. package/dist/effect/generated/topic-forms.js +145 -0
  72. package/dist/effect/generated/{unsubscribe-groups.d.ts → topics.d.ts} +640 -435
  73. package/dist/effect/generated/topics.js +267 -0
  74. package/dist/effect/generated/webhooks.d.ts +6 -6
  75. package/dist/effect/generated/webhooks.js +2 -2
  76. package/dist/effect/generated-metadata.d.ts +78 -24
  77. package/dist/effect/generated-metadata.js +61 -27
  78. package/dist/effect/index.d.ts +3 -1
  79. package/dist/effect/index.js +5 -3
  80. package/dist/effect/internal/operation.js +4 -3
  81. package/dist/effect/internal/send.d.ts +4 -4
  82. package/dist/effect/journeys.d.ts +119 -119
  83. package/dist/effect/mailboxes.d.ts +137 -121
  84. package/dist/effect/messages.d.ts +19 -11
  85. package/dist/effect/namespaces.d.ts +3 -3
  86. package/dist/effect/operations.d.ts +3 -3
  87. package/dist/effect/scheduled-messages.d.ts +6 -6
  88. package/dist/effect/subscriptions.d.ts +1 -2
  89. package/dist/effect/templates.d.ts +13 -13
  90. package/dist/effect/topic-forms.d.ts +30 -0
  91. package/dist/effect/topic-forms.js +21 -0
  92. package/dist/effect/topics.d.ts +94 -0
  93. package/dist/effect/topics.js +29 -0
  94. package/dist/effect/webhooks.d.ts +6 -6
  95. package/dist/index.js +2 -2
  96. package/dist/package.js +1 -1
  97. package/dist/promises/errors.gen.d.ts +65 -8
  98. package/dist/promises/errors.gen.js +139 -7
  99. package/dist/promises/index.d.ts +7 -3
  100. package/dist/promises/index.js +9 -5
  101. package/dist/promises/types.gen.d.ts +1 -1
  102. package/dist/service-map.d.ts +117 -23
  103. package/dist/service-map.js +71 -10
  104. package/package.json +17 -9
  105. package/dist/effect/generated/unsubscribe-groups.js +0 -284
  106. package/dist/effect/unsubscribe-groups.d.ts +0 -74
  107. 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
@@ -54,7 +54,7 @@ const message = await client.messages.send({
54
54
  },
55
55
  });
56
56
 
57
- const messages = await client.messages.list({ limit: "20" });
57
+ const messages = await client.messages.list({ limit: 20 });
58
58
  // Pass `messages.nextCursor` back as `cursor` for the next page; it is null on the last page.
59
59
  ```
60
60
 
@@ -188,6 +188,7 @@ match the template's input schema. `samva templates types` generates TypeScript
188
188
 
189
189
  The Promise client exposes:
190
190
 
191
+ - `agents`
191
192
  - `analytics`
192
193
  - `apiKeys`
193
194
  - `attachments`
@@ -209,12 +210,14 @@ The Promise client exposes:
209
210
  - `organizations`
210
211
  - `scheduledMessages`
211
212
  - `templates`
212
- - `unsubscribeGroups`
213
+ - `topics`
214
+ - `topicForms`
213
215
  - `webhooks`
214
216
  - `whoami`
215
217
 
216
218
  The Effect SDK exposes Pascal-cased domain modules with lower-camel operations:
217
219
 
220
+ - `Agents`
218
221
  - `Analytics`
219
222
  - `ApiKeys`
220
223
  - `Attachments`
@@ -236,7 +239,7 @@ The Effect SDK exposes Pascal-cased domain modules with lower-camel operations:
236
239
  - `Organizations`
237
240
  - `ScheduledMessages`
238
241
  - `Templates`
239
- - `UnsubscribeGroups`
242
+ - `Topics`
240
243
  - `Webhooks`
241
244
  - `Whoami`
242
245
 
@@ -314,10 +317,10 @@ const allContacts = Stream.runCollect(Contacts.list.items());
314
317
  const firstFifty = Stream.runCollect(Contacts.list.items().pipe(Stream.take(50)));
315
318
 
316
319
  // Caller params (start cursor, limit, filters) are respected:
317
- const recent = Contacts.list.items({ limit: "100", after: "2026-01-01T00:00:00Z" });
320
+ const recent = Contacts.list.items({ limit: 100, after: "2026-01-01T00:00:00Z" });
318
321
  ```
319
322
 
320
- 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.
323
+ 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.
321
324
 
322
325
  ### Redacted secrets
323
326
 
@@ -395,7 +398,7 @@ const message =
395
398
 
396
399
  ```typescript
397
400
  const response = await client.conversations.list({
398
- limit: "20",
401
+ limit: 20,
399
402
  status: "active",
400
403
  });
401
404
  ```
@@ -426,7 +429,11 @@ const campaign = await client.campaigns.create({
426
429
  channel: "email",
427
430
  email: { subject: "What's new", html: "<h1>Updates</h1>" },
428
431
  },
429
- audience: { includeTags: ["subscribers"], excludeTags: ["bounced"] },
432
+ audience: {
433
+ topicId: "unsub_1234567890abcdef",
434
+ includeTags: ["subscribers"],
435
+ excludeTags: ["bounced"],
436
+ },
430
437
  });
431
438
 
432
439
  const run = await client.campaigns.scheduleRun({