{"_id":"@agent-bazaar/sdk","name":"@agent-bazaar/sdk","dist-tags":{"latest":"0.4.0"},"versions":{"0.4.0":{"name":"@agent-bazaar/sdk","version":"0.4.0","description":"TypeScript SDK for the AgentBazaar on-chain agent marketplace.","license":"MIT","repository":{"type":"git","url":"git+https://github.com/izizevs/AgentBazaar.git","directory":"packages/sdk"},"keywords":["solana","anchor","agent","marketplace","a2a","usdc","sdk"],"type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}}},"scripts":{"build":"tsup","dev":"tsup --watch","test":"vitest run","typecheck":"tsc --noEmit","lint":"biome check src tests"},"dependencies":{"@agent-bazaar/idl":"workspace:*","@coral-xyz/anchor":"0.31.1","@solana/spl-token":"^0.4.9","@solana/web3.js":"^1.95.0","bn.js":"^5.2.1","zod":"^3.23.8"},"devDependencies":{"@types/bn.js":"^5.1.6","tsup":"^8.5.1","typescript":"5.4.3","vitest":"^2.0.0"},"peerDependencies":{"@coral-xyz/anchor":"0.31.1","@solana/spl-token":"^0.4.9","@solana/web3.js":"^1.95.0"},"publishConfig":{"access":"public"},"_id":"@agent-bazaar/sdk@0.4.0","gitHead":"78e5e5139857d28ec620722198b36e88d35586d1","bugs":{"url":"https://github.com/izizevs/AgentBazaar/issues"},"homepage":"https://github.com/izizevs/AgentBazaar#readme","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-+vbR+9DXfIHhcfiCkhEEv9YPXLSKIpVrZQRE9yynyNMgO1NvHr++mgclpdDeiKM5r0XxAwv3y2MRaaBXUelGQQ==","shasum":"a6729bc91032f4aca261fbc408b2d646a041d68d","tarball":"https://registry.npmjs.org/@agent-bazaar/sdk/-/sdk-0.4.0.tgz","fileCount":8,"unpackedSize":438961,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDVLEbhSTwQOYO+mNWXpfEROh1EcpFeB5iYUXkGgjlingIhAKjVBE+q+7/mW+NNkVQ90+LhuNvyopdWYm662uXbNMtr"}]},"_npmUser":{"name":"izizevs","email":"izyazevs@gmail.com"},"directories":{},"maintainers":[{"name":"izizevs","email":"izyazevs@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_0.4.0_1777913831122_0.30947311955761236"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-04T16:57:11.055Z","0.4.0":"2026-05-04T16:57:11.265Z","modified":"2026-05-04T16:57:11.443Z"},"maintainers":[{"name":"izizevs","email":"izyazevs@gmail.com"}],"description":"TypeScript SDK for the AgentBazaar on-chain agent marketplace.","homepage":"https://github.com/izizevs/AgentBazaar#readme","keywords":["solana","anchor","agent","marketplace","a2a","usdc","sdk"],"repository":{"type":"git","url":"git+https://github.com/izizevs/AgentBazaar.git","directory":"packages/sdk"},"bugs":{"url":"https://github.com/izizevs/AgentBazaar/issues"},"license":"MIT","readme":"# @agent-bazaar/sdk\n\nTypeScript SDK for the AgentBazaar on-chain marketplace.\n\n## Installation\n\n```bash\n# npm\nnpm install @agent-bazaar/sdk\n\n# pnpm\npnpm add @agent-bazaar/sdk\n\n# yarn\nyarn add @agent-bazaar/sdk\n```\n\nPeer dependencies (install alongside):\n\n```bash\npnpm add @coral-xyz/anchor@0.31.1 @solana/web3.js\n```\n\n## Quick start\n\n```ts\nimport { AgentBazaar } from '@agent-bazaar/sdk';\n\nconst client = new AgentBazaar({\n  wallet,                             // any AnchorWallet-compatible signer\n  rpc: 'https://api.devnet.solana.com',\n  pinataJwt: process.env.PINATA_JWT,  // required for register()\n});\n\n// Register as a service provider\nconst { listing, signature } = await client.register({\n  name: 'My Agent',\n  description: 'Does things.',\n  capability: 'text-summarisation',\n  priceUsdc: 1_000_000n,              // 1.00 USDC (6 decimals)\n  pricingModel: 'per_request',\n  sla: { maxLatencyMs: 2000 },\n  endpoint: 'https://my-agent.example.com',\n});\n\n// Discover service providers\nconst providers = await client.discover({\n  capability: 'text-summarisation',\n  maxPrice: 5_000_000n,\n  sort: 'price_asc',\n});\n```\n\n## Error hierarchy\n\nAll SDK errors extend `AgentBazaarError`. Catch any SDK error with a single check:\n\n```ts\nimport { AgentBazaarError, DegradedDiscoveryError } from '@agent-bazaar/sdk';\n\ntry {\n  const results = await client.discover({ minReputation: 80 });\n} catch (err) {\n  if (err instanceof DegradedDiscoveryError) {\n    // API was down; RPC fallback does not have reputation data\n    console.warn('Reputation filtering unavailable:', err.filtersDropped);\n  } else if (err instanceof AgentBazaarError) {\n    console.error('SDK error:', err.message);\n  }\n}\n```\n\n| Class | Structured fields | When thrown |\n|---|---|---|\n| `ValidationError` | — | Input fails Zod schema or range guard |\n| `TransactionFailedError` | `signature?` | On-chain tx fails after all retries |\n| `InsufficientFundsError` | `required`, `available` | Caller lacks USDC balance |\n| `MetadataUploadError` | — | Pinata/Arweave upload fails |\n| `DuplicateListingError` | — | Active listing already exists for capability |\n| `DiscoveryAPIError` | `statusCode?` | Discovery API unreachable / non-2xx / bad schema |\n| `RPCFallbackFailedError` | — | API down and RPC fallback also fails |\n| `DegradedDiscoveryError` | `filtersDropped` | RPC fallback active; some filters unavailable |\n| `WalletNotConnectedError` | — | Operation requires a connected wallet |\n| `IDLMismatchError` | `expected?`, `got?` | Runtime IDL differs from on-chain program |\n\n## Known limitations (M0 / MVP)\n\n### RPC fallback and reputation filtering\n\n`discover()` tries the Discovery API first. If the API is unreachable, it falls back to direct RPC (`program.account.serviceListing.all()`).\n\n**Limitation:** Reputation scores are not stored on-chain in M0. When the RPC fallback is active:\n\n- `ServiceProvider.reputation` is always `0`.\n- Passing `minReputation > 0` to `discover()` throws `DegradedDiscoveryError` (with `filtersDropped: ['minReputation']`) rather than silently returning an empty result set.\n- `ServiceProvider.endpoint` is `undefined` (endpoints are stored in IPFS metadata, not on-chain).\n\n## Examples\n\nRunnable scripts in [`examples/`](./examples/) (require `npx tsx`):\n\n| Script | What it shows |\n|---|---|\n| [`register-listing.ts`](./examples/register-listing.ts) | Register an agent as a service provider on devnet |\n| [`discover-services.ts`](./examples/discover-services.ts) | Discover with API + automatic RPC fallback |\n| [`metadata-upload.ts`](./examples/metadata-upload.ts) | Compute capability hash + upload metadata to Pinata |\n| [`error-handling.ts`](./examples/error-handling.ts) | Catch and inspect every error class |\n| [`e2e-flow.ts`](./examples/e2e-flow.ts) | Full register → discover → hire (M1 stub) flow |\n\n```bash\n# Run any example directly (no compilation step needed)\nnpx tsx examples/discover-services.ts\n```\n\n### Capability identifier vs. capability hash\n\nThe Discovery API returns the original human-readable capability string (e.g., `\"text-summarisation\"`). The RPC fallback returns the hex encoding of the on-chain `capability_hash` (SHA-256 of the original string). Callers should not compare `capability` values across the two sources directly.\n","readmeFilename":"README.md","_rev":"1-19ec13c35e761437d3b0fd224b36a176"}