UNPKG

@elusion-sdk/briq

Version:

A modern TypeScript SDK for Briq SMS API integration

106 lines 4.1 kB
import { BaseService } from "./BaseService"; import { ENDPOINTS } from "../utils/constants"; import { validateMessage, validatePaginationParams, validatePhoneNumbers, validateUUID, } from "../utils/validators"; import { ValidationError } from "../utils/errors"; import { formatPhoneNumbers } from "../utils/helpers"; import { getDefaultsFromEnv } from "config/defaults"; export class MessageService extends BaseService { senderId; async sendInstant(request) { this.validateRequired(request, ["recipients", "content"]); const recipients = Array.isArray(request.recipients) ? request.recipients : [request.recipients]; validatePhoneNumbers(recipients); validateMessage(request.content); const formattedRecipients = formatPhoneNumbers(recipients); if (!request.sender_id) { if (!this.senderId) { this.senderId = getDefaultsFromEnv().senderId; } if (!this.senderId) { throw new ValidationError("Sender ID is required, set BRIQ_SENDER_ID env variable or pass it in the request"); } } const senderId = request.sender_id !== undefined ? request.sender_id : this.senderId; const sanitizedRequest = { content: request.content, recipients: formattedRecipients, sender_id: senderId, }; if (request.campaign_id) { sanitizedRequest.campaign_id = request.campaign_id; } try { return await this.client.post(ENDPOINTS.MESSAGES.SEND_INSTANT, sanitizedRequest); } catch (error) { throw new Error(`Failed to send instant message: ${this.formatError(error)}`); } } async sendCampaign(request) { this.validateRequired(request, ["campaign_id"]); validateUUID(request.campaign_id, "Campaign ID"); const sanitizedRequest = this.sanitizeInput(request); try { return await this.client.post(ENDPOINTS.MESSAGES.SEND_CAMPAIGN, sanitizedRequest); } catch (error) { throw new Error(`Failed to send campaign message: ${this.formatError(error)}`); } } async getLogs(params = {}) { if (Object.keys(params).length > 0) { validatePaginationParams(params); } if (params.campaign_id) { validateUUID(params.campaign_id, "Campaign ID"); } if (params.status && !["pending", "sent", "delivered", "failed", "cancelled"].includes(params.status)) { throw new ValidationError("Invalid status. Must be one of: pending, sent, delivered, failed, cancelled"); } if (params.phoneNumber !== undefined) { const formatted = formatPhoneNumbers([params.phoneNumber])[0]; if (formatted !== undefined) { params.phoneNumber = formatted; } } try { return (await this.client.get(ENDPOINTS.MESSAGES.LOGS, { params, })); } catch (error) { throw new Error(`Failed to get message logs: ${this.formatError(error)}`); } } async getHistory(params = {}) { if (Object.keys(params).length > 0) { validatePaginationParams(params); } if (params.workspace_id) { validateUUID(params.workspace_id, "Workspace ID"); } if (params.phoneNumber) { const formatted = formatPhoneNumbers([params.phoneNumber])[0]; if (formatted !== undefined) { params.phoneNumber = formatted; } else { delete params.phoneNumber; } } try { return (await this.client.get(ENDPOINTS.MESSAGES.HISTORY, { params, })); } catch (error) { throw new Error(`Failed to get message history: ${this.formatError(error)}`); } } } //# sourceMappingURL=MessageService.js.map