@buoy-gg/network 7.0.4 → 7.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/lib/commonjs/index.js +85 -0
- package/lib/commonjs/network/components/NetworkEventDetailView.js +201 -40
- package/lib/commonjs/network/components/NetworkEventItemCompact.js +52 -5
- package/lib/commonjs/network/components/NetworkHeaderLive.js +132 -0
- package/lib/commonjs/network/components/NetworkListScreen.js +134 -56
- package/lib/commonjs/network/components/NetworkModal.js +154 -36
- package/lib/commonjs/network/components/NetworkSavedScreen.js +245 -0
- package/lib/commonjs/network/components/NetworkUpgradeBanner.js +76 -0
- package/lib/commonjs/network/hooks/useLiveNetworkEvent.js +62 -0
- package/lib/commonjs/network/hooks/useNetworkSaved.js +38 -0
- package/lib/commonjs/network/index.js +84 -0
- package/lib/commonjs/network/sync/networkSyncAdapter.js +85 -7
- package/lib/commonjs/network/utils/generateCurl.js +71 -0
- package/lib/commonjs/network/utils/networkEventStore.js +10 -1
- package/lib/commonjs/network/utils/networkListener.js +54 -1
- package/lib/commonjs/network/utils/networkSavedStore.js +575 -0
- package/lib/commonjs/network/utils/withPinnedFirst.js +32 -0
- package/lib/module/index.js +17 -1
- package/lib/module/network/components/NetworkEventDetailView.js +204 -41
- package/lib/module/network/components/NetworkEventItemCompact.js +53 -6
- package/lib/module/network/components/NetworkHeaderLive.js +132 -2
- package/lib/module/network/components/NetworkListScreen.js +136 -58
- package/lib/module/network/components/NetworkModal.js +156 -39
- package/lib/module/network/components/NetworkSavedScreen.js +241 -0
- package/lib/module/network/components/NetworkUpgradeBanner.js +72 -0
- package/lib/module/network/hooks/useLiveNetworkEvent.js +58 -0
- package/lib/module/network/hooks/useNetworkSaved.js +34 -0
- package/lib/module/network/index.js +7 -1
- package/lib/module/network/sync/networkSyncAdapter.js +85 -7
- package/lib/module/network/utils/generateCurl.js +67 -0
- package/lib/module/network/utils/networkEventStore.js +10 -1
- package/lib/module/network/utils/networkListener.js +54 -1
- package/lib/module/network/utils/networkSavedStore.js +569 -0
- package/lib/module/network/utils/withPinnedFirst.js +28 -0
- package/lib/typescript/index.d.ts +13 -1
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkEventDetailView.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkEventItemCompact.d.ts +12 -0
- package/lib/typescript/network/components/NetworkEventItemCompact.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkHeaderLive.d.ts +28 -0
- package/lib/typescript/network/components/NetworkHeaderLive.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkListScreen.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkModal.d.ts +34 -0
- package/lib/typescript/network/components/NetworkModal.d.ts.map +1 -1
- package/lib/typescript/network/components/NetworkSavedScreen.d.ts +29 -0
- package/lib/typescript/network/components/NetworkSavedScreen.d.ts.map +1 -0
- package/lib/typescript/network/components/NetworkUpgradeBanner.d.ts +17 -0
- package/lib/typescript/network/components/NetworkUpgradeBanner.d.ts.map +1 -0
- package/lib/typescript/network/hooks/useLiveNetworkEvent.d.ts +19 -0
- package/lib/typescript/network/hooks/useLiveNetworkEvent.d.ts.map +1 -0
- package/lib/typescript/network/hooks/useNetworkSaved.d.ts +21 -0
- package/lib/typescript/network/hooks/useNetworkSaved.d.ts.map +1 -0
- package/lib/typescript/network/index.d.ts +8 -1
- package/lib/typescript/network/index.d.ts.map +1 -1
- package/lib/typescript/network/sync/networkSyncAdapter.d.ts +52 -3
- package/lib/typescript/network/sync/networkSyncAdapter.d.ts.map +1 -1
- package/lib/typescript/network/types/index.d.ts +43 -0
- package/lib/typescript/network/types/index.d.ts.map +1 -1
- package/lib/typescript/network/utils/generateCurl.d.ts +3 -0
- package/lib/typescript/network/utils/generateCurl.d.ts.map +1 -0
- package/lib/typescript/network/utils/networkEventStore.d.ts.map +1 -1
- package/lib/typescript/network/utils/networkListener.d.ts +4 -0
- package/lib/typescript/network/utils/networkListener.d.ts.map +1 -1
- package/lib/typescript/network/utils/networkSavedStore.d.ts +186 -0
- package/lib/typescript/network/utils/networkSavedStore.d.ts.map +1 -0
- package/lib/typescript/network/utils/withPinnedFirst.d.ts +24 -0
- package/lib/typescript/network/utils/withPinnedFirst.d.ts.map +1 -0
- package/package.json +2 -2
|
@@ -8,12 +8,18 @@
|
|
|
8
8
|
* bypassing the tool's intended usage patterns.
|
|
9
9
|
*/
|
|
10
10
|
export { networkToolPreset, createNetworkTool } from "./preset";
|
|
11
|
-
export { NetworkModal } from "./network/components/NetworkModal";
|
|
11
|
+
export { NetworkModal, NetworkToolView } from "./network/components/NetworkModal";
|
|
12
|
+
export type { NetworkToolViewProps } from "./network/components/NetworkModal";
|
|
12
13
|
export { NetworkEventDetailView } from "./network/components/NetworkEventDetailView";
|
|
13
14
|
export { NetworkEventItemCompact } from "./network/components/NetworkEventItemCompact";
|
|
15
|
+
export { NetworkSavedScreen } from "./network/components/NetworkSavedScreen";
|
|
16
|
+
export { NetworkSavedButton, NetworkDetailPinActions, } from "./network/components/NetworkHeaderLive";
|
|
14
17
|
export { useNetworkEvents } from "./network/hooks/useNetworkEvents";
|
|
15
18
|
export { useNetworkEventList } from "./network/hooks/useNetworkEventList";
|
|
19
|
+
export { useLiveNetworkEvent } from "./network/hooks/useLiveNetworkEvent";
|
|
16
20
|
export { useNetworkBadgeCounts } from "./network/hooks/useNetworkBadgeCounts";
|
|
21
|
+
export { useNetworkSaved, type UseNetworkSavedResult, } from "./network/hooks/useNetworkSaved";
|
|
22
|
+
export { splitPinned, type PinnedSplit } from "./network/utils/withPinnedFirst";
|
|
17
23
|
export { TickProvider, useTickEveryMinute } from "./network/hooks/useTickEveryMinute";
|
|
18
24
|
export { formatBytes, formatDuration, formatHttpStatus, } from "./network/utils/formatting";
|
|
19
25
|
export type { NetworkEvent, NetworkStats, NetworkFilter, NetworkEventStatus, NetworkInsight, IgnoredPattern, IgnoredPatternMatchMode, } from "./network/types";
|
|
@@ -22,6 +28,12 @@ export { networkSyncAdapter } from "./network/sync/networkSyncAdapter";
|
|
|
22
28
|
export { NetworkBodyResolverProvider, type NetworkBodyResolver, type ResolvedNetworkBody, } from "./network/sync/networkBodyResolver";
|
|
23
29
|
/** @internal */
|
|
24
30
|
export { networkEventStore } from "./network/utils/networkEventStore";
|
|
31
|
+
/**
|
|
32
|
+
* @internal — the desktop dashboard puts this in remote-mirror mode so pins
|
|
33
|
+
* made there are forwarded to the device instead of stored locally.
|
|
34
|
+
*/
|
|
35
|
+
export { networkSavedStore, flagsForEventId, FREE_TIER_SAVED_LIMIT, MAX_PINNED, MAX_SAVED, type NetworkSavedRemote, type NetworkSavedState, type SavedNetworkRecord, type SavedToggleResult, } from "./network/utils/networkSavedStore";
|
|
36
|
+
export { generateCurl } from "./network/utils/generateCurl";
|
|
25
37
|
/** @internal */
|
|
26
38
|
export { networkListener, addNetworkListener, removeAllNetworkListeners, } from "./network/utils/networkListener";
|
|
27
39
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAOhE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAClF,YAAY,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,uBAAuB,EAAE,MAAM,8CAA8C,CAAC;AACvF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,wCAAwC,CAAC;AAKhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAI9E,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAChF,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;;;GAGG;AACH,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,gBAAgB;AAChB,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,iCAAiC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkEventDetailView.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkEventDetailView.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"NetworkEventDetailView.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkEventDetailView.tsx"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,YAAY,EAAkB,MAAM,UAAU,CAAC;AAqB7D,UAAU,2BAA2B;IACnC,KAAK,EAAE,YAAY,CAAC;IACpB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAmQD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,KAAK,EACL,eAA2B,EAC3B,eAA0B,GAC3B,EAAE,2BAA2B,+BAse7B"}
|
|
@@ -2,6 +2,18 @@ import type { NetworkEvent } from "../types";
|
|
|
2
2
|
interface NetworkEventItemCompactProps {
|
|
3
3
|
event: NetworkEvent;
|
|
4
4
|
onPress: (event: NetworkEvent) => void;
|
|
5
|
+
/**
|
|
6
|
+
* Pinned/saved markers. Deliberately GLYPHS, not buttons: this row renders
|
|
7
|
+
* inside a list tuned for 500 events, and two more pressables per row would
|
|
8
|
+
* both cost renders and eat the row's tap area. Toggling happens on
|
|
9
|
+
* long-press here and from the detail-view header.
|
|
10
|
+
*
|
|
11
|
+
* All three are optional so the Events tool, which injects this same row
|
|
12
|
+
* (UnifiedEventItem) without any concept of pinning, keeps working unchanged.
|
|
13
|
+
*/
|
|
14
|
+
pinned?: boolean;
|
|
15
|
+
saved?: boolean;
|
|
16
|
+
onLongPress?: (event: NetworkEvent) => void;
|
|
5
17
|
}
|
|
6
18
|
export declare const NetworkEventItemCompact: import("react").NamedExoticComponent<NetworkEventItemCompactProps>;
|
|
7
19
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkEventItemCompact.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkEventItemCompact.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NetworkEventItemCompact.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkEventItemCompact.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAM7C,UAAU,4BAA4B;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACvC;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;CAC7C;AAkJD,eAAO,MAAM,uBAAuB,oEAsHnC,CAAC"}
|
|
@@ -34,6 +34,34 @@ interface NetworkClearButtonProps {
|
|
|
34
34
|
* Subscribes to a flip-guarded boolean, so it renders when the store goes
|
|
35
35
|
* empty↔non-empty, not on every count change. */
|
|
36
36
|
export declare function NetworkClearButton({ paused }: NetworkClearButtonProps): import("react").JSX.Element;
|
|
37
|
+
interface NetworkSavedButtonProps {
|
|
38
|
+
onPress: () => void;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Entry point to the Saved screen, with its count. A self-subscribing leaf so
|
|
42
|
+
* the badge tracks the store without the modal header re-rendering.
|
|
43
|
+
*/
|
|
44
|
+
export declare function NetworkSavedButton({ onPress }: NetworkSavedButtonProps): import("react").JSX.Element;
|
|
45
|
+
interface NetworkDetailPinActionsProps {
|
|
46
|
+
eventId: string | null;
|
|
47
|
+
isPro: boolean;
|
|
48
|
+
onUpgradePress: () => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Pin + Save toggles for the request-detail header.
|
|
52
|
+
*
|
|
53
|
+
* Lives here, as a self-subscribing leaf, for two reasons. First the usual
|
|
54
|
+
* one: the modal root stays free of subscriptions. Second, and the real
|
|
55
|
+
* constraint — these buttons deliberately do NOT go inside
|
|
56
|
+
* `NetworkEventDetailView`, because the Events tool renders that same detail
|
|
57
|
+
* view (UnifiedEventDetail) and has no saved store behind it. The header is
|
|
58
|
+
* the Network tool's own surface, so the feature stays where it belongs.
|
|
59
|
+
*
|
|
60
|
+
* The event object is resolved at PRESS time rather than held as a prop: the
|
|
61
|
+
* live store has the fresh copy while the request is in flight, and the saved
|
|
62
|
+
* store is the only copy once it has been cleared or aged out.
|
|
63
|
+
*/
|
|
64
|
+
export declare function NetworkDetailPinActions({ eventId, isPro, onUpgradePress, }: NetworkDetailPinActionsProps): import("react").JSX.Element;
|
|
37
65
|
interface NetworkHeaderCopyButtonProps {
|
|
38
66
|
isPro: boolean;
|
|
39
67
|
filter: NetworkFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkHeaderLive.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkHeaderLive.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,
|
|
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;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,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,OAAO,EACP,KAAK,EACL,cAAc,GACf,EAAE,4BAA4B,+BAsF9B;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;CAC5B;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,KAAK,EACL,MAAM,EACN,eAAe,EACf,YAAY,EACZ,MAAM,EACN,cAAc,GACf,EAAE,4BAA4B,+BAiD9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;
|
|
1
|
+
{"version":3,"file":"NetworkListScreen.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkListScreen.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA4E5D,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,sCAkHxB"}
|
|
@@ -4,11 +4,45 @@ interface NetworkModalProps {
|
|
|
4
4
|
onBack?: () => void;
|
|
5
5
|
onMinimize?: (modalState: any) => void;
|
|
6
6
|
enableSharedModalDimensions?: boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Render as a plain header-bar + body stack instead of inside `JsModal`.
|
|
9
|
+
*
|
|
10
|
+
* The desktop dashboard shows tools INLINE in a panel, and `JsModal` only has
|
|
11
|
+
* `bottomSheet` and `floating` modes — there is no inline one. Rather than
|
|
12
|
+
* fork the tool (which is what `NetworkInline` used to be: a 1,258-line
|
|
13
|
+
* hand-copy of this component), the shell is the only thing that varies. Every
|
|
14
|
+
* screen, every piece of state and the whole header are shared.
|
|
15
|
+
*/
|
|
16
|
+
inline?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Controlled pause. Omit and the tool keeps its own state, which is what the
|
|
19
|
+
* phone wants. The desktop passes its persisted capture store, because there
|
|
20
|
+
* "paused" also has to stop the DEVICE from streaming — see
|
|
21
|
+
* `networkCaptureStore`.
|
|
22
|
+
*/
|
|
23
|
+
paused?: boolean;
|
|
24
|
+
onPausedChange?: (paused: boolean) => void;
|
|
7
25
|
}
|
|
8
26
|
/**
|
|
9
27
|
* High-level modal surface that wraps the network monitoring experience with shared timing
|
|
10
28
|
* context. Automatically injects the `TickProvider` so timestamps refresh while the modal is open.
|
|
11
29
|
*/
|
|
12
30
|
export declare function NetworkModal(props: NetworkModalProps): import("react").JSX.Element;
|
|
31
|
+
export interface NetworkToolViewProps {
|
|
32
|
+
/** Controlled pause — pass both halves or neither. See `NetworkModalProps`. */
|
|
33
|
+
paused?: boolean;
|
|
34
|
+
onPausedChange?: (paused: boolean) => void;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The same network tool as `NetworkModal`, rendered INLINE — header bar, then
|
|
38
|
+
* body — for hosts that place tools in a panel rather than a modal. Buoy Desktop
|
|
39
|
+
* is the only one today.
|
|
40
|
+
*
|
|
41
|
+
* This exists so there is exactly ONE network tool. The desktop dashboard used
|
|
42
|
+
* to ship its own 1,258-line copy of the modal's internals, which is how the two
|
|
43
|
+
* surfaces drifted apart in the first place; anything added here now shows up on
|
|
44
|
+
* both without a second edit.
|
|
45
|
+
*/
|
|
46
|
+
export declare function NetworkToolView(props?: NetworkToolViewProps): import("react").JSX.Element;
|
|
13
47
|
export {};
|
|
14
48
|
//# sourceMappingURL=NetworkModal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"NetworkModal.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkModal.tsx"],"names":[],"mappings":"AAiDA,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;AA0lBD;;;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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The SAVED screen — the network tool's favorites list.
|
|
3
|
+
*
|
|
4
|
+
* Everything here is read from the persisted saved store, never from the live
|
|
5
|
+
* event store. That is the whole point of the screen: these requests survive a
|
|
6
|
+
* Clear, the 500-event cap, and an app restart, so a failure you kept is still
|
|
7
|
+
* here tomorrow.
|
|
8
|
+
*
|
|
9
|
+
* Rows are the same two row components the live list uses, so a saved request
|
|
10
|
+
* looks exactly like the request it was. Long-press here UNSAVES rather than
|
|
11
|
+
* pins — in this list "get rid of it" is the action the row affords, and
|
|
12
|
+
* pinning is still available from the detail header.
|
|
13
|
+
*
|
|
14
|
+
* Stable-tree contract (rule4): hooks run unconditionally, then the component
|
|
15
|
+
* returns null when not visible.
|
|
16
|
+
*/
|
|
17
|
+
import type { NetworkEvent } from "../types";
|
|
18
|
+
import type { CopySettings } from "./NetworkCopySettingsView";
|
|
19
|
+
interface NetworkSavedScreenProps {
|
|
20
|
+
visible: boolean;
|
|
21
|
+
isPro: boolean;
|
|
22
|
+
copySettings: CopySettings;
|
|
23
|
+
/** Row tap — the root's setSelectedEvent (inherently stable setter). */
|
|
24
|
+
onEventPress: (event: NetworkEvent) => void;
|
|
25
|
+
onUpgradePress: () => void;
|
|
26
|
+
}
|
|
27
|
+
export declare function NetworkSavedScreen({ visible, isPro, copySettings, onEventPress, onUpgradePress, }: NetworkSavedScreenProps): import("react").JSX.Element | null;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=NetworkSavedScreen.d.ts.map
|
|
@@ -0,0 +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;AAyB9D,UAAU,uBAAuB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,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,YAAY,EACZ,cAAc,GACf,EAAE,uBAAuB,sCAgIzB"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The "N things are locked, upgrade to see them" banner.
|
|
3
|
+
*
|
|
4
|
+
* Extracted because there are now two of them — locked request history on the
|
|
5
|
+
* live list, and locked saves on the Saved screen — and they are the same
|
|
6
|
+
* offer. Two copies would drift the moment one of them gets a copy tweak.
|
|
7
|
+
*/
|
|
8
|
+
interface NetworkUpgradeBannerProps {
|
|
9
|
+
/** The headline — what is locked, and how much of it. */
|
|
10
|
+
title: string;
|
|
11
|
+
/** The one-line pitch under it. */
|
|
12
|
+
subtitle: string;
|
|
13
|
+
onPress: () => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function NetworkUpgradeBanner({ title, subtitle, onPress, }: NetworkUpgradeBannerProps): import("react").JSX.Element;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=NetworkUpgradeBanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NetworkUpgradeBanner.d.ts","sourceRoot":"","sources":["../../../../src/network/components/NetworkUpgradeBanner.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,UAAU,yBAAyB;IACjC,yDAAyD;IACzD,KAAK,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,QAAQ,EACR,OAAO,GACR,EAAE,yBAAyB,+BAa3B"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolves a selected event ID to the LIVE event object in the store.
|
|
3
|
+
*
|
|
4
|
+
* The detail view used to be handed the `NetworkEvent` captured at press
|
|
5
|
+
* time. The store updates immutably — a response/error replaces the pending
|
|
6
|
+
* event with a NEW object — so a request opened while pending stayed
|
|
7
|
+
* "Pending" for as long as the detail view was open, and only showed its
|
|
8
|
+
* real status after going back and re-opening the row (which re-read the
|
|
9
|
+
* store). This hook closes that gap: callers keep the ID as UI state and the
|
|
10
|
+
* leaf that renders the detail subscribes for its current value.
|
|
11
|
+
*
|
|
12
|
+
* Subscribing here (not at the modal root) keeps the event stream out of the
|
|
13
|
+
* shell's render path — same rule the list/header leaves follow.
|
|
14
|
+
*/
|
|
15
|
+
import type { NetworkEvent } from "../types";
|
|
16
|
+
export declare function useLiveNetworkEvent(eventId: string | null, options?: {
|
|
17
|
+
paused?: boolean;
|
|
18
|
+
}): NetworkEvent | null;
|
|
19
|
+
//# sourceMappingURL=useLiveNetworkEvent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLiveNetworkEvent.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useLiveNetworkEvent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAoB7C,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACjC,YAAY,GAAG,IAAI,CA6BrB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Narrow subscription to the pinned/saved store.
|
|
3
|
+
*
|
|
4
|
+
* The store rebuilds its derived view once per mutation, so the object this
|
|
5
|
+
* returns keeps a stable identity between pins — memoized rows don't re-render
|
|
6
|
+
* because a network event arrived, only because the user pinned something.
|
|
7
|
+
*
|
|
8
|
+
* Mutations happen through module-scope callbacks (stable identities), so
|
|
9
|
+
* passing them into memoized rows costs nothing.
|
|
10
|
+
*/
|
|
11
|
+
import { type NetworkSavedState, type SavedToggleResult } from "../utils/networkSavedStore";
|
|
12
|
+
import type { NetworkEvent } from "../types";
|
|
13
|
+
export interface UseNetworkSavedResult extends NetworkSavedState {
|
|
14
|
+
togglePin: (event: NetworkEvent) => SavedToggleResult;
|
|
15
|
+
toggleSave: (event: NetworkEvent) => SavedToggleResult;
|
|
16
|
+
remove: (key: string) => void;
|
|
17
|
+
clearSaved: () => void;
|
|
18
|
+
clearPinned: () => void;
|
|
19
|
+
}
|
|
20
|
+
export declare function useNetworkSaved(): UseNetworkSavedResult;
|
|
21
|
+
//# sourceMappingURL=useNetworkSaved.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useNetworkSaved.d.ts","sourceRoot":"","sources":["../../../../src/network/hooks/useNetworkSaved.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAU7C,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,iBAAiB,CAAC;IACtD,UAAU,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,iBAAiB,CAAC;IACvD,MAAM,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB;AAED,wBAAgB,eAAe,IAAI,qBAAqB,CAqBvD"}
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Network monitoring section for React Native dev tools
|
|
3
3
|
*/
|
|
4
|
-
export { NetworkModal } from "./components/NetworkModal";
|
|
4
|
+
export { NetworkModal, NetworkToolView } from "./components/NetworkModal";
|
|
5
|
+
export type { NetworkToolViewProps } from "./components/NetworkModal";
|
|
5
6
|
export { NetworkEventDetailView } from "./components/NetworkEventDetailView";
|
|
6
7
|
export { NetworkEventItemCompact } from "./components/NetworkEventItemCompact";
|
|
8
|
+
export { NetworkSavedScreen } from "./components/NetworkSavedScreen";
|
|
9
|
+
export { NetworkSavedButton, NetworkDetailPinActions, } from "./components/NetworkHeaderLive";
|
|
7
10
|
export { useNetworkEvents } from "./hooks/useNetworkEvents";
|
|
11
|
+
export { useLiveNetworkEvent } from "./hooks/useLiveNetworkEvent";
|
|
12
|
+
export { useNetworkSaved, type UseNetworkSavedResult, } from "./hooks/useNetworkSaved";
|
|
8
13
|
export { TickProvider, useTickEveryMinute } from "./hooks/useTickEveryMinute";
|
|
9
14
|
export { networkListener, startNetworkListener, stopNetworkListener, addNetworkListener, removeAllNetworkListeners, isNetworkListening, getNetworkListenerCount, } from "./utils/networkListener";
|
|
10
15
|
export { networkEventStore, type NetworkEventCallback } from "./utils/networkEventStore";
|
|
16
|
+
export { networkSavedStore, flagsForEventId, FREE_TIER_SAVED_LIMIT, MAX_PINNED, MAX_SAVED, SESSION_ID as NETWORK_SESSION_ID, type NetworkSavedState, type SavedNetworkRecord, type SavedToggleResult, } from "./utils/networkSavedStore";
|
|
17
|
+
export { splitPinned, type PinnedSplit } from "./utils/withPinnedFirst";
|
|
11
18
|
export { formatBytes, formatDuration, formatHttpStatus, } from "./utils/formatting";
|
|
12
19
|
export type { NetworkEvent, NetworkStats, NetworkFilter, NetworkEventStatus, NetworkInsight, IgnoredPattern, IgnoredPatternMatchMode, } from "./types";
|
|
13
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/network/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/network/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,YAAY,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EACL,eAAe,EACf,KAAK,qBAAqB,GAC3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,kBAAkB,EAClB,yBAAyB,EACzB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACzF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,UAAU,EACV,SAAS,EACT,UAAU,IAAI,kBAAkB,EAChC,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,GACvB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAG5B,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,cAAc,EACd,uBAAuB,GACxB,MAAM,SAAS,CAAC"}
|
|
@@ -20,22 +20,71 @@ export declare const SNAPSHOT_BODY_INLINE_LIMIT: number;
|
|
|
20
20
|
*
|
|
21
21
|
* v2: large bodies are stripped from the snapshot and fetched lazily via
|
|
22
22
|
* `getEventBody` (see SNAPSHOT_BODY_INLINE_LIMIT).
|
|
23
|
+
*
|
|
24
|
+
* v3: the payload became an OBJECT — `{ events, saved }` — so pinned/saved
|
|
25
|
+
* requests reach the dashboard. They can't ride as flags on the events: a pin
|
|
26
|
+
* outlives the event that produced it (that is its whole purpose), so it has
|
|
27
|
+
* to be its own list. Dashboards that predate v3 read `payload` as an array;
|
|
28
|
+
* `NetworkPanel`/`NetworkInline` accept either shape.
|
|
23
29
|
*/
|
|
24
30
|
export declare const networkSyncAdapter: {
|
|
25
31
|
version: number;
|
|
26
|
-
getSnapshot: () =>
|
|
32
|
+
getSnapshot: () => {
|
|
33
|
+
events: NetworkEvent[];
|
|
34
|
+
saved: {
|
|
35
|
+
event: NetworkEvent;
|
|
36
|
+
key: string;
|
|
37
|
+
pinned: boolean;
|
|
38
|
+
saved: boolean;
|
|
39
|
+
savedAt: number;
|
|
40
|
+
sessionId: string;
|
|
41
|
+
liveId: string;
|
|
42
|
+
bodyTruncated?: boolean;
|
|
43
|
+
}[];
|
|
44
|
+
};
|
|
27
45
|
subscribe: (onChange: () => void) => () => void;
|
|
28
46
|
actions: {
|
|
29
47
|
clearEvents: () => void;
|
|
30
48
|
/**
|
|
31
49
|
* Return the full (un-stripped) request/response bodies for one event,
|
|
32
|
-
* fetched on demand by the dashboard when its detail view opens.
|
|
33
|
-
*
|
|
50
|
+
* fetched on demand by the dashboard when its detail view opens. Falls
|
|
51
|
+
* back to the saved store, which may hold the only remaining copy of a
|
|
52
|
+
* request that has since been cleared. Returns null if neither has it.
|
|
34
53
|
*/
|
|
35
54
|
getEventBody: (params: unknown) => {
|
|
36
55
|
requestData: {} | null;
|
|
37
56
|
responseData: {} | null;
|
|
38
57
|
} | null;
|
|
58
|
+
/** Pin/unpin a request from the dashboard. */
|
|
59
|
+
setPinned: (params: unknown) => {
|
|
60
|
+
ok: true;
|
|
61
|
+
active: boolean;
|
|
62
|
+
} | {
|
|
63
|
+
ok: false;
|
|
64
|
+
reason: "pin-cap" | "saved-cap" | "invalid-event";
|
|
65
|
+
} | {
|
|
66
|
+
ok: boolean;
|
|
67
|
+
} | null;
|
|
68
|
+
/** Save/unsave a request from the dashboard. */
|
|
69
|
+
setSaved: (params: unknown) => {
|
|
70
|
+
ok: true;
|
|
71
|
+
active: boolean;
|
|
72
|
+
} | {
|
|
73
|
+
ok: false;
|
|
74
|
+
reason: "pin-cap" | "saved-cap" | "invalid-event";
|
|
75
|
+
} | {
|
|
76
|
+
ok: boolean;
|
|
77
|
+
} | null;
|
|
78
|
+
/** Drop one pinned/saved record by its stable key. */
|
|
79
|
+
removeSavedRecord: (params: unknown) => {
|
|
80
|
+
ok: boolean;
|
|
81
|
+
} | null;
|
|
82
|
+
clearSavedRequests: () => {
|
|
83
|
+
ok: boolean;
|
|
84
|
+
};
|
|
85
|
+
clearPinnedRequests: () => {
|
|
86
|
+
ok: boolean;
|
|
87
|
+
};
|
|
39
88
|
};
|
|
40
89
|
};
|
|
41
90
|
//# sourceMappingURL=networkSyncAdapter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/network/sync/networkSyncAdapter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"networkSyncAdapter.d.ts","sourceRoot":"","sources":["../../../../src/network/sync/networkSyncAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,QAAY,CAAC;AA+BpD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;0BAYP,MAAM,IAAI;;;QAc9B;;;;;WAKG;+BACoB,OAAO;;;;QAU9B,8CAA8C;4BAC1B,OAAO;;;;;;;;;QAY3B,gDAAgD;2BAC7B,OAAO;;;;;;;;;QAU1B,sDAAsD;oCAC1B,OAAO;;;;;;;;;;CAkBtC,CAAC"}
|
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Network monitoring types for React Native dev tools
|
|
3
3
|
*/
|
|
4
|
+
/**
|
|
5
|
+
* The parts of a request's lifetime we can actually observe from JavaScript.
|
|
6
|
+
*
|
|
7
|
+
* WHAT IS DELIBERATELY MISSING: queueing, DNS, TLS and request-send. Those
|
|
8
|
+
* happen below the JS layer — React Native exposes no Resource Timing and no
|
|
9
|
+
* socket-level hooks, so there is nowhere to read them from. Getting them means
|
|
10
|
+
* native instrumentation (`OkHttp EventListener` on Android,
|
|
11
|
+
* `URLSessionTaskMetrics` on iOS), which is a different project. We show two
|
|
12
|
+
* real phases rather than five with three invented.
|
|
13
|
+
*/
|
|
14
|
+
export interface NetworkTimings {
|
|
15
|
+
/**
|
|
16
|
+
* Request start → response headers available.
|
|
17
|
+
*
|
|
18
|
+
* NOTE the caveat when labelling this in UI: measured from JS, so it includes
|
|
19
|
+
* everything before the headers land — queueing, DNS, TLS and sending the
|
|
20
|
+
* request — not just the server's think time. Chrome can separate those; we
|
|
21
|
+
* cannot, and implying otherwise would overstate the precision.
|
|
22
|
+
*/
|
|
23
|
+
ttfb: number;
|
|
24
|
+
/** Response headers available → body fully read. */
|
|
25
|
+
download: number;
|
|
26
|
+
}
|
|
4
27
|
/**
|
|
5
28
|
* Canonical shape for network activity captured by the dev tools interceptor.
|
|
6
29
|
*/
|
|
@@ -17,7 +40,27 @@ export interface NetworkEvent {
|
|
|
17
40
|
responseSize?: number;
|
|
18
41
|
requestSize?: number;
|
|
19
42
|
timestamp: number;
|
|
43
|
+
/**
|
|
44
|
+
* Total wall time: request start → response fully received (headers AND
|
|
45
|
+
* body). This matches Chrome / Charles / Proxyman, and — importantly — means
|
|
46
|
+
* the same thing for every request regardless of which API made it.
|
|
47
|
+
*
|
|
48
|
+
* It did NOT always: the fetch path used to stop the clock when headers
|
|
49
|
+
* landed, so an identical request reported a smaller number through fetch
|
|
50
|
+
* than through XHR, and big responses were under-reported by exactly their
|
|
51
|
+
* download time.
|
|
52
|
+
*/
|
|
20
53
|
duration?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Breakdown of `duration`, when the interceptor could measure it.
|
|
56
|
+
*
|
|
57
|
+
* OPTIONAL ON PURPOSE — absent for requests captured before this existed, and
|
|
58
|
+
* from devices running an older Buoy than the dashboard. Consumers must hide
|
|
59
|
+
* the breakdown when it is missing rather than render zeros: a phase showing
|
|
60
|
+
* `0ms` claims we measured nothing, which is a different (and false) statement
|
|
61
|
+
* from "we didn't measure this".
|
|
62
|
+
*/
|
|
63
|
+
timings?: NetworkTimings;
|
|
21
64
|
error?: string;
|
|
22
65
|
host?: string;
|
|
23
66
|
path?: string;
|
|
@@ -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;;;;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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/network/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;;;;;;;GASG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;;;;OAOG;IACH,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;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;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateCurl.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/generateCurl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AA2C7C,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA4BxD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkEventStore.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"networkEventStore.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkEventStore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAQzD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;AAEjE;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,CAAC;AAE1E,cAAM,iBAAkB,SAAQ,cAAc,CAAC,YAAY,CAAC;IAC1D,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,cAAc,CAAkC;IACxD,OAAO,CAAC,sBAAsB,CAA6B;;IAS3D;;OAEG;IACH,SAAS,CAAC,cAAc,IAAI,IAAI;IAgBhC;;OAEG;IACH,SAAS,CAAC,aAAa,IAAI,IAAI;IAc/B;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAgHjD,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,WAAW;IAUnB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIlD;;OAEG;IACH,WAAW,IAAI,IAAI;IAMnB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,oBAAoB,EAAE,cAAc,UAAO,GAAG,MAAM,IAAI;IAkB1E,QAAQ;;;;;;;;;IAuCR,YAAY,CAAC,MAAM,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;QACzC,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,GAAG,YAAY,EAAE;CAyCnB;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -2,10 +2,14 @@
|
|
|
2
2
|
* Network listener using Reactotron-style event pattern
|
|
3
3
|
* Simple and reliable network interception for React Native
|
|
4
4
|
*/
|
|
5
|
+
import type { NetworkTimings } from "../types";
|
|
5
6
|
export interface NetworkingEvent {
|
|
6
7
|
type: "request" | "response" | "error";
|
|
7
8
|
timestamp: Date;
|
|
9
|
+
/** Total: request start → body fully received. */
|
|
8
10
|
duration?: number;
|
|
11
|
+
/** Breakdown of `duration`; omitted when it could not be measured. */
|
|
12
|
+
timings?: NetworkTimings;
|
|
9
13
|
request: {
|
|
10
14
|
id: string;
|
|
11
15
|
url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networkListener.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkListener.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"networkListener.d.ts","sourceRoot":"","sources":["../../../../src/network/utils/networkListener.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAgB/C,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;IACvC,SAAS,EAAE,IAAI,CAAC;IAChB,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sEAAsE;IACtE,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE;QACP,EAAE,EAAE,MAAM,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChC,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,UAAU,CAAC;KAC7D,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACjC,IAAI,CAAC,EAAE,OAAO,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,MAAM,uBAAuB,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,cAAM,eAAe;IACnB,OAAO,CAAC,SAAS,CAAiC;IAClD,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAQ;IAG9B,OAAO,CAAC,WAAW,CASjB;IAGF,OAAO,CAAC,aAAa,CAAe;IACpC,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,2BAA2B,CAAmD;;IAWtF;;;;;;;;OAQG;IACH,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,IAAI;IAUZ;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IA0BhB;;;;;OAKG;YACW,mBAAmB;IA2DjC;;;;OAIG;IACH,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,eAAe;IAavB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwNzB;;;;;;;;;;OAUG;IACH,cAAc;IAiWd;;;;;OAKG;IACH,aAAa;IAkBb;;;;;OAKG;IACH,WAAW,CAAC,QAAQ,EAAE,uBAAuB;IAa7C,kBAAkB;IAKlB,IAAI,QAAQ,YAEX;IAGD,IAAI,aAAa,WAEhB;CACF;AAsBD;;;;GAIG;AACH,eAAO,MAAM,eAAe,uBAAqB,CAAC;AAElD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,YAA8C,CAAC;AAEhF;;GAEG;AACH,eAAO,MAAM,mBAAmB,YAA6C,CAAC;AAE9E;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,GAAI,UAAU,uBAAuB,eACxB,CAAC;AAE7C;;GAEG;AACH,eAAO,MAAM,yBAAyB,YACK,CAAC;AAE5C;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,eAAsC,CAAC;AAEtE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,cAA2C,CAAC"}
|