@buoy-gg/network 7.0.20 → 7.0.21

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 CHANGED
@@ -36,6 +36,7 @@ Want a different label or color? Build the tool with `createNetworkTool({ name,
36
36
  ## What you get
37
37
 
38
38
  - **Every request, zero config** — intercepts `fetch` and `XMLHttpRequest`, so fetch, axios, GraphQL clients, and gRPC-web all show up automatically.
39
+ - **Boot requests included** — interception installs at app launch (dev builds), so module-scope fetches, session bootstrap, and your first queries are captured even though they fired before any tool or dashboard was open.
39
40
  - **GraphQL gets special treatment** — operation names are extracted from queries, mutations, and subscriptions and shown with variables in arrow notation: `GetUser › 123`. No more guessing which `/graphql` request is which.
40
41
  - **Full request detail** — request/response headers, payloads, HTTP status, and duration for every call, with status-colored rows.
41
42
  - **Filter and search** — narrow by status code, HTTP method, or URL pattern; search captured events; pause/resume capture; clear history.
@@ -37,6 +37,13 @@ var _networkSavedStore = require("./networkSavedStore");
37
37
  * Callback type for full events array notifications
38
38
  */
39
39
 
40
+ /**
41
+ * Cap on raw events held in the boot buffer before the first consumer
42
+ * subscribes (request + response are separate raw events, so this is ~100
43
+ * requests). Old events are dropped first; a response whose request was
44
+ * evicted is simply ignored at flush (processNetworkEvent finds no match).
45
+ */
46
+ const BOOT_BUFFER_MAX = 200;
40
47
  class NetworkEventStore extends _sharedUi.BaseEventStore {
41
48
  pendingRequests = new Map();
42
49
  /**
@@ -48,6 +55,11 @@ class NetworkEventStore extends _sharedUi.BaseEventStore {
48
55
  */
49
56
  recentRequests = new Map();
50
57
  rawListenerUnsubscribe = null;
58
+ /** Raw events captured before the first consumer subscribed — see startBootCapture. */
59
+ bootBuffer = [];
60
+ bootBufferUnsubscribe = null;
61
+ /** Set by disableCapture (remote-mirror mode) — boot capture must never (re)start. */
62
+ mirrorMode = false;
51
63
  constructor() {
52
64
  super({
53
65
  storeName: "network",
@@ -55,6 +67,48 @@ class NetworkEventStore extends _sharedUi.BaseEventStore {
55
67
  });
56
68
  }
57
69
 
70
+ /**
71
+ * Install the interceptor NOW and buffer raw events until the first real
72
+ * consumer subscribes.
73
+ *
74
+ * Why: capture normally starts with the first subscriber — the Network modal
75
+ * opening, a dashboard watch, an MCP watch — which is long after the app's
76
+ * startup requests (module-scope fetches, session bootstrap, the first
77
+ * query) have already fired. Those were unrecoverable: by the time anything
78
+ * subscribed, boot traffic was gone. Called as a dev-only import-time side
79
+ * effect from the preset, this hooks fetch/XHR at bundle-eval and parks the
80
+ * raw events in a bounded buffer; `startCapturing` flushes them into the
81
+ * store in order, so every consumer sees boot requests too.
82
+ *
83
+ * If no consumer EVER subscribes, nothing is flushed — the buffer just sits
84
+ * bounded at BOOT_BUFFER_MAX raw events (an explicit user "capture off"
85
+ * state therefore never gains events it didn't ask for).
86
+ */
87
+ startBootCapture() {
88
+ if (this.mirrorMode || this.bootBufferUnsubscribe || this.isCapturing()) {
89
+ return;
90
+ }
91
+ const listener = (0, _networkListener.networkListener)();
92
+ if (!listener.isActive) {
93
+ listener.startListening();
94
+ }
95
+ this.bootBufferUnsubscribe = (0, _networkListener.addNetworkListener)(event => {
96
+ this.bootBuffer.push(event);
97
+ if (this.bootBuffer.length > BOOT_BUFFER_MAX) this.bootBuffer.shift();
98
+ });
99
+ }
100
+
101
+ /** Detach the boot-buffer listener; optionally hand back what it caught. */
102
+ takeBootBuffer() {
103
+ if (this.bootBufferUnsubscribe) {
104
+ this.bootBufferUnsubscribe();
105
+ this.bootBufferUnsubscribe = null;
106
+ }
107
+ const buffered = this.bootBuffer;
108
+ this.bootBuffer = [];
109
+ return buffered;
110
+ }
111
+
58
112
  /**
59
113
  * Start capturing network events
60
114
  */
@@ -66,6 +120,13 @@ class NetworkEventStore extends _sharedUi.BaseEventStore {
66
120
  listener.startListening();
67
121
  }
68
122
 
123
+ // Flush boot-buffered events (in capture order) BEFORE attaching the live
124
+ // listener: the boot listener is detached first, so no event can be seen
125
+ // by both. All synchronous — nothing interleaves.
126
+ for (const event of this.takeBootBuffer()) {
127
+ this.processNetworkEvent(event);
128
+ }
129
+
69
130
  // Add our listener to push raw events into the store
70
131
  if (!this.rawListenerUnsubscribe) {
71
132
  this.rawListenerUnsubscribe = (0, _networkListener.addNetworkListener)(event => {
@@ -91,6 +152,22 @@ class NetworkEventStore extends _sharedUi.BaseEventStore {
91
152
  }
92
153
  }
93
154
 
155
+ /**
156
+ * Remote-mirror mode (desktop dashboard): on top of the base behavior, tear
157
+ * down boot capture and drop its buffer — a mirror must never intercept its
158
+ * OWN process's traffic, and must never flush host requests into the
159
+ * device-event list it mirrors.
160
+ */
161
+ disableCapture() {
162
+ this.mirrorMode = true;
163
+ this.takeBootBuffer();
164
+ const listener = (0, _networkListener.networkListener)();
165
+ if (listener.listenerCount === 0 && listener.isActive) {
166
+ listener.stopListening();
167
+ }
168
+ super.disableCapture();
169
+ }
170
+
94
171
  /**
95
172
  * Check if the store is actively capturing network events
96
173
  */
@@ -106,9 +183,15 @@ class NetworkEventStore extends _sharedUi.BaseEventStore {
106
183
  request
107
184
  } = event;
108
185
  if (event.type === "request") {
109
- // Check for duplicate request based on URL, method, and timing
186
+ // Check for duplicate request based on URL, method, and timing.
187
+ // The clock is the event's CAPTURE time, not Date.now(): boot-buffered
188
+ // events are flushed in one synchronous burst, and wall-clock "now"
189
+ // would put two genuinely separate boot requests to the same endpoint
190
+ // inside the 50ms dual-interception window, silently dropping one. For
191
+ // live events the two clocks are the same (the raw event is emitted
192
+ // synchronously at capture).
110
193
  const requestKey = `${request.method}:${request.url}`;
111
- const now = Date.now();
194
+ const now = event.timestamp instanceof Date ? event.timestamp.getTime() : Date.now();
112
195
  const recent = this.recentRequests.get(requestKey);
113
196
 
114
197
  // If same request within 50ms, likely a duplicate from XHR/fetch dual
@@ -8,6 +8,7 @@ exports.networkToolPreset = void 0;
8
8
  var _sharedUi = require("@buoy-gg/shared-ui");
9
9
  var _NetworkModal = require("./network/components/NetworkModal");
10
10
  var _overrideRulesStore = require("./network/overrides/overrideRulesStore");
11
+ var _networkEventStore = require("./network/utils/networkEventStore");
11
12
  var _jsxRuntime = require("react/jsx-runtime");
12
13
  /**
13
14
  * Pre-configured network monitoring tool for FloatingDevTools
@@ -36,6 +37,27 @@ var _jsxRuntime = require("react/jsx-runtime");
36
37
  * the interceptor if any rule is still active. One storage read, dev-only.
37
38
  */void _overrideRulesStore.overrideRulesStore.ensureLoaded();
38
39
 
40
+ /**
41
+ * Install interception at IMPORT time and buffer boot traffic.
42
+ *
43
+ * Capture used to start with the first subscriber (Network modal open,
44
+ * dashboard/MCP watch) — long after the app's startup requests (module-scope
45
+ * fetches, session bootstrap, the first query) had fired, so boot traffic was
46
+ * permanently invisible. The boot buffer holds those raw events until the
47
+ * first consumer subscribes, then flushes them into the store; if nothing
48
+ * ever subscribes, nothing is flushed (see startBootCapture).
49
+ *
50
+ * Guards:
51
+ * - `navigator.product === "ReactNative"` — a real RN runtime only. The
52
+ * desktop dashboard and web mirrors also evaluate this module and must
53
+ * never intercept their OWN process's traffic.
54
+ * - Dev-only, like the rest of the automatic capture behavior.
55
+ */
56
+ const isReactNativeRuntime = typeof navigator !== "undefined" && navigator.product === "ReactNative";
57
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
58
+ _networkEventStore.networkEventStore.startBootCapture();
59
+ }
60
+
39
61
  /**
40
62
  * Pre-configured network monitoring tool for FloatingDevTools.
41
63
  * Includes:
@@ -34,6 +34,13 @@ import { networkSavedStore } from "./networkSavedStore";
34
34
  * Callback type for full events array notifications
35
35
  */
36
36
 
37
+ /**
38
+ * Cap on raw events held in the boot buffer before the first consumer
39
+ * subscribes (request + response are separate raw events, so this is ~100
40
+ * requests). Old events are dropped first; a response whose request was
41
+ * evicted is simply ignored at flush (processNetworkEvent finds no match).
42
+ */
43
+ const BOOT_BUFFER_MAX = 200;
37
44
  class NetworkEventStore extends BaseEventStore {
38
45
  pendingRequests = new Map();
39
46
  /**
@@ -45,6 +52,11 @@ class NetworkEventStore extends BaseEventStore {
45
52
  */
46
53
  recentRequests = new Map();
47
54
  rawListenerUnsubscribe = null;
55
+ /** Raw events captured before the first consumer subscribed — see startBootCapture. */
56
+ bootBuffer = [];
57
+ bootBufferUnsubscribe = null;
58
+ /** Set by disableCapture (remote-mirror mode) — boot capture must never (re)start. */
59
+ mirrorMode = false;
48
60
  constructor() {
49
61
  super({
50
62
  storeName: "network",
@@ -52,6 +64,48 @@ class NetworkEventStore extends BaseEventStore {
52
64
  });
53
65
  }
54
66
 
67
+ /**
68
+ * Install the interceptor NOW and buffer raw events until the first real
69
+ * consumer subscribes.
70
+ *
71
+ * Why: capture normally starts with the first subscriber — the Network modal
72
+ * opening, a dashboard watch, an MCP watch — which is long after the app's
73
+ * startup requests (module-scope fetches, session bootstrap, the first
74
+ * query) have already fired. Those were unrecoverable: by the time anything
75
+ * subscribed, boot traffic was gone. Called as a dev-only import-time side
76
+ * effect from the preset, this hooks fetch/XHR at bundle-eval and parks the
77
+ * raw events in a bounded buffer; `startCapturing` flushes them into the
78
+ * store in order, so every consumer sees boot requests too.
79
+ *
80
+ * If no consumer EVER subscribes, nothing is flushed — the buffer just sits
81
+ * bounded at BOOT_BUFFER_MAX raw events (an explicit user "capture off"
82
+ * state therefore never gains events it didn't ask for).
83
+ */
84
+ startBootCapture() {
85
+ if (this.mirrorMode || this.bootBufferUnsubscribe || this.isCapturing()) {
86
+ return;
87
+ }
88
+ const listener = networkListener();
89
+ if (!listener.isActive) {
90
+ listener.startListening();
91
+ }
92
+ this.bootBufferUnsubscribe = addNetworkListener(event => {
93
+ this.bootBuffer.push(event);
94
+ if (this.bootBuffer.length > BOOT_BUFFER_MAX) this.bootBuffer.shift();
95
+ });
96
+ }
97
+
98
+ /** Detach the boot-buffer listener; optionally hand back what it caught. */
99
+ takeBootBuffer() {
100
+ if (this.bootBufferUnsubscribe) {
101
+ this.bootBufferUnsubscribe();
102
+ this.bootBufferUnsubscribe = null;
103
+ }
104
+ const buffered = this.bootBuffer;
105
+ this.bootBuffer = [];
106
+ return buffered;
107
+ }
108
+
55
109
  /**
56
110
  * Start capturing network events
57
111
  */
@@ -63,6 +117,13 @@ class NetworkEventStore extends BaseEventStore {
63
117
  listener.startListening();
64
118
  }
65
119
 
120
+ // Flush boot-buffered events (in capture order) BEFORE attaching the live
121
+ // listener: the boot listener is detached first, so no event can be seen
122
+ // by both. All synchronous — nothing interleaves.
123
+ for (const event of this.takeBootBuffer()) {
124
+ this.processNetworkEvent(event);
125
+ }
126
+
66
127
  // Add our listener to push raw events into the store
67
128
  if (!this.rawListenerUnsubscribe) {
68
129
  this.rawListenerUnsubscribe = addNetworkListener(event => {
@@ -88,6 +149,22 @@ class NetworkEventStore extends BaseEventStore {
88
149
  }
89
150
  }
90
151
 
152
+ /**
153
+ * Remote-mirror mode (desktop dashboard): on top of the base behavior, tear
154
+ * down boot capture and drop its buffer — a mirror must never intercept its
155
+ * OWN process's traffic, and must never flush host requests into the
156
+ * device-event list it mirrors.
157
+ */
158
+ disableCapture() {
159
+ this.mirrorMode = true;
160
+ this.takeBootBuffer();
161
+ const listener = networkListener();
162
+ if (listener.listenerCount === 0 && listener.isActive) {
163
+ listener.stopListening();
164
+ }
165
+ super.disableCapture();
166
+ }
167
+
91
168
  /**
92
169
  * Check if the store is actively capturing network events
93
170
  */
@@ -103,9 +180,15 @@ class NetworkEventStore extends BaseEventStore {
103
180
  request
104
181
  } = event;
105
182
  if (event.type === "request") {
106
- // Check for duplicate request based on URL, method, and timing
183
+ // Check for duplicate request based on URL, method, and timing.
184
+ // The clock is the event's CAPTURE time, not Date.now(): boot-buffered
185
+ // events are flushed in one synchronous burst, and wall-clock "now"
186
+ // would put two genuinely separate boot requests to the same endpoint
187
+ // inside the 50ms dual-interception window, silently dropping one. For
188
+ // live events the two clocks are the same (the raw event is emitted
189
+ // synchronously at capture).
107
190
  const requestKey = `${request.method}:${request.url}`;
108
- const now = Date.now();
191
+ const now = event.timestamp instanceof Date ? event.timestamp.getTime() : Date.now();
109
192
  const recent = this.recentRequests.get(requestKey);
110
193
 
111
194
  // If same request within 50ms, likely a duplicate from XHR/fetch dual
@@ -20,6 +20,7 @@
20
20
  import { NetworkIcon } from "@buoy-gg/shared-ui";
21
21
  import { NetworkModal } from "./network/components/NetworkModal";
22
22
  import { overrideRulesStore } from "./network/overrides/overrideRulesStore";
23
+ import { networkEventStore } from "./network/utils/networkEventStore";
23
24
 
24
25
  /**
25
26
  * Load persisted response-override rules as soon as the tool is registered.
@@ -33,6 +34,27 @@ import { overrideRulesStore } from "./network/overrides/overrideRulesStore";
33
34
  import { jsx as _jsx } from "react/jsx-runtime";
34
35
  void overrideRulesStore.ensureLoaded();
35
36
 
37
+ /**
38
+ * Install interception at IMPORT time and buffer boot traffic.
39
+ *
40
+ * Capture used to start with the first subscriber (Network modal open,
41
+ * dashboard/MCP watch) — long after the app's startup requests (module-scope
42
+ * fetches, session bootstrap, the first query) had fired, so boot traffic was
43
+ * permanently invisible. The boot buffer holds those raw events until the
44
+ * first consumer subscribes, then flushes them into the store; if nothing
45
+ * ever subscribes, nothing is flushed (see startBootCapture).
46
+ *
47
+ * Guards:
48
+ * - `navigator.product === "ReactNative"` — a real RN runtime only. The
49
+ * desktop dashboard and web mirrors also evaluate this module and must
50
+ * never intercept their OWN process's traffic.
51
+ * - Dev-only, like the rest of the automatic capture behavior.
52
+ */
53
+ const isReactNativeRuntime = typeof navigator !== "undefined" && navigator.product === "ReactNative";
54
+ if (isReactNativeRuntime && typeof __DEV__ !== "undefined" && __DEV__) {
55
+ networkEventStore.startBootCapture();
56
+ }
57
+
36
58
  /**
37
59
  * Pre-configured network monitoring tool for FloatingDevTools.
38
60
  * Includes:
@@ -40,7 +40,32 @@ declare class NetworkEventStore extends BaseEventStore<NetworkEvent> {
40
40
  */
41
41
  private recentRequests;
42
42
  private rawListenerUnsubscribe;
43
+ /** Raw events captured before the first consumer subscribed — see startBootCapture. */
44
+ private bootBuffer;
45
+ private bootBufferUnsubscribe;
46
+ /** Set by disableCapture (remote-mirror mode) — boot capture must never (re)start. */
47
+ private mirrorMode;
43
48
  constructor();
49
+ /**
50
+ * Install the interceptor NOW and buffer raw events until the first real
51
+ * consumer subscribes.
52
+ *
53
+ * Why: capture normally starts with the first subscriber — the Network modal
54
+ * opening, a dashboard watch, an MCP watch — which is long after the app's
55
+ * startup requests (module-scope fetches, session bootstrap, the first
56
+ * query) have already fired. Those were unrecoverable: by the time anything
57
+ * subscribed, boot traffic was gone. Called as a dev-only import-time side
58
+ * effect from the preset, this hooks fetch/XHR at bundle-eval and parks the
59
+ * raw events in a bounded buffer; `startCapturing` flushes them into the
60
+ * store in order, so every consumer sees boot requests too.
61
+ *
62
+ * If no consumer EVER subscribes, nothing is flushed — the buffer just sits
63
+ * bounded at BOOT_BUFFER_MAX raw events (an explicit user "capture off"
64
+ * state therefore never gains events it didn't ask for).
65
+ */
66
+ startBootCapture(): void;
67
+ /** Detach the boot-buffer listener; optionally hand back what it caught. */
68
+ private takeBootBuffer;
44
69
  /**
45
70
  * Start capturing network events
46
71
  */
@@ -49,6 +74,13 @@ declare class NetworkEventStore extends BaseEventStore<NetworkEvent> {
49
74
  * Stop capturing network events
50
75
  */
51
76
  protected stopCapturing(): void;
77
+ /**
78
+ * Remote-mirror mode (desktop dashboard): on top of the base behavior, tear
79
+ * down boot capture and drop its buffer — a mirror must never intercept its
80
+ * OWN process's traffic, and must never flush host requests into the
81
+ * device-event list it mirrors.
82
+ */
83
+ disableCapture(): void;
52
84
  /**
53
85
  * Check if the store is actively capturing network events
54
86
  */
@@ -1 +1 @@
1
- {"version":3,"file":"networkEventStore.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQzD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;AAE1E,cAAM,iBAAkB,SAAQ,cAAc,CAAC,YAAY,CAAC;IAC1D,OAAO,CAAC,eAAe,CAAwC;IAC/D;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAAsD;IAC5E,OAAO,CAAC,sBAAsB,CAA6B;;IAS3D;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAgBhC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAc/B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAwIjD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAUnB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,cAAc,UAAO,GAAG,MAAM,IAAI;IAkB1E,QAAQ;;;;;;;;;IAuCR,YAAY,CAAC,MAAM,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACzC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,YAAY,EAAE;CAyCnB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
1
+ {"version":3,"file":"networkEventStore.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQzD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;AAU1E,cAAM,iBAAkB,SAAQ,cAAc,CAAC,YAAY,CAAC;IAC1D,OAAO,CAAC,eAAe,CAAwC;IAC/D;;;;;;OAMG;IACH,OAAO,CAAC,cAAc,CAAsD;IAC5E,OAAO,CAAC,sBAAsB,CAA6B;IAC3D,uFAAuF;IACvF,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,sFAAsF;IACtF,OAAO,CAAC,UAAU,CAAS;;IAS3B;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,IAAI,IAAI;IAcxB,4EAA4E;IAC5E,OAAO,CAAC,cAAc;IAUtB;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAuBhC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAc/B;;;;;OAKG;IACH,cAAc,IAAI,IAAI;IAUtB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA+IjD;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAUnB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,cAAc,UAAO,GAAG,MAAM,IAAI;IAkB1E,QAAQ;;;;;;;;;IAuCR,YAAY,CAAC,MAAM,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACzC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,YAAY,EAAE;CAyCnB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAcjE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;;qBAKX;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;CAKlC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAC1C,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;;;;;qBAMoB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;EASpC"}
1
+ {"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../../src/preset.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAqCjE;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB;;;;;qBAKX;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;CAKlC,CAAC;AAEF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,CAAC,EAAE;IAC1C,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0CAA0C;IAC1C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,qCAAqC;IACrC,2BAA2B,CAAC,EAAE,OAAO,CAAC;CACvC;;;;;qBAMoB;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;EASpC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/network",
3
- "version": "7.0.20",
3
+ "version": "7.0.21",
4
4
  "description": "In-app network inspector for React Native — requests, responses, timing & errors live, with GraphQL operation parsing. Part of Buoy devtools.",
5
5
  "main": "lib/commonjs/index.js",
6
6
  "module": "lib/module/index.js",
@@ -26,7 +26,7 @@
26
26
  ],
27
27
  "sideEffects": false,
28
28
  "dependencies": {
29
- "@buoy-gg/shared-ui": "^7.0.20"
29
+ "@buoy-gg/shared-ui": "^7.0.21"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": "*",