import { StackFrame } from 'react-native/Libraries/Core/Devtools/parseErrorStack'; import Logger from '../core/logging/logger'; import { ErrorAnalysisModule } from '../core/nativeModules'; import { getSourcemapId, getStackTrace } from './helpers'; interface JavascriptError { appInfo: { jsVersion?: string; }; exception: { type: string; description: string; frames: StackFrame[]; }; timestamp: number; mappingFileId?: string; } /** * Reports an error to the native module. */ export const reportError = async (error: Error): Promise => { const frames: StackFrame[] = getStackTrace(error).map( (frame: StackFrame, index: number) => ({ ...frame, frameId: index, }) ); const mappingFileId = getSourcemapId(); // Get the sourcemap ID const jsError: JavascriptError = { appInfo: { jsVersion: undefined, // TODO: add the JS version value which client can set from the app. }, exception: { type: error.constructor.name, description: error.message, frames, }, timestamp: Date.now(), mappingFileId, }; try { await ErrorAnalysisModule.reportJavascriptError(jsError); Logger.info('Success reporting javascript error to native module.'); } catch (e: unknown) { Logger.error( `Failed to report javascript error to native module: ${ e instanceof Error ? e.message : 'Unknown error occurred' }.` ); } };