Skip to content
This repository was archived by the owner on Jul 21, 2025. It is now read-only.

Commit 1e0bea2

Browse files
committed
chore: improve debug
1 parent ed16462 commit 1e0bea2

35 files changed

Lines changed: 403 additions & 300 deletions

packages/dvmcp-bridge/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ export async function startBridge(options: BridgeStartOptions = {}) {
2525
const bridge = new DVMBridge(config);
2626

2727
const shutdown = async () => {
28-
loggerBridge('Shutting down...');
28+
loggerBridge.info('Shutting down...');
2929
try {
3030
await bridge.stop();
3131
process.exit(0);

packages/dvmcp-bridge/src/announcer.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,15 @@ export class NostrAnnouncer {
6767
});
6868

6969
await this.relayHandler.publishEvent(event);
70-
loggerBridge('Announced relay list metadata');
70+
loggerBridge.info('Announced relay list metadata');
7171
}
7272

7373
async announceServer() {
7474
const mainClient = this.mcpPool.getDefaultClient();
7575
if (!mainClient) {
76-
loggerBridge('No MCP server client available for server announcement.');
76+
loggerBridge.warn(
77+
'No MCP server client available for server announcement.'
78+
);
7779
return;
7880
}
7981

@@ -91,7 +93,7 @@ export class NostrAnnouncer {
9193

9294
const announcementContent = JSON.stringify(announcementObject);
9395

94-
loggerBridge(`Using server ID: ${this.serverId}`);
96+
loggerBridge.info(`Using server ID: ${this.serverId}`);
9597

9698
const tags: string[][] = [
9799
[TAG_UNIQUE_IDENTIFIER, this.serverId],
@@ -110,7 +112,7 @@ export class NostrAnnouncer {
110112
});
111113

112114
await this.relayHandler.publishEvent(event);
113-
loggerBridge('Server announced');
115+
loggerBridge.info('Server announced');
114116
return { event, serverId: this.serverId, announcementObject };
115117
}
116118

@@ -142,7 +144,7 @@ export class NostrAnnouncer {
142144
});
143145

144146
await this.relayHandler.publishEvent(event);
145-
loggerBridge('Tools list announced');
147+
loggerBridge.info('Tools list announced');
146148
}
147149

148150
async announceResourcesList(resources?: ListResourcesResult) {
@@ -175,7 +177,7 @@ export class NostrAnnouncer {
175177
});
176178

177179
await this.relayHandler.publishEvent(event);
178-
loggerBridge('Resources list announced');
180+
loggerBridge.info('Resources list announced');
179181
}
180182

181183
async announceResourceTemplatesList(
@@ -187,7 +189,7 @@ export class NostrAnnouncer {
187189
!resourceTemplatesResult.resourceTemplates ||
188190
resourceTemplatesResult.resourceTemplates.length === 0
189191
) {
190-
loggerBridge('No resource templates to announce');
192+
loggerBridge.info('No resource templates to announce');
191193
return;
192194
}
193195

@@ -210,7 +212,7 @@ export class NostrAnnouncer {
210212
});
211213

212214
await this.relayHandler.publishEvent(event);
213-
loggerBridge(
215+
loggerBridge.info(
214216
`Resource templates list announced with ${resourceTemplatesResult.resourceTemplates.length} templates`
215217
);
216218
}
@@ -245,12 +247,14 @@ export class NostrAnnouncer {
245247
});
246248

247249
await this.relayHandler.publishEvent(event);
248-
loggerBridge('Prompts list announced');
250+
loggerBridge.info('Prompts list announced');
249251
}
250252

251253
async announce() {
252254
if (this.isPrivateServer) {
253-
loggerBridge('Private server: Skipping public updates to announcement.');
255+
loggerBridge.info(
256+
'Private server: Skipping public updates to announcement.'
257+
);
254258
return;
255259
}
256260
const serverInfo = await this.announceServer();
@@ -328,7 +332,7 @@ export class NostrAnnouncer {
328332
): Promise<Event[]> {
329333
const mainClient = this.mcpPool.getDefaultClient();
330334
if (!mainClient) {
331-
loggerBridge('No MCP server client available for deletion.');
335+
loggerBridge.warn('No MCP server client available for deletion.');
332336
return [];
333337
}
334338

@@ -361,7 +365,9 @@ export class NostrAnnouncer {
361365
});
362366

363367
await this.relayHandler.publishEvent(deletionEvent);
364-
loggerBridge(`Published deletion event for kind ${kind} (serverId tag)`);
368+
loggerBridge.info(
369+
`Published deletion event for kind ${kind} (serverId tag)`
370+
);
365371
allDeletionEvents.push(deletionEvent);
366372
}
367373

packages/dvmcp-bridge/src/dvm-bridge.ts

Lines changed: 34 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ export class DVMBridge {
5858
) {
5959
this.relayHandler =
6060
relayHandler ?? new RelayHandler(config.nostr.relayUrls);
61-
loggerBridge('Initializing DVM Bridge...');
61+
loggerBridge.info('Initializing DVM Bridge...');
6262
this.mcpPool = new MCPPool(config);
6363

6464
this.keyManager = createKeyManager(config.nostr.privateKey);
@@ -71,17 +71,17 @@ export class DVMBridge {
7171
);
7272

7373
if (this.config.mcp.serverId) {
74-
loggerBridge(`Using custom server ID from config: ${this.serverId}`);
74+
loggerBridge.info(`Using custom server ID from config: ${this.serverId}`);
7575
}
7676

7777
// Initialize encryption manager if encryption is configured
7878
if (this.config.encryption) {
7979
this.encryptionManager = new EncryptionManager(this.config.encryption);
80-
loggerBridge(
80+
loggerBridge.info(
8181
`Encryption support enabled (${this.config.encryption.mode || 'optional'} mode)`
8282
);
8383
} else {
84-
loggerBridge('Encryption support disabled');
84+
loggerBridge.info('Encryption support disabled');
8585
}
8686

8787
// Initialize centralized event publisher
@@ -100,8 +100,8 @@ export class DVMBridge {
100100
config.mcp.isPrivateServer || false
101101
);
102102

103-
loggerBridge('Public key:', publicKey);
104-
loggerBridge('Server id:', this.serverId);
103+
loggerBridge.info('Public key:', publicKey);
104+
loggerBridge.info('Server id:', this.serverId);
105105
}
106106

107107
private isWhitelisted(pubkey: string): boolean {
@@ -112,32 +112,34 @@ export class DVMBridge {
112112

113113
async start() {
114114
if (this.isRunning) {
115-
loggerBridge('Bridge is already running');
115+
loggerBridge.warn('Bridge is already running');
116116
return;
117117
}
118118

119119
try {
120-
loggerBridge('Connecting to MCP servers...');
120+
loggerBridge.info('Connecting to MCP servers...');
121121
await this.mcpPool.connect();
122122

123123
const tools = await this.mcpPool.listTools();
124-
loggerBridge(`Available MCP tools across all servers: ${tools.length}`);
124+
loggerBridge.info(
125+
`Available MCP tools across all servers: ${tools.length}`
126+
);
125127

126128
if (!this.config.mcp.isPrivateServer) {
127-
loggerBridge('Announcing service to Nostr network...');
129+
loggerBridge.info('Announcing service to Nostr network...');
128130
try {
129131
await this.nostrAnnouncer.announce();
130132
} catch (error) {
131133
console.warn('Failed to announce service to Nostr network:', error);
132-
loggerBridge(
134+
loggerBridge.warn(
133135
'⚠️ Warning: Failed to announce service to Nostr network. The bridge will still function, but will not be discoverable via Nostr.'
134136
);
135137
}
136138
} else {
137-
loggerBridge('Private server mode: Skipping public announcement.');
139+
loggerBridge.info('Private server mode: Skipping public announcement.');
138140
}
139141

140-
loggerBridge('Setting up request handlers...');
142+
loggerBridge.info('Setting up request handlers...');
141143
const publicKey = this.keyManager.getPublicKey();
142144
const subscribe = () => {
143145
// Subscribe to both regular and encrypted events
@@ -156,18 +158,22 @@ export class DVMBridge {
156158
try {
157159
subscribe();
158160
} catch (error) {
159-
loggerBridge(
161+
loggerBridge.warn(
160162
'⚠️ Warning: Failed to subscribe to Nostr requests. Will retry on relay reconnection.'
161163
);
162164
}
163165

164166
this.relayHandler.onRelayReconnected((url) => {
165-
loggerBridge(`Relay reconnected: ${url}, re-subscribing to requests`);
167+
loggerBridge.info(
168+
`Relay reconnected: ${url}, re-subscribing to requests`
169+
);
166170
subscribe();
167171
});
168172

169173
this.isRunning = true;
170-
loggerBridge('DVM Bridge is now running and ready to handle requests');
174+
loggerBridge.info(
175+
'DVM Bridge is now running and ready to handle requests'
176+
);
171177
} catch (error) {
172178
console.error('Failed to start DVM Bridge:', error);
173179
throw error;
@@ -179,24 +185,24 @@ export class DVMBridge {
179185
return;
180186
}
181187

182-
loggerBridge('Stopping DVM Bridge...');
188+
loggerBridge.info('Stopping DVM Bridge...');
183189
try {
184190
await this.mcpPool.disconnect();
185191
this.relayHandler.cleanup();
186192
this.isRunning = false;
187-
loggerBridge('DVM Bridge stopped successfully');
193+
loggerBridge.info('DVM Bridge stopped successfully');
188194
} catch (error) {
189195
console.error('Error stopping DVM Bridge:', error);
190196
throw error;
191197
}
192198
}
193199

194200
async deleteAnnouncement(reason?: string) {
195-
loggerBridge('Deleting service announcement from relays...');
201+
loggerBridge.info('Deleting service announcement from relays...');
196202
try {
197203
const deletionEvent =
198204
await this.nostrAnnouncer.deleteAnnouncement(reason);
199-
loggerBridge('Service announcement deleted successfully');
205+
loggerBridge.info('Service announcement deleted successfully');
200206
return deletionEvent;
201207
} catch (error) {
202208
console.error('Error deleting service announcement:', error);
@@ -234,7 +240,7 @@ export class DVMBridge {
234240
realSenderPubkey: decryptionResult.sender,
235241
};
236242
} catch (error) {
237-
loggerBridge('Error in decryptEventAndExtractSender:', error);
243+
loggerBridge.error('Error in decryptEventAndExtractSender:', error);
238244
return null;
239245
}
240246
}
@@ -246,20 +252,20 @@ export class DVMBridge {
246252
event.kind === GIFT_WRAP_KIND &&
247253
this.encryptionManager?.isEncryptionEnabled()
248254
) {
249-
loggerBridge('Received encrypted event, attempting to decrypt...');
255+
loggerBridge.info('Received encrypted event, attempting to decrypt...');
250256

251257
// Try to decrypt the event and extract the real sender's pubkey
252258
const decryptionResult = await this.decryptEventAndExtractSender(event);
253259

254260
if (!decryptionResult) {
255-
loggerBridge(
261+
loggerBridge.debug(
256262
'Failed to decrypt event - may not be intended for this server'
257263
);
258264
return;
259265
}
260266

261267
// Process the decrypted event with the real sender's pubkey
262-
loggerBridge('Successfully decrypted event, processing...');
268+
loggerBridge.info('Successfully decrypted event, processing...');
263269
// Construct a NostrEvent from the decrypted template and real sender pubkey
264270
// The ID should be computed from the inner event content, not the gift wrap
265271
const innerEventId = getEventHash({
@@ -324,7 +330,7 @@ export class DVMBridge {
324330
const serverIdentifier =
325331
tags.find((tag) => tag[0] === TAG_SERVER_IDENTIFIER)?.[1] || '';
326332

327-
loggerBridge(
333+
loggerBridge.info(
328334
`Processing encrypted request from real sender: ${realSenderPubkey}`
329335
);
330336
await this.processRequest(
@@ -490,7 +496,7 @@ export class DVMBridge {
490496
break;
491497
case MCPMETHODS.notificationsInitialized:
492498
// Do nothing yet
493-
loggerBridge(`Received ${method} from ${pubkey}`);
499+
loggerBridge.info(`Received ${method} from ${pubkey}`);
494500
break;
495501
default:
496502
const notImpl = this.keyManager.signEvent({
@@ -527,10 +533,10 @@ export class DVMBridge {
527533
responseContext
528534
);
529535
} else {
530-
loggerBridge(`Received unhandled notification type: ${method}`);
536+
loggerBridge.warn(`Received unhandled notification type: ${method}`);
531537
}
532538
} else {
533-
loggerBridge(`Received unhandled event kind: ${kind}`);
539+
loggerBridge.warn(`Received unhandled event kind: ${kind}`);
534540
}
535541
} catch (error) {
536542
console.error('Error processing request:', error);

packages/dvmcp-bridge/src/handlers/completion-handlers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ export async function handleCompletionComplete(
5151
);
5252
await publisher.publishResponse(response, responseContext);
5353
} catch (error) {
54-
loggerBridge('[handleCompletionComplete] Error:', error);
54+
loggerBridge.error('[handleCompletionComplete] Error:', error);
5555
return undefined;
5656
}
5757
}

packages/dvmcp-bridge/src/handlers/initialize-handlers.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export async function handleInitialize(
4242
config: DvmcpBridgeConfig,
4343
actualServerId: string
4444
): Promise<void> {
45-
loggerBridge(`Handling MCP Method: ${MCPMETHODS.initialize}`);
45+
loggerBridge.info(`Handling MCP Method: ${MCPMETHODS.initialize}`);
4646

4747
const eventTags = event.tags;
4848
const eventId = event.id;
@@ -56,7 +56,7 @@ export async function handleInitialize(
5656

5757
// If a specific server ID was requested and it does not match this bridge's server ID do not respond
5858
if (requestedServerId && requestedServerId !== actualServerId) {
59-
loggerBridge(
59+
loggerBridge.debug(
6060
`Initialize request for server ID '${requestedServerId}' does not match ` +
6161
`this bridge's server ID '${actualServerId}'. Not responding.`
6262
);
@@ -65,7 +65,7 @@ export async function handleInitialize(
6565

6666
const mainClient = mcpPool.getDefaultClient();
6767
if (!mainClient) {
68-
loggerBridge(
68+
loggerBridge.error(
6969
'No MCP server client available to handle initialize request.'
7070
);
7171
// Respond with an error if no MCP client is available
@@ -138,5 +138,5 @@ export async function handleInitialize(
138138
senderPubkey,
139139
responseContext.shouldEncrypt
140140
);
141-
loggerBridge(`Sent initialize response to ${senderPubkey}`);
141+
loggerBridge.info(`Sent initialize response to ${senderPubkey}`);
142142
}

packages/dvmcp-bridge/src/handlers/notification-handlers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export async function handleNotificationsCancel(
2626
const eventIdToCancel = tags.find((tag) => tag[0] === TAG_EVENT_ID)?.[1];
2727

2828
if (eventIdToCancel) {
29-
loggerBridge(`Received cancel request for job: ${eventIdToCancel}`);
29+
loggerBridge.info(`Received cancel request for job: ${eventIdToCancel}`);
3030

3131
// Send cancellation acknowledgment using centralized event publisher
3232
const eventPublisher = new EventPublisher(
@@ -50,6 +50,6 @@ export async function handleNotificationsCancel(
5050
responseContext?.shouldEncrypt || false
5151
);
5252
} else {
53-
loggerBridge('Received cancel notification without event ID');
53+
loggerBridge.warn('Received cancel notification without event ID');
5454
}
5555
}

0 commit comments

Comments
 (0)