@buoy-gg/network 3.0.2 → 4.0.1

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.
@@ -63,6 +63,18 @@ Object.defineProperty(exports, "formatHttpStatus", {
63
63
  return _formatting.formatHttpStatus;
64
64
  }
65
65
  });
66
+ Object.defineProperty(exports, "ignoredPatternsStore", {
67
+ enumerable: true,
68
+ get: function () {
69
+ return _sharedUi.ignoredPatternsStore;
70
+ }
71
+ });
72
+ Object.defineProperty(exports, "isUrlIgnored", {
73
+ enumerable: true,
74
+ get: function () {
75
+ return _sharedUi.isUrlIgnored;
76
+ }
77
+ });
66
78
  Object.defineProperty(exports, "networkEventStore", {
67
79
  enumerable: true,
68
80
  get: function () {
@@ -93,6 +105,18 @@ Object.defineProperty(exports, "removeAllNetworkListeners", {
93
105
  return _networkListener.removeAllNetworkListeners;
94
106
  }
95
107
  });
108
+ Object.defineProperty(exports, "urlMatchesIgnoredPattern", {
109
+ enumerable: true,
110
+ get: function () {
111
+ return _sharedUi.urlMatchesIgnoredPattern;
112
+ }
113
+ });
114
+ Object.defineProperty(exports, "useIgnoredPatterns", {
115
+ enumerable: true,
116
+ get: function () {
117
+ return _sharedUi.useIgnoredPatterns;
118
+ }
119
+ });
96
120
  Object.defineProperty(exports, "useNetworkEvents", {
97
121
  enumerable: true,
98
122
  get: function () {
@@ -112,6 +136,7 @@ var _NetworkEventItemCompact = require("./network/components/NetworkEventItemCom
112
136
  var _useNetworkEvents = require("./network/hooks/useNetworkEvents");
113
137
  var _useTickEveryMinute = require("./network/hooks/useTickEveryMinute");
114
138
  var _formatting = require("./network/utils/formatting");
139
+ var _sharedUi = require("@buoy-gg/shared-ui");
115
140
  var _networkSyncAdapter = require("./network/sync/networkSyncAdapter");
116
141
  var _networkBodyResolver = require("./network/sync/networkBodyResolver");
117
142
  var _networkEventStore = require("./network/utils/networkEventStore");
@@ -15,33 +15,6 @@ var _NetworkCopySettingsView = require("./NetworkCopySettingsView");
15
15
  var _useNetworkEvents = require("../hooks/useNetworkEvents");
16
16
  var _formatting = require("../utils/formatting");
17
17
  var _jsxRuntime = require("react/jsx-runtime");
18
- /**
19
- * Returns true when `url` matches the ignored `pattern` according to its mode.
20
- *
21
- * `contains` → case-insensitive substring on the full URL (legacy behavior).
22
- * `exact` → smart equality: pattern starting with `/` compares URL.pathname,
23
- * full URLs compare origin+pathname (ignoring query/hash), bare
24
- * values compare URL.host. Falls back to literal equality if URL
25
- * parsing fails (e.g. relative URLs).
26
- */function urlMatchesIgnoredPattern(url, pattern) {
27
- const lowerUrl = url.toLowerCase();
28
- const lowerValue = pattern.value.toLowerCase();
29
- if (pattern.mode === "contains") {
30
- return lowerUrl.includes(lowerValue);
31
- }
32
- try {
33
- const parsed = new URL(url);
34
- if (lowerValue.startsWith("/")) {
35
- return parsed.pathname.toLowerCase() === lowerValue;
36
- }
37
- if (lowerValue.startsWith("http://") || lowerValue.startsWith("https://")) {
38
- return `${parsed.origin}${parsed.pathname}`.toLowerCase() === lowerValue;
39
- }
40
- return parsed.host.toLowerCase() === lowerValue;
41
- } catch {
42
- return lowerUrl === lowerValue;
43
- }
44
- }
45
18
  // Decompose by Responsibility: Extract empty state component
46
19
  function EmptyState({
47
20
  isEnabled
@@ -104,15 +77,20 @@ function NetworkModalInner({
104
77
  const [searchText, setSearchText] = (0, _react.useState)("");
105
78
  const [isSearchActive, setIsSearchActive] = (0, _react.useState)(false);
106
79
  const searchInputRef = (0, _react.useRef)(null);
107
- const [ignoredPatterns, setIgnoredPatterns] = (0, _react.useState)([
108
- // Auto-hide Buoy license API requests by default
109
- {
110
- value: "api.keygen.sh",
111
- mode: "contains"
112
- }]);
80
+ // Ignored domains/URL patterns now live in a shared, persisted singleton store
81
+ // (@buoy-gg/shared-ui) so the Network tool and the Events tool stay in sync and
82
+ // share the exact same filter logic. The four handlers below are thin wrappers
83
+ // exposed by the hook; `values` is the derived Set used for presence checks.
84
+ const {
85
+ patterns: ignoredPatterns,
86
+ values: ignoredPatternValues,
87
+ add: addIgnoredPattern,
88
+ remove: removeIgnoredPattern,
89
+ toggle: toggleIgnoredPattern,
90
+ toggleMode: toggleIgnoredPatternMode
91
+ } = (0, _sharedUi.useIgnoredPatterns)();
113
92
  const [copySettings, setCopySettings] = (0, _react.useState)(_NetworkCopySettingsView.DEFAULT_COPY_SETTINGS);
114
93
  const flatListRef = (0, _react.useRef)(null);
115
- const hasLoadedFilters = (0, _react.useRef)(false);
116
94
  const hasLoadedCopySettings = (0, _react.useRef)(false);
117
95
  const [showUpgradeModal, setShowUpgradeModal] = (0, _react.useState)(false);
118
96
 
@@ -123,62 +101,6 @@ function NetworkModalInner({
123
101
  }
124
102
  }, [showUpgradeModal, isPro]);
125
103
 
126
- // Load persisted filters on mount
127
- (0, _react.useEffect)(() => {
128
- if (!visible || hasLoadedFilters.current) return;
129
- const loadFilters = async () => {
130
- try {
131
- const storedPatterns = await _sharedUi.persistentStorage.getItem(_sharedUi.devToolsStorageKeys.network.ignoredDomains());
132
- if (storedPatterns) {
133
- // Tolerate legacy string[] format — entries without a mode default to "contains".
134
- const raw = JSON.parse(storedPatterns);
135
- const migrated = [];
136
- for (const entry of raw) {
137
- if (typeof entry === "string" && entry.trim()) {
138
- migrated.push({
139
- value: entry,
140
- mode: "contains"
141
- });
142
- } else if (entry && typeof entry === "object" && typeof entry.value === "string") {
143
- const e = entry;
144
- migrated.push({
145
- value: e.value,
146
- mode: e.mode === "exact" ? "exact" : "contains"
147
- });
148
- }
149
- }
150
- // Always ensure Buoy license API is hidden
151
- if (!migrated.some(p => p.value === "api.keygen.sh")) {
152
- migrated.push({
153
- value: "api.keygen.sh",
154
- mode: "contains"
155
- });
156
- }
157
- setIgnoredPatterns(migrated);
158
- }
159
- } catch (_error) {
160
- // Silently fail - filters will use defaults
161
- } finally {
162
- hasLoadedFilters.current = true;
163
- }
164
- };
165
- loadFilters();
166
- }, [visible]);
167
-
168
- // Save filters when they change
169
- (0, _react.useEffect)(() => {
170
- if (!hasLoadedFilters.current) return; // Don't save on initial load
171
-
172
- const saveFilters = async () => {
173
- try {
174
- await _sharedUi.persistentStorage.setItem(_sharedUi.devToolsStorageKeys.network.ignoredDomains(), JSON.stringify(ignoredPatterns));
175
- } catch (_error) {
176
- // Silently fail - filters will remain in memory
177
- }
178
- };
179
- saveFilters();
180
- }, [ignoredPatterns]);
181
-
182
104
  // Load persisted copy settings on mount
183
105
  (0, _react.useEffect)(() => {
184
106
  if (!visible || hasLoadedCopySettings.current) return;
@@ -234,49 +156,15 @@ function NetworkModalInner({
234
156
  }
235
157
  }, [isSearchActive]);
236
158
 
237
- // Derived set of pattern values (for components that only care about presence).
238
- const ignoredPatternValues = (0, _react.useMemo)(() => new Set(ignoredPatterns.map(p => p.value)), [ignoredPatterns]);
239
-
240
159
  // Filter events based on ignored patterns (mode-aware)
241
160
  const filteredEvents = (0, _react.useMemo)(() => {
242
161
  if (ignoredPatterns.length === 0) return events;
243
162
  return events.filter(event => {
244
- const isFiltered = ignoredPatterns.some(pattern => urlMatchesIgnoredPattern(event.url, pattern));
163
+ const isFiltered = ignoredPatterns.some(pattern => (0, _sharedUi.urlMatchesIgnoredPattern)(event.url, pattern));
245
164
  return !isFiltered;
246
165
  });
247
166
  }, [events, ignoredPatterns]);
248
167
 
249
- // Add or no-op (used by add-pattern UI and suggested-items taps)
250
- const addIgnoredPattern = (0, _react.useCallback)(pattern => {
251
- const value = pattern.value.trim();
252
- if (!value) return;
253
- setIgnoredPatterns(prev => prev.some(p => p.value === value) ? prev : [...prev, {
254
- value,
255
- mode: pattern.mode
256
- }]);
257
- }, []);
258
-
259
- // Remove by value (used by the filter list X button and the detail view chips)
260
- const removeIgnoredPattern = (0, _react.useCallback)(value => {
261
- setIgnoredPatterns(prev => prev.filter(p => p.value !== value));
262
- }, []);
263
-
264
- // Toggle presence (used by the detail-view domain/url chips — adds as contains)
265
- const toggleIgnoredPattern = (0, _react.useCallback)(value => {
266
- setIgnoredPatterns(prev => prev.some(p => p.value === value) ? prev.filter(p => p.value !== value) : [...prev, {
267
- value,
268
- mode: "contains"
269
- }]);
270
- }, []);
271
-
272
- // Flip an existing pattern's mode between contains <-> exact
273
- const toggleIgnoredPatternMode = (0, _react.useCallback)(value => {
274
- setIgnoredPatterns(prev => prev.map(p => p.value === value ? {
275
- ...p,
276
- mode: p.mode === "contains" ? "exact" : "contains"
277
- } : p));
278
- }, []);
279
-
280
168
  // Helper to check if payload should be included based on size
281
169
  const shouldIncludePayload = (0, _react.useCallback)(data => {
282
170
  if (copySettings.bodySizeThreshold === -1) return true;
@@ -417,7 +305,7 @@ function NetworkModalInner({
417
305
  let successful = 0;
418
306
  let failed = 0;
419
307
  let pending = 0;
420
- const eventsForStats = ignoredPatterns.length === 0 ? allEvents : allEvents.filter(event => !ignoredPatterns.some(pattern => urlMatchesIgnoredPattern(event.url, pattern)));
308
+ const eventsForStats = ignoredPatterns.length === 0 ? allEvents : allEvents.filter(event => !ignoredPatterns.some(pattern => (0, _sharedUi.urlMatchesIgnoredPattern)(event.url, pattern)));
421
309
  for (const event of eventsForStats) {
422
310
  if (event.status && event.status >= 200 && event.status < 300) {
423
311
  successful++;
@@ -37,6 +37,14 @@ export { formatBytes, formatDuration, formatHttpStatus } from "./network/utils/f
37
37
  // TYPES (For TypeScript users)
38
38
  // =============================================================================
39
39
 
40
+ // =============================================================================
41
+ // SHARED IGNORED-PATTERN FILTERING
42
+ // Re-exported from @buoy-gg/shared-ui so consumers wiring the Network detail
43
+ // page into other tools (e.g. the Events tool) can share the exact same
44
+ // ignored-domains/URL filter store + matching logic.
45
+ // =============================================================================
46
+ export { useIgnoredPatterns, ignoredPatternsStore, urlMatchesIgnoredPattern, isUrlIgnored } from "@buoy-gg/shared-ui";
47
+
40
48
  // =============================================================================
41
49
  // EXTERNAL SYNC (Adapter for @buoy-gg/external-sync's useExternalSync)
42
50
  // =============================================================================
@@ -2,7 +2,7 @@
2
2
 
3
3
  import { useState, useRef, useMemo, useCallback, useEffect } from "react";
4
4
  import { View, Text, StyleSheet, TouchableOpacity, TextInput, FlatList } from "react-native";
5
- import { Globe, Trash2, Power, Search, Filter, CheckCircle, XCircle, Clock, X, Copy, JsModal, ModalHeader, devToolsStorageKeys, macOSColors, persistentStorage, CopyButton, TabSelector, useFeatureGate, UpgradeModal, ProBadge, Zap, PowerToggleButton } from "@buoy-gg/shared-ui";
5
+ import { Globe, Trash2, Power, Search, Filter, CheckCircle, XCircle, Clock, X, Copy, JsModal, ModalHeader, devToolsStorageKeys, macOSColors, persistentStorage, CopyButton, TabSelector, useFeatureGate, UpgradeModal, ProBadge, Zap, PowerToggleButton, useIgnoredPatterns, urlMatchesIgnoredPattern } from "@buoy-gg/shared-ui";
6
6
  import { NetworkEventItemCompact } from "./NetworkEventItemCompact";
7
7
  import { NetworkFilterViewV3 } from "./NetworkFilterViewV3";
8
8
  import { TickProvider } from "../hooks/useTickEveryMinute";
@@ -10,36 +10,7 @@ import { NetworkEventDetailView } from "./NetworkEventDetailView";
10
10
  import { NetworkCopySettingsView, DEFAULT_COPY_SETTINGS } from "./NetworkCopySettingsView";
11
11
  import { useNetworkEvents } from "../hooks/useNetworkEvents";
12
12
  import { formatBytes } from "../utils/formatting";
13
-
14
- /**
15
- * Returns true when `url` matches the ignored `pattern` according to its mode.
16
- *
17
- * `contains` → case-insensitive substring on the full URL (legacy behavior).
18
- * `exact` → smart equality: pattern starting with `/` compares URL.pathname,
19
- * full URLs compare origin+pathname (ignoring query/hash), bare
20
- * values compare URL.host. Falls back to literal equality if URL
21
- * parsing fails (e.g. relative URLs).
22
- */
23
13
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
24
- function urlMatchesIgnoredPattern(url, pattern) {
25
- const lowerUrl = url.toLowerCase();
26
- const lowerValue = pattern.value.toLowerCase();
27
- if (pattern.mode === "contains") {
28
- return lowerUrl.includes(lowerValue);
29
- }
30
- try {
31
- const parsed = new URL(url);
32
- if (lowerValue.startsWith("/")) {
33
- return parsed.pathname.toLowerCase() === lowerValue;
34
- }
35
- if (lowerValue.startsWith("http://") || lowerValue.startsWith("https://")) {
36
- return `${parsed.origin}${parsed.pathname}`.toLowerCase() === lowerValue;
37
- }
38
- return parsed.host.toLowerCase() === lowerValue;
39
- } catch {
40
- return lowerUrl === lowerValue;
41
- }
42
- }
43
14
  // Decompose by Responsibility: Extract empty state component
44
15
  function EmptyState({
45
16
  isEnabled
@@ -102,15 +73,20 @@ function NetworkModalInner({
102
73
  const [searchText, setSearchText] = useState("");
103
74
  const [isSearchActive, setIsSearchActive] = useState(false);
104
75
  const searchInputRef = useRef(null);
105
- const [ignoredPatterns, setIgnoredPatterns] = useState([
106
- // Auto-hide Buoy license API requests by default
107
- {
108
- value: "api.keygen.sh",
109
- mode: "contains"
110
- }]);
76
+ // Ignored domains/URL patterns now live in a shared, persisted singleton store
77
+ // (@buoy-gg/shared-ui) so the Network tool and the Events tool stay in sync and
78
+ // share the exact same filter logic. The four handlers below are thin wrappers
79
+ // exposed by the hook; `values` is the derived Set used for presence checks.
80
+ const {
81
+ patterns: ignoredPatterns,
82
+ values: ignoredPatternValues,
83
+ add: addIgnoredPattern,
84
+ remove: removeIgnoredPattern,
85
+ toggle: toggleIgnoredPattern,
86
+ toggleMode: toggleIgnoredPatternMode
87
+ } = useIgnoredPatterns();
111
88
  const [copySettings, setCopySettings] = useState(DEFAULT_COPY_SETTINGS);
112
89
  const flatListRef = useRef(null);
113
- const hasLoadedFilters = useRef(false);
114
90
  const hasLoadedCopySettings = useRef(false);
115
91
  const [showUpgradeModal, setShowUpgradeModal] = useState(false);
116
92
 
@@ -121,62 +97,6 @@ function NetworkModalInner({
121
97
  }
122
98
  }, [showUpgradeModal, isPro]);
123
99
 
124
- // Load persisted filters on mount
125
- useEffect(() => {
126
- if (!visible || hasLoadedFilters.current) return;
127
- const loadFilters = async () => {
128
- try {
129
- const storedPatterns = await persistentStorage.getItem(devToolsStorageKeys.network.ignoredDomains());
130
- if (storedPatterns) {
131
- // Tolerate legacy string[] format — entries without a mode default to "contains".
132
- const raw = JSON.parse(storedPatterns);
133
- const migrated = [];
134
- for (const entry of raw) {
135
- if (typeof entry === "string" && entry.trim()) {
136
- migrated.push({
137
- value: entry,
138
- mode: "contains"
139
- });
140
- } else if (entry && typeof entry === "object" && typeof entry.value === "string") {
141
- const e = entry;
142
- migrated.push({
143
- value: e.value,
144
- mode: e.mode === "exact" ? "exact" : "contains"
145
- });
146
- }
147
- }
148
- // Always ensure Buoy license API is hidden
149
- if (!migrated.some(p => p.value === "api.keygen.sh")) {
150
- migrated.push({
151
- value: "api.keygen.sh",
152
- mode: "contains"
153
- });
154
- }
155
- setIgnoredPatterns(migrated);
156
- }
157
- } catch (_error) {
158
- // Silently fail - filters will use defaults
159
- } finally {
160
- hasLoadedFilters.current = true;
161
- }
162
- };
163
- loadFilters();
164
- }, [visible]);
165
-
166
- // Save filters when they change
167
- useEffect(() => {
168
- if (!hasLoadedFilters.current) return; // Don't save on initial load
169
-
170
- const saveFilters = async () => {
171
- try {
172
- await persistentStorage.setItem(devToolsStorageKeys.network.ignoredDomains(), JSON.stringify(ignoredPatterns));
173
- } catch (_error) {
174
- // Silently fail - filters will remain in memory
175
- }
176
- };
177
- saveFilters();
178
- }, [ignoredPatterns]);
179
-
180
100
  // Load persisted copy settings on mount
181
101
  useEffect(() => {
182
102
  if (!visible || hasLoadedCopySettings.current) return;
@@ -232,9 +152,6 @@ function NetworkModalInner({
232
152
  }
233
153
  }, [isSearchActive]);
234
154
 
235
- // Derived set of pattern values (for components that only care about presence).
236
- const ignoredPatternValues = useMemo(() => new Set(ignoredPatterns.map(p => p.value)), [ignoredPatterns]);
237
-
238
155
  // Filter events based on ignored patterns (mode-aware)
239
156
  const filteredEvents = useMemo(() => {
240
157
  if (ignoredPatterns.length === 0) return events;
@@ -244,37 +161,6 @@ function NetworkModalInner({
244
161
  });
245
162
  }, [events, ignoredPatterns]);
246
163
 
247
- // Add or no-op (used by add-pattern UI and suggested-items taps)
248
- const addIgnoredPattern = useCallback(pattern => {
249
- const value = pattern.value.trim();
250
- if (!value) return;
251
- setIgnoredPatterns(prev => prev.some(p => p.value === value) ? prev : [...prev, {
252
- value,
253
- mode: pattern.mode
254
- }]);
255
- }, []);
256
-
257
- // Remove by value (used by the filter list X button and the detail view chips)
258
- const removeIgnoredPattern = useCallback(value => {
259
- setIgnoredPatterns(prev => prev.filter(p => p.value !== value));
260
- }, []);
261
-
262
- // Toggle presence (used by the detail-view domain/url chips — adds as contains)
263
- const toggleIgnoredPattern = useCallback(value => {
264
- setIgnoredPatterns(prev => prev.some(p => p.value === value) ? prev.filter(p => p.value !== value) : [...prev, {
265
- value,
266
- mode: "contains"
267
- }]);
268
- }, []);
269
-
270
- // Flip an existing pattern's mode between contains <-> exact
271
- const toggleIgnoredPatternMode = useCallback(value => {
272
- setIgnoredPatterns(prev => prev.map(p => p.value === value ? {
273
- ...p,
274
- mode: p.mode === "contains" ? "exact" : "contains"
275
- } : p));
276
- }, []);
277
-
278
164
  // Helper to check if payload should be included based on size
279
165
  const shouldIncludePayload = useCallback(data => {
280
166
  if (copySettings.bodySizeThreshold === -1) return true;
@@ -14,7 +14,8 @@ export { NetworkEventItemCompact } from "./network/components/NetworkEventItemCo
14
14
  export { useNetworkEvents } from "./network/hooks/useNetworkEvents";
15
15
  export { TickProvider, useTickEveryMinute } from "./network/hooks/useTickEveryMinute";
16
16
  export { formatBytes, formatDuration, formatHttpStatus, } from "./network/utils/formatting";
17
- export type { NetworkEvent, NetworkStats, NetworkFilter, NetworkEventStatus, NetworkInsight, } from "./network/types";
17
+ export type { NetworkEvent, NetworkStats, NetworkFilter, NetworkEventStatus, NetworkInsight, IgnoredPattern, IgnoredPatternMatchMode, } from "./network/types";
18
+ export { useIgnoredPatterns, ignoredPatternsStore, urlMatchesIgnoredPattern, isUrlIgnored, } from "@buoy-gg/shared-ui";
18
19
  export { networkSyncAdapter } from "./network/sync/networkSyncAdapter";
19
20
  export { NetworkBodyResolverProvider, type NetworkBodyResolver, type ResolvedNetworkBody, } from "./network/sync/networkBodyResolver";
20
21
  /** @internal */
@@ -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;AAKhE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAKvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,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,GACf,MAAM,iBAAiB,CAAC;AAKzB,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,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;AAKhE,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AAKvF,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,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,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,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AA2EA,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;CACvC;AAslCD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD"}
1
+ {"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AA8CA,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;CACvC;AAu/BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,+BAMpD"}
@@ -76,19 +76,11 @@ export interface NetworkFilter {
76
76
  /** Human readable status classifications derived from request/response metadata. */
77
77
  export type NetworkEventStatus = "pending" | "success" | "error" | "timeout";
78
78
  /**
79
- * How an ignored-pattern entry should be compared against captured URLs.
80
- *
81
- * - `contains`: case-insensitive substring match on the full URL (legacy behavior).
82
- * - `exact`: smart equality — if pattern starts with `/`, matches URL.pathname;
83
- * if it starts with `http://`/`https://`, matches origin+pathname; otherwise
84
- * matches URL.host.
79
+ * Ignored-pattern types now live in @buoy-gg/shared-ui so the Network and Events
80
+ * tools share one canonical definition + filter store. Re-exported here for
81
+ * backwards compatibility with existing `../types` imports.
85
82
  */
86
- export type IgnoredPatternMatchMode = "contains" | "exact";
87
- /** A single network-events exclude pattern with its match mode. */
88
- export interface IgnoredPattern {
89
- value: string;
90
- mode: IgnoredPatternMatchMode;
91
- }
83
+ export type { IgnoredPattern, IgnoredPatternMatchMode, } from "@buoy-gg/shared-ui";
92
84
  /**
93
85
  * Insight surfaces highlight notable traffic patterns or issues for the current session.
94
86
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/network/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EACF,KAAK,GACL,MAAM,GACN,KAAK,GACL,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;IACnE;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E;;;;;;;GAOG;AACH,MAAM,MAAM,uBAAuB,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3D,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,uBAAuB,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5D,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/network/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EACF,KAAK,GACL,MAAM,GACN,KAAK,GACL,QAAQ,GACR,OAAO,GACP,MAAM,GACN,SAAS,GACT,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;IACnE;;;;;;;;;;OAUG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,CAAC;IACjD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,oFAAoF;AACpF,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;AAE7E;;;;GAIG;AACH,YAAY,EACV,cAAc,EACd,uBAAuB,GACxB,MAAM,oBAAoB,CAAC;AAE5B;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,OAAO,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5D,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@buoy-gg/network",
3
- "version": "3.0.2",
3
+ "version": "4.0.1",
4
4
  "description": "network package",
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": "3.0.2"
29
+ "@buoy-gg/shared-ui": "4.0.1"
30
30
  },
31
31
  "peerDependencies": {
32
32
  "react": "*",