Docs / Node.js SDK

Node.js SDK

Official Node.js SDK for APIMW

Node.js SDK

Official Node.js SDK for APIMW API integration.

Requirements

  • Node.js 18.0 or higher
  • npm or yarn

Installation

npm install @apimw/node
# or
yarn add @apimw/node

Quick Start

import { APIMW } from '@apimw/node';

const client = new APIMW({
  apiKey: process.env.APIMW_API_KEY,
  apiSecret: process.env.APIMW_API_SECRET
});

// Send a WhatsApp message
const response = await client.whatsapp.sendMessage({
  to: '+1234567890',
  message: 'Hello from Node.js!'
});

console.log(response.messageId);

Configuration

const client = new APIMW({
  apiKey: process.env.APIMW_API_KEY,
  apiSecret: process.env.APIMW_API_SECRET,
  timeout: 30000,
  retry: {
    maxAttempts: 3,
    delay: 1000
  }
});

TypeScript Support

Full TypeScript support with complete type definitions:

import { APIMW, SendMessageRequest, MessageResponse } from '@apimw/node';

const client = new APIMW({
  apiKey: process.env.APIMW_API_KEY!,
  apiSecret: process.env.APIMW_API_SECRET!
});

const request: SendMessageRequest = {
  to: '+1234567890',
  message: 'Hello TypeScript!'
};

const response: MessageResponse = await client.whatsapp.sendMessage(request);

Sending Messages

Text Message

const response = await client.whatsapp.sendMessage({
  to: '+1234567890',
  message: 'Hello World!'
});

Template Message

const response = await client.whatsapp.sendTemplate({
  to: '+1234567890',
  template: 'order_confirmation',
  language: 'en',
  components: [
    {
      type: 'body',
      parameters: [
        { type: 'text', text: 'John' },
        { type: 'text', text: 'ORD-123' }
      ]
    }
  ]
});

Webhooks

Express.js Handler

import express from 'express';
import { WebhookHandler } from '@apimw/node';

const app = express();
const handler = new WebhookHandler(process.env.WEBHOOK_SECRET);

app.post('/webhook', express.raw({ type: '*/*' }), (req, res) => {
  const signature = req.headers['x-apimw-signature'];

  if (!handler.verify(req.body, signature)) {
    return res.status(401).send('Invalid signature');
  }

  const event = handler.parse(req.body);

  switch (event.type) {
    case 'message.received':
      console.log(`Message from ${event.data.from}: ${event.data.text}`);
      break;
  }

  res.status(200).send('OK');
});

Error Handling

import { ApiError, RateLimitError } from '@apimw/node';

try {
  await client.whatsapp.sendMessage({...});
} catch (error) {
  if (error instanceof RateLimitError) {
    const retryAfter = error.retryAfter;
    await sleep(retryAfter * 1000);
    // Retry...
  } else if (error instanceof ApiError) {
    console.error(`API Error: ${error.message} (${error.code})`);
  }
}