@@ -6,11 +6,13 @@ import {
66 NOTIFICATION_KIND ,
77 GIFT_WRAP_KIND ,
88 TAG_PUBKEY ,
9+ loggerDiscovery ,
910} from '@dvmcp/commons/core' ;
1011import type { RelayHandler } from '@dvmcp/commons/nostr' ;
1112import type { KeyManager } from '@dvmcp/commons/nostr' ;
1213import type { NWCPaymentHandler } from './nwc-payment' ;
1314import { type EncryptionManager } from '@dvmcp/commons/encryption' ;
15+ import type { ServerRegistry } from './server-registry' ; // Import ServerRegistry type
1416
1517export abstract class BaseExecutor < T extends Capability , P , R > {
1618 protected executionSubscriptions : Map < string , ( ) => void > = new Map ( ) ;
@@ -22,6 +24,7 @@ export abstract class BaseExecutor<T extends Capability, P, R> {
2224 protected relayHandler : RelayHandler ,
2325 protected keyManager : KeyManager ,
2426 protected registry : BaseRegistry < T > ,
27+ protected serverRegistry : ServerRegistry , // Add ServerRegistry to constructor
2528 encryptionManager ?: EncryptionManager | null
2629 ) {
2730 this . encryptionManager = encryptionManager || null ;
@@ -153,27 +156,39 @@ export abstract class BaseExecutor<T extends Capability, P, R> {
153156 const recipientPubkey = request . tags . find (
154157 ( tag ) => tag [ 0 ] === TAG_PUBKEY
155158 ) ?. [ 1 ] ;
159+
156160 if ( recipientPubkey ) {
157- try {
158- const encryptedEvent =
159- await this . encryptionManager . encryptMessage (
160- this . keyManager . getPrivateKey ( ) ,
161- recipientPubkey ,
162- {
163- kind : request . kind ,
164- content : request . content ,
165- tags : request . tags ,
166- created_at : request . created_at ,
167- }
161+ const serverInfo =
162+ this . serverRegistry . getServerByPubkey ( recipientPubkey ) ;
163+
164+ // Check if the recipient server supports encryption
165+ if ( serverInfo ?. supportsEncryption ) {
166+ try {
167+ const encryptedEvent =
168+ await this . encryptionManager . encryptMessage (
169+ this . keyManager . getPrivateKey ( ) ,
170+ recipientPubkey ,
171+ {
172+ kind : request . kind ,
173+ content : request . content ,
174+ tags : request . tags ,
175+ created_at : request . created_at ,
176+ }
177+ ) ;
178+ if ( encryptedEvent ) {
179+ eventToPublish = encryptedEvent ;
180+ }
181+ } catch ( encryptError ) {
182+ // If encryption fails, send the original unencrypted request
183+ console . warn (
184+ 'Failed to encrypt request, sending unencrypted:' ,
185+ encryptError
168186 ) ;
169- if ( encryptedEvent ) {
170- eventToPublish = encryptedEvent ;
171187 }
172- } catch ( encryptError ) {
173- // If encryption fails, send the original unencrypted request
174- console . warn (
175- 'Failed to encrypt request, sending unencrypted:' ,
176- encryptError
188+ } else {
189+ // If server does not support encryption, send unencrypted
190+ loggerDiscovery (
191+ `Recipient server ${ recipientPubkey } does not support encryption or encryption mode disabled. Sending unencrypted.`
177192 ) ;
178193 }
179194 }
0 commit comments