Skip to content

Commit e188fd2

Browse files
authored
feat: add sequence find to apollo (#256)
* add find endpoint * bump version * fix typing * fix sequence * new emailer_touch * fix types * fix types again * improve zod parsing * fix native property * bump version * version bump
1 parent e6524a1 commit e188fd2

File tree

3 files changed

+107
-21
lines changed

3 files changed

+107
-21
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@vesselapi/integrations",
3-
"version": "1.0.43",
3+
"version": "1.0.44",
44
"description": "Vessel integrations",
55
"main": "dist/index.js",
66
"module": "dist/index.mjs",

src/platforms/apollo/client.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import {
33
formatUrl,
44
makeRequestFactory,
55
} from '@/sdk/client';
6+
import * as custom from '@/sdk/validators';
67
import { objectify, shake } from 'radash';
78
import { z } from 'zod';
89
import { BASE_URL, DEFAULT_PAGE_SIZE } from './constants';
@@ -23,11 +24,13 @@ import {
2324
apolloEmailAccount,
2425
apolloEmailActivity,
2526
apolloEmailMessage,
27+
apolloEmailTemplate,
2628
apolloLabel,
2729
apolloPaginatedResponse,
2830
apolloPerson,
2931
apolloSequence,
3032
apolloSequenceStep,
33+
apolloSequenceTemplate,
3134
apolloTask,
3235
ApolloTaskBulkCompleteInput,
3336
apolloTaskBulkCompleteResponse,
@@ -205,6 +208,18 @@ export const client = {
205208
),
206209
},
207210
sequences: {
211+
find: request(({ id }: { id: string }) => ({
212+
url: `/emailer_campaigns/${id}`,
213+
method: 'GET',
214+
schema: custom.addNativeToZodSchema(
215+
z.object({
216+
emailer_campaign: apolloSequence,
217+
emailer_steps: z.array(apolloSequenceStep),
218+
emailer_templates: z.array(apolloEmailTemplate),
219+
emailer_touches: z.array(apolloSequenceTemplate),
220+
}),
221+
),
222+
})),
208223
search: request(
209224
({
210225
q_keywords,
@@ -414,7 +429,11 @@ export const client = {
414429
url: `/emailer_steps`,
415430
method: 'POST',
416431
json: shake(formatUpsertInputWithNative(step)),
417-
schema: apolloSequenceStep,
432+
schema: z.object({
433+
emailer_step: apolloSequenceStep,
434+
emailer_template: apolloEmailTemplate,
435+
emailer_touch: apolloSequenceTemplate,
436+
}),
418437
})),
419438
},
420439
sequenceTemplates: {

src/platforms/apollo/schemas.ts

Lines changed: 86 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -344,33 +344,68 @@ export type ApolloCreateSequence = z.infer<typeof apolloCreateSequence>;
344344

345345
export const apolloSequenceStep = custom.addNativeToZodSchema(
346346
z.object({
347-
emailer_step: z.object({
348-
id: z.string(),
349-
}),
350-
emailer_touch: z.object({
351-
id: z.string(),
352-
}),
353-
emailer_template: z.object({
354-
id: z.string(),
355-
}),
347+
id: z.string(),
348+
emailer_campaign_id: z.string().nullish(),
349+
position: z.number().nullish(),
350+
wait_time: z.number().nullish(),
351+
type: z.string().nullish(),
352+
wait_mode: z.string().nullish(),
353+
note: z.string().nullish(),
354+
max_emails_per_day: z.number().nullish(),
355+
exact_datetime: z.string().nullish(),
356+
priority: z.string().nullish(),
357+
auto_skip_in_x_days: z.number().nullish(),
358+
counts: z
359+
.object({
360+
active: z.number().nullish(),
361+
paused: z.number().nullish(),
362+
finished: z.number().nullish(),
363+
bounced: z.number().nullish(),
364+
spam_blocked: z.number().nullish(),
365+
hard_bounced: z.number().nullish(),
366+
not_sent: z.number().nullish(),
367+
})
368+
.nullish(),
356369
}),
357370
);
358371

359372
export type ApolloSequenceStep = z.infer<typeof apolloSequenceStep>;
360373

361-
export const apolloCreateSequenceStep = z.object({
362-
emailer_campaign_id: z.string(),
363-
priority: z.string().optional(),
364-
position: z.number().optional(),
365-
type: z.string().optional(),
366-
wait_mode: z.string().optional(),
367-
wait_time: z.number().optional(),
368-
exact_datetime: z.string().optional(),
369-
$native: z.record(z.any()).optional(),
370-
});
374+
export const apolloCreateSequenceStep = custom.addNativeToZodSchema(
375+
z.object({
376+
emailer_campaign_id: z.string(),
377+
priority: z.string().optional(),
378+
position: z.number().optional(),
379+
type: z.string().optional(),
380+
wait_mode: z.string().optional(),
381+
wait_time: z.number().optional(),
382+
exact_datetime: z.string().optional(),
383+
$native: z.record(z.any()).optional(),
384+
}),
385+
);
371386

372387
export type ApolloCreateSequenceStep = z.infer<typeof apolloCreateSequenceStep>;
373388

389+
export const apolloEmailTemplate = custom.addNativeToZodSchema(
390+
z.object({
391+
id: z.string(),
392+
name: z.string().nullish(),
393+
user_id: z.string().nullish(),
394+
subject: z.string().nullish(),
395+
archived: z.boolean().nullish(),
396+
created_at: custom.date().nullish(),
397+
global: z.boolean().nullish(),
398+
body_text: z.string().nullish(),
399+
folder_id: z.string().nullish(),
400+
body_html: z.string().nullish(),
401+
creation_type: z.string().nullish(),
402+
label_ids: z.array(z.string()).nullish(),
403+
prompt_id: z.string().nullish(),
404+
}),
405+
);
406+
407+
export type ApolloEmailTemplate = z.infer<typeof apolloEmailTemplate>;
408+
374409
export const apolloCreateTemplate = z.object({
375410
name: z.string().optional(),
376411
user_id: z.string().optional(),
@@ -385,6 +420,38 @@ export const apolloCreateTemplate = z.object({
385420

386421
export type ApolloCreateTemplate = z.infer<typeof apolloCreateTemplate>;
387422

423+
export const apolloSequenceTemplate = z.object({
424+
id: z.string(),
425+
emailer_step_id: z.string().nullish(),
426+
emailer_template_id: z.string().nullish(),
427+
status: z.string().nullish(),
428+
type: z.string().nullish(),
429+
include_signature: z.boolean().nullish(),
430+
has_personalized_opener: z.boolean().nullish(),
431+
personalized_opener_fallback_option: z.string().nullish(),
432+
generic_personalized_opener: z.string().nullish(),
433+
unique_scheduled: z.number().nullish(),
434+
unique_delivered: z.number().nullish(),
435+
unique_bounced: z.number().nullish(),
436+
unique_opened: z.number().nullish(),
437+
unique_replied: z.number().nullish(),
438+
bounce_rate: z.number().nullish(),
439+
open_rate: z.number().nullish(),
440+
reply_rate: z.number().nullish(),
441+
demo_rate: z.number().nullish(),
442+
unique_demoed: z.number().nullish(),
443+
unique_clicked: z.number().nullish(),
444+
click_rate: z.number().nullish(),
445+
unique_unsubscribed: z.number().nullish(),
446+
opt_out_rate: z.number().nullish(),
447+
unique_hard_bounced: z.number().nullish(),
448+
unique_spam_blocked: z.number().nullish(),
449+
hard_bounce_rate: z.number().nullish(),
450+
spam_block_rate: z.number().nullish(),
451+
});
452+
453+
export type ApolloSequenceTemplate = z.infer<typeof apolloSequenceTemplate>;
454+
388455
export const apolloUpdateSequenceTemplate = z.object({
389456
id: z.string(),
390457
emailer_template: apolloCreateTemplate,

0 commit comments

Comments
 (0)