2023-01-30 12:38:42 +01:00
|
|
|
import { asyncLocalStorage as l, LoggableError } from './logger'
|
2022-11-29 22:51:28 +01:00
|
|
|
import { Reservation } from './reservation'
|
2023-01-30 12:38:42 +01:00
|
|
|
import { Runner } from './runner'
|
2022-11-29 22:51:28 +01:00
|
|
|
|
|
|
|
|
let runner: Runner | undefined
|
|
|
|
|
const getRunner = () => {
|
|
|
|
|
if (!runner) {
|
2023-01-20 15:31:04 +01:00
|
|
|
runner = new Runner({
|
|
|
|
|
headless: true,
|
|
|
|
|
args: ['--no-sandbox', '--disable-setuid-sandbox'],
|
|
|
|
|
})
|
2022-11-29 22:51:28 +01:00
|
|
|
}
|
|
|
|
|
return runner
|
|
|
|
|
}
|
|
|
|
|
|
2023-01-29 14:34:39 +01:00
|
|
|
export const reserve = async (reservation?: Reservation): Promise<boolean> => {
|
2022-11-29 22:51:28 +01:00
|
|
|
let reservationToPerform = reservation
|
|
|
|
|
if (!reservationToPerform) {
|
2023-01-29 14:34:39 +01:00
|
|
|
l.getStore()?.debug('No reservation provided, fetching first in database')
|
2022-11-29 22:51:28 +01:00
|
|
|
reservationToPerform = (await Reservation.fetchFirst()) || undefined
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!reservationToPerform) {
|
2023-01-29 14:34:39 +01:00
|
|
|
l.getStore()?.info('No reservation to perform')
|
|
|
|
|
return true
|
2022-11-29 22:51:28 +01:00
|
|
|
}
|
2023-01-30 12:38:42 +01:00
|
|
|
|
|
|
|
|
l.getStore()?.debug('Trying to perform reservation', { reservationToPerform: reservationToPerform.toString(true) })
|
2022-11-29 22:51:28 +01:00
|
|
|
const runner = getRunner()
|
2023-01-29 14:34:39 +01:00
|
|
|
try {
|
|
|
|
|
await runner.run(reservationToPerform)
|
2023-01-30 12:38:42 +01:00
|
|
|
await reservationToPerform.delete()
|
2023-01-29 14:34:39 +01:00
|
|
|
return true
|
|
|
|
|
} catch (error) {
|
2023-01-30 12:38:42 +01:00
|
|
|
l.getStore()?.error('Failed to perform reservation', {
|
|
|
|
|
error: (error as LoggableError).toString(),
|
|
|
|
|
})
|
2023-01-29 14:34:39 +01:00
|
|
|
return false
|
|
|
|
|
}
|
2022-11-29 22:51:28 +01:00
|
|
|
}
|