{"_id":"@arindam923/flashdb-client","_rev":"2-3ab4fce3e61fadc5cb30411357cf2d7c","name":"@arindam923/flashdb-client","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@arindam923/flashdb-client","version":"0.1.0","keywords":["database","realtime","websocket","key-value","flashdb"],"license":"MIT","_id":"@arindam923/flashdb-client@0.1.0","maintainers":[{"name":"arindam923","email":"arindam92@proton.me"}],"homepage":"https://github.com/arindam923/flashdb#readme","bugs":{"url":"https://github.com/arindam923/flashdb/issues"},"dist":{"shasum":"13c39a57d6bef7791910b5f354f6b1a95a1747ed","tarball":"https://registry.npmjs.org/@arindam923/flashdb-client/-/flashdb-client-0.1.0.tgz","fileCount":10,"integrity":"sha512-k6IA6Tej02jL1ax4BnR3sCsa8Vcbu8KQfuMCKPSwxXI6Vf9S9qhiM4IMcAOK9BaY8YykIjjPFoFNu39KgAblNA==","signatures":[{"sig":"MEUCIQCIxCwxJjpGAC8rFHUtA0sIdAiRX7vqNkL82TGsdyR8QQIgZqXwtlJJHxxYH+C1l8X1peAicoJGMpwkBES6SwdySaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":19699},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2684a266114ca1369dcbb26f0501e4b67377a15b","scripts":{"test":"vitest","build":"tsc"},"_npmUser":{"name":"arindam923","email":"arindam92@proton.me"},"repository":{"url":"git+https://github.com/arindam923/flashdb.git","type":"git"},"_npmVersion":"11.9.0","description":"Realtime key-value database with WebSocket API","directories":{},"_nodeVersion":"25.6.1","_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.0.0","typescript":"^5.0.0","@types/react":"^18.2.0"},"peerDependencies":{"react":">=16.8.0"},"_npmOperationalInternal":{"tmp":"tmp/flashdb-client_0.1.0_1772035285573_0.36782001032981837","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@arindam923/flashdb-client","version":"0.2.0","description":"Realtime key-value database with WebSocket API","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"tsc","test":"vitest"},"peerDependencies":{"react":">=16.8.0"},"devDependencies":{"@types/react":"^18.2.0","typescript":"^5.0.0","vitest":"^1.0.0"},"keywords":["database","realtime","websocket","key-value","flashdb"],"license":"MIT","repository":{"type":"git","url":"git+https://github.com/arindam923/flashdb.git"},"gitHead":"2684a266114ca1369dcbb26f0501e4b67377a15b","_id":"@arindam923/flashdb-client@0.2.0","bugs":{"url":"https://github.com/arindam923/flashdb/issues"},"homepage":"https://github.com/arindam923/flashdb#readme","_nodeVersion":"25.6.1","_npmVersion":"11.9.0","dist":{"integrity":"sha512-7sDpVxKlKVELXYA8eLvPv9ewDT/JJ+FUGJH95zLnx5+rA6NS5Rxz4/Ho5BQwbZFx0dKfKFujwda0aGdNUCTQsg==","shasum":"c2557ac426cce1c002bf4044fca4f82b70527830","tarball":"https://registry.npmjs.org/@arindam923/flashdb-client/-/flashdb-client-0.2.0.tgz","fileCount":11,"unpackedSize":22764,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICcTl100AoQI/yUkZrfyK4XegCz9KZpt0GlLssv24S+cAiBfMWLyKW+c7842bksunUE37a6lgVNUjfny37CiI7tOlg=="}]},"_npmUser":{"name":"arindam923","email":"arindam92@proton.me"},"directories":{},"maintainers":[{"name":"arindam923","email":"arindam92@proton.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flashdb-client_0.2.0_1772035754033_0.7246255441769498"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-25T16:01:25.419Z","modified":"2026-02-25T16:09:15.768Z","0.1.0":"2026-02-25T16:01:25.731Z","0.2.0":"2026-02-25T16:09:14.182Z"},"bugs":{"url":"https://github.com/arindam923/flashdb/issues"},"license":"MIT","homepage":"https://github.com/arindam923/flashdb#readme","keywords":["database","realtime","websocket","key-value","flashdb"],"repository":{"type":"git","url":"git+https://github.com/arindam923/flashdb.git"},"description":"Realtime key-value database with WebSocket API","maintainers":[{"name":"arindam923","email":"arindam92@proton.me"}],"readme":"# @arindam923/flashdb-client\n\nRealtime key-value database client for React with WebSocket connectivity.\n\n## Features\n\n- **Realtime Subscriptions** - Subscribe to key changes with instant updates\n- **React Hooks** - Simple hooks for fetching and mutating data\n- **Optimistic Updates** - Instant UI updates with automatic background sync\n- **Auto Reconnection** - Automatic WebSocket reconnection with exponential backoff\n- **TypeScript** - Full TypeScript support\n\n## Installation\n\n```bash\nnpm install @arindam923/flashdb-client\n```\n\n## Quick Start\n\n```tsx\nimport { FlashDB, FlashDBProvider, useValue, useMutation } from '@arindam923/flashdb-client';\n\nconst db = new FlashDB({\n  url: 'ws://localhost:8080/ws',\n  token: 'your-jwt-token'\n});\n\nfunction App() {\n  return (\n    <FlashDBProvider client={db}>\n      <Counter />\n    </FlashDBProvider>\n  );\n}\n\nfunction Counter() {\n  const { value: count, version, loading } = useValue('counter');\n  const { mutate, loading: mutating } = useMutation('counter');\n  \n  const handleClick = () => {\n    mutate((current) => (current ?? 0) + 1);\n  };\n  \n  if (loading) return <div>Loading...</div>;\n  \n  return (\n    <button onClick={handleClick} disabled={mutating}>\n      Count: {count ?? 0}\n    </button>\n  );\n}\n```\n\n## API\n\n### FlashDB Client\n\n```typescript\nconst db = new FlashDB({\n  url: 'ws://localhost:8080/ws',  // WebSocket URL\n  token: 'jwt-token',              // Optional JWT token\n  reconnectDelay: 1000,            // Initial reconnect delay (ms)\n  maxReconnectDelay: 30000         // Max reconnect delay (ms)\n});\n```\n\n#### Methods\n\n| Method | Description |\n|--------|-------------|\n| `get(key)` | Get value by key |\n| `set(key, value)` | Set value |\n| `cas(key, value, version)` | Compare-and-swap |\n| `delete(key)` | Delete a key |\n| `subscribe(key, listener)` | Subscribe to key changes |\n| `getCached(key)` | Get from local cache |\n| `isConnected()` | Check connection status |\n| `destroy()` | Close connection |\n\n### React Hooks\n\n#### useValue(key)\n\nSubscribe to a key's value with realtime updates.\n\n```tsx\nconst { value, version, loading, error } = useValue('my-key');\n```\n\n#### useMutation(key, options)\n\nSet or delete values with automatic retry logic.\n\n```tsx\nconst { mutate, delete: del, loading, error } = useMutation('my-key');\n\n// Simple set\nawait mutate({ name: 'Alice' });\n\n// Optimistic update with function\nawait mutate(current => ({ ...current, count: (current?.count ?? 0) + 1 }));\n\n// Delete\nawait del();\n```\n\nOptions:\n- `maxRetries` - Max CAS retries (default: 10)\n\n#### useConnection()\n\nTrack WebSocket connection state.\n\n```tsx\nconst { connected } = useConnection();\n```\n\n#### useOptimisticValue(key)\n\nInstant local updates with server reconciliation.\n\n```tsx\nconst { value, setOptimistic, isOptimistic } = useOptimisticValue('counter');\n\n// Instant update - UI updates immediately\nsetOptimistic(v => (v ?? 0) + 1);\n```\n\n## Server Requirements\n\nThis client connects to a FlashDB server. See [flashdb](https://github.com/arindam923/flashdb) for server setup.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}