Skip to content

Session Provider

A copy-paste React session provider for Knock Codes access screens — shares one unlock state across a gate, a logout button, and a timeout banner. Zero dependencies.

SessionCore Blockcontextsession

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.

// Usage

Minimal setup

<KnockCodesProvider expectedHash={process.env.NEXT_PUBLIC_KNOCK_HASH}>
  <KnockCodes>
    <Dashboard />
  </KnockCodes>
</KnockCodesProvider>
FIG.01Demo code: 4242
Installation

Add this block to your project

Recommended

npx shadcn@latest add @knock-codes/session-provider

Also installs

  • Knock Codes Core
  • Knock Codes Types
  • useKnockCodes

These install together as one atomic unit — even a presentational or read-only piece needs the full verification stack (hook, types, core) behind it to actually run.

Files created (8)

  • 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/KnockCodesContext.tsx
  • components/knock-codes/react/KnockCodesProvider.tsx
Other ways

GitHub shorthand

npx shadcn@latest add trivedi-vatsal/knock-codes/session-provider

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.
validateSession(session: KnockCodesSession) => boolean | Promise<boolean>Called when a session is read from storage. Return false or throw to reject it (server-mode token check).
children *ReactNodeEverything that should read the shared session via useKnockCodesContext().

Exactly one of expectedHash or verify is required.

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. Gates under this provider (`<KnockCodes>`, `<ProtectedCard>`, `<ProtectedModal>`, `<ProtectedRoute>`) join that session automatically instead of spinning up a second hook. Put `expectedHash` / `verify` on the provider; repeating them on the gate is ignored. `useKnockCodes` remains the right choice for a fully custom standalone prompt.

Security & Verification

Need a hash? Use the hash generator on Getting Started — computed locally, never sent anywhere.

The honest version

Knock Codes stops casual visitors, search engines, and forwarded links. Local mode does not stop anyone who opens DevTools — the hash ships in your client bundle by design. Server mode (swap one prop) hides the hash from the client; children you already bundled are still in the JavaScript, and a forged session works unless you wire validateSession. A velvet rope, with an optional real lock. Never marketed as more than that.

// 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.