import axios from 'axios'; import { Platform } from 'react-native'; import AppInfo from '../utils/AppInfo'; import type { EventToContinueEvent, RequestDownloadEvent } from '../messages/webMessages/unitComponentsMessages'; import { UnitComponentsSDK } from '../unitComponentsSdkManager/UnitComponentsSdkManager'; import WebView from 'react-native-webview'; import RNShareFile from '../nativeModulesHelpers/RNShareFile/RNShareFile'; export const getInfoParams = async () => { const appVersion = await AppInfo.getVersion(); const appBuildNumber = await AppInfo.getBuildNumber(); const appIdentifier = await AppInfo.getAppIdentifier(); const infoParams: { [key: string]: string } = {}; infoParams['sdkVersion'] = UnitComponentsSDK.getSdkVersion(); infoParams['sdkPlatform'] = 'React Native'; infoParams['os'] = Platform.OS == 'android' ? 'Android' : 'iOS'; infoParams['hostedAppVersion'] = appVersion; infoParams['hostedAppBuildNumber'] = appBuildNumber; infoParams['hostedAppIdentifier'] = appIdentifier; return infoParams; }; export interface DownloadResult { url: string; error?: string; } const SUPPORTED_DOWNLOAD_TYPES = ['application/pdf', 'text/csv']; export const handleRequestDownload = async (details: RequestDownloadEvent): Promise => { if (!SUPPORTED_DOWNLOAD_TYPES.includes(details.fileType)) { return { url: details.url, error: `Unsupported file type: ${details.fileType}` }; } try { const res = await axios.get(details.url, { headers: { 'Accept': details.fileType, 'Authorization': `Bearer ${details.accessToken}` }, responseEncoding: 'base64', responseType: 'arraybuffer' }); const base64Data = res.request._response; await RNShareFile.share(base64Data, details.fileName); return { url: details.url }; } catch (error: any) { return { url: details.url, error: error?.message || 'Download failed' }; } }; export const injectEventToContinue = (currentWeb: WebView | null, eventToContinueEvent: EventToContinueEvent) => { currentWeb?.injectJavaScript(`dispatchEventToContinue('${JSON.stringify(eventToContinueEvent)}')`); };