bugsnag/bugsnag-js

View on GitHub
packages/react-native/src/NativeBugsnag.ts

Summary

Maintainability
A
0 mins
Test Coverage
import type { TurboModule } from 'react-native/Libraries/TurboModule/RCTExport'
import type { UnsafeObject } from 'react-native/Libraries/Types/CodegenTypes'
import { TurboModuleRegistry } from 'react-native'

export interface Spec extends TurboModule {
  configureAsync(configuration: ReactNativeConfiguration): Promise<NativeConfiguration>

  configure(configuration: ReactNativeConfiguration): NativeConfiguration

  updateCodeBundleId(id: string | undefined | null): void

  leaveBreadcrumb(breadcrumb: NativeBreadcrumb): void

  startSession(): void

  pauseSession(): void

  resumeSession(): void

  resumeSessionOnStartup(): void

  updateContext(context: string | undefined | null): void

  addMetadata(section: string, metadata?: UnsafeObject): void

  clearMetadata(section: string, key?: string): void

  updateUser(id: string | undefined | null, email: string | undefined | null, name: string | undefined | null): void

  dispatch(payload: UnsafeObject): boolean

  dispatchAsync(payload: UnsafeObject): Promise<boolean>

  getPayloadInfo(payload: UnsafeObject): Object

  getPayloadInfoAsync(payload: UnsafeObject): Promise<unknown>

  addFeatureFlag(name: string, variant: string | undefined | null): void

  addFeatureFlags(featureFlags: NativeFeatureFlag[]): void

  clearFeatureFlag(name: string): void

  clearFeatureFlags(): void
}

// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type ReactNativeConfiguration = {
  reactNativeVersion?: string
  engine?: string
  notifierVersion: string
}

// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type NativeConfiguration = {
  apiKey: string
  autoDetectErrors?: boolean
  autoTrackSessions?: boolean
  sendThreads?: string
  discardClasses?: string[]
  projectPackages?: string[]
  enabledReleaseStages?: string[]
  releaseStage?: string
  buildUuid?: string
  appVersion?: string
  versionCode?: number // Android only
  type?: string
  persistUser: boolean
  launchCrashThresholdMs: number
  maxBreadcrumbs: number
  enabledBreadcrumbTypes: string[]
  enabledErrorTypes: NativeEnabledErrorTypes
  endpoints: NativeEndpointConfig
}

// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type NativeBreadcrumb = {
  timestamp: string
  message: string
  type: string
  metadata?: UnsafeObject
}

// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type NativeEndpointConfig = {
  notify: string
  sessions: string
}

// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type NativeEnabledErrorTypes = {
  anrs?: boolean
  ndkCrashes?: boolean
  unhandledExceptions?: boolean
  unhandledRejections?: boolean
}

// eslint-disable-next-line @typescript-eslint/consistent-type-definitions
export type NativeFeatureFlag = {
  name: string
  variant?: string
}

export default TurboModuleRegistry.get<Spec>('BugsnagReactNative')