@buoy-gg/network 7.0.32 → 7.0.33
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/lib/commonjs/index.js +6 -0
- package/lib/commonjs/network/components/NetworkHeaderLive.js +16 -0
- package/lib/commonjs/network/components/NetworkListScreen.js +31 -37
- package/lib/commonjs/network/components/NetworkModal.js +23 -2
- package/lib/commonjs/network/components/NetworkOverridesScreen.js +11 -2
- package/lib/commonjs/network/components/NetworkSavedScreen.js +18 -34
- package/lib/commonjs/network/hooks/useNetworkEventList.js +7 -4
- package/lib/commonjs/network/sync/networkSyncAdapter.js +8 -0
- package/lib/module/index.js +1 -1
- package/lib/module/network/components/NetworkHeaderLive.js +15 -0
- package/lib/module/network/components/NetworkListScreen.js +32 -38
- package/lib/module/network/components/NetworkModal.js +23 -2
- package/lib/module/network/components/NetworkOverridesScreen.js +12 -3
- package/lib/module/network/components/NetworkSavedScreen.js +19 -35
- package/lib/module/network/hooks/useNetworkEventList.js +7 -4
- package/lib/module/network/sync/networkSyncAdapter.js +8 -0
- package/lib/typescript/index.d.ts +1 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkHeaderLive.d.ts +11 -0
- package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkListScreen.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkModal.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +1 -1
- package/lib/typescript/network/hooks/useNetworkEventList.d.ts +11 -0
- package/lib/typescript/network/hooks/useNetworkEventList.d.ts.map +1 -1
- package/lib/typescript/network/sync/networkSyncAdapter.d.ts +4 -0
- package/lib/typescript/network/sync/networkSyncAdapter.d.ts.map +1 -1
- package/package.json +2 -2
package/lib/commonjs/index.js
CHANGED
|
@@ -63,6 +63,12 @@ Object.defineProperty(exports, "NetworkEventItemCompact", {
|
|
|
63
63
|
return _NetworkEventItemCompact.NetworkEventItemCompact;
|
|
64
64
|
}
|
|
65
65
|
});
|
|
66
|
+
Object.defineProperty(exports, "NetworkHeaderBadgesView", {
|
|
67
|
+
enumerable: true,
|
|
68
|
+
get: function () {
|
|
69
|
+
return _NetworkHeaderLive.NetworkHeaderBadgesView;
|
|
70
|
+
}
|
|
71
|
+
});
|
|
66
72
|
Object.defineProperty(exports, "NetworkModal", {
|
|
67
73
|
enumerable: true,
|
|
68
74
|
get: function () {
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.NetworkClearButton = NetworkClearButton;
|
|
7
7
|
exports.NetworkDetailPinActions = NetworkDetailPinActions;
|
|
8
8
|
exports.NetworkHeaderBadges = NetworkHeaderBadges;
|
|
9
|
+
exports.NetworkHeaderBadgesView = NetworkHeaderBadgesView;
|
|
9
10
|
exports.NetworkHeaderCopyButton = NetworkHeaderCopyButton;
|
|
10
11
|
exports.NetworkSavedButton = NetworkSavedButton;
|
|
11
12
|
var _reactNative = require("react-native");
|
|
@@ -48,6 +49,21 @@ function NetworkHeaderBadges({
|
|
|
48
49
|
ignoredPatterns,
|
|
49
50
|
paused
|
|
50
51
|
});
|
|
52
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(NetworkHeaderBadgesView, {
|
|
53
|
+
counts: counts,
|
|
54
|
+
activeStatus: activeStatus,
|
|
55
|
+
onToggleStatus: onToggleStatus
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* The chips themselves, fed by props — what the parity sheet renders with
|
|
60
|
+
* fixture counts (`NetworkHeaderBadges` reads the live store).
|
|
61
|
+
*/
|
|
62
|
+
function NetworkHeaderBadgesView({
|
|
63
|
+
counts,
|
|
64
|
+
activeStatus,
|
|
65
|
+
onToggleStatus
|
|
66
|
+
}) {
|
|
51
67
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
52
68
|
style: styles.headerChipRow,
|
|
53
69
|
children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.TouchableOpacity, {
|
|
@@ -27,23 +27,6 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
27
27
|
* `paused || !visible` so a hidden list doesn't subscribe at all.
|
|
28
28
|
*/
|
|
29
29
|
|
|
30
|
-
function EmptyState({
|
|
31
|
-
isEnabled
|
|
32
|
-
}) {
|
|
33
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
34
|
-
style: styles.emptyState,
|
|
35
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Globe, {
|
|
36
|
-
size: 32,
|
|
37
|
-
color: _sharedUi.macOSColors.text.muted
|
|
38
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
39
|
-
style: styles.emptyTitle,
|
|
40
|
-
children: "No network events"
|
|
41
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
42
|
-
style: styles.emptyText,
|
|
43
|
-
children: isEnabled ? "Network requests will appear here" : "Enable interception to start capturing"
|
|
44
|
-
})]
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
30
|
const keyExtractor = item => item.id;
|
|
48
31
|
|
|
49
32
|
/**
|
|
@@ -164,7 +147,8 @@ function NetworkListScreen({
|
|
|
164
147
|
const {
|
|
165
148
|
visibleEvents,
|
|
166
149
|
hasLockedEvents,
|
|
167
|
-
lockedEventCount
|
|
150
|
+
lockedEventCount,
|
|
151
|
+
totalEvents
|
|
168
152
|
} = (0, _useNetworkEventList.useNetworkEventList)({
|
|
169
153
|
filter,
|
|
170
154
|
ignoredPatterns,
|
|
@@ -226,6 +210,34 @@ function NetworkListScreen({
|
|
|
226
210
|
onLongPress: handleLongPress,
|
|
227
211
|
saved: savedLiveIds.has(item.id)
|
|
228
212
|
});
|
|
213
|
+
|
|
214
|
+
// Which flavour of "nothing here" this is. Pins and overrides render
|
|
215
|
+
// outside the list, so a screen showing only those is not empty at all.
|
|
216
|
+
const renderEmpty = () => {
|
|
217
|
+
// Pins and overrides render outside the list, so a screen showing only
|
|
218
|
+
// those is not empty at all.
|
|
219
|
+
if (pinnedRows.length > 0 || overridden.length > 0) return null;
|
|
220
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
|
|
221
|
+
testID: "buoy-network-empty",
|
|
222
|
+
...(0, _sharedUi.resolveListEmptyState)({
|
|
223
|
+
subject: "requests",
|
|
224
|
+
search: searchText,
|
|
225
|
+
total: totalEvents,
|
|
226
|
+
capturing: isEnabled,
|
|
227
|
+
waiting: {
|
|
228
|
+
// fishing = capture is on and nothing has arrived.
|
|
229
|
+
otto: "fishing",
|
|
230
|
+
title: "No network events",
|
|
231
|
+
message: "Network requests will appear here"
|
|
232
|
+
},
|
|
233
|
+
paused: {
|
|
234
|
+
// paused = capture off. Both are literally what the copy says.
|
|
235
|
+
title: "No network events",
|
|
236
|
+
message: "Enable interception to start capturing"
|
|
237
|
+
}
|
|
238
|
+
})
|
|
239
|
+
});
|
|
240
|
+
};
|
|
229
241
|
const renderListFooter = () => {
|
|
230
242
|
if (!hasLockedEvents) return null;
|
|
231
243
|
const isSearching = searchText.length > 0;
|
|
@@ -297,9 +309,7 @@ function NetworkListScreen({
|
|
|
297
309
|
extraData: savedLiveIds,
|
|
298
310
|
"sentry-label": "ignore network events list",
|
|
299
311
|
ListFooterComponent: renderListFooter
|
|
300
|
-
}) :
|
|
301
|
-
isEnabled: isEnabled
|
|
302
|
-
})]
|
|
312
|
+
}) : renderEmpty()]
|
|
303
313
|
});
|
|
304
314
|
}
|
|
305
315
|
const styles = _reactNative.StyleSheet.create({
|
|
@@ -396,21 +406,5 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
396
406
|
},
|
|
397
407
|
listContent: {
|
|
398
408
|
paddingTop: 8
|
|
399
|
-
},
|
|
400
|
-
emptyState: {
|
|
401
|
-
alignItems: "center",
|
|
402
|
-
paddingVertical: 40
|
|
403
|
-
},
|
|
404
|
-
emptyTitle: {
|
|
405
|
-
color: _sharedUi.macOSColors.text.primary,
|
|
406
|
-
fontSize: 14,
|
|
407
|
-
fontWeight: "600",
|
|
408
|
-
marginTop: 12,
|
|
409
|
-
marginBottom: 6
|
|
410
|
-
},
|
|
411
|
-
emptyText: {
|
|
412
|
-
color: _sharedUi.macOSColors.text.muted,
|
|
413
|
-
fontSize: 12,
|
|
414
|
-
textAlign: "center"
|
|
415
409
|
}
|
|
416
410
|
});
|
|
@@ -235,6 +235,12 @@ function NetworkModalInner({
|
|
|
235
235
|
const [activeTab, setActiveTab] = (0, _react.useState)("filters");
|
|
236
236
|
const [searchText, setSearchText] = (0, _react.useState)("");
|
|
237
237
|
const [isSearchActive, setIsSearchActive] = (0, _react.useState)(false);
|
|
238
|
+
// True while the header's clear ✕ is being pressed. With a mouse, pressing
|
|
239
|
+
// the ✕ blurs the input FIRST, and the blur handler below closes search —
|
|
240
|
+
// which unmounts the ✕ before its own press can fire, so the query was
|
|
241
|
+
// never cleared (desktop). Press-in lands before the blur, so the blur
|
|
242
|
+
// handler can tell this dismissal apart from a click elsewhere.
|
|
243
|
+
const clearPressRef = (0, _react.useRef)(false);
|
|
238
244
|
// The Saved screen's search box lives HERE, not in that screen, because the
|
|
239
245
|
// detail footer steps through the same list the user was just looking at —
|
|
240
246
|
// and the Saved screen is unmounted while a detail is open.
|
|
@@ -459,20 +465,35 @@ function NetworkModalInner({
|
|
|
459
465
|
value: searchText,
|
|
460
466
|
onChangeText: handleSearch,
|
|
461
467
|
onSubmitEditing: () => setIsSearchActive(false),
|
|
462
|
-
onBlur: () =>
|
|
468
|
+
onBlur: () => {
|
|
469
|
+
if (!clearPressRef.current) setIsSearchActive(false);
|
|
470
|
+
},
|
|
463
471
|
"sentry-label": "ignore network search header",
|
|
464
472
|
accessibilityLabel: "Search network requests",
|
|
465
473
|
testID: "buoy-network-search-input",
|
|
466
474
|
autoCapitalize: "none",
|
|
467
475
|
autoCorrect: false,
|
|
468
476
|
returnKeyType: "search"
|
|
469
|
-
}), searchText.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity
|
|
477
|
+
}), searchText.length > 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.TouchableOpacity
|
|
478
|
+
// react-native-web delays press-in ~50ms by default (native
|
|
479
|
+
// fires it immediately), which would put it AFTER the blur.
|
|
480
|
+
, {
|
|
481
|
+
delayPressIn: 0,
|
|
482
|
+
onPressIn: () => {
|
|
483
|
+
clearPressRef.current = true;
|
|
484
|
+
},
|
|
485
|
+
onPressOut: () => {
|
|
486
|
+
clearPressRef.current = false;
|
|
487
|
+
},
|
|
470
488
|
onPress: () => {
|
|
471
489
|
handleSearch("");
|
|
472
490
|
setIsSearchActive(false);
|
|
473
491
|
},
|
|
474
492
|
"sentry-label": "ignore clear search header",
|
|
475
493
|
style: styles.headerSearchClear,
|
|
494
|
+
accessibilityRole: "button",
|
|
495
|
+
accessibilityLabel: "Clear search",
|
|
496
|
+
testID: "buoy-network-search-clear",
|
|
476
497
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.X, {
|
|
477
498
|
size: 14,
|
|
478
499
|
color: _sharedUi.night.color.textSecondary
|
|
@@ -365,8 +365,17 @@ function OverridesBody({
|
|
|
365
365
|
})]
|
|
366
366
|
}), !hasRules ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
|
|
367
367
|
style: styles.emptyWrap,
|
|
368
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EmptyState
|
|
369
|
-
|
|
368
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.EmptyState
|
|
369
|
+
// Otto instead of the flask: nothing is faked yet, so he peers
|
|
370
|
+
// into an empty box. Truthful by construction — this branch only
|
|
371
|
+
// renders when the rule list is genuinely empty, and the master
|
|
372
|
+
// switch bar above is hidden in exactly that case.
|
|
373
|
+
, {
|
|
374
|
+
otto: "empty"
|
|
375
|
+
// 32 → pixelSize 2, the size the saved/list screens use, so the
|
|
376
|
+
// three network empties read as one family.
|
|
377
|
+
,
|
|
378
|
+
iconSize: 32,
|
|
370
379
|
title: "Nothing overridden"
|
|
371
380
|
// Names the control that actually exists. This said "tap Force 500"
|
|
372
381
|
// — a button from the deleted preset list, which sent anyone
|
|
@@ -32,21 +32,6 @@ var _jsxRuntime = require("react/jsx-runtime");
|
|
|
32
32
|
*/
|
|
33
33
|
|
|
34
34
|
const keyExtractor = item => item.id;
|
|
35
|
-
function EmptyState() {
|
|
36
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
|
|
37
|
-
style: styles.emptyState,
|
|
38
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Bookmark, {
|
|
39
|
-
size: 32,
|
|
40
|
-
color: _sharedUi.macOSColors.text.muted
|
|
41
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
42
|
-
style: styles.emptyTitle,
|
|
43
|
-
children: "No saved requests"
|
|
44
|
-
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
|
|
45
|
-
style: styles.emptyText,
|
|
46
|
-
children: "Open a request and tap the bookmark to keep it here \u2014 saved requests survive Clear and app restarts."
|
|
47
|
-
})]
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
35
|
function NetworkSavedScreen({
|
|
51
36
|
visible,
|
|
52
37
|
isPro,
|
|
@@ -146,7 +131,24 @@ function NetworkSavedScreen({
|
|
|
146
131
|
autoCorrect: false,
|
|
147
132
|
returnKeyType: "search"
|
|
148
133
|
})]
|
|
149
|
-
}) : null, savedRecords.length === 0
|
|
134
|
+
}) : null, savedRecords.length === 0 ||
|
|
135
|
+
// lockedCount > 0 falls through to the list so the upgrade banner (its
|
|
136
|
+
// ListFooterComponent) still renders — "0 shown, N locked" is an
|
|
137
|
+
// answer, not an empty screen.
|
|
138
|
+
search.trim().length > 0 && filtered.length === 0 && lockedCount === 0 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolEmptyState, {
|
|
139
|
+
testID: "buoy-network-saved-empty",
|
|
140
|
+
...(0, _sharedUi.resolveListEmptyState)({
|
|
141
|
+
subject: "saved requests",
|
|
142
|
+
verb: "kept",
|
|
143
|
+
search: savedRecords.length === 0 ? "" : search,
|
|
144
|
+
total: savedRecords.length,
|
|
145
|
+
waiting: {
|
|
146
|
+
otto: "empty",
|
|
147
|
+
title: "No saved requests",
|
|
148
|
+
message: "Open a request and tap the bookmark to keep it here — saved requests survive Clear and app restarts."
|
|
149
|
+
}
|
|
150
|
+
})
|
|
151
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.FlatList, {
|
|
150
152
|
data: filtered,
|
|
151
153
|
renderItem: renderItem,
|
|
152
154
|
keyExtractor: keyExtractor,
|
|
@@ -223,23 +225,5 @@ const styles = _reactNative.StyleSheet.create({
|
|
|
223
225
|
},
|
|
224
226
|
listContent: {
|
|
225
227
|
paddingTop: 4
|
|
226
|
-
},
|
|
227
|
-
emptyState: {
|
|
228
|
-
alignItems: "center",
|
|
229
|
-
paddingVertical: 40,
|
|
230
|
-
paddingHorizontal: 24
|
|
231
|
-
},
|
|
232
|
-
emptyTitle: {
|
|
233
|
-
color: _sharedUi.macOSColors.text.primary,
|
|
234
|
-
fontSize: 14,
|
|
235
|
-
fontWeight: "600",
|
|
236
|
-
marginTop: 12,
|
|
237
|
-
marginBottom: 6
|
|
238
|
-
},
|
|
239
|
-
emptyText: {
|
|
240
|
-
color: _sharedUi.macOSColors.text.muted,
|
|
241
|
-
fontSize: 12,
|
|
242
|
-
textAlign: "center",
|
|
243
|
-
lineHeight: 17
|
|
244
228
|
}
|
|
245
229
|
});
|
|
@@ -78,9 +78,11 @@ function useNetworkEventList(options) {
|
|
|
78
78
|
|
|
79
79
|
// Derivations are plain useMemo over the subscribed array — linear
|
|
80
80
|
// passes over ≤maxEvents items, recomputed only when inputs change.
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
// Split in two so the pre-filter count is observable: `totalEvents` below
|
|
82
|
+
// is the denominator the empty state needs, and recomputing it separately
|
|
83
|
+
// would mean a second pass over the same array.
|
|
84
|
+
const candidateEvents = (0, _react.useMemo)(() => (0, _filterNetworkEvents.applyIgnoredPatterns)(events, ignoredPatterns), [events, ignoredPatterns]);
|
|
85
|
+
const filteredEvents = (0, _react.useMemo)(() => (0, _filterNetworkEvents.filterNetworkEvents)(candidateEvents, filter), [candidateEvents, filter]);
|
|
84
86
|
|
|
85
87
|
// Free tier: events beyond the limit in the ORIGINAL order are locked,
|
|
86
88
|
// so locked events stay locked even when searching (ported verbatim).
|
|
@@ -100,6 +102,7 @@ function useNetworkEventList(options) {
|
|
|
100
102
|
events: filteredEvents,
|
|
101
103
|
visibleEvents,
|
|
102
104
|
hasLockedEvents: lockedEventCount > 0,
|
|
103
|
-
lockedEventCount
|
|
105
|
+
lockedEventCount,
|
|
106
|
+
totalEvents: candidateEvents.length
|
|
104
107
|
};
|
|
105
108
|
}
|
|
@@ -431,6 +431,14 @@ const networkSyncAdapter = exports.networkSyncAdapter = {
|
|
|
431
431
|
const event = resolveEvent(id);
|
|
432
432
|
if (!event) return null;
|
|
433
433
|
return {
|
|
434
|
+
// Identity + the override mark ride along so a caller (Ask Buoy's
|
|
435
|
+
// receipt, an MCP session) can say WHOSE body this is and whether an
|
|
436
|
+
// override rule produced it — a mocked response rendered as "live"
|
|
437
|
+
// is the fabrication problem wearing a chrome suit.
|
|
438
|
+
url: event.url ?? null,
|
|
439
|
+
method: event.method ?? null,
|
|
440
|
+
status: event.status ?? null,
|
|
441
|
+
override: event.override ?? null,
|
|
434
442
|
requestData: event.requestData ?? null,
|
|
435
443
|
responseData: event.responseData ?? null,
|
|
436
444
|
requestHeaders: event.requestHeaders ?? null,
|
package/lib/module/index.js
CHANGED
|
@@ -24,7 +24,7 @@ export { NetworkModal, NetworkToolView } from "./network/components/NetworkModal
|
|
|
24
24
|
export { NetworkEventDetailView } from "./network/components/NetworkEventDetailView";
|
|
25
25
|
export { NetworkEventItemCompact } from "./network/components/NetworkEventItemCompact";
|
|
26
26
|
export { NetworkSavedScreen } from "./network/components/NetworkSavedScreen";
|
|
27
|
-
export { NetworkSavedButton, NetworkDetailPinActions } from "./network/components/NetworkHeaderLive";
|
|
27
|
+
export { NetworkSavedButton, NetworkDetailPinActions, NetworkHeaderBadgesView } from "./network/components/NetworkHeaderLive";
|
|
28
28
|
|
|
29
29
|
// =============================================================================
|
|
30
30
|
// HOOKS (For consuming network data in custom components)
|
|
@@ -40,6 +40,21 @@ export function NetworkHeaderBadges({
|
|
|
40
40
|
ignoredPatterns,
|
|
41
41
|
paused
|
|
42
42
|
});
|
|
43
|
+
return /*#__PURE__*/_jsx(NetworkHeaderBadgesView, {
|
|
44
|
+
counts: counts,
|
|
45
|
+
activeStatus: activeStatus,
|
|
46
|
+
onToggleStatus: onToggleStatus
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The chips themselves, fed by props — what the parity sheet renders with
|
|
51
|
+
* fixture counts (`NetworkHeaderBadges` reads the live store).
|
|
52
|
+
*/
|
|
53
|
+
export function NetworkHeaderBadgesView({
|
|
54
|
+
counts,
|
|
55
|
+
activeStatus,
|
|
56
|
+
onToggleStatus
|
|
57
|
+
}) {
|
|
43
58
|
return /*#__PURE__*/_jsxs(View, {
|
|
44
59
|
style: styles.headerChipRow,
|
|
45
60
|
children: [/*#__PURE__*/_jsxs(TouchableOpacity, {
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
|
|
15
15
|
import { useCallback } from "react";
|
|
16
16
|
import { FlatList, StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
17
|
-
import { FlaskConical,
|
|
17
|
+
import { FlaskConical, Pin, Power, macOSColors, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
|
|
18
18
|
import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
|
|
19
19
|
import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
|
|
20
20
|
import { useNetworkEventList } from "../hooks/useNetworkEventList";
|
|
@@ -23,23 +23,6 @@ import { useOverrideRules } from "../hooks/useOverrideRules";
|
|
|
23
23
|
import { ruleMatches } from "../overrides/matchRule";
|
|
24
24
|
import { splitPinned } from "../utils/withPinnedFirst";
|
|
25
25
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
26
|
-
function EmptyState({
|
|
27
|
-
isEnabled
|
|
28
|
-
}) {
|
|
29
|
-
return /*#__PURE__*/_jsxs(View, {
|
|
30
|
-
style: styles.emptyState,
|
|
31
|
-
children: [/*#__PURE__*/_jsx(Globe, {
|
|
32
|
-
size: 32,
|
|
33
|
-
color: macOSColors.text.muted
|
|
34
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
35
|
-
style: styles.emptyTitle,
|
|
36
|
-
children: "No network events"
|
|
37
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
38
|
-
style: styles.emptyText,
|
|
39
|
-
children: isEnabled ? "Network requests will appear here" : "Enable interception to start capturing"
|
|
40
|
-
})]
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
26
|
const keyExtractor = item => item.id;
|
|
44
27
|
|
|
45
28
|
/**
|
|
@@ -160,7 +143,8 @@ export function NetworkListScreen({
|
|
|
160
143
|
const {
|
|
161
144
|
visibleEvents,
|
|
162
145
|
hasLockedEvents,
|
|
163
|
-
lockedEventCount
|
|
146
|
+
lockedEventCount,
|
|
147
|
+
totalEvents
|
|
164
148
|
} = useNetworkEventList({
|
|
165
149
|
filter,
|
|
166
150
|
ignoredPatterns,
|
|
@@ -222,6 +206,34 @@ export function NetworkListScreen({
|
|
|
222
206
|
onLongPress: handleLongPress,
|
|
223
207
|
saved: savedLiveIds.has(item.id)
|
|
224
208
|
});
|
|
209
|
+
|
|
210
|
+
// Which flavour of "nothing here" this is. Pins and overrides render
|
|
211
|
+
// outside the list, so a screen showing only those is not empty at all.
|
|
212
|
+
const renderEmpty = () => {
|
|
213
|
+
// Pins and overrides render outside the list, so a screen showing only
|
|
214
|
+
// those is not empty at all.
|
|
215
|
+
if (pinnedRows.length > 0 || overridden.length > 0) return null;
|
|
216
|
+
return /*#__PURE__*/_jsx(ToolEmptyState, {
|
|
217
|
+
testID: "buoy-network-empty",
|
|
218
|
+
...resolveListEmptyState({
|
|
219
|
+
subject: "requests",
|
|
220
|
+
search: searchText,
|
|
221
|
+
total: totalEvents,
|
|
222
|
+
capturing: isEnabled,
|
|
223
|
+
waiting: {
|
|
224
|
+
// fishing = capture is on and nothing has arrived.
|
|
225
|
+
otto: "fishing",
|
|
226
|
+
title: "No network events",
|
|
227
|
+
message: "Network requests will appear here"
|
|
228
|
+
},
|
|
229
|
+
paused: {
|
|
230
|
+
// paused = capture off. Both are literally what the copy says.
|
|
231
|
+
title: "No network events",
|
|
232
|
+
message: "Enable interception to start capturing"
|
|
233
|
+
}
|
|
234
|
+
})
|
|
235
|
+
});
|
|
236
|
+
};
|
|
225
237
|
const renderListFooter = () => {
|
|
226
238
|
if (!hasLockedEvents) return null;
|
|
227
239
|
const isSearching = searchText.length > 0;
|
|
@@ -293,9 +305,7 @@ export function NetworkListScreen({
|
|
|
293
305
|
extraData: savedLiveIds,
|
|
294
306
|
"sentry-label": "ignore network events list",
|
|
295
307
|
ListFooterComponent: renderListFooter
|
|
296
|
-
}) :
|
|
297
|
-
isEnabled: isEnabled
|
|
298
|
-
})]
|
|
308
|
+
}) : renderEmpty()]
|
|
299
309
|
});
|
|
300
310
|
}
|
|
301
311
|
const styles = StyleSheet.create({
|
|
@@ -392,21 +402,5 @@ const styles = StyleSheet.create({
|
|
|
392
402
|
},
|
|
393
403
|
listContent: {
|
|
394
404
|
paddingTop: 8
|
|
395
|
-
},
|
|
396
|
-
emptyState: {
|
|
397
|
-
alignItems: "center",
|
|
398
|
-
paddingVertical: 40
|
|
399
|
-
},
|
|
400
|
-
emptyTitle: {
|
|
401
|
-
color: macOSColors.text.primary,
|
|
402
|
-
fontSize: 14,
|
|
403
|
-
fontWeight: "600",
|
|
404
|
-
marginTop: 12,
|
|
405
|
-
marginBottom: 6
|
|
406
|
-
},
|
|
407
|
-
emptyText: {
|
|
408
|
-
color: macOSColors.text.muted,
|
|
409
|
-
fontSize: 12,
|
|
410
|
-
textAlign: "center"
|
|
411
405
|
}
|
|
412
406
|
});
|
|
@@ -230,6 +230,12 @@ function NetworkModalInner({
|
|
|
230
230
|
const [activeTab, setActiveTab] = useState("filters");
|
|
231
231
|
const [searchText, setSearchText] = useState("");
|
|
232
232
|
const [isSearchActive, setIsSearchActive] = useState(false);
|
|
233
|
+
// True while the header's clear ✕ is being pressed. With a mouse, pressing
|
|
234
|
+
// the ✕ blurs the input FIRST, and the blur handler below closes search —
|
|
235
|
+
// which unmounts the ✕ before its own press can fire, so the query was
|
|
236
|
+
// never cleared (desktop). Press-in lands before the blur, so the blur
|
|
237
|
+
// handler can tell this dismissal apart from a click elsewhere.
|
|
238
|
+
const clearPressRef = useRef(false);
|
|
233
239
|
// The Saved screen's search box lives HERE, not in that screen, because the
|
|
234
240
|
// detail footer steps through the same list the user was just looking at —
|
|
235
241
|
// and the Saved screen is unmounted while a detail is open.
|
|
@@ -454,20 +460,35 @@ function NetworkModalInner({
|
|
|
454
460
|
value: searchText,
|
|
455
461
|
onChangeText: handleSearch,
|
|
456
462
|
onSubmitEditing: () => setIsSearchActive(false),
|
|
457
|
-
onBlur: () =>
|
|
463
|
+
onBlur: () => {
|
|
464
|
+
if (!clearPressRef.current) setIsSearchActive(false);
|
|
465
|
+
},
|
|
458
466
|
"sentry-label": "ignore network search header",
|
|
459
467
|
accessibilityLabel: "Search network requests",
|
|
460
468
|
testID: "buoy-network-search-input",
|
|
461
469
|
autoCapitalize: "none",
|
|
462
470
|
autoCorrect: false,
|
|
463
471
|
returnKeyType: "search"
|
|
464
|
-
}), searchText.length > 0 ? /*#__PURE__*/_jsx(TouchableOpacity
|
|
472
|
+
}), searchText.length > 0 ? /*#__PURE__*/_jsx(TouchableOpacity
|
|
473
|
+
// react-native-web delays press-in ~50ms by default (native
|
|
474
|
+
// fires it immediately), which would put it AFTER the blur.
|
|
475
|
+
, {
|
|
476
|
+
delayPressIn: 0,
|
|
477
|
+
onPressIn: () => {
|
|
478
|
+
clearPressRef.current = true;
|
|
479
|
+
},
|
|
480
|
+
onPressOut: () => {
|
|
481
|
+
clearPressRef.current = false;
|
|
482
|
+
},
|
|
465
483
|
onPress: () => {
|
|
466
484
|
handleSearch("");
|
|
467
485
|
setIsSearchActive(false);
|
|
468
486
|
},
|
|
469
487
|
"sentry-label": "ignore clear search header",
|
|
470
488
|
style: styles.headerSearchClear,
|
|
489
|
+
accessibilityRole: "button",
|
|
490
|
+
accessibilityLabel: "Clear search",
|
|
491
|
+
testID: "buoy-network-search-clear",
|
|
471
492
|
children: /*#__PURE__*/_jsx(X, {
|
|
472
493
|
size: 14,
|
|
473
494
|
color: night.color.textSecondary
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import { useCallback, useEffect, useState } from "react";
|
|
4
4
|
import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from "react-native";
|
|
5
|
-
import { AlertCircle, AlertTriangle, DevToolsCard, EmptyState,
|
|
5
|
+
import { AlertCircle, AlertTriangle, DevToolsCard, EmptyState, MethodBadge, Plus, Trash2, macOSColors, useLimit } from "@buoy-gg/shared-ui";
|
|
6
6
|
import { useOverrideRules } from "../hooks/useOverrideRules";
|
|
7
7
|
import { NetworkOverrideEditor } from "./NetworkOverrideEditor";
|
|
8
8
|
import { overrideRulesStore } from "../overrides/overrideRulesStore";
|
|
@@ -361,8 +361,17 @@ function OverridesBody({
|
|
|
361
361
|
})]
|
|
362
362
|
}), !hasRules ? /*#__PURE__*/_jsx(View, {
|
|
363
363
|
style: styles.emptyWrap,
|
|
364
|
-
children: /*#__PURE__*/_jsx(EmptyState
|
|
365
|
-
|
|
364
|
+
children: /*#__PURE__*/_jsx(EmptyState
|
|
365
|
+
// Otto instead of the flask: nothing is faked yet, so he peers
|
|
366
|
+
// into an empty box. Truthful by construction — this branch only
|
|
367
|
+
// renders when the rule list is genuinely empty, and the master
|
|
368
|
+
// switch bar above is hidden in exactly that case.
|
|
369
|
+
, {
|
|
370
|
+
otto: "empty"
|
|
371
|
+
// 32 → pixelSize 2, the size the saved/list screens use, so the
|
|
372
|
+
// three network empties read as one family.
|
|
373
|
+
,
|
|
374
|
+
iconSize: 32,
|
|
366
375
|
title: "Nothing overridden"
|
|
367
376
|
// Names the control that actually exists. This said "tap Force 500"
|
|
368
377
|
// — a button from the deleted preset list, which sent anyone
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
|
|
20
20
|
import { useState } from "react";
|
|
21
21
|
import { FlatList, StyleSheet, Text, TextInput, View, TouchableOpacity } from "react-native";
|
|
22
|
-
import { Bookmark, CopyButton, Search, macOSColors, useLimit } from "@buoy-gg/shared-ui";
|
|
22
|
+
import { Bookmark, CopyButton, Search, macOSColors, useLimit, ToolEmptyState, resolveListEmptyState } from "@buoy-gg/shared-ui";
|
|
23
23
|
import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
|
|
24
24
|
import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
|
|
25
25
|
import { generateNetworkCopyText } from "../utils/generateNetworkCopyText";
|
|
@@ -28,21 +28,6 @@ import { useNetworkSaved } from "../hooks/useNetworkSaved";
|
|
|
28
28
|
import { MAX_SAVED } from "../utils/networkSavedStore";
|
|
29
29
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
30
30
|
const keyExtractor = item => item.id;
|
|
31
|
-
function EmptyState() {
|
|
32
|
-
return /*#__PURE__*/_jsxs(View, {
|
|
33
|
-
style: styles.emptyState,
|
|
34
|
-
children: [/*#__PURE__*/_jsx(Bookmark, {
|
|
35
|
-
size: 32,
|
|
36
|
-
color: macOSColors.text.muted
|
|
37
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
38
|
-
style: styles.emptyTitle,
|
|
39
|
-
children: "No saved requests"
|
|
40
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
41
|
-
style: styles.emptyText,
|
|
42
|
-
children: "Open a request and tap the bookmark to keep it here \u2014 saved requests survive Clear and app restarts."
|
|
43
|
-
})]
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
31
|
export function NetworkSavedScreen({
|
|
47
32
|
visible,
|
|
48
33
|
isPro,
|
|
@@ -142,7 +127,24 @@ export function NetworkSavedScreen({
|
|
|
142
127
|
autoCorrect: false,
|
|
143
128
|
returnKeyType: "search"
|
|
144
129
|
})]
|
|
145
|
-
}) : null, savedRecords.length === 0
|
|
130
|
+
}) : null, savedRecords.length === 0 ||
|
|
131
|
+
// lockedCount > 0 falls through to the list so the upgrade banner (its
|
|
132
|
+
// ListFooterComponent) still renders — "0 shown, N locked" is an
|
|
133
|
+
// answer, not an empty screen.
|
|
134
|
+
search.trim().length > 0 && filtered.length === 0 && lockedCount === 0 ? /*#__PURE__*/_jsx(ToolEmptyState, {
|
|
135
|
+
testID: "buoy-network-saved-empty",
|
|
136
|
+
...resolveListEmptyState({
|
|
137
|
+
subject: "saved requests",
|
|
138
|
+
verb: "kept",
|
|
139
|
+
search: savedRecords.length === 0 ? "" : search,
|
|
140
|
+
total: savedRecords.length,
|
|
141
|
+
waiting: {
|
|
142
|
+
otto: "empty",
|
|
143
|
+
title: "No saved requests",
|
|
144
|
+
message: "Open a request and tap the bookmark to keep it here — saved requests survive Clear and app restarts."
|
|
145
|
+
}
|
|
146
|
+
})
|
|
147
|
+
}) : /*#__PURE__*/_jsx(FlatList, {
|
|
146
148
|
data: filtered,
|
|
147
149
|
renderItem: renderItem,
|
|
148
150
|
keyExtractor: keyExtractor,
|
|
@@ -219,23 +221,5 @@ const styles = StyleSheet.create({
|
|
|
219
221
|
},
|
|
220
222
|
listContent: {
|
|
221
223
|
paddingTop: 4
|
|
222
|
-
},
|
|
223
|
-
emptyState: {
|
|
224
|
-
alignItems: "center",
|
|
225
|
-
paddingVertical: 40,
|
|
226
|
-
paddingHorizontal: 24
|
|
227
|
-
},
|
|
228
|
-
emptyTitle: {
|
|
229
|
-
color: macOSColors.text.primary,
|
|
230
|
-
fontSize: 14,
|
|
231
|
-
fontWeight: "600",
|
|
232
|
-
marginTop: 12,
|
|
233
|
-
marginBottom: 6
|
|
234
|
-
},
|
|
235
|
-
emptyText: {
|
|
236
|
-
color: macOSColors.text.muted,
|
|
237
|
-
fontSize: 12,
|
|
238
|
-
textAlign: "center",
|
|
239
|
-
lineHeight: 17
|
|
240
224
|
}
|
|
241
225
|
});
|
|
@@ -74,9 +74,11 @@ export function useNetworkEventList(options) {
|
|
|
74
74
|
|
|
75
75
|
// Derivations are plain useMemo over the subscribed array — linear
|
|
76
76
|
// passes over ≤maxEvents items, recomputed only when inputs change.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
// Split in two so the pre-filter count is observable: `totalEvents` below
|
|
78
|
+
// is the denominator the empty state needs, and recomputing it separately
|
|
79
|
+
// would mean a second pass over the same array.
|
|
80
|
+
const candidateEvents = useMemo(() => applyIgnoredPatterns(events, ignoredPatterns), [events, ignoredPatterns]);
|
|
81
|
+
const filteredEvents = useMemo(() => filterNetworkEvents(candidateEvents, filter), [candidateEvents, filter]);
|
|
80
82
|
|
|
81
83
|
// Free tier: events beyond the limit in the ORIGINAL order are locked,
|
|
82
84
|
// so locked events stay locked even when searching (ported verbatim).
|
|
@@ -96,6 +98,7 @@ export function useNetworkEventList(options) {
|
|
|
96
98
|
events: filteredEvents,
|
|
97
99
|
visibleEvents,
|
|
98
100
|
hasLockedEvents: lockedEventCount > 0,
|
|
99
|
-
lockedEventCount
|
|
101
|
+
lockedEventCount,
|
|
102
|
+
totalEvents: candidateEvents.length
|
|
100
103
|
};
|
|
101
104
|
}
|
|
@@ -428,6 +428,14 @@ export const networkSyncAdapter = {
|
|
|
428
428
|
const event = resolveEvent(id);
|
|
429
429
|
if (!event) return null;
|
|
430
430
|
return {
|
|
431
|
+
// Identity + the override mark ride along so a caller (Ask Buoy's
|
|
432
|
+
// receipt, an MCP session) can say WHOSE body this is and whether an
|
|
433
|
+
// override rule produced it — a mocked response rendered as "live"
|
|
434
|
+
// is the fabrication problem wearing a chrome suit.
|
|
435
|
+
url: event.url ?? null,
|
|
436
|
+
method: event.method ?? null,
|
|
437
|
+
status: event.status ?? null,
|
|
438
|
+
override: event.override ?? null,
|
|
431
439
|
requestData: event.requestData ?? null,
|
|
432
440
|
responseData: event.responseData ?? null,
|
|
433
441
|
requestHeaders: event.requestHeaders ?? null,
|
|
@@ -13,7 +13,7 @@ export type { NetworkToolViewProps } from "./network/components/NetworkModal";
|
|
|
13
13
|
export { NetworkEventDetailView } from "./network/components/NetworkEventDetailView";
|
|
14
14
|
export { NetworkEventItemCompact } from "./network/components/NetworkEventItemCompact";
|
|
15
15
|
export { NetworkSavedScreen } from "./network/components/NetworkSavedScreen";
|
|
16
|
-
export { NetworkSavedButton, NetworkDetailPinActions, } from "./network/components/NetworkHeaderLive";
|
|
16
|
+
export { NetworkSavedButton, NetworkDetailPinActions, NetworkHeaderBadgesView, } from "./network/components/NetworkHeaderLive";
|
|
17
17
|
export { useNetworkEvents } from "./network/hooks/useNetworkEvents";
|
|
18
18
|
export { useNetworkEventList } from "./network/hooks/useNetworkEventList";
|
|
19
19
|
export { useLiveNetworkEvent } from "./network/hooks/useLiveNetworkEvent";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAI9E,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAIhF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAKtF,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAKpC,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB;AACtB;;;GAGG;AACH,KAAK,mBAAmB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,SAAS,IAAI,kBAAkB,EAC/B,oBAAoB,IAAI,wBAAwB,EAChD,UAAU,IAAI,mBAAmB,EACjC,UAAU,IAAI,mBAAmB,EACjC,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,oCAAoC,CAAC;AAO5C,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE;;;GAGG;AACH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAI9E,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAIhF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,KAAK,qBAAqB,GAC3B,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAKtF,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,4BAA4B,CAAC;AAKpC,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EACL,kBAAkB,EAClB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB;AACtB;;;GAGG;AACH,KAAK,mBAAmB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,SAAS,IAAI,kBAAkB,EAC/B,oBAAoB,IAAI,wBAAwB,EAChD,UAAU,IAAI,mBAAmB,EACjC,UAAU,IAAI,mBAAmB,EACjC,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,GACzB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,YAAY,GACb,MAAM,oBAAoB,CAAC;AAK5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EACL,2BAA2B,EAC3B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,oCAAoC,CAAC;AAO5C,gBAAgB;AAChB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE;;;GAGG;AACH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
import { type IgnoredPattern } from "@buoy-gg/shared-ui";
|
|
19
19
|
import type { NetworkFilter } from "../types";
|
|
20
20
|
import type { CopySettings } from "./NetworkCopySettingsView";
|
|
21
|
+
import type { NetworkBadgeCounts } from "../hooks/useNetworkBadgeCounts";
|
|
21
22
|
type StatusFilter = "success" | "error" | "pending";
|
|
22
23
|
interface NetworkHeaderBadgesProps {
|
|
23
24
|
activeStatus: NetworkFilter["status"];
|
|
@@ -27,6 +28,16 @@ interface NetworkHeaderBadgesProps {
|
|
|
27
28
|
}
|
|
28
29
|
/** Success / error / pending chips — tap to toggle the status filter. */
|
|
29
30
|
export declare function NetworkHeaderBadges({ activeStatus, onToggleStatus, ignoredPatterns, paused, }: NetworkHeaderBadgesProps): import("react").JSX.Element;
|
|
31
|
+
interface NetworkHeaderBadgesViewProps {
|
|
32
|
+
counts: Pick<NetworkBadgeCounts, "successful" | "failed" | "pending">;
|
|
33
|
+
activeStatus: NetworkFilter["status"];
|
|
34
|
+
onToggleStatus: (status: StatusFilter) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The chips themselves, fed by props — what the parity sheet renders with
|
|
38
|
+
* fixture counts (`NetworkHeaderBadges` reads the live store).
|
|
39
|
+
*/
|
|
40
|
+
export declare function NetworkHeaderBadgesView({ counts, activeStatus, onToggleStatus, }: NetworkHeaderBadgesViewProps): import("react").JSX.Element;
|
|
30
41
|
interface NetworkClearButtonProps {
|
|
31
42
|
paused: boolean;
|
|
32
43
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAWL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAWL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAW9D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAWzE,KAAK,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAEpD,UAAU,wBAAwB;IAChC,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IAC/C,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,EAClC,YAAY,EACZ,cAAc,EACd,eAAe,EACf,MAAM,GACP,EAAE,wBAAwB,+BAS1B;AAED,UAAU,4BAA4B;IACpC,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,YAAY,GAAG,QAAQ,GAAG,SAAS,CAAC,CAAC;IACtE,YAAY,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACtC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;CAChD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,MAAM,EACN,YAAY,EACZ,cAAc,GACf,EAAE,4BAA4B,+BA0D9B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAwBrE;AAED,UAAU,uBAAuB;IAC/B,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,uBAAuB,+BAwBtE;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BA4F9B;AAED,UAAU,4BAA4B;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,GACN,EAAE,4BAA4B,+BAsD9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAML,KAAK,cAAc,
|
|
1
|
+
{"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAML,KAAK,cAAc,EAGpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA6I5D,UAAU,sBAAsB;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,MAAM,EACN,MAAM,EACN,eAAe,EACf,KAAK,EACL,UAAU,EACV,YAAY,EACZ,cAAc,GACf,EAAE,sBAAsB,sCA6LxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAwEA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;
|
|
1
|
+
{"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAwEA,UAAU,iBAAiB;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,IAAI,CAAC;IACvC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AA+4BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD;AAED,MAAM,WAAW,oBAAoB;IACnC,+EAA+E;IAC/E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,oBAAyB,+BAa/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkOverridesScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkOverridesScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"NetworkOverridesScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkOverridesScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAehF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAwJzC,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B;;;;OAIG;IACH,YAAY,CAAC,EAAE,CAAC,iBAAiB,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI,CAAC;IAC5D,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,gBAAgB,CAAC,CAAC,MAAM,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC1D,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,sCAGxE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkSavedScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"NetworkSavedScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAcH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAQ9D,UAAU,uBAAuB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,wEAAwE;IACxE,YAAY,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC5C,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,KAAK,EACL,YAAY,EACZ,MAAM,EAAE,UAAU,EAClB,cAAc,EACd,YAAY,EACZ,cAAc,GACf,EAAE,uBAAuB,sCAgJzB"}
|
|
@@ -24,6 +24,17 @@ export interface NetworkEventListResult {
|
|
|
24
24
|
visibleEvents: NetworkEvent[];
|
|
25
25
|
hasLockedEvents: boolean;
|
|
26
26
|
lockedEventCount: number;
|
|
27
|
+
/**
|
|
28
|
+
* How many events the filter had to choose FROM — the store minus the
|
|
29
|
+
* ignored patterns, before `filter` is applied.
|
|
30
|
+
*
|
|
31
|
+
* This is what separates "nothing was captured" from "nothing matched":
|
|
32
|
+
* with an empty list, `totalEvents > 0` means a search or filter hid
|
|
33
|
+
* everything, and the two cases want different copy (and a different
|
|
34
|
+
* Otto). Ignored patterns count as hidden rather than filtered — they are
|
|
35
|
+
* standing config, not something the user just typed.
|
|
36
|
+
*/
|
|
37
|
+
totalEvents: number;
|
|
27
38
|
}
|
|
28
39
|
export declare function useNetworkEventList(options: {
|
|
29
40
|
filter: NetworkFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useNetworkEventList.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkEventList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM5D,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,iEAAiE;IACjE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"useNetworkEventList.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkEventList.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAM5D,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,iEAAiE;IACjE,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB;;;;;;;;;OASG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE;IAC3C,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,MAAM,EAAE,OAAO,CAAC;IAChB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;CAChB,GAAG,sBAAsB,CA2FzB"}
|
|
@@ -79,6 +79,10 @@ export declare const networkSyncAdapter: {
|
|
|
79
79
|
* request that has since been cleared. Returns null if neither has it.
|
|
80
80
|
*/
|
|
81
81
|
getEventBody: (params?: unknown) => {
|
|
82
|
+
url: string;
|
|
83
|
+
method: string;
|
|
84
|
+
status: number | null;
|
|
85
|
+
override: import("../types").NetworkOverrideMark | null;
|
|
82
86
|
requestData: {} | null;
|
|
83
87
|
responseData: {} | null;
|
|
84
88
|
requestHeaders: Record<string, string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/network/sync/networkSyncAdapter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AA2LzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AA8K9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB;;;;QAczB;;;;WAIG;;;;;;;;;;;;;0BAWe,MAAM,IAAI;;;QAkB9B;;;;;WAKG;gCACqB,OAAO
|
|
1
|
+
{"version":3,"file":"networkSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/network/sync/networkSyncAdapter.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAEV,kBAAkB,EACnB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAC;AAEpD;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,QAAqB,CAAC;AA2LzD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AA8K9C;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,kBAAkB;;;;QAczB;;;;WAIG;;;;;;;;;;;;;0BAWe,MAAM,IAAI;;;QAkB9B;;;;;WAKG;gCACqB,OAAO;;;;;;;;;;QAoB/B,8CAA8C;6BACzB,OAAO;;;;;;;;;QAY5B,gDAAgD;4BAC5B,OAAO;;;;;;;;;QAU3B,sDAAsD;qCACzB,OAAO;;;;;;;;;QAsBpC,uEAAuE;uCACxC,OAAO;oBAvP5B,KAAK;4BAAkB,MAAM;;;;;;;QAkQvC,2CAA2C;sCACb,OAAO;;;;oBAnQ3B,KAAK;4BAAkB,MAAM;;;;;;;;;;;;;;;;;;;;;;;0CAuSL,OAAO;;;;oBAvS/B,KAAK;4BAAkB,MAAM;;;;;;;sCA8ST,OAAO;;;;;;;;;;QAYrC,+EAA+E;;QAG/E;;;;WAIG;uCAC4B,OAAO;;;QAYtC,4EAA4E;QAC5E;;;;;;;WAOG;;;;;;;;;kCA2CuB,OAAO;;;;;;;;;;;;;;;;CAiBpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-gg/network",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.33",
|
|
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.
|
|
29
|
+
"@buoy-gg/shared-ui": "^7.0.33"
|
|
30
30
|
},
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"react": "*",
|