{"_id":"@ahnafalfariza/jsonrpc-react-query","_rev":"3-bd18405eae13bc33aa62fa4a7a9e79d0","name":"@ahnafalfariza/jsonrpc-react-query","dist-tags":{"latest":"0.3.1"},"versions":{"0.2.4":{"name":"@ahnafalfariza/jsonrpc-react-query","version":"0.2.4","license":"MIT","_id":"@ahnafalfariza/jsonrpc-react-query@0.2.4","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"ea08fa8b7d3bf5b7ce46a34e015f964ae2171eaa","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-react-query/-/jsonrpc-react-query-0.2.4.tgz","fileCount":6,"integrity":"sha512-POVF//pD1sJnEfGipze9DX1Zk/l/M2zNSK2XHSEpXAJHB525jBe2PrcDwelALffaXGFag6DOwPZ8RsaMYN4n0A==","signatures":[{"sig":"MEUCIQDmlQ20kAl6WQzICMnVW1YAu4un1Tzrui2c3BPkkNk7VwIgX/Ehz37Ga0F7S+3Gbqh6NRkgwPyN10guX3FyqkiyfOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37154},"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","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"A type-safe React Query wrapper for the NEAR JSON-RPC client that provides powerful data fetching, caching, and state management capabilities.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@ahnafalfariza/jsonrpc-types":"0.2.4","@ahnafalfariza/jsonrpc-client":"0.2.4"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.5","tsup":"^8.0.1","react":"^19.1.1","ts-jest":"^29.4.0","react-dom":"^19.1.1","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/react":"^18.0.0","@testing-library/dom":"^10.4.1","@tanstack/react-query":"^5.84.1","@testing-library/react":"^16.0.0","@testing-library/react-hooks":"^8.0.1"},"peerDependencies":{"react":"^18.0.0","@tanstack/react-query":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-react-query_0.2.4_1754116197696_0.9252107252404311","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@ahnafalfariza/jsonrpc-react-query","version":"0.3.0","license":"MIT","_id":"@ahnafalfariza/jsonrpc-react-query@0.3.0","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"dist":{"shasum":"cb941b9a6d23e88d80a3a5847ff9ed2ce89b2095","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-react-query/-/jsonrpc-react-query-0.3.0.tgz","fileCount":6,"integrity":"sha512-JgkbpzxESa0WwNupqwxqSde2i6TpKeFRcDLFrjS54ippWzQsCtpJtUuNkCtIYr/xG/ks7gVYyVVyQ8PtCVxZGg==","signatures":[{"sig":"MEYCIQC1T5vMiSCwsGl8QHnW3zmcEBa1aNMolFID4yLuGn93lgIhAL7sHBbybjNMrDMBCXA1mo3oUtoq9/ISPgrOsxNVX9t4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":37378},"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","check-types":"tsc --noEmit"},"_npmUser":{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"},"_npmVersion":"10.9.2","description":"A type-safe React Query wrapper for the NEAR JSON-RPC client that provides powerful data fetching, caching, and state management capabilities.","directories":{},"_nodeVersion":"22.17.0","dependencies":{"@ahnafalfariza/jsonrpc-types":"0.3.0","@ahnafalfariza/jsonrpc-client":"0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^30.0.5","tsup":"^8.0.1","react":"^19.1.1","ts-jest":"^29.4.0","react-dom":"^19.1.1","typescript":"^5.3.3","@types/jest":"^30.0.0","@types/react":"^18.0.0","@testing-library/dom":"^10.4.1","@tanstack/react-query":"^5.84.1","@testing-library/react":"^16.0.0","jest-environment-jsdom":"^30.0.5","@testing-library/jest-dom":"^6.6.4","@testing-library/react-hooks":"^8.0.1"},"peerDependencies":{"react":"^18.0.0","@tanstack/react-query":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/jsonrpc-react-query_0.3.0_1754191496125_0.27223137115167284","host":"s3://npm-registry-packages-npm-production"}},"0.3.1":{"name":"@ahnafalfariza/jsonrpc-react-query","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","test":"jest"},"dependencies":{"@ahnafalfariza/jsonrpc-client":"0.3.1","@ahnafalfariza/jsonrpc-types":"0.3.1"},"peerDependencies":{"@tanstack/react-query":"^5.0.0","react":"^18.0.0"},"devDependencies":{"@tanstack/react-query":"^5.84.1","@testing-library/dom":"^10.4.1","@testing-library/jest-dom":"^6.6.4","@testing-library/react":"^16.0.0","@testing-library/react-hooks":"^8.0.1","@types/jest":"^30.0.0","@types/react":"^18.0.0","jest":"^30.0.5","jest-environment-jsdom":"^30.0.5","react":"^19.1.1","react-dom":"^19.1.1","ts-jest":"^29.4.0","tsup":"^8.0.1","typescript":"^5.3.3"},"publishConfig":{"access":"public"},"_id":"@ahnafalfariza/jsonrpc-react-query@0.3.1","gitHead":"5ed7ba15958550b6dae5b7e87f4d5bb9d1ea728f","description":"A type-safe React Query wrapper for the NEAR JSON-RPC client that provides powerful data fetching, caching, and state management capabilities.","_nodeVersion":"22.17.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-p9JlhSPG3mNBoM4n9LnuvkRC4OvwIHeLynS2xeg+Y4Lnq7ZKOhY571kOMafEEkMPps+YulMRGh+IMkacegFVoA==","shasum":"63e63956feea9a562077def56541fd0b9d10ccf7","tarball":"https://registry.npmjs.org/@ahnafalfariza/jsonrpc-react-query/-/jsonrpc-react-query-0.3.1.tgz","fileCount":6,"unpackedSize":37378,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDb8l6MTNofr3+zlRRz3/9dl3V/U04t9HXLxh1/VZpsvAIhANK2dZcTvcGQ3UTeI5OdEalNBfY9zbjd1jG2czCJTcNf"}]},"_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-react-query_0.3.1_1754221835348_0.7633178082494931"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-02T06:29:57.623Z","modified":"2025-08-03T11:50:35.724Z","0.2.4":"2025-08-02T06:29:57.863Z","0.3.0":"2025-08-03T03:24:56.320Z","0.3.1":"2025-08-03T11:50:35.536Z"},"license":"MIT","description":"A type-safe React Query wrapper for the NEAR JSON-RPC client that provides powerful data fetching, caching, and state management capabilities.","maintainers":[{"name":"ahnafalfariza","email":"alfariza.ahnaf10@gmail.com"}],"readme":"# @ahnafalfariza/jsonrpc-react-query\n\nA type-safe React Query wrapper for the NEAR JSON-RPC client that provides powerful data fetching, caching, and state management capabilities.\n\n## Installation\n\n```bash\nnpm install @ahnafalfariza/jsonrpc-react-query @tanstack/react-query\n# or\nyarn add @ahnafalfariza/jsonrpc-react-query @tanstack/react-query\n```\n\n## Quick Start\n\n### 1. Setup the Provider\n\n```tsx\nimport React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { ReactQueryDevtools } from \"@tanstack/react-query-devtools\";\nimport {\n  JsonRpcQueryProvider,\n  createJsonRpcQueryClient,\n  jsonRpcTransporter,\n  NearRpcEndpoint,\n} from \"@ahnafalfariza/jsonrpc-react-query\";\n\n// Create a query client optimized for JSON-RPC\nconst queryClient = createJsonRpcQueryClient();\n\n// Create a transporter\nconst transporter = jsonRpcTransporter({\n  endpoint: NearRpcEndpoint.Mainnet,\n});\n\nfunction App() {\n  return (\n    <QueryClientProvider client={queryClient}>\n      <JsonRpcQueryProvider config={{ transporter, runtimeValidation: true }}>\n        <YourAppComponents />\n        <ReactQueryDevtools initialIsOpen={false} />\n      </JsonRpcQueryProvider>\n    </QueryClientProvider>\n  );\n}\n```\n\n### 2. Use Query Hooks\n\n```tsx\nimport React from \"react\";\nimport { useJsonRpcQuery } from \"@ahnafalfariza/jsonrpc-react-query\";\nimport { block, status } from \"@ahnafalfariza/jsonrpc-types/methods\";\n\nfunction BlockInfo() {\n  // Fetch the latest block\n  const {\n    data: blockData,\n    isLoading,\n    error,\n  } = useJsonRpcQuery(\n    block,\n    { finality: \"final\" },\n    {\n      staleTime: 30 * 1000, // Consider data fresh for 30 seconds\n      refetchInterval: 60 * 1000, // Refetch every minute\n    }\n  );\n\n  // Fetch network status\n  const { data: statusData } = useJsonRpcQuery(status, null);\n\n  if (isLoading) return <div>Loading block info...</div>;\n  if (error) return <div>Error: {error.message}</div>;\n\n  return (\n    <div>\n      <h2>Latest Block</h2>\n      <p>Hash: {blockData?.header?.hash}</p>\n      <p>Height: {blockData?.header?.height}</p>\n      <p>Timestamp: {blockData?.header?.timestamp}</p>\n\n      <h2>Network Status</h2>\n      <p>Chain ID: {statusData?.chain_id}</p>\n      <p>Latest Block Height: {statusData?.sync_info?.latest_block_height}</p>\n    </div>\n  );\n}\n```\n\n### 3. Use Mutation Hooks\n\n```tsx\nimport React from \"react\";\nimport { useJsonRpcMutation } from \"@ahnafalfariza/jsonrpc-react-query\";\nimport { broadcastTxCommit } from \"@ahnafalfariza/jsonrpc-types/methods\";\n\nfunction SendTransaction() {\n  const { mutate, isPending, data, error } = useJsonRpcMutation(\n    broadcastTxCommit,\n    {\n      onSuccess: (data) => {\n        console.log(\"Transaction successful:\", data?.transaction?.hash);\n      },\n      onError: (error) => {\n        console.error(\"Transaction failed:\", error);\n      },\n    }\n  );\n\n  const handleSendTransaction = (signedTransaction: string) => {\n    mutate([signedTransaction]);\n  };\n\n  return (\n    <div>\n      <button\n        onClick={() => handleSendTransaction(yourSignedTransaction)}\n        disabled={isPending}\n      >\n        {isPending ? \"Sending...\" : \"Send Transaction\"}\n      </button>\n\n      {error && <div>Error: {error.message}</div>}\n      {data && <div>Success! Hash: {data.transaction?.hash}</div>}\n    </div>\n  );\n}\n```\n\n## API Reference\n\n### Hooks\n\n#### `useJsonRpcQuery(method, params, options?)`\n\nA hook for fetching data using JSON-RPC methods.\n\n**Parameters:**\n\n- `method`: JSON-RPC method definition from `@ahnafalfariza/jsonrpc-types/methods`\n- `params`: Parameters for the method\n- `options`: Optional React Query options\n\n**Returns:**\n\n- `data`: The response data (undefined while loading)\n- `error`: Error object if the query failed\n- `isLoading`: True when the query is loading for the first time\n- `isFetching`: True when the query is fetching\n- `isSuccess`: True when the query succeeded\n- `isError`: True when the query failed\n- `isStale`: True when the data is stale\n- `refetch`: Function to manually refetch the data\n\n#### `useJsonRpcMutation(method, options?)`\n\nA hook for performing mutations using JSON-RPC methods.\n\n**Parameters:**\n\n- `method`: JSON-RPC method definition\n- `options`: Optional React Query mutation options\n\n**Returns:**\n\n- `mutate`: Function to trigger the mutation\n- `mutateAsync`: Async version of mutate\n- `isPending`: True when the mutation is in progress\n- `isSuccess`: True when the mutation succeeded\n- `isError`: True when the mutation failed\n- `data`: The mutation result data\n- `error`: Error object if the mutation failed\n- `reset`: Function to reset mutation state\n\n### Components\n\n#### `JsonRpcQueryProvider`\n\nProvider component that configures the JSON-RPC client for all child components.\n\n**Props:**\n\n- `config`: Configuration object with `transporter` and optional `runtimeValidation`\n- `children`: React child components\n\n### Utilities\n\n#### `createJsonRpcQueryClient(config?)`\n\nCreates a pre-configured QueryClient optimized for JSON-RPC operations.\n\n#### `JsonRpcQueryCache`\n\nUtility class for advanced cache management operations.\n\n**Methods:**\n\n- `invalidateMethod(methodName)`: Invalidate all queries for a method\n- `invalidateAll()`: Invalidate all JSON-RPC queries\n- `removeMethod(methodName)`: Remove all queries for a method from cache\n- `removeAll()`: Remove all JSON-RPC queries from cache\n- `getMethodData(methodName, params?)`: Get cached data for a method\n- `setMethodData(methodName, params, data)`: Set cached data for a method\n\n## Configuration\n\n### Default Query Options\n\nThe package comes with sensible defaults optimized for blockchain data:\n\n```tsx\nconst defaultConfig = {\n  defaultOptions: {\n    queries: {\n      staleTime: 5 * 60 * 1000, // 5 minutes\n      gcTime: 30 * 60 * 1000, // 30 minutes\n      retry: 3,\n      refetchOnWindowFocus: false,\n      refetchOnReconnect: true,\n    },\n    mutations: {\n      retry: 1,\n    },\n  },\n};\n```\n\n### Custom Configuration\n\n```tsx\nconst customQueryClient = createJsonRpcQueryClient({\n  defaultOptions: {\n    queries: {\n      staleTime: 10 * 60 * 1000, // 10 minutes\n      retry: 5,\n    },\n    mutations: {\n      retry: 2,\n    },\n  },\n});\n```\n\n## Contributing\n\nSee the [contributing guide](../../CONTRIBUTING.md) for information on how to contribute to this package.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}