@datadog/mobile-react-native
Version:
A client-side React Native module to interact with Datadog
51 lines • 2.22 kB
JavaScript
/*
* 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