UNPKG

@datadog/mobile-react-native

Version:

A client-side React Native module to interact with Datadog

51 lines 2.22 kB
/* * Unless explicitly stated otherwise all files in this repository are licensed under the Apache License Version 2.0. * This product includes software developed at Datadog (https://www.datadoghq.com/). * Copyright 2016-Present Datadog, Inc. */ import { InternalLog } from '../../InternalLog'; import { SdkVerbosity } from '../../SdkVerbosity'; import { setCachedSessionId } from '../../rum/sessionId/sessionIdHelper'; import { DatadogDefaultEventEmitter } from '../DatadogEventEmitter/DatadogDefaultEventEmitter'; import { DdSdkInternalNativeBridgeEvent as BridgeEvent } from './DdSdkInternalNativeBridgeEvent'; const DEFAULT_EVENTS = [new BridgeEvent('RUMSessionStarted', sessionId => { setCachedSessionId(sessionId); })]; const defaultErrorHandler = err => { InternalLog.log(err, SdkVerbosity.DEBUG); }; export class DdSdkInternalNativeBridge { _isInitialized = false; static get isInitialized() { return this._instance?._isInitialized ?? false; } static initialize(eventEmitter, errorHandler = defaultErrorHandler) { this._instance = new DdSdkInternalNativeBridge(eventEmitter, errorHandler); this._instance._isInitialized = eventEmitter.initialize() && this._instance.registerDefaultListeners(); return this._instance; } constructor(eventEmitter, errorHandler) { this.eventEmitter = eventEmitter; this.errorHandler = errorHandler; } registerDefaultListeners() { try { DEFAULT_EVENTS.forEach(event => { this.eventEmitter.addListener(event.eventName, event.callback); }); return true; } catch (err) { this.errorHandler(`An error occured while registering default listeners for event emitter: ${err}`); return false; } } } export const registerNativeBridge = (eventEmitter, errorHandler = defaultErrorHandler) => { const nativeEventEmitter = eventEmitter ?? new DatadogDefaultEventEmitter(errorHandler); DdSdkInternalNativeBridge.initialize(nativeEventEmitter); if (!DdSdkInternalNativeBridge.isInitialized) { errorHandler('ERROR: Native Bridge initialization failed.'); } }; export const hasNativeBridge = () => DdSdkInternalNativeBridge.isInitialized; //# sourceMappingURL=DdSdkInternalNativeBridge.js.map