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

224 lines 8.43 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.AccountService = void 0; const validation_1 = require("../utils/validation"); const Result_1 = require("../types/Result"); const MNotifyError_1 = require("../errors/MNotifyError"); const errorContext_1 = require("../errors/errorContext"); /** * Validates balance response */ const validateBalanceResponse = (data) => { if (!(0, validation_1.isObject)(data)) return false; if (!(0, validation_1.hasRequiredFields)(data, ["balance"])) { return false; } return (0, validation_1.isNumber)(data.balance); }; /** * Service for managing account operations with mNotify API */ class AccountService { constructor(client) { this.client = client; } annotate(result, operation) { return (0, errorContext_1.annotateResultError)(result, { service: "AccountService", operation, }); } /** * Retrieves current account balance (railway-oriented programming) * @returns Result containing balance information or error * * @example * ```typescript * const result = await accountService.getBalanceSafe(); * result.match({ * ok: (balance) => console.log(`Balance: ${balance.balance} ${balance.currency}`), * err: (error) => console.error('Failed to get balance:', error) * }); * ``` */ getBalanceSafe() { return __awaiter(this, void 0, void 0, function* () { const result = this.annotate(yield this.client.requestSafe({ method: "GET", url: "/balance/sms", }), "getBalanceSafe"); if (result.isErr()) { return result; } if (!validateBalanceResponse(result.value)) { return (0, Result_1.err)(new MNotifyError_1.MNotifyError("Invalid balance response format", 0, result.value, { service: "AccountService", operation: "getBalanceSafe", stage: "validation", })); } return (0, Result_1.ok)(result.value); }); } /** * Retrieves current account balance (throws on error - legacy API) * @returns Account balance information * @throws {MNotifyError} On API failure * * @example * ```typescript * const balance = await accountService.getBalance(); * console.log(`Balance: ${balance.balance} ${balance.currency}`); * ``` */ getBalance() { return __awaiter(this, void 0, void 0, function* () { const result = yield this.getBalanceSafe(); return result.unwrap(); }); } /** * Retrieves list of registered sender IDs (railway-oriented programming) * @returns Result containing array of sender IDs or error * * @example * ```typescript * const result = await accountService.getSenderIdsSafe(); * if (result.isOk()) { * console.log('Available sender IDs:', result.value); * } * ``` */ getSenderIdsSafe() { return __awaiter(this, void 0, void 0, function* () { return (0, Result_1.err)(new MNotifyError_1.MNotifyError("mNotify v2 does not provide a sender list endpoint. Use checkSenderIdStatusSafe(senderName).", 400, undefined, { service: "AccountService", operation: "getSenderIdsSafe", stage: "validation", path: "/senderid/status", })); }); } /** * Retrieves list of registered sender IDs (throws on error - legacy API) * @returns Array of sender IDs * @throws {MNotifyError} On API failure * * @example * ```typescript * const senderIds = await accountService.getSenderIds(); * console.log('Available sender IDs:', senderIds); * ``` */ getSenderIds() { return __awaiter(this, void 0, void 0, function* () { const result = yield this.getSenderIdsSafe(); return result.unwrap(); }); } /** * Registers a new sender ID (railway-oriented programming) * @param name - Sender ID name to register * @returns Result containing registration response or error * * @example * ```typescript * const result = await accountService.registerSenderIdSafe('MyApp'); * result.match({ * ok: (res) => console.log('Sender ID registered:', res), * err: (error) => console.error('Registration failed:', error) * }); * ``` */ registerSenderIdSafe(name_1) { return __awaiter(this, arguments, void 0, function* (name, purpose = ["general"]) { const result = this.annotate(yield this.client.requestSafe({ method: "POST", url: "/senderid/register", data: { sender_name: name, purpose, }, }), "registerSenderIdSafe"); if (result.isErr()) { return result; } if (!(0, validation_1.isObject)(result.value)) { return (0, Result_1.err)(new MNotifyError_1.MNotifyError("Invalid sender ID registration response", 0, result.value, { service: "AccountService", operation: "registerSenderIdSafe", stage: "validation", })); } return (0, Result_1.ok)(result.value); }); } /** * Registers a new sender ID (throws on error - legacy API) * @param name - Sender ID name to register * @returns Registration response * @throws {MNotifyError} On API failure * * @example * ```typescript * const result = await accountService.registerSenderId('MyApp'); * console.log('Sender ID registered:', result); * ``` */ registerSenderId(name_1) { return __awaiter(this, arguments, void 0, function* (name, purpose = ["general"]) { const result = yield this.registerSenderIdSafe(name, purpose); return result.unwrap(); }); } /** * Checks sender ID approval status (railway-oriented programming) * @param name - Sender ID name * @returns Result containing sender status response or error */ checkSenderIdStatusSafe(name) { return __awaiter(this, void 0, void 0, function* () { const result = this.annotate(yield this.client.requestSafe({ method: "POST", url: "/senderid/status", data: { sender_name: name, }, }), "checkSenderIdStatusSafe"); if (result.isErr()) { return result; } if (!(0, validation_1.isObject)(result.value)) { return (0, Result_1.err)(new MNotifyError_1.MNotifyError("Invalid sender ID status response", 0, result.value, { service: "AccountService", operation: "checkSenderIdStatusSafe", stage: "validation", })); } return (0, Result_1.ok)(result.value); }); } /** * Checks sender ID approval status (throws on error - legacy API) * @param name - Sender ID name * @returns Sender status response */ checkSenderIdStatus(name) { return __awaiter(this, void 0, void 0, function* () { const result = yield this.checkSenderIdStatusSafe(name); return result.unwrap(); }); } } exports.AccountService = AccountService; //# sourceMappingURL=AccountService.js.map