Skip to content

Commit 5d64c78

Browse files
committed
fix: stop skipping events
1 parent 62cd194 commit 5d64c78

File tree

2 files changed

+36
-8
lines changed

2 files changed

+36
-8
lines changed

packages/event-downloader/src/event-parser.ts

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,23 @@ import { FullNodeEvent, FullNodeEventTypes } from './types';
99

1010
/**
1111
* Extracts the transaction hash from a fullnode event.
12+
* Now handles ALL event types, not just predefined ones.
1213
*
1314
* @param event - The fullnode event to extract the hash from
1415
* @returns The transaction hash if the event contains one, null otherwise
1516
*/
1617
export function extractTxHash(event: FullNodeEvent): string | null {
1718
const eventType = event.event.type;
19+
const eventData = event.event.data as any;
1820

1921
switch (eventType) {
2022
case FullNodeEventTypes.NEW_VERTEX_ACCEPTED:
2123
case FullNodeEventTypes.VERTEX_METADATA_CHANGED:
2224
case FullNodeEventTypes.VERTEX_REMOVED:
23-
return event.event.data.hash;
25+
return eventData?.hash ?? null;
2426

2527
case FullNodeEventTypes.NC_EVENT:
26-
return event.event.data.vertex_id;
28+
return eventData?.vertex_id ?? null;
2729

2830
case FullNodeEventTypes.LOAD_STARTED:
2931
case FullNodeEventTypes.LOAD_FINISHED:
@@ -33,6 +35,30 @@ export function extractTxHash(event: FullNodeEvent): string | null {
3335
return null;
3436

3537
default:
38+
// Handle unknown event types by trying common patterns
39+
// TOKEN_CREATED and other events might have different structures
40+
41+
// Try standard hash field
42+
if (eventData?.hash) {
43+
return eventData.hash;
44+
}
45+
46+
// Try vertex_id (for vertex-related events)
47+
if (eventData?.vertex_id) {
48+
return eventData.vertex_id;
49+
}
50+
51+
// Try token_uid (for TOKEN_CREATED events)
52+
if (eventData?.token_uid) {
53+
return eventData.token_uid;
54+
}
55+
56+
// Try nc_exec_info.nc_tx (for nano contract events)
57+
if (eventData?.nc_exec_info?.nc_tx) {
58+
return eventData.nc_exec_info.nc_tx;
59+
}
60+
61+
// No recognizable hash found
3662
return null;
3763
}
3864
}

packages/event-downloader/src/worker.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
import { WebSocket, MessageEvent, ErrorEvent } from 'ws';
99
import { bigIntUtils } from '@hathor/wallet-lib';
10-
import { FullNodeEvent, FullNodeEventSchema, WebSocketSendEvent } from './types';
10+
import { FullNodeEvent, WebSocketSendEvent } from './types';
1111
import { FULLNODE_HOST, USE_SSL, WINDOW_SIZE, CONNECTION_TIMEOUT_MS } from './config';
1212

1313
export interface BatchConfig {
@@ -103,16 +103,18 @@ export function createWorker(config: BatchConfig, callbacks: WorkerCallbacks): W
103103
resetActivityTimeout();
104104
try {
105105
const rawData = bigIntUtils.JSONBigInt.parse(socketEvent.data.toString());
106-
const parseResult = FullNodeEventSchema.safeParse(rawData);
107106

108-
if (!parseResult.success) {
109-
// Skip messages that don't conform to event schema (e.g., handshake messages)
110-
// These are expected at the start of a connection
107+
// Check if this is an event message (not a handshake or control message)
108+
// Event messages have: event.id, event.type, event.timestamp
109+
if (!rawData.event || typeof rawData.event.id !== 'number' || typeof rawData.event.type !== 'string') {
110+
// Skip non-event messages (handshake, control messages, etc.)
111111
console.log(`Skipping non-event message: ${JSON.stringify(rawData).substring(0, 100)}...`);
112112
return;
113113
}
114114

115-
const event = parseResult.data;
115+
// Accept ALL events regardless of type - store them as-is
116+
// TypeScript requires us to cast, but we're intentionally accepting any event structure
117+
const event = rawData as any;
116118
const eventId = event.event.id;
117119

118120
// Call the event callback

0 commit comments

Comments
 (0)