SDKTypeScript

TypeScript

The @textbubbles/js SDK is written in TypeScript and ships with full type definitions.

Type-Safe Messages

import { TextBubbles } from '@textbubbles/js';
import type { SendMessageOptions, Message, MessageEffect } from '@textbubbles/js';
 
const tb = new TextBubbles();
 
const options: SendMessageOptions = {
  to: '+14155551234',
  content: { text: 'Hello!' },
  effect: 'confetti',
  idempotencyKey: 'order-123',
};
 
const message: Message = await tb.messages.send(options);

Available Types

import type {
  // Client
  TextBubblesConfig,
 
  // Messages
  SendMessageOptions,
  Message,
  MessageStatus,
  MessageEffect,
 
  // Contacts
  Contact,
  CreateContactOptions,
 
  // Webhooks
  WebhookEvent,
  WebhookConfig,
 
  // Payments
  PaymentRequest,
  CreatePaymentOptions,
 
  // Capabilities
  Capabilities,
} from '@textbubbles/js';

Error Handling

import { TextBubbles, TextBubblesError } from '@textbubbles/js';
 
const tb = new TextBubbles();
 
try {
  await tb.messages.send({
    to: '+14155551234',
    content: { text: 'Hello!' },
  });
} catch (error) {
  if (error instanceof TextBubblesError) {
    console.error(`API Error: ${error.code} - ${error.message}`);
    console.error(`Request ID: ${error.requestId}`);
    console.error(`Status: ${error.statusCode}`);
  }
}

Webhook Type Guards

import type { WebhookEvent } from '@textbubbles/js';
 
function handleWebhook(event: WebhookEvent) {
  switch (event.type) {
    case 'message.delivered':
      // event.data is typed as DeliveredEventData
      console.log(`Delivered: ${event.data.messageId}`);
      break;
    case 'message.inbound':
      // event.data is typed as InboundEventData
      console.log(`From ${event.data.from}: ${event.data.text}`);
      break;
    case 'payment.request.paid':
      // event.data is typed as PaymentPaidEventData
      console.log(`Payment received: $${event.data.amount}`);
      break;
  }
}