UNPKG

@jokoor/sdk

Version:
176 lines 6.43 kB
"use strict"; /** * Campaigns resource - User-friendly wrapper for SMS campaigns API */ Object.defineProperty(exports, "__esModule", { value: true }); exports.Campaigns = void 0; const base_1 = require("./base"); const api_1 = require("../generated/api"); const result_1 = require("../types/result"); class Campaigns extends base_1.BaseResource { constructor(configuration) { super(configuration); this.api = new api_1.SMSCampaignsApi(configuration); } /** * Create a new SMS campaign * * Recipients: Must provide at least one of: * - `contactIds` (array of individual contacts) * - `contactGroupIds` (array of contact groups) * - Can use both together * * Message: Must provide at least one of: * - `message` (direct message content) * - `templateId` (template to use) * - If both provided, `message` takes precedence * * @param params Campaign creation parameters * @returns Created campaign */ async create(params) { // Validate recipients const hasContactIds = params.contactIds && params.contactIds.length > 0; const hasGroupIds = params.contactGroupIds && params.contactGroupIds.length > 0; if (!hasContactIds && !hasGroupIds) { return (0, result_1.err)('Must provide at least one of: contactIds or contactGroupIds'); } // Validate message content if (!params.message && !params.templateId) { return (0, result_1.err)('Must provide at least one of: message or templateId'); } // Map to API parameters (snake_case) const apiParams = { name: params.name, message_body: params.message, template_id: params.templateId, contact_ids: params.contactIds, contact_group_ids: params.contactGroupIds, scheduled_at: params.scheduledAt, is_draft: params.isDraft, sender_id_config_id: params.senderIdConfigId, template_params: params.templateParams }; const result = await this.handleApiCall(() => this.api.v1SmsCampaignsPost(apiParams)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)(this.convertKeysToCamelCase(result.data)); } /** * Get a campaign by ID * @param id Campaign ID * @returns Campaign details */ async get(id) { // Validate ID is not empty if (!id || id.trim() === '') { return (0, result_1.err)('Campaign ID is required'); } const result = await this.handleApiCall(() => this.api.v1SmsCampaignsIdGet(id)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)(this.convertKeysToCamelCase(result.data)); } /** * Update a campaign * @param id Campaign ID * @param params Update parameters * @returns Updated campaign */ async update(id, params) { // Map to API parameters (snake_case) const apiParams = { name: params.name, message_body: params.message, scheduled_at: params.scheduledAt }; const result = await this.handleApiCall(() => this.api.v1SmsCampaignsIdPut(id, apiParams)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)(this.convertKeysToCamelCase(result.data)); } /** * Delete a campaign * @param id Campaign ID * @returns Deletion confirmation */ async delete(id) { return await this.handleApiCall(() => this.api.v1SmsCampaignsIdDelete(id)); } /** * List campaigns with pagination and filtering * @param options List options * @returns Paginated list of campaigns */ async list(options) { const result = await this.handlePaginatedApiCall(() => this.api.v1SmsCampaignsGet(options?.limit, options?.offset, options?.status, options?.search, undefined // sort parameter )); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)({ ...result.data, items: result.data.items.map(item => this.convertKeysToCamelCase(item)) }); } /** * Send a draft campaign * @param id Campaign ID * @param params Send parameters (scheduled time, etc.) * @returns Send response */ async send(id) { const result = await this.handleApiCall(() => this.api.v1SmsCampaignsIdSendPost(id)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)(this.convertKeysToCamelCase(result.data)); } // Note: Cancel, pause, and resume methods removed as they don't exist in the generated API /** * Get campaign statistics * @param id Campaign ID * @returns Campaign statistics */ async getStats(id) { const result = await this.handleApiCall(() => this.api.v1SmsCampaignsIdStatisticsGet(id)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)(this.convertKeysToCamelCase(result.data)); } /** * Get campaign messages * @param id Campaign ID * @param options List options * @returns Campaign messages */ async getMessages(id, options) { const result = await this.handlePaginatedApiCall(() => this.api.v1SmsCampaignsIdMessagesGet(id, options?.status, options?.perPage, (options?.page && options?.perPage) ? (options.page - 1) * options.perPage : 0)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)({ ...result.data, items: result.data.items.map(item => this.convertKeysToCamelCase(item)) }); } /** * Resend failed messages in a campaign * @param id Campaign ID * @param params Resend parameters * @returns Resend response */ async resendFailed(id) { const result = await this.handleApiCall(() => this.api.v1SmsCampaignsIdResendFailedPost(id)); if ((0, result_1.isErr)(result)) { return result; } return (0, result_1.ok)(this.convertKeysToCamelCase(result.data)); } } exports.Campaigns = Campaigns; //# sourceMappingURL=campaigns.js.map