UNPKG

@embrace-io/react-native-tracer-provider

Version:

A React Native for the Embrace SDK that conforms to the OpenTelemetry TracerProvider interface

68 lines (67 loc) 2.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useEmbraceNativeTracerProvider = void 0; const react_native_1 = require("react-native"); const react_1 = require("react"); const util_1 = require("./util"); const EmbraceNativeTracerProvider_1 = require("./EmbraceNativeTracerProvider"); /** * useEmbraceNativeTracerProvider makes sure that the Embrace SDK has been installed and started and * then sets up a EmbraceNativeTracerProvider * * The EmbraceNativeTracerProvider implements a TracerProvider over the native Embrace Android and iOS SDKs. * Thin wrapped objects representing Tracers and Spans are maintained at the JS level and use Native Modules to * call down to the SDKs to perform the actual operations on them. * * The JS side of its implementation is modelled after [opentelemetry-sdk-trace-base](https://github.com/open-telemetry/opentelemetry-js/tree/main/packages/opentelemetry-sdk-trace-base) */ const useEmbraceNativeTracerProvider = (config, enabled = true) => { const [isLoading, setIsLoading] = (0, react_1.useState)(true); const [isError, setIsError] = (0, react_1.useState)(false); const [error, setError] = (0, react_1.useState)(""); const [tracerProvider, setTracerProvider] = (0, react_1.useState)(null); const [tracer, setTracer] = (0, react_1.useState)(null); (0, react_1.useEffect)(() => { if (error) { (0, util_1.logWarning)(error); } }, [error]); (0, react_1.useEffect)(() => { if (!enabled) { return; } if (!react_native_1.NativeModules.EmbraceManager) { setError("You must have the Embrace SDK available to use the TracerProvider, please install `@embrace-io/react-native`."); setIsError(true); setIsLoading(false); return; } if (isLoading) { react_native_1.NativeModules.EmbraceManager.isStarted() .then((started) => { if (!started) { setError("The Embrace SDK must be started to use the TracerProvider, please invoke `initialize` from `@embrace-io/react-native`."); setIsError(true); } else if (!tracerProvider) { const provider = new EmbraceNativeTracerProvider_1.EmbraceNativeTracerProvider(config); setTracerProvider(provider); setTracer(provider.getTracer("embrace-default-tracer")); } }) .catch(() => { setError("Failed to setup EmbraceNativeTracerProvider"); setIsError(true); }) .finally(() => setIsLoading(false)); } }, [isLoading, config, enabled, tracerProvider]); return { isLoading, isError, error, tracerProvider, tracer, }; }; exports.useEmbraceNativeTracerProvider = useEmbraceNativeTracerProvider;