UNPKG

omx-sdk

Version:

Unified SDK for Oxinion services integration

428 lines (330 loc) 9.33 kB
# omx-sdk The unified SDK for Oxinion services integration. This meta-package provides access to all OMX SDK packages through a single, convenient interface. ## Installation ```bash npm install omx-sdk # or pnpm add omx-sdk ``` This will install the main SDK along with all sub-packages: - `@omx-sdk/geotrigger` - Geolocation trigger functionality - `@omx-sdk/email` - Email sending capabilities - `@omx-sdk/webhook` - Webhook handling and management - `@omx-sdk/beacon` - Bluetooth beacon integration - `@omx-sdk/push-notification` - Web push notification support ## Quick Start ### Unified SDK Usage ```typescript import OMX from 'omx-sdk'; // Create SDK instance with global configuration const omx = OMX({ apiKey: 'your-api-key', baseUrl: 'https://api.oxinion.com', // optional global base URL timeout: 10000, // optional global timeout // Service-specific overrides email: { defaultFrom: 'noreply@yourcompany.com', }, beacon: { scanInterval: 2000, }, pushNotification: { vapidPublicKey: 'your-vapid-public-key', serviceWorkerPath: '/custom-sw.js', }, }); // Initialize services that require setup await sdk.initialize(); // Use individual services const geotrigger = sdk.geotrigger; const email = sdk.email; const webhook = sdk.webhook; const beacon = sdk.beacon; const pushNotification = sdk.pushNotification; ``` ### Individual Package Usage You can also install and use individual packages: ```bash npm install @omx-sdk/email @omx-sdk/geotrigger ``` ```typescript import { createEmailClient } from '@omx-sdk/email'; import { createGeotrigger } from '@omx-sdk/geotrigger'; const emailClient = createEmailClient({ apiKey: 'your-api-key' }); const geotrigger = createGeotrigger({ apiKey: 'your-api-key' }); ``` ## Complete Example ```typescript import { createOMXSDK } from 'omx-sdk'; async function main() { // Initialize the SDK const sdk = createOMXSDK({ apiKey: 'your-api-key', email: { defaultFrom: 'notifications@yourcompany.com', }, pushNotification: { vapidPublicKey: 'your-vapid-public-key', }, }); // Initialize services await sdk.initialize(); // Check health status const health = await sdk.healthCheck(); console.log('SDK Health:', health); // 1. Setup geofencing const geotrigger = sdk.geotrigger; geotrigger.addRegion({ id: 'store', center: { latitude: 37.7749, longitude: -122.4194 }, radius: 100, name: 'Store Location', }); await geotrigger.startMonitoring((event) => { console.log('Geofence event:', event); // Send email notification sdk.email.send({ to: 'customer@example.com', subject: 'Welcome!', body: `You've ${event.type}ed our store location.`, }); }); // 2. Setup push notifications const pushManager = sdk.pushNotification; const subscription = await pushManager.subscribe(); if (subscription.success) { console.log('Push notifications subscribed'); } // 3. Setup webhook handlers const webhook = sdk.webhook; await webhook.createSubscription('https://yourapp.com/webhook', [ 'user.created', 'order.completed', ]); // 4. Test webhook const testResult = await webhook.testWebhook('https://yourapp.com/test'); console.log('Webhook test:', testResult); // 5. Setup beacon monitoring (if supported) const beacon = sdk.beacon; beacon.addRegion({ id: 'entrance', uuid: 'B0702880-A295-A8AB-F734-031A98A512DE', major: 1, minor: 1, }); beacon.addEventListener('enter', (event) => { console.log('Beacon detected:', event); }); await beacon.startScanning(); // Get aggregated analytics const analytics = sdk.getAnalytics(); console.log('SDK Analytics:', analytics); } main().catch(console.error); ``` ## Configuration ### OMXConfig The main configuration object supports global settings and service-specific overrides: ```typescript interface OMXConfig { apiKey: string; // Required: Your OMX API key baseUrl?: string; // Optional: Global base URL timeout?: number; // Optional: Global timeout // Service-specific configurations (all optional) geotrigger?: Partial<GeotriggerConfig>; email?: Partial<EmailConfig>; webhook?: Partial<WebhookConfig>; beacon?: Partial<BeaconConfig>; pushNotification?: Partial<PushConfig>; } ``` ### Service Configuration Examples ```typescript const sdk = createOMXSDK({ apiKey: 'your-api-key', // Geotrigger settings geotrigger: { baseUrl: 'https://geo.api.oxinion.com', timeout: 15000, }, // Email settings email: { defaultFrom: 'notifications@yourcompany.com', baseUrl: 'https://email.api.oxinion.com', }, // Webhook settings webhook: { retryAttempts: 5, retryDelay: 2000, }, // Beacon settings beacon: { scanInterval: 1000, }, // Push notification settings pushNotification: { vapidPublicKey: 'BM...', serviceWorkerPath: '/custom-sw.js', }, }); ``` ## Health Monitoring ```typescript // Check the health of all services const health = await sdk.healthCheck(); console.log('Overall health:', health.overall); // 'healthy' | 'degraded' | 'unhealthy' console.log('Service status:', health.services); // Example response: // { // overall: 'healthy', // services: { // geotrigger: 'healthy', // email: 'healthy', // webhook: 'healthy', // beacon: 'unhealthy', // Not supported in this browser // pushNotification: 'healthy' // } // } ``` ## Analytics ```typescript // Get aggregated analytics from all services const analytics = sdk.getAnalytics(); console.log('Analytics:', { geotrigger: analytics.geotrigger.isMonitoring, webhook: analytics.webhook.subscriptions, beacon: analytics.beacon?.totalBeacons, pushNotification: analytics.pushNotification?.totalSubscriptions, }); ``` ## Available Services ### 1. Geotrigger (`sdk.geotrigger`) Location-based triggers and geofencing. ```typescript // Add geofence region sdk.geotrigger.addRegion({ id: 'office', center: { latitude: 37.7749, longitude: -122.4194 }, radius: 100, }); // Start monitoring await sdk.geotrigger.startMonitoring((event) => { console.log('Geofence event:', event.type, event.regionId); }); ``` ### 2. Email (`sdk.email`) Email sending with templates and bulk support. ```typescript // Send email await sdk.email.send({ to: 'user@example.com', subject: 'Welcome!', body: 'Thank you for signing up.', html: '<h1>Welcome!</h1><p>Thank you for signing up.</p>', }); ``` ### 3. Webhook (`sdk.webhook`) Webhook management and event delivery. ```typescript // Create subscription await sdk.webhook.createSubscription('https://yourapp.com/webhook', [ 'user.created', 'order.completed', ]); // Send webhook await sdk.webhook.send({ url: 'https://external-service.com/webhook', method: 'POST', data: { event: 'test', timestamp: Date.now() }, }); ``` ### 4. Beacon (`sdk.beacon`) Bluetooth beacon detection and proximity monitoring. ```typescript // Add beacon region sdk.beacon.addRegion({ id: 'store-entrance', uuid: 'B0702880-A295-A8AB-F734-031A98A512DE', major: 1, }); // Start scanning await sdk.beacon.startScanning(); ``` ### 5. Push Notifications (`sdk.pushNotification`) Web push notification management. ```typescript // Subscribe to push notifications const result = await sdk.pushNotification.subscribe(); // Send notification if (result.success) { const subscription = await sdk.pushNotification.getSubscription(); await sdk.pushNotification.sendNotification(subscription!, { title: 'Hello!', body: 'This is a test notification', }); } ``` ## Configuration Management ```typescript // Get current configuration const config = sdk.getConfig(); // Update configuration (will recreate service instances) sdk.updateConfig({ timeout: 20000, email: { defaultFrom: 'updated@yourcompany.com', }, }); ``` ## Cleanup ```typescript // Clean up resources when done sdk.dispose(); ``` ## Error Handling ```typescript try { await sdk.initialize(); const health = await sdk.healthCheck(); if (health.overall === 'unhealthy') { console.warn('Some services are not available'); } // Use services... } catch (error) { console.error('SDK error:', error); } finally { sdk.dispose(); } ``` ## TypeScript Support The SDK is built with TypeScript and provides full type definitions: ```typescript import { OMXSDK, OMXConfig, GeotriggerEvent } from 'omx-sdk'; const config: OMXConfig = { apiKey: 'your-api-key', }; const sdk = new OMXSDK(config); sdk.geotrigger.startMonitoring((event: GeotriggerEvent) => { // Full type safety console.log(event.type, event.regionId); }); ``` ## Browser Support - **Geotrigger**: All modern browsers with geolocation support - **Email**: All browsers (server-side operations) - **Webhook**: All browsers - **Beacon**: Chrome 56+, Edge 79+ (Web Bluetooth required) - **Push Notifications**: Chrome 42+, Firefox 44+, Safari 16+ ## Security - Always use HTTPS in production - Keep your API keys secure - Use VAPID keys for push notifications - Validate webhook signatures - Request permissions appropriately ## License MIT ## Support For issues and questions: - Check individual package documentation - Review the examples in this README - File issues on the GitHub repository