{"_id":"@alyvro/api-hooks","_rev":"2-197ea56fff06aee19da3ee7d12aa12c9","name":"@alyvro/api-hooks","dist-tags":{"latest":"0.1.1"},"versions":{"0.1.0":{"name":"@alyvro/api-hooks","version":"0.1.0","keywords":["react","hooks","api","nextjs","nodejs","alyvro"],"author":{"url":"alyvro.com","name":"Alyvro"},"license":"MIT","_id":"@alyvro/api-hooks@0.1.0","maintainers":[{"name":"this_nima","email":"nimastrong852@gmail.com"}],"dist":{"shasum":"4a0d2c0cfd1abf99f08cab96f77706c2b601bf8b","tarball":"https://registry.npmjs.org/@alyvro/api-hooks/-/api-hooks-0.1.0.tgz","fileCount":17,"integrity":"sha512-FwyDAPnVvS0X3z6gpYQLz4fFztP0Bjh+0gtMdO00yZVuZDldKzODb3JkIjVExL6408vmtC+p7wiiQi42NBITlw==","signatures":[{"sig":"MEYCIQCXrhBuRESovaE9yicvLzd3V8SAibCg2EaKNmGnZHAaCgIhANoGhfA7Oico3KjTe07LY/UyfrGp8yn7YW3MzC3mnfhz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25796},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","scripts":{"build":"tsup"},"_npmUser":{"name":"this_nima","email":"nimastrong852@gmail.com"},"_npmVersion":"10.9.2","description":"Lightweight React hooks for API integration (Next.js/Node.js friendly).","directories":{},"_nodeVersion":"22.17.1","dependencies":{"tsup":"^8.5.0","react":"^19.1.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.1","devDependencies":{"typescript":"^5.9.2","@types/node":"^24.3.0","@types/react":"^19.1.11"},"peerDependencies":{"react":">=17.0.0"},"_npmOperationalInternal":{"tmp":"tmp/api-hooks_0.1.0_1756205383669_0.7934009346496544","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@alyvro/api-hooks","version":"0.1.1","description":"Lightweight React hooks for API integration (Next.js/Node.js friendly).","main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","scripts":{"build":"tsup"},"keywords":["react","hooks","api","nextjs","nodejs","alyvro"],"author":{"name":"Alyvro","url":"alyvro.com"},"license":"MIT","packageManager":"pnpm@10.11.1","devDependencies":{"@types/node":"^24.3.0","@types/react":"^19.1.11","typescript":"^5.9.2"},"dependencies":{"react":"^19.1.1","tsup":"^8.5.0"},"peerDependencies":{"react":">=17.0.0"},"_id":"@alyvro/api-hooks@0.1.1","_nodeVersion":"22.17.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-jCYbWx+P5N9lCTgxbTKMwkwmZTGoeIbJPtyV1ArAPEXFOhdKDl19tpacLsyNK9hhDLmtTQy7aXRYF2zz1lNt1g==","shasum":"c7d506b12fdf01ee366da2b651a945ed4e16a4fa","tarball":"https://registry.npmjs.org/@alyvro/api-hooks/-/api-hooks-0.1.1.tgz","fileCount":17,"unpackedSize":25796,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCubmcZgCKYBlv8lUJDpPbWAO+ybquWEMhMdJ7v0EWHywIgC/gzbyxBvRGgBGSN0B3YjYOxzSQpH2hCXfU5XBWfYas="}]},"_npmUser":{"name":"this_nima","email":"nimastrong852@gmail.com"},"directories":{},"maintainers":[{"name":"this_nima","email":"nimastrong852@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/api-hooks_0.1.1_1756205428008_0.794561850820555"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-26T10:49:43.586Z","modified":"2025-08-26T10:50:28.392Z","0.1.0":"2025-08-26T10:49:43.850Z","0.1.1":"2025-08-26T10:50:28.205Z"},"author":{"name":"Alyvro","url":"alyvro.com"},"license":"MIT","keywords":["react","hooks","api","nextjs","nodejs","alyvro"],"description":"Lightweight React hooks for API integration (Next.js/Node.js friendly).","maintainers":[{"name":"this_nima","email":"nimastrong852@gmail.com"}],"readme":"# @alyvro/api-hooks\r\n\r\nLightweight React hooks for API integration (Next.js/Node.js friendly).  \r\nBuilt by **Alyvro** → [alyvro.com](https://alyvro.com)\r\n\r\n---\r\n\r\n## ✨ Features\r\n\r\n- 🔗 `useApi` – Fetch data with caching, loading & error states\r\n- 🚀 `useMutation` – Handle POST/PUT/DELETE with optimistic updates\r\n- ♻️ `refetch` & `invalidate` – Control cached queries\r\n- 📜 Pagination & infinite scroll support\r\n- ⚡ Works perfectly with **Next.js** & **Node.js APIs**\r\n\r\n---\r\n\r\n## 📦 Installation\r\n\r\n```bash\r\nnpm install @alyvro/api-hooks\r\n# or\r\npnpm add @alyvro/api-hooks\r\n# or\r\nyarn add @alyvro/api-hooks\r\n```\r\n\r\n---\r\n\r\n## 🔧 Setup\r\n\r\nWrap your app with the `ApiContext.Provider` to set a base URL and token handler.\r\n\r\n```tsx\r\nimport { ApiContext } from \"@alyvro/api-hooks\";\r\n\r\nfunction MyApp({ Component, pageProps }) {\r\n  return (\r\n    <ApiContext.Provider\r\n      value={{\r\n        baseURL: \"/api\",\r\n        getToken: () => localStorage.getItem(\"token\"),\r\n      }}\r\n    >\r\n      <Component {...pageProps} />\r\n    </ApiContext.Provider>\r\n  );\r\n}\r\n\r\nexport default MyApp;\r\n```\r\n\r\n---\r\n\r\n## 🛠 Usage\r\n\r\n### 1. Fetching Data (`useApi`)\r\n\r\n```tsx\r\nimport { useApi } from \"@alyvro/api-hooks\";\r\n\r\nfunction Profile() {\r\n  const { data, loading, error, refetch } = useApi(\"/user/me\");\r\n\r\n  if (loading) return <p>Loading...</p>;\r\n  if (error) return <p>Error: {error.message}</p>;\r\n\r\n  return (\r\n    <div>\r\n      <h1>{data.name}</h1>\r\n      <button onClick={refetch}>Refetch</button>\r\n    </div>\r\n  );\r\n}\r\n```\r\n\r\n---\r\n\r\n### 2. Mutations (`useMutation`)\r\n\r\n```tsx\r\nimport { useMutation } from \"@alyvro/api-hooks\";\r\n\r\nfunction UpdateUser() {\r\n  const { mutate, loading } = useMutation(\"/user/update\", \"PUT\", {\r\n    optimisticKey: \"/user/me\",\r\n  });\r\n\r\n  return (\r\n    <button\r\n      onClick={() => mutate({ name: \"Nima\" }, { name: \"Nima (optimistic)\" })}\r\n      disabled={loading}\r\n    >\r\n      Update\r\n    </button>\r\n  );\r\n}\r\n```\r\n\r\n---\r\n\r\n### 3. Pagination (`usePaginatedApi`)\r\n\r\n```tsx\r\nimport { usePaginatedApi } from \"@alyvro/api-hooks\";\r\n\r\nfunction UsersList() {\r\n  const { data, loading } = usePaginatedApi(\"/users\", 1, 10);\r\n\r\n  if (loading) return <p>Loading...</p>;\r\n  return (\r\n    <ul>\r\n      {data?.map((u) => (\r\n        <li key={u.id}>{u.name}</li>\r\n      ))}\r\n    </ul>\r\n  );\r\n}\r\n```\r\n\r\n---\r\n\r\n## 📝 License\r\n\r\nMIT © [Alyvro](https://alyvro.com)\r\n","readmeFilename":"README.md"}