Skip to content

Session Timeout Banner

A copy-paste React warning banner for Knock Codes access screens — alerts before a shared session expires, with a one-click logout. Zero dependencies.

SessionCore Blocksessionfeedback

Best used for Warning users before a shared session expires, especially with a short or activity-based timeout.

Requires a <KnockCodesProvider> ancestor — it watches a session something else already established, it doesn't create one.

// Usage

Minimal setup

<KnockCodesProvider expectedHash={hash} timeout={1_800_000}>
  <KnockCodes>
    <Dashboard />
    <SessionTimeoutBanner warnBeforeMs={60_000} />
  </KnockCodes>
</KnockCodesProvider>

Demo code: 4242 — timeout set to 12s

Installation

Add this block to your project

Recommended

npx shadcn@latest add @knock-codes/session-timeout-banner

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/SessionTimeoutBanner.tsx
Other ways

GitHub shorthand

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

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
warnBeforeMsnumber60000Show the banner once this many ms remain before expiry.
classNamestringExtra classes on the banner.
Notes

Accessibility

role="alert" — announced immediately when it appears, not just on next poll of an aria-live region, since an imminent session expiry is time-sensitive.

Customization

Renders nothing outside the warning window or with no active session, so it's safe to mount unconditionally near the top of a layout. Adjust `warnBeforeMs` to change how early it appears.

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.