Skip to content

fix(partysocket): avoid module-scope random default#397

Merged
threepointone merged 2 commits into
cloudflare:mainfrom
agcty:fix/partysocket-worker-global-random
May 11, 2026
Merged

fix(partysocket): avoid module-scope random default#397
threepointone merged 2 commits into
cloudflare:mainfrom
agcty:fix/partysocket-worker-global-random

Conversation

@agcty
Copy link
Copy Markdown
Contributor

@agcty agcty commented May 3, 2026

Summary

Avoid calling Math.random() while partysocket/ws is imported by replacing the module-scope randomized default minReconnectionDelay with the deterministic midpoint of the previous range.

This keeps the public minReconnectionDelay option unchanged, while making the default safe for Worker/server runtimes that reject random-value generation during module evaluation.

Why

Cloudflare Workers disallow random value generation in global scope. In SSR/RSC environments running inside Workerd, importing client component trees can evaluate partysocket/ws on the server, which currently trips that restriction via the top-level default object.

Tests

  • npx oxfmt --check packages/partysocket/src/ws.ts packages/partysocket/src/tests/module-scope.test.ts
  • npm run check:test -w partysocket -- src/tests/module-scope.test.ts
  • npm run check:test -w partysocket
  • npm run build -w partysocket

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 3, 2026

🦋 Changeset detected

Latest commit: bf56dce

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
partysocket Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@threepointone
Copy link
Copy Markdown
Collaborator

good catch, thanks

@pkg-pr-new
Copy link
Copy Markdown

pkg-pr-new Bot commented May 11, 2026

Open in StackBlitz

hono-party

npm i https://pkg.pr.new/cloudflare/partykit/hono-party@397

partyfn

npm i https://pkg.pr.new/cloudflare/partykit/partyfn@397

partyserver

npm i https://pkg.pr.new/cloudflare/partykit/partyserver@397

partysocket

npm i https://pkg.pr.new/cloudflare/partykit/partysocket@397

partysub

npm i https://pkg.pr.new/cloudflare/partykit/partysub@397

partysync

npm i https://pkg.pr.new/cloudflare/partykit/partysync@397

partytracks

npm i https://pkg.pr.new/cloudflare/partykit/partytracks@397

partywhen

npm i https://pkg.pr.new/cloudflare/partykit/partywhen@397

y-partyserver

npm i https://pkg.pr.new/cloudflare/partykit/y-partyserver@397

commit: bf56dce

@threepointone threepointone merged commit 798aae5 into cloudflare:main May 11, 2026
3 checks passed
@github-actions github-actions Bot mentioned this pull request May 11, 2026
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