From 1d5a9efa175bb5c8960c387442f4a7ce611a09b9 Mon Sep 17 00:00:00 2001 From: David Sheldrick Date: Fri, 1 Mar 2024 15:34:16 +0000 Subject: [PATCH] [bugfix] Avoid randomness at init time to allow running on cloudflare. (#3016) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Describe what your pull request does. If appropriate, add GIFs or images showing the before and after. Follow up to #2987 ### Change Type - [x] `patch` — Bug fix ### Release Notes - Prevent using randomness API at init time, to allow importing the tldraw package in a cloudflare worker. --- .../editor/src/lib/config/TLSessionStateSnapshot.ts | 5 +++-- packages/editor/src/lib/config/TLUserPreferences.ts | 12 +++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/packages/editor/src/lib/config/TLSessionStateSnapshot.ts b/packages/editor/src/lib/config/TLSessionStateSnapshot.ts index cd309f1d9..a3315feda 100644 --- a/packages/editor/src/lib/config/TLSessionStateSnapshot.ts +++ b/packages/editor/src/lib/config/TLSessionStateSnapshot.ts @@ -50,8 +50,9 @@ function iOS() { * A string that is unique per browser tab * @public */ -export const TAB_ID: string = - window?.[tabIdKey] ?? window?.sessionStorage[tabIdKey] ?? `TLDRAW_INSTANCE_STATE_V1_` + uniqueId() +export const TAB_ID: string = window + ? window[tabIdKey] ?? window.sessionStorage[tabIdKey] ?? `TLDRAW_INSTANCE_STATE_V1_` + uniqueId() + : '' if (window) { window[tabIdKey] = TAB_ID if (iOS()) { diff --git a/packages/editor/src/lib/config/TLUserPreferences.ts b/packages/editor/src/lib/config/TLUserPreferences.ts index 1ad2925c6..8c6cf55ad 100644 --- a/packages/editor/src/lib/config/TLUserPreferences.ts +++ b/packages/editor/src/lib/config/TLUserPreferences.ts @@ -240,18 +240,24 @@ const channel = channel?.addEventListener('message', (e) => { const data = e.data as undefined | UserChangeBroadcastMessage - if (data?.type === broadcastEventKey && data?.origin !== broadcastOrigin) { + if (data?.type === broadcastEventKey && data?.origin !== getBroadcastOrigin()) { globalUserPreferences.set(migrateUserPreferences(data.data)) } }) -const broadcastOrigin = uniqueId() +let _broadcastOrigin = null as null | string +function getBroadcastOrigin() { + if (_broadcastOrigin === null) { + _broadcastOrigin = uniqueId() + } + return _broadcastOrigin +} const broadcastEventKey = 'tldraw-user-preferences-change' as const function broadcastUserPreferencesChange() { channel?.postMessage({ type: broadcastEventKey, - origin: broadcastOrigin, + origin: getBroadcastOrigin(), data: { user: getUserPreferences(), version: userMigrations.currentVersion,