UNPKG

shora-ai-payment-sdk

Version:

The first open-source payment SDK designed specifically for AI agents and chatbots - ACP Compatible

84 lines (83 loc) 3.1 kB
import { withRetry, CircuitBreaker } from './retry-logic'; import { parseError } from './error-handling'; export class PaymentService { constructor(client) { this.client = client; this.circuitBreaker = new CircuitBreaker(); } async createPaymentSession(request, options) { return withRetry(async () => this.circuitBreaker.execute(async () => { const headers = {}; if (options?.idempotencyKey) headers['Idempotency-Key'] = options.idempotencyKey; const response = await this.client.post('/v2/payments/sessions', request, { headers }); return response.data; })); } async processPayment(sessionId, paymentMethod, cardToken) { return withRetry(async () => this.circuitBreaker.execute(async () => { const response = await this.client.post('/v2/payments/process', { sessionId, paymentMethod, cardToken }); return response.data; })); } async createACPCheckout(request) { try { const response = await this.client.post('/v2/acp/checkout', request); return response.data; } catch (error) { throw parseError(error); } } async healthCheck() { try { const response = await this.client.get('/v2/test/health'); return response.data; } catch (error) { throw parseError(error); } } async createCheckoutIntent(request, options) { return withRetry(async () => this.circuitBreaker.execute(async () => { const headers = {}; if (options?.idempotencyKey) headers['Idempotency-Key'] = options.idempotencyKey; const response = await this.client.post('/v1/acp/checkout-intent', request, { headers }); return response.data; })); } async confirmCheckout(request, options) { return withRetry(async () => this.circuitBreaker.execute(async () => { const headers = {}; if (options?.idempotencyKey) headers['Idempotency-Key'] = options.idempotencyKey; const response = await this.client.post('/v1/acp/checkout-confirm', request, { headers }); return response.data; })); } async getPaymentSession(sessionId) { return withRetry(async () => this.circuitBreaker.execute(async () => { const response = await this.client.get(`/v2/payments/sessions/${sessionId}`); return response.data; })); } async getReceipt(receiptId) { try { const response = await this.client.get(`/v1/acp/receipts/${receiptId}`); return response.data; } catch (error) { throw parseError(error); } } async getSupportedMethods() { try { const response = await this.client.get('/v1/acp/supported-methods'); return response.data; } catch (error) { throw parseError(error); } } }