@jokoor/sdk
Version:
Jokoor SMS API SDK for JavaScript/TypeScript
128 lines • 4.63 kB
JavaScript
"use strict";
/**
* SMS resource - User-friendly wrapper for SMS API
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.SMS = void 0;
const base_1 = require("./base");
const api_1 = require("../generated/api");
const result_1 = require("../types/result");
class SMS extends base_1.BaseResource {
constructor(configuration) {
super(configuration);
this.api = new api_1.SMSApi(configuration);
}
/**
* Send an SMS message
*
* Recipient specification:
* - Can use `to` (phone number) alone
* - Can use `contactId` alone (service fetches phone from contact)
* - If both provided, `contactId` takes precedence
*
* Message content:
* - Can use `message` alone
* - Can use `templateId` alone (service fetches template content)
* - If both provided, `message` takes precedence
*
* @param params SMS parameters
* @returns SMS response with message ID
*/
async send(params) {
// Validate that we have at least one recipient method
if (!params.to && !params.contactId) {
return (0, result_1.err)('Either "to" (phone number) or "contactId" must be provided');
}
// Validate that we have at least one message method
if (!params.message && !params.templateId) {
return (0, result_1.err)('Either "message" or "templateId" must be provided');
}
const apiParams = {
recipient_phone: params.to || '',
message_body: params.message || '',
scheduled_at: params.scheduledAt,
is_draft: params.isDraft,
contact_id: params.contactId,
template_id: params.templateId,
template_params: params.templateParams,
};
const result = await this.handleApiCall(() => this.api.v1SmsPost(apiParams));
if ((0, result_1.isErr)(result)) {
return result;
}
return (0, result_1.ok)(this.convertKeysToCamelCase(result.data));
}
/**
* Get SMS message details
* @param id SMS message ID
* @returns SMS message details
*/
async get(id) {
if (!id || id.trim() === '') {
return (0, result_1.err)('SMS ID is required');
}
const result = await this.handleApiCall(() => this.api.v1SmsIdGet(id));
if ((0, result_1.isErr)(result)) {
return result;
}
return (0, result_1.ok)(this.convertKeysToCamelCase(result.data));
}
/**
* List SMS messages with filtering and pagination
* @param options List options
* @returns Paginated list of SMS messages
*/
async list(options) {
const result = await this.handlePaginatedApiCall(() => this.api.v1SmsGet(options?.limit, options?.offset, options?.status, options?.startDate, options?.endDate, options?.search, options?.sort));
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 a failed SMS message
* @param id SMS message ID
* @returns Resend response
*/
async resend(id) {
const result = await this.handleApiCall(() => this.api.v1SmsIdResendPost(id));
if ((0, result_1.isErr)(result)) {
return result;
}
return (0, result_1.ok)(this.convertKeysToCamelCase(result.data));
}
/**
* Resend multiple failed SMS messages
* @param messageIds Array of message IDs to resend
* @returns Batch resend results
*/
async resendBatch(messageIds) {
const request = {
message_ids: messageIds
};
const result = await this.handleApiCall(() => this.api.v1SmsResendFailedPost(request));
if ((0, result_1.isErr)(result)) {
return result;
}
return (0, result_1.ok)(this.convertKeysToCamelCase(result.data));
}
/**
* Send a draft SMS message
* @param id Draft SMS ID
* @param scheduledAt Optional scheduled time
* @returns Send response
*/
async sendDraft(id, scheduledAt) {
const params = scheduledAt ? { scheduled_at: scheduledAt } : {};
const result = await this.handleApiCall(() => this.api.v1SmsIdSendDraftPost(id, params));
if ((0, result_1.isErr)(result)) {
return result;
}
return (0, result_1.ok)(this.convertKeysToCamelCase(result.data));
}
}
exports.SMS = SMS;
//# sourceMappingURL=sms.js.map