@buoy-gg/core 7.0.21 → 7.0.23
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/bin/__tests__/buoyCli.test.ts +131 -0
- package/bin/buoy.js +299 -0
- package/lib/commonjs/Buoy.js +14 -0
- package/lib/commonjs/floatingMenu/FloatingDevTools.js +48 -10
- package/lib/commonjs/floatingMenu/ToolHost.js +5 -1
- package/lib/commonjs/floatingMenu/autoExternalSync.js +13 -7
- package/lib/commonjs/floatingMenu/externalSyncGate.js +49 -0
- package/lib/commonjs/floatingMenu/sync/appSyncAdapter.js +15 -2
- package/lib/commonjs/telemetry/installPing.js +124 -0
- package/lib/commonjs/version.js +18 -0
- package/lib/module/Buoy.js +13 -0
- package/lib/module/floatingMenu/FloatingDevTools.js +48 -10
- package/lib/module/floatingMenu/ToolHost.js +5 -1
- package/lib/module/floatingMenu/autoExternalSync.js +13 -7
- package/lib/module/floatingMenu/externalSyncGate.js +44 -0
- package/lib/module/floatingMenu/sync/appSyncAdapter.js +16 -3
- package/lib/module/telemetry/installPing.js +120 -0
- package/lib/module/version.js +14 -0
- package/lib/typescript/commonjs/Buoy.d.ts +14 -0
- package/lib/typescript/commonjs/Buoy.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts +15 -0
- package/lib/typescript/commonjs/floatingMenu/FloatingDevTools.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts +7 -1
- package/lib/typescript/commonjs/floatingMenu/ToolHost.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts +28 -2
- package/lib/typescript/commonjs/floatingMenu/autoExternalSync.d.ts.map +1 -1
- package/lib/typescript/commonjs/floatingMenu/externalSyncGate.d.ts +30 -0
- package/lib/typescript/commonjs/floatingMenu/externalSyncGate.d.ts.map +1 -0
- package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts +2 -0
- package/lib/typescript/commonjs/floatingMenu/sync/appSyncAdapter.d.ts.map +1 -1
- package/lib/typescript/commonjs/telemetry/installPing.d.ts +37 -0
- package/lib/typescript/commonjs/telemetry/installPing.d.ts.map +1 -0
- package/lib/typescript/commonjs/version.d.ts +13 -0
- package/lib/typescript/commonjs/version.d.ts.map +1 -0
- package/lib/typescript/module/Buoy.d.ts +14 -0
- package/lib/typescript/module/Buoy.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts +15 -0
- package/lib/typescript/module/floatingMenu/FloatingDevTools.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/ToolHost.d.ts +7 -1
- package/lib/typescript/module/floatingMenu/ToolHost.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts +28 -2
- package/lib/typescript/module/floatingMenu/autoExternalSync.d.ts.map +1 -1
- package/lib/typescript/module/floatingMenu/externalSyncGate.d.ts +30 -0
- package/lib/typescript/module/floatingMenu/externalSyncGate.d.ts.map +1 -0
- package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts +2 -0
- package/lib/typescript/module/floatingMenu/sync/appSyncAdapter.d.ts.map +1 -1
- package/lib/typescript/module/telemetry/installPing.d.ts +37 -0
- package/lib/typescript/module/telemetry/installPing.d.ts.map +1 -0
- package/lib/typescript/module/version.d.ts +13 -0
- package/lib/typescript/module/version.d.ts.map +1 -0
- package/package.json +9 -5
|
@@ -19,7 +19,21 @@ export interface BuoyConfig {
|
|
|
19
19
|
* Pass empty string or omit to clear cached license and use free mode
|
|
20
20
|
*/
|
|
21
21
|
licenseKey?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Set `false` to disable the anonymous install ping.
|
|
24
|
+
*
|
|
25
|
+
* Buoy sends one ping per day, in development only, carrying a random
|
|
26
|
+
* install id, the Buoy version, your platform, and your license tier —
|
|
27
|
+
* no project, app, or tool data. It exists so we can tell how many
|
|
28
|
+
* installs never claim an account; it is the only way to measure that,
|
|
29
|
+
* since a license server can only ever see keys that already exist.
|
|
30
|
+
*
|
|
31
|
+
* Details: https://buoy.gg/docs/telemetry
|
|
32
|
+
*/
|
|
33
|
+
telemetry?: boolean;
|
|
22
34
|
}
|
|
35
|
+
/** Whether the anonymous install ping is allowed to fire. */
|
|
36
|
+
export declare function isTelemetryEnabled(): boolean;
|
|
23
37
|
/**
|
|
24
38
|
* Buoy SDK namespace
|
|
25
39
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Buoy.d.ts","sourceRoot":"","sources":["../../../src/Buoy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;iBACU,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Buoy.d.ts","sourceRoot":"","sources":["../../../src/Buoy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAQD,6DAA6D;AAC7D,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;iBACU,UAAU,GAAG,IAAI;IAoB9B;;;;;;;;;;;;OAYG;sBACqB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD;;OAEG;aACM,OAAO;IAIhB;;OAEG;;IAKH;;;OAGG;uBACsB,OAAO,CAAC,IAAI,CAAC;CAGvC,CAAC;AAGF,eAAe,IAAI,CAAC"}
|
|
@@ -247,6 +247,21 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
|
|
|
247
247
|
* ```tsx
|
|
248
248
|
* <FloatingDevTools externalSync={{ deviceName: "My App (ios)" }} />
|
|
249
249
|
* ```
|
|
250
|
+
*
|
|
251
|
+
* **Release builds** (`__DEV__ === false`) never sync unless the app asks
|
|
252
|
+
* for it: set `enableInRelease` and hold a real Pro license. Profiling a
|
|
253
|
+
* release build on a physical iOS device also needs an explicit
|
|
254
|
+
* `socketURL`, since there is no Metro host to derive one from.
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* ```tsx
|
|
258
|
+
* <FloatingDevTools
|
|
259
|
+
* externalSync={{
|
|
260
|
+
* enableInRelease: true,
|
|
261
|
+
* socketURL: "http://192.168.1.20:42831", // LAN IP for iOS devices
|
|
262
|
+
* }}
|
|
263
|
+
* />
|
|
264
|
+
* ```
|
|
250
265
|
*/
|
|
251
266
|
externalSync?: boolean | ExternalSyncOptions;
|
|
252
267
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAM5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,0NAe9B,qBAAqB,6BA0XvB,CAAC"}
|
|
@@ -32,8 +32,14 @@ export interface ToolHostContextValue {
|
|
|
32
32
|
isSearchActive: boolean;
|
|
33
33
|
/** Close and clear the header search. */
|
|
34
34
|
clearSearch: () => void;
|
|
35
|
-
/** Close this tool. */
|
|
35
|
+
/** Close this tool — the instance and its state go away. */
|
|
36
36
|
close: () => void;
|
|
37
|
+
/**
|
|
38
|
+
* Hide this tool without tearing it down: it goes to the minimized dock
|
|
39
|
+
* and comes back with its state intact. What a tool wants after finishing
|
|
40
|
+
* a job the user opened it to do.
|
|
41
|
+
*/
|
|
42
|
+
minimize: () => void;
|
|
37
43
|
/** Show a transient toast inside the tool modal. */
|
|
38
44
|
showToast: (message: string, type?: ToolToastType) => void;
|
|
39
45
|
/** Low-level header override setter — prefer `useToolHeader`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolHost.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/ToolHost.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,EAQZ,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"ToolHost.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/ToolHost.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,EAQZ,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,oDAAoD;IACpD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,iEAAiE;IACjE,iBAAiB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,oBAAoB,CAElD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,EACnC,IAAI,EAAE,cAAc,QASrB;AAiDD,UAAU,mBAAmB;IAC3B,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAQD,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,SAAS,GACV,EAAE,mBAAmB,qBA0HrB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { EnvVarConfig } from "./FloatingDevTools";
|
|
2
2
|
import type { InstalledApp } from "./types";
|
|
3
|
+
import type { BuoyTier } from "@buoy-gg/license";
|
|
3
4
|
/** Whether zero-config sync can run (the external-sync package is installed). */
|
|
4
5
|
export declare function isExternalSyncAvailable(): boolean;
|
|
5
6
|
export interface ExternalSyncOptions {
|
|
@@ -15,6 +16,25 @@ export interface ExternalSyncOptions {
|
|
|
15
16
|
deviceName?: string;
|
|
16
17
|
/** Stable device identity across restarts. @default "<app-slug>-<platform>" */
|
|
17
18
|
deviceId?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Allow this build to dial the broker when `__DEV__` is false (a release /
|
|
21
|
+
* production JS bundle). OFF by default: a shipped app must never open a
|
|
22
|
+
* socket to a dev machine on an end user's phone.
|
|
23
|
+
*
|
|
24
|
+
* Turn it on for builds YOU profile — a local release build, an internal
|
|
25
|
+
* TestFlight/EAS build, a field build that ships headless. It additionally
|
|
26
|
+
* requires a real Pro license; without one nothing renders in release
|
|
27
|
+
* anyway.
|
|
28
|
+
*
|
|
29
|
+
* There is no Metro server in a release bundle, so the broker host can't be
|
|
30
|
+
* derived and `socketURL` falls back to `http://localhost:42831`. That is
|
|
31
|
+
* already correct for simulators/emulators and for Android over USB
|
|
32
|
+
* (`adb reverse tcp:42831 tcp:42831`) — pass `socketURL` explicitly for a
|
|
33
|
+
* physical iOS device, or any broker on another machine.
|
|
34
|
+
*
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
enableInRelease?: boolean;
|
|
18
38
|
/** @default false */
|
|
19
39
|
enableLogs?: boolean;
|
|
20
40
|
}
|
|
@@ -24,7 +44,13 @@ interface AutoExternalSyncProps {
|
|
|
24
44
|
requiredEnvVars?: EnvVarConfig[];
|
|
25
45
|
/** Pro status, forwarded into the handshake so the dashboard can adopt it. */
|
|
26
46
|
isPro?: boolean;
|
|
27
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* The device's access tier. Sent alongside `isPro` so the dashboard can tell
|
|
49
|
+
* a signed-in free user apart from an anonymous one — `isPro` alone collapses
|
|
50
|
+
* both to false.
|
|
51
|
+
*/
|
|
52
|
+
tier?: BuoyTier;
|
|
53
|
+
/** License key, forwarded into the handshake alongside `isPro`. */
|
|
28
54
|
licenseKey?: string | null;
|
|
29
55
|
/**
|
|
30
56
|
* Custom tools (from FloatingDevTools' `apps`) that declared a `sync`
|
|
@@ -33,6 +59,6 @@ interface AutoExternalSyncProps {
|
|
|
33
59
|
*/
|
|
34
60
|
customApps?: InstalledApp[];
|
|
35
61
|
}
|
|
36
|
-
export declare function AutoExternalSync({ options, requiredEnvVars, isPro, licenseKey, customApps, }: AutoExternalSyncProps): null;
|
|
62
|
+
export declare function AutoExternalSync({ options, requiredEnvVars, isPro, tier, licenseKey, customApps, }: AutoExternalSyncProps): null;
|
|
37
63
|
export {};
|
|
38
64
|
//# sourceMappingURL=autoExternalSync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA4IjD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,EACf,KAAK,EACL,IAAI,EACJ,UAAU,EACV,UAAU,GACX,EAAE,qBAAqB,QAsIvB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decides whether FloatingDevTools mounts <AutoExternalSync /> — i.e. whether
|
|
3
|
+
* this build is allowed to dial the Buoy Desktop broker.
|
|
4
|
+
*
|
|
5
|
+
* Kept as a pure function in its own module (no react-native / no guarded
|
|
6
|
+
* requires) so the rule is unit-testable: the gate used to be an inline
|
|
7
|
+
* `isDevelopment && ...` in JSX, which silently made release builds unable to
|
|
8
|
+
* reach the desktop dashboard or MCP with no way to opt in from app code.
|
|
9
|
+
*
|
|
10
|
+
* The rule has two halves that must BOTH hold in a release build, because a
|
|
11
|
+
* shipped app must never contact a broker on an end user's device:
|
|
12
|
+
* 1. a real Pro license (never the Weekend Pass — see useProAccess), and
|
|
13
|
+
* 2. an EXPLICIT opt-in from app code (`externalSync.enableInRelease`).
|
|
14
|
+
* Dev builds keep the zero-config behavior: sync is on unless turned off.
|
|
15
|
+
*/
|
|
16
|
+
import type { ExternalSyncOptions } from "./autoExternalSync";
|
|
17
|
+
export interface ExternalSyncGateInput {
|
|
18
|
+
/** Resolved `__DEV__` for this bundle. */
|
|
19
|
+
isDevelopment: boolean;
|
|
20
|
+
/** Real (non-Weekend-Pass) Pro license, from useProAccess(). */
|
|
21
|
+
isLicensed: boolean;
|
|
22
|
+
/** The `externalSync` prop exactly as FloatingDevTools received it. */
|
|
23
|
+
externalSync: boolean | ExternalSyncOptions | undefined;
|
|
24
|
+
/** Whether @buoy-gg/external-sync is installed (isExternalSyncAvailable()). */
|
|
25
|
+
isAvailable: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** The options object from the prop, or undefined when it's a boolean. */
|
|
28
|
+
export declare function externalSyncOptions(externalSync: boolean | ExternalSyncOptions | undefined): ExternalSyncOptions | undefined;
|
|
29
|
+
export declare function shouldMountExternalSync({ isDevelopment, isLicensed, externalSync, isAvailable, }: ExternalSyncGateInput): boolean;
|
|
30
|
+
//# sourceMappingURL=externalSyncGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalSyncGate.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/externalSyncGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,aAAa,EAAE,OAAO,CAAC;IACvB,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,YAAY,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACxD,+EAA+E;IAC/E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,GACtD,mBAAmB,GAAG,SAAS,CAIjC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,EAAE,qBAAqB,GAAG,OAAO,CAkBjC"}
|
|
@@ -2,6 +2,7 @@ export declare const appSyncAdapter: {
|
|
|
2
2
|
version: number;
|
|
3
3
|
getSnapshot: () => {
|
|
4
4
|
startedAt: number;
|
|
5
|
+
devServerOrigin: string | null;
|
|
5
6
|
reload: {
|
|
6
7
|
available: boolean;
|
|
7
8
|
strategy: import("@buoy-gg/shared-ui").ResolvedReloadStrategy | null;
|
|
@@ -17,6 +18,7 @@ export declare const appSyncAdapter: {
|
|
|
17
18
|
ping: () => {
|
|
18
19
|
ok: boolean;
|
|
19
20
|
startedAt: number;
|
|
21
|
+
devServerOrigin: string | null;
|
|
20
22
|
};
|
|
21
23
|
/**
|
|
22
24
|
* Reload the app's JS bundle: RN's `DevSettings.reload()` in dev builds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/sync/appSyncAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/sync/appSyncAdapter.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,cAAc;;;;;;;;;;2BAeF,MAAM,IAAI;;QAE/B;;;;WAIG;;;;;;QAMH;;;;;;;;;WASG;6BACkB,OAAO;;;;;;CAY/B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymous install ping.
|
|
3
|
+
*
|
|
4
|
+
* Answers the one question licensing data cannot: how many people run Buoy at
|
|
5
|
+
* all. Keygen sees every free and paid key, but by definition it cannot see an
|
|
6
|
+
* install that never claimed one — so without this, "what fraction of installs
|
|
7
|
+
* have an account" has no denominator.
|
|
8
|
+
*
|
|
9
|
+
* Constraints this is built to honor:
|
|
10
|
+
*
|
|
11
|
+
* - **Development only.** Never fires from a shipped app. Buoy is a developer
|
|
12
|
+
* tool; pinging from a release build would phone home from an end user's
|
|
13
|
+
* device — someone who never chose to use Buoy — which is not a trade we are
|
|
14
|
+
* willing to make for a metric.
|
|
15
|
+
* - **No PII, no fingerprint.** The install id is a random UUID minted here.
|
|
16
|
+
* It is not derived from hardware, account, project, or app identity, so it
|
|
17
|
+
* cannot be correlated to a person or joined against anything else we hold.
|
|
18
|
+
* - **No tool usage.** What you open and inspect stays on your machine, which
|
|
19
|
+
* is the whole security story for enterprise adoption. Only the four fields
|
|
20
|
+
* below ever leave.
|
|
21
|
+
* - **Silent and harmless.** Fire-and-forget, throttled to once a day, and
|
|
22
|
+
* every failure path is swallowed. It can never block, slow, or break an app.
|
|
23
|
+
*
|
|
24
|
+
* Opt out with `Buoy.init({ telemetry: false })`.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Send the ping if it is due. Safe to call on every mount: it is idempotent
|
|
28
|
+
* within a session, throttled to once a day across sessions, and resolves
|
|
29
|
+
* without throwing no matter what fails.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sendInstallPing(options: {
|
|
32
|
+
tier: "anonymous" | "free" | "pro";
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
/** Test seam: forget that a ping already went out this session. */
|
|
36
|
+
export declare function __resetInstallPingForTests(): void;
|
|
37
|
+
//# sourceMappingURL=installPing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installPing.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/installPing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA4DH;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwChB;AAED,mEAAmE;AACnE,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This package's published version.
|
|
3
|
+
*
|
|
4
|
+
* Hardcoded rather than read from package.json: `require("../package.json")`
|
|
5
|
+
* resolves to a different depth from `src/` than from the built `lib/`, and
|
|
6
|
+
* react-native-builder-bob (babel) has no build-time `define` the way tsup does
|
|
7
|
+
* for @buoy-gg/mcp.
|
|
8
|
+
*
|
|
9
|
+
* Drift is prevented by a test that fails when this disagrees with
|
|
10
|
+
* package.json, so a version bump that forgets this file cannot ship.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SDK_VERSION = "7.0.22";
|
|
13
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,WAAW,CAAC"}
|
|
@@ -19,7 +19,21 @@ export interface BuoyConfig {
|
|
|
19
19
|
* Pass empty string or omit to clear cached license and use free mode
|
|
20
20
|
*/
|
|
21
21
|
licenseKey?: string;
|
|
22
|
+
/**
|
|
23
|
+
* Set `false` to disable the anonymous install ping.
|
|
24
|
+
*
|
|
25
|
+
* Buoy sends one ping per day, in development only, carrying a random
|
|
26
|
+
* install id, the Buoy version, your platform, and your license tier —
|
|
27
|
+
* no project, app, or tool data. It exists so we can tell how many
|
|
28
|
+
* installs never claim an account; it is the only way to measure that,
|
|
29
|
+
* since a license server can only ever see keys that already exist.
|
|
30
|
+
*
|
|
31
|
+
* Details: https://buoy.gg/docs/telemetry
|
|
32
|
+
*/
|
|
33
|
+
telemetry?: boolean;
|
|
22
34
|
}
|
|
35
|
+
/** Whether the anonymous install ping is allowed to fire. */
|
|
36
|
+
export declare function isTelemetryEnabled(): boolean;
|
|
23
37
|
/**
|
|
24
38
|
* Buoy SDK namespace
|
|
25
39
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Buoy.d.ts","sourceRoot":"","sources":["../../../src/Buoy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;iBACU,UAAU,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"Buoy.d.ts","sourceRoot":"","sources":["../../../src/Buoy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,UAAU;IACzB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAQD,6DAA6D;AAC7D,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI;IACf;;;;;;;;;;;;;;;;;;;;OAoBG;iBACU,UAAU,GAAG,IAAI;IAoB9B;;;;;;;;;;;;OAYG;sBACqB,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;IAUrD;;OAEG;aACM,OAAO;IAIhB;;OAEG;;IAKH;;;OAGG;uBACsB,OAAO,CAAC,IAAI,CAAC;CAGvC,CAAC;AAGF,eAAe,IAAI,CAAC"}
|
|
@@ -247,6 +247,21 @@ export interface FloatingDevToolsProps extends Omit<FloatingMenuProps, "apps"> {
|
|
|
247
247
|
* ```tsx
|
|
248
248
|
* <FloatingDevTools externalSync={{ deviceName: "My App (ios)" }} />
|
|
249
249
|
* ```
|
|
250
|
+
*
|
|
251
|
+
* **Release builds** (`__DEV__ === false`) never sync unless the app asks
|
|
252
|
+
* for it: set `enableInRelease` and hold a real Pro license. Profiling a
|
|
253
|
+
* release build on a physical iOS device also needs an explicit
|
|
254
|
+
* `socketURL`, since there is no Metro host to derive one from.
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* ```tsx
|
|
258
|
+
* <FloatingDevTools
|
|
259
|
+
* externalSync={{
|
|
260
|
+
* enableInRelease: true,
|
|
261
|
+
* socketURL: "http://192.168.1.20:42831", // LAN IP for iOS devices
|
|
262
|
+
* }}
|
|
263
|
+
* />
|
|
264
|
+
* ```
|
|
250
265
|
*/
|
|
251
266
|
externalSync?: boolean | ExternalSyncOptions;
|
|
252
267
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"FloatingDevTools.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/FloatingDevTools.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAGpF,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAMtE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQ5C,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EAEvB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,oBAAoB,CAAC;AAM5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,GACpB,MAAM,GACN;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACD;IACE,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EACR,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,OAAO,GACP,KAAK,CAAC;IACV,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC1C;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAsB,SAAQ,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAC5E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,EAAE,YAAY,EAAE,CAAC;IAEtB;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IAEjC;;;;;;;;;;;;OAYG;IACH,mBAAmB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAEzC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAE3B;;;;;;;;;OASG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;;;;;;;;;;;;OAaG;IACH,oBAAoB,CAAC,EAAE,qBAAqB,CAAC;IAE7C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,EAAE,iBAAiB,CAAC;IAErC;;;;;;;;;;;;;;;;OAgBG;IACH,qBAAqB,CAAC,EAAE,OAAO,oBAAoB,EAAE,WAAW,EAAE,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,mBAAmB,CAAC,EAAE,CAAC,WAAW,EAAE,OAAO,oBAAoB,EAAE,WAAW,KAAK,IAAI,CAAC;IAEtF;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;;;;;;;;;;;;;;;OAkBG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,YAAY,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IAE7C;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqDG;AACH,eAAO,MAAM,gBAAgB,GAAI,0NAe9B,qBAAqB,6BA0XvB,CAAC"}
|
|
@@ -32,8 +32,14 @@ export interface ToolHostContextValue {
|
|
|
32
32
|
isSearchActive: boolean;
|
|
33
33
|
/** Close and clear the header search. */
|
|
34
34
|
clearSearch: () => void;
|
|
35
|
-
/** Close this tool. */
|
|
35
|
+
/** Close this tool — the instance and its state go away. */
|
|
36
36
|
close: () => void;
|
|
37
|
+
/**
|
|
38
|
+
* Hide this tool without tearing it down: it goes to the minimized dock
|
|
39
|
+
* and comes back with its state intact. What a tool wants after finishing
|
|
40
|
+
* a job the user opened it to do.
|
|
41
|
+
*/
|
|
42
|
+
minimize: () => void;
|
|
37
43
|
/** Show a transient toast inside the tool modal. */
|
|
38
44
|
showToast: (message: string, type?: ToolToastType) => void;
|
|
39
45
|
/** Low-level header override setter — prefer `useToolHeader`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToolHost.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/ToolHost.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,EAQZ,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"ToolHost.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/ToolHost.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,EAQZ,KAAK,cAAc,EACnB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAWf,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,+EAA+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAEzD,MAAM,WAAW,oBAAoB;IACnC,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,OAAO,CAAC;IACxB,yCAAyC;IACzC,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,oDAAoD;IACpD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3D,iEAAiE;IACjE,iBAAiB,EAAE,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAC;IACjE,2CAA2C;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,oBAAoB,CAElD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,kBAAkB,GAAG,IAAI,EACnC,IAAI,EAAE,cAAc,QASrB;AAiDD,UAAU,mBAAmB;IAC3B,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,EAAE,CAAC,UAAU,CAAC,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACrD,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAQD,wBAAgB,cAAc,CAAC,EAC7B,GAAG,EACH,MAAM,EACN,OAAO,EACP,MAAM,EACN,OAAO,EACP,UAAU,EACV,iBAAiB,EACjB,2BAA2B,EAC3B,SAAS,GACV,EAAE,mBAAmB,qBA0HrB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { EnvVarConfig } from "./FloatingDevTools";
|
|
2
2
|
import type { InstalledApp } from "./types";
|
|
3
|
+
import type { BuoyTier } from "@buoy-gg/license";
|
|
3
4
|
/** Whether zero-config sync can run (the external-sync package is installed). */
|
|
4
5
|
export declare function isExternalSyncAvailable(): boolean;
|
|
5
6
|
export interface ExternalSyncOptions {
|
|
@@ -15,6 +16,25 @@ export interface ExternalSyncOptions {
|
|
|
15
16
|
deviceName?: string;
|
|
16
17
|
/** Stable device identity across restarts. @default "<app-slug>-<platform>" */
|
|
17
18
|
deviceId?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Allow this build to dial the broker when `__DEV__` is false (a release /
|
|
21
|
+
* production JS bundle). OFF by default: a shipped app must never open a
|
|
22
|
+
* socket to a dev machine on an end user's phone.
|
|
23
|
+
*
|
|
24
|
+
* Turn it on for builds YOU profile — a local release build, an internal
|
|
25
|
+
* TestFlight/EAS build, a field build that ships headless. It additionally
|
|
26
|
+
* requires a real Pro license; without one nothing renders in release
|
|
27
|
+
* anyway.
|
|
28
|
+
*
|
|
29
|
+
* There is no Metro server in a release bundle, so the broker host can't be
|
|
30
|
+
* derived and `socketURL` falls back to `http://localhost:42831`. That is
|
|
31
|
+
* already correct for simulators/emulators and for Android over USB
|
|
32
|
+
* (`adb reverse tcp:42831 tcp:42831`) — pass `socketURL` explicitly for a
|
|
33
|
+
* physical iOS device, or any broker on another machine.
|
|
34
|
+
*
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
enableInRelease?: boolean;
|
|
18
38
|
/** @default false */
|
|
19
39
|
enableLogs?: boolean;
|
|
20
40
|
}
|
|
@@ -24,7 +44,13 @@ interface AutoExternalSyncProps {
|
|
|
24
44
|
requiredEnvVars?: EnvVarConfig[];
|
|
25
45
|
/** Pro status, forwarded into the handshake so the dashboard can adopt it. */
|
|
26
46
|
isPro?: boolean;
|
|
27
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* The device's access tier. Sent alongside `isPro` so the dashboard can tell
|
|
49
|
+
* a signed-in free user apart from an anonymous one — `isPro` alone collapses
|
|
50
|
+
* both to false.
|
|
51
|
+
*/
|
|
52
|
+
tier?: BuoyTier;
|
|
53
|
+
/** License key, forwarded into the handshake alongside `isPro`. */
|
|
28
54
|
licenseKey?: string | null;
|
|
29
55
|
/**
|
|
30
56
|
* Custom tools (from FloatingDevTools' `apps`) that declared a `sync`
|
|
@@ -33,6 +59,6 @@ interface AutoExternalSyncProps {
|
|
|
33
59
|
*/
|
|
34
60
|
customApps?: InstalledApp[];
|
|
35
61
|
}
|
|
36
|
-
export declare function AutoExternalSync({ options, requiredEnvVars, isPro, licenseKey, customApps, }: AutoExternalSyncProps): null;
|
|
62
|
+
export declare function AutoExternalSync({ options, requiredEnvVars, isPro, tier, licenseKey, customApps, }: AutoExternalSyncProps): null;
|
|
37
63
|
export {};
|
|
38
64
|
//# sourceMappingURL=autoExternalSync.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"autoExternalSync.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/autoExternalSync.tsx"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA4IjD,iFAAiF;AACjF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;;;;;OAiBG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,qBAAqB;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAuBD,UAAU,qBAAqB;IAC7B,OAAO,CAAC,EAAE,mBAAmB,CAAC;IAC9B,6EAA6E;IAC7E,eAAe,CAAC,EAAE,YAAY,EAAE,CAAC;IACjC,8EAA8E;IAC9E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;CAC7B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,OAAO,EACP,eAAe,EACf,KAAK,EACL,IAAI,EACJ,UAAU,EACV,UAAU,GACX,EAAE,qBAAqB,QAsIvB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decides whether FloatingDevTools mounts <AutoExternalSync /> — i.e. whether
|
|
3
|
+
* this build is allowed to dial the Buoy Desktop broker.
|
|
4
|
+
*
|
|
5
|
+
* Kept as a pure function in its own module (no react-native / no guarded
|
|
6
|
+
* requires) so the rule is unit-testable: the gate used to be an inline
|
|
7
|
+
* `isDevelopment && ...` in JSX, which silently made release builds unable to
|
|
8
|
+
* reach the desktop dashboard or MCP with no way to opt in from app code.
|
|
9
|
+
*
|
|
10
|
+
* The rule has two halves that must BOTH hold in a release build, because a
|
|
11
|
+
* shipped app must never contact a broker on an end user's device:
|
|
12
|
+
* 1. a real Pro license (never the Weekend Pass — see useProAccess), and
|
|
13
|
+
* 2. an EXPLICIT opt-in from app code (`externalSync.enableInRelease`).
|
|
14
|
+
* Dev builds keep the zero-config behavior: sync is on unless turned off.
|
|
15
|
+
*/
|
|
16
|
+
import type { ExternalSyncOptions } from "./autoExternalSync";
|
|
17
|
+
export interface ExternalSyncGateInput {
|
|
18
|
+
/** Resolved `__DEV__` for this bundle. */
|
|
19
|
+
isDevelopment: boolean;
|
|
20
|
+
/** Real (non-Weekend-Pass) Pro license, from useProAccess(). */
|
|
21
|
+
isLicensed: boolean;
|
|
22
|
+
/** The `externalSync` prop exactly as FloatingDevTools received it. */
|
|
23
|
+
externalSync: boolean | ExternalSyncOptions | undefined;
|
|
24
|
+
/** Whether @buoy-gg/external-sync is installed (isExternalSyncAvailable()). */
|
|
25
|
+
isAvailable: boolean;
|
|
26
|
+
}
|
|
27
|
+
/** The options object from the prop, or undefined when it's a boolean. */
|
|
28
|
+
export declare function externalSyncOptions(externalSync: boolean | ExternalSyncOptions | undefined): ExternalSyncOptions | undefined;
|
|
29
|
+
export declare function shouldMountExternalSync({ isDevelopment, isLicensed, externalSync, isAvailable, }: ExternalSyncGateInput): boolean;
|
|
30
|
+
//# sourceMappingURL=externalSyncGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"externalSyncGate.d.ts","sourceRoot":"","sources":["../../../../src/floatingMenu/externalSyncGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,WAAW,qBAAqB;IACpC,0CAA0C;IAC1C,aAAa,EAAE,OAAO,CAAC;IACvB,gEAAgE;IAChE,UAAU,EAAE,OAAO,CAAC;IACpB,uEAAuE;IACvE,YAAY,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,CAAC;IACxD,+EAA+E;IAC/E,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CACjC,YAAY,EAAE,OAAO,GAAG,mBAAmB,GAAG,SAAS,GACtD,mBAAmB,GAAG,SAAS,CAIjC;AAED,wBAAgB,uBAAuB,CAAC,EACtC,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,GACZ,EAAE,qBAAqB,GAAG,OAAO,CAkBjC"}
|
|
@@ -2,6 +2,7 @@ export declare const appSyncAdapter: {
|
|
|
2
2
|
version: number;
|
|
3
3
|
getSnapshot: () => {
|
|
4
4
|
startedAt: number;
|
|
5
|
+
devServerOrigin: string | null;
|
|
5
6
|
reload: {
|
|
6
7
|
available: boolean;
|
|
7
8
|
strategy: import("@buoy-gg/shared-ui").ResolvedReloadStrategy | null;
|
|
@@ -17,6 +18,7 @@ export declare const appSyncAdapter: {
|
|
|
17
18
|
ping: () => {
|
|
18
19
|
ok: boolean;
|
|
19
20
|
startedAt: number;
|
|
21
|
+
devServerOrigin: string | null;
|
|
20
22
|
};
|
|
21
23
|
/**
|
|
22
24
|
* Reload the app's JS bundle: RN's `DevSettings.reload()` in dev builds,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/sync/appSyncAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../../src/floatingMenu/sync/appSyncAdapter.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,cAAc;;;;;;;;;;2BAeF,MAAM,IAAI;;QAE/B;;;;WAIG;;;;;;QAMH;;;;;;;;;WASG;6BACkB,OAAO;;;;;;CAY/B,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anonymous install ping.
|
|
3
|
+
*
|
|
4
|
+
* Answers the one question licensing data cannot: how many people run Buoy at
|
|
5
|
+
* all. Keygen sees every free and paid key, but by definition it cannot see an
|
|
6
|
+
* install that never claimed one — so without this, "what fraction of installs
|
|
7
|
+
* have an account" has no denominator.
|
|
8
|
+
*
|
|
9
|
+
* Constraints this is built to honor:
|
|
10
|
+
*
|
|
11
|
+
* - **Development only.** Never fires from a shipped app. Buoy is a developer
|
|
12
|
+
* tool; pinging from a release build would phone home from an end user's
|
|
13
|
+
* device — someone who never chose to use Buoy — which is not a trade we are
|
|
14
|
+
* willing to make for a metric.
|
|
15
|
+
* - **No PII, no fingerprint.** The install id is a random UUID minted here.
|
|
16
|
+
* It is not derived from hardware, account, project, or app identity, so it
|
|
17
|
+
* cannot be correlated to a person or joined against anything else we hold.
|
|
18
|
+
* - **No tool usage.** What you open and inspect stays on your machine, which
|
|
19
|
+
* is the whole security story for enterprise adoption. Only the four fields
|
|
20
|
+
* below ever leave.
|
|
21
|
+
* - **Silent and harmless.** Fire-and-forget, throttled to once a day, and
|
|
22
|
+
* every failure path is swallowed. It can never block, slow, or break an app.
|
|
23
|
+
*
|
|
24
|
+
* Opt out with `Buoy.init({ telemetry: false })`.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Send the ping if it is due. Safe to call on every mount: it is idempotent
|
|
28
|
+
* within a session, throttled to once a day across sessions, and resolves
|
|
29
|
+
* without throwing no matter what fails.
|
|
30
|
+
*/
|
|
31
|
+
export declare function sendInstallPing(options: {
|
|
32
|
+
tier: "anonymous" | "free" | "pro";
|
|
33
|
+
enabled: boolean;
|
|
34
|
+
}): Promise<void>;
|
|
35
|
+
/** Test seam: forget that a ping already went out this session. */
|
|
36
|
+
export declare function __resetInstallPingForTests(): void;
|
|
37
|
+
//# sourceMappingURL=installPing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"installPing.d.ts","sourceRoot":"","sources":["../../../../src/telemetry/installPing.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AA4DH;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE;IAC7C,IAAI,EAAE,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwChB;AAED,mEAAmE;AACnE,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This package's published version.
|
|
3
|
+
*
|
|
4
|
+
* Hardcoded rather than read from package.json: `require("../package.json")`
|
|
5
|
+
* resolves to a different depth from `src/` than from the built `lib/`, and
|
|
6
|
+
* react-native-builder-bob (babel) has no build-time `define` the way tsup does
|
|
7
|
+
* for @buoy-gg/mcp.
|
|
8
|
+
*
|
|
9
|
+
* Drift is prevented by a test that fails when this disagrees with
|
|
10
|
+
* package.json, so a version bump that forgets this file cannot ship.
|
|
11
|
+
*/
|
|
12
|
+
export declare const SDK_VERSION = "7.0.22";
|
|
13
|
+
//# sourceMappingURL=version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,WAAW,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/core",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.23",
|
|
4
4
|
"description": "Buoy devtools for React Native — a floating in-app dev menu; every tool streams live to your phone, desktop, and AI agent.",
|
|
5
5
|
"main": "lib/commonjs/index.js",
|
|
6
6
|
"module": "lib/module/index.js",
|
|
@@ -32,14 +32,15 @@
|
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
"files": [
|
|
35
|
+
"bin",
|
|
35
36
|
"lib"
|
|
36
37
|
],
|
|
37
38
|
"sideEffects": false,
|
|
38
39
|
"dependencies": {
|
|
39
|
-
"@buoy-gg/shared-ui": "^7.0.
|
|
40
|
-
"@buoy-gg/license": "^7.0.
|
|
41
|
-
"@buoy-gg/floating-tools-core": "^7.0.
|
|
42
|
-
"@buoy-gg/floating-tools-react": "^7.0.
|
|
40
|
+
"@buoy-gg/shared-ui": "^7.0.23",
|
|
41
|
+
"@buoy-gg/license": "^7.0.23",
|
|
42
|
+
"@buoy-gg/floating-tools-core": "^7.0.23",
|
|
43
|
+
"@buoy-gg/floating-tools-react": "^7.0.23"
|
|
43
44
|
},
|
|
44
45
|
"peerDependencies": {
|
|
45
46
|
"react": "*",
|
|
@@ -100,6 +101,9 @@
|
|
|
100
101
|
"developer-menu",
|
|
101
102
|
"in-app-devtools"
|
|
102
103
|
],
|
|
104
|
+
"bin": {
|
|
105
|
+
"buoy": "bin/buoy.js"
|
|
106
|
+
},
|
|
103
107
|
"scripts": {
|
|
104
108
|
"build": "bob build",
|
|
105
109
|
"typecheck": "tsc --noEmit",
|