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
JavaScript
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);
}
}
}