@buoy-gg/core 7.0.41 → 7.0.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -95
- package/bin/buoy.js +19 -340
- package/lib/commonjs/Buoy.js +1 -107
- package/lib/commonjs/browserRegister.js +1 -48
- package/lib/commonjs/browserRegister.server.js +1 -10
- package/lib/commonjs/earlyHookScript.js +1 -0
- package/lib/commonjs/earlyNetwork.js +1 -0
- package/lib/commonjs/floatingMenu/AppHost.js +1 -460
- package/lib/commonjs/floatingMenu/AppHost.web.js +1 -376
- package/lib/commonjs/floatingMenu/AppHostLogic.js +1 -50
- package/lib/commonjs/floatingMenu/AppIcon.js +1 -91
- package/lib/commonjs/floatingMenu/AppIcon.web.js +1 -53
- package/lib/commonjs/floatingMenu/BrowserToolRuntime.js +1 -150
- package/lib/commonjs/floatingMenu/DefaultConfigContext.js +1 -45
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.js +1 -18
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.shared.js +1 -1114
- package/lib/commonjs/floatingMenu/DevToolsSettingsModal.web.js +1 -48
- package/lib/commonjs/floatingMenu/DevToolsVisibilityContext.js +1 -49
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +1 -559
- package/lib/commonjs/floatingMenu/FloatingDevTools.web.js +1 -415
- package/lib/commonjs/floatingMenu/FloatingMenu.js +1 -371
- package/lib/commonjs/floatingMenu/MinimizedToolsContext.js +1 -274
- package/lib/commonjs/floatingMenu/MinimizedToolsStack.js +1 -288
- package/lib/commonjs/floatingMenu/MinimizedToolsStack.web.js +1 -377
- package/lib/commonjs/floatingMenu/ToggleStateManager.js +1 -36
- package/lib/commonjs/floatingMenu/ToolHost.js +1 -281
- package/lib/commonjs/floatingMenu/ToolOpenerBridge.js +1 -41
- package/lib/commonjs/floatingMenu/autoDiscoverPresets.js +1 -471
- package/lib/commonjs/floatingMenu/autoExternalSync.js +1 -443
- package/lib/commonjs/floatingMenu/defaultConfig.js +1 -167
- package/lib/commonjs/floatingMenu/deviceIdentity.js +1 -173
- package/lib/commonjs/floatingMenu/dial/DialDevTools.js +1 -904
- package/lib/commonjs/floatingMenu/dial/DialDevTools.web.js +1 -895
- package/lib/commonjs/floatingMenu/dial/DialHyperspace.js +1 -177
- package/lib/commonjs/floatingMenu/dial/DialIcon.js +1 -304
- package/lib/commonjs/floatingMenu/dial/DialPagination.js +1 -165
- package/lib/commonjs/floatingMenu/dial/DialSnow.js +1 -92
- package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.js +1 -246
- package/lib/commonjs/floatingMenu/dial/OnboardingTooltip.web.js +2 -147
- package/lib/commonjs/floatingMenu/dial/dialUsageStore.js +1 -93
- package/lib/commonjs/floatingMenu/dial/onboardingConstants.js +1 -42
- package/lib/commonjs/floatingMenu/dial/onboardingConstants.web.js +1 -42
- package/lib/commonjs/floatingMenu/externalSyncGate.js +1 -49
- package/lib/commonjs/floatingMenu/floatingTools.js +1 -42
- package/lib/commonjs/floatingMenu/floatingTools.web.js +1 -30
- package/lib/commonjs/floatingMenu/optionalRequire.js +1 -37
- package/lib/commonjs/floatingMenu/settingsBus.js +1 -12
- package/lib/commonjs/floatingMenu/sync/appSyncAdapter.js +1 -115
- package/lib/commonjs/floatingMenu/types.js +1 -5
- package/lib/commonjs/floatingMenu/useDesktopSyncStatus.js +1 -28
- package/lib/commonjs/floatingMenu/useDesktopSyncStatus.web.js +1 -14
- package/lib/commonjs/index.js +1 -291
- package/lib/commonjs/index.web.js +1 -241
- package/lib/commonjs/reactDevtoolsTypes.js +1 -1
- package/lib/commonjs/releaseOptIn.js +1 -0
- package/lib/commonjs/telemetry/installPing.js +1 -131
- package/lib/commonjs/toolkit.js +1 -584
- package/lib/commonjs/toolkitComponents.js +1 -241
- package/lib/commonjs/utils/autoDiscoverPresets.web.js +1 -46
- package/lib/commonjs/utils/createWebTool.js +1 -20
- package/lib/commonjs/utils/createWebTools.js +1 -30
- package/lib/commonjs/version.js +1 -18
- package/lib/module/Buoy.js +1 -102
- package/lib/module/browserRegister.js +1 -44
- package/lib/module/browserRegister.server.js +1 -6
- package/lib/module/earlyHookScript.js +1 -0
- package/lib/module/earlyNetwork.js +1 -0
- package/lib/module/floatingMenu/AppHost.js +1 -452
- package/lib/module/floatingMenu/AppHost.web.js +1 -368
- package/lib/module/floatingMenu/AppHostLogic.js +1 -45
- package/lib/module/floatingMenu/AppIcon.js +1 -84
- package/lib/module/floatingMenu/AppIcon.web.js +1 -47
- package/lib/module/floatingMenu/BrowserToolRuntime.js +1 -146
- package/lib/module/floatingMenu/DefaultConfigContext.js +1 -39
- package/lib/module/floatingMenu/DevToolsSettingsModal.js +1 -3
- package/lib/module/floatingMenu/DevToolsSettingsModal.shared.js +1 -1110
- package/lib/module/floatingMenu/DevToolsSettingsModal.web.js +1 -44
- package/lib/module/floatingMenu/DevToolsVisibilityContext.js +1 -44
- package/lib/module/floatingMenu/FloatingDevTools.js +1 -556
- package/lib/module/floatingMenu/FloatingDevTools.web.js +1 -412
- package/lib/module/floatingMenu/FloatingMenu.js +1 -366
- package/lib/module/floatingMenu/MinimizedToolsContext.js +1 -266
- package/lib/module/floatingMenu/MinimizedToolsStack.js +1 -285
- package/lib/module/floatingMenu/MinimizedToolsStack.web.js +1 -374
- package/lib/module/floatingMenu/ToggleStateManager.js +1 -32
- package/lib/module/floatingMenu/ToolHost.js +1 -273
- package/lib/module/floatingMenu/ToolOpenerBridge.js +1 -37
- package/lib/module/floatingMenu/autoDiscoverPresets.js +1 -467
- package/lib/module/floatingMenu/autoExternalSync.js +1 -436
- package/lib/module/floatingMenu/defaultConfig.js +1 -158
- package/lib/module/floatingMenu/deviceIdentity.js +1 -163
- package/lib/module/floatingMenu/dial/DialDevTools.js +1 -900
- package/lib/module/floatingMenu/dial/DialDevTools.web.js +1 -891
- package/lib/module/floatingMenu/dial/DialHyperspace.js +1 -173
- package/lib/module/floatingMenu/dial/DialIcon.js +1 -301
- package/lib/module/floatingMenu/dial/DialPagination.js +1 -160
- package/lib/module/floatingMenu/dial/DialSnow.js +1 -90
- package/lib/module/floatingMenu/dial/OnboardingTooltip.js +1 -240
- package/lib/module/floatingMenu/dial/OnboardingTooltip.web.js +2 -142
- package/lib/module/floatingMenu/dial/dialUsageStore.js +1 -85
- package/lib/module/floatingMenu/dial/onboardingConstants.js +1 -3
- package/lib/module/floatingMenu/dial/onboardingConstants.web.js +1 -3
- package/lib/module/floatingMenu/externalSyncGate.js +1 -44
- package/lib/module/floatingMenu/floatingTools.js +1 -27
- package/lib/module/floatingMenu/floatingTools.web.js +1 -3
- package/lib/module/floatingMenu/optionalRequire.js +1 -33
- package/lib/module/floatingMenu/settingsBus.js +1 -3
- package/lib/module/floatingMenu/sync/appSyncAdapter.js +1 -112
- package/lib/module/floatingMenu/types.js +1 -3
- package/lib/module/floatingMenu/useDesktopSyncStatus.js +1 -25
- package/lib/module/floatingMenu/useDesktopSyncStatus.web.js +1 -10
- package/lib/module/index.js +1 -41
- package/lib/module/index.web.js +1 -36
- package/lib/module/reactDevtoolsTypes.js +1 -1
- package/lib/module/releaseOptIn.js +1 -0
- package/lib/module/telemetry/installPing.js +1 -127
- package/lib/module/toolkit.js +1 -62
- package/lib/module/toolkitComponents.js +1 -230
- package/lib/module/utils/autoDiscoverPresets.web.js +1 -38
- package/lib/module/utils/createWebTool.js +1 -17
- package/lib/module/utils/createWebTools.js +1 -25
- package/lib/module/version.js +1 -14
- package/lib/typescript/commonjs/browserRegister.d.ts +9 -1
- package/lib/typescript/commonjs/browserRegister.server.d.ts +1 -0
- package/lib/typescript/commonjs/earlyHookScript.d.ts +12 -0
- package/lib/typescript/commonjs/earlyNetwork.d.ts +52 -0
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/commonjs/index.web.d.ts +1 -0
- package/lib/typescript/commonjs/releaseOptIn.d.ts +4 -0
- package/lib/typescript/commonjs/version.d.ts +1 -1
- package/lib/typescript/module/browserRegister.d.ts +9 -1
- package/lib/typescript/module/browserRegister.server.d.ts +1 -0
- package/lib/typescript/module/earlyHookScript.d.ts +12 -0
- package/lib/typescript/module/earlyNetwork.d.ts +52 -0
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts +1 -1
- package/lib/typescript/module/index.web.d.ts +1 -0
- package/lib/typescript/module/releaseOptIn.d.ts +4 -0
- package/lib/typescript/module/version.d.ts +1 -1
- package/lib/web/chunks/chunk-5SGL6QL4.mjs +1 -0
- package/lib/web/chunks/chunk-FROELTJH.mjs +1 -0
- package/lib/web/chunks/chunk-QZDVCMCT.mjs +1 -2
- package/lib/web/chunks/chunk-R7RGRTY5.mjs +1 -2
- package/lib/web/index.mjs +2 -3
- package/lib/web/register-server.mjs +1 -2
- package/lib/web/register.mjs +1 -2
- package/lib/web/toolkit.mjs +1 -2
- package/package.json +6 -9
- package/lib/typescript/commonjs/Buoy.d.ts.map +0 -1
- package/lib/typescript/commonjs/browserRegister.d.ts.map +0 -1
- package/lib/typescript/commonjs/browserRegister.server.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppHost.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppHost.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppHostLogic.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/AppIcon.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/BrowserToolRuntime.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.shared.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingMenu.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/ToggleStateManager.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/defaultConfig.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/deviceIdentity.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialIcon.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialPagination.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/DialSnow.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/externalSyncGate.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/floatingTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/floatingTools.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/optionalRequire.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/settingsBus.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/types.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
- package/lib/typescript/commonjs/floatingMenu/useDesktopSyncStatus.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/index.d.ts.map +0 -1
- package/lib/typescript/commonjs/index.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/reactDevtoolsTypes.d.ts.map +0 -1
- package/lib/typescript/commonjs/telemetry/installPing.d.ts.map +0 -1
- package/lib/typescript/commonjs/toolkit.d.ts.map +0 -1
- package/lib/typescript/commonjs/toolkitComponents.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/autoDiscoverPresets.web.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/createWebTool.d.ts.map +0 -1
- package/lib/typescript/commonjs/utils/createWebTools.d.ts.map +0 -1
- package/lib/typescript/commonjs/version.d.ts.map +0 -1
- package/lib/typescript/module/Buoy.d.ts.map +0 -1
- package/lib/typescript/module/browserRegister.d.ts.map +0 -1
- package/lib/typescript/module/browserRegister.server.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppHost.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppHost.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppHostLogic.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppIcon.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/AppIcon.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/BrowserToolRuntime.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DefaultConfigContext.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.shared.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsSettingsModal.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/DevToolsVisibilityContext.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/FloatingMenu.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/MinimizedToolsContext.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/MinimizedToolsStack.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/MinimizedToolsStack.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/ToggleStateManager.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/ToolHost.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/ToolOpenerBridge.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/autoDiscoverPresets.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/defaultConfig.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/deviceIdentity.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialDevTools.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialDevTools.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialHyperspace.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialIcon.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialPagination.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/DialSnow.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/OnboardingTooltip.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/dialUsageStore.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/onboardingConstants.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/dial/onboardingConstants.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/externalSyncGate.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/floatingTools.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/floatingTools.web.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/optionalRequire.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/settingsBus.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/types.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.d.ts.map +0 -1
- package/lib/typescript/module/floatingMenu/useDesktopSyncStatus.web.d.ts.map +0 -1
- package/lib/typescript/module/index.d.ts.map +0 -1
- package/lib/typescript/module/index.web.d.ts.map +0 -1
- package/lib/typescript/module/reactDevtoolsTypes.d.ts.map +0 -1
- package/lib/typescript/module/telemetry/installPing.d.ts.map +0 -1
- package/lib/typescript/module/toolkit.d.ts.map +0 -1
- package/lib/typescript/module/toolkitComponents.d.ts.map +0 -1
- package/lib/typescript/module/utils/autoDiscoverPresets.web.d.ts.map +0 -1
- package/lib/typescript/module/utils/createWebTool.d.ts.map +0 -1
- package/lib/typescript/module/utils/createWebTools.d.ts.map +0 -1
- package/lib/typescript/module/version.d.ts.map +0 -1
- package/lib/web/chunks/chunk-5NZOQR6Q.mjs +0 -2
- package/lib/web/chunks/chunk-CGDSLLZF.mjs +0 -2
- package/lib/web/chunks/chunk-DCJDUSNR.mjs +0 -2
- package/lib/web/chunks/chunk-IDSHFS6G.mjs +0 -2
- package/lib/web/chunks/chunk-JOAMJGCS.mjs +0 -2
- package/lib/web/chunks/chunk-KYKZ2N52.mjs +0 -2
- package/lib/web/chunks/chunk-NGM7JGGS.mjs +0 -2
- package/lib/web/chunks/chunk-Z3XWDDIO.mjs +0 -2
- package/lib/web/chunks/chunk-ZTGQ6TTY.mjs +0 -2
|
@@ -1,173 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.INSTALL_ID_LENGTH = void 0;
|
|
7
|
-
exports.buildDeviceIdentity = buildDeviceIdentity;
|
|
8
|
-
exports.generateInstallId = generateInstallId;
|
|
9
|
-
exports.getInstallId = getInstallId;
|
|
10
|
-
exports.loadInstallId = loadInstallId;
|
|
11
|
-
exports.resetInstallIdForTests = resetInstallIdForTests;
|
|
12
|
-
exports.useDeviceIdentity = useDeviceIdentity;
|
|
13
|
-
var _react = require("react");
|
|
14
|
-
var _reactNative = require("react-native");
|
|
15
|
-
var _sharedUi = require("@buoy-gg/shared-ui");
|
|
16
|
-
/**
|
|
17
|
-
* How a device introduces itself to the Buoy Desktop broker.
|
|
18
|
-
*
|
|
19
|
-
* The id used to be `<app-slug>-<platform>` — a BUILD identity, not a device
|
|
20
|
-
* identity. Every phone and simulator running the same app registered under
|
|
21
|
-
* the same id, and the broker (which deliberately lets one device hold
|
|
22
|
-
* several sockets for Fast Refresh) treated each newcomer as a reconnect and
|
|
23
|
-
* handed it the identity. Actions then landed on whichever device connected
|
|
24
|
-
* most recently, silently. See DEVICE_IDENTITY_COLLISION.md.
|
|
25
|
-
*
|
|
26
|
-
* Now the id carries a per-install tail minted once and persisted:
|
|
27
|
-
*
|
|
28
|
-
* deviceId = "<app-slug>-<platform>-<8 hex>" e.g. acme-app-ios-3f9a2c1d
|
|
29
|
-
* deviceName = "<App Name> (<hardware> · <last 4>)" e.g. Acme App (iPhone 17 Pro · 2c1d)
|
|
30
|
-
*
|
|
31
|
-
* The tail is what makes two devices on one build two devices. The name's
|
|
32
|
-
* hardware label comes from expo-constants' `deviceName` when available (the
|
|
33
|
-
* simulator's own name on a sim, "iPhone" on iOS 16+ hardware, the model on
|
|
34
|
-
* Android) and falls back to the platform; the 4-char tail is always on so
|
|
35
|
-
* two identical simulators never share a label.
|
|
36
|
-
*
|
|
37
|
-
* Persistence: native goes through shared's `persistentStorage` (file system
|
|
38
|
-
* → AsyncStorage → memory); web uses `sessionStorage` so every browser TAB
|
|
39
|
-
* is its own device — `localStorage` is shared across tabs and would collide
|
|
40
|
-
* exactly the way the old default did. The id does not survive a reinstall
|
|
41
|
-
* on purpose: it crosses an unauthenticated LAN socket, and deleting the app
|
|
42
|
-
* should reset it.
|
|
43
|
-
*
|
|
44
|
-
* An explicit `externalSync.deviceId` bypasses all of this; whoever pins an
|
|
45
|
-
* id owns its uniqueness.
|
|
46
|
-
*/
|
|
47
|
-
|
|
48
|
-
/** Minimal getItem/setItem surface, so storage can be injected in tests. */
|
|
49
|
-
|
|
50
|
-
const INSTALL_ID_LENGTH = exports.INSTALL_ID_LENGTH = 8;
|
|
51
|
-
|
|
52
|
-
/** 8 lowercase hex chars — short enough to read, random enough for a LAN. */
|
|
53
|
-
function generateInstallId() {
|
|
54
|
-
let out = "";
|
|
55
|
-
while (out.length < INSTALL_ID_LENGTH) {
|
|
56
|
-
out += (Math.random() * 16 | 0).toString(16);
|
|
57
|
-
}
|
|
58
|
-
return out;
|
|
59
|
-
}
|
|
60
|
-
function slugify(name) {
|
|
61
|
-
return name.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, "");
|
|
62
|
-
}
|
|
63
|
-
/** Pure: turns the inputs into the id/name pair the broker sees. */
|
|
64
|
-
function buildDeviceIdentity({
|
|
65
|
-
appName,
|
|
66
|
-
hardwareName,
|
|
67
|
-
platform,
|
|
68
|
-
installId,
|
|
69
|
-
deviceId
|
|
70
|
-
}) {
|
|
71
|
-
const slug = slugify(appName ?? "buoy") || "buoy";
|
|
72
|
-
const label = appName ?? "Buoy Device";
|
|
73
|
-
const hardware = hardwareName?.trim() || platform;
|
|
74
|
-
if (deviceId) {
|
|
75
|
-
// The app pinned its own id: it can also pin its own name, so keep the
|
|
76
|
-
// default name free of a tail that would refer to an id nobody sees.
|
|
77
|
-
return {
|
|
78
|
-
deviceId,
|
|
79
|
-
deviceName: `${label} (${hardware})`
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
const id = `${slug}-${platform}-${installId}`;
|
|
83
|
-
return {
|
|
84
|
-
deviceId: id,
|
|
85
|
-
deviceName: `${label} (${hardware} · ${installId.slice(-4)})`
|
|
86
|
-
};
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// Web: every tab is a device, so the id lives in the tab's sessionStorage.
|
|
90
|
-
function sessionStore() {
|
|
91
|
-
const g = globalThis;
|
|
92
|
-
try {
|
|
93
|
-
return g.sessionStorage ?? null;
|
|
94
|
-
} catch {
|
|
95
|
-
return null;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* The persisted per-install tail: read it, or mint and store it on the first
|
|
100
|
-
* dial. Storage failures degrade to a fresh in-memory id rather than blocking
|
|
101
|
-
* the socket — a per-launch id still beats the old colliding one.
|
|
102
|
-
*/
|
|
103
|
-
async function loadInstallId({
|
|
104
|
-
platform = _reactNative.Platform.OS,
|
|
105
|
-
store,
|
|
106
|
-
mint = generateInstallId
|
|
107
|
-
} = {}) {
|
|
108
|
-
const key = _sharedUi.devToolsStorageKeys.sync.deviceId();
|
|
109
|
-
const target = store === undefined ? platform === "web" ? sessionStore() : _sharedUi.persistentStorage : store;
|
|
110
|
-
if (!target) return mint();
|
|
111
|
-
try {
|
|
112
|
-
const existing = await target.getItem(key);
|
|
113
|
-
if (existing && existing.length > 0) return existing;
|
|
114
|
-
const fresh = mint();
|
|
115
|
-
await target.setItem(key, fresh);
|
|
116
|
-
return fresh;
|
|
117
|
-
} catch {
|
|
118
|
-
return mint();
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
let installIdPromise = null;
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Process-wide memo so every mount (and every Fast Refresh of the component
|
|
125
|
-
* that calls it) shares one storage round-trip and one id.
|
|
126
|
-
*/
|
|
127
|
-
function getInstallId() {
|
|
128
|
-
if (!installIdPromise) installIdPromise = loadInstallId();
|
|
129
|
-
return installIdPromise;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
/** Tests only. */
|
|
133
|
-
function resetInstallIdForTests() {
|
|
134
|
-
installIdPromise = null;
|
|
135
|
-
}
|
|
136
|
-
/**
|
|
137
|
-
* The identity to dial with. Null until the per-install id is read from
|
|
138
|
-
* storage (one round-trip on first mount; memoized process-wide after) —
|
|
139
|
-
* both sync hooks no-op on a null id, so the socket simply dials a beat
|
|
140
|
-
* later. An explicit `deviceId` skips the read entirely; an explicit
|
|
141
|
-
* `deviceName` is used verbatim.
|
|
142
|
-
*/
|
|
143
|
-
function useDeviceIdentity(options, env) {
|
|
144
|
-
const pinnedId = options?.deviceId;
|
|
145
|
-
const pinnedName = options?.deviceName;
|
|
146
|
-
const loadId = env.loadId ?? getInstallId;
|
|
147
|
-
const platform = env.platform ?? _reactNative.Platform.OS;
|
|
148
|
-
const [installId, setInstallId] = (0, _react.useState)(null);
|
|
149
|
-
(0, _react.useEffect)(() => {
|
|
150
|
-
if (pinnedId) return;
|
|
151
|
-
let cancelled = false;
|
|
152
|
-
loadId().then(id => {
|
|
153
|
-
if (!cancelled) setInstallId(id);
|
|
154
|
-
});
|
|
155
|
-
return () => {
|
|
156
|
-
cancelled = true;
|
|
157
|
-
};
|
|
158
|
-
}, [pinnedId, loadId]);
|
|
159
|
-
return (0, _react.useMemo)(() => {
|
|
160
|
-
if (!pinnedId && !installId) return null;
|
|
161
|
-
const identity = buildDeviceIdentity({
|
|
162
|
-
appName: env.appName,
|
|
163
|
-
hardwareName: env.hardwareName,
|
|
164
|
-
platform,
|
|
165
|
-
installId: installId ?? "",
|
|
166
|
-
deviceId: pinnedId
|
|
167
|
-
});
|
|
168
|
-
return pinnedName ? {
|
|
169
|
-
...identity,
|
|
170
|
-
deviceName: pinnedName
|
|
171
|
-
} : identity;
|
|
172
|
-
}, [pinnedId, pinnedName, installId, env.appName, env.hardwareName, platform]);
|
|
173
|
-
}
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.INSTALL_ID_LENGTH=void 0;exports.buildDeviceIdentity=buildDeviceIdentity;exports.generateInstallId=generateInstallId;exports.getInstallId=getInstallId;exports.loadInstallId=loadInstallId;exports.resetInstallIdForTests=resetInstallIdForTests;exports.useDeviceIdentity=useDeviceIdentity;var _react=require("react");var _reactNative=require("react-native");var _sharedUi=require("@buoy-gg/shared-ui");const INSTALL_ID_LENGTH=exports.INSTALL_ID_LENGTH=8;function generateInstallId(){let e="";while(e.length<INSTALL_ID_LENGTH){e+=(Math.random()*16|0).toString(16)}return e}function slugify(e){return e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")}function buildDeviceIdentity({appName:e,hardwareName:r,platform:t,installId:n,deviceId:a}){const l=slugify(e??"buoy")||"buoy";const s=e??"Buoy Device";const o=r?.trim()||t;if(a){return{deviceId:a,deviceName:`${s} (${o})`}}const i=`${l}-${t}-${n}`;return{deviceId:i,deviceName:`${s} (${o} \xB7 ${n.slice(-4)})`}}function sessionStore(){const e=globalThis;try{return e.sessionStorage??null}catch{return null}}async function loadInstallId({platform:e=_reactNative.Platform.OS,store:r,mint:t=generateInstallId}={}){const n=_sharedUi.devToolsStorageKeys.sync.deviceId();const a=r===void 0?e==="web"?sessionStore():_sharedUi.persistentStorage:r;if(!a)return t();try{const l=await a.getItem(n);if(l&&l.length>0)return l;const s=t();await a.setItem(n,s);return s}catch{return t()}}let installIdPromise=null;function getInstallId(){if(!installIdPromise)installIdPromise=loadInstallId();return installIdPromise}function resetInstallIdForTests(){installIdPromise=null}function useDeviceIdentity(e,r){const t=e?.deviceId;const n=e?.deviceName;const a=r.loadId??getInstallId;const l=r.platform??_reactNative.Platform.OS;const[s,o]=(0,_react.useState)(null);(0,_react.useEffect)(()=>{if(t)return;let i=false;a().then(c=>{if(!i)o(c)});return()=>{i=true}},[t,a]);return(0,_react.useMemo)(()=>{if(!t&&!s)return null;const i=buildDeviceIdentity({appName:r.appName,hardwareName:r.hardwareName,platform:l,installId:s??"",deviceId:t});return n?{...i,deviceName:n}:i},[t,n,s,r.appName,r.hardwareName,l])}
|