UNPKG

@lavapayments/nodejs

Version:

Backend SDK for Lava Payments API - enabling usage-based billing for AI services

297 lines (295 loc) 9.26 kB
// src/resources.ts var Resources; ((Resources2) => { class BaseResource { constructor(lava) { this.lava = lava; } } class CheckoutSessionsResource extends BaseResource { /** * Create a checkout session * @param params Checkout session parameters * @returns Created checkout session */ create(params) { return this.lava.request( "POST", "checkout_sessions", { data: params } ); } /** * List checkout sessions * @param params List parameters * @returns Paginated list of checkout sessions */ list(params) { const queryParams = {}; if (params) { if (params.cursor) { queryParams.cursor = params.cursor; } if (params.limit) { queryParams.limit = params.limit.toString(); } if (params.reference_id) { queryParams.reference_id = params.reference_id; } } return this.lava.request( "GET", "checkout_sessions", { query: queryParams } ); } /** * Retrieve a checkout session * @param checkoutSessionId Checkout session ID * @returns Checkout session details */ retrieve(checkoutSessionId) { return this.lava.request( "GET", `checkout_sessions/${checkoutSessionId}` ); } } Resources2.CheckoutSessionsResource = CheckoutSessionsResource; class ConnectionsResource extends BaseResource { /** * List connections * @param params List parameters * @returns Paginated list of connections */ list(params) { const queryParams = {}; if (params) { if (params.cursor) { queryParams.cursor = params.cursor; } if (params.limit) { queryParams.limit = params.limit.toString(); } if (params.reference_id) { queryParams.reference_id = params.reference_id; } } return this.lava.request( "GET", "connections", { query: queryParams } ); } /** * Retrieve a connection * @param connectionId Connection ID * @returns Connection details */ retrieve(connectionId) { return this.lava.request( "GET", `connections/${connectionId}` ); } /** * Delete a connection * @param connectionId Connection ID * @returns Success status */ delete(connectionId) { return this.lava.request( "DELETE", `connections/${connectionId}` ); } } Resources2.ConnectionsResource = ConnectionsResource; class RequestsResource extends BaseResource { /** * List requests * @param params List parameters * @returns Paginated list of requests */ list(params) { const queryParams = {}; if (params) { if (params.cursor) { queryParams.cursor = params.cursor; } if (params.limit) { queryParams.limit = params.limit.toString(); } if (params.connection_id) { queryParams.connection_id = params.connection_id; } if (params.product_id) { queryParams.product_id = params.product_id; } if (params.metadata_filters) { queryParams.metadata_filters = JSON.stringify( Object.entries(params.metadata_filters) ); } } return this.lava.request("GET", "requests", { query: queryParams }); } /** * Create a request * @param params Request parameters * @returns Created request details */ create(params) { return this.lava.request("POST", "requests", { data: params }); } /** * Retrieve a request * @param requestId Request ID * @returns Request details */ retrieve(requestId) { return this.lava.request("GET", `requests/${requestId}`); } } Resources2.RequestsResource = RequestsResource; class UsageResource extends BaseResource { /** * Retrieve usage statistics * @param params Usage parameters * @returns Usage data */ retrieve(params) { const queryParams = { start: params.start }; if (params.end) { queryParams.end = params.end; } if (params.connection_id) { queryParams.connection_id = params.connection_id; } if (params.product_id) { queryParams.product_id = params.product_id; } if (params.metadata_filters) { queryParams.metadata_filters = JSON.stringify( Object.entries(params.metadata_filters) ); } return this.lava.request("GET", "usage", { query: queryParams }); } } Resources2.UsageResource = UsageResource; })(Resources || (Resources = {})); // src/client.ts var Lava = class { /** * Create a new Lava client * @param secretKey Your Lava secret key * @param config Configuration options */ constructor(secretKey, config) { this.secretKey = secretKey; this.apiVersion = config.apiVersion; const isTestMode = secretKey.startsWith("aks_test_"); this.baseUrl = config.baseUrl || (isTestMode ? "https://sandbox-api.lavapayments.com/v1/" : "https://api.lavapayments.com/v1/"); this.checkoutSessions = new Resources.CheckoutSessionsResource(this); this.connections = new Resources.ConnectionsResource(this); this.requests = new Resources.RequestsResource(this); this.usage = new Resources.UsageResource(this); this.providers = { openai: `${this.baseUrl}forward?u=https://api.openai.com/v1`, anthropic: `${this.baseUrl}forward?u=https://api.anthropic.com/v1`, mistral: `${this.baseUrl}forward?u=https://api.mistral.ai/v1`, deepseek: `${this.baseUrl}forward?u=https://api.deepseek.com/v1`, xai: `${this.baseUrl}forward?u=https://api.x.ai/v1`, google: `${this.baseUrl}forward?u=https://generativelanguage.googleapis.com/v1beta`, googleOpenaiCompatible: `${this.baseUrl}forward?u=https://generativelanguage.googleapis.com/v1beta/openai`, kluster: `${this.baseUrl}forward?u=https://api.kluster.ai/v1`, inference: `${this.baseUrl}forward?u=https://api.inference.net/v1`, groq: `${this.baseUrl}forward?u=https://api.groq.com/openai/v1`, novita: `${this.baseUrl}forward?u=https://api.novita.ai/v3/openai`, vercel: `${this.baseUrl}forward?u=https://api.v0.dev/v1`, together: `${this.baseUrl}forward?u=https://api.together.xyz/v1`, hyperbolic: `${this.baseUrl}forward?u=https://api.hyperbolic.xyz/v1`, elevenlabs: `${this.baseUrl}forward?u=https://api.elevenlabs.io/v1`, sambanova: `${this.baseUrl}forward?u=https://api.sambanova.ai/v1`, deepinfra: `${this.baseUrl}forward?u=https://api.deepinfra.com/v1/openai`, cohere: `${this.baseUrl}forward?u=https://api.cohere.ai/compatibility/v1`, parasail: `${this.baseUrl}forward?u=https://api.parasail.io/v1`, nebius: `${this.baseUrl}forward?u=https://api.studio.nebius.com/v1`, fireworks: `${this.baseUrl}forward?u=https://api.fireworks.ai/inference/v1`, cerebras: `${this.baseUrl}forward?u=https://api.cerebras.ai/v1`, targon: `${this.baseUrl}forward?u=https://api.targon.com/v1`, gmicloud: `${this.baseUrl}forward?u=https://api.gmi-serving.com/v1`, chutes: `${this.baseUrl}forward?u=https://llm.chutes.ai/v1`, baseten: `${this.baseUrl}forward?u=https://inference.baseten.co/v1` }; } /** * Make a request to the Lava API * @param method HTTP method * @param path API path * @param options Request options * @returns Response data */ async request(method, path, { data, query } = {}) { const url = new URL(path, this.baseUrl); if (query) { Object.entries(query).forEach(([key, value]) => { if (value !== void 0) { url.searchParams.append(key, value.toString()); } }); } const headers = { Authorization: `Bearer ${this.secretKey}`, "Content-Type": "application/json", "X-Lava-API-Version": this.apiVersion }; const requestOptions = { method, headers, body: data ? JSON.stringify(data) : void 0 }; const response = await fetch(url.toString(), requestOptions); if (!response.ok) { const errorJson = await response.json().catch(() => ({})); const errorMessage = typeof errorJson.error === "object" ? JSON.stringify(errorJson.error) : errorJson.error || "Unknown error"; throw new Error( `Lava API Error: ${response.status} ${response.statusText} - ${errorMessage}` ); } return response.json(); } /** * Generate a token for the forward endpoint * @param options Token options * @returns Base64 encoded token */ generateForwardToken(options) { const tokenData = { secret_key: this.secretKey, connection_secret: options.connection_secret, product_secret: options.product_secret, provider_key: options.provider_key }; return Buffer.from(JSON.stringify(tokenData)).toString("base64"); } }; export { Lava, Resources };