samva 0.27.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 (105) hide show
  1. package/AGENTS.md +7 -0
  2. package/README.md +12 -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
@@ -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
 
@@ -210,7 +210,8 @@ The Promise client exposes:
210
210
  - `organizations`
211
211
  - `scheduledMessages`
212
212
  - `templates`
213
- - `unsubscribeGroups`
213
+ - `topics`
214
+ - `topicForms`
214
215
  - `webhooks`
215
216
  - `whoami`
216
217
 
@@ -238,7 +239,7 @@ The Effect SDK exposes Pascal-cased domain modules with lower-camel operations:
238
239
  - `Organizations`
239
240
  - `ScheduledMessages`
240
241
  - `Templates`
241
- - `UnsubscribeGroups`
242
+ - `Topics`
242
243
  - `Webhooks`
243
244
  - `Whoami`
244
245
 
@@ -316,10 +317,10 @@ const allContacts = Stream.runCollect(Contacts.list.items());
316
317
  const firstFifty = Stream.runCollect(Contacts.list.items().pipe(Stream.take(50)));
317
318
 
318
319
  // Caller params (start cursor, limit, filters) are respected:
319
- 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" });
320
321
  ```
321
322
 
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.
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.
323
324
 
324
325
  ### Redacted secrets
325
326
 
@@ -397,7 +398,7 @@ const message =
397
398
 
398
399
  ```typescript
399
400
  const response = await client.conversations.list({
400
- limit: "20",
401
+ limit: 20,
401
402
  status: "active",
402
403
  });
403
404
  ```
@@ -428,7 +429,11 @@ const campaign = await client.campaigns.create({
428
429
  channel: "email",
429
430
  email: { subject: "What's new", html: "<h1>Updates</h1>" },
430
431
  },
431
- audience: { includeTags: ["subscribers"], excludeTags: ["bounced"] },
432
+ audience: {
433
+ topicId: "unsub_1234567890abcdef",
434
+ includeTags: ["subscribers"],
435
+ excludeTags: ["bounced"],
436
+ },
432
437
  });
433
438
 
434
439
  const run = await client.campaigns.scheduleRun({