@elusion-sdk/briq
Version:
A modern TypeScript SDK for Briq SMS API integration
106 lines • 4.1 kB
JavaScript
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