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