1+ import type { DidResolver } from '../../../index.js' ;
2+ import type { EventLog } from '../../../event-log/event-log.js' ;
3+ import type { GetEventsOptions } from '../../../event-log/event-log.js' ;
4+ import type { MethodHandler } from '../../types.js' ;
5+ import type { EventsGetMessage , EventsGetReply } from '../types.js' ;
6+
7+ import { EventsGet } from '../messages/events-get.js' ;
8+ import { MessageReply } from '../../../core/message-reply.js' ;
9+ import { authenticate , authorize } from '../../../core/auth.js' ;
10+
11+ type HandleArgs = { tenant : string , message : EventsGetMessage } ;
12+
13+ export class EventsGetHandler implements MethodHandler {
14+ constructor ( private didResolver : DidResolver , private eventLog : EventLog ) { }
15+
16+ public async handle ( { tenant, message } : HandleArgs ) : Promise < EventsGetReply > {
17+ let eventsGet : EventsGet ;
18+
19+ try {
20+ eventsGet = await EventsGet . parse ( message ) ;
21+ } catch ( e ) {
22+ return MessageReply . fromError ( e , 400 ) ;
23+ }
24+
25+ try {
26+ await authenticate ( message . authorization , this . didResolver ) ;
27+ await authorize ( tenant , eventsGet ) ;
28+ } catch ( e ) {
29+ return MessageReply . fromError ( e , 401 ) ;
30+ }
31+
32+ // if watermark was provided in message, get all events _after_ the watermark.
33+ // Otherwise, get all events.
34+ let options : GetEventsOptions | undefined ;
35+ if ( message . descriptor . watermark ) {
36+ options = { gt : message . descriptor . watermark } ;
37+ }
38+
39+ const events = await this . eventLog . getEvents ( tenant , options ) ;
40+
41+ return {
42+ status : { code : 200 , detail : 'OK' } ,
43+ events
44+ } ;
45+ }
46+ }
0 commit comments