@davidbolaji/termii-node
Version:
Node.js SDK for Termii API – send SMS, voice, OTP, and manage messaging with ease.
296 lines (295 loc) • 11.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.initialize = initialize;
exports.sendMessage = sendMessage;
exports.sendBulkMessage = sendBulkMessage;
exports.sendTemplate = sendTemplate;
exports.sendCampaign = sendCampaign;
exports.fetchCampaignHistory = fetchCampaignHistory;
exports.retryCampaign = retryCampaign;
exports.fetchContacts = fetchContacts;
exports.addContact = addContact;
exports.uploadContacts = uploadContacts;
exports.deleteContact = deleteContact;
exports.fetchPhonebooks = fetchPhonebooks;
exports.createPhonebook = createPhonebook;
exports.updatePhonebook = updatePhonebook;
exports.deletePhonebook = deletePhonebook;
exports.fetchSenderIds = fetchSenderIds;
exports.requestSenderId = requestSenderId;
exports.sendToken = sendToken;
exports.sendEmailToken = sendEmailToken;
exports.verifyToken = verifyToken;
exports.generateToken = generateToken;
exports.sendVoiceToken = sendVoiceToken;
exports.sendVoiceCall = sendVoiceCall;
exports.getBalance = getBalance;
exports.authenticateEsim = authenticateEsim;
exports.fetchEsimPlans = fetchEsimPlans;
exports.createEsim = createEsim;
exports.getEsimQrCode = getEsimQrCode;
exports.getEsimUsage = getEsimUsage;
exports.fetchEsims = fetchEsims;
const HttpClient_1 = require("../../http/HttpClient");
const MessageService_1 = require("./MessageService");
const TemplateService_1 = require("./TemplateService");
const CampaignService_1 = require("./campaign/CampaignService");
const SenderIdService_1 = require("./SenderIdService");
const TokenService_1 = require("../token/TokenService");
const InsightService_1 = require("../insights/InsightService");
const SotelService_1 = require("../sotel/SotelService");
/**
* Singleton HttpClient instance and API key storage
*/
let httpClient = null;
let storedApiKey = null;
let storedBaseUrl = undefined;
/**
* Initialize the SDK with API key and optional baseUrl.
* Must be called before using any direct functions.
* @param apiKey API key string
* @param baseUrl Optional base URL string
*/
function initialize(apiKey, baseUrl) {
storedApiKey = apiKey;
storedBaseUrl = baseUrl;
httpClient = new HttpClient_1.HttpClient({ apiKey, baseURL: baseUrl });
}
function getHttpClient() {
if (!httpClient) {
if (!storedApiKey) {
throw new Error("SDK not initialized. Call initialize(apiKey, baseUrl?) first.");
}
httpClient = new HttpClient_1.HttpClient({ apiKey: storedApiKey, baseURL: storedBaseUrl });
}
return httpClient;
}
/**
* Send a single SMS or WhatsApp message directly without instantiating MessageService.
* @param payload SendMessageRequest payload
* @returns Promise resolving to SendMessageResponse
*/
async function sendMessage(payload) {
const service = new MessageService_1.MessageService(getHttpClient());
return service.sendMessage(payload);
}
/**
* Send bulk messages directly without instantiating MessageService.
* @param payload SendBulkMessageRequest payload
* @returns Promise resolving to SendBulkMessageResponse
*/
async function sendBulkMessage(payload) {
const service = new MessageService_1.MessageService(getHttpClient());
return service.sendBulkMessage(payload);
}
/**
* Send a template message directly without instantiating TemplatesService.
* @param payload SendTemplateRequest payload
* @returns Promise resolving to SendTemplateResponse
*/
async function sendTemplate(payload) {
const service = new TemplateService_1.TemplatesService(getHttpClient());
return service.sendTemplate(payload);
}
/**
* Send a campaign message directly without instantiating CampaignService.
* @param payload SendCampaignRequest payload
* @returns Promise resolving to SendCampaignResponse
*/
async function sendCampaign(payload) {
const service = new CampaignService_1.CampaignService(getHttpClient());
// The CampaignService does not have sendCampaign method, use 'campaign' property or correct method
if (typeof service.sendCampaign === "function") {
return service.sendCampaign(payload);
}
if (service.campaign && typeof service.campaign.sendCampaign === "function") {
return service.campaign.sendCampaign(payload);
}
throw new Error("sendCampaign method not found on CampaignService");
}
async function fetchCampaignHistory(campaignId) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.campaign.fetchCampaignHistory(campaignId);
}
async function retryCampaign(campaignId) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.campaign.retryCampaign(campaignId);
}
// Contact methods
async function fetchContacts(phonebookId) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.contact.fetchContacts(phonebookId);
}
async function addContact(phonebookId, contact) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.contact.addContact(phonebookId, contact);
}
async function uploadContacts(request) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.contact.uploadContacts(request);
}
async function deleteContact(contactId) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.contact.deleteContact(contactId);
}
// Phonebook methods
async function fetchPhonebooks() {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.phonebook.fetchPhonebooks();
}
async function createPhonebook(payload) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.phonebook.createPhonebook(payload);
}
async function updatePhonebook(phonebookId, payload) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.phonebook.updatePhonebook(phonebookId, payload);
}
async function deletePhonebook(phonebookId) {
const service = new CampaignService_1.CampaignService(getHttpClient());
return service.phonebook.deletePhonebook(phonebookId);
}
/**
* Fetch sender IDs directly without instantiating SenderIdService.
* @param page Page number
* @returns Promise resolving to sender IDs response
*/
async function fetchSenderIds(page) {
const service = new SenderIdService_1.SenderIdService(getHttpClient());
const response = await service.fetchSenderIds(page);
// Wrap response to include code and message if missing
if (!('code' in response) || !('message' in response)) {
return {
code: 'ok',
message: 'Success',
...response,
};
}
return response;
}
/**
* Request new sender ID directly without instantiating SenderIdService.
* @param payload SenderIdReqParam
* @returns Promise resolving to sender ID request response
*/
async function requestSenderId(payload) {
const service = new SenderIdService_1.SenderIdService(getHttpClient());
return service.requestSenderId(payload);
}
/**
* Send OTP token directly without instantiating TokenService.
* @param payload SendTokenRequest
* @returns Promise resolving to SendTokenResponse
*/
async function sendToken(payload) {
const service = new TokenService_1.TokenService(getHttpClient());
return service.sendToken(payload);
}
/**
* Send OTP token directly without instantiating TokenService.
* @param payload SendEmailTokenRequest
* @returns Promise resolving to SendEmailTokenResponse
*/
async function sendEmailToken(payload) {
const service = new TokenService_1.TokenService(getHttpClient());
return service.email.sendEmailToken(payload);
}
/**
* Verify token directly without instantiating TokenService.
* @param payload VerifyTokenRequest
* @returns Promise resolving to VerifyTokenResponse
*/
async function verifyToken(payload) {
const service = new TokenService_1.TokenService(getHttpClient());
return service.verify.verifyToken(payload);
}
/**
* Generate inApp token directly without instantiating TokenService.
* @param payload InAppTokenRequest
* @returns Promise resolving to InAppTokenResponse
*/
async function generateToken(payload) {
const service = new TokenService_1.TokenService(getHttpClient());
return service.inApp.generate(payload);
}
/**
* Send voice OTP token directly without instantiating TokenService.
* @param payload VoiceTokenRequest
* @returns Promise resolving to VoiceTokenResponse
*/
async function sendVoiceToken(payload) {
const service = new TokenService_1.TokenService(getHttpClient());
return service.sendVoiceToken(payload);
}
/**
* Send voice call OTP token directly without instantiating TokenService.
* @param payload VoiceCallRequest
* @returns Promise resolving to VoiceCallResponse
*/
async function sendVoiceCall(payload) {
const service = new TokenService_1.TokenService(getHttpClient());
return service.sendVoiceCall(payload);
}
/**
* Fetch account balance directly without instantiating InsightService.
* @returns Promise resolving to BalanceResponse
*/
async function getBalance() {
const service = new InsightService_1.InsightService(getHttpClient());
return service.balance.getBalance();
}
/**
* Authenticate with API key to get a bearer token directly without instantiating EsimService.
* @param payload AuthenticateRequest
* @returns Promise resolving to AuthenticateResponse
*/
async function authenticateEsim(payload) {
const service = new SotelService_1.SotelService(getHttpClient());
return service.esim.authenticate(payload);
}
/**
* Fetch eSIM plans directly without instantiating EsimService.
* @param payload FetchPlansRequest
* @returns Promise resolving to FetchPlansResponse
*/
async function fetchEsimPlans(payload) {
const service = new SotelService_1.SotelService(getHttpClient());
return service.esim.fetchPlans(payload);
}
/**
* Create (provision) a new eSIM directly without instantiating EsimService.
* @param payload CreateEsimRequest
* @returns Promise resolving to CreateEsimResponse
*/
async function createEsim(payload) {
const service = new SotelService_1.SotelService(getHttpClient());
return service.esim.createEsim(payload);
}
/**
* Get QR code for activating an eSIM directly without instantiating EsimService.
* @param iccid eSIM ICCID string
* @returns Promise resolving to QrCodeResponse
*/
async function getEsimQrCode(iccid) {
const service = new SotelService_1.SotelService(getHttpClient());
return service.esim.getQrCode(iccid);
}
/**
* Get usage details of an eSIM directly without instantiating EsimService.
* @param iccid eSIM ICCID string
* @returns Promise resolving to UsageResponse
*/
async function getEsimUsage(iccid) {
const service = new SotelService_1.SotelService(getHttpClient());
return service.esim.getUsage(iccid);
}
/**
* Fetch list of provisioned eSIMs directly without instantiating EsimService.
* @param page Page number (default 0)
* @param size Page size (default 15)
* @returns Promise resolving to FetchEsimsResponse
*/
async function fetchEsims(page = 0, size = 15) {
const service = new SotelService_1.SotelService(getHttpClient());
return service.esim.fetchEsims(page, size);
}