@automate.ax/integration-contracts 0.55.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 (136) hide show
  1. package/dist/airtable/api.d.ts +19 -0
  2. package/dist/airtable/api.js +44 -0
  3. package/dist/airtable/index.d.ts +353 -0
  4. package/dist/airtable/index.js +32 -0
  5. package/dist/airtable/schemas.d.ts +716 -0
  6. package/dist/airtable/schemas.js +184 -0
  7. package/dist/asana/api.d.ts +70 -0
  8. package/dist/asana/api.js +119 -0
  9. package/dist/asana/index.d.ts +384 -0
  10. package/dist/asana/index.js +38 -0
  11. package/dist/asana/schemas.d.ts +1060 -0
  12. package/dist/asana/schemas.js +512 -0
  13. package/dist/brevo/api.d.ts +31 -0
  14. package/dist/brevo/api.js +64 -0
  15. package/dist/brevo/index.d.ts +822 -0
  16. package/dist/brevo/index.js +51 -0
  17. package/dist/brevo/schemas.d.ts +1217 -0
  18. package/dist/brevo/schemas.js +332 -0
  19. package/dist/github/index.d.ts +37 -0
  20. package/dist/github/index.js +106 -0
  21. package/dist/github/schemas.d.ts +8014 -0
  22. package/dist/github/schemas.js +113 -0
  23. package/dist/gmail/gmail.d.ts +172 -0
  24. package/dist/gmail/gmail.js +405 -0
  25. package/dist/gmail/index.d.ts +262 -0
  26. package/dist/gmail/index.js +23 -0
  27. package/dist/gmail/schemas.d.ts +444 -0
  28. package/dist/gmail/schemas.js +242 -0
  29. package/dist/google-calendar/event-schemas.d.ts +117 -0
  30. package/dist/google-calendar/event-schemas.js +13 -0
  31. package/dist/google-calendar/google-calendar.d.ts +147 -0
  32. package/dist/google-calendar/google-calendar.js +583 -0
  33. package/dist/google-calendar/index.d.ts +365 -0
  34. package/dist/google-calendar/index.js +24 -0
  35. package/dist/google-calendar/schemas.d.ts +592 -0
  36. package/dist/google-calendar/schemas.js +379 -0
  37. package/dist/google-forms/event-schemas.d.ts +105 -0
  38. package/dist/google-forms/event-schemas.js +20 -0
  39. package/dist/google-forms/google-forms.d.ts +243 -0
  40. package/dist/google-forms/google-forms.js +581 -0
  41. package/dist/google-forms/index.d.ts +141 -0
  42. package/dist/google-forms/index.js +20 -0
  43. package/dist/google-forms/schemas.d.ts +618 -0
  44. package/dist/google-forms/schemas.js +383 -0
  45. package/dist/linear/api.d.ts +63 -0
  46. package/dist/linear/api.js +88 -0
  47. package/dist/linear/index.d.ts +1338 -0
  48. package/dist/linear/index.js +55 -0
  49. package/dist/linear/schemas.d.ts +1795 -0
  50. package/dist/linear/schemas.js +760 -0
  51. package/dist/outlook/graph.d.ts +34 -0
  52. package/dist/outlook/graph.js +98 -0
  53. package/dist/outlook/index.d.ts +115 -0
  54. package/dist/outlook/index.js +11 -0
  55. package/dist/outlook/schemas.d.ts +529 -0
  56. package/dist/outlook/schemas.js +312 -0
  57. package/dist/resend/index.d.ts +707 -0
  58. package/dist/resend/index.js +54 -0
  59. package/dist/resend/schemas.d.ts +1033 -0
  60. package/dist/resend/schemas.js +377 -0
  61. package/dist/slack/index.d.ts +151 -0
  62. package/dist/slack/index.js +22 -0
  63. package/dist/slack/schemas.d.ts +641 -0
  64. package/dist/slack/schemas.js +581 -0
  65. package/dist/teams/graph.d.ts +33 -0
  66. package/dist/teams/graph.js +95 -0
  67. package/dist/teams/index.d.ts +164 -0
  68. package/dist/teams/index.js +21 -0
  69. package/dist/teams/schemas.d.ts +675 -0
  70. package/dist/teams/schemas.js +365 -0
  71. package/dist/trello/api.d.ts +69 -0
  72. package/dist/trello/api.js +140 -0
  73. package/dist/trello/event-schemas.d.ts +1101 -0
  74. package/dist/trello/event-schemas.js +233 -0
  75. package/dist/trello/index.d.ts +721 -0
  76. package/dist/trello/index.js +35 -0
  77. package/dist/trello/schemas.d.ts +283 -0
  78. package/dist/trello/schemas.js +401 -0
  79. package/dist/triggers.d.ts +26 -0
  80. package/dist/triggers.js +33 -0
  81. package/dist/vercel/index.d.ts +1065 -0
  82. package/dist/vercel/index.js +114 -0
  83. package/dist/vercel/schemas.d.ts +1518 -0
  84. package/dist/vercel/schemas.js +335 -0
  85. package/dist/whatsapp/api.d.ts +62 -0
  86. package/dist/whatsapp/api.js +121 -0
  87. package/dist/whatsapp/index.d.ts +614 -0
  88. package/dist/whatsapp/index.js +35 -0
  89. package/dist/whatsapp/schemas.d.ts +926 -0
  90. package/dist/whatsapp/schemas.js +326 -0
  91. package/package.json +169 -0
  92. package/src/airtable/api.ts +66 -0
  93. package/src/airtable/index.ts +41 -0
  94. package/src/airtable/schemas.ts +231 -0
  95. package/src/asana/api.ts +171 -0
  96. package/src/asana/index.ts +49 -0
  97. package/src/asana/schemas.ts +655 -0
  98. package/src/brevo/api.ts +89 -0
  99. package/src/brevo/index.ts +66 -0
  100. package/src/brevo/schemas.ts +449 -0
  101. package/src/github/index.ts +217 -0
  102. package/src/github/schemas.ts +435 -0
  103. package/src/gmail/gmail.ts +577 -0
  104. package/src/gmail/index.ts +26 -0
  105. package/src/gmail/schemas.ts +327 -0
  106. package/src/google-calendar/event-schemas.ts +16 -0
  107. package/src/google-calendar/google-calendar.ts +727 -0
  108. package/src/google-calendar/index.ts +27 -0
  109. package/src/google-calendar/schemas.ts +529 -0
  110. package/src/google-forms/event-schemas.ts +26 -0
  111. package/src/google-forms/google-forms.ts +683 -0
  112. package/src/google-forms/index.ts +23 -0
  113. package/src/google-forms/schemas.ts +499 -0
  114. package/src/linear/api.ts +141 -0
  115. package/src/linear/index.ts +71 -0
  116. package/src/linear/schemas.ts +1060 -0
  117. package/src/outlook/graph.ts +132 -0
  118. package/src/outlook/index.ts +14 -0
  119. package/src/outlook/schemas.ts +388 -0
  120. package/src/resend/index.ts +70 -0
  121. package/src/resend/schemas.ts +462 -0
  122. package/src/slack/index.ts +29 -0
  123. package/src/slack/schemas.ts +737 -0
  124. package/src/teams/graph.ts +130 -0
  125. package/src/teams/index.ts +27 -0
  126. package/src/teams/schemas.ts +463 -0
  127. package/src/trello/api.ts +190 -0
  128. package/src/trello/event-schemas.ts +290 -0
  129. package/src/trello/index.ts +45 -0
  130. package/src/trello/schemas.ts +507 -0
  131. package/src/triggers.ts +68 -0
  132. package/src/vercel/index.ts +147 -0
  133. package/src/vercel/schemas.ts +594 -0
  134. package/src/whatsapp/api.ts +171 -0
  135. package/src/whatsapp/index.ts +46 -0
  136. package/src/whatsapp/schemas.ts +341 -0
@@ -0,0 +1,335 @@
1
+ import { z } from "zod";
2
+ export const VERCEL_DEPLOYMENT_EVENT_TYPES = [
3
+ "deployment.created",
4
+ "deployment.ready",
5
+ "deployment.succeeded",
6
+ "deployment.error",
7
+ "deployment.canceled",
8
+ "deployment.promoted",
9
+ ];
10
+ export const VERCEL_PROJECT_EVENT_TYPES = [
11
+ "project.created",
12
+ "project.removed",
13
+ "project.renamed",
14
+ ];
15
+ export const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_TYPES = [
16
+ "project.env-variable.created",
17
+ "project.env-variable.updated",
18
+ "project.env-variable.deleted",
19
+ ];
20
+ export const VERCEL_PROJECT_DOMAIN_EVENT_TYPES = [
21
+ "project.domain.created",
22
+ "project.domain.updated",
23
+ "project.domain.deleted",
24
+ "project.domain.verified",
25
+ "project.domain.unverified",
26
+ "project.domain.moved",
27
+ ];
28
+ export const VERCEL_INTEGRATION_CONFIGURATION_EVENT_TYPES = [
29
+ "integration-configuration.permission-upgraded",
30
+ "integration-configuration.removed",
31
+ "integration-configuration.scope-change-confirmed",
32
+ "integration-configuration.transferred",
33
+ ];
34
+ export const VERCEL_WEBHOOK_EVENT_TYPES = [
35
+ ...VERCEL_DEPLOYMENT_EVENT_TYPES,
36
+ ...VERCEL_PROJECT_EVENT_TYPES,
37
+ ...VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_TYPES,
38
+ ...VERCEL_PROJECT_DOMAIN_EVENT_TYPES,
39
+ ...VERCEL_INTEGRATION_CONFIGURATION_EVENT_TYPES,
40
+ ];
41
+ const VERCEL_TEAM_ACTOR_SCHEMA = z
42
+ .looseObject({
43
+ /** Stable Vercel team ID. */
44
+ id: z.string(),
45
+ })
46
+ .catchall(z.json());
47
+ const VERCEL_USER_ACTOR_SCHEMA = z
48
+ .looseObject({
49
+ /** Stable Vercel user ID. */
50
+ id: z.string(),
51
+ })
52
+ .catchall(z.json());
53
+ const VERCEL_ACTOR_SCHEMA = z.object({
54
+ /** Team that owns the affected resource, for team installations. */
55
+ team: VERCEL_TEAM_ACTOR_SCHEMA.nullable(),
56
+ /** User that initiated the event, when available. */
57
+ user: VERCEL_USER_ACTOR_SCHEMA.nullable(),
58
+ });
59
+ const VERCEL_PROJECT_REFERENCE_SCHEMA = z
60
+ .looseObject({
61
+ /** Stable Vercel project ID. */
62
+ id: z.string(),
63
+ /** Current project name, when included by Vercel. */
64
+ name: z.string().optional(),
65
+ })
66
+ .catchall(z.json());
67
+ const VERCEL_NAMED_PROJECT_REFERENCE_SCHEMA = VERCEL_PROJECT_REFERENCE_SCHEMA.extend({
68
+ /** Current project name. */
69
+ name: z.string(),
70
+ });
71
+ const VERCEL_DEPLOYMENT_REFERENCE_SCHEMA = z
72
+ .looseObject({
73
+ /** Stable Vercel deployment ID. */
74
+ id: z.string(),
75
+ /** Deployment or project name. */
76
+ name: z.string(),
77
+ /** Vercel deployment hostname. */
78
+ url: z.string(),
79
+ })
80
+ .catchall(z.json());
81
+ const VERCEL_DOMAIN_REFERENCE_SCHEMA = z
82
+ .looseObject({
83
+ /** Project domain name. */
84
+ name: z.string(),
85
+ })
86
+ .catchall(z.json());
87
+ const VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
88
+ /** Deployment affected by this event. */
89
+ deployment: VERCEL_DEPLOYMENT_REFERENCE_SCHEMA,
90
+ /** Project that owns the deployment. */
91
+ project: VERCEL_PROJECT_REFERENCE_SCHEMA,
92
+ /** Deployment target, when one was assigned. */
93
+ target: z.enum(["production", "staging"]).nullable().optional(),
94
+ }).catchall(z.json());
95
+ const VERCEL_PROJECT_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
96
+ /** Project affected by this event. */
97
+ project: VERCEL_NAMED_PROJECT_REFERENCE_SCHEMA,
98
+ }).catchall(z.json());
99
+ const VERCEL_PROJECT_RENAMED_EVENT_PAYLOAD_SCHEMA = VERCEL_PROJECT_EVENT_PAYLOAD_SCHEMA.extend({
100
+ /** Project name before the rename. */
101
+ previousName: z.string(),
102
+ });
103
+ const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
104
+ /** Stable environment variable ID. */
105
+ envVarId: z.string(),
106
+ /** Stable project ID. */
107
+ projectId: z.string(),
108
+ }).catchall(z.json());
109
+ const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_DELETED_EVENT_PAYLOAD_SCHEMA = VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_PAYLOAD_SCHEMA.extend({
110
+ /** Stable environment variable ID, when Vercel still has it. */
111
+ envVarId: z.string().nullable(),
112
+ });
113
+ const VERCEL_PROJECT_DOMAIN_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
114
+ /** Domain affected by this event. */
115
+ domain: VERCEL_DOMAIN_REFERENCE_SCHEMA,
116
+ /** Project that owns the domain. */
117
+ project: VERCEL_PROJECT_REFERENCE_SCHEMA,
118
+ }).catchall(z.json());
119
+ const VERCEL_PROJECT_DOMAIN_UPDATED_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
120
+ /** Project-domain settings before the update. */
121
+ previous: z
122
+ .looseObject({
123
+ domain: z.string(),
124
+ gitBranch: z.string().nullable(),
125
+ redirect: z.string().nullable(),
126
+ redirectStatusCode: z.number().int().nullable(),
127
+ })
128
+ .catchall(z.json()),
129
+ /** Project-domain settings after the update. */
130
+ next: z
131
+ .looseObject({
132
+ domain: z.string(),
133
+ gitBranch: z.string().nullable(),
134
+ redirect: z.string().nullable(),
135
+ redirectStatusCode: z.number().int().nullable(),
136
+ })
137
+ .catchall(z.json()),
138
+ /** Project that owns the domain. */
139
+ project: VERCEL_PROJECT_REFERENCE_SCHEMA,
140
+ });
141
+ const VERCEL_PROJECT_DOMAIN_MOVED_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
142
+ /** Domain moved between projects. */
143
+ domain: VERCEL_DOMAIN_REFERENCE_SCHEMA,
144
+ /** Project that previously owned the domain. */
145
+ from: z.looseObject({ projectId: z.string() }).catchall(z.json()),
146
+ /** Whether the move left a redirect on the previous project. */
147
+ isRedirect: z.boolean(),
148
+ /** Project that now owns the domain. */
149
+ to: z.looseObject({ projectId: z.string() }).catchall(z.json()),
150
+ });
151
+ const VERCEL_INTEGRATION_CONFIGURATION_SCHEMA = z
152
+ .looseObject({
153
+ /** Stable Vercel integration configuration ID. */
154
+ id: z.string(),
155
+ /** Project access mode selected for the installation. */
156
+ projectSelection: z.enum(["all", "selected"]).optional(),
157
+ /** Stable IDs of projects selected for the installation. */
158
+ projects: z.string().array().optional(),
159
+ /** OAuth scopes approved for the installation. */
160
+ scopes: z.string().array().optional(),
161
+ })
162
+ .catchall(z.json());
163
+ const VERCEL_INTEGRATION_CONFIGURATION_EVENT_PAYLOAD_SCHEMA = VERCEL_ACTOR_SCHEMA.extend({
164
+ /** Integration installation configuration affected by this event. */
165
+ configuration: VERCEL_INTEGRATION_CONFIGURATION_SCHEMA,
166
+ }).catchall(z.json());
167
+ const VERCEL_INTEGRATION_CONFIGURATION_PERMISSION_UPGRADED_EVENT_PAYLOAD_SCHEMA = VERCEL_INTEGRATION_CONFIGURATION_EVENT_PAYLOAD_SCHEMA.extend({
168
+ configuration: VERCEL_INTEGRATION_CONFIGURATION_SCHEMA.extend({
169
+ /** Current project access mode. */
170
+ projectSelection: z.enum(["all", "selected"]),
171
+ /** Project IDs currently available to the installation. */
172
+ projects: z.string().array(),
173
+ }),
174
+ /** Project IDs added to and removed from the installation. */
175
+ projects: z.object({
176
+ added: z.string().array(),
177
+ removed: z.string().array(),
178
+ }),
179
+ });
180
+ const VERCEL_INTEGRATION_CONFIGURATION_REMOVED_EVENT_PAYLOAD_SCHEMA = VERCEL_INTEGRATION_CONFIGURATION_EVENT_PAYLOAD_SCHEMA.extend({
181
+ configuration: VERCEL_INTEGRATION_CONFIGURATION_SCHEMA.extend({
182
+ /** Project IDs available before the installation was removed. */
183
+ projects: z.string().array(),
184
+ }),
185
+ });
186
+ const VERCEL_INTEGRATION_CONFIGURATION_SCOPE_CHANGE_CONFIRMED_EVENT_PAYLOAD_SCHEMA = VERCEL_INTEGRATION_CONFIGURATION_EVENT_PAYLOAD_SCHEMA.extend({
187
+ configuration: VERCEL_INTEGRATION_CONFIGURATION_SCHEMA.extend({
188
+ /** OAuth scopes approved after the change. */
189
+ scopes: z.string().array(),
190
+ }),
191
+ });
192
+ const VERCEL_INTEGRATION_CONFIGURATION_TRANSFERRED_EVENT_PAYLOAD_SCHEMA = z
193
+ .looseObject({
194
+ /** Integration installation configuration that was transferred. */
195
+ configuration: VERCEL_INTEGRATION_CONFIGURATION_SCHEMA,
196
+ /** Stable installation ID. */
197
+ installationId: z.string(),
198
+ /** New personal-account owner ID, when transferred to a user. */
199
+ newAccountId: z.string().nullable(),
200
+ /** New team owner ID, when transferred to a team. */
201
+ newTeamId: z.string().nullable(),
202
+ /** Previous personal-account owner ID, when transferred from a user. */
203
+ previousAccountId: z.string().nullable(),
204
+ /** Previous team owner ID, when transferred from a team. */
205
+ previousTeamId: z.string().nullable(),
206
+ })
207
+ .catchall(z.json());
208
+ /** Vercel deployment-created webhook. */
209
+ export const VERCEL_DEPLOYMENT_CREATED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("deployment.created"), VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA);
210
+ /** Vercel deployment-ready webhook. */
211
+ export const VERCEL_DEPLOYMENT_READY_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("deployment.ready"), VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA);
212
+ /** Vercel deployment-succeeded webhook. */
213
+ export const VERCEL_DEPLOYMENT_SUCCEEDED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("deployment.succeeded"), VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA);
214
+ /** Vercel deployment-error webhook. */
215
+ export const VERCEL_DEPLOYMENT_FAILED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("deployment.error"), VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA);
216
+ /** Vercel deployment-canceled webhook. */
217
+ export const VERCEL_DEPLOYMENT_CANCELED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("deployment.canceled"), VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA);
218
+ /** Vercel deployment-promoted webhook. */
219
+ export const VERCEL_DEPLOYMENT_PROMOTED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("deployment.promoted"), VERCEL_DEPLOYMENT_EVENT_PAYLOAD_SCHEMA);
220
+ /** Vercel project-created webhook. */
221
+ export const VERCEL_PROJECT_CREATED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.created"), VERCEL_PROJECT_EVENT_PAYLOAD_SCHEMA);
222
+ /** Vercel project-removed webhook. */
223
+ export const VERCEL_PROJECT_REMOVED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.removed"), VERCEL_PROJECT_EVENT_PAYLOAD_SCHEMA);
224
+ /** Vercel project-renamed webhook. */
225
+ export const VERCEL_PROJECT_RENAMED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.renamed"), VERCEL_PROJECT_RENAMED_EVENT_PAYLOAD_SCHEMA);
226
+ /** Vercel project environment-variable-created webhook. */
227
+ export const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_CREATED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.env-variable.created"), VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_PAYLOAD_SCHEMA);
228
+ /** Vercel project environment-variable-updated webhook. */
229
+ export const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_UPDATED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.env-variable.updated"), VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_PAYLOAD_SCHEMA);
230
+ /** Vercel project environment-variable-deleted webhook. */
231
+ export const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_DELETED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.env-variable.deleted"), VERCEL_PROJECT_ENVIRONMENT_VARIABLE_DELETED_EVENT_PAYLOAD_SCHEMA);
232
+ /** Vercel project-domain-created webhook. */
233
+ export const VERCEL_PROJECT_DOMAIN_CREATED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.domain.created"), VERCEL_PROJECT_DOMAIN_EVENT_PAYLOAD_SCHEMA);
234
+ /** Vercel project-domain-updated webhook. */
235
+ export const VERCEL_PROJECT_DOMAIN_UPDATED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.domain.updated"), VERCEL_PROJECT_DOMAIN_UPDATED_EVENT_PAYLOAD_SCHEMA);
236
+ /** Vercel project-domain-deleted webhook. */
237
+ export const VERCEL_PROJECT_DOMAIN_DELETED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.domain.deleted"), VERCEL_PROJECT_DOMAIN_EVENT_PAYLOAD_SCHEMA);
238
+ /** Vercel project-domain-verified webhook. */
239
+ export const VERCEL_PROJECT_DOMAIN_VERIFIED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.domain.verified"), VERCEL_PROJECT_DOMAIN_EVENT_PAYLOAD_SCHEMA);
240
+ /** Vercel project-domain-unverified webhook. */
241
+ export const VERCEL_PROJECT_DOMAIN_UNVERIFIED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.domain.unverified"), VERCEL_PROJECT_DOMAIN_EVENT_PAYLOAD_SCHEMA);
242
+ /** Vercel project-domain-moved webhook. */
243
+ export const VERCEL_PROJECT_DOMAIN_MOVED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("project.domain.moved"), VERCEL_PROJECT_DOMAIN_MOVED_EVENT_PAYLOAD_SCHEMA);
244
+ /** Vercel integration-configuration permission-upgraded webhook. */
245
+ export const VERCEL_INTEGRATION_CONFIGURATION_PERMISSION_UPGRADED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("integration-configuration.permission-upgraded"), VERCEL_INTEGRATION_CONFIGURATION_PERMISSION_UPGRADED_EVENT_PAYLOAD_SCHEMA);
246
+ /** Vercel integration-configuration-removed webhook. */
247
+ export const VERCEL_INTEGRATION_CONFIGURATION_REMOVED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("integration-configuration.removed"), VERCEL_INTEGRATION_CONFIGURATION_REMOVED_EVENT_PAYLOAD_SCHEMA);
248
+ /** Vercel integration-configuration scope-change-confirmed webhook. */
249
+ export const VERCEL_INTEGRATION_CONFIGURATION_SCOPE_CHANGE_CONFIRMED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("integration-configuration.scope-change-confirmed"), VERCEL_INTEGRATION_CONFIGURATION_SCOPE_CHANGE_CONFIRMED_EVENT_PAYLOAD_SCHEMA);
250
+ /** Vercel integration-configuration-transferred webhook. */
251
+ export const VERCEL_INTEGRATION_CONFIGURATION_TRANSFERRED_EVENT_SCHEMA = vercelWebhookEventSchema(z.literal("integration-configuration.transferred"), VERCEL_INTEGRATION_CONFIGURATION_TRANSFERRED_EVENT_PAYLOAD_SCHEMA);
252
+ /** Supported Vercel deployment lifecycle webhook. */
253
+ export const VERCEL_DEPLOYMENT_EVENT_SCHEMA = z.discriminatedUnion("type", [
254
+ VERCEL_DEPLOYMENT_CREATED_EVENT_SCHEMA,
255
+ VERCEL_DEPLOYMENT_READY_EVENT_SCHEMA,
256
+ VERCEL_DEPLOYMENT_SUCCEEDED_EVENT_SCHEMA,
257
+ VERCEL_DEPLOYMENT_FAILED_EVENT_SCHEMA,
258
+ VERCEL_DEPLOYMENT_CANCELED_EVENT_SCHEMA,
259
+ VERCEL_DEPLOYMENT_PROMOTED_EVENT_SCHEMA,
260
+ ]);
261
+ /** Supported Vercel project lifecycle webhook. */
262
+ export const VERCEL_PROJECT_EVENT_SCHEMA = z.discriminatedUnion("type", [
263
+ VERCEL_PROJECT_CREATED_EVENT_SCHEMA,
264
+ VERCEL_PROJECT_REMOVED_EVENT_SCHEMA,
265
+ VERCEL_PROJECT_RENAMED_EVENT_SCHEMA,
266
+ ]);
267
+ /** Supported Vercel project environment-variable webhook. */
268
+ export const VERCEL_PROJECT_ENVIRONMENT_VARIABLE_EVENT_SCHEMA = z.discriminatedUnion("type", [
269
+ VERCEL_PROJECT_ENVIRONMENT_VARIABLE_CREATED_EVENT_SCHEMA,
270
+ VERCEL_PROJECT_ENVIRONMENT_VARIABLE_UPDATED_EVENT_SCHEMA,
271
+ VERCEL_PROJECT_ENVIRONMENT_VARIABLE_DELETED_EVENT_SCHEMA,
272
+ ]);
273
+ /** Supported Vercel project-domain webhook. */
274
+ export const VERCEL_PROJECT_DOMAIN_EVENT_SCHEMA = z.discriminatedUnion("type", [
275
+ VERCEL_PROJECT_DOMAIN_CREATED_EVENT_SCHEMA,
276
+ VERCEL_PROJECT_DOMAIN_UPDATED_EVENT_SCHEMA,
277
+ VERCEL_PROJECT_DOMAIN_DELETED_EVENT_SCHEMA,
278
+ VERCEL_PROJECT_DOMAIN_VERIFIED_EVENT_SCHEMA,
279
+ VERCEL_PROJECT_DOMAIN_UNVERIFIED_EVENT_SCHEMA,
280
+ VERCEL_PROJECT_DOMAIN_MOVED_EVENT_SCHEMA,
281
+ ]);
282
+ /** Supported Vercel integration-configuration webhook. */
283
+ export const VERCEL_INTEGRATION_CONFIGURATION_EVENT_SCHEMA = z.discriminatedUnion("type", [
284
+ VERCEL_INTEGRATION_CONFIGURATION_PERMISSION_UPGRADED_EVENT_SCHEMA,
285
+ VERCEL_INTEGRATION_CONFIGURATION_REMOVED_EVENT_SCHEMA,
286
+ VERCEL_INTEGRATION_CONFIGURATION_SCOPE_CHANGE_CONFIRMED_EVENT_SCHEMA,
287
+ VERCEL_INTEGRATION_CONFIGURATION_TRANSFERRED_EVENT_SCHEMA,
288
+ ]);
289
+ /** Every Vercel webhook handled by the integration. */
290
+ export const VERCEL_WEBHOOK_EVENT_SCHEMA = z.discriminatedUnion("type", [
291
+ VERCEL_DEPLOYMENT_CREATED_EVENT_SCHEMA,
292
+ VERCEL_DEPLOYMENT_READY_EVENT_SCHEMA,
293
+ VERCEL_DEPLOYMENT_SUCCEEDED_EVENT_SCHEMA,
294
+ VERCEL_DEPLOYMENT_FAILED_EVENT_SCHEMA,
295
+ VERCEL_DEPLOYMENT_CANCELED_EVENT_SCHEMA,
296
+ VERCEL_DEPLOYMENT_PROMOTED_EVENT_SCHEMA,
297
+ VERCEL_PROJECT_CREATED_EVENT_SCHEMA,
298
+ VERCEL_PROJECT_REMOVED_EVENT_SCHEMA,
299
+ VERCEL_PROJECT_RENAMED_EVENT_SCHEMA,
300
+ VERCEL_PROJECT_ENVIRONMENT_VARIABLE_CREATED_EVENT_SCHEMA,
301
+ VERCEL_PROJECT_ENVIRONMENT_VARIABLE_UPDATED_EVENT_SCHEMA,
302
+ VERCEL_PROJECT_ENVIRONMENT_VARIABLE_DELETED_EVENT_SCHEMA,
303
+ VERCEL_PROJECT_DOMAIN_CREATED_EVENT_SCHEMA,
304
+ VERCEL_PROJECT_DOMAIN_UPDATED_EVENT_SCHEMA,
305
+ VERCEL_PROJECT_DOMAIN_DELETED_EVENT_SCHEMA,
306
+ VERCEL_PROJECT_DOMAIN_VERIFIED_EVENT_SCHEMA,
307
+ VERCEL_PROJECT_DOMAIN_UNVERIFIED_EVENT_SCHEMA,
308
+ VERCEL_PROJECT_DOMAIN_MOVED_EVENT_SCHEMA,
309
+ VERCEL_INTEGRATION_CONFIGURATION_PERMISSION_UPGRADED_EVENT_SCHEMA,
310
+ VERCEL_INTEGRATION_CONFIGURATION_REMOVED_EVENT_SCHEMA,
311
+ VERCEL_INTEGRATION_CONFIGURATION_SCOPE_CHANGE_CONFIRMED_EVENT_SCHEMA,
312
+ VERCEL_INTEGRATION_CONFIGURATION_TRANSFERRED_EVENT_SCHEMA,
313
+ ]);
314
+ /**
315
+ * Creates one typed Vercel webhook envelope schema.
316
+ *
317
+ * @param type - Provider event discriminator schema.
318
+ * @param payload - Provider payload schema for the event.
319
+ */
320
+ function vercelWebhookEventSchema(type, payload) {
321
+ return z
322
+ .looseObject({
323
+ /** When Vercel created the event, as Unix milliseconds. */
324
+ createdAt: z.number().int().nonnegative(),
325
+ /** Stable webhook delivery ID. */
326
+ id: z.string(),
327
+ /** Vercel region that emitted the event. */
328
+ region: z.string().nullable(),
329
+ /** Provider payload for this event type. */
330
+ payload,
331
+ /** Provider event discriminator. */
332
+ type,
333
+ })
334
+ .catchall(z.json());
335
+ }
@@ -0,0 +1,62 @@
1
+ import type { JsonObject } from "type-fest";
2
+ import { z } from "zod";
3
+ export declare const WHATSAPP_GRAPH_API_VERSION = "v26.0";
4
+ /** Options for one authenticated WhatsApp Graph API request. */
5
+ export interface WhatsAppApiRequestOptions<TSchema extends z.ZodType> {
6
+ /** JSON request body. */
7
+ body?: JsonObject;
8
+ /** HTTP verb. */
9
+ method?: "DELETE" | "GET" | "POST";
10
+ /** Schema that validates and types the successful response. */
11
+ responseSchema: TSchema;
12
+ }
13
+ /** Authenticated WhatsApp Business Platform helper for custom actions. */
14
+ export interface WhatsAppApi {
15
+ /** Meta Business Portfolio ID that owns the connected assets. */
16
+ businessId: string;
17
+ /** Connected WhatsApp business phone-number ID. */
18
+ phoneNumberId: string;
19
+ /** Connected WhatsApp Business Account ID. */
20
+ wabaId: string;
21
+ /** Calls a Graph API path under the pinned platform version. */
22
+ request<TSchema extends z.ZodType>(path: string, options: WhatsAppApiRequestOptions<TSchema>): Promise<z.output<TSchema>>;
23
+ }
24
+ /** Structured error returned by Meta's Graph API. */
25
+ export declare class WhatsAppApiError extends Error {
26
+ readonly code?: number;
27
+ readonly details?: string;
28
+ readonly fbtraceId?: string;
29
+ readonly retryAfter?: number;
30
+ readonly status: number;
31
+ readonly subcode?: number;
32
+ readonly type?: string;
33
+ /**
34
+ * Creates a structured Graph API error.
35
+ *
36
+ * @param options - Provider and transport error details.
37
+ * @param options.code - Meta Graph API error code.
38
+ * @param options.details - WhatsApp-specific failure details.
39
+ * @param options.fbtraceId - Meta trace identifier.
40
+ * @param options.message - Human-readable provider message.
41
+ * @param options.retryAfter - Retry delay in seconds.
42
+ * @param options.status - HTTP response status.
43
+ * @param options.subcode - Meta Graph API error subcode.
44
+ * @param options.type - Meta error type.
45
+ */
46
+ constructor(options: {
47
+ code?: number;
48
+ details?: string;
49
+ fbtraceId?: string;
50
+ message: string;
51
+ retryAfter?: number;
52
+ status: number;
53
+ subcode?: number;
54
+ type?: string;
55
+ });
56
+ }
57
+ /**
58
+ * Creates an authenticated WhatsApp Business Platform client.
59
+ *
60
+ * @param secret - Resolved WhatsApp integration secret.
61
+ */
62
+ export declare function getWhatsAppApi(secret: Record<string, unknown>): WhatsAppApi;
@@ -0,0 +1,121 @@
1
+ import { z } from "zod";
2
+ export const WHATSAPP_GRAPH_API_VERSION = "v26.0";
3
+ const WHATSAPP_GRAPH_API_ORIGIN = "https://graph.facebook.com";
4
+ const WHATSAPP_SECRET_SCHEMA = z.object({
5
+ accessToken: z.string().min(1),
6
+ businessId: z.string().min(1),
7
+ phoneNumberId: z.string().min(1),
8
+ wabaId: z.string().min(1),
9
+ });
10
+ const WHATSAPP_ERROR_SCHEMA = z.looseObject({
11
+ code: z.number().int().optional(),
12
+ error_data: z
13
+ .looseObject({
14
+ details: z.string().optional(),
15
+ messaging_product: z.string().optional(),
16
+ })
17
+ .optional(),
18
+ error_subcode: z.number().int().optional(),
19
+ fbtrace_id: z.string().optional(),
20
+ message: z.string().optional(),
21
+ type: z.string().optional(),
22
+ });
23
+ /** Structured error returned by Meta's Graph API. */
24
+ export class WhatsAppApiError extends Error {
25
+ code;
26
+ details;
27
+ fbtraceId;
28
+ retryAfter;
29
+ status;
30
+ subcode;
31
+ type;
32
+ /**
33
+ * Creates a structured Graph API error.
34
+ *
35
+ * @param options - Provider and transport error details.
36
+ * @param options.code - Meta Graph API error code.
37
+ * @param options.details - WhatsApp-specific failure details.
38
+ * @param options.fbtraceId - Meta trace identifier.
39
+ * @param options.message - Human-readable provider message.
40
+ * @param options.retryAfter - Retry delay in seconds.
41
+ * @param options.status - HTTP response status.
42
+ * @param options.subcode - Meta Graph API error subcode.
43
+ * @param options.type - Meta error type.
44
+ */
45
+ constructor(options) {
46
+ super(options.message);
47
+ this.name = "WhatsAppApiError";
48
+ this.code = options.code;
49
+ this.details = options.details;
50
+ this.fbtraceId = options.fbtraceId;
51
+ this.retryAfter = options.retryAfter;
52
+ this.status = options.status;
53
+ this.subcode = options.subcode;
54
+ this.type = options.type;
55
+ }
56
+ }
57
+ /**
58
+ * Creates an authenticated WhatsApp Business Platform client.
59
+ *
60
+ * @param secret - Resolved WhatsApp integration secret.
61
+ */
62
+ export function getWhatsAppApi(secret) {
63
+ const { accessToken, businessId, phoneNumberId, wabaId } = WHATSAPP_SECRET_SCHEMA.parse(secret);
64
+ return {
65
+ businessId,
66
+ phoneNumberId,
67
+ wabaId,
68
+ request: async (path, options) => {
69
+ if (!/^\/[A-Za-z0-9_.,?=&/-]+$/.test(path)) {
70
+ throw new Error("WhatsApp Graph API paths must be relative.");
71
+ }
72
+ const response = await fetch(`${WHATSAPP_GRAPH_API_ORIGIN}/${WHATSAPP_GRAPH_API_VERSION}${path}`, {
73
+ body: options.body ? JSON.stringify(options.body) : undefined,
74
+ headers: {
75
+ Accept: "application/json",
76
+ Authorization: `Bearer ${accessToken}`,
77
+ ...(options.body && { "Content-Type": "application/json" }),
78
+ },
79
+ method: options.method ?? (options.body ? "POST" : "GET"),
80
+ });
81
+ const payload = await response.json();
82
+ if (!response.ok)
83
+ throw toWhatsAppApiError(response, payload);
84
+ return options.responseSchema.parse(payload);
85
+ },
86
+ };
87
+ }
88
+ /**
89
+ * Converts an unsuccessful Graph response into a structured error.
90
+ *
91
+ * @param response - Unsuccessful HTTP response.
92
+ * @param payload - Parsed Graph API payload.
93
+ */
94
+ function toWhatsAppApiError(response, payload) {
95
+ const error = z
96
+ .looseObject({ error: WHATSAPP_ERROR_SCHEMA.optional() })
97
+ .safeParse(payload);
98
+ const providerError = error.success ? error.data.error : undefined;
99
+ return new WhatsAppApiError({
100
+ code: providerError?.code,
101
+ details: providerError?.error_data?.details,
102
+ fbtraceId: providerError?.fbtrace_id,
103
+ message: providerError?.message ??
104
+ `WhatsApp Graph API request failed (${response.status}).`,
105
+ retryAfter: parseRetryAfter(response.headers.get("Retry-After")),
106
+ status: response.status,
107
+ subcode: providerError?.error_subcode,
108
+ type: providerError?.type,
109
+ });
110
+ }
111
+ /**
112
+ * Parses Meta's integer retry delay header.
113
+ *
114
+ * @param value - Raw `Retry-After` value.
115
+ */
116
+ function parseRetryAfter(value) {
117
+ if (value === null)
118
+ return undefined;
119
+ const seconds = Number(value);
120
+ return Number.isFinite(seconds) ? seconds : undefined;
121
+ }