{"_id":"@aura-payments/sdk","_rev":"4-a491bb1b1e8d4d234f6917dffb9f947a","name":"@aura-payments/sdk","dist-tags":{"latest":"2.3.0"},"versions":{"2.1.0":{"name":"@aura-payments/sdk","version":"2.1.0","keywords":["aura","payments","blockchain","arc","usdc","escrow","sdk","typescript"],"author":{"name":"Aura Payments"},"license":"MIT","_id":"@aura-payments/sdk@2.1.0","maintainers":[{"name":"humancodex","email":"aurapaymentslab@gmail.com"}],"dist":{"shasum":"449e21d56847fe433667bb4f1f85003c3ea9d8be","tarball":"https://registry.npmjs.org/@aura-payments/sdk/-/sdk-2.1.0.tgz","fileCount":8,"integrity":"sha512-nQ/TgjPvAAgb2lHFf7mxAtTcCq9fEN5hSbxXeuAgikyns+S5cdI+Tvi4/TGrjuO8UtIx72eVNUf7P5xfxVEj8g==","signatures":[{"sig":"MEUCIQDDjLRuikAh0tdO/aVmYtyxn2Rp5BaldwFwtEzhmbRAeAIgepwIt9MIWqZmPDsM7ZgFLoUumesEalM1MverQhS1+jE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":304774},"main":"./dist/index.js","_from":"file:aura-payments-sdk-2.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"jest --passWithNoTests","build":"tsup","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch"},"_npmUser":{"name":"humancodex","email":"aurapaymentslab@gmail.com"},"_resolved":"/private/var/folders/c7/06b9xh_57rn7dpbqy0wvs8lw0000gn/T/7ee99dde40c1c00b73282ba0ee0c2a21/aura-payments-sdk-2.1.0.tgz","_integrity":"sha512-nQ/TgjPvAAgb2lHFf7mxAtTcCq9fEN5hSbxXeuAgikyns+S5cdI+Tvi4/TGrjuO8UtIx72eVNUf7P5xfxVEj8g==","_npmVersion":"11.17.0","description":"TypeScript SDK for Aura Payments Platform","directories":{},"_nodeVersion":"26.5.0","dependencies":{"zod":"^3.25.76","@aura-payments/shared":"2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.3.5","eslint":"^8","ts-jest":"^29.2.0","typescript":"^5","@types/jest":"^29.5.0","@types/node":"^22","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.1.0_1786064431765_0.1157217607635943","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@aura-payments/sdk","version":"2.1.1","keywords":["aura","payments","blockchain","arc","usdc","escrow","sdk","typescript"],"author":{"name":"Aura Payments"},"license":"MIT","_id":"@aura-payments/sdk@2.1.1","maintainers":[{"name":"humancodex","email":"aurapaymentslab@gmail.com"}],"homepage":"https://getaura.sh","bugs":{"url":"https://github.com/humancodex/ap/issues"},"dist":{"shasum":"2a9dd101b149c9dcde82639046b68a591209f2f4","tarball":"https://registry.npmjs.org/@aura-payments/sdk/-/sdk-2.1.1.tgz","fileCount":6,"integrity":"sha512-FUzKUb9KZix1hmz2dlj0chIIX8drFHwJc2HxcxtcCuvPNvhNtVEGgH+VFowMnyQYxrQogghNwEQP68ytejDYkw==","signatures":[{"sig":"MEUCIFFFEZ/205QAH65wEybwxzwyGjbOWHKU0PuX5KbTLSU0AiEAhjQO97hIY6ONU4qhm/Bpns1oMRD/IFAOoQlUskOUva0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":160326},"main":"./dist/index.js","_from":"file:aura-payments-sdk-2.1.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"jest --passWithNoTests","build":"tsup","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch"},"_npmUser":{"name":"humancodex","email":"aurapaymentslab@gmail.com"},"_resolved":"/private/var/folders/c7/06b9xh_57rn7dpbqy0wvs8lw0000gn/T/9fc0d5261a4f33b95becc9640f03a927/aura-payments-sdk-2.1.1.tgz","_integrity":"sha512-FUzKUb9KZix1hmz2dlj0chIIX8drFHwJc2HxcxtcCuvPNvhNtVEGgH+VFowMnyQYxrQogghNwEQP68ytejDYkw==","repository":{"url":"git+https://github.com/humancodex/ap.git","type":"git","directory":"packages/sdk"},"_npmVersion":"11.17.0","description":"TypeScript SDK for Aura Payments Platform","directories":{},"_nodeVersion":"26.5.0","dependencies":{"zod":"^3.25.76","@aura-payments/shared":"2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.3.5","eslint":"^8","ts-jest":"^29.2.0","typescript":"^5","@types/jest":"^29.5.0","@types/node":"^22","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.1.1_1786300120242_0.3000493736576828","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@aura-payments/sdk","version":"2.2.0","keywords":["aura","payments","blockchain","arc","usdc","escrow","sdk","typescript"],"author":{"name":"Aura Payments"},"license":"MIT","_id":"@aura-payments/sdk@2.2.0","maintainers":[{"name":"humancodex","email":"aurapaymentslab@gmail.com"}],"homepage":"https://getaura.sh","bugs":{"url":"https://github.com/humancodex/ap/issues"},"dist":{"shasum":"9fdac14f41cc03a1443e00198d10a22de9c465cd","tarball":"https://registry.npmjs.org/@aura-payments/sdk/-/sdk-2.2.0.tgz","fileCount":6,"integrity":"sha512-pmKZPvZlm+D+YP5b3FkT0v/lvCBkHQgKiG63vZh/3XVImAy/WxjjT4ARGjIz8NdZ//naTWJ/LASsWq9ClfgKYg==","signatures":[{"sig":"MEUCIQDAkyJBYDKWWytLaw6hn0MCZbISQ6cxZGZKp72J6Rt+EgIgGz4yH5nL1w+Khpo+xXvwCAVX6qZJ0loPvxaxvTKfqt0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":204220},"main":"./dist/index.js","_from":"file:aura-payments-sdk-2.2.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"jest --passWithNoTests","build":"tsup","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch"},"_npmUser":{"name":"humancodex","email":"aurapaymentslab@gmail.com"},"_resolved":"/private/var/folders/c7/06b9xh_57rn7dpbqy0wvs8lw0000gn/T/0329801c903cabe0d4949a9408e68f9f/aura-payments-sdk-2.2.0.tgz","_integrity":"sha512-pmKZPvZlm+D+YP5b3FkT0v/lvCBkHQgKiG63vZh/3XVImAy/WxjjT4ARGjIz8NdZ//naTWJ/LASsWq9ClfgKYg==","repository":{"url":"git+https://github.com/humancodex/ap.git","type":"git","directory":"packages/sdk"},"_npmVersion":"11.17.0","description":"TypeScript SDK for Aura Payments Platform","directories":{},"_nodeVersion":"26.5.0","dependencies":{"zod":"^3.25.76","@aura-payments/shared":"2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.3.5","eslint":"^8","ts-jest":"^29.2.0","typescript":"^5","@types/jest":"^29.5.0","@types/node":"^22","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"tmp":"tmp/sdk_2.2.0_1786729057271_0.6758291123484579","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"_id":"@aura-payments/sdk@2.3.0","bugs":{"url":"https://github.com/humancodex/ap/issues"},"dist":{"shasum":"9cd7893e9ee829b3f5cfc76ac5a2fb34c344d1fc","tarball":"https://registry.npmjs.org/@aura-payments/sdk/-/sdk-2.3.0.tgz","fileCount":6,"integrity":"sha512-gTuWlwOdhC8CkGRbzO+iRXjs1xYtVbpzBLssW7wd455fxmqcpSSm7LVKH7/9laATN2IaWZybSEnvD1WJ8+usRA==","signatures":[{"sig":"MEUCIGWyE9CkhL/eOJHC0nHFKnfrshBT2SF7AO9xMjlzJKcHAiEA6x5Q2kkL2FY3ckY9/lsXpn11djiOMIYX+BearzhEzOA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG4O4I+2euKFHRUFUVA/o1ag5c8gZ4W7Bxmj6km12O6eAiAOplAVupgMcfJWFVTBdrd7USJPI9utyy1hl2lqVvXFMQ=="}],"unpackedSize":209045},"main":"./dist/index.js","name":"@aura-payments/sdk","_from":"file:aura-payments-sdk-2.3.0.tgz","types":"./dist/index.d.ts","author":{"name":"Aura Payments"},"module":"./dist/index.mjs","engines":{"node":">=20.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"license":"MIT","scripts":{"dev":"tsup --watch","lint":"eslint src --ext .ts","test":"jest --passWithNoTests","build":"tsup","lint:fix":"eslint src --ext .ts --fix","typecheck":"tsc --noEmit","test:watch":"jest --watch"},"version":"2.3.0","_npmUser":{"name":"humancodex","email":"aurapaymentslab@gmail.com"},"homepage":"https://getaura.sh","keywords":["aura","payments","blockchain","arc","usdc","escrow","sdk","typescript"],"_resolved":"/private/var/folders/c7/06b9xh_57rn7dpbqy0wvs8lw0000gn/T/160dea3ed7b99f706991a10573063cbc/aura-payments-sdk-2.3.0.tgz","_integrity":"sha512-gTuWlwOdhC8CkGRbzO+iRXjs1xYtVbpzBLssW7wd455fxmqcpSSm7LVKH7/9laATN2IaWZybSEnvD1WJ8+usRA==","repository":{"url":"git+https://github.com/humancodex/ap.git","type":"git","directory":"packages/sdk"},"_npmVersion":"11.17.0","description":"TypeScript SDK for Aura Payments Platform","directories":{},"maintainers":[{"name":"humancodex","email":"aurapaymentslab@gmail.com"}],"_nodeVersion":"26.5.0","dependencies":{"zod":"^3.25.76","@aura-payments/shared":"2.0.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.3.5","eslint":"^8","ts-jest":"^29.2.0","typescript":"^5","@types/jest":"^29.5.0","@types/node":"^22","eslint-config-prettier":"^10.1.8","@typescript-eslint/parser":"^8.19.1","@typescript-eslint/eslint-plugin":"^8.19.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_2.3.0_1789863151238_0.27433281476295135"}}},"time":{"created":"2026-08-07T01:00:31.588Z","modified":"2026-09-20T00:12:31.560Z","2.1.0":"2026-08-07T01:00:31.963Z","2.1.1":"2026-08-09T18:28:40.381Z","2.2.0":"2026-08-14T17:37:37.429Z","2.3.0":"2026-09-20T00:12:31.337Z"},"bugs":{"url":"https://github.com/humancodex/ap/issues"},"author":{"name":"Aura Payments"},"license":"MIT","homepage":"https://getaura.sh","keywords":["aura","payments","blockchain","arc","usdc","escrow","sdk","typescript"],"repository":{"url":"git+https://github.com/humancodex/ap.git","type":"git","directory":"packages/sdk"},"description":"TypeScript SDK for Aura Payments Platform","maintainers":[{"name":"humancodex","email":"aurapaymentslab@gmail.com"}],"readme":"# @aura-payments/sdk\n\nTypeScript SDK for the Aura Payments Platform API. Build payment flows with multi-party escrows, Circle wallets, and real-time webhooks.\n\n## Installation\n\n```bash\nnpm install @aura-payments/sdk\n# or\nyarn add @aura-payments/sdk\n# or\npnpm add @aura-payments/sdk\n```\n\n## Quick Start\n\nReceive USDC and split it across recipients in one call (testnet):\n\n```typescript\nimport { AuraClient } from '@aura-payments/sdk'\n\nconst client = new AuraClient({\n  apiKey: process.env.AURA_API_KEY!,\n})\n\n// receiveAndSplit pays from the wallet owned by this id with type 'buyer' —\n// create the wallet with the SAME id and type (the default type is 'BUSINESS').\nconst PAYER_ID = 'my-agent'\n\n// 1. Provision (create-or-get) the payer wallet — moves no money.\nconst wallet = await client.wallets.create({ entityId: PAYER_ID, chain: 'ARC', type: 'buyer' })\n\n// 2. (testnet) drip USDC into the payer wallet.\nawait client.wallets.requestTestnetFunds(wallet.walletId)\n\n// 3. Escrow create → fund → release, in one call.\nconst result = await client.escrows.receiveAndSplit({\n  orderId: 'order-123',\n  payerOwnerId: PAYER_ID,\n  amount: '10',\n  chain: 'ARC',\n  splits: [\n    { ownerType: 'vendor', ownerId: 'vendor-1', role: 'vendor', percentage: 80 },\n    { ownerType: 'platform', ownerId: 'platform-1', role: 'platform', percentage: 20 },\n  ],\n})\n\nconsole.log(result.stage) // 'released' on the happy path\nconsole.log(result.escrow.escrowId)\n```\n\nScaffold this flow into any project with the CLI: `npx @aura-payments/cli init`\n(writes `.mcp.json`, `.env.example`, an `AGENTS.md` section, and\n`examples/aura/receive.ts`).\n\n## Features\n\n- **Type-Safe** - Full TypeScript support with comprehensive type definitions\n- **Dual Module Support** - Works with ESM and CommonJS\n- **Automatic Retries** - Exponential backoff with jitter for failed requests\n- **Idempotency** - Automatic idempotency key generation for safe retries\n- **Error Handling** - Typed error classes with type guards\n- **Webhook Validation** - HMAC-SHA256 signature verification\n\n## Configuration\n\n```typescript\nimport { AuraClient } from '@aura-payments/sdk'\n\nconst client = new AuraClient({\n  // Required: Your API key from the Aura dashboard\n  apiKey: 'ak_live_...',\n\n  // Optional: API base URL (default: https://getaura.sh/api)\n  baseUrl: 'https://getaura.sh/api',\n\n  // Optional: Request timeout in ms (default: 30000)\n  timeout: 30000,\n\n  // Optional: Max retry attempts (default: 3)\n  maxRetries: 3,\n\n  // Optional: Auto-generate idempotency keys (default: true)\n  autoIdempotency: true,\n})\n```\n\n## API Reference\n\n### Escrows\n\nEscrows enable secure multi-party payments with configurable splits and release conditions.\n\n#### Receive and Split (one call)\n\n`receiveAndSplit` composes the full escrow loop — create → wait for deployment →\npre-flight balance check → fund → wait for settlement → release:\n\n```typescript\nconst result = await client.escrows.receiveAndSplit({\n  orderId: 'order-123',\n  payerOwnerId: 'my-agent', // wallet owned by this id with type 'buyer' pays\n  amount: '10',\n  chain: 'ARC',\n  splits: [\n    { ownerType: 'vendor', ownerId: 'vendor-1', role: 'vendor', percentage: 80 },\n    { ownerType: 'platform', ownerId: 'platform-1', role: 'platform', percentage: 20 },\n  ],\n  // Optional: autoRelease (default true), waitForDeploymentMs, waitForFundingMs,\n  // pollIntervalMs, idempotencyKey\n})\n```\n\nThe result's `stage` makes partial runs explicit:\n\n| Stage | Meaning | Resume with |\n|-------|---------|-------------|\n| `created` | deployment didn't confirm in time (`deploymentPending: true`) | re-check `result.escrow.escrowId` |\n| `deployed` | payer wallet lacks funds — see `result.fundingRequired` | fund the payer wallet, then `escrows.fund` + `escrows.release` |\n| `funded` | funded but not released (`autoRelease: false` or settlement pending) | `escrows.release` |\n| `released` | funds split to recipients (happy path) | — |\n\nResume a partial run by acting on the returned `escrow.escrowId` — do NOT\nre-call `receiveAndSplit` with the same `orderId` (it would re-create and hit a\nduplicate-orderId error).\n\n#### Create Escrow\n\n```typescript\nconst escrow = await client.escrows.create({\n  orderId: 'order-123',\n  amountUsdc: '100.00',\n  splits: {\n    vendorEntityId: 'vendor-uuid',\n    sellerEntityId: 'seller-uuid',\n    platformEntityId: 'platform-uuid',\n    vendorPercentage: 70,\n    sellerPercentage: 20,\n    platformPercentage: 10,\n  },\n  adminSafeAddress: '0x...',\n  unlock: {\n    type: 'timeout', // 'oracle' | 'timeout' | 'hybrid' | 'manual'\n    days: 14,\n  },\n  items: [\n    {\n      orderItemId: 'item-1',\n      description: 'Premium Widget',\n      amountUsdc: '100.00',\n    },\n  ],\n})\n```\n\n#### Get Escrow\n\n```typescript\nconst escrow = await client.escrows.get('escrow-id')\n```\n\n#### List Escrows\n\n```typescript\nconst { data, pagination } = await client.escrows.list({\n  page: 1,\n  limit: 20,\n  status: 'funded', // 'pending' | 'funded' | 'locked' | 'released' | 'refunded' | 'disputed'\n  orderId: 'order-123',\n})\n```\n\n#### Fund Escrow\n\n```typescript\nconst funded = await client.escrows.fund({\n  escrowId: 'escrow-id',\n  fromEntityId: 'buyer-entity-id',\n  amountUsdc: '100.00',\n})\n```\n\n#### Release Escrow\n\n```typescript\n// Full release\nconst released = await client.escrows.release({\n  escrowId: 'escrow-id',\n})\n\n// Partial release\nconst partialRelease = await client.escrows.release({\n  escrowId: 'escrow-id',\n  partial: {\n    itemIds: ['item-1', 'item-2'],\n  },\n})\n\n// With multisig signature\nconst signedRelease = await client.escrows.release({\n  escrowId: 'escrow-id',\n  signature: {\n    digest: '0x...',\n    signature: '0x...',\n  },\n})\n```\n\n#### Refund Escrow\n\n```typescript\nconst refunded = await client.escrows.refund({\n  escrowId: 'escrow-id',\n  reason: 'vendor_reject', // 'vendor_reject' | 'sla_breach' | 'manual' | 'dispute_resolved'\n  toEntityId: 'buyer-entity-id',\n  amountUsdc: '50.00', // Optional: partial refund\n})\n```\n\n#### Disputes\n\n```typescript\n// Open a dispute\nconst dispute = await client.escrows.createDispute({\n  escrowId: 'escrow-id',\n  openedByEntityId: 'buyer-entity-id',\n  reason: 'Item not as described',\n  evidenceUrl: 'https://...',\n})\n\n// Get dispute details\nconst disputeDetails = await client.escrows.getDispute('escrow-id', 'dispute-id')\n```\n\n### Wallets\n\nManage Circle Developer-Controlled Wallets for your entities.\n\n#### Create Wallet\n\n```typescript\nconst wallet = await client.wallets.create({\n  entityId: 'entity-id', // your unique entity identifier\n  chain: 'ARC', // 'ARC' | 'ARB' | 'BASE' | 'ETH' | 'MATIC' | 'SOL'\n  type: 'buyer', // owner type: 'BUSINESS' (default) | 'buyer' | 'seller' | 'vendor' | 'platform' | ...\n})\n// Create-or-get: returns { walletId, address, ownerType, ownerId, isNew, ... }\n```\n\nNote: `receiveAndSplit` pays from the wallet owned by `payerOwnerId` with type\n`'buyer'` — create that wallet with the same `entityId` and `type: 'buyer'`.\n\n#### Request Testnet Funds\n\nDrip testnet USDC into a wallet from the platform faucet (testnet only):\n\n```typescript\nawait client.wallets.requestTestnetFunds(wallet.walletId)\n// Optional params: { token: 'USDC', chain: 'ARC' }\n```\n\nThe drip lands asynchronously on-chain — poll `getBalance` until it reflects.\nThrows `AuraFaucetUnavailableError` if the deployment has no faucet enabled;\nfund the wallet address manually in that case.\n\n#### Get Wallet\n\n```typescript\nconst wallet = await client.wallets.get('wallet-id')\n```\n\n#### List Wallets\n\n```typescript\nconst { data, pagination } = await client.wallets.list({\n  entityId: 'entity-uuid',\n  chain: 'ARC',\n  type: 'developer_controlled',\n  page: 1,\n  limit: 20,\n})\n```\n\n#### Get Balance\n\n```typescript\nconst balance = await client.wallets.getBalance('wallet-id')\n// Returns: { walletId, address, chain, balances: [{ token, amount, decimals, symbol }] }\n```\n\n#### Transfer Funds\n\n```typescript\nconst transfer = await client.wallets.transfer({\n  fromWalletId: 'wallet-id',\n  toAddress: '0x...',\n  amount: '50.00',\n  token: 'USDC',\n})\n\n// Check transfer status\nconst status = await client.wallets.getTransfer('wallet-id', transfer.id)\n```\n\n### Webhooks\n\nConfigure webhook endpoints to receive real-time payment events.\n\n#### Configure Webhook\n\n```typescript\nconst config = await client.webhooks.configure({\n  url: 'https://your-app.com/webhooks/aura',\n  events: [\n    'escrow.created',\n    'escrow.funded',\n    'escrow.released',\n    'escrow.refunded',\n    'escrow.disputed',\n    'wallet.created',\n    'transfer.completed',\n    'transfer.failed',\n    'dispute.opened',\n    'dispute.resolved',\n  ],\n})\n```\n\n#### Get Webhook Config\n\n```typescript\nconst config = await client.webhooks.getConfig()\n```\n\n#### Delete Webhook\n\n```typescript\nawait client.webhooks.delete()\n```\n\n#### Validate Webhook Signature\n\n```typescript\nimport { Webhooks } from '@aura-payments/sdk'\n\n// In your webhook handler\napp.post('/webhooks/aura', (req, res) => {\n  const signature = req.headers['x-aura-signature'] as string\n  const secret = process.env.AURA_WEBHOOK_SECRET!\n\n  const result = Webhooks.validateSignature({\n    payload: req.body,\n    signature,\n    secret,\n  })\n\n  if (!result.valid) {\n    console.error('Invalid webhook signature:', result.error)\n    return res.status(401).send('Invalid signature')\n  }\n\n  const event = result.event!\n\n  switch (event.type) {\n    case 'escrow.funded':\n      console.log('Escrow funded:', event.data)\n      break\n    case 'escrow.released':\n      console.log('Escrow released:', event.data)\n      break\n    case 'transfer.completed':\n      console.log('Transfer completed:', event.data)\n      break\n  }\n\n  res.status(200).send('OK')\n})\n```\n\n## Error Handling\n\nThe SDK provides typed error classes for different failure scenarios:\n\n```typescript\nimport {\n  AuraError,\n  AuraAPIError,\n  AuraNetworkError,\n  AuraTimeoutError,\n  AuraValidationError,\n  AuraAuthenticationError,\n  AuraNotFoundError,\n  AuraRateLimitError,\n  isAuraError,\n  isRetryableError,\n} from '@aura-payments/sdk'\n\ntry {\n  await client.escrows.get('invalid-id')\n} catch (error) {\n  if (error instanceof AuraNotFoundError) {\n    console.log('Escrow not found')\n  } else if (error instanceof AuraValidationError) {\n    console.log('Validation failed:', error.details)\n  } else if (error instanceof AuraAuthenticationError) {\n    console.log('Invalid API key')\n  } else if (error instanceof AuraRateLimitError) {\n    console.log(`Rate limited. Retry after ${error.retryAfter}s`)\n  } else if (error instanceof AuraNetworkError) {\n    console.log('Network error:', error.cause)\n  } else if (error instanceof AuraTimeoutError) {\n    console.log('Request timed out')\n  } else if (isAuraError(error)) {\n    console.log(`API error: ${error.message} (${error.code})`)\n  }\n\n  // Check if error is retryable\n  if (isRetryableError(error)) {\n    // Implement retry logic\n  }\n}\n```\n\n### Error Types\n\n| Error Class | Status Code | Description |\n|-------------|-------------|-------------|\n| `AuraValidationError` | 400 | Invalid request parameters |\n| `AuraAuthenticationError` | 401 | Invalid or missing API key |\n| `AuraNotFoundError` | 404 | Resource not found |\n| `AuraRateLimitError` | 429 | Rate limit exceeded |\n| `AuraTimeoutError` | 408 | Request timeout |\n| `AuraNetworkError` | - | Network connectivity issue |\n| `AuraAPIError` | 5xx | Server error |\n\n## TypeScript Types\n\nAll types are exported for use in your application:\n\n```typescript\nimport type {\n  // Client\n  AuraClientConfig,\n\n  // Escrow types\n  Escrow,\n  EscrowStatus,\n  EscrowSplit,\n  UnlockType,\n  DisputeStatus,\n  Dispute,\n  CreateEscrowParams,\n  CreateEscrowResponse,\n  FundEscrowParams,\n  ReleaseEscrowParams,\n  RefundEscrowParams,\n  CreateDisputeParams,\n  ListEscrowsParams,\n  ListEscrowsResponse,\n\n  // Wallet types\n  Wallet,\n  WalletBalance,\n  TokenBalance,\n  Chain,\n  WalletType,\n  CreateWalletParams,\n  TransferParams,\n  Transfer,\n  ListWalletsParams,\n  ListWalletsResponse,\n\n  // Webhook types\n  WebhookEvent,\n  WebhookEventType,\n  WebhookConfig,\n  ConfigureWebhookParams,\n  WebhookValidationResult,\n  ValidateWebhookSignatureOptions,\n\n  // Shared types\n  PaginationParams,\n  PaginatedResponse,\n} from '@aura-payments/sdk'\n```\n\n## Utilities\n\nThe SDK exports utility functions for advanced use cases:\n\n```typescript\nimport {\n  generateIdempotencyKey,\n  retryWithBackoff,\n  withTimeout,\n  calculateBackoff,\n} from '@aura-payments/sdk'\n\n// Generate a unique idempotency key\nconst key = generateIdempotencyKey()\n// Returns: \"1703001234567-abc123def456\"\n\n// Retry a function with exponential backoff\nconst result = await retryWithBackoff(\n  () => someAsyncOperation(),\n  3 // max retries\n)\n\n// Add timeout to any promise\nconst result = await withTimeout(\n  fetch('https://api.example.com'),\n  5000 // timeout in ms\n)\n```\n\n## Idempotency\n\nAll state-changing operations (POST/PUT) automatically include idempotency keys to ensure safe retries. You can provide your own:\n\n```typescript\n// Auto-generated idempotency key (default)\nawait client.escrows.create(params)\n\n// Custom idempotency key\nawait client.escrows.create(params, 'my-unique-key-123')\n\n// Disable auto-generation globally\nconst client = new AuraClient({\n  apiKey: '...',\n  autoIdempotency: false,\n})\n```\n\n## Supported Chains\n\n| Chain | Identifier | Network |\n|-------|------------|---------|\n| Arc | `ARC` | Arc Testnet / Mainnet |\n| Arbitrum | `ARB` | Arbitrum Sepolia / One |\n| Base | `BASE` | Base Sepolia / Mainnet |\n| Ethereum | `ETH` | Ethereum Mainnet |\n| Polygon | `MATIC` | Polygon Mainnet |\n| Solana | `SOL` | Solana Mainnet |\n\n## Requirements\n\n- Node.js 18+ (for native `fetch` support)\n- TypeScript 5.x (for best type inference)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}