Skip to content

fix: replace crypto.randomUUID with compatible helper for HTTP contexts#29

Open
yuhp wants to merge 2 commits intoibelick:mainfrom
yuhp:fix/random-uuid-compatibility
Open

fix: replace crypto.randomUUID with compatible helper for HTTP contexts#29
yuhp wants to merge 2 commits intoibelick:mainfrom
yuhp:fix/random-uuid-compatibility

Conversation

@yuhp
Copy link

@yuhp yuhp commented Feb 14, 2026

Description

This PR fixes a crash when accessing the application over a local network (LAN) via HTTP (e.g., http://192.168.1.x:3000).

The Issue

The native crypto.randomUUID() method is restricted to Secure Contexts (HTTPS or localhost). When running the app in a development environment or self-hosted setup accessed via a local IP address, the browser disables this API, resulting in the following error:

Uncaught TypeError: crypto.randomUUID is not a function
    at createOptimisticMessage (chat-screen-utils.ts:14:27)
    ...

The Fix

I added a randomUUID helper function in src/lib/utils.ts that:

  1. Checks if window.crypto.randomUUID is available.
  2. Falls back to a math-based UUID v4 generator if running in an insecure context.
    I then replaced all direct usages of crypto.randomUUID() with this new helper in:
  • apps/webclaw/src/screens/chat/chat-screen.tsx
  • apps/webclaw/src/screens/chat/chat-screen-utils.ts
  • apps/webclaw/src/components/attachment-button.tsx

Type of Change

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)

How to Test

  1. Start the dev server (pnpm dev).
  2. Access the application using your machine's local LAN IP (e.g., http://192.168.x.x:3000) instead of localhost.
  3. Try to make a new session or chat with an existing session.
    Before fix:
  • The frontend page cannot make a new session or chat with old sessions.
  • The console logs the error: crypto.randomUUID is not a function.
    After fix:
  • New sessions function correctly.
  • Chatting within existing sessions works as expected.

return window.crypto.randomUUID()
}

// Fallback for insecure contexts (e.g. HTTP on LAN)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could we switch the fallback to use crypto.getRandomValues instead of Math.random?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants