MCPcopy Create free account
hub / github.com/cameri/nostream / EventMessageHandler

Class EventMessageHandler

src/handlers/event-message-handler.ts:43–484  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41const logger = createLogger('event-message-handler')
42
43export class EventMessageHandler implements IMessageHandler {
44 public constructor(
45 protected readonly webSocket: IWebSocketAdapter,
46 protected readonly strategyFactory: Factory<IEventStrategy<Event, Promise<void>>, [Event, IWebSocketAdapter]>,
47 protected readonly eventRepository: IEventRepository,
48 protected readonly userRepository: IUserRepository,
49 private readonly settings: () => Settings,
50 private readonly nip05VerificationRepository: INip05VerificationRepository,
51 private readonly cache: ICacheAdapter,
52 private readonly rateLimiter: Factory<IRateLimiter>,
53 ) {}
54
55 public async handleMessage(message: IncomingEventMessage): Promise<void> {
56 let [, event] = message
57
58 event[ContextMetadataKey] = message[ContextMetadataKey]
59
60 let reason = await this.isEventValid(event)
61 if (reason) {
62 logger('event %s rejected: %s', event.id, reason)
63 this.webSocket.emit(WebSocketAdapterEvent.Message, createCommandResult(event.id, false, reason))
64 return
65 }
66
67 if (isExpiredEvent(event)) {
68 logger('event %s rejected: expired')
69 this.webSocket.emit(WebSocketAdapterEvent.Message, createCommandResult(event.id, false, 'event is expired'))
70 return
71 }
72
73 event = this.addExpirationMetadata(event)
74
75 if (await this.isRateLimited(event)) {
76 logger('event %s rejected: rate-limited')
77 this.webSocket.emit(
78 WebSocketAdapterEvent.Message,
79 createCommandResult(event.id, false, 'rate-limited: slow down'),
80 )
81 return
82 }
83
84 reason = this.canAcceptEvent(event)
85 if (reason) {
86 logger('event %s rejected: %s', event.id, reason)
87 this.webSocket.emit(WebSocketAdapterEvent.Message, createCommandResult(event.id, false, reason))
88 return
89 }
90
91 reason = await this.isBlockedByRequestToVanish(event)
92 if (reason) {
93 logger('event %s rejected: %s', event.id, reason)
94 this.webSocket.emit(WebSocketAdapterEvent.Message, createCommandResult(event.id, false, reason))
95 return
96 }
97
98 reason = await this.isUserAdmitted(event)
99 if (reason) {
100 logger('event %s rejected: %s', event.id, reason)

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected