@buoy-gg/network 7.0.22 → 7.0.24

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.
Files changed (49) hide show
  1. package/lib/commonjs/network/components/NetworkDetailStepper.js +2 -1
  2. package/lib/commonjs/network/components/NetworkDetailStepper.web.js +3 -1
  3. package/lib/commonjs/network/components/NetworkEventItemCompact.js +5 -0
  4. package/lib/commonjs/network/components/NetworkHeaderLive.js +1 -1
  5. package/lib/commonjs/network/components/NetworkHeaderLive.web.js +2 -1
  6. package/lib/commonjs/network/components/NetworkListScreen.js +1 -1
  7. package/lib/commonjs/network/components/NetworkModal.js +7 -2
  8. package/lib/commonjs/network/components/NetworkOverridesScreen.js +12 -5
  9. package/lib/commonjs/network/components/NetworkSavedScreen.js +6 -3
  10. package/lib/commonjs/network/components/NetworkSavedScreen.web.js +7 -3
  11. package/lib/commonjs/network/hooks/useNetworkEventList.js +6 -4
  12. package/lib/commonjs/network/hooks/useNetworkEvents.js +20 -13
  13. package/lib/commonjs/network/overrides/types.js +7 -2
  14. package/lib/commonjs/network/utils/networkSavedStore.js +6 -2
  15. package/lib/commonjs/network/utils/selectSavedEvents.js +11 -6
  16. package/lib/module/network/components/NetworkDetailStepper.js +3 -2
  17. package/lib/module/network/components/NetworkDetailStepper.web.js +3 -1
  18. package/lib/module/network/components/NetworkEventItemCompact.js +5 -0
  19. package/lib/module/network/components/NetworkHeaderLive.js +3 -3
  20. package/lib/module/network/components/NetworkHeaderLive.web.js +3 -2
  21. package/lib/module/network/components/NetworkListScreen.js +2 -2
  22. package/lib/module/network/components/NetworkModal.js +8 -3
  23. package/lib/module/network/components/NetworkOverridesScreen.js +13 -6
  24. package/lib/module/network/components/NetworkSavedScreen.js +8 -5
  25. package/lib/module/network/components/NetworkSavedScreen.web.js +8 -4
  26. package/lib/module/network/hooks/useNetworkEventList.js +6 -4
  27. package/lib/module/network/hooks/useNetworkEvents.js +20 -13
  28. package/lib/module/network/overrides/types.js +8 -2
  29. package/lib/module/network/utils/networkSavedStore.js +7 -2
  30. package/lib/module/network/utils/selectSavedEvents.js +12 -7
  31. package/lib/typescript/network/components/NetworkDetailStepper.d.ts.map +1 -1
  32. package/lib/typescript/network/components/NetworkDetailStepper.web.d.ts.map +1 -1
  33. package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +1 -1
  34. package/lib/typescript/network/components/NetworkHeaderLive.web.d.ts.map +1 -1
  35. package/lib/typescript/network/components/NetworkListScreen.d.ts.map +1 -1
  36. package/lib/typescript/network/components/NetworkModal.d.ts.map +1 -1
  37. package/lib/typescript/network/components/NetworkOverridesScreen.d.ts.map +1 -1
  38. package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +1 -1
  39. package/lib/typescript/network/components/NetworkSavedScreen.web.d.ts.map +1 -1
  40. package/lib/typescript/network/hooks/useNetworkEventList.d.ts.map +1 -1
  41. package/lib/typescript/network/hooks/useNetworkEvents.d.ts +10 -4
  42. package/lib/typescript/network/hooks/useNetworkEvents.d.ts.map +1 -1
  43. package/lib/typescript/network/overrides/types.d.ts +6 -2
  44. package/lib/typescript/network/overrides/types.d.ts.map +1 -1
  45. package/lib/typescript/network/utils/networkSavedStore.d.ts +6 -2
  46. package/lib/typescript/network/utils/networkSavedStore.d.ts.map +1 -1
  47. package/lib/typescript/network/utils/selectSavedEvents.d.ts +7 -1
  48. package/lib/typescript/network/utils/selectSavedEvents.d.ts.map +1 -1
  49. package/package.json +3 -3
@@ -64,9 +64,10 @@ const NetworkDetailStepper = exports.NetworkDetailStepper = /*#__PURE__*/(0, _re
64
64
  pinnedLiveIds,
65
65
  savedRecords
66
66
  } = (0, _useNetworkSaved.useNetworkSaved)();
67
+ const savedLimit = (0, _sharedUi.useLimit)("network.saved");
67
68
  const ordered = (0, _react.useMemo)(() => {
68
69
  if (fromSaved) {
69
- return (0, _selectSavedEvents.selectSavedEvents)(savedRecords, isPro, savedSearch).events;
70
+ return (0, _selectSavedEvents.selectSavedEvents)(savedRecords, savedLimit, savedSearch).events;
70
71
  }
71
72
  // Same split the list screen does — pins render above the FlatList, so
72
73
  // they come first here too.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.NetworkDetailStepper = void 0;
7
7
  var _react = require("react");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
9
  var _useNetworkEventList = require("../hooks/useNetworkEventList");
9
10
  var _useNetworkSaved = require("../hooks/useNetworkSaved");
10
11
  var _useNetworkSelection = require("../hooks/useNetworkSelection");
@@ -256,9 +257,10 @@ const NetworkDetailStepper = exports.NetworkDetailStepper = /*#__PURE__*/(0, _re
256
257
  pinnedLiveIds,
257
258
  savedRecords
258
259
  } = (0, _useNetworkSaved.useNetworkSaved)();
260
+ const savedLimit = (0, _sharedUi.useLimit)("network.saved");
259
261
  const ordered = (0, _react.useMemo)(() => {
260
262
  if (fromSaved) {
261
- return (0, _selectSavedEvents.selectSavedEvents)(savedRecords, isPro, savedSearch).events;
263
+ return (0, _selectSavedEvents.selectSavedEvents)(savedRecords, savedLimit, savedSearch).events;
262
264
  }
263
265
  // Same split the list screen does — pins render above the list, so they
264
266
  // come first here too.
@@ -277,6 +277,11 @@ const styles = _reactNative.StyleSheet.create({
277
277
  container: {
278
278
  flexDirection: "row",
279
279
  alignItems: "center",
280
+ // Translucent instead of DevToolsCard's opaque fill, so the tool background
281
+ // (see ToolBackground) reads THROUGH the list rather than only around it.
282
+ // Over the plain-black "off" preset this is visually identical to the
283
+ // opaque card it replaces.
284
+ backgroundColor: "rgba(26,26,26,0.62)",
280
285
  borderLeftWidth: 3,
281
286
  borderLeftColor: "transparent",
282
287
  // One hairline per row — the same value DevToolsCard's border uses.
@@ -165,7 +165,7 @@ function NetworkDetailPinActions({
165
165
  pinned,
166
166
  saved
167
167
  } = (0, _networkSavedStore.flagsForEventId)(state, eventId);
168
- const savedLimit = isPro ? _networkSavedStore.MAX_SAVED : _networkSavedStore.FREE_TIER_SAVED_LIMIT;
168
+ const savedLimit = (0, _sharedUi.useLimit)("network.saved");
169
169
  const atPinCap = !pinned && state.pinnedEvents.length >= _networkSavedStore.MAX_PINNED;
170
170
  const atSavedCap = !saved && state.savedRecords.length >= savedLimit;
171
171
  const resolveEvent = () => {
@@ -9,6 +9,7 @@ exports.NetworkHeaderBadges = NetworkHeaderBadges;
9
9
  exports.NetworkHeaderCopyButton = NetworkHeaderCopyButton;
10
10
  exports.NetworkSavedButton = NetworkSavedButton;
11
11
  var _react = require("react");
12
+ var _sharedUi = require("@buoy-gg/shared-ui");
12
13
  var _networkEventStore = require("../utils/networkEventStore");
13
14
  var _networkSavedStore = require("../utils/networkSavedStore");
14
15
  var _useNetworkSaved = require("../hooks/useNetworkSaved");
@@ -350,7 +351,7 @@ function NetworkDetailPinActions({
350
351
  pinned,
351
352
  saved
352
353
  } = (0, _networkSavedStore.flagsForEventId)(state, eventId);
353
- const savedLimit = isPro ? _networkSavedStore.MAX_SAVED : _networkSavedStore.FREE_TIER_SAVED_LIMIT;
354
+ const savedLimit = (0, _sharedUi.useLimit)("network.saved");
354
355
  const atPinCap = !pinned && state.pinnedEvents.length >= _networkSavedStore.MAX_PINNED;
355
356
  const atSavedCap = !saved && state.savedRecords.length >= savedLimit;
356
357
  const resolveEvent = () => {
@@ -237,7 +237,7 @@ function NetworkListScreen({
237
237
  };
238
238
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
239
239
  style: styles.root,
240
- children: [!isEnabled ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
240
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.BackgroundSwitcher, {}), !isEnabled ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
241
241
  style: styles.disabledBanner,
242
242
  children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.Power, {
243
243
  size: 14,
@@ -525,7 +525,7 @@ function NetworkModalInner({
525
525
  const body = /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, {
526
526
  children: [/*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
527
527
  style: styles.container,
528
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(NetworkDetailScreen, {
528
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.ToolBackground, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(NetworkDetailScreen, {
529
529
  visible: hasSelection,
530
530
  paused: paused,
531
531
  ignoredPatternValues: ignoredPatternValues,
@@ -631,7 +631,12 @@ function NetworkModalInner({
631
631
  })]
632
632
  }) : null, /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.UpgradeModal, {
633
633
  visible: showUpgradeModal,
634
- onClose: () => setShowUpgradeModal(false),
634
+ onClose: () => setShowUpgradeModal(false)
635
+ // "saved" is a count limit a free key can raise; "overrides" is one it
636
+ // can't (1 on both tiers) and "export" is Pro-only — freeKeyRaises
637
+ // sorts those out, so the mapping here can stay literal.
638
+ ,
639
+ limitKey: upgradeReason === "saved" ? "network.saved" : upgradeReason === "overrides" ? "network.overrideRules" : undefined,
635
640
  featureName: upgradeReason === "saved" ? "Saved Requests" : upgradeReason === "overrides" ? "Response Overrides" : "Network Export",
636
641
  description: upgradeReason === "saved" ? "Keep the requests that matter. Saved requests survive Clear, app restarts, and the 500-request history cap." : upgradeReason === "overrides" ? "Force any endpoint to fail, stall or return something else — no backend changes, no code changes. Free keeps one active rule." : "Export network requests to share with your team, debug APIs, or feed into AI tools.",
637
642
  benefits: upgradeReason === "overrides" ? [`Run ${_types.MAX_RULES} rules at once (free keeps ${_types.FREE_TIER_RULE_LIMIT})`, "Force a 500, a 401 or an empty list in one tap", "Simulate offline, timeouts and slow connections", "Rules survive an app reload, so you can test the boot path"] : upgradeReason === "saved" ? [`Save up to ${_networkSavedStore.MAX_SAVED} requests (free keeps ${_networkSavedStore.FREE_TIER_SAVED_LIMIT})`, "Failed requests stay put through a Clear", "Snapshots survive an app restart", "Export saved requests to teammates or AI assistants"] : ["Export to JSON, Markdown, or plain text", "Customizable copy presets (URLs only, LLM-ready, full data)", "Share request details with teammates", "Feed network data directly to AI assistants"]
@@ -10,6 +10,7 @@ var _sharedUi = require("@buoy-gg/shared-ui");
10
10
  var _useOverrideRules = require("../hooks/useOverrideRules");
11
11
  var _NetworkOverrideEditor = require("./NetworkOverrideEditor");
12
12
  var _overrideRulesStore = require("../overrides/overrideRulesStore");
13
+ var _types = require("../overrides/types");
13
14
  var _jsxRuntime = require("react/jsx-runtime");
14
15
  /**
15
16
  * The rule manager: what's armed, and how to stop all of it.
@@ -172,6 +173,9 @@ function OverridesBody({
172
173
  backHandlerRef,
173
174
  applySafeAreaInset
174
175
  }) {
176
+ // `isPro` stays a prop so callers can force the unlimited view.
177
+ const tierRuleLimit = (0, _sharedUi.useLimit)("network.overrideRules");
178
+ const ruleLimit = isPro ? _types.MAX_RULES : tierRuleLimit;
175
179
  const {
176
180
  enabled,
177
181
  autoPaused,
@@ -274,8 +278,11 @@ function OverridesBody({
274
278
  * instead of letting you feel its shape. "One override at a time" is a shape
275
279
  * a developer understands.
276
280
  */
277
- const enforceFreeTier = keepId => {
278
- if (isPro) return;
281
+ const enforceRuleLimit = keepId => {
282
+ // Only trims when the tier is actually over its cap, so Pro (whose limit
283
+ // is the hard MAX_RULES ceiling) is never touched.
284
+ const active = rules.filter(rule => rule.enabled && !isRuleSpent(rule));
285
+ if (active.length <= ruleLimit) return;
279
286
  rules.filter(rule => rule.enabled && !isRuleSpent(rule) && rule.id !== keepId).forEach(rule => setRuleEnabled(rule.id, false));
280
287
  };
281
288
  const handleSave = () => {
@@ -293,7 +300,7 @@ function OverridesBody({
293
300
  ...draft,
294
301
  id: editing.id
295
302
  });
296
- enforceFreeTier(saved?.id ?? editing.id);
303
+ enforceRuleLimit(saved?.id ?? editing.id);
297
304
  // Arm the master switch. Deliberately creating a rule and having it sit
298
305
  // inert because overrides happen to be paused is the silent-failure this
299
306
  // feature can least afford — the preset path already does this, and the
@@ -372,9 +379,9 @@ function OverridesBody({
372
379
  spent: isRuleSpent(rule),
373
380
  onEdit: () => openRule(rule),
374
381
  onDelete: () => removeRule(rule.id)
375
- }, rule.id)), !isPro ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
382
+ }, rule.id)), ruleLimit < _types.MAX_RULES ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.Text, {
376
383
  style: styles.footNote,
377
- children: "Free: one override at a time. Pro: up to 50."
384
+ children: `Your plan: ${ruleLimit} override at a time. Pro: up to ${_types.MAX_RULES}.`
378
385
  }) : null]
379
386
  })]
380
387
  });
@@ -62,6 +62,9 @@ function NetworkSavedScreen({
62
62
  toggleSave,
63
63
  clearSaved
64
64
  } = (0, _useNetworkSaved.useNetworkSaved)();
65
+ // Declared with the other hooks: the `!visible` early return below would
66
+ // otherwise make this conditional.
67
+ const savedLimit = (0, _sharedUi.useLimit)("network.saved");
65
68
  const [searchState, setSearchState] = (0, _react.useState)("");
66
69
  const controlled = searchProp != null && onSearchChange != null;
67
70
  const search = controlled ? searchProp : searchState;
@@ -72,7 +75,7 @@ function NetworkSavedScreen({
72
75
  const {
73
76
  events: filtered,
74
77
  lockedCount
75
- } = (0, _selectSavedEvents.selectSavedEvents)(savedRecords, isPro, search);
78
+ } = (0, _selectSavedEvents.selectSavedEvents)(savedRecords, savedLimit, search);
76
79
  const handleLongPress = event => {
77
80
  toggleSave(event);
78
81
  };
@@ -89,7 +92,7 @@ function NetworkSavedScreen({
89
92
  if (lockedCount === 0) return null;
90
93
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(_NetworkUpgradeBanner.NetworkUpgradeBanner, {
91
94
  title: `${lockedCount} saved ${lockedCount === 1 ? "request" : "requests"} locked`,
92
- subtitle: `Free keeps ${_networkSavedStore.FREE_TIER_SAVED_LIMIT}. Upgrade to Pro to unlock the rest.`,
95
+ subtitle: `Your plan keeps ${savedLimit}. Upgrade to Pro to unlock the rest.`,
93
96
  onPress: onUpgradePress
94
97
  });
95
98
  };
@@ -102,7 +105,7 @@ function NetworkSavedScreen({
102
105
  color: _sharedUi.macOSColors.semantic.debug
103
106
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.Text, {
104
107
  style: styles.toolbarTitle,
105
- children: ["SAVED \xB7 ", savedRecords.length, isPro ? "" : `/${_networkSavedStore.FREE_TIER_SAVED_LIMIT}`]
108
+ children: ["SAVED \xB7 ", savedRecords.length, savedLimit >= _networkSavedStore.MAX_SAVED ? "" : `/${savedLimit}`]
106
109
  }), isPro ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_sharedUi.CopyButton
107
110
  // Lazy value, resolved at press time — no string is built per
108
111
  // render, and it always reflects the current list.
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.NetworkSavedScreen = NetworkSavedScreen;
7
7
  var _react = require("react");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
9
  var _NetworkEventItemCompact = require("./NetworkEventItemCompact.web");
9
10
  var _DataViewer = require("./DataViewer.web");
10
11
  var _generateNetworkCopyText = require("../utils/generateNetworkCopyText");
@@ -207,6 +208,9 @@ function NetworkSavedScreen({
207
208
  toggleSave,
208
209
  clearSaved
209
210
  } = (0, _useNetworkSaved.useNetworkSaved)();
211
+ // Declared with the other hooks: the `!visible` early return below would
212
+ // otherwise make this conditional.
213
+ const savedLimit = (0, _sharedUi.useLimit)("network.saved");
210
214
  const [searchState, setSearchState] = (0, _react.useState)("");
211
215
  const controlled = searchProp != null && onSearchChange != null;
212
216
  const search = controlled ? searchProp : searchState;
@@ -217,7 +221,7 @@ function NetworkSavedScreen({
217
221
  const {
218
222
  events: filtered,
219
223
  lockedCount
220
- } = (0, _selectSavedEvents.selectSavedEvents)(savedRecords, isPro, search);
224
+ } = (0, _selectSavedEvents.selectSavedEvents)(savedRecords, savedLimit, search);
221
225
  const handleLongPress = event => {
222
226
  toggleSave(event);
223
227
  };
@@ -225,7 +229,7 @@ function NetworkSavedScreen({
225
229
  if (lockedCount === 0) return null;
226
230
  return /*#__PURE__*/(0, _jsxRuntime.jsx)(NetworkUpgradeBannerWeb, {
227
231
  title: `${lockedCount} saved ${lockedCount === 1 ? "request" : "requests"} locked`,
228
- subtitle: `Free keeps ${_networkSavedStore.FREE_TIER_SAVED_LIMIT}. Upgrade to Pro to unlock the rest.`,
232
+ subtitle: `Your plan keeps ${savedLimit}. Upgrade to Pro to unlock the rest.`,
229
233
  onPress: onUpgradePress
230
234
  });
231
235
  };
@@ -238,7 +242,7 @@ function NetworkSavedScreen({
238
242
  color: macOSColors.semantic.debug
239
243
  }), /*#__PURE__*/(0, _jsxRuntime.jsxs)("span", {
240
244
  style: styles.toolbarTitle,
241
- children: ["SAVED \xB7 ", savedRecords.length, isPro ? "" : `/${_networkSavedStore.FREE_TIER_SAVED_LIMIT}`]
245
+ children: ["SAVED \xB7 ", savedRecords.length, savedLimit >= _networkSavedStore.MAX_SAVED ? "" : `/${savedLimit}`]
242
246
  }), isPro ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_DataViewer.CopyButton
243
247
  // Lazy value, resolved at press time — no string is built per
244
248
  // render, and it always reflects the current list.
@@ -5,9 +5,9 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.useNetworkEventList = useNetworkEventList;
7
7
  var _react = require("react");
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
9
  var _networkEventStore = require("../utils/networkEventStore");
9
10
  var _filterNetworkEvents = require("../utils/filterNetworkEvents");
10
- var _useNetworkEvents = require("./useNetworkEvents");
11
11
  /**
12
12
  * Narrow store subscription for components that render the network event
13
13
  * LIST (or need the filtered list). Decomposed from `useNetworkEvents`
@@ -34,6 +34,9 @@ function useNetworkEventList(options) {
34
34
  visible = true,
35
35
  isPro
36
36
  } = options;
37
+ const tierLimit = (0, _sharedUi.useLimit)("network.requests");
38
+ // `isPro` stays an option so callers can force the unlimited view.
39
+ const requestLimit = isPro ? Infinity : tierLimit;
37
40
  const [events, setEvents] = (0, _react.useState)(() => _networkEventStore.networkEventStore.getEvents());
38
41
  (0, _react.useEffect)(() => {
39
42
  // Hidden: neither subscribe nor sync — a hidden screen re-rendering for
@@ -82,13 +85,12 @@ function useNetworkEventList(options) {
82
85
  // Free tier: events beyond the limit in the ORIGINAL order are locked,
83
86
  // so locked events stay locked even when searching (ported verbatim).
84
87
  const lockedEventIds = (0, _react.useMemo)(() => {
85
- if (isPro) return new Set();
86
88
  const lockedIds = new Set();
87
- events.slice(_useNetworkEvents.FREE_TIER_REQUEST_LIMIT).forEach(event => {
89
+ events.slice(requestLimit).forEach(event => {
88
90
  lockedIds.add(event.id);
89
91
  });
90
92
  return lockedIds;
91
- }, [events, isPro]);
93
+ }, [events, requestLimit]);
92
94
  const visibleEvents = (0, _react.useMemo)(() => {
93
95
  if (lockedEventIds.size === 0) return filteredEvents;
94
96
  return filteredEvents.filter(event => !lockedEventIds.has(event.id));
@@ -7,6 +7,7 @@ exports.FREE_TIER_REQUEST_LIMIT = void 0;
7
7
  exports.useNetworkEvents = useNetworkEvents;
8
8
  var _react = require("react");
9
9
  var _networkEventStore = require("../utils/networkEventStore");
10
+ var _sharedUi = require("@buoy-gg/shared-ui");
10
11
  var _formatGraphQLVariables = require("../utils/formatGraphQLVariables");
11
12
  /**
12
13
  * Hook for accessing network events and controls
@@ -15,8 +16,12 @@ var _formatGraphQLVariables = require("../utils/formatGraphQLVariables");
15
16
  * starts when this hook mounts and stops when all subscribers unmount.
16
17
  */
17
18
 
18
- /** Free tier limit for network requests */
19
- const FREE_TIER_REQUEST_LIMIT = exports.FREE_TIER_REQUEST_LIMIT = 25;
19
+ /**
20
+ * @deprecated Read the live limit with `useLimit("network.requests")` — this
21
+ * only reports the FREE tier's value and is blind to the anonymous tier. Kept
22
+ * because it is part of the package's public exports.
23
+ */
24
+ const FREE_TIER_REQUEST_LIMIT = exports.FREE_TIER_REQUEST_LIMIT = _sharedUi.TIER_LIMITS["network.requests"].free;
20
25
 
21
26
  /**
22
27
  * Custom hook for accessing network events and controls
@@ -55,12 +60,17 @@ const FREE_TIER_REQUEST_LIMIT = exports.FREE_TIER_REQUEST_LIMIT = 25;
55
60
  * @performance Optimizes string operations and array processing for large datasets
56
61
  * @performance Includes Set-based lookups for O(1) filter matching
57
62
  *
58
- * @param options.isPro - Whether user has Pro access (unlimited events). Defaults to false (limited to FREE_TIER_REQUEST_LIMIT)
63
+ * @param options.isPro - Force the unlimited view. Defaults to false, in
64
+ * which case the current tier's limit from `useLimit("network.requests")`
65
+ * applies.
59
66
  */
60
67
  function useNetworkEvents(options = {}) {
61
68
  const {
62
69
  isPro = false
63
70
  } = options;
71
+ const tierLimit = (0, _sharedUi.useLimit)("network.requests");
72
+ // `isPro` stays an option so callers can force the unlimited view.
73
+ const requestLimit = isPro ? Infinity : tierLimit;
64
74
  const [events, setEvents] = (0, _react.useState)([]);
65
75
  const [filter, setFilter] = (0, _react.useState)({});
66
76
  const [isCapturing, setIsCapturing] = (0, _react.useState)(true);
@@ -189,19 +199,16 @@ function useNetworkEvents(options = {}) {
189
199
  return filtered;
190
200
  }, [events, filter, searchLower, methodSet, contentTypeSet]);
191
201
 
192
- // For free users, determine which events are "locked" (beyond the limit)
193
- // Based on original event order, not filtered results - so locked events stay locked even when searching
202
+ // Events beyond the tier limit are "locked". Keyed off the ORIGINAL event
203
+ // order, not the filtered results, so locked events stay locked when
204
+ // searching. slice(Infinity) is empty, so Pro locks nothing.
194
205
  const lockedEventIds = (0, _react.useMemo)(() => {
195
- if (isPro) {
196
- return new Set();
197
- }
198
- // Events beyond the limit in the ORIGINAL events array are locked
199
206
  const lockedIds = new Set();
200
- events.slice(FREE_TIER_REQUEST_LIMIT).forEach(event => {
207
+ events.slice(requestLimit).forEach(event => {
201
208
  lockedIds.add(event.id);
202
209
  });
203
210
  return lockedIds;
204
- }, [events, isPro]);
211
+ }, [events, requestLimit]);
205
212
 
206
213
  // Check if there are locked events in the current filtered results
207
214
  const lockedEventsInFilter = (0, _react.useMemo)(() => {
@@ -303,8 +310,8 @@ function useNetworkEvents(options = {}) {
303
310
  lockedEventCount,
304
311
  /** Check if a specific event is locked (by ID) */
305
312
  isEventLocked,
306
- /** Free tier request limit */
307
- requestLimit: FREE_TIER_REQUEST_LIMIT,
313
+ /** The live request limit for this tier (Infinity when unlimited). */
314
+ requestLimit,
308
315
  /** Get subscriber counts for debugging */
309
316
  getSubscriberCounts: () => _networkEventStore.networkEventStore.getSubscriberCounts()
310
317
  };
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.STATUS_MIN = exports.STATUS_MAX = exports.MAX_RULES = exports.FREE_TIER_RULE_LIMIT = void 0;
7
7
  exports.markForOutcome = markForOutcome;
8
+ var _sharedUi = require("@buoy-gg/shared-ui");
8
9
  /**
9
10
  * Network response overrides — the rule model.
10
11
  *
@@ -60,8 +61,12 @@ const STATUS_MAX = exports.STATUS_MAX = 599;
60
61
  /** Bounds the persisted list so a runaway UI can't fill storage. */
61
62
  const MAX_RULES = exports.MAX_RULES = 50;
62
63
 
63
- /** Free tier gets one active rule; Pro is unlimited (up to MAX_RULES). */
64
- const FREE_TIER_RULE_LIMIT = exports.FREE_TIER_RULE_LIMIT = 1;
64
+ /**
65
+ * @deprecated Read the live limit with `useLimit("network.overrideRules")` —
66
+ * this only reports the FREE tier's value. Kept because it is part of the
67
+ * package's public exports.
68
+ */
69
+ const FREE_TIER_RULE_LIMIT = exports.FREE_TIER_RULE_LIMIT = _sharedUi.TIER_LIMITS["network.overrideRules"].free;
65
70
 
66
71
  /**
67
72
  * Stamped onto the `NetworkEvent` a rule affected, so the list can badge the
@@ -42,8 +42,12 @@ const SESSION_ID = exports.SESSION_ID = `${Date.now().toString(36)}_${Math.rando
42
42
  const MAX_PINNED = exports.MAX_PINNED = 25;
43
43
  /** Upper bound on the persisted favorites list (oldest unpinned evicted). */
44
44
  const MAX_SAVED = exports.MAX_SAVED = 50;
45
- /** Free tier keeps a handful of favorites; Pro is unlimited (up to MAX_SAVED). */
46
- const FREE_TIER_SAVED_LIMIT = exports.FREE_TIER_SAVED_LIMIT = 5;
45
+ /**
46
+ * @deprecated Read the live limit with `useLimit("network.saved")` — this only
47
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
48
+ * because it is part of the package's public exports.
49
+ */
50
+ const FREE_TIER_SAVED_LIMIT = exports.FREE_TIER_SAVED_LIMIT = _sharedUi.TIER_LIMITS["network.saved"].free;
47
51
  /** Per-body cap on a snapshot. */
48
52
  const BODY_LIMIT = 16 * 1024;
49
53
  /**
@@ -16,14 +16,19 @@ var _networkSavedStore = require("./networkSavedStore");
16
16
  * exists to prevent for the live list.
17
17
  */
18
18
 
19
- function selectSavedEvents(savedRecords, isPro, search) {
19
+ function selectSavedEvents(savedRecords,
20
+ /**
21
+ * How many saves this tier may see — `useLimit("network.saved")`. Takes a
22
+ * number rather than `isPro` because there are now three tiers, and a
23
+ * boolean cannot express the anonymous one.
24
+ */
25
+ limit, search) {
20
26
  /**
21
- * A downgrade (or a limit change) can leave a free user holding more saves
22
- * than the free tier allows. Rather than deleting their data, the overflow
23
- * is LOCKED — oldest first, so the newest saves stay reachable.
27
+ * A downgrade (or a limit change) can leave a user holding more saves than
28
+ * their tier allows. Rather than deleting their data, the overflow is
29
+ * LOCKED — oldest first, so the newest saves stay reachable.
24
30
  */
25
- const limit = isPro ? _networkSavedStore.MAX_SAVED : _networkSavedStore.FREE_TIER_SAVED_LIMIT;
26
- const unlocked = savedRecords.slice(0, limit);
31
+ const unlocked = savedRecords.slice(0, Math.min(limit, _networkSavedStore.MAX_SAVED));
27
32
  const events = unlocked.map(record => record.event);
28
33
  return {
29
34
  events: search ? (0, _filterNetworkEvents.filterNetworkEvents)(events, {
@@ -27,7 +27,7 @@
27
27
  */
28
28
 
29
29
  import { memo, useEffect, useMemo } from "react";
30
- import { EventStepperFooter } from "@buoy-gg/shared-ui";
30
+ import { EventStepperFooter, useLimit } from "@buoy-gg/shared-ui";
31
31
  import { useNetworkEventList } from "../hooks/useNetworkEventList";
32
32
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
33
33
  import { useNetworkCursor } from "../hooks/useNetworkSelection";
@@ -60,9 +60,10 @@ export const NetworkDetailStepper = /*#__PURE__*/memo(function NetworkDetailStep
60
60
  pinnedLiveIds,
61
61
  savedRecords
62
62
  } = useNetworkSaved();
63
+ const savedLimit = useLimit("network.saved");
63
64
  const ordered = useMemo(() => {
64
65
  if (fromSaved) {
65
- return selectSavedEvents(savedRecords, isPro, savedSearch).events;
66
+ return selectSavedEvents(savedRecords, savedLimit, savedSearch).events;
66
67
  }
67
68
  // Same split the list screen does — pins render above the FlatList, so
68
69
  // they come first here too.
@@ -25,6 +25,7 @@
25
25
  */
26
26
 
27
27
  import { memo, useEffect, useMemo } from "react";
28
+ import { useLimit } from "@buoy-gg/shared-ui";
28
29
  import { useNetworkEventList } from "../hooks/useNetworkEventList";
29
30
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
30
31
  import { useNetworkCursor } from "../hooks/useNetworkSelection";
@@ -254,9 +255,10 @@ export const NetworkDetailStepper = /*#__PURE__*/memo(function NetworkDetailStep
254
255
  pinnedLiveIds,
255
256
  savedRecords
256
257
  } = useNetworkSaved();
258
+ const savedLimit = useLimit("network.saved");
257
259
  const ordered = useMemo(() => {
258
260
  if (fromSaved) {
259
- return selectSavedEvents(savedRecords, isPro, savedSearch).events;
261
+ return selectSavedEvents(savedRecords, savedLimit, savedSearch).events;
260
262
  }
261
263
  // Same split the list screen does — pins render above the list, so they
262
264
  // come first here too.
@@ -274,6 +274,11 @@ const styles = StyleSheet.create({
274
274
  container: {
275
275
  flexDirection: "row",
276
276
  alignItems: "center",
277
+ // Translucent instead of DevToolsCard's opaque fill, so the tool background
278
+ // (see ToolBackground) reads THROUGH the list rather than only around it.
279
+ // Over the plain-black "off" preset this is visually identical to the
280
+ // opaque card it replaces.
281
+ backgroundColor: "rgba(26,26,26,0.62)",
277
282
  borderLeftWidth: 3,
278
283
  borderLeftColor: "transparent",
279
284
  // One hairline per row — the same value DevToolsCard's border uses.
@@ -19,9 +19,9 @@
19
19
  */
20
20
 
21
21
  import { StyleSheet, Text, TouchableOpacity, View } from "react-native";
22
- import { Bookmark, CheckCircle, XCircle, Clock, Copy, Pin, Trash2, CopyButton, macOSColors } from "@buoy-gg/shared-ui";
22
+ import { Bookmark, CheckCircle, XCircle, Clock, Copy, Pin, Trash2, CopyButton, macOSColors, useLimit } from "@buoy-gg/shared-ui";
23
23
  import { networkEventStore } from "../utils/networkEventStore";
24
- import { flagsForEventId, networkSavedStore, FREE_TIER_SAVED_LIMIT, MAX_PINNED, MAX_SAVED } from "../utils/networkSavedStore";
24
+ import { flagsForEventId, networkSavedStore, MAX_PINNED, MAX_SAVED } from "../utils/networkSavedStore";
25
25
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
26
26
  import { useSelectedNetworkEventId } from "../hooks/useNetworkSelection";
27
27
  import { useNetworkBadgeCounts } from "../hooks/useNetworkBadgeCounts";
@@ -157,7 +157,7 @@ export function NetworkDetailPinActions({
157
157
  pinned,
158
158
  saved
159
159
  } = flagsForEventId(state, eventId);
160
- const savedLimit = isPro ? MAX_SAVED : FREE_TIER_SAVED_LIMIT;
160
+ const savedLimit = useLimit("network.saved");
161
161
  const atPinCap = !pinned && state.pinnedEvents.length >= MAX_PINNED;
162
162
  const atSavedCap = !saved && state.savedRecords.length >= savedLimit;
163
163
  const resolveEvent = () => {
@@ -44,8 +44,9 @@
44
44
  */
45
45
 
46
46
  import { useEffect, useRef, useState } from "react";
47
+ import { useLimit } from "@buoy-gg/shared-ui";
47
48
  import { networkEventStore } from "../utils/networkEventStore";
48
- import { flagsForEventId, networkSavedStore, FREE_TIER_SAVED_LIMIT, MAX_PINNED, MAX_SAVED } from "../utils/networkSavedStore";
49
+ import { flagsForEventId, networkSavedStore, MAX_PINNED, MAX_SAVED } from "../utils/networkSavedStore";
49
50
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
50
51
  import { useSelectedNetworkEventId } from "../hooks/useNetworkSelection";
51
52
  import { useNetworkBadgeCounts } from "../hooks/useNetworkBadgeCounts";
@@ -344,7 +345,7 @@ export function NetworkDetailPinActions({
344
345
  pinned,
345
346
  saved
346
347
  } = flagsForEventId(state, eventId);
347
- const savedLimit = isPro ? MAX_SAVED : FREE_TIER_SAVED_LIMIT;
348
+ const savedLimit = useLimit("network.saved");
348
349
  const atPinCap = !pinned && state.pinnedEvents.length >= MAX_PINNED;
349
350
  const atSavedCap = !saved && state.savedRecords.length >= savedLimit;
350
351
  const resolveEvent = () => {
@@ -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, Globe, Pin, Power, macOSColors } from "@buoy-gg/shared-ui";
17
+ import { FlaskConical, Globe, Pin, Power, macOSColors, BackgroundSwitcher } from "@buoy-gg/shared-ui";
18
18
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
19
19
  import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
20
20
  import { useNetworkEventList } from "../hooks/useNetworkEventList";
@@ -233,7 +233,7 @@ export function NetworkListScreen({
233
233
  };
234
234
  return /*#__PURE__*/_jsxs(View, {
235
235
  style: styles.root,
236
- children: [!isEnabled ? /*#__PURE__*/_jsxs(View, {
236
+ children: [/*#__PURE__*/_jsx(BackgroundSwitcher, {}), !isEnabled ? /*#__PURE__*/_jsxs(View, {
237
237
  style: styles.disabledBanner,
238
238
  children: [/*#__PURE__*/_jsx(Power, {
239
239
  size: 14,
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useState, useRef, useEffect, useCallback } from "react";
4
4
  import { View, StyleSheet, TouchableOpacity, TextInput } from "react-native";
5
- import { Search, Filter, Bookmark, X, JsModal, ModalHeader, devToolsStorageKeys, macOSColors, persistentStorage, TabSelector, useFeatureGate, UpgradeModal, PowerToggleButton, useIgnoredPatterns } from "@buoy-gg/shared-ui";
5
+ import { Search, Filter, Bookmark, X, JsModal, ModalHeader, devToolsStorageKeys, macOSColors, persistentStorage, TabSelector, useFeatureGate, UpgradeModal, PowerToggleButton, useIgnoredPatterns, ToolBackground } from "@buoy-gg/shared-ui";
6
6
  import { NetworkFilterViewV3 } from "./NetworkFilterViewV3";
7
7
  import { TickProvider } from "../hooks/useTickEveryMinute";
8
8
  import { NetworkEventDetailView } from "./NetworkEventDetailView";
@@ -520,7 +520,7 @@ function NetworkModalInner({
520
520
  const body = /*#__PURE__*/_jsxs(_Fragment, {
521
521
  children: [/*#__PURE__*/_jsxs(View, {
522
522
  style: styles.container,
523
- children: [/*#__PURE__*/_jsx(NetworkDetailScreen, {
523
+ children: [/*#__PURE__*/_jsx(ToolBackground, {}), /*#__PURE__*/_jsx(NetworkDetailScreen, {
524
524
  visible: hasSelection,
525
525
  paused: paused,
526
526
  ignoredPatternValues: ignoredPatternValues,
@@ -626,7 +626,12 @@ function NetworkModalInner({
626
626
  })]
627
627
  }) : null, /*#__PURE__*/_jsx(UpgradeModal, {
628
628
  visible: showUpgradeModal,
629
- onClose: () => setShowUpgradeModal(false),
629
+ onClose: () => setShowUpgradeModal(false)
630
+ // "saved" is a count limit a free key can raise; "overrides" is one it
631
+ // can't (1 on both tiers) and "export" is Pro-only — freeKeyRaises
632
+ // sorts those out, so the mapping here can stay literal.
633
+ ,
634
+ limitKey: upgradeReason === "saved" ? "network.saved" : upgradeReason === "overrides" ? "network.overrideRules" : undefined,
630
635
  featureName: upgradeReason === "saved" ? "Saved Requests" : upgradeReason === "overrides" ? "Response Overrides" : "Network Export",
631
636
  description: upgradeReason === "saved" ? "Keep the requests that matter. Saved requests survive Clear, app restarts, and the 500-request history cap." : upgradeReason === "overrides" ? "Force any endpoint to fail, stall or return something else — no backend changes, no code changes. Free keeps one active rule." : "Export network requests to share with your team, debug APIs, or feed into AI tools.",
632
637
  benefits: upgradeReason === "overrides" ? [`Run ${MAX_OVERRIDE_RULES} rules at once (free keeps ${FREE_TIER_OVERRIDE_LIMIT})`, "Force a 500, a 401 or an empty list in one tap", "Simulate offline, timeouts and slow connections", "Rules survive an app reload, so you can test the boot path"] : upgradeReason === "saved" ? [`Save up to ${MAX_SAVED} requests (free keeps ${FREE_TIER_SAVED_LIMIT})`, "Failed requests stay put through a Clear", "Snapshots survive an app restart", "Export saved requests to teammates or AI assistants"] : ["Export to JSON, Markdown, or plain text", "Customizable copy presets (URLs only, LLM-ready, full data)", "Share request details with teammates", "Feed network data directly to AI assistants"]
@@ -2,10 +2,11 @@
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, FlaskConical, MethodBadge, Plus, Trash2, macOSColors } from "@buoy-gg/shared-ui";
5
+ import { AlertCircle, AlertTriangle, DevToolsCard, EmptyState, FlaskConical, 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";
9
+ import { MAX_RULES } from "../overrides/types";
9
10
 
10
11
  /**
11
12
  * The rule manager: what's armed, and how to stop all of it.
@@ -168,6 +169,9 @@ function OverridesBody({
168
169
  backHandlerRef,
169
170
  applySafeAreaInset
170
171
  }) {
172
+ // `isPro` stays a prop so callers can force the unlimited view.
173
+ const tierRuleLimit = useLimit("network.overrideRules");
174
+ const ruleLimit = isPro ? MAX_RULES : tierRuleLimit;
171
175
  const {
172
176
  enabled,
173
177
  autoPaused,
@@ -270,8 +274,11 @@ function OverridesBody({
270
274
  * instead of letting you feel its shape. "One override at a time" is a shape
271
275
  * a developer understands.
272
276
  */
273
- const enforceFreeTier = keepId => {
274
- if (isPro) return;
277
+ const enforceRuleLimit = keepId => {
278
+ // Only trims when the tier is actually over its cap, so Pro (whose limit
279
+ // is the hard MAX_RULES ceiling) is never touched.
280
+ const active = rules.filter(rule => rule.enabled && !isRuleSpent(rule));
281
+ if (active.length <= ruleLimit) return;
275
282
  rules.filter(rule => rule.enabled && !isRuleSpent(rule) && rule.id !== keepId).forEach(rule => setRuleEnabled(rule.id, false));
276
283
  };
277
284
  const handleSave = () => {
@@ -289,7 +296,7 @@ function OverridesBody({
289
296
  ...draft,
290
297
  id: editing.id
291
298
  });
292
- enforceFreeTier(saved?.id ?? editing.id);
299
+ enforceRuleLimit(saved?.id ?? editing.id);
293
300
  // Arm the master switch. Deliberately creating a rule and having it sit
294
301
  // inert because overrides happen to be paused is the silent-failure this
295
302
  // feature can least afford — the preset path already does this, and the
@@ -368,9 +375,9 @@ function OverridesBody({
368
375
  spent: isRuleSpent(rule),
369
376
  onEdit: () => openRule(rule),
370
377
  onDelete: () => removeRule(rule.id)
371
- }, rule.id)), !isPro ? /*#__PURE__*/_jsx(Text, {
378
+ }, rule.id)), ruleLimit < MAX_RULES ? /*#__PURE__*/_jsx(Text, {
372
379
  style: styles.footNote,
373
- children: "Free: one override at a time. Pro: up to 50."
380
+ children: `Your plan: ${ruleLimit} override at a time. Pro: up to ${MAX_RULES}.`
374
381
  }) : null]
375
382
  })]
376
383
  });
@@ -19,13 +19,13 @@
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 } from "@buoy-gg/shared-ui";
22
+ import { Bookmark, CopyButton, Search, macOSColors, useLimit } from "@buoy-gg/shared-ui";
23
23
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
24
24
  import { NetworkUpgradeBanner } from "./NetworkUpgradeBanner";
25
25
  import { generateNetworkCopyText } from "../utils/generateNetworkCopyText";
26
26
  import { selectSavedEvents } from "../utils/selectSavedEvents";
27
27
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
28
- import { FREE_TIER_SAVED_LIMIT } from "../utils/networkSavedStore";
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
31
  function EmptyState() {
@@ -58,6 +58,9 @@ export function NetworkSavedScreen({
58
58
  toggleSave,
59
59
  clearSaved
60
60
  } = useNetworkSaved();
61
+ // Declared with the other hooks: the `!visible` early return below would
62
+ // otherwise make this conditional.
63
+ const savedLimit = useLimit("network.saved");
61
64
  const [searchState, setSearchState] = useState("");
62
65
  const controlled = searchProp != null && onSearchChange != null;
63
66
  const search = controlled ? searchProp : searchState;
@@ -68,7 +71,7 @@ export function NetworkSavedScreen({
68
71
  const {
69
72
  events: filtered,
70
73
  lockedCount
71
- } = selectSavedEvents(savedRecords, isPro, search);
74
+ } = selectSavedEvents(savedRecords, savedLimit, search);
72
75
  const handleLongPress = event => {
73
76
  toggleSave(event);
74
77
  };
@@ -85,7 +88,7 @@ export function NetworkSavedScreen({
85
88
  if (lockedCount === 0) return null;
86
89
  return /*#__PURE__*/_jsx(NetworkUpgradeBanner, {
87
90
  title: `${lockedCount} saved ${lockedCount === 1 ? "request" : "requests"} locked`,
88
- subtitle: `Free keeps ${FREE_TIER_SAVED_LIMIT}. Upgrade to Pro to unlock the rest.`,
91
+ subtitle: `Your plan keeps ${savedLimit}. Upgrade to Pro to unlock the rest.`,
89
92
  onPress: onUpgradePress
90
93
  });
91
94
  };
@@ -98,7 +101,7 @@ export function NetworkSavedScreen({
98
101
  color: macOSColors.semantic.debug
99
102
  }), /*#__PURE__*/_jsxs(Text, {
100
103
  style: styles.toolbarTitle,
101
- children: ["SAVED \xB7 ", savedRecords.length, isPro ? "" : `/${FREE_TIER_SAVED_LIMIT}`]
104
+ children: ["SAVED \xB7 ", savedRecords.length, savedLimit >= MAX_SAVED ? "" : `/${savedLimit}`]
102
105
  }), isPro ? /*#__PURE__*/_jsx(CopyButton
103
106
  // Lazy value, resolved at press time — no string is built per
104
107
  // render, and it always reflects the current list.
@@ -46,12 +46,13 @@
46
46
  */
47
47
 
48
48
  import { useState } from "react";
49
+ import { useLimit } from "@buoy-gg/shared-ui";
49
50
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact.web";
50
51
  import { CopyButton } from "./DataViewer.web";
51
52
  import { generateNetworkCopyText } from "../utils/generateNetworkCopyText";
52
53
  import { selectSavedEvents } from "../utils/selectSavedEvents";
53
54
  import { useNetworkSaved } from "../hooks/useNetworkSaved";
54
- import { FREE_TIER_SAVED_LIMIT } from "../utils/networkSavedStore";
55
+ import { MAX_SAVED } from "../utils/networkSavedStore";
55
56
 
56
57
  // =============================
57
58
  // Native palettes (provenance)
@@ -205,6 +206,9 @@ export function NetworkSavedScreen({
205
206
  toggleSave,
206
207
  clearSaved
207
208
  } = useNetworkSaved();
209
+ // Declared with the other hooks: the `!visible` early return below would
210
+ // otherwise make this conditional.
211
+ const savedLimit = useLimit("network.saved");
208
212
  const [searchState, setSearchState] = useState("");
209
213
  const controlled = searchProp != null && onSearchChange != null;
210
214
  const search = controlled ? searchProp : searchState;
@@ -215,7 +219,7 @@ export function NetworkSavedScreen({
215
219
  const {
216
220
  events: filtered,
217
221
  lockedCount
218
- } = selectSavedEvents(savedRecords, isPro, search);
222
+ } = selectSavedEvents(savedRecords, savedLimit, search);
219
223
  const handleLongPress = event => {
220
224
  toggleSave(event);
221
225
  };
@@ -223,7 +227,7 @@ export function NetworkSavedScreen({
223
227
  if (lockedCount === 0) return null;
224
228
  return /*#__PURE__*/_jsx(NetworkUpgradeBannerWeb, {
225
229
  title: `${lockedCount} saved ${lockedCount === 1 ? "request" : "requests"} locked`,
226
- subtitle: `Free keeps ${FREE_TIER_SAVED_LIMIT}. Upgrade to Pro to unlock the rest.`,
230
+ subtitle: `Your plan keeps ${savedLimit}. Upgrade to Pro to unlock the rest.`,
227
231
  onPress: onUpgradePress
228
232
  });
229
233
  };
@@ -236,7 +240,7 @@ export function NetworkSavedScreen({
236
240
  color: macOSColors.semantic.debug
237
241
  }), /*#__PURE__*/_jsxs("span", {
238
242
  style: styles.toolbarTitle,
239
- children: ["SAVED \xB7 ", savedRecords.length, isPro ? "" : `/${FREE_TIER_SAVED_LIMIT}`]
243
+ children: ["SAVED \xB7 ", savedRecords.length, savedLimit >= MAX_SAVED ? "" : `/${savedLimit}`]
240
244
  }), isPro ? /*#__PURE__*/_jsx(CopyButton
241
245
  // Lazy value, resolved at press time — no string is built per
242
246
  // render, and it always reflects the current list.
@@ -19,9 +19,9 @@
19
19
  */
20
20
 
21
21
  import { useEffect, useMemo, useState } from "react";
22
+ import { useLimit } from "@buoy-gg/shared-ui";
22
23
  import { networkEventStore } from "../utils/networkEventStore";
23
24
  import { applyIgnoredPatterns, filterNetworkEvents } from "../utils/filterNetworkEvents";
24
- import { FREE_TIER_REQUEST_LIMIT } from "./useNetworkEvents";
25
25
  export function useNetworkEventList(options) {
26
26
  const {
27
27
  filter,
@@ -30,6 +30,9 @@ export function useNetworkEventList(options) {
30
30
  visible = true,
31
31
  isPro
32
32
  } = options;
33
+ const tierLimit = useLimit("network.requests");
34
+ // `isPro` stays an option so callers can force the unlimited view.
35
+ const requestLimit = isPro ? Infinity : tierLimit;
33
36
  const [events, setEvents] = useState(() => networkEventStore.getEvents());
34
37
  useEffect(() => {
35
38
  // Hidden: neither subscribe nor sync — a hidden screen re-rendering for
@@ -78,13 +81,12 @@ export function useNetworkEventList(options) {
78
81
  // Free tier: events beyond the limit in the ORIGINAL order are locked,
79
82
  // so locked events stay locked even when searching (ported verbatim).
80
83
  const lockedEventIds = useMemo(() => {
81
- if (isPro) return new Set();
82
84
  const lockedIds = new Set();
83
- events.slice(FREE_TIER_REQUEST_LIMIT).forEach(event => {
85
+ events.slice(requestLimit).forEach(event => {
84
86
  lockedIds.add(event.id);
85
87
  });
86
88
  return lockedIds;
87
- }, [events, isPro]);
89
+ }, [events, requestLimit]);
88
90
  const visibleEvents = useMemo(() => {
89
91
  if (lockedEventIds.size === 0) return filteredEvents;
90
92
  return filteredEvents.filter(event => !lockedEventIds.has(event.id));
@@ -9,10 +9,15 @@
9
9
 
10
10
  import { useState, useEffect, useCallback, useMemo, useRef } from "react";
11
11
  import { networkEventStore } from "../utils/networkEventStore";
12
+ import { useLimit, TIER_LIMITS } from "@buoy-gg/shared-ui";
12
13
  import { searchGraphQLVariables } from "../utils/formatGraphQLVariables";
13
14
 
14
- /** Free tier limit for network requests */
15
- export const FREE_TIER_REQUEST_LIMIT = 25;
15
+ /**
16
+ * @deprecated Read the live limit with `useLimit("network.requests")` — this
17
+ * only reports the FREE tier's value and is blind to the anonymous tier. Kept
18
+ * because it is part of the package's public exports.
19
+ */
20
+ export const FREE_TIER_REQUEST_LIMIT = TIER_LIMITS["network.requests"].free;
16
21
 
17
22
  /**
18
23
  * Custom hook for accessing network events and controls
@@ -51,12 +56,17 @@ export const FREE_TIER_REQUEST_LIMIT = 25;
51
56
  * @performance Optimizes string operations and array processing for large datasets
52
57
  * @performance Includes Set-based lookups for O(1) filter matching
53
58
  *
54
- * @param options.isPro - Whether user has Pro access (unlimited events). Defaults to false (limited to FREE_TIER_REQUEST_LIMIT)
59
+ * @param options.isPro - Force the unlimited view. Defaults to false, in
60
+ * which case the current tier's limit from `useLimit("network.requests")`
61
+ * applies.
55
62
  */
56
63
  export function useNetworkEvents(options = {}) {
57
64
  const {
58
65
  isPro = false
59
66
  } = options;
67
+ const tierLimit = useLimit("network.requests");
68
+ // `isPro` stays an option so callers can force the unlimited view.
69
+ const requestLimit = isPro ? Infinity : tierLimit;
60
70
  const [events, setEvents] = useState([]);
61
71
  const [filter, setFilter] = useState({});
62
72
  const [isCapturing, setIsCapturing] = useState(true);
@@ -185,19 +195,16 @@ export function useNetworkEvents(options = {}) {
185
195
  return filtered;
186
196
  }, [events, filter, searchLower, methodSet, contentTypeSet]);
187
197
 
188
- // For free users, determine which events are "locked" (beyond the limit)
189
- // Based on original event order, not filtered results - so locked events stay locked even when searching
198
+ // Events beyond the tier limit are "locked". Keyed off the ORIGINAL event
199
+ // order, not the filtered results, so locked events stay locked when
200
+ // searching. slice(Infinity) is empty, so Pro locks nothing.
190
201
  const lockedEventIds = useMemo(() => {
191
- if (isPro) {
192
- return new Set();
193
- }
194
- // Events beyond the limit in the ORIGINAL events array are locked
195
202
  const lockedIds = new Set();
196
- events.slice(FREE_TIER_REQUEST_LIMIT).forEach(event => {
203
+ events.slice(requestLimit).forEach(event => {
197
204
  lockedIds.add(event.id);
198
205
  });
199
206
  return lockedIds;
200
- }, [events, isPro]);
207
+ }, [events, requestLimit]);
201
208
 
202
209
  // Check if there are locked events in the current filtered results
203
210
  const lockedEventsInFilter = useMemo(() => {
@@ -299,8 +306,8 @@ export function useNetworkEvents(options = {}) {
299
306
  lockedEventCount,
300
307
  /** Check if a specific event is locked (by ID) */
301
308
  isEventLocked,
302
- /** Free tier request limit */
303
- requestLimit: FREE_TIER_REQUEST_LIMIT,
309
+ /** The live request limit for this tier (Infinity when unlimited). */
310
+ requestLimit,
304
311
  /** Get subscriber counts for debugging */
305
312
  getSubscriberCounts: () => networkEventStore.getSubscriberCounts()
306
313
  };
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import { TIER_LIMITS } from "@buoy-gg/shared-ui";
4
+
3
5
  /**
4
6
  * Network response overrides — the rule model.
5
7
  *
@@ -55,8 +57,12 @@ export const STATUS_MAX = 599;
55
57
  /** Bounds the persisted list so a runaway UI can't fill storage. */
56
58
  export const MAX_RULES = 50;
57
59
 
58
- /** Free tier gets one active rule; Pro is unlimited (up to MAX_RULES). */
59
- export const FREE_TIER_RULE_LIMIT = 1;
60
+ /**
61
+ * @deprecated Read the live limit with `useLimit("network.overrideRules")` —
62
+ * this only reports the FREE tier's value. Kept because it is part of the
63
+ * package's public exports.
64
+ */
65
+ export const FREE_TIER_RULE_LIMIT = TIER_LIMITS["network.overrideRules"].free;
60
66
 
61
67
  /**
62
68
  * Stamped onto the `NetworkEvent` a rule affected, so the list can badge the
@@ -29,6 +29,7 @@
29
29
  */
30
30
 
31
31
  import { devToolsStorageKeys, persistentStorage } from "@buoy-gg/shared-ui";
32
+ import { TIER_LIMITS } from "@buoy-gg/shared-ui";
32
33
  /** Identifies THIS runtime. Records from other sessions can't trust `liveId`. */
33
34
  export const SESSION_ID = `${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
34
35
 
@@ -36,8 +37,12 @@ export const SESSION_ID = `${Date.now().toString(36)}_${Math.random().toString(3
36
37
  export const MAX_PINNED = 25;
37
38
  /** Upper bound on the persisted favorites list (oldest unpinned evicted). */
38
39
  export const MAX_SAVED = 50;
39
- /** Free tier keeps a handful of favorites; Pro is unlimited (up to MAX_SAVED). */
40
- export const FREE_TIER_SAVED_LIMIT = 5;
40
+ /**
41
+ * @deprecated Read the live limit with `useLimit("network.saved")` — this only
42
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
43
+ * because it is part of the package's public exports.
44
+ */
45
+ export const FREE_TIER_SAVED_LIMIT = TIER_LIMITS["network.saved"].free;
41
46
  /** Per-body cap on a snapshot. */
42
47
  const BODY_LIMIT = 16 * 1024;
43
48
  /**
@@ -11,15 +11,20 @@
11
11
  */
12
12
 
13
13
  import { filterNetworkEvents } from "./filterNetworkEvents";
14
- import { FREE_TIER_SAVED_LIMIT, MAX_SAVED } from "./networkSavedStore";
15
- export function selectSavedEvents(savedRecords, isPro, search) {
14
+ import { MAX_SAVED } from "./networkSavedStore";
15
+ export function selectSavedEvents(savedRecords,
16
+ /**
17
+ * How many saves this tier may see — `useLimit("network.saved")`. Takes a
18
+ * number rather than `isPro` because there are now three tiers, and a
19
+ * boolean cannot express the anonymous one.
20
+ */
21
+ limit, search) {
16
22
  /**
17
- * A downgrade (or a limit change) can leave a free user holding more saves
18
- * than the free tier allows. Rather than deleting their data, the overflow
19
- * is LOCKED — oldest first, so the newest saves stay reachable.
23
+ * A downgrade (or a limit change) can leave a user holding more saves than
24
+ * their tier allows. Rather than deleting their data, the overflow is
25
+ * LOCKED — oldest first, so the newest saves stay reachable.
20
26
  */
21
- const limit = isPro ? MAX_SAVED : FREE_TIER_SAVED_LIMIT;
22
- const unlocked = savedRecords.slice(0, limit);
27
+ const unlocked = savedRecords.slice(0, Math.min(limit, MAX_SAVED));
23
28
  const events = unlocked.map(record => record.event);
24
29
  return {
25
30
  events: search ? filterNetworkEvents(events, {
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkDetailStepper.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkDetailStepper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AAW5D,UAAU,yBAAyB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,eAAO,MAAM,oBAAoB,iEAiE/B,CAAC"}
1
+ {"version":3,"file":"NetworkDetailStepper.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkDetailStepper.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAgC,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AAW5D,UAAU,yBAAyB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,eAAO,MAAM,oBAAoB,iEAkE/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkDetailStepper.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkDetailStepper.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AA4O5D,UAAU,yBAAyB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,eAAO,MAAM,oBAAoB,iEA+D/B,CAAC"}
1
+ {"version":3,"file":"NetworkDetailStepper.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkDetailStepper.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAgB,aAAa,EAAE,MAAM,UAAU,CAAC;AA4O5D,UAAU,yBAAyB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,eAAe,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,SAAS,EAAE,OAAO,CAAC;IACnB,6EAA6E;IAC7E,WAAW,EAAE,MAAM,CAAC;IACpB,0EAA0E;IAC1E,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAMD,eAAO,MAAM,oBAAoB,iEAgE/B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAUL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAsB9D,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,+BA4D1B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAqBrE;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,+BAuF9B;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
+ {"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAUL,KAAK,cAAc,EAEpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAqB9D,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,+BA4D1B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAqBrE;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,+BAuF9B;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":"NetworkHeaderLive.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAgB9C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAwH1C,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,+BA+D1B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAoBrE;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;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BAqF9B;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;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,GACN,EAAE,4BAA4B,+BAmG9B"}
1
+ {"version":3,"file":"NetworkHeaderLive.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AASH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAe9C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAwH1C,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,+BA+D1B;AAED,UAAU,uBAAuB;IAC/B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;iDAEiD;AACjD,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,+BAoBrE;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;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BAqF9B;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;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,EACd,KAAK,GACN,EAAE,4BAA4B,+BAmG9B"}
@@ -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,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0J5D,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,sCAwJxB"}
1
+ {"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAOL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA0J5D,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,sCA6JxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAqEA,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;AAy1BD;;;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
+ {"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAsEA,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;AAy2BD;;;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;AAehF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAsJzC,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
+ {"version":3,"file":"NetworkOverridesScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkOverridesScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AAgBhF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,iCAAiC,CAAC;AAsJzC,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;AAWH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAqB9D,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,sCA2HzB"}
1
+ {"version":3,"file":"NetworkSavedScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAYH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAqB9D,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,sCA8HzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkSavedScreen.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAmI1C,MAAM,WAAW,uBAAuB;IACtC,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,sCAwHzB"}
1
+ {"version":3,"file":"NetworkSavedScreen.web.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkSavedScreen.web.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,kCAAkC,CAAC;AAmI1C,MAAM,WAAW,uBAAuB;IACtC,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,sCA2HzB"}
@@ -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;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAO5D,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;CAC1B;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,CAkFzB"}
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;CAC1B;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,CAoFzB"}
@@ -5,8 +5,12 @@
5
5
  * starts when this hook mounts and stops when all subscribers unmount.
6
6
  */
7
7
  import type { NetworkEvent, NetworkStats, NetworkFilter } from "../types";
8
- /** Free tier limit for network requests */
9
- export declare const FREE_TIER_REQUEST_LIMIT = 25;
8
+ /**
9
+ * @deprecated Read the live limit with `useLimit("network.requests")` — this
10
+ * only reports the FREE tier's value and is blind to the anonymous tier. Kept
11
+ * because it is part of the package's public exports.
12
+ */
13
+ export declare const FREE_TIER_REQUEST_LIMIT: number;
10
14
  /**
11
15
  * Custom hook for accessing network events and controls
12
16
  *
@@ -44,7 +48,9 @@ export declare const FREE_TIER_REQUEST_LIMIT = 25;
44
48
  * @performance Optimizes string operations and array processing for large datasets
45
49
  * @performance Includes Set-based lookups for O(1) filter matching
46
50
  *
47
- * @param options.isPro - Whether user has Pro access (unlimited events). Defaults to false (limited to FREE_TIER_REQUEST_LIMIT)
51
+ * @param options.isPro - Force the unlimited view. Defaults to false, in
52
+ * which case the current tier's limit from `useLimit("network.requests")`
53
+ * applies.
48
54
  */
49
55
  export declare function useNetworkEvents(options?: {
50
56
  isPro?: boolean;
@@ -71,7 +77,7 @@ export declare function useNetworkEvents(options?: {
71
77
  lockedEventCount: number;
72
78
  /** Check if a specific event is locked (by ID) */
73
79
  isEventLocked: (eventId: string) => boolean;
74
- /** Free tier request limit */
80
+ /** The live request limit for this tier (Infinity when unlimited). */
75
81
  requestLimit: number;
76
82
  /** Get subscriber counts for debugging */
77
83
  getSubscriberCounts: () => {
@@ -1 +1 @@
1
- {"version":3,"file":"useNetworkEvents.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkEvents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1E,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO;IAqQ9D,yEAAyE;;IAEzE,8CAA8C;;;;;;IAM9C,mEAAmE;;IAEnE,kFAAkF;;IAElF,iDAAiD;;;;IAIjD,6DAA6D;;IAE7D,qDAAqD;;IAErD,kDAAkD;6BA7FR,MAAM;IA+FhD,8BAA8B;;IAE9B,0CAA0C;;;;;;EAG7C"}
1
+ {"version":3,"file":"useNetworkEvents.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkEvents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG1E;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAuC,CAAC;AAE5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO;IAqQ9D,yEAAyE;;IAEzE,8CAA8C;;;;;;IAM9C,mEAAmE;;IAEnE,kFAAkF;;IAElF,iDAAiD;;;;IAIjD,6DAA6D;;IAE7D,qDAAqD;;IAErD,kDAAkD;6BA7FR,MAAM;IA+FhD,sEAAsE;;IAEtE,0CAA0C;;;;;;EAG7C"}
@@ -50,8 +50,12 @@ export declare const STATUS_MIN = 200;
50
50
  export declare const STATUS_MAX = 599;
51
51
  /** Bounds the persisted list so a runaway UI can't fill storage. */
52
52
  export declare const MAX_RULES = 50;
53
- /** Free tier gets one active rule; Pro is unlimited (up to MAX_RULES). */
54
- export declare const FREE_TIER_RULE_LIMIT = 1;
53
+ /**
54
+ * @deprecated Read the live limit with `useLimit("network.overrideRules")` —
55
+ * this only reports the FREE tier's value. Kept because it is part of the
56
+ * package's public exports.
57
+ */
58
+ export declare const FREE_TIER_RULE_LIMIT: number;
55
59
  export interface OverrideRule {
56
60
  id: string;
57
61
  enabled: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/network/overrides/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,oEAAoE;AACpE,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B,0EAA0E;AAC1E,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,mBAAmB,CAO5E"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/network/overrides/types.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAE5D;;;;;;;GAOG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,SAAS,CAAC;AAErD;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,MAAM,CAAC;AAC9B,eAAO,MAAM,UAAU,MAAM,CAAC;AAE9B,oEAAoE;AACpE,eAAO,MAAM,SAAS,KAAK,CAAC;AAE5B;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,QAA4C,CAAC;AAE9E,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;OAOG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,EAAE,gBAAgB,CAAC;IACvB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB;;;;;;;;;;OAUG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb;;;;;;OAMG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACvB;IACE,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd,GACD;IACE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;CAC5B,GACD;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3D,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,mBAAmB,CAO5E"}
@@ -32,8 +32,12 @@ export declare const SESSION_ID: string;
32
32
  export declare const MAX_PINNED = 25;
33
33
  /** Upper bound on the persisted favorites list (oldest unpinned evicted). */
34
34
  export declare const MAX_SAVED = 50;
35
- /** Free tier keeps a handful of favorites; Pro is unlimited (up to MAX_SAVED). */
36
- export declare const FREE_TIER_SAVED_LIMIT = 5;
35
+ /**
36
+ * @deprecated Read the live limit with `useLimit("network.saved")` — this only
37
+ * reports the FREE tier's value and is blind to the anonymous tier. Kept
38
+ * because it is part of the package's public exports.
39
+ */
40
+ export declare const FREE_TIER_SAVED_LIMIT: number;
37
41
  export interface SavedNetworkRecord {
38
42
  /** Stable across app launches — unlike `event.id`. */
39
43
  key: string;
@@ -1 +1 @@
1
- {"version":3,"file":"networkSavedStore.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkSavedStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"networkSavedStore.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkSavedStore.ts"],"names":[],"mappings":"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"}
@@ -15,5 +15,11 @@ export interface SavedEventSelection {
15
15
  /** Saves past the tier ceiling — rendered as the upgrade banner, not rows. */
16
16
  lockedCount: number;
17
17
  }
18
- export declare function selectSavedEvents(savedRecords: readonly SavedNetworkRecord[], isPro: boolean, search: string): SavedEventSelection;
18
+ export declare function selectSavedEvents(savedRecords: readonly SavedNetworkRecord[],
19
+ /**
20
+ * How many saves this tier may see — `useLimit("network.saved")`. Takes a
21
+ * number rather than `isPro` because there are now three tiers, and a
22
+ * boolean cannot express the anonymous one.
23
+ */
24
+ limit: number, search: string): SavedEventSelection;
19
25
  //# sourceMappingURL=selectSavedEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selectSavedEvents.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/selectSavedEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,SAAS,kBAAkB,EAAE,EAC3C,KAAK,EAAE,OAAO,EACd,MAAM,EAAE,MAAM,GACb,mBAAmB,CAarB"}
1
+ {"version":3,"file":"selectSavedEvents.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/selectSavedEvents.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,OAAO,EAAa,KAAK,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,mBAAmB;IAClC,8DAA8D;IAC9D,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,iBAAiB,CAC/B,YAAY,EAAE,SAAS,kBAAkB,EAAE;AAC3C;;;;GAIG;AACH,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,mBAAmB,CAYrB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/network",
3
- "version": "7.0.22",
3
+ "version": "7.0.24",
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.22"
29
+ "@buoy-gg/shared-ui": "^7.0.24"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": "*",
@@ -70,7 +70,7 @@
70
70
  "bugs": {
71
71
  "url": "https://github.com/LovesWorking/react-native-buoy/issues"
72
72
  },
73
- "homepage": "https://buoy.gg/tools/network",
73
+ "homepage": "https://buoy.gg/buoy/latest/docs/tools/network",
74
74
  "publishConfig": {
75
75
  "access": "public",
76
76
  "tag": "latest"