UNPKG

@datadog/mobile-react-native-code-push

Version:

A client-side React Native module to interact with Appcenter Codepush and Datadog

110 lines (102 loc) 4.36 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 { DatadogProvider, DatadogProviderConfiguration, DdSdkReactNative } from '@datadog/mobile-react-native'; import type { AutoInstrumentationConfiguration, CoreConfiguration } from '@datadog/mobile-react-native'; import codePush from 'react-native-code-push'; import { removeDiscardProperties } from './utils'; import type { RequiredOrDiscard } from './utils'; /** * Use this class instead of DdSdkReactNative to initialize the Datadog SDK when using AppCenter CodePush. */ export const DatadogCodepush = { async initialize(configuration: CoreConfiguration): Promise<void> { const codePushUpdateMetadata = await codePush.getUpdateMetadata(); if (codePushUpdateMetadata) { configuration.versionSuffix = `codepush.${codePushUpdateMetadata.label}`; } return DdSdkReactNative.initialize(configuration); } }; const initializeWithCodepushVersion = async ( configuration: DatadogProviderConfiguration ) => { const codePushUpdateMetadata = await codePush.getUpdateMetadata(); if (codePushUpdateMetadata) { configuration.versionSuffix = `codepush.${codePushUpdateMetadata.label}`; } DatadogProvider.initialize(configuration); }; const buildPartialConfiguration = ( configuration: DatadogProviderConfiguration ): AutoInstrumentationConfiguration => { const partialConfiguration: RequiredOrDiscard<AutoInstrumentationConfiguration> = { rumConfiguration: { firstPartyHosts: configuration.rumConfiguration?.firstPartyHosts, useAccessibilityLabel: configuration.rumConfiguration?.useAccessibilityLabel ?? true, actionNameAttribute: configuration.rumConfiguration?.actionNameAttribute, trackErrors: configuration.rumConfiguration?.trackErrors ?? false, trackResources: configuration.rumConfiguration?.trackResources ?? false, trackInteractions: configuration.rumConfiguration?.trackInteractions ?? false, resourceTraceSampleRate: configuration.rumConfiguration?.resourceTraceSampleRate ?? 100, nativeCrashReportEnabled: configuration.rumConfiguration?.nativeCrashReportEnabled ?? false, nativeLongTaskThresholdMs: configuration.rumConfiguration?.nativeLongTaskThresholdMs ?? 200, nativeViewTracking: configuration.rumConfiguration?.nativeViewTracking ?? false, errorEventMapper: configuration.rumConfiguration?.errorEventMapper ?? null, resourceEventMapper: configuration.rumConfiguration?.resourceEventMapper ?? null, actionEventMapper: configuration.rumConfiguration?.actionEventMapper ?? null }, logsConfiguration: { logEventMapper: configuration.logsConfiguration?.logEventMapper ?? null } }; return removeDiscardProperties( partialConfiguration ) as AutoInstrumentationConfiguration; }; export const DatadogCodepushProvider: typeof DatadogProvider = ({ configuration, ...rest }) => { // We cannot use SYNC or ASYNC initialization modes as we need to asynchronously get the CodePush version. // We turn it to partial initialization, while in parallel we get the CodePush version and initialize the SDK. if (configuration instanceof DatadogProviderConfiguration) { initializeWithCodepushVersion(configuration); return DatadogProvider({ configuration: buildPartialConfiguration(configuration), ...rest }); } else { return DatadogProvider({ configuration, ...rest }); } }; DatadogCodepushProvider.initialize = async configuration => { const codePushUpdateMetadata = await codePush.getUpdateMetadata(); if (codePushUpdateMetadata) { configuration.versionSuffix = `codepush.${codePushUpdateMetadata.label}`; } DatadogProvider.initialize(configuration); };