@automate.ax/integration-contracts 0.139.2 → 0.142.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.
- package/dist/clickup/api.d.ts +76 -0
- package/dist/clickup/api.js +195 -0
- package/dist/clickup/index.d.ts +1921 -0
- package/dist/clickup/index.js +91 -0
- package/dist/clickup/schemas.d.ts +477 -0
- package/dist/clickup/schemas.js +286 -0
- package/dist/closebot/api.d.ts +39 -0
- package/dist/closebot/api.js +117 -0
- package/dist/closebot/index.d.ts +2 -0
- package/dist/closebot/index.js +2 -0
- package/dist/closebot/schemas.d.ts +775 -0
- package/dist/closebot/schemas.js +469 -0
- package/dist/google-ads/api.d.ts +40 -0
- package/dist/google-ads/api.js +109 -0
- package/dist/google-ads/events.d.ts +1155 -0
- package/dist/google-ads/events.js +96 -0
- package/dist/google-ads/index.d.ts +3 -0
- package/dist/google-ads/index.js +3 -0
- package/dist/google-ads/schemas.d.ts +756 -0
- package/dist/google-ads/schemas.js +249 -0
- package/dist/google-drive/index.d.ts +6 -6
- package/dist/linear/schemas.d.ts +3 -3
- package/dist/meta-ads/api.d.ts +90 -0
- package/dist/meta-ads/api.js +260 -0
- package/dist/meta-ads/events.d.ts +391 -0
- package/dist/meta-ads/events.js +193 -0
- package/dist/meta-ads/index.d.ts +3 -0
- package/dist/meta-ads/index.js +3 -0
- package/dist/meta-ads/schemas.d.ts +184 -0
- package/dist/meta-ads/schemas.js +181 -0
- package/dist/notion/schemas.d.ts +84 -84
- package/dist/teams/index.d.ts +20 -20
- package/dist/teams/schemas.d.ts +5 -5
- package/dist/triggers.d.ts +4 -1
- package/package.json +27 -3
- package/src/clickup/api.ts +270 -0
- package/src/clickup/index.ts +108 -0
- package/src/clickup/schemas.ts +324 -0
- package/src/closebot/api.ts +157 -0
- package/src/closebot/index.ts +2 -0
- package/src/closebot/schemas.ts +521 -0
- package/src/google-ads/api.ts +151 -0
- package/src/google-ads/events.ts +131 -0
- package/src/google-ads/index.ts +3 -0
- package/src/google-ads/schemas.ts +270 -0
- package/src/meta-ads/api.ts +327 -0
- package/src/meta-ads/events.ts +218 -0
- package/src/meta-ads/index.ts +3 -0
- package/src/meta-ads/schemas.ts +206 -0
- package/src/triggers.ts +6 -0
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export const CLOSEBOT_ID_SCHEMA = z.string().trim().min(1);
|
|
3
|
+
export const CLOSEBOT_DATE_SCHEMA = z
|
|
4
|
+
.union([z.date(), z.iso.datetime({ local: true, offset: true })])
|
|
5
|
+
.transform((value) => value instanceof Date
|
|
6
|
+
? value
|
|
7
|
+
: new Date(/(?:Z|[+-]\d{2}:\d{2})$/.test(value) ? value : `${value}Z`));
|
|
8
|
+
const OPTIONAL_STRING = z.string().nullable().optional();
|
|
9
|
+
const OPTIONAL_BOOLEAN = z.boolean().optional();
|
|
10
|
+
const OPTIONAL_INTEGER = z.number().int().optional();
|
|
11
|
+
const OPTIONAL_DATE = CLOSEBOT_DATE_SCHEMA.nullable().optional();
|
|
12
|
+
export const CLOSEBOT_AGENCY_MEMBER_SCHEMA = z.object({
|
|
13
|
+
accountId: OPTIONAL_STRING,
|
|
14
|
+
authId: OPTIONAL_STRING,
|
|
15
|
+
email: OPTIONAL_STRING,
|
|
16
|
+
name: OPTIONAL_STRING,
|
|
17
|
+
role: OPTIONAL_STRING,
|
|
18
|
+
status: OPTIONAL_STRING,
|
|
19
|
+
});
|
|
20
|
+
export const CLOSEBOT_AGENCY_SCHEMA = z.object({
|
|
21
|
+
betaTester: OPTIONAL_BOOLEAN,
|
|
22
|
+
id: OPTIONAL_STRING,
|
|
23
|
+
members: CLOSEBOT_AGENCY_MEMBER_SCHEMA.array().nullable().optional(),
|
|
24
|
+
name: OPTIONAL_STRING,
|
|
25
|
+
});
|
|
26
|
+
export const CLOSEBOT_FOLLOW_UP_SEQUENCE_SCHEMA = z.object({
|
|
27
|
+
duration: OPTIONAL_INTEGER,
|
|
28
|
+
order: OPTIONAL_INTEGER,
|
|
29
|
+
unit: OPTIONAL_STRING,
|
|
30
|
+
});
|
|
31
|
+
export const CLOSEBOT_FOLLOW_UP_STATE_SCHEMA = z.object({
|
|
32
|
+
extraPrompt: OPTIONAL_STRING,
|
|
33
|
+
id: OPTIONAL_INTEGER,
|
|
34
|
+
isDefault: OPTIONAL_BOOLEAN,
|
|
35
|
+
name: OPTIONAL_STRING,
|
|
36
|
+
order: OPTIONAL_INTEGER,
|
|
37
|
+
repeatFinal: OPTIONAL_BOOLEAN,
|
|
38
|
+
sequences: CLOSEBOT_FOLLOW_UP_SEQUENCE_SCHEMA.array().nullable().optional(),
|
|
39
|
+
});
|
|
40
|
+
export const CLOSEBOT_TAG_SCHEMA = z.object({
|
|
41
|
+
approveDeny: OPTIONAL_BOOLEAN,
|
|
42
|
+
id: OPTIONAL_STRING,
|
|
43
|
+
name: OPTIONAL_STRING,
|
|
44
|
+
});
|
|
45
|
+
export const CLOSEBOT_TAG_FILTER_SCHEMA = z.object({
|
|
46
|
+
groups: z
|
|
47
|
+
.object({
|
|
48
|
+
operator: OPTIONAL_STRING,
|
|
49
|
+
rules: z
|
|
50
|
+
.object({
|
|
51
|
+
condition: OPTIONAL_STRING,
|
|
52
|
+
tagId: OPTIONAL_STRING,
|
|
53
|
+
tagName: OPTIONAL_STRING,
|
|
54
|
+
})
|
|
55
|
+
.array()
|
|
56
|
+
.nullable()
|
|
57
|
+
.optional(),
|
|
58
|
+
})
|
|
59
|
+
.array()
|
|
60
|
+
.nullable()
|
|
61
|
+
.optional(),
|
|
62
|
+
operator: OPTIONAL_STRING,
|
|
63
|
+
});
|
|
64
|
+
export const CLOSEBOT_CHANNEL_RULES_SCHEMA = z.object({
|
|
65
|
+
channels: z
|
|
66
|
+
.object({
|
|
67
|
+
channel: OPTIONAL_STRING,
|
|
68
|
+
rules: z
|
|
69
|
+
.object({ operator: OPTIONAL_STRING, value: OPTIONAL_STRING })
|
|
70
|
+
.array()
|
|
71
|
+
.nullable()
|
|
72
|
+
.optional(),
|
|
73
|
+
type: OPTIONAL_STRING,
|
|
74
|
+
})
|
|
75
|
+
.array()
|
|
76
|
+
.nullable()
|
|
77
|
+
.optional(),
|
|
78
|
+
});
|
|
79
|
+
export const CLOSEBOT_BOT_SOURCE_SCHEMA = z.object({
|
|
80
|
+
category: OPTIONAL_STRING,
|
|
81
|
+
channelList: z.string().array().nullable().optional(),
|
|
82
|
+
channelRules: CLOSEBOT_CHANNEL_RULES_SCHEMA.optional(),
|
|
83
|
+
enabled: OPTIONAL_BOOLEAN,
|
|
84
|
+
flowVariableValues: z.record(z.string(), z.string()).nullable().optional(),
|
|
85
|
+
id: OPTIONAL_STRING,
|
|
86
|
+
key: OPTIONAL_STRING,
|
|
87
|
+
name: OPTIONAL_STRING,
|
|
88
|
+
personaNameOverride: OPTIONAL_STRING,
|
|
89
|
+
tagFilterConfig: CLOSEBOT_TAG_FILTER_SCHEMA.optional(),
|
|
90
|
+
tags: CLOSEBOT_TAG_SCHEMA.array().nullable().optional(),
|
|
91
|
+
});
|
|
92
|
+
export const CLOSEBOT_BOT_VERSION_SCHEMA = z.object({
|
|
93
|
+
modifiedAt: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
94
|
+
modifiedBy: OPTIONAL_STRING,
|
|
95
|
+
name: OPTIONAL_STRING,
|
|
96
|
+
published: OPTIONAL_BOOLEAN,
|
|
97
|
+
version: OPTIONAL_STRING,
|
|
98
|
+
});
|
|
99
|
+
export const CLOSEBOT_PERSONA_SPLIT_TEST_SOURCE_RESULT_SCHEMA = z.object({
|
|
100
|
+
averageLeadScore: z.number().optional(),
|
|
101
|
+
responseCount: OPTIONAL_INTEGER,
|
|
102
|
+
sourceId: OPTIONAL_STRING,
|
|
103
|
+
sourceName: OPTIONAL_STRING,
|
|
104
|
+
totalInstances: OPTIONAL_INTEGER,
|
|
105
|
+
});
|
|
106
|
+
export const CLOSEBOT_PERSONA_SPLIT_TEST_RESULTS_SCHEMA = z.object({
|
|
107
|
+
averageLeadScore: z.number().optional(),
|
|
108
|
+
computedAt: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
109
|
+
personaId: OPTIONAL_STRING,
|
|
110
|
+
personaName: OPTIONAL_STRING,
|
|
111
|
+
responseCount: OPTIONAL_INTEGER,
|
|
112
|
+
sources: CLOSEBOT_PERSONA_SPLIT_TEST_SOURCE_RESULT_SCHEMA.array()
|
|
113
|
+
.nullable()
|
|
114
|
+
.optional(),
|
|
115
|
+
splitWeight: OPTIONAL_INTEGER,
|
|
116
|
+
totalInstances: OPTIONAL_INTEGER,
|
|
117
|
+
});
|
|
118
|
+
export const CLOSEBOT_PERSONA_SPLIT_TEST_SCHEMA = z.object({
|
|
119
|
+
endedAt: OPTIONAL_DATE,
|
|
120
|
+
id: OPTIONAL_STRING,
|
|
121
|
+
isActive: OPTIONAL_BOOLEAN,
|
|
122
|
+
personas: z
|
|
123
|
+
.object({
|
|
124
|
+
order: OPTIONAL_INTEGER,
|
|
125
|
+
personaId: OPTIONAL_STRING,
|
|
126
|
+
results: CLOSEBOT_PERSONA_SPLIT_TEST_RESULTS_SCHEMA.optional(),
|
|
127
|
+
weight: OPTIONAL_INTEGER,
|
|
128
|
+
})
|
|
129
|
+
.array()
|
|
130
|
+
.nullable()
|
|
131
|
+
.optional(),
|
|
132
|
+
startedAt: OPTIONAL_DATE,
|
|
133
|
+
});
|
|
134
|
+
export const CLOSEBOT_BOT_TEMPLATE_SCHEMA = z.object({
|
|
135
|
+
description: OPTIONAL_STRING,
|
|
136
|
+
id: OPTIONAL_STRING,
|
|
137
|
+
industry: OPTIONAL_STRING,
|
|
138
|
+
level: OPTIONAL_STRING,
|
|
139
|
+
name: OPTIONAL_STRING,
|
|
140
|
+
previewUrl: OPTIONAL_STRING,
|
|
141
|
+
tags: z.string().array().nullable().optional(),
|
|
142
|
+
tier: OPTIONAL_STRING,
|
|
143
|
+
videoUrl: OPTIONAL_STRING,
|
|
144
|
+
});
|
|
145
|
+
export const CLOSEBOT_FOLDER_SCHEMA = z.object({
|
|
146
|
+
bots: z.string().array().nullable(),
|
|
147
|
+
children: z.string().array().nullable(),
|
|
148
|
+
id: z.string().nullable(),
|
|
149
|
+
name: z.string().nullable(),
|
|
150
|
+
personas: z.string().array().nullable(),
|
|
151
|
+
});
|
|
152
|
+
export const CLOSEBOT_FOLDER_CREATED_SCHEMA = z.object({
|
|
153
|
+
id: z.string().nullable(),
|
|
154
|
+
});
|
|
155
|
+
export const CLOSEBOT_BOT_SCHEMA = z.object({
|
|
156
|
+
category: OPTIONAL_STRING,
|
|
157
|
+
favorited: OPTIONAL_BOOLEAN,
|
|
158
|
+
folderId: OPTIONAL_STRING,
|
|
159
|
+
followUpActive: OPTIONAL_BOOLEAN,
|
|
160
|
+
followUpExtraPrompt: OPTIONAL_STRING,
|
|
161
|
+
followUpRepeat: OPTIONAL_BOOLEAN,
|
|
162
|
+
followUpSequences: CLOSEBOT_FOLLOW_UP_SEQUENCE_SCHEMA.array()
|
|
163
|
+
.nullable()
|
|
164
|
+
.optional(),
|
|
165
|
+
followUpStates: CLOSEBOT_FOLLOW_UP_STATE_SCHEMA.array().nullable().optional(),
|
|
166
|
+
followUpVarianceMinutes: OPTIONAL_INTEGER,
|
|
167
|
+
id: OPTIONAL_STRING,
|
|
168
|
+
locked: OPTIONAL_BOOLEAN,
|
|
169
|
+
modifiedAt: OPTIONAL_STRING,
|
|
170
|
+
modifiedBy: OPTIONAL_STRING,
|
|
171
|
+
name: OPTIONAL_STRING,
|
|
172
|
+
personaIds: z.string().array().nullable().optional(),
|
|
173
|
+
personaSplitTest: CLOSEBOT_PERSONA_SPLIT_TEST_SCHEMA.nullable().optional(),
|
|
174
|
+
personaWeights: z.record(z.string(), z.number().int()).nullable().optional(),
|
|
175
|
+
reschedulingEnabled: OPTIONAL_BOOLEAN,
|
|
176
|
+
smartFollowUp: OPTIONAL_BOOLEAN,
|
|
177
|
+
sources: CLOSEBOT_BOT_SOURCE_SCHEMA.array().nullable().optional(),
|
|
178
|
+
tools: z
|
|
179
|
+
.object({
|
|
180
|
+
enabled: OPTIONAL_BOOLEAN,
|
|
181
|
+
id: OPTIONAL_STRING,
|
|
182
|
+
options: z.object({}).optional(),
|
|
183
|
+
type: OPTIONAL_STRING,
|
|
184
|
+
})
|
|
185
|
+
.array()
|
|
186
|
+
.nullable()
|
|
187
|
+
.optional(),
|
|
188
|
+
versions: CLOSEBOT_BOT_VERSION_SCHEMA.array().nullable().optional(),
|
|
189
|
+
});
|
|
190
|
+
export const CLOSEBOT_PUBLISH_BOT_RESULT_SCHEMA = z.object({
|
|
191
|
+
message: z.json().optional(),
|
|
192
|
+
version: OPTIONAL_STRING,
|
|
193
|
+
});
|
|
194
|
+
export const CLOSEBOT_LEAD_FIELD_SCHEMA = z.object({
|
|
195
|
+
aiProduced: OPTIONAL_BOOLEAN,
|
|
196
|
+
field: OPTIONAL_STRING,
|
|
197
|
+
name: OPTIONAL_STRING,
|
|
198
|
+
value: OPTIONAL_STRING,
|
|
199
|
+
});
|
|
200
|
+
export const CLOSEBOT_BOT_INSTANCE_SCHEMA = z.object({
|
|
201
|
+
botId: OPTIONAL_STRING,
|
|
202
|
+
botVersion: OPTIONAL_STRING,
|
|
203
|
+
followUpTime: OPTIONAL_DATE,
|
|
204
|
+
followUpTimezone: OPTIONAL_STRING,
|
|
205
|
+
followUpTimezoneKind: OPTIONAL_STRING,
|
|
206
|
+
isSmartFollowUpTime: OPTIONAL_BOOLEAN,
|
|
207
|
+
scheduleRespondTime: OPTIONAL_DATE,
|
|
208
|
+
});
|
|
209
|
+
export const CLOSEBOT_LEAD_SCHEMA = z.object({
|
|
210
|
+
contactId: OPTIONAL_STRING,
|
|
211
|
+
fields: CLOSEBOT_LEAD_FIELD_SCHEMA.array().nullable().optional(),
|
|
212
|
+
id: OPTIONAL_STRING,
|
|
213
|
+
instances: CLOSEBOT_BOT_INSTANCE_SCHEMA.array().nullable().optional(),
|
|
214
|
+
lastMessage: OPTIONAL_STRING,
|
|
215
|
+
lastMessageBotId: OPTIONAL_STRING,
|
|
216
|
+
lastMessageDirection: OPTIONAL_STRING,
|
|
217
|
+
lastMessageIsNote: OPTIONAL_BOOLEAN,
|
|
218
|
+
lastMessageTime: OPTIONAL_DATE,
|
|
219
|
+
mentionedMe: OPTIONAL_BOOLEAN,
|
|
220
|
+
mimicSourceId: OPTIONAL_STRING,
|
|
221
|
+
mostRecentFailureReason: OPTIONAL_STRING,
|
|
222
|
+
name: OPTIONAL_STRING,
|
|
223
|
+
score: z.number().int().nullable().optional(),
|
|
224
|
+
source: z.object({ id: OPTIONAL_STRING, name: OPTIONAL_STRING }).optional(),
|
|
225
|
+
starred: OPTIONAL_BOOLEAN,
|
|
226
|
+
tags: z.string().array().nullable().optional(),
|
|
227
|
+
unread: OPTIONAL_BOOLEAN,
|
|
228
|
+
wontRespondUntil: OPTIONAL_DATE,
|
|
229
|
+
});
|
|
230
|
+
export const CLOSEBOT_LEAD_PAGE_SCHEMA = z.object({
|
|
231
|
+
mentionsTotal: z.number().int().nullable().optional(),
|
|
232
|
+
page: z.number().int(),
|
|
233
|
+
pageSize: z.number().int(),
|
|
234
|
+
results: CLOSEBOT_LEAD_SCHEMA.array().nullable(),
|
|
235
|
+
starredTotal: z.number().int().nullable().optional(),
|
|
236
|
+
total: z.number().int(),
|
|
237
|
+
});
|
|
238
|
+
export const CLOSEBOT_LEAD_SEARCH_RESULT_SCHEMA = z.object({
|
|
239
|
+
leads: CLOSEBOT_LEAD_SCHEMA.array().nullable(),
|
|
240
|
+
mentionsTotal: z.number().int().nullable().optional(),
|
|
241
|
+
starredTotal: z.number().int().nullable().optional(),
|
|
242
|
+
total: z.number().int(),
|
|
243
|
+
});
|
|
244
|
+
export const CLOSEBOT_LEAD_AI_STATUS_SCHEMA = z.object({
|
|
245
|
+
applicable: OPTIONAL_BOOLEAN,
|
|
246
|
+
enabled: OPTIONAL_BOOLEAN,
|
|
247
|
+
reason: OPTIONAL_STRING,
|
|
248
|
+
});
|
|
249
|
+
export const CLOSEBOT_LEAD_HISTORY_EVENT_SCHEMA = z.object({
|
|
250
|
+
actionKey: OPTIONAL_STRING,
|
|
251
|
+
domain: OPTIONAL_STRING,
|
|
252
|
+
eventType: OPTIONAL_STRING,
|
|
253
|
+
id: OPTIONAL_STRING,
|
|
254
|
+
path: OPTIONAL_STRING,
|
|
255
|
+
points: z.number().int().nullable().optional(),
|
|
256
|
+
title: OPTIONAL_STRING,
|
|
257
|
+
triggerType: OPTIONAL_STRING,
|
|
258
|
+
url: OPTIONAL_STRING,
|
|
259
|
+
visitedAt: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
260
|
+
});
|
|
261
|
+
export const CLOSEBOT_NOTE_RESULT_SCHEMA = z.object({
|
|
262
|
+
aiVisible: z.boolean(),
|
|
263
|
+
noteId: z.string().nullable(),
|
|
264
|
+
});
|
|
265
|
+
export const CLOSEBOT_SCHEDULED_MESSAGE_SCHEMA = z.object({
|
|
266
|
+
body: OPTIONAL_STRING,
|
|
267
|
+
botId: OPTIONAL_STRING,
|
|
268
|
+
cancelOnReply: z.boolean(),
|
|
269
|
+
channel: OPTIONAL_STRING,
|
|
270
|
+
createdAt: CLOSEBOT_DATE_SCHEMA,
|
|
271
|
+
createdByAccountId: z.string().nullable(),
|
|
272
|
+
createdByIconUrl: OPTIONAL_STRING,
|
|
273
|
+
createdByName: OPTIONAL_STRING,
|
|
274
|
+
id: z.string().nullable(),
|
|
275
|
+
kind: z.string().nullable(),
|
|
276
|
+
leadId: z.string().nullable(),
|
|
277
|
+
sendAt: CLOSEBOT_DATE_SCHEMA,
|
|
278
|
+
sentMessageId: OPTIONAL_STRING,
|
|
279
|
+
sourceId: OPTIONAL_STRING,
|
|
280
|
+
status: z.string().nullable(),
|
|
281
|
+
statusReason: OPTIONAL_STRING,
|
|
282
|
+
});
|
|
283
|
+
export const CLOSEBOT_SEND_MESSAGE_RESULT_SCHEMA = z.object({
|
|
284
|
+
messageId: z.string().nullable(),
|
|
285
|
+
});
|
|
286
|
+
export const CLOSEBOT_SOURCE_AVAILABILITY_SCHEMA = z.object({
|
|
287
|
+
dayOfWeekUtc: OPTIONAL_STRING,
|
|
288
|
+
duration: OPTIONAL_STRING,
|
|
289
|
+
startTimeUtc: OPTIONAL_STRING,
|
|
290
|
+
});
|
|
291
|
+
export const CLOSEBOT_BOT_SOURCE_AVAILABILITY_SCHEMA = CLOSEBOT_SOURCE_AVAILABILITY_SCHEMA.extend({ channel: OPTIONAL_STRING });
|
|
292
|
+
export const CLOSEBOT_DO_NOT_RESPOND_WINDOW_SCHEMA = z.object({
|
|
293
|
+
end: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
294
|
+
start: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
295
|
+
});
|
|
296
|
+
export const CLOSEBOT_SOURCE_SCHEMA = z.object({
|
|
297
|
+
accountsWithAccess: z.string().array().nullable().optional(),
|
|
298
|
+
address: OPTIONAL_STRING,
|
|
299
|
+
agencyId: OPTIONAL_STRING,
|
|
300
|
+
autoShutoff: OPTIONAL_BOOLEAN,
|
|
301
|
+
botRespondWindows: CLOSEBOT_BOT_SOURCE_AVAILABILITY_SCHEMA.array()
|
|
302
|
+
.nullable()
|
|
303
|
+
.optional(),
|
|
304
|
+
bots: z
|
|
305
|
+
.object({
|
|
306
|
+
botName: OPTIONAL_STRING,
|
|
307
|
+
channelRules: CLOSEBOT_CHANNEL_RULES_SCHEMA.optional(),
|
|
308
|
+
channels: z.string().array().nullable().optional(),
|
|
309
|
+
enabled: OPTIONAL_BOOLEAN,
|
|
310
|
+
id: OPTIONAL_STRING,
|
|
311
|
+
personaNameOverride: OPTIONAL_STRING,
|
|
312
|
+
tagFilterConfig: CLOSEBOT_TAG_FILTER_SCHEMA.optional(),
|
|
313
|
+
tags: CLOSEBOT_TAG_SCHEMA.array().nullable().optional(),
|
|
314
|
+
})
|
|
315
|
+
.array()
|
|
316
|
+
.nullable()
|
|
317
|
+
.optional(),
|
|
318
|
+
category: OPTIONAL_STRING,
|
|
319
|
+
connected: OPTIONAL_BOOLEAN,
|
|
320
|
+
doNotRespondWindows: CLOSEBOT_DO_NOT_RESPOND_WINDOW_SCHEMA.array()
|
|
321
|
+
.nullable()
|
|
322
|
+
.optional(),
|
|
323
|
+
gracefulGoodbye: OPTIONAL_BOOLEAN,
|
|
324
|
+
hubSpotOwnerId: OPTIONAL_STRING,
|
|
325
|
+
isAvailabilityContactTimezone: OPTIONAL_BOOLEAN,
|
|
326
|
+
isBotRespondWindowsQuietHours: OPTIONAL_BOOLEAN,
|
|
327
|
+
key: OPTIONAL_STRING,
|
|
328
|
+
markConversationAsUnread: OPTIONAL_BOOLEAN,
|
|
329
|
+
name: OPTIONAL_STRING,
|
|
330
|
+
respondToReactions: OPTIONAL_BOOLEAN,
|
|
331
|
+
respondWindows: CLOSEBOT_SOURCE_AVAILABILITY_SCHEMA.array()
|
|
332
|
+
.nullable()
|
|
333
|
+
.optional(),
|
|
334
|
+
scriptDomainAllowList: z.string().array().nullable().optional(),
|
|
335
|
+
scriptInstalled: OPTIONAL_BOOLEAN,
|
|
336
|
+
scriptLastSeenAt: OPTIONAL_DATE,
|
|
337
|
+
scriptLastSeenDomain: OPTIONAL_STRING,
|
|
338
|
+
scriptLastSeenEndpoint: OPTIONAL_STRING,
|
|
339
|
+
sourceId: OPTIONAL_STRING,
|
|
340
|
+
summarizeAttachments: OPTIONAL_BOOLEAN,
|
|
341
|
+
timezone: OPTIONAL_STRING,
|
|
342
|
+
webhookCallback: OPTIONAL_STRING,
|
|
343
|
+
});
|
|
344
|
+
export const CLOSEBOT_SOURCE_PAGE_SCHEMA = z.object({
|
|
345
|
+
page: z.number().int(),
|
|
346
|
+
pageSize: z.number().int(),
|
|
347
|
+
results: CLOSEBOT_SOURCE_SCHEMA.array().nullable(),
|
|
348
|
+
total: z.number().int(),
|
|
349
|
+
});
|
|
350
|
+
export const CLOSEBOT_SOURCE_CALENDAR_SCHEMA = z.object({
|
|
351
|
+
id: OPTIONAL_STRING,
|
|
352
|
+
name: OPTIONAL_STRING,
|
|
353
|
+
});
|
|
354
|
+
export const CLOSEBOT_SOURCE_CHANNEL_SCHEMA = z.object({
|
|
355
|
+
filterType: OPTIONAL_STRING,
|
|
356
|
+
id: OPTIONAL_STRING,
|
|
357
|
+
name: OPTIONAL_STRING,
|
|
358
|
+
source: OPTIONAL_STRING,
|
|
359
|
+
});
|
|
360
|
+
export const CLOSEBOT_SOURCE_FIELD_SCHEMA = z.object({
|
|
361
|
+
dataType: OPTIONAL_STRING,
|
|
362
|
+
fieldKey: OPTIONAL_STRING,
|
|
363
|
+
name: OPTIONAL_STRING,
|
|
364
|
+
});
|
|
365
|
+
export const CLOSEBOT_SOURCE_FIELDS_SCHEMA = z.object({
|
|
366
|
+
contact: CLOSEBOT_SOURCE_FIELD_SCHEMA.array().nullable().optional(),
|
|
367
|
+
customValue: CLOSEBOT_SOURCE_FIELD_SCHEMA.array().nullable().optional(),
|
|
368
|
+
location: CLOSEBOT_SOURCE_FIELD_SCHEMA.array().nullable().optional(),
|
|
369
|
+
});
|
|
370
|
+
export const CLOSEBOT_SOURCE_TAG_SCHEMA = z.object({
|
|
371
|
+
id: OPTIONAL_STRING,
|
|
372
|
+
name: OPTIONAL_STRING,
|
|
373
|
+
});
|
|
374
|
+
export const CLOSEBOT_SOURCE_OWNER_SCHEMA = z.object({
|
|
375
|
+
email: OPTIONAL_STRING,
|
|
376
|
+
firstName: OPTIONAL_STRING,
|
|
377
|
+
lastName: OPTIONAL_STRING,
|
|
378
|
+
ownerId: OPTIONAL_STRING,
|
|
379
|
+
});
|
|
380
|
+
export const CLOSEBOT_LIBRARY_FILE_SOURCE_SCHEMA = z.object({
|
|
381
|
+
category: OPTIONAL_STRING,
|
|
382
|
+
id: OPTIONAL_STRING,
|
|
383
|
+
name: OPTIONAL_STRING,
|
|
384
|
+
});
|
|
385
|
+
export const CLOSEBOT_LIBRARY_FILE_SCHEMA = z.object({
|
|
386
|
+
accountId: OPTIONAL_STRING,
|
|
387
|
+
estimatedFileSize: z.number().int().optional(),
|
|
388
|
+
externalItemId: OPTIONAL_STRING,
|
|
389
|
+
externalLibraryResourceSyncId: OPTIONAL_STRING,
|
|
390
|
+
externalProvider: OPTIONAL_STRING,
|
|
391
|
+
externalResourceId: OPTIONAL_STRING,
|
|
392
|
+
externalResourceName: OPTIONAL_STRING,
|
|
393
|
+
externalResourceType: OPTIONAL_STRING,
|
|
394
|
+
faviconUrl: OPTIONAL_STRING,
|
|
395
|
+
fileId: OPTIONAL_STRING,
|
|
396
|
+
fileName: OPTIONAL_STRING,
|
|
397
|
+
fileSize: z.number().int().optional(),
|
|
398
|
+
fileStatus: OPTIONAL_STRING,
|
|
399
|
+
fileType: OPTIONAL_STRING,
|
|
400
|
+
lastModified: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
401
|
+
lastUse: OPTIONAL_DATE,
|
|
402
|
+
sources: CLOSEBOT_LIBRARY_FILE_SOURCE_SCHEMA.array().nullable().optional(),
|
|
403
|
+
uri: OPTIONAL_STRING,
|
|
404
|
+
uses: z.number().int().nullable().optional(),
|
|
405
|
+
});
|
|
406
|
+
export const CLOSEBOT_LIBRARY_FILE_PREVIEW_SCHEMA = z.object({
|
|
407
|
+
chunks: z
|
|
408
|
+
.object({ chunkIndex: OPTIONAL_INTEGER, content: OPTIONAL_STRING })
|
|
409
|
+
.array()
|
|
410
|
+
.nullable()
|
|
411
|
+
.optional(),
|
|
412
|
+
content: OPTIONAL_STRING,
|
|
413
|
+
errorMessage: OPTIONAL_STRING,
|
|
414
|
+
fileId: OPTIONAL_STRING,
|
|
415
|
+
fileName: OPTIONAL_STRING,
|
|
416
|
+
fileSize: z.number().int().optional(),
|
|
417
|
+
fileStatus: OPTIONAL_STRING,
|
|
418
|
+
fileType: OPTIONAL_STRING,
|
|
419
|
+
lastModified: CLOSEBOT_DATE_SCHEMA.optional(),
|
|
420
|
+
previewSource: OPTIONAL_STRING,
|
|
421
|
+
});
|
|
422
|
+
export const CLOSEBOT_WEB_SCRAPE_PAGE_SCHEMA = z.object({
|
|
423
|
+
enabled: OPTIONAL_BOOLEAN,
|
|
424
|
+
url: OPTIONAL_STRING,
|
|
425
|
+
});
|
|
426
|
+
export const CLOSEBOT_BOT_VARIABLE_SCHEMA = z.object({
|
|
427
|
+
id: z.string().nullable(),
|
|
428
|
+
name: z.string().nullable(),
|
|
429
|
+
value: z.string().nullable(),
|
|
430
|
+
});
|
|
431
|
+
export const CLOSEBOT_PERSONA_SCHEMA = z.object({
|
|
432
|
+
agencyId: OPTIONAL_STRING,
|
|
433
|
+
aiProviderPreferences: z.string().array().nullable().optional(),
|
|
434
|
+
botIds: z.string().array().nullable().optional(),
|
|
435
|
+
bots: z
|
|
436
|
+
.object({ id: OPTIONAL_STRING, name: OPTIONAL_STRING })
|
|
437
|
+
.array()
|
|
438
|
+
.nullable()
|
|
439
|
+
.optional(),
|
|
440
|
+
breakupLargeMessagePercent: OPTIONAL_INTEGER,
|
|
441
|
+
color: OPTIONAL_STRING,
|
|
442
|
+
default: OPTIONAL_BOOLEAN,
|
|
443
|
+
description: OPTIONAL_STRING,
|
|
444
|
+
favorited: OPTIONAL_BOOLEAN,
|
|
445
|
+
folderId: OPTIONAL_STRING,
|
|
446
|
+
howToRespond: OPTIONAL_STRING,
|
|
447
|
+
id: OPTIONAL_STRING,
|
|
448
|
+
imageUri: OPTIONAL_STRING,
|
|
449
|
+
modifiedAt: OPTIONAL_STRING,
|
|
450
|
+
modifiedBy: OPTIONAL_STRING,
|
|
451
|
+
personaName: OPTIONAL_STRING,
|
|
452
|
+
responseDelay: OPTIONAL_INTEGER,
|
|
453
|
+
responseTime: OPTIONAL_STRING,
|
|
454
|
+
typoPercent: OPTIONAL_INTEGER,
|
|
455
|
+
voiceStyles: OPTIONAL_STRING,
|
|
456
|
+
});
|
|
457
|
+
export const CLOSEBOT_SMART_FAQ_STATE_SCHEMA = z.union([
|
|
458
|
+
z.literal(0),
|
|
459
|
+
z.literal(1),
|
|
460
|
+
]);
|
|
461
|
+
export const CLOSEBOT_SMART_FAQ_SCHEMA = z.object({
|
|
462
|
+
agencyId: OPTIONAL_STRING,
|
|
463
|
+
answer: OPTIONAL_STRING,
|
|
464
|
+
id: OPTIONAL_STRING,
|
|
465
|
+
leadIds: z.string().array().nullable().optional(),
|
|
466
|
+
question: OPTIONAL_STRING,
|
|
467
|
+
sourceId: OPTIONAL_STRING,
|
|
468
|
+
state: CLOSEBOT_SMART_FAQ_STATE_SCHEMA.optional(),
|
|
469
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
export declare const GOOGLE_ADS_CUSTOMER_ID_SCHEMA: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
|
|
3
|
+
export declare const GOOGLE_ADS_RESOURCE_NAME_SCHEMA: z.ZodString;
|
|
4
|
+
export declare const GOOGLE_ADS_SECRET_SCHEMA: z.ZodObject<{
|
|
5
|
+
accessToken: z.ZodString;
|
|
6
|
+
developerToken: z.ZodString;
|
|
7
|
+
tokenType: z.ZodString;
|
|
8
|
+
}, z.core.$strip>;
|
|
9
|
+
export interface GoogleAdsRequestOptions<TSchema extends z.ZodType> {
|
|
10
|
+
body?: z.input<ReturnType<typeof z.json>>;
|
|
11
|
+
loginCustomerId?: string;
|
|
12
|
+
method?: "GET" | "POST";
|
|
13
|
+
responseSchema: TSchema;
|
|
14
|
+
}
|
|
15
|
+
interface GoogleAdsApiErrorOptions {
|
|
16
|
+
message?: string;
|
|
17
|
+
providerStatus?: string;
|
|
18
|
+
requestId?: string;
|
|
19
|
+
retryAfter?: string;
|
|
20
|
+
status: number;
|
|
21
|
+
}
|
|
22
|
+
/** Structured Google Ads REST failure with correlation metadata. */
|
|
23
|
+
export declare class GoogleAdsApiError extends Error {
|
|
24
|
+
readonly providerStatus?: string;
|
|
25
|
+
readonly requestId?: string;
|
|
26
|
+
readonly retryAfter?: string;
|
|
27
|
+
readonly status: number;
|
|
28
|
+
/** Creates a structured failure from one provider response. */
|
|
29
|
+
/** @param options - HTTP and Google Ads error metadata. */
|
|
30
|
+
constructor(options: GoogleAdsApiErrorOptions);
|
|
31
|
+
}
|
|
32
|
+
/** Creates an authenticated Google Ads v25 REST client. */
|
|
33
|
+
/** @param secret - Resolved Google OAuth and platform developer credentials. */
|
|
34
|
+
export declare function getGoogleAdsApi(secret: unknown): {
|
|
35
|
+
request<TSchema extends z.ZodType>(path: string, options: GoogleAdsRequestOptions<TSchema>): Promise<z.output<TSchema>>;
|
|
36
|
+
};
|
|
37
|
+
/** Normalizes a Google Ads customer ID for paths and headers. */
|
|
38
|
+
/** @param value - Dashed or compact 10-digit customer ID. */
|
|
39
|
+
export declare function normalizeGoogleAdsCustomerId(value: string): string;
|
|
40
|
+
export {};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import * as z from "zod";
|
|
2
|
+
const GOOGLE_ADS_API_ORIGIN = "https://googleads.googleapis.com";
|
|
3
|
+
const GOOGLE_ADS_API_VERSION = "v25";
|
|
4
|
+
export const GOOGLE_ADS_CUSTOMER_ID_SCHEMA = z
|
|
5
|
+
.string()
|
|
6
|
+
.trim()
|
|
7
|
+
.regex(/^(?:\d{3}-?\d{3}-?\d{4})$/, "Enter a 10-digit customer ID.")
|
|
8
|
+
.transform((value) => value.replaceAll("-", ""));
|
|
9
|
+
export const GOOGLE_ADS_RESOURCE_NAME_SCHEMA = z
|
|
10
|
+
.string()
|
|
11
|
+
.regex(/^customers\/\d{10}\/[A-Za-z][A-Za-z0-9]*(?:\/[^/]+)+$/);
|
|
12
|
+
export const GOOGLE_ADS_SECRET_SCHEMA = z.object({
|
|
13
|
+
accessToken: z.string().min(1),
|
|
14
|
+
developerToken: z.string().min(1),
|
|
15
|
+
tokenType: z.string().min(1),
|
|
16
|
+
});
|
|
17
|
+
const GOOGLE_ADS_FAILURE_SCHEMA = z.looseObject({
|
|
18
|
+
error: z
|
|
19
|
+
.looseObject({
|
|
20
|
+
code: z.number().int().optional(),
|
|
21
|
+
message: z.string().optional(),
|
|
22
|
+
status: z.string().optional(),
|
|
23
|
+
})
|
|
24
|
+
.optional(),
|
|
25
|
+
});
|
|
26
|
+
/** Structured Google Ads REST failure with correlation metadata. */
|
|
27
|
+
export class GoogleAdsApiError extends Error {
|
|
28
|
+
providerStatus;
|
|
29
|
+
requestId;
|
|
30
|
+
retryAfter;
|
|
31
|
+
status;
|
|
32
|
+
/** Creates a structured failure from one provider response. */
|
|
33
|
+
/** @param options - HTTP and Google Ads error metadata. */
|
|
34
|
+
constructor(options) {
|
|
35
|
+
super(options.message ??
|
|
36
|
+
`Google Ads API request failed with status ${options.status}.`);
|
|
37
|
+
this.name = "GoogleAdsApiError";
|
|
38
|
+
this.providerStatus = options.providerStatus;
|
|
39
|
+
this.requestId = options.requestId;
|
|
40
|
+
this.retryAfter = options.retryAfter;
|
|
41
|
+
this.status = options.status;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/** Creates an authenticated Google Ads v25 REST client. */
|
|
45
|
+
/** @param secret - Resolved Google OAuth and platform developer credentials. */
|
|
46
|
+
export function getGoogleAdsApi(secret) {
|
|
47
|
+
const credentials = GOOGLE_ADS_SECRET_SCHEMA.parse(secret);
|
|
48
|
+
return {
|
|
49
|
+
async request(path, options) {
|
|
50
|
+
const normalizedPath = path.replace(/^\/+/, "");
|
|
51
|
+
if (!normalizedPath ||
|
|
52
|
+
normalizedPath.includes("://") ||
|
|
53
|
+
normalizedPath.includes("\\")) {
|
|
54
|
+
throw new TypeError("Google Ads API paths must be relative.");
|
|
55
|
+
}
|
|
56
|
+
const url = new URL(`${GOOGLE_ADS_API_VERSION}/${normalizedPath}`, `${GOOGLE_ADS_API_ORIGIN}/`);
|
|
57
|
+
if (url.origin !== GOOGLE_ADS_API_ORIGIN) {
|
|
58
|
+
throw new TypeError("Google Ads API paths must remain on googleads.googleapis.com.");
|
|
59
|
+
}
|
|
60
|
+
const headers = new Headers({
|
|
61
|
+
Accept: "application/json",
|
|
62
|
+
Authorization: `${credentials.tokenType} ${credentials.accessToken}`,
|
|
63
|
+
"developer-token": credentials.developerToken,
|
|
64
|
+
});
|
|
65
|
+
if (options.loginCustomerId) {
|
|
66
|
+
headers.set("login-customer-id", GOOGLE_ADS_CUSTOMER_ID_SCHEMA.parse(options.loginCustomerId));
|
|
67
|
+
}
|
|
68
|
+
if (options.body !== undefined) {
|
|
69
|
+
headers.set("Content-Type", "application/json");
|
|
70
|
+
}
|
|
71
|
+
const response = await fetch(url, {
|
|
72
|
+
body: options.body === undefined ? undefined : JSON.stringify(options.body),
|
|
73
|
+
headers,
|
|
74
|
+
method: options.method ?? (options.body === undefined ? "GET" : "POST"),
|
|
75
|
+
});
|
|
76
|
+
const payload = parseGoogleAdsJson(await response.text());
|
|
77
|
+
if (!response.ok) {
|
|
78
|
+
const failure = GOOGLE_ADS_FAILURE_SCHEMA.safeParse(payload);
|
|
79
|
+
throw new GoogleAdsApiError({
|
|
80
|
+
message: failure.success ? failure.data.error?.message : undefined,
|
|
81
|
+
providerStatus: failure.success
|
|
82
|
+
? failure.data.error?.status
|
|
83
|
+
: undefined,
|
|
84
|
+
requestId: response.headers.get("request-id") ?? undefined,
|
|
85
|
+
retryAfter: response.headers.get("retry-after") ?? undefined,
|
|
86
|
+
status: response.status,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
return options.responseSchema.parse(payload);
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
/** Normalizes a Google Ads customer ID for paths and headers. */
|
|
94
|
+
/** @param value - Dashed or compact 10-digit customer ID. */
|
|
95
|
+
export function normalizeGoogleAdsCustomerId(value) {
|
|
96
|
+
return GOOGLE_ADS_CUSTOMER_ID_SCHEMA.parse(value);
|
|
97
|
+
}
|
|
98
|
+
/** Parses an optional Google Ads JSON response body. */
|
|
99
|
+
/** @param value - Raw response body. */
|
|
100
|
+
function parseGoogleAdsJson(value) {
|
|
101
|
+
if (!value)
|
|
102
|
+
return undefined;
|
|
103
|
+
try {
|
|
104
|
+
return JSON.parse(value);
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return value;
|
|
108
|
+
}
|
|
109
|
+
}
|