@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.
- package/README.md +71 -0
- package/dist/capture/adapter-selection.d.ts +9 -0
- package/dist/capture/adapter-selection.d.ts.map +1 -0
- package/dist/capture/ip-address.d.ts +2 -0
- package/dist/capture/ip-address.d.ts.map +1 -0
- package/dist/capture/link-layer.d.ts +10 -0
- package/dist/capture/link-layer.d.ts.map +1 -0
- package/dist/capture/npcap.d.ts +38 -0
- package/dist/capture/npcap.d.ts.map +1 -0
- package/dist/capture/packet-capture.d.ts +51 -0
- package/dist/capture/packet-capture.d.ts.map +1 -0
- package/dist/capture/packet-parser.d.ts +11 -0
- package/dist/capture/packet-parser.d.ts.map +1 -0
- package/dist/capture/target-tracker.d.ts +37 -0
- package/dist/capture/target-tracker.d.ts.map +1 -0
- package/dist/capture.d.ts +5 -0
- package/dist/capture.d.ts.map +1 -0
- package/dist/capture.js +16008 -0
- package/dist/fishnet/boss-gravestone.d.ts +16 -0
- package/dist/fishnet/boss-gravestone.d.ts.map +1 -0
- package/dist/fishnet/builtin-maps.d.ts +10424 -0
- package/dist/fishnet/builtin-maps.d.ts.map +1 -0
- package/dist/fishnet/character-data-schema.d.ts +3 -0
- package/dist/fishnet/character-data-schema.d.ts.map +1 -0
- package/dist/fishnet/decoder.d.ts +12 -0
- package/dist/fishnet/decoder.d.ts.map +1 -0
- package/dist/fishnet/definitions/codecs.d.ts +12 -0
- package/dist/fishnet/definitions/codecs.d.ts.map +1 -0
- package/dist/fishnet/definitions/protocol.d.ts +101 -0
- package/dist/fishnet/definitions/protocol.d.ts.map +1 -0
- package/dist/fishnet/definitions/rpc-map.d.ts +61 -0
- package/dist/fishnet/definitions/rpc-map.d.ts.map +1 -0
- package/dist/fishnet/eternal-tower-tracker.d.ts +24 -0
- package/dist/fishnet/eternal-tower-tracker.d.ts.map +1 -0
- package/dist/fishnet/field-decoder.d.ts +19 -0
- package/dist/fishnet/field-decoder.d.ts.map +1 -0
- package/dist/fishnet/map-definitions/current-build.d.ts +3 -0
- package/dist/fishnet/map-definitions/current-build.d.ts.map +1 -0
- package/dist/fishnet/map-definitions/index.d.ts +3 -0
- package/dist/fishnet/map-definitions/index.d.ts.map +1 -0
- package/dist/fishnet/message-parser.d.ts +17 -0
- package/dist/fishnet/message-parser.d.ts.map +1 -0
- package/dist/fishnet/monster-directory.d.ts +40 -0
- package/dist/fishnet/monster-directory.d.ts.map +1 -0
- package/dist/fishnet/network-transform-decoder.d.ts +25 -0
- package/dist/fishnet/network-transform-decoder.d.ts.map +1 -0
- package/dist/fishnet/protocol.d.ts +21 -0
- package/dist/fishnet/protocol.d.ts.map +1 -0
- package/dist/fishnet/quaternion-compression.d.ts +6 -0
- package/dist/fishnet/quaternion-compression.d.ts.map +1 -0
- package/dist/fishnet/recovery-style.d.ts +5 -0
- package/dist/fishnet/recovery-style.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/broadcasts.d.ts +23 -0
- package/dist/fishnet/rpc-definitions/broadcasts.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/current-build.d.ts +8501 -0
- package/dist/fishnet/rpc-definitions/current-build.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/fishnet/network-animator.d.ts +42 -0
- package/dist/fishnet/rpc-definitions/fishnet/network-animator.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/fishnet/network-transform.d.ts +138 -0
- package/dist/fishnet/rpc-definitions/fishnet/network-transform.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/fishnet/predicted-owner.d.ts +26 -0
- package/dist/fishnet/rpc-definitions/fishnet/predicted-owner.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/base-unit-controller.d.ts +122 -0
- package/dist/fishnet/rpc-definitions/game/base-unit-controller.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/combat-component.d.ts +44 -0
- package/dist/fishnet/rpc-definitions/game/combat-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/health-component.d.ts +306 -0
- package/dist/fishnet/rpc-definitions/game/health-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/loot-drop.d.ts +104 -0
- package/dist/fishnet/rpc-definitions/game/loot-drop.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/monster-controller.d.ts +144 -0
- package/dist/fishnet/rpc-definitions/game/monster-controller.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/move-component.d.ts +74 -0
- package/dist/fishnet/rpc-definitions/game/move-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/chat-presence.d.ts +332 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/chat-presence.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/endgame-pvp.d.ts +89 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/endgame-pvp.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/guild.d.ts +393 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/guild.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/index.d.ts +23 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/index.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/party.d.ts +168 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/party.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/trade-market.d.ts +232 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/trade-market.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/traversal-session.d.ts +58 -0
- package/dist/fishnet/rpc-definitions/game/player-controller/traversal-session.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/character-build.d.ts +266 -0
- package/dist/fishnet/rpc-definitions/game/player-save/character-build.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/character-data.d.ts +991 -0
- package/dist/fishnet/rpc-definitions/game/player-save/character-data.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/cosmetics-progression.d.ts +126 -0
- package/dist/fishnet/rpc-definitions/game/player-save/cosmetics-progression.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/debug.d.ts +46 -0
- package/dist/fishnet/rpc-definitions/game/player-save/debug.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/economy-world-storage.d.ts +224 -0
- package/dist/fishnet/rpc-definitions/game/player-save/economy-world-storage.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/index.d.ts +1860 -0
- package/dist/fishnet/rpc-definitions/game/player-save/index.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/session-character.d.ts +72 -0
- package/dist/fishnet/rpc-definitions/game/player-save/session-character.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/social-account.d.ts +107 -0
- package/dist/fishnet/rpc-definitions/game/player-save/social-account.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/player-save/vending.d.ts +98 -0
- package/dist/fishnet/rpc-definitions/game/player-save/vending.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/skills-component.d.ts +453 -0
- package/dist/fishnet/rpc-definitions/game/skills-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/status-component.d.ts +146 -0
- package/dist/fishnet/rpc-definitions/game/status-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/game/summoning-component.d.ts +82 -0
- package/dist/fishnet/rpc-definitions/game/summoning-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/base-unit-controller.d.ts +76 -0
- package/dist/fishnet/rpc-definitions/generated/base-unit-controller.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/boss-grave-stone.d.ts +24 -0
- package/dist/fishnet/rpc-definitions/generated/boss-grave-stone.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/broadcasts.d.ts +20 -0
- package/dist/fishnet/rpc-definitions/generated/broadcasts.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/combat-component.d.ts +82 -0
- package/dist/fishnet/rpc-definitions/generated/combat-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/engine/network-animator.d.ts +18 -0
- package/dist/fishnet/rpc-definitions/generated/engine/network-animator.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/engine/network-transform.d.ts +67 -0
- package/dist/fishnet/rpc-definitions/generated/engine/network-transform.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/engine/predicted-owner.d.ts +11 -0
- package/dist/fishnet/rpc-definitions/generated/engine/predicted-owner.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/health-component.d.ts +157 -0
- package/dist/fishnet/rpc-definitions/generated/health-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/index.d.ts +10280 -0
- package/dist/fishnet/rpc-definitions/generated/index.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/loot-drop.d.ts +49 -0
- package/dist/fishnet/rpc-definitions/generated/loot-drop.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/manifest.d.ts +7 -0
- package/dist/fishnet/rpc-definitions/generated/manifest.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/monster-controller.d.ts +111 -0
- package/dist/fishnet/rpc-definitions/generated/monster-controller.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/move-component.d.ts +48 -0
- package/dist/fishnet/rpc-definitions/generated/move-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/player-controller.d.ts +3265 -0
- package/dist/fishnet/rpc-definitions/generated/player-controller.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/player-save.d.ts +5954 -0
- package/dist/fishnet/rpc-definitions/generated/player-save.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/prefabs.d.ts +119 -0
- package/dist/fishnet/rpc-definitions/generated/prefabs.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/skills-component.d.ts +230 -0
- package/dist/fishnet/rpc-definitions/generated/skills-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/status-component.d.ts +112 -0
- package/dist/fishnet/rpc-definitions/generated/status-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/generated/summoning-component.d.ts +56 -0
- package/dist/fishnet/rpc-definitions/generated/summoning-component.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/index.d.ts +10418 -0
- package/dist/fishnet/rpc-definitions/index.d.ts.map +1 -0
- package/dist/fishnet/rpc-definitions/prefabs.d.ts +112 -0
- package/dist/fishnet/rpc-definitions/prefabs.d.ts.map +1 -0
- package/dist/fishnet/rpc-resolution.d.ts +65 -0
- package/dist/fishnet/rpc-resolution.d.ts.map +1 -0
- package/dist/fishnet/semantic-definitions.d.ts +40 -0
- package/dist/fishnet/semantic-definitions.d.ts.map +1 -0
- package/dist/fishnet/semantic-map.d.ts +23 -0
- package/dist/fishnet/semantic-map.d.ts.map +1 -0
- package/dist/fishnet/session-decoder.d.ts +19 -0
- package/dist/fishnet/session-decoder.d.ts.map +1 -0
- package/dist/fishnet/spawn-parser.d.ts +25 -0
- package/dist/fishnet/spawn-parser.d.ts.map +1 -0
- package/dist/fishnet/types.d.ts +5 -0
- package/dist/fishnet/types.d.ts.map +1 -0
- package/dist/fishnet/wire-reader.d.ts +28 -0
- package/dist/fishnet/wire-reader.d.ts.map +1 -0
- package/dist/fishnet/wire-reader.js +140 -0
- package/dist/game-build.d.ts +5 -0
- package/dist/game-build.d.ts.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15413 -0
- package/dist/litenetlib/decoder.d.ts +7 -0
- package/dist/litenetlib/decoder.d.ts.map +1 -0
- package/dist/litenetlib/types.d.ts +58 -0
- package/dist/litenetlib/types.d.ts.map +1 -0
- package/dist/text-format.d.ts +4 -0
- package/dist/text-format.d.ts.map +1 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.d.ts.map +1 -0
- 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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|