samva 0.4.0 → 0.6.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 (63) hide show
  1. package/AGENTS.md +3 -2
  2. package/README.md +12 -2
  3. package/dist/{categories-CsUa8ojo.js → categories-4u9Az4No.js} +28 -8
  4. package/dist/client/sdk.gen.d.ts +545 -74
  5. package/dist/client/types.gen.d.ts +3907 -747
  6. package/dist/{client-BmZK_uCt.js → client-DCM6U0-I.js} +3061 -808
  7. package/dist/{client-attribution-BslSOa_8.js → client-attribution-DYUSAa76.js} +2 -2
  8. package/dist/effect/analytics.d.ts +66 -0
  9. package/dist/effect/analytics.js +21 -0
  10. package/dist/effect/api-keys.d.ts +198 -34
  11. package/dist/effect/api-keys.js +1 -1
  12. package/dist/effect/attachments.d.ts +53 -0
  13. package/dist/effect/attachments.js +17 -0
  14. package/dist/effect/campaigns.d.ts +52 -18
  15. package/dist/effect/campaigns.js +1 -1
  16. package/dist/effect/categories.d.ts +3 -3
  17. package/dist/effect/categories.js +1 -1
  18. package/dist/effect/client.js +1 -1
  19. package/dist/effect/contact-groups.d.ts +375 -0
  20. package/dist/effect/contact-groups.js +29 -0
  21. package/dist/effect/contacts.d.ts +35 -19
  22. package/dist/effect/contacts.js +1 -1
  23. package/dist/effect/conversations.d.ts +191 -44
  24. package/dist/effect/conversations.js +1 -1
  25. package/dist/effect/custom-fields.d.ts +111 -0
  26. package/dist/effect/custom-fields.js +17 -0
  27. package/dist/effect/design.d.ts +2 -2
  28. package/dist/effect/design.js +1 -1
  29. package/dist/effect/email.d.ts +931 -97
  30. package/dist/effect/email.js +27 -3
  31. package/dist/effect/generated-metadata.d.ts +16 -4
  32. package/dist/effect/generated.d.ts +19596 -10819
  33. package/dist/effect/index.d.ts +6 -1
  34. package/dist/effect/index.js +8 -3
  35. package/dist/effect/internal/operation.d.ts +124 -26
  36. package/dist/effect/media.d.ts +8 -8
  37. package/dist/effect/media.js +1 -1
  38. package/dist/effect/messages.d.ts +473 -64
  39. package/dist/effect/messages.js +5 -3
  40. package/dist/effect/operations.d.ts +6 -6
  41. package/dist/effect/operations.js +1 -1
  42. package/dist/effect/organizations.d.ts +7 -110
  43. package/dist/effect/organizations.js +2 -4
  44. package/dist/effect/retry.js +1 -1
  45. package/dist/effect/scheduled-messages.d.ts +96 -12
  46. package/dist/effect/scheduled-messages.js +5 -3
  47. package/dist/effect/templates.d.ts +35 -295
  48. package/dist/effect/templates.js +3 -5
  49. package/dist/effect/unsubscribe-groups.d.ts +161 -0
  50. package/dist/effect/unsubscribe-groups.js +25 -0
  51. package/dist/effect/webhooks.d.ts +52 -18
  52. package/dist/effect/webhooks.js +2 -2
  53. package/dist/index.js +2 -2
  54. package/dist/{normalize-BiIJnycv.js → normalize-B79uJIeb.js} +13 -14
  55. package/dist/normalize.d.ts +3 -7
  56. package/dist/{operation-B1knNlxk.js → operation-02YX3hY9.js} +144 -8
  57. package/dist/promises/errors.gen.d.ts +47 -39
  58. package/dist/promises/index.d.ts +19 -4
  59. package/dist/promises/index.js +2 -2
  60. package/dist/promises/types.gen.d.ts +1 -1
  61. package/dist/{promises-n1opem5V.js → promises-8MaPNAam.js} +1679 -267
  62. package/dist/service-map.d.ts +221 -8
  63. package/package.json +29 -9
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.js";
2
- import { n as make } from "../operation-B1knNlxk.js";
3
- import { s as CreateTemplatePayload, x as UpdateTemplatePayload } from "../client-BmZK_uCt.js";
2
+ import { n as make } from "../operation-02YX3hY9.js";
3
+ import { C as UpdateTemplatePayload, s as CreateTemplatePayload } from "../client-DCM6U0-I.js";
4
4
  //#region src/effect/templates.ts
5
5
  var templates_exports = /* @__PURE__ */ __exportAll({
6
6
  CreatePayload: () => CreateTemplatePayload,
@@ -21,7 +21,6 @@ var templates_exports = /* @__PURE__ */ __exportAll({
21
21
  getPublication: () => getPublication,
22
22
  issueGitCredential: () => issueGitCredential,
23
23
  list: () => list,
24
- listDashboard: () => listDashboard,
25
24
  listFamilies: () => listFamilies,
26
25
  listInputContracts: () => listInputContracts,
27
26
  openWorkspace: () => openWorkspace,
@@ -40,7 +39,6 @@ var templates_exports = /* @__PURE__ */ __exportAll({
40
39
  });
41
40
  const list = make("templatesList");
42
41
  const create = make("templatesCreate");
43
- const listDashboard = make("templatesListDashboard");
44
42
  const listFamilies = make("templatesListFamilies");
45
43
  const createFamily = make("templatesCreateFamily");
46
44
  const getFamily = make("templatesGetFamily");
@@ -71,6 +69,6 @@ const getInputContract = make("templatesGetInputContract");
71
69
  const diffWorkspace = make("templatesDiffWorkspace");
72
70
  const workspaceHistory = make("templatesWorkspaceHistory");
73
71
  //#endregion
74
- export { CreateTemplatePayload as CreatePayload, UpdateTemplatePayload as UpdatePayload, attachFamilyMember, attachWorkspaceResource, checkWorkspace, create, createFamily, createFamilyFromTemplate, deleteFamily, detachFamilyMember, diffWorkspace, getById, getFamily, getGitRepository, getInputContract, getPublication, issueGitCredential, list, listDashboard, listFamilies, listInputContracts, openWorkspace, patchWorkspace, publish, reconcileWorkspace, remove, removeWorkspaceResource, renameFamily, renderWorkspaceFixture, resolveWorkspaceConflict, restoreWorkspace, saveWorkspace, templates_exports as t, update, workspaceHistory };
72
+ export { CreateTemplatePayload as CreatePayload, UpdateTemplatePayload as UpdatePayload, attachFamilyMember, attachWorkspaceResource, checkWorkspace, create, createFamily, createFamilyFromTemplate, deleteFamily, detachFamilyMember, diffWorkspace, getById, getFamily, getGitRepository, getInputContract, getPublication, issueGitCredential, list, listFamilies, listInputContracts, openWorkspace, patchWorkspace, publish, reconcileWorkspace, remove, removeWorkspaceResource, renameFamily, renderWorkspaceFixture, resolveWorkspaceConflict, restoreWorkspace, saveWorkspace, templates_exports as t, update, workspaceHistory };
75
73
 
76
74
  //# sourceMappingURL=templates.js.map
@@ -0,0 +1,161 @@
1
+ export declare const list: ((input?: {
2
+ readonly page?: string | null | undefined;
3
+ readonly limit?: string | null | undefined;
4
+ } | undefined) => import("effect/Effect").Effect<{
5
+ readonly items: readonly {
6
+ readonly id: string & import("effect/Brand").Brand<"UnsubscribeId">;
7
+ readonly organizationId: string;
8
+ readonly name: string;
9
+ readonly description: string | null;
10
+ readonly memberCount: number;
11
+ readonly createdAt: string;
12
+ readonly updatedAt: string;
13
+ }[];
14
+ readonly pagination: {
15
+ readonly page: number;
16
+ readonly limit: number;
17
+ readonly total: number;
18
+ readonly totalPages: number;
19
+ };
20
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>) & {
21
+ readonly pages: (input?: {
22
+ readonly page?: string | null | undefined;
23
+ readonly limit?: string | null | undefined;
24
+ } | undefined) => import("effect/Stream").Stream<{
25
+ readonly items: readonly {
26
+ readonly id: string & import("effect/Brand").Brand<"UnsubscribeId">;
27
+ readonly organizationId: string;
28
+ readonly name: string;
29
+ readonly description: string | null;
30
+ readonly memberCount: number;
31
+ readonly createdAt: string;
32
+ readonly updatedAt: string;
33
+ }[];
34
+ readonly pagination: {
35
+ readonly page: number;
36
+ readonly limit: number;
37
+ readonly total: number;
38
+ readonly totalPages: number;
39
+ };
40
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
41
+ readonly items: (input?: {
42
+ readonly page?: string | null | undefined;
43
+ readonly limit?: string | null | undefined;
44
+ } | undefined) => import("effect/Stream").Stream<{
45
+ readonly id: string & import("effect/Brand").Brand<"UnsubscribeId">;
46
+ readonly organizationId: string;
47
+ readonly name: string;
48
+ readonly description: string | null;
49
+ readonly memberCount: number;
50
+ readonly createdAt: string;
51
+ readonly updatedAt: string;
52
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
53
+ };
54
+ export declare const create: (input: {
55
+ readonly name: string;
56
+ readonly description?: string | null | undefined;
57
+ }) => import("effect/Effect").Effect<{
58
+ readonly id: string & import("effect/Brand").Brand<"UnsubscribeId">;
59
+ readonly organizationId: string;
60
+ readonly name: string;
61
+ readonly description: string | null;
62
+ readonly memberCount: number;
63
+ readonly createdAt: string;
64
+ readonly updatedAt: string;
65
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
66
+ export declare const update: (input: {
67
+ readonly id: string;
68
+ readonly name?: string | null | undefined;
69
+ readonly description?: string | null | undefined;
70
+ }) => import("effect/Effect").Effect<{
71
+ readonly id: string & import("effect/Brand").Brand<"UnsubscribeId">;
72
+ readonly organizationId: string;
73
+ readonly name: string;
74
+ readonly description: string | null;
75
+ readonly memberCount: number;
76
+ readonly createdAt: string;
77
+ readonly updatedAt: string;
78
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
79
+ export declare const remove: (input: {
80
+ readonly id: string;
81
+ }) => import("effect/Effect").Effect<{
82
+ readonly success: boolean;
83
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
84
+ export declare const listMembers: ((input: {
85
+ readonly groupId: string;
86
+ readonly page?: string | null | undefined;
87
+ readonly limit?: string | null | undefined;
88
+ }) => import("effect/Effect").Effect<{
89
+ readonly items: readonly {
90
+ readonly id: string;
91
+ readonly email: string;
92
+ readonly contactId: string | null;
93
+ readonly source: "api" | "complaint" | "link" | "manual";
94
+ readonly unsubscribedAt: string;
95
+ readonly createdAt: string;
96
+ }[];
97
+ readonly pagination: {
98
+ readonly page: number;
99
+ readonly limit: number;
100
+ readonly total: number;
101
+ readonly totalPages: number;
102
+ };
103
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>) & {
104
+ readonly pages: (input: {
105
+ readonly groupId: string;
106
+ readonly page?: string | null | undefined;
107
+ readonly limit?: string | null | undefined;
108
+ }) => import("effect/Stream").Stream<{
109
+ readonly items: readonly {
110
+ readonly id: string;
111
+ readonly email: string;
112
+ readonly contactId: string | null;
113
+ readonly source: "api" | "complaint" | "link" | "manual";
114
+ readonly unsubscribedAt: string;
115
+ readonly createdAt: string;
116
+ }[];
117
+ readonly pagination: {
118
+ readonly page: number;
119
+ readonly limit: number;
120
+ readonly total: number;
121
+ readonly totalPages: number;
122
+ };
123
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
124
+ readonly items: (input: {
125
+ readonly groupId: string;
126
+ readonly page?: string | null | undefined;
127
+ readonly limit?: string | null | undefined;
128
+ }) => import("effect/Stream").Stream<{
129
+ readonly id: string;
130
+ readonly email: string;
131
+ readonly contactId: string | null;
132
+ readonly source: "api" | "complaint" | "link" | "manual";
133
+ readonly unsubscribedAt: string;
134
+ readonly createdAt: string;
135
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
136
+ };
137
+ export declare const addEmails: (input: {
138
+ readonly groupId: string;
139
+ readonly emails: readonly string[];
140
+ readonly source?: string | null | undefined;
141
+ }) => import("effect/Effect").Effect<{
142
+ readonly added: number;
143
+ readonly skipped: number;
144
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
145
+ export declare const removeEmails: (input: {
146
+ readonly groupId: string;
147
+ readonly emails: readonly string[];
148
+ }) => import("effect/Effect").Effect<{
149
+ readonly removed: number;
150
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
151
+ export declare const checkSubscription: (input: {
152
+ readonly email: string;
153
+ readonly groupIds?: string | null | undefined;
154
+ }) => import("effect/Effect").Effect<{
155
+ readonly email: string;
156
+ readonly unsubscribedGroups: readonly {
157
+ readonly groupId: string;
158
+ readonly groupName: string;
159
+ readonly unsubscribedAt: string;
160
+ }[];
161
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
@@ -0,0 +1,25 @@
1
+ import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.js";
2
+ import { n as make } from "../operation-02YX3hY9.js";
3
+ //#region src/effect/unsubscribe-groups.ts
4
+ var unsubscribe_groups_exports = /* @__PURE__ */ __exportAll({
5
+ addEmails: () => addEmails,
6
+ checkSubscription: () => checkSubscription,
7
+ create: () => create,
8
+ list: () => list,
9
+ listMembers: () => listMembers,
10
+ remove: () => remove,
11
+ removeEmails: () => removeEmails,
12
+ update: () => update
13
+ });
14
+ const list = make("unsubscribeList");
15
+ const create = make("unsubscribeCreate");
16
+ const update = make("unsubscribeUpdate");
17
+ const remove = make("unsubscribeRemove");
18
+ const listMembers = make("unsubscribeListMembers");
19
+ const addEmails = make("unsubscribeAddEmails");
20
+ const removeEmails = make("unsubscribeRemoveEmails");
21
+ const checkSubscription = make("unsubscribeCheckSubscription");
22
+ //#endregion
23
+ export { addEmails, checkSubscription, create, list, listMembers, remove, removeEmails, unsubscribe_groups_exports as t, update };
24
+
25
+ //# sourceMappingURL=unsubscribe-groups.js.map
@@ -3,12 +3,13 @@ export declare const list: ((input?: {
3
3
  readonly page?: string | null | undefined;
4
4
  readonly limit?: string | null | undefined;
5
5
  readonly search?: string | null | undefined;
6
+ readonly status?: string | null | undefined;
6
7
  } | undefined) => import("effect/Effect").Effect<{
7
8
  readonly items: readonly {
8
9
  readonly id: string & import("effect/Brand").Brand<"WebhookEndpointId">;
9
10
  readonly name: string;
10
11
  readonly url: string;
11
- readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.ended" | "conversation.started" | "conversation.updated" | "domain.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "template.approved" | "template.created" | "template.deleted" | "template.rejected" | "template.updated" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
12
+ readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.updated" | "domain.updated" | "domain.warming.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
12
13
  readonly channels: readonly "email"[] | null;
13
14
  readonly status: "active" | "disabled";
14
15
  readonly hasCustomHeaders: boolean;
@@ -16,6 +17,13 @@ export declare const list: ((input?: {
16
17
  readonly lastSucceededAt: string | null;
17
18
  readonly createdAt: string;
18
19
  readonly updatedAt: string;
20
+ readonly deliveries: {
21
+ readonly total: number;
22
+ readonly pending: number;
23
+ readonly delivered: number;
24
+ readonly exhausted: number;
25
+ readonly cancelled: number;
26
+ };
19
27
  }[];
20
28
  readonly pagination: {
21
29
  readonly page: number;
@@ -23,17 +31,18 @@ export declare const list: ((input?: {
23
31
  readonly total: number;
24
32
  readonly totalPages: number;
25
33
  };
26
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>) & {
34
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>) & {
27
35
  readonly pages: (input?: {
28
36
  readonly page?: string | null | undefined;
29
37
  readonly limit?: string | null | undefined;
30
38
  readonly search?: string | null | undefined;
39
+ readonly status?: string | null | undefined;
31
40
  } | undefined) => import("effect/Stream").Stream<{
32
41
  readonly items: readonly {
33
42
  readonly id: string & import("effect/Brand").Brand<"WebhookEndpointId">;
34
43
  readonly name: string;
35
44
  readonly url: string;
36
- readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.ended" | "conversation.started" | "conversation.updated" | "domain.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "template.approved" | "template.created" | "template.deleted" | "template.rejected" | "template.updated" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
45
+ readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.updated" | "domain.updated" | "domain.warming.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
37
46
  readonly channels: readonly "email"[] | null;
38
47
  readonly status: "active" | "disabled";
39
48
  readonly hasCustomHeaders: boolean;
@@ -41,6 +50,13 @@ export declare const list: ((input?: {
41
50
  readonly lastSucceededAt: string | null;
42
51
  readonly createdAt: string;
43
52
  readonly updatedAt: string;
53
+ readonly deliveries: {
54
+ readonly total: number;
55
+ readonly pending: number;
56
+ readonly delivered: number;
57
+ readonly exhausted: number;
58
+ readonly cancelled: number;
59
+ };
44
60
  }[];
45
61
  readonly pagination: {
46
62
  readonly page: number;
@@ -48,16 +64,17 @@ export declare const list: ((input?: {
48
64
  readonly total: number;
49
65
  readonly totalPages: number;
50
66
  };
51
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
67
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
52
68
  readonly items: (input?: {
53
69
  readonly page?: string | null | undefined;
54
70
  readonly limit?: string | null | undefined;
55
71
  readonly search?: string | null | undefined;
72
+ readonly status?: string | null | undefined;
56
73
  } | undefined) => import("effect/Stream").Stream<{
57
74
  readonly id: string & import("effect/Brand").Brand<"WebhookEndpointId">;
58
75
  readonly name: string;
59
76
  readonly url: string;
60
- readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.ended" | "conversation.started" | "conversation.updated" | "domain.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "template.approved" | "template.created" | "template.deleted" | "template.rejected" | "template.updated" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
77
+ readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.updated" | "domain.updated" | "domain.warming.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
61
78
  readonly channels: readonly "email"[] | null;
62
79
  readonly status: "active" | "disabled";
63
80
  readonly hasCustomHeaders: boolean;
@@ -65,7 +82,14 @@ export declare const list: ((input?: {
65
82
  readonly lastSucceededAt: string | null;
66
83
  readonly createdAt: string;
67
84
  readonly updatedAt: string;
68
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
85
+ readonly deliveries: {
86
+ readonly total: number;
87
+ readonly pending: number;
88
+ readonly delivered: number;
89
+ readonly exhausted: number;
90
+ readonly cancelled: number;
91
+ };
92
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
69
93
  };
70
94
  export declare const create: (input: {
71
95
  readonly name: string;
@@ -81,7 +105,7 @@ export declare const create: (input: {
81
105
  readonly id: string & import("effect/Brand").Brand<"WebhookEndpointId">;
82
106
  readonly name: string;
83
107
  readonly url: string;
84
- readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.ended" | "conversation.started" | "conversation.updated" | "domain.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "template.approved" | "template.created" | "template.deleted" | "template.rejected" | "template.updated" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
108
+ readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.updated" | "domain.updated" | "domain.warming.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
85
109
  readonly channels: readonly "email"[] | null;
86
110
  readonly status: "active" | "disabled";
87
111
  readonly hasCustomHeaders: boolean;
@@ -91,14 +115,14 @@ export declare const create: (input: {
91
115
  readonly updatedAt: string;
92
116
  };
93
117
  readonly secret: import("effect/Redacted").Redacted<string>;
94
- }, import("./generated").BillingProviderError | import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").PaymentRequiredError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
118
+ }, import("./generated").BillingProviderError | import("./generated").ConflictError | import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").PaymentRequiredError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
95
119
  export declare const get: (input: {
96
120
  readonly id: string;
97
121
  }) => import("effect/Effect").Effect<{
98
122
  readonly id: string & import("effect/Brand").Brand<"WebhookEndpointId">;
99
123
  readonly name: string;
100
124
  readonly url: string;
101
- readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.ended" | "conversation.started" | "conversation.updated" | "domain.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "template.approved" | "template.created" | "template.deleted" | "template.rejected" | "template.updated" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
125
+ readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.updated" | "domain.updated" | "domain.warming.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
102
126
  readonly channels: readonly "email"[] | null;
103
127
  readonly status: "active" | "disabled";
104
128
  readonly hasCustomHeaders: boolean;
@@ -106,12 +130,12 @@ export declare const get: (input: {
106
130
  readonly lastSucceededAt: string | null;
107
131
  readonly createdAt: string;
108
132
  readonly updatedAt: string;
109
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
133
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
110
134
  export declare const remove: (input: {
111
135
  readonly id: string;
112
136
  }) => import("effect/Effect").Effect<{
113
137
  readonly success: boolean;
114
- }, import("./generated").BillingProviderError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
138
+ }, import("./generated").BillingProviderError | import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
115
139
  export declare const update: (input: {
116
140
  readonly id: string;
117
141
  readonly name?: string | null | undefined;
@@ -126,7 +150,7 @@ export declare const update: (input: {
126
150
  readonly id: string & import("effect/Brand").Brand<"WebhookEndpointId">;
127
151
  readonly name: string;
128
152
  readonly url: string;
129
- readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.ended" | "conversation.started" | "conversation.updated" | "domain.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "template.approved" | "template.created" | "template.deleted" | "template.rejected" | "template.updated" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
153
+ readonly eventTypes: readonly ("contact.created" | "contact.deleted" | "contact.updated" | "conversation.archived" | "conversation.created" | "conversation.updated" | "domain.updated" | "domain.warming.updated" | "message.bounced" | "message.complained" | "message.delivered" | "message.failed" | "message.read" | "message.received" | "message.sent" | "webhook.created" | "webhook.deleted" | "webhook.test" | "webhook.updated")[];
130
154
  readonly channels: readonly "email"[] | null;
131
155
  readonly status: "active" | "disabled";
132
156
  readonly hasCustomHeaders: boolean;
@@ -134,7 +158,7 @@ export declare const update: (input: {
134
158
  readonly lastSucceededAt: string | null;
135
159
  readonly createdAt: string;
136
160
  readonly updatedAt: string;
137
- }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
161
+ }, import("./generated").ConflictError | import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
138
162
  export declare const test: (input: {
139
163
  readonly id: string;
140
164
  readonly data?: {
@@ -168,7 +192,7 @@ export declare const test: (input: {
168
192
  readonly accepted: true;
169
193
  readonly eventId: string & import("effect/Brand").Brand<"WebhookEventId">;
170
194
  readonly deliveryId: string & import("effect/Brand").Brand<"WebhookDeliveryId">;
171
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
195
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
172
196
  export declare const getLogs: (input: {
173
197
  readonly webhookId: string;
174
198
  readonly limit?: string | null | undefined;
@@ -176,6 +200,8 @@ export declare const getLogs: (input: {
176
200
  readonly data: readonly {
177
201
  readonly id: string & import("effect/Brand").Brand<"WebhookDeliveryId">;
178
202
  readonly eventId: string & import("effect/Brand").Brand<"WebhookEventId">;
203
+ readonly eventType: string;
204
+ readonly occurredAt: string;
179
205
  readonly endpointId: string & import("effect/Brand").Brand<"WebhookEndpointId">;
180
206
  readonly status: "cancelled" | "delivered" | "exhausted" | "pending";
181
207
  readonly automaticAttempts: number;
@@ -201,16 +227,24 @@ export declare const getLogs: (input: {
201
227
  }[];
202
228
  }[];
203
229
  readonly hasMore: boolean;
204
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
230
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
205
231
  export declare const getStats: (input: {
206
232
  readonly webhookId: string;
233
+ readonly period?: string | null | undefined;
207
234
  }) => import("effect/Effect").Effect<{
208
235
  readonly total: number;
209
236
  readonly pending: number;
210
237
  readonly delivered: number;
211
238
  readonly exhausted: number;
212
239
  readonly cancelled: number;
213
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
240
+ readonly daily: readonly {
241
+ readonly date: string;
242
+ readonly pending: number;
243
+ readonly delivered: number;
244
+ readonly exhausted: number;
245
+ readonly cancelled: number;
246
+ }[];
247
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError, import("./client").Service>;
214
248
  export declare const retryDelivery: (input: {
215
249
  readonly webhookId: string;
216
250
  readonly deliveryId: string;
@@ -219,9 +253,9 @@ export declare const retryDelivery: (input: {
219
253
  readonly deliveryId: string & import("effect/Brand").Brand<"WebhookDeliveryId">;
220
254
  readonly attemptId: string & import("effect/Brand").Brand<"WebhookAttemptId">;
221
255
  readonly outcome: "failed" | "succeeded";
222
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
256
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
223
257
  export declare const regenerateSecret: (input: {
224
258
  readonly webhookId: string;
225
259
  }) => import("effect/Effect").Effect<{
226
260
  readonly secret: import("effect/Redacted").Redacted<string>;
227
- }, import("./generated").ForbiddenError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
261
+ }, import("./generated").ForbiddenError | import("./generated").GatewayTimeoutError | import("effect/unstable/http/HttpClientError").HttpClientError | import("./generated").InternalError | import("./generated").ResourceNotFoundError | import("effect/Schema").SchemaError | import("./generated").UnauthorizedError | import("./generated").ValidationError, import("./client").Service>;
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "../rolldown-runtime-D7D4PA-g.js";
2
- import { n as make } from "../operation-B1knNlxk.js";
3
- import { S as UpdateWebhookPayload, c as CreateWebhookPayload, v as TestWebhookPayload } from "../client-BmZK_uCt.js";
2
+ import { n as make } from "../operation-02YX3hY9.js";
3
+ import { b as TestWebhookPayload, c as CreateWebhookPayload, w as UpdateWebhookPayload } from "../client-DCM6U0-I.js";
4
4
  //#region src/effect/webhooks.ts
5
5
  var webhooks_exports = /* @__PURE__ */ __exportAll({
6
6
  CreatePayload: () => CreateWebhookPayload,
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import { _ as fromApiError, a as ExternalServiceError, c as InternalError, d as ResourceNotFoundError, f as SamvaApiError, g as WebhookEnqueueError, h as ValidationError, i as EmailChannelError, l as PaymentRequiredError, m as UnauthorizedError, n as BillingProviderError, o as FlagDisabledError, p as SamvaTransportError, r as ConflictError, s as ForbiddenError, t as createClient, u as RateLimitedError } from "./promises-n1opem5V.js";
2
- export { BillingProviderError, ConflictError, EmailChannelError, ExternalServiceError, FlagDisabledError, ForbiddenError, InternalError, PaymentRequiredError, RateLimitedError, ResourceNotFoundError, SamvaApiError, SamvaTransportError, UnauthorizedError, ValidationError, WebhookEnqueueError, createClient, fromApiError };
1
+ import { _ as SamvaTransportError, a as DeliveryUnavailableError, b as fromApiError, c as FlagDisabledError, d as InternalError, f as OnboardingReviewRequiredError, g as SamvaApiError, h as ResourceNotFoundError, i as ConflictError, l as ForbiddenError, m as RateLimitedError, n as AnalyticsQueryError, o as EmailChannelError, p as PaymentRequiredError, r as BillingProviderError, s as ExternalServiceError, t as createClient, u as GatewayTimeoutError, v as UnauthorizedError, y as ValidationError } from "./promises-8MaPNAam.js";
2
+ export { AnalyticsQueryError, BillingProviderError, ConflictError, DeliveryUnavailableError, EmailChannelError, ExternalServiceError, FlagDisabledError, ForbiddenError, GatewayTimeoutError, InternalError, OnboardingReviewRequiredError, PaymentRequiredError, RateLimitedError, ResourceNotFoundError, SamvaApiError, SamvaTransportError, UnauthorizedError, ValidationError, createClient, fromApiError };
@@ -2,23 +2,23 @@
2
2
  function toRecipientArray(recipient) {
3
3
  return Array.isArray(recipient) ? recipient : [recipient];
4
4
  }
5
- function normalizeMessageRecipient(recipient, channel) {
5
+ function normalizeMessageRecipient(recipient) {
6
6
  if (typeof recipient === "string") return { email: recipient };
7
7
  if ("contactId" in recipient || "email" in recipient || "phone" in recipient) return recipient;
8
8
  return { contactId: recipient.id };
9
9
  }
10
- function normalizeRecipients(recipient, channel) {
11
- return toRecipientArray(recipient).map((item) => normalizeMessageRecipient(item, channel));
10
+ function normalizeRecipients(recipient) {
11
+ return toRecipientArray(recipient).map((item) => normalizeMessageRecipient(item));
12
12
  }
13
13
  /**
14
14
  * cc / bcc payload fragment. `undefined` → omitted (JSON drops it anyway),
15
15
  * `null` → passed through (explicit "no recipients"), otherwise normalized.
16
16
  * This is the single canonical rule for both clients.
17
17
  */
18
- function ccBccPayload(key, value, channel) {
18
+ function ccBccPayload(key, value) {
19
19
  if (value === void 0) return {};
20
20
  if (value === null) return { [key]: null };
21
- return { [key]: normalizeRecipients(value, channel) };
21
+ return { [key]: normalizeRecipients(value) };
22
22
  }
23
23
  function normalizeReplyTo(replyTo) {
24
24
  if (replyTo === void 0 || replyTo === null) return replyTo;
@@ -45,29 +45,28 @@ function normalizeEmailContent(input) {
45
45
  };
46
46
  }
47
47
  function buildEmailSendPayload(input) {
48
- const { to, cc, bcc, conversationId, idempotencyKey, metadata, from, ...emailContent } = input;
48
+ const { to, cc, bcc, conversationId, metadata, from, ...emailContent } = input;
49
49
  return {
50
50
  channel: "email",
51
51
  conversationId,
52
- idempotencyKey,
53
52
  metadata,
54
53
  from,
55
- to: normalizeRecipients(to, "email"),
56
- ...ccBccPayload("cc", cc, "email"),
57
- ...ccBccPayload("bcc", bcc, "email"),
54
+ to: normalizeRecipients(to),
55
+ ...ccBccPayload("cc", cc),
56
+ ...ccBccPayload("bcc", bcc),
58
57
  email: normalizeEmailContent(emailContent)
59
58
  };
60
59
  }
61
60
  function buildMessagesSendPayload(input) {
62
61
  return {
63
62
  ...input,
64
- to: normalizeRecipients(input.to, input.channel),
65
- ...ccBccPayload("cc", input.cc, "email"),
66
- ...ccBccPayload("bcc", input.bcc, "email"),
63
+ to: normalizeRecipients(input.to),
64
+ ...ccBccPayload("cc", input.cc),
65
+ ...ccBccPayload("bcc", input.bcc),
67
66
  email: normalizeEmailContent(input.email ?? {})
68
67
  };
69
68
  }
70
69
  //#endregion
71
70
  export { buildMessagesSendPayload as n, replyToEmailsPayload as r, buildEmailSendPayload as t };
72
71
 
73
- //# sourceMappingURL=normalize-BiIJnycv.js.map
72
+ //# sourceMappingURL=normalize-B79uJIeb.js.map
@@ -2,16 +2,13 @@
2
2
  * Shared, pure send-input normalization for the Effect and Promise clients.
3
3
  *
4
4
  * No Effect, no I/O — plain functions. Both ergonomic layers import these
5
- * directly so recipient, replyTo, email-content, and per-channel body shaping
6
- * can't drift between the two clients. (The `templateSlug` drop fixed alongside
7
- * this extraction lived only in the Effect copy; the `from`-placement drift only
8
- * in the email helpers.) The wire-level parity tests are the proof.
5
+ * directly so recipient, replyTo, and email-content shaping cannot drift
6
+ * between the two clients. The wire-level parity tests are the proof.
9
7
  *
10
8
  * The generated payload types differ nominally between the two clients (they come
11
9
  * from two different codegen outputs) but are structurally identical, so these
12
10
  * builders return structural shapes and each client casts the assembled payload
13
- * to its own generated body type at the call site — the same cast both clients
14
- * already performed inline.
11
+ * to its own generated body type at the call site.
15
12
  */
16
13
  /** A recipient the caller may pass in ergonomic form. */
17
14
  type ErgonomicRecipient<Recipient> = Recipient | {
@@ -34,7 +31,6 @@ export interface EmailSendFields<Recipient> {
34
31
  readonly cc?: ErgonomicRecipient<Recipient> | ReadonlyArray<ErgonomicRecipient<Recipient>> | null | undefined;
35
32
  readonly bcc?: ErgonomicRecipient<Recipient> | ReadonlyArray<ErgonomicRecipient<Recipient>> | null | undefined;
36
33
  readonly conversationId?: string | null | undefined;
37
- readonly idempotencyKey?: string | null | undefined;
38
34
  readonly metadata?: Metadata;
39
35
  readonly from?: unknown;
40
36
  readonly replyTo?: ErgonomicReplyTo | null | undefined;