UNPKG

mnotify-ts-sdk

Version:

Modern, zero-dependency TypeScript SDK for mNotify BMS API - Type-safe SMS, contacts, and account management with Railway-Oriented Programming

158 lines 6.42 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SMSService = void 0; const validation_1 = require("../utils/validation"); const helpers_1 = require("../utils/helpers"); const Result_1 = require("../types/Result"); const MNotifyError_1 = require("../errors/MNotifyError"); const errorContext_1 = require("../errors/errorContext"); /** * Service for managing SMS operations with mNotify BMS API */ class SMSService { /** * Creates an instance of SMSService * @param {HttpClient} client - Configured API client instance */ constructor(client) { this.client = client; } annotate(result, operation) { return (0, errorContext_1.annotateResultError)(result, { service: "SMSService", operation, }); } /** * Sends bulk SMS messages to one or more recipients (railway-oriented programming) * @param {SendSMSOptions} options - SMS configuration * @returns {Promise<Result<SendSMSResponse, MNotifyError>>} Result containing send report or error * * @example * ```typescript * const result = await smsService.sendQuickBulkSMSSafe({ * recipient: ['233200000000', '233244444444'], * sender: 'MyApp', * message: 'Hello from mNotify!' * }); * * if (result.isOk()) { * console.log('SMS sent:', result.value); * } else { * console.error('Failed to send SMS:', result.error); * } * ``` */ sendQuickBulkSMSSafe(options) { return __awaiter(this, void 0, void 0, function* () { const payload = { recipient: (0, helpers_1.toArray)(options.recipient), sender: options.sender, message: options.message, is_schedule: options.is_schedule || false, schedule_date: options.schedule_date || "", }; const result = this.annotate(yield this.client.requestSafe({ method: "POST", url: "/sms/quick", data: payload, }), "sendQuickBulkSMSSafe"); if (result.isErr()) { return result; } if (!(0, validation_1.validateSMSResponse)(result.value)) { return (0, Result_1.err)(new MNotifyError_1.MNotifyError("Invalid SMS response format", 0, result.value, { service: "SMSService", operation: "sendQuickBulkSMSSafe", stage: "validation", })); } return (0, Result_1.ok)(result.value); }); } /** * Sends bulk SMS messages to one or more recipients (throws on error - legacy API) * @param {SendSMSOptions} options - SMS configuration * @returns {Promise<SendSMSResponse>} Detailed send report * @throws {MNotifyError} On API failure or validation errors * * @example * ```typescript * await smsService.sendQuickBulkSMS({ * recipient: ['233200000000', '233244444444'], * sender: 'MyApp', * message: 'Hello from mNotify!' * }); * ``` */ sendQuickBulkSMS(options) { return __awaiter(this, void 0, void 0, function* () { const result = yield this.sendQuickBulkSMSSafe(options); return result.unwrap(); }); } /** * Retrieves delivery status for a sent SMS campaign (railway-oriented programming) * @param {string} campaignId - ID from send response * @param {string} [status='null'] - Optional status filter * @returns {Promise<Result<SmsDeliveryReport, MNotifyError>>} Result containing delivery report or error * * @example * ```typescript * const result = await smsService.getSMSStatusSafe('campaign_123'); * result.match({ * ok: (report) => console.log('Status:', report.status), * err: (error) => console.error('Error:', error.message) * }); * ``` */ getSMSStatusSafe(campaignId_1) { return __awaiter(this, arguments, void 0, function* (campaignId, status = "null") { const result = this.annotate(yield this.client.requestSafe({ method: "GET", url: `/campaign/${campaignId}/${status}`, }), "getSMSStatusSafe"); if (result.isErr()) { return result; } if (!(0, validation_1.validateDeliveryReport)(result.value)) { return (0, Result_1.err)(new MNotifyError_1.MNotifyError("Invalid delivery report format", 0, result.value, { service: "SMSService", operation: "getSMSStatusSafe", stage: "validation", })); } return (0, Result_1.ok)(result.value); }); } /** * Retrieves delivery status for a sent SMS campaign (throws on error - legacy API) * @param {string} campaignId - ID from send response * @param {string} [status='null'] - Optional status filter * @returns {Promise<SmsDeliveryReport>} Detailed delivery report * @throws {MNotifyError} On API failure or invalid campaign ID * * @example * ```typescript * const report = await smsService.getSMSStatus('campaign_123'); * console.log(report.status); // 'delivered', 'failed', etc. * ``` */ getSMSStatus(campaignId_1) { return __awaiter(this, arguments, void 0, function* (campaignId, status = "null") { const result = yield this.getSMSStatusSafe(campaignId, status); return result.unwrap(); }); } } exports.SMSService = SMSService; //# sourceMappingURL=SMSService.js.map