@automate.ax/integration-contracts 0.147.0 → 0.148.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 (39) hide show
  1. package/dist/close/events.d.ts +4 -4
  2. package/dist/close/schemas.d.ts +6 -6
  3. package/dist/google-drive/index.d.ts +3 -3
  4. package/dist/kit/api.d.ts +78 -0
  5. package/dist/kit/api.js +386 -0
  6. package/dist/kit/events.d.ts +437 -0
  7. package/dist/kit/events.js +285 -0
  8. package/dist/kit/index.d.ts +6 -0
  9. package/dist/kit/index.js +5 -0
  10. package/dist/kit/openapi-operations.generated.d.ts +5 -0
  11. package/dist/kit/openapi-operations.generated.js +5 -0
  12. package/dist/kit/openapi-types.generated.d.ts +9485 -0
  13. package/dist/kit/openapi-types.generated.js +1 -0
  14. package/dist/kit/operation-manifest.d.ts +657 -0
  15. package/dist/kit/operation-manifest.js +98 -0
  16. package/dist/kit/schemas.d.ts +42 -0
  17. package/dist/kit/schemas.js +43 -0
  18. package/dist/kit/types.d.ts +41 -0
  19. package/dist/kit/types.js +1 -0
  20. package/dist/notion/schemas.d.ts +108 -108
  21. package/dist/resend/action-schemas.d.ts +14 -14
  22. package/dist/tally/api.js +5 -2
  23. package/dist/tally/events.d.ts +12 -12
  24. package/dist/tally/openapi-schemas.generated.json +39 -5
  25. package/dist/tally/openapi-types.generated.d.ts +6 -5
  26. package/dist/triggers.d.ts +2 -1
  27. package/package.json +9 -2
  28. package/src/kit/api.ts +523 -0
  29. package/src/kit/events.ts +352 -0
  30. package/src/kit/index.ts +6 -0
  31. package/src/kit/openapi-operations.generated.ts +7 -0
  32. package/src/kit/openapi-types.generated.ts +9710 -0
  33. package/src/kit/operation-manifest.ts +771 -0
  34. package/src/kit/schemas.ts +93 -0
  35. package/src/kit/types.ts +87 -0
  36. package/src/tally/api.ts +4 -2
  37. package/src/tally/openapi-schemas.generated.json +39 -5
  38. package/src/tally/openapi-types.generated.ts +6 -5
  39. package/src/triggers.ts +2 -0
@@ -0,0 +1,285 @@
1
+ import { encodableSchema } from "@automate.ax/codec";
2
+ import * as z from "zod";
3
+ /** Kit webhook event types currently available for endpoint subscriptions. */
4
+ export const KIT_WEBHOOK_EVENT_TYPES = [
5
+ "subscriber.created",
6
+ "subscriber.activated",
7
+ "subscriber.unsubscribed",
8
+ "subscriber.bounced",
9
+ "subscriber.complained",
10
+ "subscriber.subscribed_to_form",
11
+ "subscriber.added_to_sequence",
12
+ "subscriber.sequence_completed",
13
+ "subscriber.tag_added",
14
+ "subscriber.tag_removed",
15
+ "subscriber.custom_field_value_updated",
16
+ "tag.created",
17
+ "tag.deleted",
18
+ "custom_field.created",
19
+ "custom_field.deleted",
20
+ "sequence.created",
21
+ "sequence.deleted",
22
+ "sequence.published",
23
+ "sequence.disabled",
24
+ "broadcast.created",
25
+ "broadcast.sent",
26
+ "broadcast.deleted",
27
+ "post.published",
28
+ ];
29
+ const KIT_SUBSCRIBER_SCHEMA = z
30
+ .looseObject({
31
+ createdAt: z.iso.datetime({ offset: true }),
32
+ emailAddress: z.email(),
33
+ fields: z.record(z.string(), z.string().nullable()),
34
+ firstName: z.string().nullable(),
35
+ id: z.number().int(),
36
+ state: z.enum(["active", "bounced", "cancelled", "complained", "inactive"]),
37
+ })
38
+ .catchall(encodableSchema);
39
+ const KIT_FORM_SCHEMA = z
40
+ .looseObject({
41
+ archived: z.boolean(),
42
+ createdAt: z.iso.datetime({ offset: true }),
43
+ format: z.string(),
44
+ id: z.number().int(),
45
+ name: z.string(),
46
+ type: z.enum(["embed", "hosted"]),
47
+ uid: z.string(),
48
+ })
49
+ .catchall(encodableSchema);
50
+ const KIT_SEQUENCE_SCHEMA = z
51
+ .looseObject({
52
+ active: z.boolean(),
53
+ createdAt: z.iso.datetime({ offset: true }),
54
+ emailTemplateId: z.number().int().nullable(),
55
+ hold: z.boolean(),
56
+ id: z.number().int(),
57
+ name: z.string(),
58
+ repeat: z.boolean(),
59
+ updatedAt: z.iso.datetime({ offset: true }),
60
+ })
61
+ .catchall(encodableSchema);
62
+ const KIT_TAG_SCHEMA = z
63
+ .looseObject({
64
+ createdAt: z.iso.datetime({ offset: true }),
65
+ id: z.number().int(),
66
+ name: z.string(),
67
+ })
68
+ .catchall(encodableSchema);
69
+ const KIT_CUSTOM_FIELD_SCHEMA = z
70
+ .looseObject({
71
+ id: z.number().int(),
72
+ key: z.string(),
73
+ label: z.string(),
74
+ name: z.string(),
75
+ value: z.string().nullable().optional(),
76
+ })
77
+ .catchall(encodableSchema);
78
+ const KIT_BROADCAST_SCHEMA = z
79
+ .looseObject({
80
+ createdAt: z.iso.datetime({ offset: true }),
81
+ description: z.string().nullable(),
82
+ id: z.number().int(),
83
+ previewText: z.string().nullable(),
84
+ public: z.boolean(),
85
+ publicationId: z.number().int(),
86
+ publishedAt: z.iso.datetime({ offset: true }).nullable(),
87
+ sendAt: z.iso.datetime({ offset: true }).nullable(),
88
+ status: z.string(),
89
+ subject: z.string(),
90
+ })
91
+ .catchall(encodableSchema);
92
+ const KIT_POST_SCHEMA = z
93
+ .looseObject({
94
+ id: z.number().int(),
95
+ isPaid: z.boolean(),
96
+ publicUrl: z.url(),
97
+ publicationId: z.number().int(),
98
+ publishedAt: z.iso.datetime({ offset: true }),
99
+ slug: z.string(),
100
+ title: z.string(),
101
+ })
102
+ .catchall(encodableSchema);
103
+ const SUBSCRIBER_DATA_SCHEMA = z
104
+ .looseObject({ subscriber: KIT_SUBSCRIBER_SCHEMA })
105
+ .catchall(encodableSchema);
106
+ const KIT_EVENT_DATA_SCHEMAS = {
107
+ "broadcast.created": z.looseObject({ broadcast: KIT_BROADCAST_SCHEMA }),
108
+ "broadcast.deleted": z.looseObject({ broadcast: KIT_BROADCAST_SCHEMA }),
109
+ "broadcast.sent": z.looseObject({ broadcast: KIT_BROADCAST_SCHEMA }),
110
+ "custom_field.created": z.looseObject({
111
+ customField: KIT_CUSTOM_FIELD_SCHEMA,
112
+ }),
113
+ "custom_field.deleted": z.looseObject({
114
+ customField: KIT_CUSTOM_FIELD_SCHEMA,
115
+ }),
116
+ "post.published": z.looseObject({ post: KIT_POST_SCHEMA }),
117
+ "sequence.created": z.looseObject({ sequence: KIT_SEQUENCE_SCHEMA }),
118
+ "sequence.deleted": z.looseObject({ sequence: KIT_SEQUENCE_SCHEMA }),
119
+ "sequence.disabled": z.looseObject({ sequence: KIT_SEQUENCE_SCHEMA }),
120
+ "sequence.published": z.looseObject({ sequence: KIT_SEQUENCE_SCHEMA }),
121
+ "subscriber.activated": SUBSCRIBER_DATA_SCHEMA,
122
+ "subscriber.added_to_sequence": SUBSCRIBER_DATA_SCHEMA.extend({
123
+ sequence: KIT_SEQUENCE_SCHEMA,
124
+ }),
125
+ "subscriber.bounced": SUBSCRIBER_DATA_SCHEMA,
126
+ "subscriber.complained": SUBSCRIBER_DATA_SCHEMA,
127
+ "subscriber.created": SUBSCRIBER_DATA_SCHEMA,
128
+ "subscriber.custom_field_value_updated": SUBSCRIBER_DATA_SCHEMA.extend({
129
+ customField: KIT_CUSTOM_FIELD_SCHEMA,
130
+ }),
131
+ "subscriber.sequence_completed": SUBSCRIBER_DATA_SCHEMA.extend({
132
+ sequence: KIT_SEQUENCE_SCHEMA,
133
+ }),
134
+ "subscriber.subscribed_to_form": SUBSCRIBER_DATA_SCHEMA.extend({
135
+ form: KIT_FORM_SCHEMA,
136
+ }),
137
+ "subscriber.tag_added": SUBSCRIBER_DATA_SCHEMA.extend({
138
+ tag: KIT_TAG_SCHEMA,
139
+ }),
140
+ "subscriber.tag_removed": SUBSCRIBER_DATA_SCHEMA.extend({
141
+ tag: KIT_TAG_SCHEMA,
142
+ }),
143
+ "subscriber.unsubscribed": SUBSCRIBER_DATA_SCHEMA,
144
+ "tag.created": z.looseObject({ tag: KIT_TAG_SCHEMA }),
145
+ "tag.deleted": z.looseObject({ tag: KIT_TAG_SCHEMA }),
146
+ };
147
+ export const KIT_TRIGGER_CONFIG_SCHEMA = z.object({});
148
+ /** Validates any currently available normalized Kit event. */
149
+ export const KIT_EVENT_SCHEMA = z.custom((value) => {
150
+ if (typeof value !== "object" ||
151
+ value === null ||
152
+ !("type" in value) ||
153
+ typeof value.type !== "string" ||
154
+ !isKitWebhookEventType(value.type)) {
155
+ return false;
156
+ }
157
+ return kitSemanticEventSchema(value.type).safeParse(value).success;
158
+ });
159
+ /** Parses and normalizes Kit's provider-native delivery envelope. */
160
+ export const KIT_WEBHOOK_ENVELOPE_SCHEMA = z
161
+ .preprocess((value) => camelizeKitWebhookValue(value), z
162
+ .looseObject({
163
+ deliveryId: z.number().int(),
164
+ events: KIT_EVENT_SCHEMA.array().min(1).max(100),
165
+ })
166
+ .catchall(encodableSchema))
167
+ .refine((delivery) => delivery.events.every((event) => event.type === delivery.events[0]?.type), { message: "Kit webhook deliveries must contain one event type." });
168
+ /** Platform event type emitted for each exact Kit provider event. */
169
+ export const KIT_EVENT_TYPE_MAP = {
170
+ "broadcast.created": "kit.broadcast.created",
171
+ "broadcast.deleted": "kit.broadcast.deleted",
172
+ "broadcast.sent": "kit.broadcast.sent",
173
+ "custom_field.created": "kit.customField.created",
174
+ "custom_field.deleted": "kit.customField.deleted",
175
+ "post.published": "kit.post.published",
176
+ "sequence.created": "kit.sequence.created",
177
+ "sequence.deleted": "kit.sequence.deleted",
178
+ "sequence.disabled": "kit.sequence.disabled",
179
+ "sequence.published": "kit.sequence.published",
180
+ "subscriber.activated": "kit.subscriber.activated",
181
+ "subscriber.added_to_sequence": "kit.subscriber.addedToSequence",
182
+ "subscriber.bounced": "kit.subscriber.bounced",
183
+ "subscriber.complained": "kit.subscriber.complained",
184
+ "subscriber.created": "kit.subscriber.created",
185
+ "subscriber.custom_field_value_updated": "kit.subscriber.customFieldValueUpdated",
186
+ "subscriber.sequence_completed": "kit.subscriber.sequenceCompleted",
187
+ "subscriber.subscribed_to_form": "kit.subscriber.subscribedToForm",
188
+ "subscriber.tag_added": "kit.subscriber.tagAdded",
189
+ "subscriber.tag_removed": "kit.subscriber.tagRemoved",
190
+ "subscriber.unsubscribed": "kit.subscriber.unsubscribed",
191
+ "tag.created": "kit.tag.created",
192
+ "tag.deleted": "kit.tag.deleted",
193
+ };
194
+ /** Exact provider-to-platform Kit trigger contract map. */
195
+ export const kitTriggerContracts = {
196
+ "kit.broadcast.created": contract("broadcast.created"),
197
+ "kit.broadcast.deleted": contract("broadcast.deleted"),
198
+ "kit.broadcast.sent": contract("broadcast.sent"),
199
+ "kit.customField.created": contract("custom_field.created"),
200
+ "kit.customField.deleted": contract("custom_field.deleted"),
201
+ "kit.event": {
202
+ configSchema: KIT_TRIGGER_CONFIG_SCHEMA,
203
+ eventSchema: KIT_EVENT_SCHEMA,
204
+ },
205
+ "kit.post.published": contract("post.published"),
206
+ "kit.sequence.created": contract("sequence.created"),
207
+ "kit.sequence.deleted": contract("sequence.deleted"),
208
+ "kit.sequence.disabled": contract("sequence.disabled"),
209
+ "kit.sequence.published": contract("sequence.published"),
210
+ "kit.subscriber.activated": contract("subscriber.activated"),
211
+ "kit.subscriber.addedToSequence": contract("subscriber.added_to_sequence"),
212
+ "kit.subscriber.bounced": contract("subscriber.bounced"),
213
+ "kit.subscriber.complained": contract("subscriber.complained"),
214
+ "kit.subscriber.created": contract("subscriber.created"),
215
+ "kit.subscriber.customFieldValueUpdated": contract("subscriber.custom_field_value_updated"),
216
+ "kit.subscriber.sequenceCompleted": contract("subscriber.sequence_completed"),
217
+ "kit.subscriber.subscribedToForm": contract("subscriber.subscribed_to_form"),
218
+ "kit.subscriber.tagAdded": contract("subscriber.tag_added"),
219
+ "kit.subscriber.tagRemoved": contract("subscriber.tag_removed"),
220
+ "kit.subscriber.unsubscribed": contract("subscriber.unsubscribed"),
221
+ "kit.tag.created": contract("tag.created"),
222
+ "kit.tag.deleted": contract("tag.deleted"),
223
+ };
224
+ /**
225
+ * Builds a schema narrowed to one exact Kit webhook event.
226
+ *
227
+ * @param type Provider event type.
228
+ */
229
+ export function kitSemanticEventSchema(type) {
230
+ const schema = z
231
+ .looseObject({
232
+ created: z.iso.datetime({ offset: true }),
233
+ data: KIT_EVENT_DATA_SCHEMAS[type],
234
+ id: z.uuid(),
235
+ type: z.literal(type),
236
+ })
237
+ .catchall(encodableSchema);
238
+ return z.custom((value) => schema.safeParse(value).success);
239
+ }
240
+ /**
241
+ * Returns the broad and exact platform types for one Kit event.
242
+ *
243
+ * @param type Provider event type.
244
+ */
245
+ export function getKitEventTypes(type) {
246
+ return ["kit.event", KIT_EVENT_TYPE_MAP[type]];
247
+ }
248
+ /**
249
+ * Builds one semantic trigger contract.
250
+ *
251
+ * @param type Provider event type.
252
+ */
253
+ function contract(type) {
254
+ return {
255
+ configSchema: KIT_TRIGGER_CONFIG_SCHEMA,
256
+ eventSchema: kitSemanticEventSchema(type),
257
+ };
258
+ }
259
+ /**
260
+ * Narrows a provider string to a supported Kit event type.
261
+ *
262
+ * @param value Candidate event type.
263
+ */
264
+ function isKitWebhookEventType(value) {
265
+ return KIT_WEBHOOK_EVENT_TYPES.includes(value);
266
+ }
267
+ /**
268
+ * Converts webhook keys to public camelCase while preserving field names.
269
+ *
270
+ * @param value Provider webhook value.
271
+ * @param parentKey Parent provider key.
272
+ */
273
+ function camelizeKitWebhookValue(value, parentKey) {
274
+ if (Array.isArray(value)) {
275
+ return value.map((item) => camelizeKitWebhookValue(item));
276
+ }
277
+ if (typeof value !== "object" || value === null)
278
+ return value;
279
+ if (parentKey === "fields")
280
+ return value;
281
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [
282
+ key.replace(/_([a-z\d])/g, (_match, letter) => letter.toUpperCase()),
283
+ camelizeKitWebhookValue(item, key),
284
+ ]));
285
+ }
@@ -0,0 +1,6 @@
1
+ export * from "./api.js";
2
+ export * from "./events.js";
3
+ export * from "./operation-manifest.js";
4
+ export * from "./schemas.js";
5
+ export * from "./types.js";
6
+ export type { KitOperationMap } from "./openapi-types.generated";
@@ -0,0 +1,5 @@
1
+ export * from "./api.js";
2
+ export * from "./events.js";
3
+ export * from "./operation-manifest.js";
4
+ export * from "./schemas.js";
5
+ export * from "./types.js";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated from https://developers.kit.com/api-reference/v4.json; parsed at
3
+ * runtime to avoid an enormous inferred literal type.
4
+ */
5
+ export declare const KIT_OPENAPI_DATA: unknown;