@jokoor/sdk
Version:
Jokoor SMS API SDK for JavaScript/TypeScript
176 lines • 6.43 kB
JavaScript
"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