JSPM

@nuvix/messaging

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 92
  • Score
    100M100P100Q41236F
  • License MIT

A comprehensive messaging library for Email, SMS, and Push notifications

Package Exports

  • @nuvix/messaging
  • @nuvix/messaging/package.json

Readme

Nuvix Messaging Library

A comprehensive messaging library for Email, SMS, and Push notifications with support for multiple service providers.

Features

Email Adapters

  • Mailgun - Email delivery service
  • SendGrid - Email delivery platform
  • SMTP - Generic SMTP support

SMS Adapters

  • Twilio - SMS and communication APIs
  • Vonage (formerly Nexmo) - Global communications platform
  • Msg91 - SMS and communication platform
  • Telesign - Customer verification platform
  • TextMagic - SMS marketing platform

Push Notification Adapters

  • FCM (Firebase Cloud Messaging) - Google's messaging solution
  • APNS (Apple Push Notification Service) - Apple's push notification service

Installation

bun install

Testing

This library includes comprehensive tests for all adapters using real API credentials. Tests are designed to work with actual services to ensure reliability.

Test Configuration

  1. Copy the example environment file:

    cp .env.example .env
  2. Configure your credentials in .env:

    # Example for Mailgun
    MAILGUN_API_KEY=key-1234567890abcdef
    MAILGUN_DOMAIN=mg.yourdomain.com
    MAILGUN_IS_EU=false
    
    # Example for Twilio
    TWILIO_ACCOUNT_SID=AC1234567890abcdef
    TWILIO_AUTH_TOKEN=your_auth_token
    TWILIO_FROM=+1234567890
    
    # Add other service credentials as needed
  3. Alternatively, configure credentials in test.config.ts:

    export const testConfig: TestConfig = {
      mailgun: {
        apiKey: "your-actual-api-key",
        domain: "your-domain.com",
        isEU: false,
        testEmail: "test@yourdomain.com",
      },
      // ... other configurations
    };

Running Tests

# Run all tests
bun test

# Run tests with coverage
bun test --coverage

# Run tests in watch mode
bun test --watch

# Run specific test files
bun test tests/adapters/email.test.ts
bun test tests/adapters/sms.test.ts
bun test tests/adapters/push.test.ts

Test Behavior

  • Configured Services: Tests will run with real API calls for services with valid credentials
  • Unconfigured Services: Tests will be automatically skipped with helpful messages
  • Real API Calls: Tests use actual service APIs to ensure reliability
  • Test Messages: All test messages are clearly marked and include unique identifiers

Example Test Output

๐Ÿงช Starting Nuvix Messaging Adapter Tests
๐Ÿ“Š Test Configuration Summary:
โœ… Configured services: mailgun, twilio, fcm
โš ๏ธ  Unconfigured services (will be skipped): sendgrid, vonage, msg91, telesign, textmagic, apns
๐Ÿ’ก To test these services, configure credentials in test.config.ts or environment variables

โœ… Mailgun text email sent successfully
โœ… Twilio SMS sent successfully
โœ… FCM push notification sent successfully
โญ๏ธ  Skipping SendGrid tests: credentials not configured

Usage Examples

Email

import { Mailgun } from "@nuvix/messaging/adapter/Email/Mailgun";
import { Email } from "@nuvix/messaging/messages/Email";

const adapter = new Mailgun("api-key", "domain.com");
const email = new Email({
  to: ["user@example.com"],
  subject: "Hello World",
  content: "This is a test email",
  fromName: "Your App",
  fromEmail: "noreply@yourdomain.com",
});

const result = await adapter.send(email);
console.log(`Delivered to ${result.deliveredTo} recipients`);

SMS

import { Twilio } from "@nuvix/messaging/adapter/SMS/Twilio";
import { SMS } from "@nuvix/messaging/messages/SMS";

const adapter = new Twilio("account-sid", "auth-token", "+1234567890");
const sms = new SMS({
  to: ["+1987654321"],
  content: "Hello from your app!",
});

const result = await adapter.send(sms);

Push Notifications

import { FCM } from "@nuvix/messaging/adapter/Push/FCM";
import { Push } from "@nuvix/messaging/messages/Push";

const adapter = new FCM("service-account-json");
const push = new Push({
  to: ["device-token"],
  title: "New Message",
  body: "You have a new notification",
  data: { type: "message", id: "123" },
});

const result = await adapter.send(push);

Development

Project Structure

src/
โ”œโ”€โ”€ adapter.ts              # Base adapter class
โ”œโ”€โ”€ response.ts             # Response handling
โ”œโ”€โ”€ types.ts                # Type definitions
โ”œโ”€โ”€ adapter/                # Adapter implementations
โ”‚   โ”œโ”€โ”€ Email.ts            # Email base class
โ”‚   โ”œโ”€โ”€ SMS.ts              # SMS base class
โ”‚   โ”œโ”€โ”€ Push.ts             # Push base class
โ”‚   โ”œโ”€โ”€ Email/              # Email adapters
โ”‚   โ”œโ”€โ”€ SMS/                # SMS adapters
โ”‚   โ””โ”€โ”€ Push/               # Push adapters
โ”œโ”€โ”€ messages/               # Message classes
โ”‚   โ”œโ”€โ”€ Email.ts
โ”‚   โ”œโ”€โ”€ SMS.ts
โ”‚   โ””โ”€โ”€ Push.ts
โ””โ”€โ”€ helpers/                # Utility functions

tests/
โ”œโ”€โ”€ setup.ts                # Test configuration
โ”œโ”€โ”€ utils.ts                # Test utilities
โ””โ”€โ”€ adapters/               # Adapter tests
    โ”œโ”€โ”€ email.test.ts
    โ”œโ”€โ”€ sms.test.ts
    โ”œโ”€โ”€ push.test.ts
    โ””โ”€โ”€ messages.test.ts

Building

bun run build

Linting

bun run lint
bun run lint:fix

License

This project is licensed under the MIT License.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for any new functionality
  4. Ensure all tests pass with real credentials
  5. Submit a pull request

Service Provider Documentation