/ src / queue / saveEventProcessingJob.ts
saveEventProcessingJob.ts
 1  import { assertEventSignature } from '../utils/assert';
 2  import eventProcessingQueue from './queue';
 3  import type { EventSignature } from '../events/types';
 4  import type EventHandlerRequest from '../events/EventHandlerRequest';
 5  
 6  export default async function saveEventProcessingJob<T extends EventSignature>(
 7    request: EventHandlerRequest<T>,
 8  ) {
 9    const {
10      blockNumber,
11      transactionHash,
12      blockTimestamp,
13      logIndex,
14      args,
15      eventSignature,
16    } = request.event;
17  
18    assertEventSignature<T>(eventSignature, eventSignature);
19  
20    return eventProcessingQueue
21      .createJob({
22        eventSignature,
23        transactionHash,
24        blockNumber,
25        logIndex,
26        blockTimestamp,
27        args: JSON.stringify(args, (_, value) => {
28          if (typeof value === 'bigint') {
29            return value.toString();
30          }
31          return value;
32        }),
33      })
34      .setId(request.id)
35      .retries(20)
36      .backoff('fixed', 30000)
37      .save();
38  }