@proofrails/sdk 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -1
- package/dist/index.d.mts +3 -458
- package/dist/index.d.ts +3 -458
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -1
- package/dist/index.mjs.map +1 -1
- package/dist/react.d.mts +84 -0
- package/dist/react.d.ts +84 -0
- package/dist/react.js +674 -0
- package/dist/react.js.map +1 -0
- package/dist/react.mjs +661 -0
- package/dist/react.mjs.map +1 -0
- package/dist/sdk-CNB4Jz0R.d.mts +461 -0
- package/dist/sdk-CNB4Jz0R.d.ts +461 -0
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/types/common.ts","../src/client.ts","../src/modules/projects.ts","../src/modules/receipts.ts","../src/modules/verification.ts","../src/modules/statements.ts","../src/modules/events.ts","../src/modules/embed.ts","../src/templates/payment.ts","../src/templates/donation.ts","../src/templates/escrow.ts","../src/templates/grant.ts","../src/templates/refund.ts","../src/sdk.ts","../src/utils/errors.ts","../src/utils/chain.ts","../src/utils/validation.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Common types used across the SDK\r\n */\r\n\r\nexport type Network = 'coston2' | 'flare';\r\n\r\nexport type ReceiptStatus = 'pending' | 'anchored' | 'failed';\r\n\r\nexport interface SDKConfig {\r\n /** Your ProofRails API key */\r\n apiKey?: string;\r\n /** Admin token for administrative operations */\r\n adminToken?: string;\r\n /** Network to use (coston2 or flare) */\r\n network?: Network;\r\n /** Base URL of the middleware (optional, defaults to production) */\r\n baseUrl?: string;\r\n /** Request timeout in milliseconds */\r\n timeout?: number;\r\n /** Number of retry attempts for failed requests (default: 3) */\r\n retries?: number;\r\n /** Delay between retries in milliseconds (default: 1000) */\r\n retryDelay?: number;\r\n}\r\n\r\nexport interface APIResponse<T> {\r\n data: T;\r\n success: boolean;\r\n error?: string;\r\n}\r\n\r\nexport interface PaginatedResponse<T> {\r\n items: T[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n}\r\n\r\nexport class ProofRailsError extends Error {\r\n constructor(\r\n message: string,\r\n public code?: string,\r\n public statusCode?: number,\r\n public details?: unknown\r\n ) {\r\n super(message);\r\n this.name = 'ProofRailsError';\r\n }\r\n}\r\n","/**\r\n * Core HTTP client for ProofRails API\r\n */\r\n\r\nimport type { SDKConfig } from './types/common';\r\nimport { ProofRailsError } from './types/common';\r\n\r\nexport interface RateLimitInfo {\r\n limit: number;\r\n remaining: number;\r\n reset: number; // Unix timestamp\r\n resetDate: Date;\r\n}\r\n\r\nexport class APIClient {\r\n private baseUrl: string;\r\n private apiKey?: string;\r\n private adminToken?: string;\r\n private timeout: number;\r\n private retries: number;\r\n private retryDelay: number;\r\n private rateLimitInfo: RateLimitInfo | null = null;\r\n\r\n constructor(config: SDKConfig = {}) {\r\n // Read from environment variable if available (Next.js)\r\n const envBaseUrl = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_PROOFRAILS_BASE_URL;\r\n this.baseUrl = config.baseUrl || envBaseUrl || 'http://127.0.0.1:8000';\r\n this.apiKey = config.apiKey;\r\n this.adminToken = config.adminToken;\r\n this.timeout = config.timeout || 30000;\r\n this.retries = config.retries ?? 3; // Default 3 retries\r\n this.retryDelay = config.retryDelay ?? 1000; // Default 1s delay\r\n }\r\n\r\n getRateLimitInfo(): RateLimitInfo | null {\r\n return this.rateLimitInfo;\r\n }\r\n\r\n async get<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('GET', endpoint, undefined, options);\r\n }\r\n\r\n async post<T>(endpoint: string, body?: unknown, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('POST', endpoint, body, options);\r\n }\r\n\r\n async put<T>(endpoint: string, body?: unknown, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('PUT', endpoint, body, options);\r\n }\r\n\r\n async delete<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('DELETE', endpoint, undefined, options);\r\n }\r\n\r\n private async request<T>(\r\n method: string,\r\n endpoint: string,\r\n body?: unknown,\r\n options: RequestInit = {},\r\n attempt: number = 0\r\n ): Promise<T> {\r\n const url = `${this.baseUrl}${endpoint}`;\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n ...((options.headers as Record<string, string>) || {}),\r\n };\r\n\r\n if (this.apiKey) {\r\n headers['X-API-Key'] = this.apiKey;\r\n }\r\n\r\n if (this.adminToken) {\r\n headers['Authorization'] = `Bearer ${this.adminToken}`;\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n console.log(`[ProofRails SDK] ${method} ${url}${attempt > 0 ? ` (retry ${attempt}/${this.retries})` : ''}`);\r\n const response = await fetch(url, {\r\n method,\r\n headers,\r\n body: body ? JSON.stringify(body) : undefined,\r\n signal: controller.signal,\r\n ...options,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n // Extract rate limit info from headers\r\n this.extractRateLimitInfo(response);\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n const error = new ProofRailsError(\r\n errorData.message || errorData.detail || `HTTP ${response.status}: ${response.statusText}`,\r\n errorData.code,\r\n response.status,\r\n errorData\r\n );\r\n\r\n // Retry on 5xx errors or rate limit (429)\r\n if (this.shouldRetry(response.status, attempt)) {\r\n return this.retryRequest(method, endpoint, body, options, attempt);\r\n }\r\n\r\n throw error;\r\n }\r\n\r\n return await response.json();\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof ProofRailsError) {\r\n // Retry on network errors\r\n if (this.shouldRetry(0, attempt)) {\r\n return this.retryRequest(method, endpoint, body, options, attempt);\r\n }\r\n throw error;\r\n }\r\n\r\n if (error instanceof Error) {\r\n if (error.name === 'AbortError') {\r\n throw new ProofRailsError(`Request timeout after ${this.timeout}ms`, 'TIMEOUT');\r\n }\r\n\r\n // Retry on network errors\r\n if (this.shouldRetry(0, attempt)) {\r\n return this.retryRequest(method, endpoint, body, options, attempt);\r\n }\r\n\r\n throw new ProofRailsError(error.message, 'NETWORK_ERROR');\r\n }\r\n\r\n throw new ProofRailsError('Unknown error occurred', 'UNKNOWN_ERROR');\r\n }\r\n }\r\n\r\n private shouldRetry(statusCode: number, attempt: number): boolean {\r\n if (attempt >= this.retries) return false;\r\n\r\n // Retry on network errors (statusCode 0)\r\n if (statusCode === 0) return true;\r\n\r\n // Retry on 5xx server errors\r\n if (statusCode >= 500 && statusCode < 600) return true;\r\n\r\n // Retry on rate limit (429)\r\n if (statusCode === 429) return true;\r\n\r\n return false;\r\n }\r\n\r\n private async retryRequest<T>(\r\n method: string,\r\n endpoint: string,\r\n body: unknown,\r\n options: RequestInit,\r\n attempt: number\r\n ): Promise<T> {\r\n const delay = this.retryDelay * Math.pow(2, attempt); // Exponential backoff\r\n console.log(`[ProofRails SDK] Retrying in ${delay}ms...`);\r\n await new Promise(resolve => setTimeout(resolve, delay));\r\n return this.request<T>(method, endpoint, body, options, attempt + 1);\r\n }\r\n\r\n private extractRateLimitInfo(response: Response): void {\r\n const limit = response.headers.get('X-RateLimit-Limit');\r\n const remaining = response.headers.get('X-RateLimit-Remaining');\r\n const reset = response.headers.get('X-RateLimit-Reset');\r\n\r\n if (limit && remaining && reset) {\r\n const resetTimestamp = parseInt(reset, 10);\r\n this.rateLimitInfo = {\r\n limit: parseInt(limit, 10),\r\n remaining: parseInt(remaining, 10),\r\n reset: resetTimestamp,\r\n resetDate: new Date(resetTimestamp * 1000)\r\n };\r\n }\r\n }\r\n\r\n setApiKey(apiKey: string): void {\r\n this.apiKey = apiKey;\r\n }\r\n\r\n setAdminToken(adminToken: string): void {\r\n this.adminToken = adminToken;\r\n }\r\n\r\n getBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n}\r\n","/**\r\n * Project and API key management module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type {\r\n Project,\r\n APIKey,\r\n CreateProjectOptions,\r\n CreateAPIKeyOptions,\r\n WhoAmIResponse,\r\n} from '../types/project';\r\n\r\nexport class ProjectsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async getInfo(): Promise<WhoAmIResponse> {\r\n return this.client.get<WhoAmIResponse>('/v1/whoami');\r\n }\r\n\r\n async rotateKey(): Promise<APIKey> {\r\n return this.client.post<APIKey>('/v1/api-keys/rotate');\r\n }\r\n\r\n async create(options: CreateProjectOptions = {}): Promise<APIKey> {\r\n return this.client.post<APIKey>('/v1/public/api-keys', options);\r\n }\r\n}\r\n\r\nexport class AdminModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async createKey(options: CreateAPIKeyOptions): Promise<APIKey> {\r\n return this.client.post<APIKey>('/v1/admin/api-keys', options);\r\n }\r\n\r\n async deleteKey(keyId: string): Promise<void> {\r\n return this.client.delete(`/v1/admin/api-keys/${keyId}`);\r\n }\r\n}\r\n","/**\r\n * Receipt operations module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type {\r\n CreateReceiptOptions,\r\n Receipt,\r\n ReceiptArtifacts,\r\n ListReceiptsOptions,\r\n} from '../types/receipt';\r\nimport type { PaginatedResponse } from '../types/common';\r\nimport type { ISOMessage } from '../types/iso';\r\n\r\nexport class ReceiptsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async create(options: CreateReceiptOptions): Promise<Receipt> {\r\n const payload = {\r\n tip_tx_hash: options.transactionHash,\r\n chain: options.chain,\r\n amount: String(options.amount),\r\n currency: options.currency,\r\n sender_wallet: options.sender,\r\n receiver_wallet: options.receiver,\r\n reference: options.reference,\r\n callback_url: options.callbackUrl,\r\n };\r\n\r\n const response = await this.client.post<{ receipt_id: string; status: string }>(\r\n '/v1/iso/record-tip',\r\n payload\r\n );\r\n\r\n return {\r\n id: response.receipt_id,\r\n status: response.status as any,\r\n transactionHash: options.transactionHash,\r\n chain: options.chain,\r\n amount: String(options.amount),\r\n currency: options.currency,\r\n sender: options.sender,\r\n receiver: options.receiver,\r\n reference: options.reference,\r\n createdAt: new Date().toISOString(),\r\n };\r\n }\r\n\r\n async get(receiptId: string): Promise<Receipt> {\r\n return this.client.get<Receipt>(`/v1/iso/receipts/${receiptId}`);\r\n }\r\n\r\n async list(options: ListReceiptsOptions = {}): Promise<PaginatedResponse<Receipt>> {\r\n const params = new URLSearchParams();\r\n if (options.limit) params.append('limit', String(options.limit));\r\n if (options.page) params.append('page', String(options.page));\r\n if (options.status) params.append('status', options.status);\r\n\r\n const query = params.toString();\r\n const endpoint = `/v1/iso/receipts${query ? `?${query}` : ''}`;\r\n\r\n // Check if response is array (direct list) or object (paginated)\r\n const response: any = await this.client.get(endpoint);\r\n const items = Array.isArray(response) ? response : (response.items || []);\r\n\r\n return {\r\n items: items,\r\n total: items.length,\r\n page: options.page || 1,\r\n limit: options.limit || 10,\r\n };\r\n }\r\n\r\n async getArtifacts(receiptId: string): Promise<ReceiptArtifacts> {\r\n const messages = await this.client.get<ISOMessage[]>(`/v1/iso/messages/${receiptId}`);\r\n const baseUrl = this.client.getBaseUrl();\r\n\r\n const artifacts: ReceiptArtifacts = {};\r\n\r\n messages.forEach((msg) => {\r\n switch (msg.type) {\r\n case 'pain.001':\r\n artifacts.pain001Url = msg.url;\r\n break;\r\n case 'pain.002':\r\n artifacts.pain002Url = msg.url;\r\n break;\r\n case 'pain.007':\r\n artifacts.pain007Url = msg.url;\r\n break;\r\n case 'pain.008':\r\n artifacts.pain008Url = msg.url;\r\n break;\r\n case 'camt.054':\r\n artifacts.camt054Url = msg.url;\r\n break;\r\n }\r\n });\r\n\r\n artifacts.bundleUrl = `${baseUrl}/files/${receiptId}/evidence.zip`;\r\n artifacts.manifestUrl = `${baseUrl}/files/${receiptId}/manifest.json`;\r\n\r\n return artifacts;\r\n }\r\n}\r\n","/**\r\n * Verification module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type { VerificationResult, VerificationProof } from '../types/verification';\r\n\r\nexport class VerificationModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async byReceiptId(receiptId: string): Promise<VerificationResult> {\r\n const receipt = await this.client.get<any>(`/v1/iso/receipts/${receiptId}`);\r\n\r\n return {\r\n valid: receipt.status === 'anchored',\r\n bundleHash: receipt.bundle_hash || receipt.bundleHash || '',\r\n onChain: !!receipt.anchor_tx || !!receipt.anchorTx,\r\n anchorTx: receipt.anchor_tx || receipt.anchorTx,\r\n timestamp: receipt.anchored_at || receipt.anchoredAt,\r\n };\r\n }\r\n\r\n async byUrl(bundleUrl: string): Promise<VerificationResult> {\r\n return this.client.post<VerificationResult>('/v1/iso/verify', {\r\n bundle_url: bundleUrl,\r\n });\r\n }\r\n\r\n async byHash(bundleHash: string): Promise<VerificationResult> {\r\n return this.client.post<VerificationResult>('/v1/iso/verify', {\r\n bundle_hash: bundleHash,\r\n });\r\n }\r\n\r\n async getProof(receiptId: string): Promise<VerificationProof> {\r\n const receipt = await this.client.get<any>(`/v1/iso/receipts/${receiptId}`);\r\n\r\n return {\r\n receiptId,\r\n bundleHash: receipt.bundle_hash || receipt.bundleHash,\r\n anchorTx: receipt.anchor_tx || receipt.anchorTx,\r\n blockNumber: receipt.block_number || 0,\r\n timestamp: receipt.anchored_at || receipt.anchoredAt,\r\n signature: receipt.signature || '',\r\n network: receipt.chain,\r\n contractAddress: receipt.contract_address || '',\r\n };\r\n }\r\n}\r\n","/**\r\n * Statements module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type { GenerateStatementOptions, Statement } from '../types/iso';\r\n\r\nexport class StatementsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async intraday(options: GenerateStatementOptions = {}): Promise<Statement> {\r\n const response = await this.client.post<any>('/v1/iso/statement/camt052', {\r\n date_from: options.dateFrom,\r\n date_to: options.dateTo,\r\n account_id: options.accountId,\r\n });\r\n\r\n return {\r\n type: 'camt.052',\r\n url: response.url,\r\n downloadUrl: response.download_url || response.url,\r\n messageId: response.message_id || response.messageId,\r\n createdAt: response.created_at || new Date().toISOString(),\r\n };\r\n }\r\n\r\n async endOfDay(options: GenerateStatementOptions = {}): Promise<Statement> {\r\n const response = await this.client.post<any>('/v1/iso/statement/camt053', {\r\n date: options.dateTo || options.dateFrom,\r\n account_id: options.accountId,\r\n });\r\n\r\n return {\r\n type: 'camt.053',\r\n url: response.url,\r\n downloadUrl: response.download_url || response.url,\r\n messageId: response.message_id || response.messageId,\r\n createdAt: response.created_at || new Date().toISOString(),\r\n };\r\n }\r\n}\r\n","/**\r\n * Events module for live updates\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type { ReceiptUpdate } from '../types/receipt';\r\n\r\nexport interface EventListener {\r\n stop: () => void;\r\n}\r\n\r\nexport class EventsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n listen(receiptId: string, callback: (update: ReceiptUpdate) => void): EventListener {\r\n const baseUrl = this.client.getBaseUrl();\r\n const url = `${baseUrl}/v1/iso/events/${receiptId}`;\r\n\r\n const eventSource = new EventSource(url);\r\n\r\n eventSource.onmessage = (event) => {\r\n try {\r\n const data = JSON.parse(event.data);\r\n callback({\r\n id: receiptId,\r\n status: data.status,\r\n anchorTx: data.anchor_tx || data.anchorTx,\r\n bundleHash: data.bundle_hash || data.bundleHash,\r\n timestamp: data.timestamp || new Date().toISOString(),\r\n });\r\n } catch (error) {\r\n console.error('Failed to parse SSE event:', error);\r\n }\r\n };\r\n\r\n eventSource.onerror = (error) => {\r\n console.error('SSE connection error:', error);\r\n eventSource.close();\r\n };\r\n\r\n return {\r\n stop: () => eventSource.close(),\r\n };\r\n }\r\n}\r\n","/**\r\n * Embed module for generating embeddable widgets\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\n\r\nexport interface EmbedOptions {\r\n theme?: 'light' | 'dark';\r\n width?: string;\r\n height?: string;\r\n}\r\n\r\nexport interface WidgetResult {\r\n iframeHtml: string;\r\n embedUrl: string;\r\n}\r\n\r\nexport class EmbedModule {\r\n constructor(private client: APIClient) { }\r\n\r\n widget(receiptId: string, options: EmbedOptions = {}): WidgetResult {\r\n const baseUrl = this.client.getBaseUrl();\r\n const theme = options.theme || 'light';\r\n const width = options.width || '100%';\r\n const height = options.height || '400px';\r\n\r\n const embedUrl = `${baseUrl}/embed/receipt?rid=${receiptId}&theme=${theme}`;\r\n\r\n const iframeHtml = `<iframe src=\"${embedUrl}\" width=\"${width}\" height=\"${height}\" frameborder=\"0\" style=\"border: none;\"></iframe>`;\r\n\r\n return {\r\n iframeHtml,\r\n embedUrl,\r\n };\r\n }\r\n\r\n fullPage(receiptId: string): string {\r\n const baseUrl = this.client.getBaseUrl();\r\n return `${baseUrl}/receipt/${receiptId}`;\r\n }\r\n}\r\n","/**\r\n * Payment template - For simple payments between two parties\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface PaymentTemplateOptions {\r\n /** Payment amount */\r\n amount: number;\r\n /** Who is sending the payment */\r\n from: string;\r\n /** Who is receiving the payment */\r\n to: string;\r\n /** What the payment is for */\r\n purpose: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Sender's wallet address (optional, defaults to transaction sender) */\r\n senderWallet?: string;\r\n /** Receiver's wallet address (optional, defaults to transaction receiver) */\r\n receiverWallet?: string;\r\n /** Chain/network (optional, auto-detected if not provided) */\r\n chain?: 'coston2' | 'flare';\r\n /** Currency (optional, auto-detected if not provided) */\r\n currency?: string;\r\n}\r\n\r\nexport async function createPaymentReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: PaymentTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: options.chain || 'coston2', // Smart default\r\n amount: options.amount,\r\n currency: options.currency || 'C2FLR', // Smart default\r\n sender: options.senderWallet || options.from,\r\n receiver: options.receiverWallet || options.to,\r\n reference: `Payment: ${options.purpose} (Tx: ${options.transactionHash})`,\r\n });\r\n}\r\n","/**\r\n * Donation template - For charitable donations\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface DonationTemplateOptions {\r\n /** Donation amount */\r\n amount: number;\r\n /** Name of the donor */\r\n donor: string;\r\n /** Name of the organization receiving the donation */\r\n organization: string;\r\n /** Campaign or cause name */\r\n campaign: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Donor's wallet address (optional) */\r\n donorWallet?: string;\r\n /** Organization's wallet address (optional) */\r\n organizationWallet?: string;\r\n}\r\n\r\nexport async function createDonationReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: DonationTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.donorWallet || options.donor,\r\n receiver: options.organizationWallet || options.organization,\r\n reference: `Donation: ${options.campaign} (Donor: ${options.donor}, Organization: ${options.organization})`,\r\n });\r\n}\r\n","/**\r\n * Escrow template - For escrow releases\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface EscrowTemplateOptions {\r\n /** Amount being released from escrow */\r\n amount: number;\r\n /** Buyer's name */\r\n buyer: string;\r\n /** Seller's name */\r\n seller: string;\r\n /** Escrow identifier */\r\n escrowId: string;\r\n /** Reason for release */\r\n releaseReason: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Buyer's wallet address (optional) */\r\n buyerWallet?: string;\r\n /** Seller's wallet address (optional) */\r\n sellerWallet?: string;\r\n}\r\n\r\nexport async function createEscrowReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: EscrowTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.buyerWallet || options.buyer,\r\n receiver: options.sellerWallet || options.seller,\r\n reference: `Escrow Release: ${options.escrowId} - ${options.releaseReason} (Buyer: ${options.buyer}, Seller: ${options.seller})`,\r\n });\r\n}\r\n","/**\r\n * Grant template - For grant disbursements\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface GrantTemplateOptions {\r\n /** Grant amount */\r\n amount: number;\r\n /** Name of the grantee (recipient) */\r\n grantee: string;\r\n /** Name of the grantor (funder) */\r\n grantor: string;\r\n /** Grant identifier */\r\n grantId: string;\r\n /** Purpose of the grant */\r\n purpose: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Grantor's wallet address (optional) */\r\n grantorWallet?: string;\r\n /** Grantee's wallet address (optional) */\r\n granteeWallet?: string;\r\n}\r\n\r\nexport async function createGrantReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: GrantTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.grantorWallet || options.grantor,\r\n receiver: options.granteeWallet || options.grantee,\r\n reference: `Grant: ${options.grantId} - ${options.purpose} (Grantor: ${options.grantor}, Grantee: ${options.grantee})`,\r\n });\r\n}\r\n","/**\r\n * Refund template - For refunds\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface RefundTemplateOptions {\r\n /** Refund amount */\r\n amount: number;\r\n /** Original receipt ID being refunded */\r\n originalPayment: string;\r\n /** Reason for refund */\r\n reason: string;\r\n /** Customer name */\r\n customer: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Business wallet address (optional) */\r\n businessWallet?: string;\r\n /** Customer wallet address (optional) */\r\n customerWallet?: string;\r\n}\r\n\r\nexport async function createRefundReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: RefundTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.businessWallet || 'Business',\r\n receiver: options.customerWallet || options.customer,\r\n reference: `Refund: ${options.originalPayment} - ${options.reason} (Customer: ${options.customer})`,\r\n });\r\n}\r\n","/**\r\n * Main ProofRails SDK class\r\n */\r\n\r\nimport { APIClient } from './client';\r\nimport { ProjectsModule, AdminModule } from './modules/projects';\r\nimport { ReceiptsModule } from './modules/receipts';\r\nimport { VerificationModule } from './modules/verification';\r\nimport { StatementsModule } from './modules/statements';\r\nimport { EventsModule } from './modules/events';\r\nimport { EmbedModule } from './modules/embed';\r\nimport {\r\n createPaymentReceipt,\r\n createDonationReceipt,\r\n createEscrowReceipt,\r\n createGrantReceipt,\r\n createRefundReceipt,\r\n} from './templates';\r\nimport type { SDKConfig, Network } from './types/common';\r\nimport type { APIKey } from './types/project';\r\nimport type {\r\n PaymentTemplateOptions,\r\n DonationTemplateOptions,\r\n EscrowTemplateOptions,\r\n GrantTemplateOptions,\r\n RefundTemplateOptions,\r\n} from './templates';\r\n\r\nexport class ProofRails {\r\n private client: APIClient;\r\n\r\n /** Project and API key management */\r\n public readonly project: ProjectsModule;\r\n\r\n /** Admin operations (requires admin token) */\r\n public readonly admin: AdminModule;\r\n\r\n /** Receipt operations */\r\n public readonly receipts: ReceiptsModule;\r\n\r\n /** Verification operations */\r\n public readonly verify: VerificationModule;\r\n\r\n /** Statement generation */\r\n public readonly statements: StatementsModule;\r\n\r\n /** Live event updates */\r\n public readonly events: EventsModule;\r\n\r\n /** Embeddable widgets */\r\n public readonly embed: EmbedModule;\r\n\r\n /** Beginner-friendly templates */\r\n public readonly templates: {\r\n payment: (options: PaymentTemplateOptions) => ReturnType<typeof createPaymentReceipt>;\r\n donation: (options: DonationTemplateOptions) => ReturnType<typeof createDonationReceipt>;\r\n escrow: (options: EscrowTemplateOptions) => ReturnType<typeof createEscrowReceipt>;\r\n grant: (options: GrantTemplateOptions) => ReturnType<typeof createGrantReceipt>;\r\n refund: (options: RefundTemplateOptions) => ReturnType<typeof createRefundReceipt>;\r\n };\r\n\r\n constructor(config: SDKConfig = {}) {\r\n this.client = new APIClient(config);\r\n\r\n this.project = new ProjectsModule(this.client);\r\n this.admin = new AdminModule(this.client);\r\n this.receipts = new ReceiptsModule(this.client);\r\n this.verify = new VerificationModule(this.client);\r\n this.statements = new StatementsModule(this.client);\r\n this.events = new EventsModule(this.client);\r\n this.embed = new EmbedModule(this.client);\r\n\r\n this.templates = {\r\n payment: (options) => createPaymentReceipt(this.receipts, options),\r\n donation: (options) => createDonationReceipt(this.receipts, options),\r\n escrow: (options) => createEscrowReceipt(this.receipts, options),\r\n grant: (options) => createGrantReceipt(this.receipts, options),\r\n refund: (options) => createRefundReceipt(this.receipts, options),\r\n };\r\n }\r\n\r\n /**\r\n * Create a new project with API key (self-serve)\r\n * This is a convenience method for beginners\r\n */\r\n static async createProject(options: {\r\n label?: string;\r\n network?: Network;\r\n baseUrl?: string;\r\n } = {}): Promise<{ client: ProofRails; apiKey: string; projectId: string }> {\r\n const tempClient = new ProofRails({ network: options.network, baseUrl: options.baseUrl });\r\n const result = await tempClient.project.create({ label: options.label }) as any;\r\n\r\n const apiKey = result.api_key || result.apiKey;\r\n const projectId = result.project_id || result.projectId;\r\n\r\n const client = new ProofRails({\r\n apiKey,\r\n network: options.network,\r\n baseUrl: options.baseUrl // Propagate baseUrl\r\n });\r\n\r\n return {\r\n client,\r\n apiKey,\r\n projectId,\r\n };\r\n }\r\n\r\n /**\r\n * Update the API key for this client\r\n */\r\n setApiKey(apiKey: string): void {\r\n this.client.setApiKey(apiKey);\r\n }\r\n\r\n /**\r\n * Update the admin token for this client\r\n */\r\n setAdminToken(adminToken: string): void {\r\n this.client.setAdminToken(adminToken);\r\n }\r\n}\r\n\r\nexport default ProofRails;\r\n","/**\r\n * User-friendly error messages and helpers\r\n */\r\n\r\nexport interface FriendlyError {\r\n title: string;\r\n message: string;\r\n solution?: string;\r\n learnMore?: string;\r\n}\r\n\r\nexport function getFriendlyError(error: any): FriendlyError {\r\n const errorMsg = error?.message || error?.detail || String(error);\r\n const statusCode = error?.statusCode || error?.status;\r\n\r\n // Database/Uniqueness errors\r\n if (errorMsg.includes('UNIQUE constraint') || errorMsg.includes('already exists')) {\r\n return {\r\n title: '❌ Duplicate Receipt',\r\n message: 'A receipt with this transaction hash already exists.',\r\n solution: 'This transaction has already been recorded. Check your receipts list.',\r\n learnMore: 'https://docs.proofrails.com/errors/duplicate'\r\n };\r\n }\r\n\r\n // Insufficient funds (middleware wallet)\r\n if (errorMsg.includes('insufficient funds') || errorMsg.includes('gas')) {\r\n return {\r\n title: '❌ Middleware Wallet Needs Funding',\r\n message: 'Your ProofRails middleware wallet doesn\\'t have enough tokens to pay gas fees.',\r\n solution: 'Send 0.5-1.0 C2FLR tokens to your middleware wallet address (check your .env ANCHOR_PRIVATE_KEY).',\r\n learnMore: 'https://docs.proofrails.com/setup/funding'\r\n };\r\n }\r\n\r\n // Network/Connection errors\r\n if (errorMsg.includes('fetch') || errorMsg.includes('network') || errorMsg.includes('ECONNREFUSED')) {\r\n return {\r\n title: '❌ Cannot Connect to Middleware',\r\n message: 'Unable to reach the ProofRails middleware server.',\r\n solution: 'Make sure your middleware is running on the correct port (default: 8000). Check your baseUrl configuration.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/connection'\r\n };\r\n }\r\n\r\n // Timeout errors\r\n if (errorMsg.includes('timeout') || errorMsg.includes('TIMEOUT')) {\r\n return {\r\n title: '⏱️ Request Timed Out',\r\n message: 'The middleware took too long to respond.',\r\n solution: 'The middleware might be processing a large request or experiencing issues. Try again in a moment.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/timeout'\r\n };\r\n }\r\n\r\n // Authentication errors\r\n if (statusCode === 401 || statusCode === 403 || errorMsg.includes('unauthorized') || errorMsg.includes('forbidden')) {\r\n return {\r\n title: '🔐 Authentication Failed',\r\n message: 'Your API key is invalid or missing.',\r\n solution: 'Check that you\\'ve set your API key correctly. You can create a new one using ProofRails.createProject().',\r\n learnMore: 'https://docs.proofrails.com/setup/api-keys'\r\n };\r\n }\r\n\r\n // Not found errors\r\n if (statusCode === 404 || errorMsg.includes('not found')) {\r\n return {\r\n title: '🔍 Not Found',\r\n message: 'The requested resource doesn\\'t exist.',\r\n solution: 'Double-check the receipt ID or resource identifier you\\'re trying to access.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/not-found'\r\n };\r\n }\r\n\r\n // Validation errors\r\n if (statusCode === 422 || errorMsg.includes('validation') || errorMsg.includes('invalid')) {\r\n return {\r\n title: '⚠️ Invalid Data',\r\n message: 'The data you provided is invalid or incomplete.',\r\n solution: 'Check that all required fields are filled correctly (amount, addresses, transaction hash, etc.).',\r\n learnMore: 'https://docs.proofrails.com/api/validation'\r\n };\r\n }\r\n\r\n // Server errors\r\n if (statusCode === 500 || statusCode === 502 || statusCode === 503) {\r\n return {\r\n title: '🔧 Server Error',\r\n message: 'The middleware encountered an internal error.',\r\n solution: 'Check the middleware logs for details. The issue might be with database access or blockchain connectivity.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/server-errors'\r\n };\r\n }\r\n\r\n // Generic fallback\r\n return {\r\n title: '❌ Error',\r\n message: errorMsg,\r\n solution: 'If this error persists, please check the documentation or contact support.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting'\r\n };\r\n}\r\n\r\nexport function formatErrorForDisplay(error: any): string {\r\n const friendly = getFriendlyError(error);\r\n let output = `${friendly.title}\\n${friendly.message}`;\r\n\r\n if (friendly.solution) {\r\n output += `\\n\\n💡 Solution: ${friendly.solution}`;\r\n }\r\n\r\n if (friendly.learnMore) {\r\n output += `\\n📖 Learn more: ${friendly.learnMore}`;\r\n }\r\n\r\n return output;\r\n}\r\n","/**\r\n * Smart auto-detection utilities\r\n */\r\n\r\nimport type { Network } from '../types/common';\r\n\r\nexport interface ChainInfo {\r\n id: number;\r\n name: string;\r\n network: Network;\r\n currency: string;\r\n rpcUrl: string;\r\n explorerUrl: string;\r\n}\r\n\r\nexport const SUPPORTED_CHAINS: Record<number, ChainInfo> = {\r\n 14: {\r\n id: 14,\r\n name: 'Flare',\r\n network: 'flare',\r\n currency: 'FLR',\r\n rpcUrl: 'https://flare-api.flare.network/ext/C/rpc',\r\n explorerUrl: 'https://flare-explorer.flare.network'\r\n },\r\n 114: {\r\n id: 114,\r\n name: 'Coston2',\r\n network: 'coston2',\r\n currency: 'C2FLR',\r\n rpcUrl: 'https://coston2-api.flare.network/ext/C/rpc',\r\n explorerUrl: 'https://coston2-explorer.flare.network'\r\n }\r\n};\r\n\r\n/**\r\n * Auto-detect network from chain ID\r\n */\r\nexport function detectNetwork(chainId?: number): Network {\r\n if (!chainId) return 'coston2'; // Default to testnet\r\n\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n return chain?.network || 'coston2';\r\n}\r\n\r\n/**\r\n * Auto-detect currency from chain ID\r\n */\r\nexport function detectCurrency(chainId?: number): string {\r\n if (!chainId) return 'C2FLR';\r\n\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n return chain?.currency || 'C2FLR';\r\n}\r\n\r\n/**\r\n * Get chain info from chain ID\r\n */\r\nexport function getChainInfo(chainId: number): ChainInfo | null {\r\n return SUPPORTED_CHAINS[chainId] || null;\r\n}\r\n\r\n/**\r\n * Check if chain is supported\r\n */\r\nexport function isSupportedChain(chainId: number): boolean {\r\n return chainId in SUPPORTED_CHAINS;\r\n}\r\n\r\n/**\r\n * Get explorer URL for transaction\r\n */\r\nexport function getExplorerUrl(chainId: number, txHash: string): string {\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n if (!chain) return '';\r\n\r\n return `${chain.explorerUrl}/tx/${txHash}`;\r\n}\r\n\r\n/**\r\n * Get explorer URL for address\r\n */\r\nexport function getAddressExplorerUrl(chainId: number, address: string): string {\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n if (!chain) return '';\r\n\r\n return `${chain.explorerUrl}/address/${address}`;\r\n}\r\n","/**\r\n * Validation helpers for common inputs\r\n */\r\n\r\nexport interface ValidationResult {\r\n isValid: boolean;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Validate Ethereum address\r\n */\r\nexport function validateAddress(address: string): ValidationResult {\r\n if (!address) {\r\n return { isValid: false, error: 'Address is required' };\r\n }\r\n\r\n if (typeof address !== 'string') {\r\n return { isValid: false, error: 'Address must be a string' };\r\n }\r\n\r\n // Check if it starts with 0x\r\n if (!address.startsWith('0x')) {\r\n return { isValid: false, error: 'Address must start with 0x' };\r\n }\r\n\r\n // Check if it's 42 characters long (0x + 40 hex chars)\r\n if (address.length !== 42) {\r\n return { isValid: false, error: 'Address must be 42 characters long (0x + 40 hex digits)' };\r\n }\r\n\r\n // Check if it contains only valid hex characters\r\n const hexRegex = /^0x[0-9a-fA-F]{40}$/;\r\n if (!hexRegex.test(address)) {\r\n return { isValid: false, error: 'Address contains invalid characters (must be hexadecimal)' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate amount\r\n */\r\nexport function validateAmount(amount: string | number): ValidationResult {\r\n if (amount === '' || amount === null || amount === undefined) {\r\n return { isValid: false, error: 'Amount is required' };\r\n }\r\n\r\n const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\r\n\r\n if (isNaN(numAmount)) {\r\n return { isValid: false, error: 'Amount must be a valid number' };\r\n }\r\n\r\n if (numAmount <= 0) {\r\n return { isValid: false, error: 'Amount must be greater than 0' };\r\n }\r\n\r\n if (numAmount > Number.MAX_SAFE_INTEGER) {\r\n return { isValid: false, error: 'Amount is too large' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate transaction hash\r\n */\r\nexport function validateTransactionHash(hash: string): ValidationResult {\r\n if (!hash) {\r\n return { isValid: false, error: 'Transaction hash is required' };\r\n }\r\n\r\n if (typeof hash !== 'string') {\r\n return { isValid: false, error: 'Transaction hash must be a string' };\r\n }\r\n\r\n // Check if it starts with 0x\r\n if (!hash.startsWith('0x')) {\r\n return { isValid: false, error: 'Transaction hash must start with 0x' };\r\n }\r\n\r\n // Check if it's 66 characters long (0x + 64 hex chars)\r\n if (hash.length !== 66) {\r\n return { isValid: false, error: 'Transaction hash must be 66 characters long (0x + 64 hex digits)' };\r\n }\r\n\r\n // Check if it contains only valid hex characters\r\n const hexRegex = /^0x[0-9a-fA-F]{64}$/;\r\n if (!hexRegex.test(hash)) {\r\n return { isValid: false, error: 'Transaction hash contains invalid characters (must be hexadecimal)' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate API key format\r\n */\r\nexport function validateApiKey(apiKey: string): ValidationResult {\r\n if (!apiKey) {\r\n return { isValid: false, error: 'API key is required' };\r\n }\r\n\r\n if (typeof apiKey !== 'string') {\r\n return { isValid: false, error: 'API key must be a string' };\r\n }\r\n\r\n if (apiKey.length < 10) {\r\n return { isValid: false, error: 'API key is too short' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate purpose/reference text\r\n */\r\nexport function validatePurpose(purpose: string): ValidationResult {\r\n if (!purpose) {\r\n return { isValid: false, error: 'Purpose is required' };\r\n }\r\n\r\n if (typeof purpose !== 'string') {\r\n return { isValid: false, error: 'Purpose must be a string' };\r\n }\r\n\r\n if (purpose.trim().length === 0) {\r\n return { isValid: false, error: 'Purpose cannot be empty' };\r\n }\r\n\r\n if (purpose.length > 500) {\r\n return { isValid: false, error: 'Purpose is too long (max 500 characters)' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate all payment fields at once\r\n */\r\nexport function validatePayment(params: {\r\n amount: string | number;\r\n to: string;\r\n purpose: string;\r\n transactionHash?: string;\r\n}): ValidationResult {\r\n const amountCheck = validateAmount(params.amount);\r\n if (!amountCheck.isValid) return amountCheck;\r\n\r\n const addressCheck = validateAddress(params.to);\r\n if (!addressCheck.isValid) return addressCheck;\r\n\r\n const purposeCheck = validatePurpose(params.purpose);\r\n if (!purposeCheck.isValid) return purposeCheck;\r\n\r\n if (params.transactionHash) {\r\n const hashCheck = validateTransactionHash(params.transactionHash);\r\n if (!hashCheck.isValid) return hashCheck;\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/types/common.ts","../src/client.ts","../src/modules/projects.ts","../src/modules/receipts.ts","../src/modules/verification.ts","../src/modules/statements.ts","../src/modules/events.ts","../src/modules/embed.ts","../src/templates/payment.ts","../src/templates/donation.ts","../src/templates/escrow.ts","../src/templates/grant.ts","../src/templates/refund.ts","../src/sdk.ts","../src/utils/errors.ts","../src/utils/chain.ts","../src/utils/validation.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\r\n * Common types used across the SDK\r\n */\r\n\r\nexport type Network = 'coston2' | 'flare';\r\n\r\nexport type ReceiptStatus = 'pending' | 'anchored' | 'failed';\r\n\r\nexport interface SDKConfig {\r\n /** Your ProofRails API key */\r\n apiKey?: string;\r\n /** Admin token for administrative operations */\r\n adminToken?: string;\r\n /** Network to use (coston2 or flare) */\r\n network?: Network;\r\n /** Base URL of the middleware (optional, defaults to production) */\r\n baseUrl?: string;\r\n /** Request timeout in milliseconds */\r\n timeout?: number;\r\n /** Number of retry attempts for failed requests (default: 3) */\r\n retries?: number;\r\n /** Delay between retries in milliseconds (default: 1000) */\r\n retryDelay?: number;\r\n}\r\n\r\nexport interface APIResponse<T> {\r\n data: T;\r\n success: boolean;\r\n error?: string;\r\n}\r\n\r\nexport interface PaginatedResponse<T> {\r\n items: T[];\r\n total: number;\r\n page: number;\r\n limit: number;\r\n}\r\n\r\nexport class ProofRailsError extends Error {\r\n constructor(\r\n message: string,\r\n public code?: string,\r\n public statusCode?: number,\r\n public details?: unknown\r\n ) {\r\n super(message);\r\n this.name = 'ProofRailsError';\r\n }\r\n}\r\n","/**\r\n * Core HTTP client for ProofRails API\r\n */\r\n\r\nimport type { SDKConfig } from './types/common';\r\nimport { ProofRailsError } from './types/common';\r\n\r\nexport interface RateLimitInfo {\r\n limit: number;\r\n remaining: number;\r\n reset: number; // Unix timestamp\r\n resetDate: Date;\r\n}\r\n\r\nexport class APIClient {\r\n private baseUrl: string;\r\n private apiKey?: string;\r\n private adminToken?: string;\r\n private timeout: number;\r\n private retries: number;\r\n private retryDelay: number;\r\n private rateLimitInfo: RateLimitInfo | null = null;\r\n\r\n constructor(config: SDKConfig = {}) {\r\n // Read from environment variable if available (Next.js)\r\n const envBaseUrl = typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_PROOFRAILS_BASE_URL;\r\n\r\n // Production API endpoint\r\n const defaultBaseUrl = 'https://proofrails-clone-middleware.onrender.com';\r\n\r\n this.baseUrl = config.baseUrl || envBaseUrl || defaultBaseUrl;\r\n this.apiKey = config.apiKey;\r\n this.adminToken = config.adminToken;\r\n this.timeout = config.timeout || 30000;\r\n this.retries = config.retries ?? 3; // Default 3 retries\r\n this.retryDelay = config.retryDelay ?? 1000; // Default 1s delay\r\n }\r\n\r\n getRateLimitInfo(): RateLimitInfo | null {\r\n return this.rateLimitInfo;\r\n }\r\n\r\n async get<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('GET', endpoint, undefined, options);\r\n }\r\n\r\n async post<T>(endpoint: string, body?: unknown, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('POST', endpoint, body, options);\r\n }\r\n\r\n async put<T>(endpoint: string, body?: unknown, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('PUT', endpoint, body, options);\r\n }\r\n\r\n async delete<T>(endpoint: string, options: RequestInit = {}): Promise<T> {\r\n return this.request<T>('DELETE', endpoint, undefined, options);\r\n }\r\n\r\n private async request<T>(\r\n method: string,\r\n endpoint: string,\r\n body?: unknown,\r\n options: RequestInit = {},\r\n attempt: number = 0\r\n ): Promise<T> {\r\n const url = `${this.baseUrl}${endpoint}`;\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n ...((options.headers as Record<string, string>) || {}),\r\n };\r\n\r\n if (this.apiKey) {\r\n headers['X-API-Key'] = this.apiKey;\r\n }\r\n\r\n if (this.adminToken) {\r\n headers['Authorization'] = `Bearer ${this.adminToken}`;\r\n }\r\n\r\n const controller = new AbortController();\r\n const timeoutId = setTimeout(() => controller.abort(), this.timeout);\r\n\r\n try {\r\n console.log(`[ProofRails SDK] ${method} ${url}${attempt > 0 ? ` (retry ${attempt}/${this.retries})` : ''}`);\r\n const response = await fetch(url, {\r\n method,\r\n headers,\r\n body: body ? JSON.stringify(body) : undefined,\r\n signal: controller.signal,\r\n ...options,\r\n });\r\n\r\n clearTimeout(timeoutId);\r\n\r\n // Extract rate limit info from headers\r\n this.extractRateLimitInfo(response);\r\n\r\n if (!response.ok) {\r\n const errorData = await response.json().catch(() => ({}));\r\n const error = new ProofRailsError(\r\n errorData.message || errorData.detail || `HTTP ${response.status}: ${response.statusText}`,\r\n errorData.code,\r\n response.status,\r\n errorData\r\n );\r\n\r\n // Retry on 5xx errors or rate limit (429)\r\n if (this.shouldRetry(response.status, attempt)) {\r\n return this.retryRequest(method, endpoint, body, options, attempt);\r\n }\r\n\r\n throw error;\r\n }\r\n\r\n return await response.json();\r\n } catch (error) {\r\n clearTimeout(timeoutId);\r\n\r\n if (error instanceof ProofRailsError) {\r\n // Retry on network errors\r\n if (this.shouldRetry(0, attempt)) {\r\n return this.retryRequest(method, endpoint, body, options, attempt);\r\n }\r\n throw error;\r\n }\r\n\r\n if (error instanceof Error) {\r\n if (error.name === 'AbortError') {\r\n throw new ProofRailsError(`Request timeout after ${this.timeout}ms`, 'TIMEOUT');\r\n }\r\n\r\n // Retry on network errors\r\n if (this.shouldRetry(0, attempt)) {\r\n return this.retryRequest(method, endpoint, body, options, attempt);\r\n }\r\n\r\n throw new ProofRailsError(error.message, 'NETWORK_ERROR');\r\n }\r\n\r\n throw new ProofRailsError('Unknown error occurred', 'UNKNOWN_ERROR');\r\n }\r\n }\r\n\r\n private shouldRetry(statusCode: number, attempt: number): boolean {\r\n if (attempt >= this.retries) return false;\r\n\r\n // Retry on network errors (statusCode 0)\r\n if (statusCode === 0) return true;\r\n\r\n // Retry on 5xx server errors\r\n if (statusCode >= 500 && statusCode < 600) return true;\r\n\r\n // Retry on rate limit (429)\r\n if (statusCode === 429) return true;\r\n\r\n return false;\r\n }\r\n\r\n private async retryRequest<T>(\r\n method: string,\r\n endpoint: string,\r\n body: unknown,\r\n options: RequestInit,\r\n attempt: number\r\n ): Promise<T> {\r\n const delay = this.retryDelay * Math.pow(2, attempt); // Exponential backoff\r\n console.log(`[ProofRails SDK] Retrying in ${delay}ms...`);\r\n await new Promise(resolve => setTimeout(resolve, delay));\r\n return this.request<T>(method, endpoint, body, options, attempt + 1);\r\n }\r\n\r\n private extractRateLimitInfo(response: Response): void {\r\n const limit = response.headers.get('X-RateLimit-Limit');\r\n const remaining = response.headers.get('X-RateLimit-Remaining');\r\n const reset = response.headers.get('X-RateLimit-Reset');\r\n\r\n if (limit && remaining && reset) {\r\n const resetTimestamp = parseInt(reset, 10);\r\n this.rateLimitInfo = {\r\n limit: parseInt(limit, 10),\r\n remaining: parseInt(remaining, 10),\r\n reset: resetTimestamp,\r\n resetDate: new Date(resetTimestamp * 1000)\r\n };\r\n }\r\n }\r\n\r\n setApiKey(apiKey: string): void {\r\n this.apiKey = apiKey;\r\n }\r\n\r\n setAdminToken(adminToken: string): void {\r\n this.adminToken = adminToken;\r\n }\r\n\r\n getBaseUrl(): string {\r\n return this.baseUrl;\r\n }\r\n}\r\n","/**\r\n * Project and API key management module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type {\r\n Project,\r\n APIKey,\r\n CreateProjectOptions,\r\n CreateAPIKeyOptions,\r\n WhoAmIResponse,\r\n} from '../types/project';\r\n\r\nexport class ProjectsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async getInfo(): Promise<WhoAmIResponse> {\r\n return this.client.get<WhoAmIResponse>('/v1/whoami');\r\n }\r\n\r\n async rotateKey(): Promise<APIKey> {\r\n return this.client.post<APIKey>('/v1/api-keys/rotate');\r\n }\r\n\r\n async create(options: CreateProjectOptions = {}): Promise<APIKey> {\r\n return this.client.post<APIKey>('/v1/public/api-keys', options);\r\n }\r\n}\r\n\r\nexport class AdminModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async createKey(options: CreateAPIKeyOptions): Promise<APIKey> {\r\n return this.client.post<APIKey>('/v1/admin/api-keys', options);\r\n }\r\n\r\n async deleteKey(keyId: string): Promise<void> {\r\n return this.client.delete(`/v1/admin/api-keys/${keyId}`);\r\n }\r\n}\r\n","/**\r\n * Receipt operations module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type {\r\n CreateReceiptOptions,\r\n Receipt,\r\n ReceiptArtifacts,\r\n ListReceiptsOptions,\r\n} from '../types/receipt';\r\nimport type { PaginatedResponse } from '../types/common';\r\nimport type { ISOMessage } from '../types/iso';\r\n\r\nexport class ReceiptsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async create(options: CreateReceiptOptions): Promise<Receipt> {\r\n const payload = {\r\n tip_tx_hash: options.transactionHash,\r\n chain: options.chain,\r\n amount: String(options.amount),\r\n currency: options.currency,\r\n sender_wallet: options.sender,\r\n receiver_wallet: options.receiver,\r\n reference: options.reference,\r\n callback_url: options.callbackUrl,\r\n };\r\n\r\n const response = await this.client.post<{ receipt_id: string; status: string }>(\r\n '/v1/iso/record-tip',\r\n payload\r\n );\r\n\r\n return {\r\n id: response.receipt_id,\r\n status: response.status as any,\r\n transactionHash: options.transactionHash,\r\n chain: options.chain,\r\n amount: String(options.amount),\r\n currency: options.currency,\r\n sender: options.sender,\r\n receiver: options.receiver,\r\n reference: options.reference,\r\n createdAt: new Date().toISOString(),\r\n };\r\n }\r\n\r\n async get(receiptId: string): Promise<Receipt> {\r\n return this.client.get<Receipt>(`/v1/iso/receipts/${receiptId}`);\r\n }\r\n\r\n async list(options: ListReceiptsOptions = {}): Promise<PaginatedResponse<Receipt>> {\r\n const params = new URLSearchParams();\r\n if (options.limit) params.append('limit', String(options.limit));\r\n if (options.page) params.append('page', String(options.page));\r\n if (options.status) params.append('status', options.status);\r\n\r\n const query = params.toString();\r\n const endpoint = `/v1/iso/receipts${query ? `?${query}` : ''}`;\r\n\r\n // Check if response is array (direct list) or object (paginated)\r\n const response: any = await this.client.get(endpoint);\r\n const items = Array.isArray(response) ? response : (response.items || []);\r\n\r\n return {\r\n items: items,\r\n total: items.length,\r\n page: options.page || 1,\r\n limit: options.limit || 10,\r\n };\r\n }\r\n\r\n async getArtifacts(receiptId: string): Promise<ReceiptArtifacts> {\r\n const messages = await this.client.get<ISOMessage[]>(`/v1/iso/messages/${receiptId}`);\r\n const baseUrl = this.client.getBaseUrl();\r\n\r\n const artifacts: ReceiptArtifacts = {};\r\n\r\n messages.forEach((msg) => {\r\n switch (msg.type) {\r\n case 'pain.001':\r\n artifacts.pain001Url = msg.url;\r\n break;\r\n case 'pain.002':\r\n artifacts.pain002Url = msg.url;\r\n break;\r\n case 'pain.007':\r\n artifacts.pain007Url = msg.url;\r\n break;\r\n case 'pain.008':\r\n artifacts.pain008Url = msg.url;\r\n break;\r\n case 'camt.054':\r\n artifacts.camt054Url = msg.url;\r\n break;\r\n }\r\n });\r\n\r\n artifacts.bundleUrl = `${baseUrl}/files/${receiptId}/evidence.zip`;\r\n artifacts.manifestUrl = `${baseUrl}/files/${receiptId}/manifest.json`;\r\n\r\n return artifacts;\r\n }\r\n}\r\n","/**\r\n * Verification module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type { VerificationResult, VerificationProof } from '../types/verification';\r\n\r\nexport class VerificationModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async byReceiptId(receiptId: string): Promise<VerificationResult> {\r\n const receipt = await this.client.get<any>(`/v1/iso/receipts/${receiptId}`);\r\n\r\n return {\r\n valid: receipt.status === 'anchored',\r\n bundleHash: receipt.bundle_hash || receipt.bundleHash || '',\r\n onChain: !!receipt.anchor_tx || !!receipt.anchorTx,\r\n anchorTx: receipt.anchor_tx || receipt.anchorTx,\r\n timestamp: receipt.anchored_at || receipt.anchoredAt,\r\n };\r\n }\r\n\r\n async byUrl(bundleUrl: string): Promise<VerificationResult> {\r\n return this.client.post<VerificationResult>('/v1/iso/verify', {\r\n bundle_url: bundleUrl,\r\n });\r\n }\r\n\r\n async byHash(bundleHash: string): Promise<VerificationResult> {\r\n return this.client.post<VerificationResult>('/v1/iso/verify', {\r\n bundle_hash: bundleHash,\r\n });\r\n }\r\n\r\n async getProof(receiptId: string): Promise<VerificationProof> {\r\n const receipt = await this.client.get<any>(`/v1/iso/receipts/${receiptId}`);\r\n\r\n return {\r\n receiptId,\r\n bundleHash: receipt.bundle_hash || receipt.bundleHash,\r\n anchorTx: receipt.anchor_tx || receipt.anchorTx,\r\n blockNumber: receipt.block_number || 0,\r\n timestamp: receipt.anchored_at || receipt.anchoredAt,\r\n signature: receipt.signature || '',\r\n network: receipt.chain,\r\n contractAddress: receipt.contract_address || '',\r\n };\r\n }\r\n}\r\n","/**\r\n * Statements module\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type { GenerateStatementOptions, Statement } from '../types/iso';\r\n\r\nexport class StatementsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n async intraday(options: GenerateStatementOptions = {}): Promise<Statement> {\r\n const response = await this.client.post<any>('/v1/iso/statement/camt052', {\r\n date_from: options.dateFrom,\r\n date_to: options.dateTo,\r\n account_id: options.accountId,\r\n });\r\n\r\n return {\r\n type: 'camt.052',\r\n url: response.url,\r\n downloadUrl: response.download_url || response.url,\r\n messageId: response.message_id || response.messageId,\r\n createdAt: response.created_at || new Date().toISOString(),\r\n };\r\n }\r\n\r\n async endOfDay(options: GenerateStatementOptions = {}): Promise<Statement> {\r\n const response = await this.client.post<any>('/v1/iso/statement/camt053', {\r\n date: options.dateTo || options.dateFrom,\r\n account_id: options.accountId,\r\n });\r\n\r\n return {\r\n type: 'camt.053',\r\n url: response.url,\r\n downloadUrl: response.download_url || response.url,\r\n messageId: response.message_id || response.messageId,\r\n createdAt: response.created_at || new Date().toISOString(),\r\n };\r\n }\r\n}\r\n","/**\r\n * Events module for live updates\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\nimport type { ReceiptUpdate } from '../types/receipt';\r\n\r\nexport interface EventListener {\r\n stop: () => void;\r\n}\r\n\r\nexport class EventsModule {\r\n constructor(private client: APIClient) { }\r\n\r\n listen(receiptId: string, callback: (update: ReceiptUpdate) => void): EventListener {\r\n const baseUrl = this.client.getBaseUrl();\r\n const url = `${baseUrl}/v1/iso/events/${receiptId}`;\r\n\r\n const eventSource = new EventSource(url);\r\n\r\n eventSource.onmessage = (event) => {\r\n try {\r\n const data = JSON.parse(event.data);\r\n callback({\r\n id: receiptId,\r\n status: data.status,\r\n anchorTx: data.anchor_tx || data.anchorTx,\r\n bundleHash: data.bundle_hash || data.bundleHash,\r\n timestamp: data.timestamp || new Date().toISOString(),\r\n });\r\n } catch (error) {\r\n console.error('Failed to parse SSE event:', error);\r\n }\r\n };\r\n\r\n eventSource.onerror = (error) => {\r\n console.error('SSE connection error:', error);\r\n eventSource.close();\r\n };\r\n\r\n return {\r\n stop: () => eventSource.close(),\r\n };\r\n }\r\n}\r\n","/**\r\n * Embed module for generating embeddable widgets\r\n */\r\n\r\nimport type { APIClient } from '../client';\r\n\r\nexport interface EmbedOptions {\r\n theme?: 'light' | 'dark';\r\n width?: string;\r\n height?: string;\r\n}\r\n\r\nexport interface WidgetResult {\r\n iframeHtml: string;\r\n embedUrl: string;\r\n}\r\n\r\nexport class EmbedModule {\r\n constructor(private client: APIClient) { }\r\n\r\n widget(receiptId: string, options: EmbedOptions = {}): WidgetResult {\r\n const baseUrl = this.client.getBaseUrl();\r\n const theme = options.theme || 'light';\r\n const width = options.width || '100%';\r\n const height = options.height || '400px';\r\n\r\n const embedUrl = `${baseUrl}/embed/receipt?rid=${receiptId}&theme=${theme}`;\r\n\r\n const iframeHtml = `<iframe src=\"${embedUrl}\" width=\"${width}\" height=\"${height}\" frameborder=\"0\" style=\"border: none;\"></iframe>`;\r\n\r\n return {\r\n iframeHtml,\r\n embedUrl,\r\n };\r\n }\r\n\r\n fullPage(receiptId: string): string {\r\n const baseUrl = this.client.getBaseUrl();\r\n return `${baseUrl}/receipt/${receiptId}`;\r\n }\r\n}\r\n","/**\r\n * Payment template - For simple payments between two parties\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface PaymentTemplateOptions {\r\n /** Payment amount */\r\n amount: number;\r\n /** Who is sending the payment */\r\n from: string;\r\n /** Who is receiving the payment */\r\n to: string;\r\n /** What the payment is for */\r\n purpose: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Sender's wallet address (optional, defaults to transaction sender) */\r\n senderWallet?: string;\r\n /** Receiver's wallet address (optional, defaults to transaction receiver) */\r\n receiverWallet?: string;\r\n /** Chain/network (optional, auto-detected if not provided) */\r\n chain?: 'coston2' | 'flare';\r\n /** Currency (optional, auto-detected if not provided) */\r\n currency?: string;\r\n}\r\n\r\nexport async function createPaymentReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: PaymentTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: options.chain || 'coston2', // Smart default\r\n amount: options.amount,\r\n currency: options.currency || 'C2FLR', // Smart default\r\n sender: options.senderWallet || options.from,\r\n receiver: options.receiverWallet || options.to,\r\n reference: `Payment: ${options.purpose} (Tx: ${options.transactionHash})`,\r\n });\r\n}\r\n","/**\r\n * Donation template - For charitable donations\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface DonationTemplateOptions {\r\n /** Donation amount */\r\n amount: number;\r\n /** Name of the donor */\r\n donor: string;\r\n /** Name of the organization receiving the donation */\r\n organization: string;\r\n /** Campaign or cause name */\r\n campaign: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Donor's wallet address (optional) */\r\n donorWallet?: string;\r\n /** Organization's wallet address (optional) */\r\n organizationWallet?: string;\r\n}\r\n\r\nexport async function createDonationReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: DonationTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.donorWallet || options.donor,\r\n receiver: options.organizationWallet || options.organization,\r\n reference: `Donation: ${options.campaign} (Donor: ${options.donor}, Organization: ${options.organization})`,\r\n });\r\n}\r\n","/**\r\n * Escrow template - For escrow releases\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface EscrowTemplateOptions {\r\n /** Amount being released from escrow */\r\n amount: number;\r\n /** Buyer's name */\r\n buyer: string;\r\n /** Seller's name */\r\n seller: string;\r\n /** Escrow identifier */\r\n escrowId: string;\r\n /** Reason for release */\r\n releaseReason: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Buyer's wallet address (optional) */\r\n buyerWallet?: string;\r\n /** Seller's wallet address (optional) */\r\n sellerWallet?: string;\r\n}\r\n\r\nexport async function createEscrowReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: EscrowTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.buyerWallet || options.buyer,\r\n receiver: options.sellerWallet || options.seller,\r\n reference: `Escrow Release: ${options.escrowId} - ${options.releaseReason} (Buyer: ${options.buyer}, Seller: ${options.seller})`,\r\n });\r\n}\r\n","/**\r\n * Grant template - For grant disbursements\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface GrantTemplateOptions {\r\n /** Grant amount */\r\n amount: number;\r\n /** Name of the grantee (recipient) */\r\n grantee: string;\r\n /** Name of the grantor (funder) */\r\n grantor: string;\r\n /** Grant identifier */\r\n grantId: string;\r\n /** Purpose of the grant */\r\n purpose: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Grantor's wallet address (optional) */\r\n grantorWallet?: string;\r\n /** Grantee's wallet address (optional) */\r\n granteeWallet?: string;\r\n}\r\n\r\nexport async function createGrantReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: GrantTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.grantorWallet || options.grantor,\r\n receiver: options.granteeWallet || options.grantee,\r\n reference: `Grant: ${options.grantId} - ${options.purpose} (Grantor: ${options.grantor}, Grantee: ${options.grantee})`,\r\n });\r\n}\r\n","/**\r\n * Refund template - For refunds\r\n */\r\n\r\nimport type { ReceiptsModule } from '../modules/receipts';\r\nimport type { Receipt } from '../types/receipt';\r\n\r\nexport interface RefundTemplateOptions {\r\n /** Refund amount */\r\n amount: number;\r\n /** Original receipt ID being refunded */\r\n originalPayment: string;\r\n /** Reason for refund */\r\n reason: string;\r\n /** Customer name */\r\n customer: string;\r\n /** Blockchain transaction hash */\r\n transactionHash: string;\r\n /** Business wallet address (optional) */\r\n businessWallet?: string;\r\n /** Customer wallet address (optional) */\r\n customerWallet?: string;\r\n}\r\n\r\nexport async function createRefundReceipt(\r\n receiptsModule: ReceiptsModule,\r\n options: RefundTemplateOptions\r\n): Promise<Receipt> {\r\n return receiptsModule.create({\r\n transactionHash: options.transactionHash,\r\n chain: 'coston2',\r\n amount: options.amount,\r\n currency: 'FLR',\r\n sender: options.businessWallet || 'Business',\r\n receiver: options.customerWallet || options.customer,\r\n reference: `Refund: ${options.originalPayment} - ${options.reason} (Customer: ${options.customer})`,\r\n });\r\n}\r\n","/**\r\n * Main ProofRails SDK class\r\n */\r\n\r\nimport { APIClient } from './client';\r\nimport { ProjectsModule, AdminModule } from './modules/projects';\r\nimport { ReceiptsModule } from './modules/receipts';\r\nimport { VerificationModule } from './modules/verification';\r\nimport { StatementsModule } from './modules/statements';\r\nimport { EventsModule } from './modules/events';\r\nimport { EmbedModule } from './modules/embed';\r\nimport {\r\n createPaymentReceipt,\r\n createDonationReceipt,\r\n createEscrowReceipt,\r\n createGrantReceipt,\r\n createRefundReceipt,\r\n} from './templates';\r\nimport type { SDKConfig, Network } from './types/common';\r\nimport type { APIKey } from './types/project';\r\nimport type {\r\n PaymentTemplateOptions,\r\n DonationTemplateOptions,\r\n EscrowTemplateOptions,\r\n GrantTemplateOptions,\r\n RefundTemplateOptions,\r\n} from './templates';\r\n\r\nexport class ProofRails {\r\n private client: APIClient;\r\n\r\n /** Project and API key management */\r\n public readonly project: ProjectsModule;\r\n\r\n /** Admin operations (requires admin token) */\r\n public readonly admin: AdminModule;\r\n\r\n /** Receipt operations */\r\n public readonly receipts: ReceiptsModule;\r\n\r\n /** Verification operations */\r\n public readonly verify: VerificationModule;\r\n\r\n /** Statement generation */\r\n public readonly statements: StatementsModule;\r\n\r\n /** Live event updates */\r\n public readonly events: EventsModule;\r\n\r\n /** Embeddable widgets */\r\n public readonly embed: EmbedModule;\r\n\r\n /** Beginner-friendly templates */\r\n public readonly templates: {\r\n payment: (options: PaymentTemplateOptions) => ReturnType<typeof createPaymentReceipt>;\r\n donation: (options: DonationTemplateOptions) => ReturnType<typeof createDonationReceipt>;\r\n escrow: (options: EscrowTemplateOptions) => ReturnType<typeof createEscrowReceipt>;\r\n grant: (options: GrantTemplateOptions) => ReturnType<typeof createGrantReceipt>;\r\n refund: (options: RefundTemplateOptions) => ReturnType<typeof createRefundReceipt>;\r\n };\r\n\r\n constructor(config: SDKConfig = {}) {\r\n this.client = new APIClient(config);\r\n\r\n this.project = new ProjectsModule(this.client);\r\n this.admin = new AdminModule(this.client);\r\n this.receipts = new ReceiptsModule(this.client);\r\n this.verify = new VerificationModule(this.client);\r\n this.statements = new StatementsModule(this.client);\r\n this.events = new EventsModule(this.client);\r\n this.embed = new EmbedModule(this.client);\r\n\r\n this.templates = {\r\n payment: (options) => createPaymentReceipt(this.receipts, options),\r\n donation: (options) => createDonationReceipt(this.receipts, options),\r\n escrow: (options) => createEscrowReceipt(this.receipts, options),\r\n grant: (options) => createGrantReceipt(this.receipts, options),\r\n refund: (options) => createRefundReceipt(this.receipts, options),\r\n };\r\n }\r\n\r\n /**\r\n * Create a new project with API key (self-serve)\r\n * This is a convenience method for beginners\r\n */\r\n static async createProject(options: {\r\n label?: string;\r\n network?: Network;\r\n baseUrl?: string;\r\n } = {}): Promise<{ client: ProofRails; apiKey: string; projectId: string }> {\r\n const tempClient = new ProofRails({ network: options.network, baseUrl: options.baseUrl });\r\n const result = await tempClient.project.create({ label: options.label }) as any;\r\n\r\n const apiKey = result.api_key || result.apiKey;\r\n const projectId = result.project_id || result.projectId;\r\n\r\n const client = new ProofRails({\r\n apiKey,\r\n network: options.network,\r\n baseUrl: options.baseUrl // Propagate baseUrl\r\n });\r\n\r\n return {\r\n client,\r\n apiKey,\r\n projectId,\r\n };\r\n }\r\n\r\n /**\r\n * Update the API key for this client\r\n */\r\n setApiKey(apiKey: string): void {\r\n this.client.setApiKey(apiKey);\r\n }\r\n\r\n /**\r\n * Update the admin token for this client\r\n */\r\n setAdminToken(adminToken: string): void {\r\n this.client.setAdminToken(adminToken);\r\n }\r\n}\r\n\r\nexport default ProofRails;\r\n","/**\r\n * User-friendly error messages and helpers\r\n */\r\n\r\nexport interface FriendlyError {\r\n title: string;\r\n message: string;\r\n solution?: string;\r\n learnMore?: string;\r\n}\r\n\r\nexport function getFriendlyError(error: any): FriendlyError {\r\n const errorMsg = error?.message || error?.detail || String(error);\r\n const statusCode = error?.statusCode || error?.status;\r\n\r\n // Database/Uniqueness errors\r\n if (errorMsg.includes('UNIQUE constraint') || errorMsg.includes('already exists')) {\r\n return {\r\n title: '❌ Duplicate Receipt',\r\n message: 'A receipt with this transaction hash already exists.',\r\n solution: 'This transaction has already been recorded. Check your receipts list.',\r\n learnMore: 'https://docs.proofrails.com/errors/duplicate'\r\n };\r\n }\r\n\r\n // Insufficient funds (middleware wallet)\r\n if (errorMsg.includes('insufficient funds') || errorMsg.includes('gas')) {\r\n return {\r\n title: '❌ Middleware Wallet Needs Funding',\r\n message: 'Your ProofRails middleware wallet doesn\\'t have enough tokens to pay gas fees.',\r\n solution: 'Send 0.5-1.0 C2FLR tokens to your middleware wallet address (check your .env ANCHOR_PRIVATE_KEY).',\r\n learnMore: 'https://docs.proofrails.com/setup/funding'\r\n };\r\n }\r\n\r\n // Network/Connection errors\r\n if (errorMsg.includes('fetch') || errorMsg.includes('network') || errorMsg.includes('ECONNREFUSED')) {\r\n return {\r\n title: '❌ Cannot Connect to Middleware',\r\n message: 'Unable to reach the ProofRails middleware server.',\r\n solution: 'Make sure your middleware is running on the correct port (default: 8000). Check your baseUrl configuration.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/connection'\r\n };\r\n }\r\n\r\n // Timeout errors\r\n if (errorMsg.includes('timeout') || errorMsg.includes('TIMEOUT')) {\r\n return {\r\n title: '⏱️ Request Timed Out',\r\n message: 'The middleware took too long to respond.',\r\n solution: 'The middleware might be processing a large request or experiencing issues. Try again in a moment.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/timeout'\r\n };\r\n }\r\n\r\n // Authentication errors\r\n if (statusCode === 401 || statusCode === 403 || errorMsg.includes('unauthorized') || errorMsg.includes('forbidden')) {\r\n return {\r\n title: '🔐 Authentication Failed',\r\n message: 'Your API key is invalid or missing.',\r\n solution: 'Check that you\\'ve set your API key correctly. You can create a new one using ProofRails.createProject().',\r\n learnMore: 'https://docs.proofrails.com/setup/api-keys'\r\n };\r\n }\r\n\r\n // Not found errors\r\n if (statusCode === 404 || errorMsg.includes('not found')) {\r\n return {\r\n title: '🔍 Not Found',\r\n message: 'The requested resource doesn\\'t exist.',\r\n solution: 'Double-check the receipt ID or resource identifier you\\'re trying to access.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/not-found'\r\n };\r\n }\r\n\r\n // Validation errors\r\n if (statusCode === 422 || errorMsg.includes('validation') || errorMsg.includes('invalid')) {\r\n return {\r\n title: '⚠️ Invalid Data',\r\n message: 'The data you provided is invalid or incomplete.',\r\n solution: 'Check that all required fields are filled correctly (amount, addresses, transaction hash, etc.).',\r\n learnMore: 'https://docs.proofrails.com/api/validation'\r\n };\r\n }\r\n\r\n // Server errors\r\n if (statusCode === 500 || statusCode === 502 || statusCode === 503) {\r\n return {\r\n title: '🔧 Server Error',\r\n message: 'The middleware encountered an internal error.',\r\n solution: 'Check the middleware logs for details. The issue might be with database access or blockchain connectivity.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting/server-errors'\r\n };\r\n }\r\n\r\n // Generic fallback\r\n return {\r\n title: '❌ Error',\r\n message: errorMsg,\r\n solution: 'If this error persists, please check the documentation or contact support.',\r\n learnMore: 'https://docs.proofrails.com/troubleshooting'\r\n };\r\n}\r\n\r\nexport function formatErrorForDisplay(error: any): string {\r\n const friendly = getFriendlyError(error);\r\n let output = `${friendly.title}\\n${friendly.message}`;\r\n\r\n if (friendly.solution) {\r\n output += `\\n\\n💡 Solution: ${friendly.solution}`;\r\n }\r\n\r\n if (friendly.learnMore) {\r\n output += `\\n📖 Learn more: ${friendly.learnMore}`;\r\n }\r\n\r\n return output;\r\n}\r\n","/**\r\n * Smart auto-detection utilities\r\n */\r\n\r\nimport type { Network } from '../types/common';\r\n\r\nexport interface ChainInfo {\r\n id: number;\r\n name: string;\r\n network: Network;\r\n currency: string;\r\n rpcUrl: string;\r\n explorerUrl: string;\r\n}\r\n\r\nexport const SUPPORTED_CHAINS: Record<number, ChainInfo> = {\r\n 14: {\r\n id: 14,\r\n name: 'Flare',\r\n network: 'flare',\r\n currency: 'FLR',\r\n rpcUrl: 'https://flare-api.flare.network/ext/C/rpc',\r\n explorerUrl: 'https://flare-explorer.flare.network'\r\n },\r\n 114: {\r\n id: 114,\r\n name: 'Coston2',\r\n network: 'coston2',\r\n currency: 'C2FLR',\r\n rpcUrl: 'https://coston2-api.flare.network/ext/C/rpc',\r\n explorerUrl: 'https://coston2-explorer.flare.network'\r\n }\r\n};\r\n\r\n/**\r\n * Auto-detect network from chain ID\r\n */\r\nexport function detectNetwork(chainId?: number): Network {\r\n if (!chainId) return 'coston2'; // Default to testnet\r\n\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n return chain?.network || 'coston2';\r\n}\r\n\r\n/**\r\n * Auto-detect currency from chain ID\r\n */\r\nexport function detectCurrency(chainId?: number): string {\r\n if (!chainId) return 'C2FLR';\r\n\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n return chain?.currency || 'C2FLR';\r\n}\r\n\r\n/**\r\n * Get chain info from chain ID\r\n */\r\nexport function getChainInfo(chainId: number): ChainInfo | null {\r\n return SUPPORTED_CHAINS[chainId] || null;\r\n}\r\n\r\n/**\r\n * Check if chain is supported\r\n */\r\nexport function isSupportedChain(chainId: number): boolean {\r\n return chainId in SUPPORTED_CHAINS;\r\n}\r\n\r\n/**\r\n * Get explorer URL for transaction\r\n */\r\nexport function getExplorerUrl(chainId: number, txHash: string): string {\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n if (!chain) return '';\r\n\r\n return `${chain.explorerUrl}/tx/${txHash}`;\r\n}\r\n\r\n/**\r\n * Get explorer URL for address\r\n */\r\nexport function getAddressExplorerUrl(chainId: number, address: string): string {\r\n const chain = SUPPORTED_CHAINS[chainId];\r\n if (!chain) return '';\r\n\r\n return `${chain.explorerUrl}/address/${address}`;\r\n}\r\n","/**\r\n * Validation helpers for common inputs\r\n */\r\n\r\nexport interface ValidationResult {\r\n isValid: boolean;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Validate Ethereum address\r\n */\r\nexport function validateAddress(address: string): ValidationResult {\r\n if (!address) {\r\n return { isValid: false, error: 'Address is required' };\r\n }\r\n\r\n if (typeof address !== 'string') {\r\n return { isValid: false, error: 'Address must be a string' };\r\n }\r\n\r\n // Check if it starts with 0x\r\n if (!address.startsWith('0x')) {\r\n return { isValid: false, error: 'Address must start with 0x' };\r\n }\r\n\r\n // Check if it's 42 characters long (0x + 40 hex chars)\r\n if (address.length !== 42) {\r\n return { isValid: false, error: 'Address must be 42 characters long (0x + 40 hex digits)' };\r\n }\r\n\r\n // Check if it contains only valid hex characters\r\n const hexRegex = /^0x[0-9a-fA-F]{40}$/;\r\n if (!hexRegex.test(address)) {\r\n return { isValid: false, error: 'Address contains invalid characters (must be hexadecimal)' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate amount\r\n */\r\nexport function validateAmount(amount: string | number): ValidationResult {\r\n if (amount === '' || amount === null || amount === undefined) {\r\n return { isValid: false, error: 'Amount is required' };\r\n }\r\n\r\n const numAmount = typeof amount === 'string' ? parseFloat(amount) : amount;\r\n\r\n if (isNaN(numAmount)) {\r\n return { isValid: false, error: 'Amount must be a valid number' };\r\n }\r\n\r\n if (numAmount <= 0) {\r\n return { isValid: false, error: 'Amount must be greater than 0' };\r\n }\r\n\r\n if (numAmount > Number.MAX_SAFE_INTEGER) {\r\n return { isValid: false, error: 'Amount is too large' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate transaction hash\r\n */\r\nexport function validateTransactionHash(hash: string): ValidationResult {\r\n if (!hash) {\r\n return { isValid: false, error: 'Transaction hash is required' };\r\n }\r\n\r\n if (typeof hash !== 'string') {\r\n return { isValid: false, error: 'Transaction hash must be a string' };\r\n }\r\n\r\n // Check if it starts with 0x\r\n if (!hash.startsWith('0x')) {\r\n return { isValid: false, error: 'Transaction hash must start with 0x' };\r\n }\r\n\r\n // Check if it's 66 characters long (0x + 64 hex chars)\r\n if (hash.length !== 66) {\r\n return { isValid: false, error: 'Transaction hash must be 66 characters long (0x + 64 hex digits)' };\r\n }\r\n\r\n // Check if it contains only valid hex characters\r\n const hexRegex = /^0x[0-9a-fA-F]{64}$/;\r\n if (!hexRegex.test(hash)) {\r\n return { isValid: false, error: 'Transaction hash contains invalid characters (must be hexadecimal)' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate API key format\r\n */\r\nexport function validateApiKey(apiKey: string): ValidationResult {\r\n if (!apiKey) {\r\n return { isValid: false, error: 'API key is required' };\r\n }\r\n\r\n if (typeof apiKey !== 'string') {\r\n return { isValid: false, error: 'API key must be a string' };\r\n }\r\n\r\n if (apiKey.length < 10) {\r\n return { isValid: false, error: 'API key is too short' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate purpose/reference text\r\n */\r\nexport function validatePurpose(purpose: string): ValidationResult {\r\n if (!purpose) {\r\n return { isValid: false, error: 'Purpose is required' };\r\n }\r\n\r\n if (typeof purpose !== 'string') {\r\n return { isValid: false, error: 'Purpose must be a string' };\r\n }\r\n\r\n if (purpose.trim().length === 0) {\r\n return { isValid: false, error: 'Purpose cannot be empty' };\r\n }\r\n\r\n if (purpose.length > 500) {\r\n return { isValid: false, error: 'Purpose is too long (max 500 characters)' };\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n\r\n/**\r\n * Validate all payment fields at once\r\n */\r\nexport function validatePayment(params: {\r\n amount: string | number;\r\n to: string;\r\n purpose: string;\r\n transactionHash?: string;\r\n}): ValidationResult {\r\n const amountCheck = validateAmount(params.amount);\r\n if (!amountCheck.isValid) return amountCheck;\r\n\r\n const addressCheck = validateAddress(params.to);\r\n if (!addressCheck.isValid) return addressCheck;\r\n\r\n const purposeCheck = validatePurpose(params.purpose);\r\n if (!purposeCheck.isValid) return purposeCheck;\r\n\r\n if (params.transactionHash) {\r\n const hashCheck = validateTransactionHash(params.transactionHash);\r\n if (!hashCheck.isValid) return hashCheck;\r\n }\r\n\r\n return { isValid: true };\r\n}\r\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -14,7 +14,8 @@ var APIClient = class {
|
|
|
14
14
|
constructor(config = {}) {
|
|
15
15
|
this.rateLimitInfo = null;
|
|
16
16
|
const envBaseUrl = typeof process !== "undefined" && process.env?.NEXT_PUBLIC_PROOFRAILS_BASE_URL;
|
|
17
|
-
|
|
17
|
+
const defaultBaseUrl = "https://proofrails-clone-middleware.onrender.com";
|
|
18
|
+
this.baseUrl = config.baseUrl || envBaseUrl || defaultBaseUrl;
|
|
18
19
|
this.apiKey = config.apiKey;
|
|
19
20
|
this.adminToken = config.adminToken;
|
|
20
21
|
this.timeout = config.timeout || 3e4;
|