UNPKG

@revmax/agent-sdk

Version:

Official Node.js SDK for RevMax - billing, customer management, and usage tracking

100 lines (84 loc) 3.06 kB
/** * RevMax SDK - Multiple Single Events (One at a Time) * * Send 3 events sequentially, one API call per event. * Use this pattern when events happen at different times or need individual tracking. * * Usage: * REVMAX_API_KEY=revx_pk_xxx node 03-multiple-single-events.js */ const { RevMaxClient } = require('../dist'); // Configuration const API_KEY = process.env.REVMAX_API_KEY || 'revx_pk_your_api_key_here'; const BASE_URL = process.env.REVMAX_API_URL || 'http://localhost:3005/v1/sdk'; const AGENT_ID = 'd1d6e514-faae-4e47-a100-0f2757d69849'; const CUSTOMER_EXTERNAL_ID = 'customer-4398bad1-9c3b-46f7-be7b-25e8770d0524'; // Events to track (simulating a customer success workflow) const EVENTS = [ { signalName: 'customer_research_report', quantity: 1, metadata: { usageCost: [ { serviceName: 'Anthropic Claude Sonnet Input', units: 15000, unitType: 'token' }, { serviceName: 'Anthropic Claude Sonnet Output', units: 3000, unitType: 'token' }, ], }, }, { signalName: 'success_plan_created', quantity: 1, metadata: { usageCost: [ { serviceName: 'OpenAI GPT-4 Turbo Input', units: 8000, unitType: 'token' }, { serviceName: 'OpenAI GPT-4 Turbo Output', units: 2000, unitType: 'token' }, ], }, }, { signalName: 'qbr_generated', quantity: 1, metadata: { usageCost: [ { serviceName: 'Anthropic Claude Sonnet Input', units: 25000, unitType: 'token' }, { serviceName: 'Anthropic Claude Sonnet Output', units: 5000, unitType: 'token' }, ], }, }, ]; async function main() { console.log('🚀 RevMax SDK - Multiple Single Events\n'); // Create and connect client const client = new RevMaxClient(API_KEY, { baseURL: BASE_URL, logging: { enabled: false }, // Quiet mode for cleaner output }); await client.connect(); console.log(`✅ Connected to: ${client.getOrganization().name}\n`); console.log(`📤 Sending ${EVENTS.length} events one at a time...\n`); // Track each event individually for (let i = 0; i < EVENTS.length; i++) { const event = EVENTS[i]; console.log(`[${i + 1}/${EVENTS.length}] Tracking: ${event.signalName}`); const result = await client.trackEvent({ customerExternalId: CUSTOMER_EXTERNAL_ID, agentId: AGENT_ID, signalName: event.signalName, quantity: event.quantity, usageDate: new Date().toISOString(), metadata: event.metadata, }); // Extract cost from timeline const costEvent = result.timeline?.find((t) => t.event_type === 'cost'); const cost = costEvent?.amount || 0; console.log(` ✅ Event ID: ${result.signalEvent?.id}`); console.log(` 💰 Cost: $${cost.toFixed(4)}\n`); // Small delay between events (optional, for realistic pacing) await new Promise((resolve) => setTimeout(resolve, 100)); } console.log('✅ All events tracked successfully!'); } main().catch((err) => { console.error('❌ Error:', err.message); process.exit(1); });