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
JavaScript
;
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