Session

Session Provider

Shares one useKnockCodes session across a tree, so multiple components stay in sync.

contextsession

Best used for Any screen where more than one component (a gate, a logout button, a timeout banner) needs the same session.

useKnockCodesContext() throws outside a provider — there's no meaningful standalone default for "give me the shared session" when nothing established one.

Loading preview…
Installation

Add this block to your project

CLI

npx shadcn@latest add http://localhost:3000/r/react/session-provider.json

Running this site somewhere other than localhost? Set NEXT_PUBLIC_SITE_URL and this command switches to that host automatically.

Also installs

  • Knock Codes Core
  • Knock Codes Types
  • useKnockCodes

Files created (7)

  • components/knock-codes/core/hash.ts
  • components/knock-codes/core/verify.ts
  • components/knock-codes/core/session.ts
  • components/knock-codes/core/storage.ts
  • components/knock-codes/react/types.ts
  • components/knock-codes/react/useKnockCodes.ts
  • components/knock-codes/react/KnockCodesProvider.tsx

No CLI? Copy the files by hand

  1. Open the Code tab in the preview above.
  2. Create each path listed below in your project and paste its contents in.
  3. Do the same for anything listed under “Also installs”, if present.

Props

API reference

PropTypeDefaultDescription
expectedHashstringSHA-256 hex hash to verify against, for local mode.
verifyVerifyFnCustom async verification function, for server mode.
storage"localStorage" | "sessionStorage" | "memory""localStorage"Where the unlocked session persists.
timeoutnumber1800000Session lifetime in milliseconds.
children *ReactNodeEverything that should read the shared session via useKnockCodesContext().
Notes

Accessibility

Renders no UI of its own — purely a context boundary. Accessibility is entirely a function of whatever you render inside it.

Customization

Reach for this only when two or more components need to share one session — a gate, a Logout Button, and a Session Timeout Banner all reading and acting on the same unlock state. `useKnockCodes`/`<KnockCodes>` remain the right choice standalone.

Compose with

Blocks that pair well with this one

These combine naturally with this block, whether as a shared shell, a shared session, or a common fallback.