@kar-mi/spirit-vale-tools-capture 2.4.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.
Files changed (183) hide show
  1. package/README.md +71 -0
  2. package/dist/capture/adapter-selection.d.ts +9 -0
  3. package/dist/capture/adapter-selection.d.ts.map +1 -0
  4. package/dist/capture/ip-address.d.ts +2 -0
  5. package/dist/capture/ip-address.d.ts.map +1 -0
  6. package/dist/capture/link-layer.d.ts +10 -0
  7. package/dist/capture/link-layer.d.ts.map +1 -0
  8. package/dist/capture/npcap.d.ts +38 -0
  9. package/dist/capture/npcap.d.ts.map +1 -0
  10. package/dist/capture/packet-capture.d.ts +51 -0
  11. package/dist/capture/packet-capture.d.ts.map +1 -0
  12. package/dist/capture/packet-parser.d.ts +11 -0
  13. package/dist/capture/packet-parser.d.ts.map +1 -0
  14. package/dist/capture/target-tracker.d.ts +37 -0
  15. package/dist/capture/target-tracker.d.ts.map +1 -0
  16. package/dist/capture.d.ts +5 -0
  17. package/dist/capture.d.ts.map +1 -0
  18. package/dist/capture.js +16008 -0
  19. package/dist/fishnet/boss-gravestone.d.ts +16 -0
  20. package/dist/fishnet/boss-gravestone.d.ts.map +1 -0
  21. package/dist/fishnet/builtin-maps.d.ts +10424 -0
  22. package/dist/fishnet/builtin-maps.d.ts.map +1 -0
  23. package/dist/fishnet/character-data-schema.d.ts +3 -0
  24. package/dist/fishnet/character-data-schema.d.ts.map +1 -0
  25. package/dist/fishnet/decoder.d.ts +12 -0
  26. package/dist/fishnet/decoder.d.ts.map +1 -0
  27. package/dist/fishnet/definitions/codecs.d.ts +12 -0
  28. package/dist/fishnet/definitions/codecs.d.ts.map +1 -0
  29. package/dist/fishnet/definitions/protocol.d.ts +101 -0
  30. package/dist/fishnet/definitions/protocol.d.ts.map +1 -0
  31. package/dist/fishnet/definitions/rpc-map.d.ts +61 -0
  32. package/dist/fishnet/definitions/rpc-map.d.ts.map +1 -0
  33. package/dist/fishnet/eternal-tower-tracker.d.ts +24 -0
  34. package/dist/fishnet/eternal-tower-tracker.d.ts.map +1 -0
  35. package/dist/fishnet/field-decoder.d.ts +19 -0
  36. package/dist/fishnet/field-decoder.d.ts.map +1 -0
  37. package/dist/fishnet/map-definitions/current-build.d.ts +3 -0
  38. package/dist/fishnet/map-definitions/current-build.d.ts.map +1 -0
  39. package/dist/fishnet/map-definitions/index.d.ts +3 -0
  40. package/dist/fishnet/map-definitions/index.d.ts.map +1 -0
  41. package/dist/fishnet/message-parser.d.ts +17 -0
  42. package/dist/fishnet/message-parser.d.ts.map +1 -0
  43. package/dist/fishnet/monster-directory.d.ts +40 -0
  44. package/dist/fishnet/monster-directory.d.ts.map +1 -0
  45. package/dist/fishnet/network-transform-decoder.d.ts +25 -0
  46. package/dist/fishnet/network-transform-decoder.d.ts.map +1 -0
  47. package/dist/fishnet/protocol.d.ts +21 -0
  48. package/dist/fishnet/protocol.d.ts.map +1 -0
  49. package/dist/fishnet/quaternion-compression.d.ts +6 -0
  50. package/dist/fishnet/quaternion-compression.d.ts.map +1 -0
  51. package/dist/fishnet/recovery-style.d.ts +5 -0
  52. package/dist/fishnet/recovery-style.d.ts.map +1 -0
  53. package/dist/fishnet/rpc-definitions/broadcasts.d.ts +23 -0
  54. package/dist/fishnet/rpc-definitions/broadcasts.d.ts.map +1 -0
  55. package/dist/fishnet/rpc-definitions/current-build.d.ts +8501 -0
  56. package/dist/fishnet/rpc-definitions/current-build.d.ts.map +1 -0
  57. package/dist/fishnet/rpc-definitions/fishnet/network-animator.d.ts +42 -0
  58. package/dist/fishnet/rpc-definitions/fishnet/network-animator.d.ts.map +1 -0
  59. package/dist/fishnet/rpc-definitions/fishnet/network-transform.d.ts +138 -0
  60. package/dist/fishnet/rpc-definitions/fishnet/network-transform.d.ts.map +1 -0
  61. package/dist/fishnet/rpc-definitions/fishnet/predicted-owner.d.ts +26 -0
  62. package/dist/fishnet/rpc-definitions/fishnet/predicted-owner.d.ts.map +1 -0
  63. package/dist/fishnet/rpc-definitions/game/base-unit-controller.d.ts +122 -0
  64. package/dist/fishnet/rpc-definitions/game/base-unit-controller.d.ts.map +1 -0
  65. package/dist/fishnet/rpc-definitions/game/combat-component.d.ts +44 -0
  66. package/dist/fishnet/rpc-definitions/game/combat-component.d.ts.map +1 -0
  67. package/dist/fishnet/rpc-definitions/game/health-component.d.ts +306 -0
  68. package/dist/fishnet/rpc-definitions/game/health-component.d.ts.map +1 -0
  69. package/dist/fishnet/rpc-definitions/game/loot-drop.d.ts +104 -0
  70. package/dist/fishnet/rpc-definitions/game/loot-drop.d.ts.map +1 -0
  71. package/dist/fishnet/rpc-definitions/game/monster-controller.d.ts +144 -0
  72. package/dist/fishnet/rpc-definitions/game/monster-controller.d.ts.map +1 -0
  73. package/dist/fishnet/rpc-definitions/game/move-component.d.ts +74 -0
  74. package/dist/fishnet/rpc-definitions/game/move-component.d.ts.map +1 -0
  75. package/dist/fishnet/rpc-definitions/game/player-controller/chat-presence.d.ts +332 -0
  76. package/dist/fishnet/rpc-definitions/game/player-controller/chat-presence.d.ts.map +1 -0
  77. package/dist/fishnet/rpc-definitions/game/player-controller/endgame-pvp.d.ts +89 -0
  78. package/dist/fishnet/rpc-definitions/game/player-controller/endgame-pvp.d.ts.map +1 -0
  79. package/dist/fishnet/rpc-definitions/game/player-controller/guild.d.ts +393 -0
  80. package/dist/fishnet/rpc-definitions/game/player-controller/guild.d.ts.map +1 -0
  81. package/dist/fishnet/rpc-definitions/game/player-controller/index.d.ts +23 -0
  82. package/dist/fishnet/rpc-definitions/game/player-controller/index.d.ts.map +1 -0
  83. package/dist/fishnet/rpc-definitions/game/player-controller/party.d.ts +168 -0
  84. package/dist/fishnet/rpc-definitions/game/player-controller/party.d.ts.map +1 -0
  85. package/dist/fishnet/rpc-definitions/game/player-controller/trade-market.d.ts +232 -0
  86. package/dist/fishnet/rpc-definitions/game/player-controller/trade-market.d.ts.map +1 -0
  87. package/dist/fishnet/rpc-definitions/game/player-controller/traversal-session.d.ts +58 -0
  88. package/dist/fishnet/rpc-definitions/game/player-controller/traversal-session.d.ts.map +1 -0
  89. package/dist/fishnet/rpc-definitions/game/player-save/character-build.d.ts +266 -0
  90. package/dist/fishnet/rpc-definitions/game/player-save/character-build.d.ts.map +1 -0
  91. package/dist/fishnet/rpc-definitions/game/player-save/character-data.d.ts +991 -0
  92. package/dist/fishnet/rpc-definitions/game/player-save/character-data.d.ts.map +1 -0
  93. package/dist/fishnet/rpc-definitions/game/player-save/cosmetics-progression.d.ts +126 -0
  94. package/dist/fishnet/rpc-definitions/game/player-save/cosmetics-progression.d.ts.map +1 -0
  95. package/dist/fishnet/rpc-definitions/game/player-save/debug.d.ts +46 -0
  96. package/dist/fishnet/rpc-definitions/game/player-save/debug.d.ts.map +1 -0
  97. package/dist/fishnet/rpc-definitions/game/player-save/economy-world-storage.d.ts +224 -0
  98. package/dist/fishnet/rpc-definitions/game/player-save/economy-world-storage.d.ts.map +1 -0
  99. package/dist/fishnet/rpc-definitions/game/player-save/index.d.ts +1860 -0
  100. package/dist/fishnet/rpc-definitions/game/player-save/index.d.ts.map +1 -0
  101. package/dist/fishnet/rpc-definitions/game/player-save/session-character.d.ts +72 -0
  102. package/dist/fishnet/rpc-definitions/game/player-save/session-character.d.ts.map +1 -0
  103. package/dist/fishnet/rpc-definitions/game/player-save/social-account.d.ts +107 -0
  104. package/dist/fishnet/rpc-definitions/game/player-save/social-account.d.ts.map +1 -0
  105. package/dist/fishnet/rpc-definitions/game/player-save/vending.d.ts +98 -0
  106. package/dist/fishnet/rpc-definitions/game/player-save/vending.d.ts.map +1 -0
  107. package/dist/fishnet/rpc-definitions/game/skills-component.d.ts +453 -0
  108. package/dist/fishnet/rpc-definitions/game/skills-component.d.ts.map +1 -0
  109. package/dist/fishnet/rpc-definitions/game/status-component.d.ts +146 -0
  110. package/dist/fishnet/rpc-definitions/game/status-component.d.ts.map +1 -0
  111. package/dist/fishnet/rpc-definitions/game/summoning-component.d.ts +82 -0
  112. package/dist/fishnet/rpc-definitions/game/summoning-component.d.ts.map +1 -0
  113. package/dist/fishnet/rpc-definitions/generated/base-unit-controller.d.ts +76 -0
  114. package/dist/fishnet/rpc-definitions/generated/base-unit-controller.d.ts.map +1 -0
  115. package/dist/fishnet/rpc-definitions/generated/boss-grave-stone.d.ts +24 -0
  116. package/dist/fishnet/rpc-definitions/generated/boss-grave-stone.d.ts.map +1 -0
  117. package/dist/fishnet/rpc-definitions/generated/broadcasts.d.ts +20 -0
  118. package/dist/fishnet/rpc-definitions/generated/broadcasts.d.ts.map +1 -0
  119. package/dist/fishnet/rpc-definitions/generated/combat-component.d.ts +82 -0
  120. package/dist/fishnet/rpc-definitions/generated/combat-component.d.ts.map +1 -0
  121. package/dist/fishnet/rpc-definitions/generated/engine/network-animator.d.ts +18 -0
  122. package/dist/fishnet/rpc-definitions/generated/engine/network-animator.d.ts.map +1 -0
  123. package/dist/fishnet/rpc-definitions/generated/engine/network-transform.d.ts +67 -0
  124. package/dist/fishnet/rpc-definitions/generated/engine/network-transform.d.ts.map +1 -0
  125. package/dist/fishnet/rpc-definitions/generated/engine/predicted-owner.d.ts +11 -0
  126. package/dist/fishnet/rpc-definitions/generated/engine/predicted-owner.d.ts.map +1 -0
  127. package/dist/fishnet/rpc-definitions/generated/health-component.d.ts +157 -0
  128. package/dist/fishnet/rpc-definitions/generated/health-component.d.ts.map +1 -0
  129. package/dist/fishnet/rpc-definitions/generated/index.d.ts +10280 -0
  130. package/dist/fishnet/rpc-definitions/generated/index.d.ts.map +1 -0
  131. package/dist/fishnet/rpc-definitions/generated/loot-drop.d.ts +49 -0
  132. package/dist/fishnet/rpc-definitions/generated/loot-drop.d.ts.map +1 -0
  133. package/dist/fishnet/rpc-definitions/generated/manifest.d.ts +7 -0
  134. package/dist/fishnet/rpc-definitions/generated/manifest.d.ts.map +1 -0
  135. package/dist/fishnet/rpc-definitions/generated/monster-controller.d.ts +111 -0
  136. package/dist/fishnet/rpc-definitions/generated/monster-controller.d.ts.map +1 -0
  137. package/dist/fishnet/rpc-definitions/generated/move-component.d.ts +48 -0
  138. package/dist/fishnet/rpc-definitions/generated/move-component.d.ts.map +1 -0
  139. package/dist/fishnet/rpc-definitions/generated/player-controller.d.ts +3265 -0
  140. package/dist/fishnet/rpc-definitions/generated/player-controller.d.ts.map +1 -0
  141. package/dist/fishnet/rpc-definitions/generated/player-save.d.ts +5954 -0
  142. package/dist/fishnet/rpc-definitions/generated/player-save.d.ts.map +1 -0
  143. package/dist/fishnet/rpc-definitions/generated/prefabs.d.ts +119 -0
  144. package/dist/fishnet/rpc-definitions/generated/prefabs.d.ts.map +1 -0
  145. package/dist/fishnet/rpc-definitions/generated/skills-component.d.ts +230 -0
  146. package/dist/fishnet/rpc-definitions/generated/skills-component.d.ts.map +1 -0
  147. package/dist/fishnet/rpc-definitions/generated/status-component.d.ts +112 -0
  148. package/dist/fishnet/rpc-definitions/generated/status-component.d.ts.map +1 -0
  149. package/dist/fishnet/rpc-definitions/generated/summoning-component.d.ts +56 -0
  150. package/dist/fishnet/rpc-definitions/generated/summoning-component.d.ts.map +1 -0
  151. package/dist/fishnet/rpc-definitions/index.d.ts +10418 -0
  152. package/dist/fishnet/rpc-definitions/index.d.ts.map +1 -0
  153. package/dist/fishnet/rpc-definitions/prefabs.d.ts +112 -0
  154. package/dist/fishnet/rpc-definitions/prefabs.d.ts.map +1 -0
  155. package/dist/fishnet/rpc-resolution.d.ts +65 -0
  156. package/dist/fishnet/rpc-resolution.d.ts.map +1 -0
  157. package/dist/fishnet/semantic-definitions.d.ts +40 -0
  158. package/dist/fishnet/semantic-definitions.d.ts.map +1 -0
  159. package/dist/fishnet/semantic-map.d.ts +23 -0
  160. package/dist/fishnet/semantic-map.d.ts.map +1 -0
  161. package/dist/fishnet/session-decoder.d.ts +19 -0
  162. package/dist/fishnet/session-decoder.d.ts.map +1 -0
  163. package/dist/fishnet/spawn-parser.d.ts +25 -0
  164. package/dist/fishnet/spawn-parser.d.ts.map +1 -0
  165. package/dist/fishnet/types.d.ts +5 -0
  166. package/dist/fishnet/types.d.ts.map +1 -0
  167. package/dist/fishnet/wire-reader.d.ts +28 -0
  168. package/dist/fishnet/wire-reader.d.ts.map +1 -0
  169. package/dist/fishnet/wire-reader.js +140 -0
  170. package/dist/game-build.d.ts +5 -0
  171. package/dist/game-build.d.ts.map +1 -0
  172. package/dist/index.d.ts +26 -0
  173. package/dist/index.d.ts.map +1 -0
  174. package/dist/index.js +15413 -0
  175. package/dist/litenetlib/decoder.d.ts +7 -0
  176. package/dist/litenetlib/decoder.d.ts.map +1 -0
  177. package/dist/litenetlib/types.d.ts +58 -0
  178. package/dist/litenetlib/types.d.ts.map +1 -0
  179. package/dist/text-format.d.ts +4 -0
  180. package/dist/text-format.d.ts.map +1 -0
  181. package/dist/types.d.ts +53 -0
  182. package/dist/types.d.ts.map +1 -0
  183. package/package.json +36 -0
package/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # @kar-mi/spirit-vale-tools-capture
2
+
3
+ Passive Windows packet capture and Spirit Vale protocol decoding for Bun.
4
+
5
+ ## Install
6
+
7
+ ```sh
8
+ bun add @kar-mi/spirit-vale-tools-capture
9
+ ```
10
+
11
+ ## Exports
12
+
13
+ - `@kar-mi/spirit-vale-tools-capture` — protocol decoding types and helpers
14
+ - `@kar-mi/spirit-vale-tools-capture/capture` — passive packet capture (requires Npcap)
15
+ - `@kar-mi/spirit-vale-tools-capture/wire-reader` — FishNet wire-format reader
16
+
17
+ ## Usage
18
+
19
+ ```ts
20
+ import { PacketCapture, getNpcapStatus } from "@kar-mi/spirit-vale-tools-capture/capture";
21
+
22
+ const status = await getNpcapStatus();
23
+ if (status.availability !== "ready") throw new Error("Npcap is not ready");
24
+
25
+ const capture = new PacketCapture();
26
+ capture.on("fishNetPacket", (packet) => {
27
+ console.log(packet.tick, packet.packetName);
28
+ });
29
+
30
+ await capture.start({
31
+ protocols: ["udp"],
32
+ targetProcessName: "SpiritVale.exe",
33
+ decodeFishNet: true,
34
+ });
35
+ ```
36
+
37
+ Import from `/capture` only in a Bun main process; it exposes the Windows Npcap
38
+ APIs. The package root exports the pure protocol decoders
39
+ (`decodeLiteNetLibDatagram`, `decodeFishNetBundle`, `FishNetSessionDecoder`)
40
+ for replay and testing without a live capture.
41
+
42
+ ### Eternal Tower state
43
+
44
+ `FishNetEternalTowerTracker` consumes decoded capture packets and exposes the
45
+ best-known tower name, floor, and instance information:
46
+
47
+ ```ts
48
+ import { FishNetEternalTowerTracker } from "@kar-mi/spirit-vale-tools-capture";
49
+
50
+ const tower = new FishNetEternalTowerTracker();
51
+ capture.on("fishNetPacket", (packet) => {
52
+ if (!tower.consume(packet)) return;
53
+ const state = tower.current();
54
+ console.log(state.known, state.inTower, state.towerName, state.floor, state.instanceId);
55
+ });
56
+ ```
57
+
58
+ `known` remains false until either a `DrawTitle` banner matching
59
+ `"<tower name>\nFloor <n>"` or a `ClientInstancedMapReady` with
60
+ `bindingSlot === "et"` arrives. The former supplies `towerName` and `floor`;
61
+ the latter confirms tower entry and can supply `instanceId` and
62
+ `instancedMapId`. The tracker preserves tower state across reconnects because
63
+ the server may not repeat either signal when reattaching to the same floor. A
64
+ non-tower `ClientInstancedMapReady` clears the state.
65
+
66
+ The assembly-derived RPC map still registers `PlayerController.ETUpdateRun`
67
+ and `ETAdvanceFloor` at wire hashes 95 and 96, but observed Eternal Tower
68
+ captures contain no invocations of either method. Registration proves that the
69
+ methods remain in the build; it does not prove that the server calls them.
70
+
71
+ See the [package guide](https://github.com/kar-mi/spirit-vale-tools/blob/main/docs/packages.md) for registry setup and usage.
@@ -0,0 +1,9 @@
1
+ import type { NpcapDevice } from "./npcap.ts";
2
+ export interface AdapterResolution {
3
+ device?: NpcapDevice;
4
+ usedFallback: boolean;
5
+ detail?: string;
6
+ }
7
+ export declare function resolveCaptureDevice(devices: readonly NpcapDevice[], requestedName?: string): Promise<AdapterResolution>;
8
+ export declare function chooseDeviceByRouteOutput(devices: readonly NpcapDevice[], output: string): NpcapDevice | undefined;
9
+ //# sourceMappingURL=adapter-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-selection.d.ts","sourceRoot":"","sources":["../../src/capture/adapter-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,SAAS,WAAW,EAAE,EAC/B,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,iBAAiB,CAAC,CAa5B;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAYlH"}
@@ -0,0 +1,2 @@
1
+ export declare function formatIpv6(data: Buffer): string;
2
+ //# sourceMappingURL=ip-address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ip-address.d.ts","sourceRoot":"","sources":["../../src/capture/ip-address.ts"],"names":[],"mappings":"AAAA,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAqB/C"}
@@ -0,0 +1,10 @@
1
+ export declare const DATA_LINK: {
2
+ readonly NULL: 0;
3
+ readonly ETHERNET: 1;
4
+ readonly RAW: 12;
5
+ readonly LOOP: 108;
6
+ readonly LINUX_SLL: 113;
7
+ };
8
+ export declare function extractIpPacket(frame: Buffer, dataLink: number): Buffer | undefined;
9
+ export declare function supportsDataLink(dataLink: number): boolean;
10
+ //# sourceMappingURL=link-layer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"link-layer.d.ts","sourceRoot":"","sources":["../../src/capture/link-layer.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;aACpB,IAAI,EAAE,CAAC;aACP,QAAQ,EAAE,CAAC;aACX,GAAG,EAAE,EAAE;aACP,IAAI,EAAE,GAAG;aACT,SAAS,EAAE,GAAG;CACN,CAAC;AAEX,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAqBnF;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,38 @@
1
+ export type NpcapAvailability = "ready" | "missing" | "admin-only" | "error";
2
+ export interface NpcapStatus {
3
+ availability: NpcapAvailability;
4
+ detail: string;
5
+ version?: string;
6
+ }
7
+ export interface NpcapDevice {
8
+ name: string;
9
+ description: string;
10
+ addresses: string[];
11
+ loopback: boolean;
12
+ }
13
+ export interface NpcapPacket {
14
+ capturedAt: Date;
15
+ timestampTicks: bigint;
16
+ data: Buffer;
17
+ originalLength: number;
18
+ }
19
+ export interface NpcapSession {
20
+ readonly device: NpcapDevice;
21
+ readonly dataLink: number;
22
+ nextPacket(): NpcapPacket | undefined;
23
+ close(): void;
24
+ }
25
+ export interface NpcapRuntime {
26
+ status(): Promise<NpcapStatus>;
27
+ listDevices(): Promise<NpcapDevice[]>;
28
+ open(device: NpcapDevice, filter: string): Promise<NpcapSession>;
29
+ }
30
+ export declare class SystemNpcapRuntime implements NpcapRuntime {
31
+ private api?;
32
+ private readyStatus?;
33
+ status(): Promise<NpcapStatus>;
34
+ listDevices(): Promise<NpcapDevice[]>;
35
+ open(device: NpcapDevice, filter: string): Promise<NpcapSession>;
36
+ private load;
37
+ }
38
+ //# sourceMappingURL=npcap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npcap.d.ts","sourceRoot":"","sources":["../../src/capture/npcap.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,iBAAiB,GAAG,OAAO,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,iBAAiB,CAAC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,IAAI,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,UAAU,IAAI,WAAW,GAAG,SAAS,CAAC;IACtC,KAAK,IAAI,IAAI,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/B,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAClE;AAID,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,GAAG,CAAC,CAAc;IAC1B,OAAO,CAAC,WAAW,CAAC,CAAc;IAE5B,MAAM,IAAI,OAAO,CAAC,WAAW,CAAC,CA0BnC;IAEK,WAAW,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAiC1C;IAEK,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAiCrE;IAED,OAAO,CAAC,IAAI;CAyBb"}
@@ -0,0 +1,51 @@
1
+ import { EventEmitter } from "node:events";
2
+ import type { CapturedLiteNetLibPacket } from "../litenetlib/types.ts";
3
+ import type { CapturedFishNetPacket } from "../fishnet/types.ts";
4
+ import type { NpcapDevice, NpcapRuntime, NpcapStatus } from "./npcap.ts";
5
+ import type { TargetSnapshotProvider } from "./target-tracker.ts";
6
+ import type { CaptureConfig, CaptureTargetStatus, CapturedTcpPacket, CapturedTransportPacket, CapturedUdpPacket, CaptureState } from "../types.ts";
7
+ export interface PacketCaptureDependencies {
8
+ runtime?: NpcapRuntime;
9
+ targetProvider?: TargetSnapshotProvider;
10
+ platform?: NodeJS.Platform;
11
+ }
12
+ export declare function getNpcapStatus(): Promise<NpcapStatus>;
13
+ export declare function listNpcapDevices(): Promise<NpcapDevice[]>;
14
+ export declare class PacketCapture extends EventEmitter {
15
+ private readonly runtime;
16
+ private readonly targetProvider?;
17
+ private readonly platform;
18
+ private session?;
19
+ private target?;
20
+ private pollTimer?;
21
+ private pending;
22
+ private polling;
23
+ private decodeLiteNetLib;
24
+ private decodeFishNet;
25
+ private fishNetRpcMap;
26
+ private fishNetSessionDecoder;
27
+ private _state;
28
+ constructor(dependencies?: PacketCaptureDependencies);
29
+ get state(): CaptureState;
30
+ on(event: "started", listener: () => void): this;
31
+ on(event: "packet", listener: (packet: CapturedTcpPacket) => void): this;
32
+ on(event: "udpPacket", listener: (packet: CapturedUdpPacket) => void): this;
33
+ on(event: "transportPacket", listener: (packet: CapturedTransportPacket) => void): this;
34
+ on(event: "liteNetPacket", listener: (packet: CapturedLiteNetLibPacket) => void): this;
35
+ on(event: "fishNetPacket", listener: (packet: CapturedFishNetPacket) => void): this;
36
+ on(event: "targetStatus", listener: (status: CaptureTargetStatus) => void): this;
37
+ on(event: "warning", listener: (message: string) => void): this;
38
+ on(event: "error", listener: (error: Error) => void): this;
39
+ on(event: "stopped", listener: () => void): this;
40
+ start(config?: CaptureConfig): Promise<void>;
41
+ stop(): Promise<void>;
42
+ private poll;
43
+ private flushPending;
44
+ private emitTransportPacket;
45
+ private emitLiteNetLibPackets;
46
+ private emitFishNetPacket;
47
+ private emitSafely;
48
+ private closeResources;
49
+ private resetDecoder;
50
+ }
51
+ //# sourceMappingURL=packet-capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-capture.d.ts","sourceRoot":"","sources":["../../src/capture/packet-capture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAW3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAiB,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAgB,WAAW,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,EACvB,iBAAiB,EACjB,YAAY,EACb,MAAM,aAAa,CAAC;AAQrB,MAAM,WAAW,yBAAyB;IACxC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;CAC5B;AAOD,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAE3D;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAE/D;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAyB;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,OAAO,CAAC,CAAe;IAC/B,OAAO,CAAC,MAAM,CAAC,CAAuB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAiC;IACnD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,qBAAqB,CAAsC;IACnE,OAAO,CAAC,MAAM,CAA2B;IAEzC,YAAY,YAAY,GAAE,yBAA8B,EAKvD;IAED,IAAI,KAAK,IAAI,YAAY,CAExB;IAEQ,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IACjD,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAAC;IACzE,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,IAAI,GAAG,IAAI,CAAC;IAC5E,EAAE,CAAC,KAAK,EAAE,iBAAiB,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,GAAG,IAAI,CAAC;IACxF,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,wBAAwB,KAAK,IAAI,GAAG,IAAI,CAAC;IACvF,EAAE,CAAC,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,IAAI,GAAG,IAAI,CAAC;IACpF,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,GAAG,IAAI,CAAC;IACjF,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAKpD,KAAK,CAAC,MAAM,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CrD;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAO1B;IAED,OAAO,CAAC,IAAI;IA0CZ,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,iBAAiB;IA4BzB,OAAO,CAAC,UAAU;IAclB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,YAAY;CAOrB"}
@@ -0,0 +1,11 @@
1
+ import type { CapturedTransportPacket } from "../types.ts";
2
+ export interface PacketParseContext {
3
+ capturedAt: Date;
4
+ timestampTicks: bigint;
5
+ interfaceIndex: number;
6
+ subinterfaceIndex?: number;
7
+ direction: "inbound" | "outbound";
8
+ loopback: boolean;
9
+ }
10
+ export declare function parseTransportPacket(data: Buffer, context: PacketParseContext): CapturedTransportPacket | undefined;
11
+ //# sourceMappingURL=packet-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packet-parser.d.ts","sourceRoot":"","sources":["../../src/capture/packet-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAI3D,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,IAAI,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,EAAE,SAAS,GAAG,UAAU,CAAC;IAClC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,GAAG,uBAAuB,GAAG,SAAS,CAKnH"}
@@ -0,0 +1,37 @@
1
+ import type { CaptureProtocol, CapturedTransportPacket, CaptureTargetStatus } from "../types.ts";
2
+ interface OwnedEndpoint {
3
+ protocol: CaptureProtocol;
4
+ address: string;
5
+ port: number;
6
+ processId: number;
7
+ }
8
+ export interface TargetSnapshotProvider {
9
+ snapshot(processName: string, protocols: readonly CaptureProtocol[]): Promise<{
10
+ processIds: number[];
11
+ endpoints: OwnedEndpoint[];
12
+ }>;
13
+ }
14
+ export declare class WindowsTargetTracker {
15
+ readonly processName: string;
16
+ private readonly protocols;
17
+ private readonly onStatus;
18
+ private readonly provider;
19
+ private readonly onWarning;
20
+ private readonly refreshIntervalMs;
21
+ private processIds;
22
+ private endpointKeys;
23
+ private timer?;
24
+ private refreshing;
25
+ private published;
26
+ private lastRefreshError?;
27
+ constructor(processName: string, protocols: readonly CaptureProtocol[], onStatus: (status: CaptureTargetStatus) => void, provider?: TargetSnapshotProvider, onWarning?: (message: string) => void, refreshIntervalMs?: number);
28
+ start(): Promise<void>;
29
+ stop(): void;
30
+ classify(packet: CapturedTransportPacket): "inbound" | "outbound" | undefined;
31
+ private matches;
32
+ private refresh;
33
+ }
34
+ export declare function parseTaskList(output: string): number[];
35
+ export declare function parseNetstat(output: string, protocol: CaptureProtocol): OwnedEndpoint[];
36
+ export {};
37
+ //# sourceMappingURL=target-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"target-tracker.d.ts","sourceRoot":"","sources":["../../src/capture/target-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAEjG,UAAU,aAAa;IACrB,QAAQ,EAAE,eAAe,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC;QAC5E,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,SAAS,EAAE,aAAa,EAAE,CAAC;KAC5B,CAAC,CAAC;CACJ;AAED,qBAAa,oBAAoB;IAS7B,QAAQ,CAAC,WAAW,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAbpC,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,KAAK,CAAC,CAAiC;IAC/C,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAC,CAAS;IAElC,YACW,WAAW,EAAE,MAAM,EACX,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,KAAK,IAAI,EAC/C,QAAQ,GAAE,sBAA4D,EACtE,SAAS,GAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAe,EAC/C,iBAAiB,SAA6B,EAC7D;IAEE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAG3B;IAED,IAAI,IAAI,IAAI,CAGX;IAED,QAAQ,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAM5E;IAED,OAAO,CAAC,OAAO;YAMD,OAAO;CAgCtB;AA+BD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAKtD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,aAAa,EAAE,CAQvF"}
@@ -0,0 +1,5 @@
1
+ /** Bun/main-process-only capture APIs. Do not import this entrypoint from a browser view. */
2
+ export { PacketCapture, getNpcapStatus, listNpcapDevices } from "./capture/packet-capture.ts";
3
+ export { resolveCaptureDevice } from "./capture/adapter-selection.ts";
4
+ export type { NpcapAvailability, NpcapDevice, NpcapStatus } from "./capture/npcap.ts";
5
+ //# sourceMappingURL=capture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../src/capture.ts"],"names":[],"mappings":"AAAA,6FAA6F;AAC7F,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}