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 }