Skip to content

Access Receipt

A copy-paste React session receipt for Knock Codes access screens — unlock time, storage mode, timeout. Zero dependencies.

SessionCore Blocksessionfeedback

Best used for A visible confirmation after unlock — proof for the user (and for you, while testing) of which mode actually ran and how long the session will last.

Requires a <KnockCodesProvider> ancestor — it reports on a session something else already established, it doesn't create one. Pair it with the same config passed to the gate sharing that session, since the receipt can't infer storage mode, timeout, or verification strategy from the session record alone.

// Usage

Minimal setup

<KnockCodesProvider expectedHash={hash} timeout={1_800_000}>
  <KnockCodes>
    <Dashboard />
    <AccessReceipt timeout={1_800_000} storageMode="localStorage" />
  </KnockCodes>
</KnockCodesProvider>
FIG.01Demo code: 4242
Installation

Add this block to your project

Recommended

npx shadcn@latest add @knock-codes/access-receipt

Also installs

  • Knock Codes Core
  • Knock Codes Types
  • useKnockCodes
  • Session Provider

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 (9)

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

GitHub shorthand

npx shadcn@latest add trivedi-vatsal/knock-codes/access-receipt

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
storageMode"localStorage" | "sessionStorage" | "memory""localStorage"Storage backend the active session used — shown on the Storage line.
timeoutnumber1800000Session lifetime in milliseconds, formatted on the Timeout line.
verificationStrategy"local-hash" | "server-verify""local-hash"Which verification strategy produced this session.
classNamestringExtra classes on the outer card.
Notes

Accessibility

Read-only summary content — a definition list, not an interactive control. Renders nothing while locked, so it never announces a session that doesn't exist yet.

Customization

Pass `storageMode`, `timeout`, and `verificationStrategy` to match the config given to the `<KnockCodes>`/`useKnockCodes` call sharing this session — the receipt has no way to read those back off the session itself, since the session record intentionally only ever holds `unlockedAt`, `expiresAt`, and an optional token.

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.