{"_id":"@ahnafalfariza/jsonrpc-client","_rev":"11-29dfb2839a57dbbbd77b76b73bb1e841","name":"@ahnafalfariza/jsonrpc-client","dist-tags":{"latest":"0.3.1"},"versions":{"0.1.0":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.1.0","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.1.0","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"e0ffbe0f085153191ba6ead59f20c8f2753518a5","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.1.0.tgz","fileCount":13,"integrity":"sha512-aLAQCAUfBGgL1FepNvmEhMA06QtUNrWuJ15xc7vwYx/56cyuBLWEdwNfNTCYV2qu71uGAZbCZ9NOQOTFo3QnKQ==","signatures":[{"sig":"MEUCIQCQAZzqvUdWLmTL7K1rd/SneW8sIttMF2R8PHzNZjMv+wIgcv16qclnxA/hw+P2TKGg/fxy/kWCpBEXx4U7Gb6/x20=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45572},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"e13e695e1cd22f116738b808fa667526bcb6728c","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"*"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.1.0_1753336098587_0.30614846611835667","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.2.0","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.2.0","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"58ea494c3b226c366f4d7c034e11f61b5cf52fe3","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.2.0.tgz","fileCount":13,"integrity":"sha512-tzbxUOghUwDX+jhsu5LQTxdm0rSHMZuU8eiR9Gqm9uUF4pX2jXhLwAXWnad45e9A8zJrzTVVhv7ld4Nz/lYY9g==","signatures":[{"sig":"MEYCIQDp1DH3Sk/fShQSooUPRESRSfAfbJLPm5JeC/VzW6ehewIhALv8TwDZ8D93dGM3FvWp1VMceyChnlogMOhJGxkpYKLm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":61331},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"ffd4f6ec4104ce719379f97faf865b725be58219","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"0.2.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.2.0_1753413374686_0.4664988563988268","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.2.1","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.2.1","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"ad1f2306bcffc52c7186ba0f70c075feee6e8f0d","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.2.1.tgz","fileCount":8,"integrity":"sha512-ElQydTl/1VcULQ4rt9fJmRGrRuG+syfIVIYk6YnPGajrGh/NxtE+RYFdCjR1YcoR94v+z4+rOXWKiDPmx6d7EQ==","signatures":[{"sig":"MEUCIAMI7NDQ+yVgJj8rXjxyYPLtoSApcEn0Qc3M5CwMACKuAiEAxJ0u56N14zm/Je7R+eiq5s1i4+/4YQZb6Pq/GeNj04Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"ffd4f6ec4104ce719379f97faf865b725be58219","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"0.2.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.2.1_1753416149193_0.40815948814163017","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.2.2","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.2.2","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"77d1aa35c5ec232d98030253cda942877d770ea0","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.2.2.tgz","fileCount":8,"integrity":"sha512-Z/5dK7CspYYxWfjYqQf0XXL0kJ9P2wFoJ9g1FPhepv4uVjP0dHJ2XoNRFn0dvs6ytLeFoW+m3YH+MCfeSjEyoQ==","signatures":[{"sig":"MEYCIQC5xziEYleDGZ3uVdMmDuKq2SCKkGXt7faGYMebEz0MwQIhAPAF+M950EBD8u+g4qVhbMKdQNo4j+oFJ700p0c4z1io","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50479},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"ffd4f6ec4104ce719379f97faf865b725be58219","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"0.2.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.2.2_1753416436356_0.036689736063835854","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.2.3","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.2.3","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"19629eb37d73c518212b6ddb6bd00f722f51b592","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.2.3.tgz","fileCount":6,"integrity":"sha512-2OppJFUjRg6kypTenoT67/WMQhPDYn9C/ynyXuc8E3/JR+kGzYi8cJGiPlicJtOKILEQykQMcj2ihyTv/eZ6vA==","signatures":[{"sig":"MEUCIAZ9spn2uXilt4kTDGP2u636B13DNBP9RAF11FMqzMxzAiEA0n/+37gDzkDY2sEqaq+ONf9B9UkbaDOEOKJPqNhCEh4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20756},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"d70ae28e245ec0aaac68a9d2f96934828fac2d34","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"0.2.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.2.3_1753521394022_0.4797707735465244","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.2.4","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.2.4","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"3632eb703c48a3a3f6c89aed26396832fdbd0775","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.2.4.tgz","fileCount":6,"integrity":"sha512-sroWlyIZFe+HrvfFVWe9kt5waXfff+jnGjDQ4sMbhQFpruEuRTypsW/mjFxIm2ykEDFEHJYPOCa3rRrQHs3AIA==","signatures":[{"sig":"MEQCIBPsuUSlpyqycUKdhkviatemrg/ikn5LqlmmFxOuTbwcAiAOP2q5tePcaM8/KNjFePhBpfnLhWAe/6KS+onx3hANsw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":24018},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"169ed5bf2d19149680dbff89469b9eddcfd3824e","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"0.2.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.2.4_1754116195300_0.28709462171329814","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.3.0","license":"MIT","_id":"@ahnafalfariza/jsonrpc-client@0.3.0","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"f2a46bd0a5d7cdc077b3fdbe8565f1521d2a4320","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.3.0.tgz","fileCount":6,"integrity":"sha512-4ZTmT5UmTGXyUTu9UFJeVqe2zpvoPhdxuDeRVm4l9IgIqqsn/hMCNiY+WGYLSmL65zajzvJu1919YJV+O0zAUQ==","signatures":[{"sig":"MEUCIQCFMtK2Y4WXH+WClHNJaB+m5JK3UeLXAQDMTmUvIK9a/gIgOR4xDkXJqLdZa5VgD46hqt5+769iJoaKP7+O2wHwGl0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":26971},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"7faa1cd373720e8c25ed30c855caa0e0286169bd","scripts":{"dev":"tsup --watch","test":"jest","build":"tsup","clean":"rm -rf dist","example":"tsx src/example.ts","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"Type-safe JSON-RPC client for NEAR Protocol.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"zod":"^4.0.5","@ahnafalfariza/jsonrpc-types":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.3","jest":"^30.0.5","tsup":"^8.0.1","ts-jest":"^29.4.0","typescript":"^5.3.3","@types/jest":"^30.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-client_0.3.0_1754191494034_0.6715076781050422","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ahnafalfariza/jsonrpc-client","version":"0.3.1","license":"MIT","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","dev":"tsup --watch","clean":"rm -rf dist","check-types":"tsc --noEmit","example":"tsx src/example.ts","test":"jest"},"dependencies":{"@ahnafalfariza/jsonrpc-types":"0.3.1","zod":"^4.0.5"},"devDependencies":{"@types/jest":"^30.0.0","jest":"^30.0.5","ts-jest":"^29.4.0","tsup":"^8.0.1","tsx":"^4.20.3","typescript":"^5.3.3"},"publishConfig":{"access":"public"},"_id":"@ahnafalfariza/jsonrpc-client@0.3.1","gitHead":"5ed7ba15958550b6dae5b7e87f4d5bb9d1ea728f","description":"Type-safe JSON-RPC client for NEAR Protocol.","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-UQgT38XwpB6xwvCfS4yXhGDf1YaJVzevKRvQbcMn6zPJVGZXkvGDXzIQ1LIFcOTAt1wvCphqfw6VFLL6vOqQJA==","shasum":"8dc5e7ab2b6248af3fbf394e6ee9c3bb8e219cae","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-client/-/jsonrpc-client-0.3.1.tgz","fileCount":6,"unpackedSize":26824,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCe2LhjpuY97TQuhm4W9xy8OaEdZyCyzryTkaJM3PXF+QIgfYVCOKd3Y4HISD/VPPrdNavx1wl3VSx626nKefx6VoU="}]},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"directories":{},"maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/jsonrpc-client_0.3.1_1754221833449_0.7597392297907783"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-24T05:48:18.507Z","modified":"2025-08-03T11:50:33.866Z","1.0.0":"2025-07-22T15:49:12.744Z","0.1.0":"2025-07-24T05:48:18.806Z","0.2.0":"2025-07-25T03:16:14.865Z","0.2.1":"2025-07-25T04:02:29.373Z","0.2.2":"2025-07-25T04:07:16.538Z","0.2.3":"2025-07-26T09:16:34.230Z","0.2.4":"2025-08-02T06:29:55.487Z","0.3.0":"2025-08-03T03:24:54.233Z","0.3.1":"2025-08-03T11:50:33.647Z"},"license":"MIT","description":"Type-safe JSON-RPC client for NEAR Protocol.","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"readme":"# @ahnafalfariza/jsonrpc-client\n\nType-safe JSON-RPC client for NEAR Protocol.\n\n## Installation\n\n```bash\nnpm install @ahnafalfariza/jsonrpc-client\n```\n\n## Quick Start\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  createClientWithMethods,\n} from \"@ahnafalfariza/jsonrpc-client\";\nimport { block, gasPrice, query } from \"@ahnafalfariza/jsonrpc-types/methods\";\n\nconst transporter = jsonRpcTransporter({\n  endpoint: \"https://rpc.testnet.near.org\",\n});\nconst client = createClientWithMethods({\n  transporter,\n  methods: { block, gasPrice, query }, // Only these methods are available\n  runtimeValidation: { request: true, response: true, error: false },\n});\n\nconst { result: blockResponse, blockError } = await client.block({\n  accountId: \"example.testnet\",\n  finality: \"final\",\n});\n\nif (blockError) {\n  console.error(\"Error fetching block:\", blockError);\n  return;\n}\nconsole.log(blockResult);\n\nconst viewAccountResult = await client.query({\n  requestType: \"view_account\",\n  finality: \"final\",\n  accountId: \"example.testnet\",\n});\nconsole.log(viewAccountResult);\n\nconst gasPriceResult = await client.gasPrice({});\nconsole.log(gasPriceResult);\n```\n\n## API\n\n### `jsonRpcTransporter(config)`\n\nCreates a transporter function for making JSON-RPC requests to NEAR Protocol.\n\n#### Parameters\n\n- `config.endpoint: string | NearRpcEndpoint` - The RPC endpoint URL or predefined endpoint\n\n#### Example\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  NearRpcEndpoint,\n} from \"@ahnafalfariza/jsonrpc-client\";\n\n// Using predefined endpoints\nconst transporter = jsonRpcTransporter({\n  endpoint: NearRpcEndpoint.Mainnet, // or Testnet, Betanet, Localnet\n});\n\n// Using custom endpoint\nconst customTransporter = jsonRpcTransporter({\n  endpoint: \"https://my-custom-rpc.com\",\n});\n```\n\n### `createClient(config)`\n\nCreates a type-safe JSON-RPC client with all available NEAR Protocol methods.\n\n#### Parameters\n\n- `config.transporter: Transporter` - The transport layer for making JSON-RPC requests\n- `config.runtimeValidation?: boolean | RuntimeValidationConfig` - Optional configuration to enable runtime validation. Can be `true` for all validation or an object for granular control\n\n#### Example\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  createClient,\n} from \"@ahnafalfariza/jsonrpc-client\";\n\nconst transporter = jsonRpcTransporter({\n  endpoint: \"https://rpc.testnet.near.org\",\n});\n\n// Basic client\nconst client = createClient({ transporter });\n\n// Client with runtime validation (all types)\nconst validatedClient = createClient({\n  transporter,\n  runtimeValidation: true,\n});\n\n// Client with granular validation control\nconst granularClient = createClient({\n  transporter,\n  runtimeValidation: { request: true, response: true, error: false },\n});\n```\n\n### `createClientWithMethods(config)`\n\nCreates a type-safe JSON-RPC client with only specific methods. This is useful for reducing bundle size and creating more focused clients.\n\n#### Parameters\n\n- `config.transporter: Transporter` - The transport layer for making JSON-RPC requests\n- `config.methods: object` - Object containing specific methods from `@ahnafalfariza/jsonrpc-types/methods`\n- `config.runtimeValidation?: boolean | RuntimeValidationConfig` - Optional configuration to enable runtime validation. Can be `true` for all validation or an object for granular control\n\n#### Example\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  createClientWithMethods,\n} from \"@ahnafalfariza/jsonrpc-client\";\nimport { block, status, query } from \"@ahnafalfariza/jsonrpc-types/methods\";\n\nconst transporter = jsonRpcTransporter({\n  endpoint: \"https://rpc.testnet.near.org\",\n});\n\n// Client with only specific methods and full validation\nconst selectiveClient = createClientWithMethods({\n  transporter,\n  methods: { block, status, query },\n  runtimeValidation: true,\n});\n\n// Client with selective methods and granular validation\nconst granularSelectiveClient = createClientWithMethods({\n  transporter,\n  methods: { block, status, query },\n  runtimeValidation: { request: true, response: false, error: true },\n});\n\n// Only these methods are available (TypeScript enforced):\nconst blockData = await selectiveClient.block({ finality: \"final\" });\nconst statusData = await selectiveClient.status(null);\n// selectiveClient.gasPrice() // ❌ TypeScript error - method not included\n\n// Use cases:\n// 1. Monitoring client (read-only operations)\nconst monitoringClient = createClientWithMethods({\n  transporter,\n  methods: { status, block, gasPrice, query },\n});\n\n// 2. Transaction client (transaction operations)\nimport {\n  broadcastTxAsync,\n  broadcastTxCommit,\n  tx,\n} from \"@ahnafalfariza/jsonrpc-types/methods\";\nconst txClient = createClientWithMethods({\n  transporter,\n  methods: { broadcastTxAsync, broadcastTxCommit, tx },\n  runtimeValidation: true,\n});\n```\n\n## Discriminated Methods\n\nThe client now supports discriminated methods that provide better type safety and developer experience for specific operations. These methods automatically set the discriminator properties (like `requestType`) for you.\n\n### Query Methods\n\nInstead of using the generic `query` method with a `requestType` parameter, you can now use specific methods:\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  createClient,\n} from \"@ahnafalfariza/jsonrpc-client\";\nimport { DiscriminateRpcQueryResponse } from \"@ahnafalfariza/jsonrpc-types\";\n\nconst transporter = jsonRpcTransporter({\n  endpoint: \"https://rpc.testnet.near.org\",\n});\nconst client = createClient({ transporter });\n\n// Use specific discriminated methods\nconst { result, error } = await client.queryViewAccount({\n  accountId: \"example.testnet\",\n  finality: \"final\",\n  // requestType: \"view_account\" is automatically set\n});\n\n// Or use generic method\nawait client.query({\n  requestType: \"view_account\",\n  accountId: \"example.testnet\",\n  finality: \"final\",\n});\n```\n\n### Changes Methods\n\nSimilar discriminated methods are available for state changes:\n\n```typescript\n// Specific change type methods\nawait client.changesAccountChanges({\n  accountIds: [\"example.testnet\"],\n  finality: \"final\",\n  // changesType: \"account_changes\" is automatically set\n});\n\n// Or use generic changes method\nawait client.changes({\n  accountIds: [\"example.testnet\"],\n  finality: \"final\",\n  changesType: \"account_changes\",\n});\n```\n\n### Discriminator Helper Functions\n\nUse discriminator helpers to safely handle union response types:\n\n```typescript\nimport {\n  DiscriminateRpcQueryResponse,\n  DiscriminateRpcTransactionResponse,\n} from \"@ahnafalfariza/jsonrpc-types\";\n\n// For query responses\nconst { result } = await client.queryViewAccount({\n  accountId: \"example.testnet\",\n});\n\nconst discriminated = DiscriminateRpcQueryResponse(result);\nif (discriminated.AccountView) {\n  // TypeScript knows this is AccountView type\n  console.log(discriminated.AccountView.amount);\n} else if (discriminated.CallResult) {\n  // TypeScript knows this is CallResult type\n  console.log(discriminated.CallResult.result);\n}\n```\n\n#### Runtime Validation\n\nThe client supports runtime validation using Zod schemas to validate requests, responses, and errors. You can configure validation in two ways:\n\n##### Boolean Configuration (Simple)\n\nSet `runtimeValidation: true` to enable all validation types:\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  createClient,\n} from \"@ahnafalfariza/jsonrpc-client\";\n\nconst client = createClient({\n  transporter: jsonRpcTransporter({ endpoint: \"https://rpc.testnet.near.org\" }),\n  runtimeValidation: true, // Enables request, response, and error validation\n});\n```\n\n##### Object Configuration (Granular Control)\n\nUse an object to control which validation types are enabled:\n\n```typescript\nimport {\n  jsonRpcTransporter,\n  createClient,\n} from \"@ahnafalfariza/jsonrpc-client\";\n\n// Only validate requests (catch invalid input before sending)\nconst clientRequestOnly = createClient({\n  transporter: jsonRpcTransporter({ endpoint: \"https://rpc.testnet.near.org\" }),\n  runtimeValidation: { request: true, response: false, error: false },\n});\n```\n\n##### RuntimeValidationConfig Interface\n\n```typescript\ninterface RuntimeValidationConfig {\n  /** Enable request validation */\n  request: boolean;\n  /** Enable response validation */\n  response: boolean;\n  /** Enable error validation */\n  error: boolean;\n}\n```\n\n##### Using Validation\n\nWhen validation is enabled and fails, the client returns validation errors:\n\n```typescript\nconst result = await client.query({\n  requestType: \"view_account\",\n  finality: \"final\",\n  accountId: \"example.testnet\",\n});\n\n// Check for validation errors\nif (\"error\" in result && \"validation\" in result.error) {\n  console.error(\"Validation error:\", result.error.validation);\n  return;\n}\n\n// Safe to use the result\nconsole.log(result.result);\n```\n\n#### Validation Error Format\n\nWhen runtime validation is enabled and validation fails, the client returns an error object with the following structure:\n\n```typescript\n{\n  error: {\n    validation: {\n      runtimeValidation: \"request\" | \"response\" | \"error\",\n      error: // Zod validation error details\n    }\n  }\n}\n```\n\nFor a comprehensive example of how to handle different types of validation errors and access specific error properties, see the [accessing-error.ts example](../../examples/accessing-error.ts).\n\n## Examples\n\nSee the [examples directory](../../examples) for more usage patterns:\n\n- [View Account](../../examples/view-account.ts) - Traditional query method usage\n- [Query View Account](../../examples/query-view-account.ts) - Discriminated method usage\n- [Discriminated Helper](../../examples/discriminated-helper.ts) - Using discriminator helpers\n- [Transactions](../../examples/transactions.ts)\n- [Gas Price](../../examples/gas.ts)\n- [Selective Methods](../../examples/selective-methods.ts)\n\n## Related\n\n- [`@ahnafalfariza/jsonrpc-types`](../jsonrpc-types) - TypeScript types\n- [NEAR JSON-RPC Docs](https://docs.near.org/api/rpc/introduction)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}