UNPKG

x402x-facilitator

Version:

X402 Payment Facilitator for handling payment settlements

157 lines 4.34 kB
// src/facilitator.ts var DEFAULT_FACILITATOR_URL = "https://facilitator.wtf.com/v1"; var Facilitator = class { constructor(config) { if (!config.recipientAddress) { throw new Error("recipientAddress is required"); } this.config = { recipientAddress: config.recipientAddress, waitUntil: config.waitUntil || "confirmed", baseUrl: config.baseUrl || DEFAULT_FACILITATOR_URL, apiKey: config.apiKey || "" }; this.authHeaders = this.config.apiKey ? { Authorization: `Bearer ${this.config.apiKey}` } : {}; } /** * 获取 recipient 地址 */ get recipientAddress() { return this.config.recipientAddress; } /** * 获取等待策略 */ get waitUntil() { return this.config.waitUntil; } /** * 验证支付 * @param payload 支付负载 * @param requirements 支付要求 * @returns 验证结果 */ async verify(payload, requirements) { try { const response = await fetch(`${this.config.baseUrl}/verify`, { method: "POST", headers: { "Content-Type": "application/json", ...this.authHeaders }, body: JSON.stringify({ x402Version: payload.x402Version, paymentPayload: payload, paymentRequirements: requirements }) }); if (!response.ok) { const errorText = await response.text(); return { success: false, error: `Verification failed: ${response.status}`, errorMessage: errorText }; } const data = await response.json(); return { success: data.success ?? true, payer: data.payer, error: data.error, errorMessage: data.errorMessage }; } catch (error) { return { success: false, error: "Verification error", errorMessage: error instanceof Error ? error.message : "Unknown error" }; } } /** * 结算支付 * @param payload 支付负载 * @param requirements 支付要求 * @param waitUntil 可选的等待策略,覆盖配置中的默认值 * @returns 结算结果 */ async settle(payload, requirements, waitUntil) { try { const response = await fetch(`${this.config.baseUrl}/settle`, { method: "POST", headers: { "Content-Type": "application/json", ...this.authHeaders }, body: JSON.stringify({ x402Version: payload.x402Version, paymentPayload: payload, paymentRequirements: requirements, waitUntil: waitUntil || this.config.waitUntil }) }); if (!response.ok) { const errorText = await response.text(); return { success: false, error: `Settlement failed: ${response.status}`, errorMessage: errorText }; } const data = await response.json(); return { success: data.success ?? true, transaction: data.transaction, network: data.network, receipt: data.receipt, error: data.error, errorMessage: data.errorMessage }; } catch (error) { return { success: false, error: "Settlement error", errorMessage: error instanceof Error ? error.message : "Unknown error" }; } } /** * 获取支持的支付类型 * @param filters 可选的过滤条件 * @returns 支持的支付类型列表 */ async supported(filters) { try { const url = new URL(`${this.config.baseUrl}/supported`); if (filters?.chainId) { url.searchParams.set("chainId", filters.chainId.toString()); } if (filters?.tokenAddress) { url.searchParams.set("tokenAddress", filters.tokenAddress); } const response = await fetch(url.toString(), { headers: this.authHeaders }); if (!response.ok) { throw new Error(`Failed to get supported kinds: ${response.status}`); } const data = await response.json(); return data; } catch (error) { console.error("Error fetching supported payment kinds:", error); return { kinds: [] }; } } /** * 获取完整配置 */ getConfig() { return { ...this.config }; } }; export { Facilitator }; //# sourceMappingURL=index.mjs.map