Initial Node.js SDK v1.0.0

This commit is contained in:
garfieldheron
2026-02-19 12:07:39 -05:00
commit 6c252b7495
24 changed files with 1837 additions and 0 deletions
+82
View File
@@ -0,0 +1,82 @@
import { AxiosInstance } from 'axios';
import {
Payment,
CreatePaymentRequest,
ListResponse,
PaginationParams,
FilterParams,
} from '../types';
/**
* Payments API client
*/
export class PaymentsClient {
constructor(private http: AxiosInstance) {}
/**
* Create a new payment
*/
async create(params: CreatePaymentRequest, idempotencyKey?: string): Promise<Payment> {
const headers: Record<string, string> = {};
if (idempotencyKey) {
headers['Idempotency-Key'] = idempotencyKey;
}
const response = await this.http.post('/payments', params, { headers });
return response.data;
}
/**
* Retrieve a payment by ID
*/
async retrieve(paymentId: string): Promise<Payment> {
const response = await this.http.get(`/payments/${paymentId}`);
return response.data;
}
/**
* List all payments
*/
async list(params?: PaginationParams & FilterParams & { status?: string; rail?: string }): Promise<ListResponse<Payment>> {
const response = await this.http.get('/payments', { params });
return response.data;
}
/**
* Cancel a pending payment
*/
async cancel(paymentId: string, reason?: string, idempotencyKey?: string): Promise<Payment> {
const headers: Record<string, string> = {};
if (idempotencyKey) {
headers['Idempotency-Key'] = idempotencyKey;
}
const response = await this.http.post(
`/payments/${paymentId}/cancel`,
reason ? { reason } : {},
{ headers }
);
return response.data;
}
/**
* Refund a settled payment
*/
async refund(
paymentId: string,
params?: { amount?: number; reason?: string },
idempotencyKey?: string
): Promise<Payment> {
const headers: Record<string, string> = {};
if (idempotencyKey) {
headers['Idempotency-Key'] = idempotencyKey;
}
const response = await this.http.post(
`/payments/${paymentId}/refund`,
params || {},
{ headers }
);
return response.data;
}
}