import { UseSend } from "./usesend"; import { paths } from "../types/schema"; import { ErrorResponse } from "../types"; type CreateCampaignPayload = paths["/v1/campaigns"]["post"]["requestBody"]["content"]["application/json"]; type CreateCampaignResponse = { data: CreateCampaignResponseSuccess | null; error: ErrorResponse | null; }; type CreateCampaignResponseSuccess = paths["/v1/campaigns"]["post"]["responses"]["200"]["content"]["application/json"]; type GetCampaignResponseSuccess = paths["/v1/campaigns/{campaignId}"]["get"]["responses"]["200"]["content"]["application/json"]; type GetCampaignResponse = { data: GetCampaignResponseSuccess | null; error: ErrorResponse | null; }; type ScheduleCampaignPayload = paths["/v1/campaigns/{campaignId}/schedule"]["post"]["requestBody"]["content"]["application/json"]; type ScheduleCampaignResponseSuccess = paths["/v1/campaigns/{campaignId}/schedule"]["post"]["responses"]["200"]["content"]["application/json"]; type ScheduleCampaignResponse = { data: ScheduleCampaignResponseSuccess | null; error: ErrorResponse | null; }; type CampaignActionResponseSuccess = { success: boolean }; type CampaignActionResponse = { data: CampaignActionResponseSuccess | null; error: ErrorResponse | null; }; export class Campaigns { constructor(private readonly usesend: UseSend) { this.usesend = usesend; } async create( payload: CreateCampaignPayload, ): Promise { const data = await this.usesend.post( `/campaigns`, payload, ); return data; } async get(campaignId: string): Promise { const data = await this.usesend.get( `/campaigns/${campaignId}`, ); return data; } async schedule( campaignId: string, payload: ScheduleCampaignPayload, ): Promise { const data = await this.usesend.post( `/campaigns/${campaignId}/schedule`, payload, ); return data; } async pause(campaignId: string): Promise { const data = await this.usesend.post( `/campaigns/${campaignId}/pause`, {}, ); return data; } async resume(campaignId: string): Promise { const data = await this.usesend.post( `/campaigns/${campaignId}/resume`, {}, ); return data; } }