UNPKG

@davidbolaji/termii-node

Version:

Node.js SDK for Termii API – send SMS, voice, OTP, and manage messaging with ease.

264 lines (263 loc) 9.71 kB
import { HttpClient } from "../../http/HttpClient"; import { MessageService } from "./MessageService"; import { TemplatesService } from "./TemplateService"; import { CampaignService } from "./campaign/CampaignService"; import { SenderIdService } from "./SenderIdService"; import { TokenService } from "../token/TokenService"; import { InsightService } from "../insights/InsightService"; import { SotelService } from "../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 */ export function initialize(apiKey, baseUrl) { storedApiKey = apiKey; storedBaseUrl = baseUrl; httpClient = new HttpClient({ apiKey, baseURL: baseUrl }); } function getHttpClient() { if (!httpClient) { if (!storedApiKey) { throw new Error("SDK not initialized. Call initialize(apiKey, baseUrl?) first."); } httpClient = new 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 */ export async function sendMessage(payload) { const service = new MessageService(getHttpClient()); return service.sendMessage(payload); } /** * Send bulk messages directly without instantiating MessageService. * @param payload SendBulkMessageRequest payload * @returns Promise resolving to SendBulkMessageResponse */ export async function sendBulkMessage(payload) { const service = new MessageService(getHttpClient()); return service.sendBulkMessage(payload); } /** * Send a template message directly without instantiating TemplatesService. * @param payload SendTemplateRequest payload * @returns Promise resolving to SendTemplateResponse */ export async function sendTemplate(payload) { const service = new TemplatesService(getHttpClient()); return service.sendTemplate(payload); } /** * Send a campaign message directly without instantiating CampaignService. * @param payload SendCampaignRequest payload * @returns Promise resolving to SendCampaignResponse */ export async function sendCampaign(payload) { const service = new 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"); } export async function fetchCampaignHistory(campaignId) { const service = new CampaignService(getHttpClient()); return service.campaign.fetchCampaignHistory(campaignId); } export async function retryCampaign(campaignId) { const service = new CampaignService(getHttpClient()); return service.campaign.retryCampaign(campaignId); } // Contact methods export async function fetchContacts(phonebookId) { const service = new CampaignService(getHttpClient()); return service.contact.fetchContacts(phonebookId); } export async function addContact(phonebookId, contact) { const service = new CampaignService(getHttpClient()); return service.contact.addContact(phonebookId, contact); } export async function uploadContacts(request) { const service = new CampaignService(getHttpClient()); return service.contact.uploadContacts(request); } export async function deleteContact(contactId) { const service = new CampaignService(getHttpClient()); return service.contact.deleteContact(contactId); } // Phonebook methods export async function fetchPhonebooks() { const service = new CampaignService(getHttpClient()); return service.phonebook.fetchPhonebooks(); } export async function createPhonebook(payload) { const service = new CampaignService(getHttpClient()); return service.phonebook.createPhonebook(payload); } export async function updatePhonebook(phonebookId, payload) { const service = new CampaignService(getHttpClient()); return service.phonebook.updatePhonebook(phonebookId, payload); } export async function deletePhonebook(phonebookId) { const service = new 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 */ export async function fetchSenderIds(page) { const service = new 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 */ export async function requestSenderId(payload) { const service = new SenderIdService(getHttpClient()); return service.requestSenderId(payload); } /** * Send OTP token directly without instantiating TokenService. * @param payload SendTokenRequest * @returns Promise resolving to SendTokenResponse */ export async function sendToken(payload) { const service = new TokenService(getHttpClient()); return service.sendToken(payload); } /** * Send OTP token directly without instantiating TokenService. * @param payload SendEmailTokenRequest * @returns Promise resolving to SendEmailTokenResponse */ export async function sendEmailToken(payload) { const service = new TokenService(getHttpClient()); return service.email.sendEmailToken(payload); } /** * Verify token directly without instantiating TokenService. * @param payload VerifyTokenRequest * @returns Promise resolving to VerifyTokenResponse */ export async function verifyToken(payload) { const service = new TokenService(getHttpClient()); return service.verify.verifyToken(payload); } /** * Generate inApp token directly without instantiating TokenService. * @param payload InAppTokenRequest * @returns Promise resolving to InAppTokenResponse */ export async function generateToken(payload) { const service = new TokenService(getHttpClient()); return service.inApp.generate(payload); } /** * Send voice OTP token directly without instantiating TokenService. * @param payload VoiceTokenRequest * @returns Promise resolving to VoiceTokenResponse */ export async function sendVoiceToken(payload) { const service = new TokenService(getHttpClient()); return service.sendVoiceToken(payload); } /** * Send voice call OTP token directly without instantiating TokenService. * @param payload VoiceCallRequest * @returns Promise resolving to VoiceCallResponse */ export async function sendVoiceCall(payload) { const service = new TokenService(getHttpClient()); return service.sendVoiceCall(payload); } /** * Fetch account balance directly without instantiating InsightService. * @returns Promise resolving to BalanceResponse */ export async function getBalance() { const service = new 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 */ export async function authenticateEsim(payload) { const service = new SotelService(getHttpClient()); return service.esim.authenticate(payload); } /** * Fetch eSIM plans directly without instantiating EsimService. * @param payload FetchPlansRequest * @returns Promise resolving to FetchPlansResponse */ export async function fetchEsimPlans(payload) { const service = new SotelService(getHttpClient()); return service.esim.fetchPlans(payload); } /** * Create (provision) a new eSIM directly without instantiating EsimService. * @param payload CreateEsimRequest * @returns Promise resolving to CreateEsimResponse */ export async function createEsim(payload) { const service = new 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 */ export async function getEsimQrCode(iccid) { const service = new 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 */ export async function getEsimUsage(iccid) { const service = new 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 */ export async function fetchEsims(page = 0, size = 15) { const service = new SotelService(getHttpClient()); return service.esim.fetchEsims(page, size); }