{"_id":"@aeon-ai-pay/core","_rev":"2-0951aa4fcb89b0e661b32e428c6cf081","name":"@aeon-ai-pay/core","dist-tags":{"latest":"2.1.2"},"versions":{"2.1.0":{"name":"@aeon-ai-pay/core","version":"2.1.0","keywords":[],"author":{"name":"Coinbase Inc."},"license":"Apache-2.0","_id":"@aeon-ai-pay/core@2.1.0","maintainers":[{"name":"aeon_project","email":"code@alchemypay.org"}],"homepage":"https://github.com/coinbase/x402#readme","bugs":{"url":"https://github.com/coinbase/x402/issues"},"dist":{"shasum":"b429e418b15e1d26493caea92d71699780dca0e8","tarball":"https://registry.npmjs.org/@aeon-ai-pay/core/-/core-2.1.0.tgz","fileCount":62,"integrity":"sha512-axzHqdYeyeU4N4p4dfArDZCxtirZP5TBYgKDbWQ40a6KVfWPQaAm/mGVKV2hIeT5snyX2hdJE0gLD4hVXA14fQ==","signatures":[{"sig":"MEYCIQCddz4Mljz5D4mKuOOpwy9jhz9/IpVOdfmxJm0BfT5MWwIhAM1Z4KqPm8nazssUkilaYe/yGGzZU9ITNO0hdgal09sX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":655158},"main":"./dist/cjs/index.js","_from":"file:aeon-ai-pay-core-2.1.0.tgz","types":"./dist/cjs/index.d.ts","module":"./dist/esm/index.js","exports":{".":{"import":{"types":"./dist/esm/index.d.mts","default":"./dist/esm/index.mjs"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./http":{"import":{"types":"./dist/esm/http/index.d.mts","default":"./dist/esm/http/index.mjs"},"require":{"types":"./dist/cjs/http/index.d.ts","default":"./dist/cjs/http/index.js"}},"./types":{"import":{"types":"./dist/esm/types/index.d.mts","default":"./dist/esm/types/index.mjs"},"require":{"types":"./dist/cjs/types/index.d.ts","default":"./dist/cjs/types/index.js"}},"./utils":{"import":{"types":"./dist/esm/utils/index.d.mts","default":"./dist/esm/utils/index.mjs"},"require":{"types":"./dist/cjs/utils/index.d.ts","default":"./dist/cjs/utils/index.js"}},"./client":{"import":{"types":"./dist/esm/client/index.d.mts","default":"./dist/esm/client/index.mjs"},"require":{"types":"./dist/cjs/client/index.d.ts","default":"./dist/cjs/client/index.js"}},"./server":{"import":{"types":"./dist/esm/server/index.d.mts","default":"./dist/esm/server/index.mjs"},"require":{"types":"./dist/cjs/server/index.d.ts","default":"./dist/cjs/server/index.js"}},"./types/v1":{"import":{"types":"./dist/esm/types/v1/index.d.mts","default":"./dist/esm/types/v1/index.mjs"},"require":{"types":"./dist/cjs/types/v1/index.d.ts","default":"./dist/cjs/types/v1/index.js"}},"./facilitator":{"import":{"types":"./dist/esm/facilitator/index.d.mts","default":"./dist/esm/facilitator/index.mjs"},"require":{"types":"./dist/cjs/facilitator/index.d.ts","default":"./dist/cjs/facilitator/index.js"}}},"scripts":{"lint":"eslint . --ext .ts --fix","test":"vitest run","build":"tsup","start":"tsx --env-file=.env index.ts","watch":"tsc --watch","format":"prettier -c .prettierrc --write \"**/*.{ts,js,cjs,json,md}\"","lint:check":"eslint . --ext .ts","test:watch":"vitest","format:check":"prettier -c .prettierrc --check \"**/*.{ts,js,cjs,json,md}\"","test:integration":"vitest run test/integrations"},"_npmUser":{"name":"aeon_project","email":"code@alchemypay.org"},"_resolved":"/private/var/folders/rr/hyts0bs54zn73fgjjlld0tvm0000gn/T/7f8059ab0f69c47f029aa11b190e3fbf/aeon-ai-pay-core-2.1.0.tgz","_integrity":"sha512-axzHqdYeyeU4N4p4dfArDZCxtirZP5TBYgKDbWQ40a6KVfWPQaAm/mGVKV2hIeT5snyX2hdJE0gLD4hVXA14fQ==","repository":{"url":"git+https://github.com/coinbase/x402.git","type":"git"},"_npmVersion":"11.11.0","description":"x402 Payment Protocol","directories":{},"_nodeVersion":"25.8.1","dependencies":{"zod":"^3.24.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.2","tsup":"^8.4.0","vite":"^6.2.6","eslint":"^9.24.0","vitest":"^3.0.5","prettier":"3.5.2","@eslint/js":"^9.24.0","typescript":"^5.7.3","@types/node":"^22.13.4","eslint-plugin-jsdoc":"^50.6.9","vite-tsconfig-paths":"^5.1.4","eslint-plugin-import":"^2.31.0","eslint-plugin-prettier":"^5.2.6","@typescript-eslint/parser":"^8.29.1","@typescript-eslint/eslint-plugin":"^8.29.1"},"_npmOperationalInternal":{"tmp":"tmp/core_2.1.0_1775096308439_0.9988974987242822","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@aeon-ai-pay/core","version":"2.1.2","main":"./dist/cjs/index.js","module":"./dist/esm/index.js","types":"./dist/cjs/index.d.ts","keywords":[],"license":"Apache-2.0","author":{"name":"Coinbase Inc."},"repository":{"type":"git","url":"git+https://github.com/coinbase/x402.git"},"description":"x402 Payment Protocol","devDependencies":{"@eslint/js":"^9.24.0","@types/node":"^22.13.4","@typescript-eslint/eslint-plugin":"^8.29.1","@typescript-eslint/parser":"^8.29.1","eslint":"^9.24.0","eslint-plugin-import":"^2.31.0","eslint-plugin-jsdoc":"^50.6.9","eslint-plugin-prettier":"^5.2.6","prettier":"3.5.2","tsup":"^8.4.0","tsx":"^4.19.2","typescript":"^5.7.3","vite":"^6.2.6","vite-tsconfig-paths":"^5.1.4","vitest":"^3.0.5"},"dependencies":{"zod":"^3.24.2"},"exports":{".":{"import":{"types":"./dist/esm/index.d.mts","default":"./dist/esm/index.mjs"},"require":{"types":"./dist/cjs/index.d.ts","default":"./dist/cjs/index.js"}},"./client":{"import":{"types":"./dist/esm/client/index.d.mts","default":"./dist/esm/client/index.mjs"},"require":{"types":"./dist/cjs/client/index.d.ts","default":"./dist/cjs/client/index.js"}},"./facilitator":{"import":{"types":"./dist/esm/facilitator/index.d.mts","default":"./dist/esm/facilitator/index.mjs"},"require":{"types":"./dist/cjs/facilitator/index.d.ts","default":"./dist/cjs/facilitator/index.js"}},"./http":{"import":{"types":"./dist/esm/http/index.d.mts","default":"./dist/esm/http/index.mjs"},"require":{"types":"./dist/cjs/http/index.d.ts","default":"./dist/cjs/http/index.js"}},"./server":{"import":{"types":"./dist/esm/server/index.d.mts","default":"./dist/esm/server/index.mjs"},"require":{"types":"./dist/cjs/server/index.d.ts","default":"./dist/cjs/server/index.js"}},"./types":{"import":{"types":"./dist/esm/types/index.d.mts","default":"./dist/esm/types/index.mjs"},"require":{"types":"./dist/cjs/types/index.d.ts","default":"./dist/cjs/types/index.js"}},"./types/v1":{"import":{"types":"./dist/esm/types/v1/index.d.mts","default":"./dist/esm/types/v1/index.mjs"},"require":{"types":"./dist/cjs/types/v1/index.d.ts","default":"./dist/cjs/types/v1/index.js"}},"./utils":{"import":{"types":"./dist/esm/utils/index.d.mts","default":"./dist/esm/utils/index.mjs"},"require":{"types":"./dist/cjs/utils/index.d.ts","default":"./dist/cjs/utils/index.js"}}},"publishConfig":{"access":"public"},"scripts":{"start":"tsx --env-file=.env index.ts","build":"tsup","test":"vitest run","test:watch":"vitest","test:integration":"vitest run test/integrations","watch":"tsc --watch","format":"prettier -c .prettierrc --write \"**/*.{ts,js,cjs,json,md}\"","format:check":"prettier -c .prettierrc --check \"**/*.{ts,js,cjs,json,md}\"","lint":"eslint . --ext .ts --fix","lint:check":"eslint . --ext .ts"},"_id":"@aeon-ai-pay/core@2.1.2","bugs":{"url":"https://github.com/coinbase/x402/issues"},"homepage":"https://github.com/coinbase/x402#readme","_integrity":"sha512-+X/KqRxvwzPKDYPtl9ZU1jkXan4X/37010ZIInsOczL8FwP49wfLFSlnf7HVjVdBqSr8ugLXVwHTsZnKGh6pNQ==","_resolved":"/private/var/folders/rr/hyts0bs54zn73fgjjlld0tvm0000gn/T/62c49c7052073e472d5bc6c46773c198/aeon-ai-pay-core-2.1.2.tgz","_from":"file:aeon-ai-pay-core-2.1.2.tgz","_nodeVersion":"25.8.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-+X/KqRxvwzPKDYPtl9ZU1jkXan4X/37010ZIInsOczL8FwP49wfLFSlnf7HVjVdBqSr8ugLXVwHTsZnKGh6pNQ==","shasum":"5ad4d085a9e7e93ba8c67ac91c4114cfa43b3866","tarball":"https://registry.npmjs.org/@aeon-ai-pay/core/-/core-2.1.2.tgz","fileCount":62,"unpackedSize":655158,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCOZZk6xadl22AarFlJyQzIznuyBi7L7tVfV5z9tF6Y7AIhANo3crfIpKdFkkly+FRXhlWZGd4GpeklD4/iKmeOtr6T"}]},"_npmUser":{"name":"aeon_project","email":"code@alchemypay.org"},"directories":{},"maintainers":[{"name":"aeon_project","email":"code@alchemypay.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_2.1.2_1777000578000_0.821204771776864"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-02T02:18:28.301Z","modified":"2026-04-24T03:16:18.338Z","2.1.0":"2026-04-02T02:18:28.639Z","2.1.2":"2026-04-24T03:16:18.205Z"},"bugs":{"url":"https://github.com/coinbase/x402/issues"},"author":{"name":"Coinbase Inc."},"license":"Apache-2.0","homepage":"https://github.com/coinbase/x402#readme","keywords":[],"repository":{"type":"git","url":"git+https://github.com/coinbase/x402.git"},"description":"x402 Payment Protocol","maintainers":[{"name":"aeon_project","email":"code@alchemypay.org"}],"readme":"# @x402/core\n\nCore implementation of the x402 payment protocol for TypeScript/JavaScript applications. Provides transport-agnostic client, server and facilitator components.\n\n## Installation\n\n```bash\npnpm install @x402/core\n```\n\n## Quick Start\n\n### Client Usage\n\n```typescript\nimport { x402Client } from '@x402/core/client';\nimport { x402HTTPClient } from '@x402/core/http';\nimport { ExactEvmScheme } from '@x402/evm/exact/client';\n\n// Create core client and register payment schemes\nconst coreClient = new x402Client()\n  .register('eip155:*', new ExactEvmScheme(evmSigner));\n\n// Wrap with HTTP client for header encoding/decoding\nconst client = new x402HTTPClient(coreClient);\n\n// Make a request\nconst response = await fetch('https://api.example.com/protected');\n\nif (response.status === 402) {\n  // Extract payment requirements from response\n  const paymentRequired = client.getPaymentRequiredResponse(\n    (name) => response.headers.get(name),\n    await response.json()\n  );\n  \n  // Create and send payment\n  const paymentPayload = await client.createPaymentPayload(paymentRequired);\n  \n  const paidResponse = await fetch('https://api.example.com/protected', {\n    headers: client.encodePaymentSignatureHeader(paymentPayload),\n  });\n  \n  // Get settlement confirmation\n  const settlement = client.getPaymentSettleResponse(\n    (name) => paidResponse.headers.get(name)\n  );\n  console.log('Transaction:', settlement.transaction);\n}\n```\n\n### Server Usage\n\n```typescript\nimport { x402ResourceServer, HTTPFacilitatorClient } from '@x402/core/server';\nimport { x402HTTPResourceServer } from '@x402/core/http';\nimport { ExactEvmScheme } from '@x402/evm/exact/server';\n\n// Connect to facilitator\nconst facilitatorClient = new HTTPFacilitatorClient({\n  url: 'https://x402.org/facilitator',\n});\n\n// Create resource server with payment schemes\nconst resourceServer = new x402ResourceServer(facilitatorClient)\n  .register('eip155:*', new ExactEvmScheme());\n\n// Initialize (fetches supported kinds from facilitator)\nawait resourceServer.initialize();\n\n// Configure routes with payment requirements\nconst routes = {\n  'GET /api/data': {\n    accepts: {\n      scheme: 'exact',\n      network: 'eip155:8453',\n      payTo: '0xYourAddress',\n      price: '$0.01',\n    },\n    description: 'Premium data access',\n    mimeType: 'application/json',\n  },\n};\n\n// Create HTTP server wrapper\nconst httpServer = new x402HTTPResourceServer(resourceServer, routes);\n```\n\n### Facilitator Usage\n\n```typescript\nimport { x402Facilitator } from '@x402/core/facilitator';\nimport { registerExactEvmScheme } from '@x402/evm/exact/facilitator';\n\nconst facilitator = new x402Facilitator();\n\n// Register scheme implementations using helper\nregisterExactEvmScheme(facilitator, {\n  signer: evmSigner,\n  networks: 'eip155:84532',\n});\n\n// Verify payment\nconst verifyResult = await facilitator.verify(paymentPayload, paymentRequirements);\n\nif (verifyResult.isValid) {\n  // Settle payment\n  const settleResult = await facilitator.settle(paymentPayload, paymentRequirements);\n  console.log('Transaction:', settleResult.transaction);\n}\n```\n\n## Route Configuration\n\nRoutes use the `accepts` field to define payment options:\n\n```typescript\nconst routes = {\n  // Single payment option\n  'GET /api/data': {\n    accepts: {\n      scheme: 'exact',\n      network: 'eip155:8453',\n      payTo: '0xAddress',\n      price: '$0.01',\n    },\n    description: 'Data endpoint',\n    mimeType: 'application/json',\n  },\n  \n  // Multiple payment options (EVM + SVM)\n  'POST /api/*': {\n    accepts: [\n      {\n        scheme: 'exact',\n        network: 'eip155:8453',\n        payTo: evmAddress,\n        price: '$0.05',\n      },\n      {\n        scheme: 'exact',\n        network: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n        payTo: svmAddress,\n        price: '$0.05',\n      },\n    ],\n  },\n};\n```\n\n## Client Configuration\n\nUse `fromConfig()` for declarative setup:\n\n```typescript\nconst client = x402Client.fromConfig({\n  schemes: [\n    { network: 'eip155:8453', client: new ExactEvmScheme(evmSigner) },\n    { network: 'solana:mainnet', client: new ExactSvmScheme(svmSigner) },\n  ],\n  policies: [\n    // Filter by max price\n    (version, reqs) => reqs.filter(r => BigInt(r.amount) < BigInt('1000000')),\n  ],\n});\n```\n\n## Lifecycle Hooks\n\n### Client Hooks\n\n```typescript\nclient\n  .onBeforePaymentCreation(async (ctx) => {\n    console.log('Creating payment for:', ctx.selectedRequirements.network);\n    // Return { abort: true, reason: '...' } to cancel\n  })\n  .onAfterPaymentCreation(async (ctx) => {\n    console.log('Payment created:', ctx.paymentPayload);\n  })\n  .onPaymentCreationFailure(async (ctx) => {\n    console.error('Payment failed:', ctx.error);\n    // Return { recovered: true, payload: ... } to recover\n  });\n```\n\n### Server Hooks\n\n```typescript\nresourceServer\n  .onBeforeVerify(async (ctx) => { /* ... */ })\n  .onAfterVerify(async (ctx) => { /* ... */ })\n  .onBeforeSettle(async (ctx) => { /* ... */ })\n  .onAfterSettle(async (ctx) => { /* ... */ });\n```\n\n### Facilitator Hooks\n\n```typescript\nfacilitator\n  .onBeforeVerify(async (ctx) => { console.log('Before verify', ctx); })\n  .onAfterVerify(async (ctx) => { console.log('After verify', ctx); })\n  .onVerifyFailure(async (ctx) => { console.log('Verify failure', ctx); })\n  .onBeforeSettle(async (ctx) => { console.log('Before settle', ctx); })\n  .onAfterSettle(async (ctx) => { console.log('After settle', ctx); })\n  .onSettleFailure(async (ctx) => { console.log('Settle failure', ctx); });\n```\n\n## HTTP Headers\n\n### v2 Protocol (Current)\n\n| Header | Description |\n|--------|-------------|\n| `PAYMENT-SIGNATURE` | Base64-encoded payment payload |\n| `PAYMENT-REQUIRED` | Base64-encoded payment requirements |\n| `PAYMENT-RESPONSE` | Base64-encoded settlement response |\n\n### v1 Protocol (Legacy)\n\n| Header | Description |\n|--------|-------------|\n| `X-PAYMENT` | Base64-encoded payment payload |\n| `X-PAYMENT-RESPONSE` | Base64-encoded settlement response |\n\n## Network Pattern Matching\n\nRegister handlers for network families using wildcards:\n\n```typescript\n// All EVM networks\nserver.register('eip155:*', new ExactEvmScheme());\n\n// Specific network takes precedence\nserver.register('eip155:8453', new ExactEvmScheme());\n```\n\n## Types\n\n```typescript\ntype Network = `${string}:${string}`; // e.g., \"eip155:8453\"\n\ntype PaymentRequirements = {\n  scheme: string;\n  network: Network;\n  asset: string;\n  amount: string;\n  payTo: string;\n  maxTimeoutSeconds: number;\n  extra: Record<string, unknown>;\n};\n\ntype PaymentPayload = {\n  x402Version: number;\n  resource: ResourceInfo;\n  accepted: PaymentRequirements;\n  payload: Record<string, unknown>;\n  extensions?: Record<string, unknown>;\n};\n\ntype PaymentRequired = {\n  x402Version: number;\n  error?: string;\n  resource: ResourceInfo;\n  accepts: PaymentRequirements[];\n  extensions?: Record<string, unknown>;\n};\n```\n\n## Framework Integration\n\nFor framework-specific middleware, use:\n\n- `@x402/express` - Express.js middleware\n- `@x402/hono` - Hono middleware  \n- `@x402/next` - Next.js integration\n- `@x402/axios` - Axios interceptor\n- `@x402/fetch` - Fetch wrapper\n\n## Implementation Packages\n\nFor blockchain-specific implementations:\n\n- `@x402/evm` - Ethereum and EVM-compatible chains\n- `@x402/svm` - Solana blockchain\n\n## Examples\n\nSee the [examples directory](https://github.com/coinbase/x402/tree/main/examples/typescript) for complete examples.\n\n## Contributing\n\nContributions welcome! See [Contributing Guide](https://github.com/coinbase/x402/blob/main/CONTRIBUTING.md).\n","readmeFilename":"README.md"}