{"_id":"@alphea/react","_rev":"7-f9b649875051620c5749380aea686824","name":"@alphea/react","dist-tags":{"next":"0.1.0-alpha.1","latest":"0.1.5","rc":"0.1.4-rc.3"},"versions":{"0.1.0-alpha.0":{"name":"@alphea/react","version":"0.1.0-alpha.0","license":"Apache-2.0","_id":"@alphea/react@0.1.0-alpha.0","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"dist":{"shasum":"1508ca3ec9b348f904cda0e1503c837d9bfcf209","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.0-alpha.0.tgz","fileCount":51,"integrity":"sha512-icQur98MeRp15k0uLgZIQB0g4C8cnGJlvP6LiR8lL5TAJ9YgS6Q34WDM4FlZPTHb2r0NZ0rPzfKn/XxiG27UOQ==","signatures":[{"sig":"MEQCIAFyEwnzU97oQZEr0i6iygli6cVnW+lt9Un2WU/kKdLoAiAjeFPdWC+BKdRIjiSNjECb9G1FjLa3Tp3dEPWXDQb2TQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":223676},"type":"module","types":"./dist/react/index.d.ts","engines":{"node":">=22.18.0"},"exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"e729b25243950a8cb8c6beb8641db8d2e9eed913","_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"repository":{"url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","type":"git","directory":"packages/react"},"_npmVersion":"11.13.0","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.3.0 || ^19.0.0","@types/react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.0-alpha.0_1782192593594_0.8114330367414089","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-alpha.1":{"name":"@alphea/react","version":"0.1.0-alpha.1","license":"Apache-2.0","_id":"@alphea/react@0.1.0-alpha.1","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"dist":{"shasum":"bc535c05d71d2f5604135314e10272fb18c52f0e","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.0-alpha.1.tgz","fileCount":51,"integrity":"sha512-flNGP8CJ04ltCP0Gsu65PoYDLLbsBpDun/eea3TSA/d4aMcvVnpY/5R01ohuj4pFd46OpdeJcJ0tHJbxOS3Ssw==","signatures":[{"sig":"MEUCIQDpQGONCkeFQ/9IWXLbGOK26NBOTLcJsosztIcuvZT7sAIgBEM6cEixb7JvrsjC07enIgYs1YYc6dgf1R74wygIOH8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229138},"type":"module","types":"./dist/react/index.d.ts","engines":{"node":">=22.18.0"},"exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"d7f72ff0d9b124617d5025144cdde5d233267dfc","_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"repository":{"url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","type":"git","directory":"packages/react"},"_npmVersion":"11.13.0","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"^18.3.0 || ^19.0.0","@types/react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.0-alpha.1_1782199679365_0.26407270534839977","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@alphea/react","version":"0.1.2","license":"Apache-2.0","_id":"@alphea/react@0.1.2","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"dist":{"shasum":"e4a49d5385b197917b3392afe0a17a2a9f0530cc","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.2.tgz","fileCount":51,"integrity":"sha512-cbR6C1vKzqa3NwcXraBi1qR1gFaMWLyrSGynnZ392XzqtEiRcPIKK06GpalgD9S5wesjF5CmWRY8avuBN+lygw==","signatures":[{"sig":"MEUCIFftHGHrVCOdZDrNq9Xm9eaaGUC2z9FCy15frZSGzaWiAiEA8wRuvFlFWBK3y1fX2RxW6UXg2gokSO3QAp1IQifGXLM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229190},"type":"module","types":"./dist/react/index.d.ts","engines":{"node":">=22.18.0"},"exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"085d123654ce6414bdb75eaff595ee5fbb926b67","_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"repository":{"url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","type":"git","directory":"packages/react"},"_npmVersion":"11.13.0","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.3.0 || ^19.0.0","@types/react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.2_1782290790907_0.13717448032068602","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@alphea/react","version":"0.1.3","license":"Apache-2.0","_id":"@alphea/react@0.1.3","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"dist":{"shasum":"c033a365e34bee1d9ede8452b746809b2830224a","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.3.tgz","fileCount":51,"integrity":"sha512-qZpL4hFYHLKllyv8Qf+EdzLIH1ylnbJVb2cscGxCyVhN42nI4WzHNQ4yMqkzMSlb/wmDOHaaO+b8feEN8rSdvg==","signatures":[{"sig":"MEYCIQCqFwCCp6l7It7k7DmACTOoB81lti2A+BPgyAMMHtb2ugIhAPdKPjXycL49Tend7dRqroC4RH9EDOL/uB3yGA7f/ysT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229190},"type":"module","types":"./dist/react/index.d.ts","engines":{"node":">=22.18.0"},"exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"}},"gitHead":"79aef76766e67251a2d59ba646fd47aa5511b889","_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"repository":{"url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","type":"git","directory":"packages/react"},"_npmVersion":"11.13.0","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"react":"^18.3.0 || ^19.0.0","@types/react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.3_1782450246107_0.5073796751421584","host":"s3://npm-registry-packages-npm-production"}},"0.1.4-rc.1":{"name":"@alphea/react","version":"0.1.4-rc.1","license":"Apache-2.0","_id":"@alphea/react@0.1.4-rc.1","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"dist":{"shasum":"f8b9a11180c12a5ceb98c02bc1985865a4a51b64","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.4-rc.1.tgz","fileCount":135,"integrity":"sha512-8JCqVu2PynqBMjqO1MynXlYjf6HMeMBe88+07b4LVf2J1h1BHrscFVCYtOqlkYM6nG16GON31KvRFDMfC9FPVw==","signatures":[{"sig":"MEYCIQCxihcVV44zWZLTZ0eByvETYXERiNjwUrpdfC4Au5htegIhAJmHH4RlO2zgb6fgzqhlyXPkJQj8V324VJL8C2u4NaVZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":607006},"type":"module","types":"./dist/react/index.d.ts","engines":{"node":">=22.18.0"},"exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./connect":{"types":"./dist/connect-react/index.d.ts","default":"./dist/connect-react/index.js"}},"gitHead":"0b01a6feb496b7eaca62d4ac6bc269d4e410debe","_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"repository":{"url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","type":"git","directory":"packages/react"},"_npmVersion":"11.13.0","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"^18.3.0 || ^19.0.0","@types/react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.4-rc.1_1786424702585_0.30845648503881384","host":"s3://npm-registry-packages-npm-production"}},"0.1.4-rc.3":{"name":"@alphea/react","version":"0.1.4-rc.3","license":"Apache-2.0","_id":"@alphea/react@0.1.4-rc.3","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"dist":{"shasum":"d5a8d0d924b644ff7bdbf5260e7fe965171c484f","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.4-rc.3.tgz","fileCount":139,"integrity":"sha512-RFb8Jr0jmUOlX8ojfzkRxMYlv+jF2tArp8JOiZaNJCxw2hTerOkzkvjD98aBa/89USwSiNxAW0T/pSsAYEAugA==","signatures":[{"sig":"MEYCIQC4h+7FPtDeyqAPWdUklGh2RWw+f3Q+T0OgD8KskoERrAIhAKRHqMFlR+oOBm8G1CJ4iWRPTcQk/0OA8pRtDeLnyHXm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":632464},"type":"module","types":"./dist/react/index.d.ts","engines":{"node":">=22.18.0"},"exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./connect":{"types":"./dist/connect-react/index.d.ts","default":"./dist/connect-react/index.js"}},"gitHead":"c24b32cfaa5dac6519d4f26e882e69848e7d9eb3","_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"repository":{"url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","type":"git","directory":"packages/react"},"_npmVersion":"11.13.0","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","directories":{},"sideEffects":false,"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"react":"^18.3.0 || ^19.0.0","@types/react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/react_0.1.4-rc.3_1786982284698_0.15113943518610418","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@alphea/react","version":"0.1.5","description":"React hooks and Provider bindings for ALPHEA browser app runtimes","license":"Apache-2.0","type":"module","exports":{".":{"types":"./dist/react/index.d.ts","default":"./dist/react/index.js"},"./connect":{"types":"./dist/connect-react/index.d.ts","default":"./dist/connect-react/index.js"}},"types":"./dist/react/index.d.ts","repository":{"type":"git","url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","directory":"packages/react"},"sideEffects":false,"peerDependencies":{"@types/react":"^18.3.0 || ^19.0.0","react":"^18.3.0 || ^19.0.0"},"peerDependenciesMeta":{"@types/react":{"optional":true}},"publishConfig":{"access":"public"},"engines":{"node":">=22.18.0"},"gitHead":"1cad142f3bcef7ab2ec70aa89c6de18360214a25","_id":"@alphea/react@0.1.5","_nodeVersion":"24.17.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-0YTkYB3mLnahY5+Q3o/+n+uMGZok7glPTXY94cga2U2kxMkh46UDZ3c4EDmRAp0R2+Noi2Sd5Z0jVbizyJTp6A==","shasum":"740e55113a201a847175566752a4ef846ae0c9d1","tarball":"https://registry.npmjs.org/@alphea/react/-/react-0.1.5.tgz","fileCount":163,"unpackedSize":883976,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICLdXxw/0FnP32BR70JivlKxpy//PvNSJE5CzCQsLLgQAiBOIrdI1EZLN97SK0rX929NLLnsPvldlzHStqJtDym0uQ=="}]},"_npmUser":{"name":"alphea_henrypark","email":"henrypark@alphea.io"},"directories":{},"maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react_0.1.5_1788523300748_0.7791472782851687"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-23T05:29:53.406Z","modified":"2026-09-04T12:01:41.064Z","0.1.0-alpha.0":"2026-06-23T05:29:53.742Z","0.1.0-alpha.1":"2026-06-23T07:27:59.503Z","0.1.2":"2026-06-24T08:46:31.047Z","0.1.3":"2026-06-26T05:04:06.265Z","0.1.4-rc.1":"2026-08-11T05:05:02.745Z","0.1.4-rc.3":"2026-08-17T15:58:04.845Z","0.1.5":"2026-09-04T12:01:40.898Z"},"license":"Apache-2.0","repository":{"type":"git","url":"https://git.alphea.io/Alphea-Dev/alphea-framework.git","directory":"packages/react"},"description":"React hooks and Provider bindings for ALPHEA browser app runtimes","maintainers":[{"name":"alphea_henrypark","email":"henrypark@alphea.io"}],"readme":"# @alphea/react\n\nReact hooks and Provider bindings for ALPHEA browser app runtimes.\n\n```sh\nnpm install @alphea/react react react-dom\nnpm install -D @types/react @types/react-dom\n```\n\n```tsx\nimport {\n  alpheaError,\n  createAlpheaAppGatewayResolver,\n  createAlpheaReactHooks,\n  getAlpheaBrowserClient,\n  isAlpheaErrorCode,\n} from \"@alphea/react\";\nimport type { AlpheaFns } from \"./alphea-fns.generated\";\n\nconst alphea = createAlpheaReactHooks<AlpheaFns>();\n\nexport function NewNote() {\n  const createNote = alphea.useFn(\"createNote\");\n\n  return (\n    <button\n      disabled={createNote.loading}\n      onClick={() => void createNote.call({ title: \"Hello\" })}\n    >\n      Save\n    </button>\n  );\n}\n```\n\nThe hooks resolve the served runtime's ambient `window.alphea` binding by\ndefault. Use `AlpheaProvider` only when you want to inject an explicit client,\nfor example in tests or a custom bootstrap.\n\n`@alphea/react` is the normal browser-safe dependency for React UI apps. In\naddition to the hooks, it re-exports the browser Client Framework factories,\nambient client helpers, shared JSON/error/function/worker types, and ALPN app\nresolver helpers so React app code does not need a direct `@alphea/framework` or\n`@alphea/client` dependency for those browser-safe surfaces.\n\nKeep credential-bearing Foundation RPC clients, bearer/session transports, and\nauth login helpers in trusted tooling or server code that depends on\n`@alphea/foundation`; they are not exported by `@alphea/react`.\n\n## Connect hooks: `@alphea/react/connect`\n\nThe Connect bindings live behind a **separate import**, and that separation is\nthe point rather than packaging trivia.\n\nThe root entry above is the **browser-capability** surface: an ambient session\nthe served ALPHEA runtime holds on the app's behalf. `@alphea/react/connect` is\nthe **end-user Connect** surface: a credential that belongs to a person who\nsigned in. An ambient browser-capability session neither is, nor can create, a\nConnect session — so reaching the second is an explicit import, not something\nan app inherits from the first.\n\n```tsx\nimport {\n  createAlpheaConnectAuthClient,\n  createAlpheaConnectDataClient,\n  createAlpheaConnectFetchTransport,\n  createAlpheaConnectMemorySessionStore,\n  createAlpheaConnectAccessTokenProvider,\n} from \"@alphea/connect\";\nimport {\n  AlpheaConnectProvider,\n  useConnectPointBalance,\n  useConnectSession,\n} from \"@alphea/react/connect\";\n\nconst sessionStore = createAlpheaConnectMemorySessionStore();\nconst transport = createAlpheaConnectFetchTransport({\n  baseUrl: import.meta.env.VITE_CONNECT_BASE_URL,\n  getAccessToken: createAlpheaConnectAccessTokenProvider(sessionStore),\n});\n\n<AlpheaConnectProvider\n  auth={createAlpheaConnectAuthClient({ transport, sessionStore })}\n  data={createAlpheaConnectDataClient({ transport })}\n>\n  <App />\n</AlpheaConnectProvider>;\n```\n\nYou construct the clients and pass them in. There is no ambient fallback,\nbecause there is nothing ambient to find.\n\n### Hook state\n\nEvery hook reports one of `idle`, `loading`, `success`, `error`,\n`unauthorized`, or `unavailable`. The last two are separate from `error`\nbecause an app does something different for each:\n\n```tsx\nconst balance = useConnectPointBalance();\n\nif (balance.unauthorized) return <SignInPrompt />;   // no valid session\nif (balance.unavailable) return null;                // not served here\nif (balance.error) return <Retry onRetry={balance.reload} />;\n```\n\n`unavailable` means the operation was **not attempted**: either it is not live\nin the pinned Connect contract, or the app listed it in\n`unavailableOperations` on the provider. A hook never reports an unavailable\noperation as a successful call.\n\nAvailable hooks:\n\n- **Session and sign-in** — `useConnectSession`, `useConnectSessionSnapshot`,\n  `useConnectGoogleLogin`, `useConnectEmailLogin`, `useConnectLogout`\n- **Points** — `useConnectPointBalance`, `useConnectPointSummary`,\n  `useConnectPointHistory`\n- **Referral reads** — `useConnectReferralCode`, `useConnectFriends`,\n  `useConnectReferralRewards`, `useConnectInviterBonus`\n- **Referral actions** — `useConnectReferralActions`, giving\n  `claimInviterBonus`, `claimReward`, `claimCompletionBonus`, and\n  `redeemInvitation`\n- **Rounds and redeem** — `useConnectRoundStatus`, `useConnectRedeemStatus`\n- **Wallet** — `useConnectWallets`, `useConnectWalletBinding`\n\nEach referral action takes a client-minted idempotency key, so a retried tap\ncannot double-award:\n\n```tsx\nconst referral = useConnectReferralActions();\nawait referral.claimReward.run({ level: 3, idempotencyKey });\n```\n\nDespite the shared word, these are not the reward-claim surface: they are\npoint-ledger mutations the server settles, with nothing signed and no chain\ninvolved.\n\n**Reward-claim hooks are not in this release.** They wait for a dedicated\nclaim surface and its own contract review. Nothing in this entry reads a claim\nproof, builds calldata, or sends a transaction.\n","readmeFilename":"README.md"}