import { Apps } from '@aimee-blue/ab-contracts'; import { from, empty } from 'rxjs'; import { mergeMap, catchError, ignoreElements } from 'rxjs/operators'; import { ofType } from '../ofType'; import { appName, appVersion } from '../app'; import { appsLogError } from '../apps'; import { isDevBuild } from '../isTest'; import { BackgroundEpic } from '../kit'; const reportError = async (errorAction: Apps.IErrorAction) => { const [source, version] = await Promise.all([appName(), appVersion()]); return appsLogError({ error: errorAction.payload, source, version, }); }; export const reportErrorsToCloud: BackgroundEpic = (events, ctx) => { if (isDevBuild()) { return empty(); } return events.pipe( ofType(Apps.ERROR), mergeMap(errorAction => from(reportError(errorAction)).pipe( catchError(err => { ctx.logger.error('💥 Couldnt send error to Cloud', err); return empty(); }) ) ), ignoreElements() ); };