@adminide-stack/yantra-mobile 12.0.44-alpha.7 → 12.0.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/bridge/handlers/NavigationBridgeHandler.js +3 -1
- package/lib/bridge/handlers/NavigationBridgeHandler.js.map +1 -1
- package/lib/components/CustomDrawer.js +122 -82
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/components/KeyboardComposerDock.js +10 -1
- package/lib/components/KeyboardComposerDock.js.map +1 -1
- package/lib/components/NavigationHeader/NavigationHeader.js +16 -30
- package/lib/components/NavigationHeader/NavigationHeader.js.map +1 -1
- package/lib/compute.js +54 -5
- package/lib/compute.js.map +1 -1
- package/lib/config/env-config.js +13 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/features/apps/AppsCatalog.js +200 -0
- package/lib/features/apps/AppsCatalog.js.map +1 -0
- package/lib/features/apps/mobileAppCatalog.js +1 -0
- package/lib/features/apps/mobileAppCatalog.js.map +1 -1
- package/lib/features/apps/resolveSurfaceUrl.js +22 -2
- package/lib/features/apps/resolveSurfaceUrl.js.map +1 -1
- package/lib/features/attachments/ComposerAttachmentBar.js +64 -0
- package/lib/features/attachments/ComposerAttachmentBar.js.map +1 -0
- package/lib/features/attachments/MessageAttachmentPreviews.js +77 -0
- package/lib/features/attachments/MessageAttachmentPreviews.js.map +1 -0
- package/lib/features/attachments/attachmentPreviewUri.js +9 -0
- package/lib/features/attachments/attachmentPreviewUri.js.map +1 -0
- package/lib/features/attachments/buildGatewayMedia.js +118 -0
- package/lib/features/attachments/buildGatewayMedia.js.map +1 -0
- package/lib/features/attachments/composerAttachmentHandoff.js +15 -0
- package/lib/features/attachments/composerAttachmentHandoff.js.map +1 -0
- package/lib/features/attachments/displayUserMessageText.js +19 -0
- package/lib/features/attachments/displayUserMessageText.js.map +1 -0
- package/lib/features/attachments/historyAttachmentLabel.js +51 -0
- package/lib/features/attachments/historyAttachmentLabel.js.map +1 -0
- package/lib/features/attachments/isImageAttachment.js +7 -0
- package/lib/features/attachments/isImageAttachment.js.map +1 -0
- package/lib/features/attachments/preserveAttachmentPreviews.js +41 -0
- package/lib/features/attachments/preserveAttachmentPreviews.js.map +1 -0
- package/lib/features/attachments/uploadChatAttachments.js +102 -0
- package/lib/features/attachments/uploadChatAttachments.js.map +1 -0
- package/lib/features/attachments/useImageAttachments.js +102 -7
- package/lib/features/attachments/useImageAttachments.js.map +1 -1
- package/lib/features/canvas/nativeViewerRegistry.js +8 -1
- package/lib/features/canvas/nativeViewerRegistry.js.map +1 -1
- package/lib/features/canvas/surfaceIndex.js +25 -0
- package/lib/features/canvas/surfaceIndex.js.map +1 -0
- package/lib/features/canvas/useCanvasSession.js +57 -0
- package/lib/features/canvas/useCanvasSession.js.map +1 -0
- package/lib/features/chat/ChatTranscript.js +202 -0
- package/lib/features/chat/ChatTranscript.js.map +1 -0
- package/lib/hooks/mintSurfaceSystemToken.js +86 -5
- package/lib/hooks/mintSurfaceSystemToken.js.map +1 -1
- package/lib/hooks/resolveSurfaceAuthGraphqlUrl.js +48 -0
- package/lib/hooks/resolveSurfaceAuthGraphqlUrl.js.map +1 -0
- package/lib/hooks/useCdecliChannel.js +5 -3
- package/lib/hooks/useCdecliChannel.js.map +1 -1
- package/lib/hooks/useChatApi.js +32 -15
- package/lib/hooks/useChatApi.js.map +1 -1
- package/lib/hooks/useChatStream.js +35 -8
- package/lib/hooks/useChatStream.js.map +1 -1
- package/lib/hooks/useKeyboardBottomOffset.js +22 -2
- package/lib/hooks/useKeyboardBottomOffset.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/routes.json +56 -4
- package/lib/screens/Apps/index.js +20 -0
- package/lib/screens/Apps/index.js.map +1 -0
- package/lib/screens/CanvasBoard/index.js +20 -15
- package/lib/screens/CanvasBoard/index.js.map +1 -1
- package/lib/screens/Chat/index.js +39 -66
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/ChatHistory/index.js +2 -8
- package/lib/screens/ChatHistory/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +57 -21
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/Home/components/ChatHistoryLanding.js +15 -9
- package/lib/screens/Home/components/ChatHistoryLanding.js.map +1 -1
- package/lib/screens/Home/components/WebBuilderPrewarm.js +2 -2
- package/lib/screens/Home/components/WebBuilderPrewarm.js.map +1 -1
- package/lib/screens/WebBuilder/index.js +25 -16
- package/lib/screens/WebBuilder/index.js.map +1 -1
- package/lib/screens/WebBuilder/webbuilderWarmCache.js +19 -10
- package/lib/screens/WebBuilder/webbuilderWarmCache.js.map +1 -1
- package/lib/utils/navigateToNewChatHome.js +40 -0
- package/lib/utils/navigateToNewChatHome.js.map +1 -0
- package/package.json +4 -4
- package/lib/components/AppsMenu/AppsMenu.js +0 -295
- package/lib/components/AppsMenu/AppsMenu.js.map +0 -1
- package/lib/components/NavigationHeader/ChatHistoryToggleMobile.js +0 -6
- package/lib/components/NavigationHeader/ChatHistoryToggleMobile.js.map +0 -1
- package/lib/features/canvas/canvasCore.js +0 -41
- package/lib/features/canvas/canvasCore.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../src/screens/WebBuilder/index.tsx"],"sourcesContent":["/**\n * WebBuilder — native shell hosting the webbuilder-surface WebView.\n *\n * Mints the org system JWT (same as CDeCLI) and hands it to the surface via\n * `?token=&state=` (SurfaceLoginGate.captureLoginCallback) + localStorage\n * `cdecli_token`, so the standalone \"Sign in with Yantra\" gate is skipped.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n AppState,\n type AppStateStatus,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n useColorScheme,\n View,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { WebView, type WebViewMessageEvent, type WebViewNavigation } from 'react-native-webview';\nimport type { WebViewErrorEvent, WebViewHttpErrorEvent } from 'react-native-webview/lib/WebViewTypes';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport {\n AnalyticsBridgeHandler,\n AuthBridgeHandler,\n getPackagerHost,\n NativeWebViewBridge,\n NavigationBridgeHandler,\n resolveMobileWebUrl,\n WEB_BRIDGE_BOOTSTRAP,\n WebViewManager,\n} from '../../bridge';\nimport {\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n} from '../../hooks/mintSurfaceSystemToken';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { WebViewWithNavigation } from './WebViewWithNavigation';\nimport { setWebBuilderBackHandler } from './webbuilderBackHandler';\nimport {\n getWarmWebBuilderSession,\n setWarmWebBuilderSession,\n warmWebBuilderSession,\n clearWarmWebBuilderSession,\n} from './webbuilderWarmCache';\n\nexport type MicroFrontendCachePolicy = 'default' | 'reload' | 'cache-else-load';\n\nexport interface MicroFrontendConfig {\n url: string;\n preload?: boolean;\n cachePolicy?: MicroFrontendCachePolicy;\n}\n\nexport interface WebBuilderRouteParams {\n orgName?: string | null;\n /** Optional override URL; defaults to WEB_BUILDER_URL from env. */\n url?: string | null;\n /** Channel to open / continue in the surface (`?channelId=`). */\n channelId?: string | null;\n /** Yantra project UUID (`?projectId=`). Defaults to channelId on the surface if omitted. */\n projectId?: string | null;\n /** Optional first Agent prompt to auto-send after hydrate (`?message=`). */\n message?: string | null;\n /** E2B snapshot for template remix (`?snapshotId=`). */\n snapshotId?: string | null;\n /** Yantra form / catalog template id (`?templateId=`). */\n templateId?: string | null;\n /** Display title for the handoff template (`?templateTitle=`). */\n templateTitle?: string | null;\n /** Stack template hint (`?seedTemplate=` e.g. vite-react). */\n seedTemplate?: string | null;\n deployUrl?: string | null;\n previewUrl?: string | null;\n}\n\nfunction makeHandoffState(): string {\n return `mobile-webview-${Date.now().toString(36)}`;\n}\n\nexport default function WebBuilderScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n\n const webViewRef = useRef<WebView>(null);\n const bridgeRef = useRef<NativeWebViewBridge | null>(null);\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorDetail, setErrorDetail] = useState<string | null>(null);\n const [canGoBack, setCanGoBack] = useState(false);\n const previewOpenRef = useRef(false);\n const [reloadKey, setReloadKey] = useState(0);\n const warm = getWarmWebBuilderSession();\n const [authToken, setAuthToken] = useState<string | null>(() => warm?.token ?? null);\n const [authBackend, setAuthBackend] = useState<string | null>(() => warm?.backend ?? null);\n const [authState, setAuthState] = useState<string>(() => makeHandoffState());\n // If Home already warmed the session, skip the full-screen Preparing gate.\n const [authReady, setAuthReady] = useState(() => Boolean(warm?.token));\n const [authError, setAuthError] = useState<string | null>(null);\n const [mintGeneration, setMintGeneration] = useState(0);\n\n const { orgName, projectId, tagId } = usePrerequisiteIds();\n // Same Apollo session the rest of the app uses (web harness pastes this JWT).\n // Raw fetch + SecureStore Auth0 Bearer gets 401 on local GraphQL; Apollo does not.\n const { obtainSystemToken } = useObtainSystemToken(true);\n\n const packagerHost = getPackagerHost();\n\n const handoffParams = useMemo(() => {\n const params = route?.params as WebBuilderRouteParams | undefined;\n const read = (key: keyof WebBuilderRouteParams) => {\n const value = params?.[key];\n return typeof value === 'string' ? value.trim() : '';\n };\n const channelId = read('channelId');\n const projectIdParam = read('projectId');\n const message = read('message');\n const snapshotId = read('snapshotId');\n const templateId = read('templateId');\n const templateTitle = read('templateTitle');\n const seedTemplate = read('seedTemplate');\n const deployUrl = read('deployUrl');\n const previewUrl = read('previewUrl');\n return {\n channelId: channelId || null,\n projectId: projectIdParam || null,\n message: message || null,\n snapshotId: snapshotId || null,\n templateId: templateId || null,\n templateTitle: templateTitle || null,\n seedTemplate: seedTemplate || null,\n deployUrl: deployUrl || null,\n previewUrl: previewUrl || null,\n };\n }, [route?.params]);\n\n const routeOrgName = useMemo(() => {\n const raw = (route?.params as WebBuilderRouteParams | undefined)?.orgName;\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params]);\n const effectiveOrgName = orgName || routeOrgName;\n const effectiveProjectId = projectId || handoffParams.projectId;\n\n const baseUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n const resolved = resolveMobileWebUrl(raw, packagerHost);\n const stamp = (url: URL) => {\n // Always mark mobile WebView embeds so the surface hides harness chrome\n // (cdecli JWT bar + @yantra/webbuilder-surface label).\n url.searchParams.set('embed', 'mobile');\n // Snapshot remix: omit channelId/projectId/previewUrl/deployUrl so the surface\n // mints a fresh listen channel+project from snapshotId (does not reconnect a\n // live sandbox or poll an empty mobile-precreated channel).\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) url.searchParams.set('channelId', handoffParams.channelId);\n if (!isRemix && handoffParams.projectId) url.searchParams.set('projectId', handoffParams.projectId);\n if (handoffParams.message) url.searchParams.set('message', handoffParams.message);\n if (handoffParams.snapshotId) url.searchParams.set('snapshotId', handoffParams.snapshotId);\n if (handoffParams.templateId) url.searchParams.set('templateId', handoffParams.templateId);\n if (handoffParams.templateTitle) url.searchParams.set('templateTitle', handoffParams.templateTitle);\n if (handoffParams.seedTemplate) url.searchParams.set('seedTemplate', handoffParams.seedTemplate);\n };\n try {\n const url = new URL(resolved);\n stamp(url);\n return url.toString();\n } catch {\n const sep = resolved.includes('?') ? '&' : '?';\n const parts: string[] = ['embed=mobile'];\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) {\n parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);\n }\n if (!isRemix && handoffParams.projectId) {\n parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);\n }\n if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);\n if (handoffParams.snapshotId) parts.push(`snapshotId=${encodeURIComponent(handoffParams.snapshotId)}`);\n if (handoffParams.templateId) parts.push(`templateId=${encodeURIComponent(handoffParams.templateId)}`);\n if (handoffParams.templateTitle) {\n parts.push(`templateTitle=${encodeURIComponent(handoffParams.templateTitle)}`);\n }\n if (handoffParams.seedTemplate) {\n parts.push(`seedTemplate=${encodeURIComponent(handoffParams.seedTemplate)}`);\n }\n return `${resolved}${sep}${parts.join('&')}`;\n }\n }, [route?.params, packagerHost, handoffParams]);\n\n /** Same GRAPHQL_URL the rest of the app uses — rewritten for device LAN. */\n const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);\n\n useEffect(() => {\n let cancelled = false;\n const handoffState = makeHandoffState();\n setAuthState(handoffState);\n setAuthError(null);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] surface=', baseUrl, 'graphql=', graphqlUrl);\n }\n\n // Prefer Home prewarm — never clear authReady / show Preparing if we already have a token.\n const cached = getWarmWebBuilderSession();\n if (cached?.token) {\n setAuthToken(cached.token);\n setAuthBackend(cached.backend || graphqlUrl);\n setAuthReady(true);\n return () => {\n cancelled = true;\n };\n }\n\n (async () => {\n try {\n // Don't hard-block on GetUserSystemToken loading — warm falls back to raw mint.\n const session = await warmWebBuilderSession({\n graphqlUrl,\n orgName: effectiveOrgName,\n projectId: effectiveProjectId,\n tagId,\n obtainSystemToken,\n });\n if (cancelled) return;\n setAuthToken(session.token);\n setAuthBackend(session.backend);\n setWarmWebBuilderSession(session);\n setAuthReady(true);\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] session ready length=', session.token.length);\n }\n } catch (err) {\n if (cancelled) return;\n // Still missing org/project — keep preparing a short while until they arrive.\n if (!effectiveOrgName || !effectiveProjectId) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n const message = err instanceof Error ? err.message : 'Token mint failed';\n if (/Waiting for org\\/project/i.test(message)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] surface token mint failed:', message);\n setAuthError(message);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(true);\n }\n })();\n\n // Absolute ceiling so Preparing never hangs indefinitely.\n const failsafe = setTimeout(() => {\n if (cancelled) return;\n setAuthReady((ready) => {\n if (ready) return ready;\n setAuthError('Timed out preparing Web Builder. Ensure you are signed in with an org, then retry.');\n return true;\n });\n }, 20000);\n\n return () => {\n cancelled = true;\n clearTimeout(failsafe);\n };\n }, [baseUrl, graphqlUrl, obtainSystemToken, effectiveOrgName, effectiveProjectId, tagId, mintGeneration]);\n\n const mfeUrl = useMemo(() => {\n if (!authToken) return baseUrl;\n return appendSurfaceAuthParams(baseUrl, authToken, authState);\n }, [baseUrl, authToken, authState]);\n\n const injectedBeforeContent = useMemo(() => {\n const parts = [WEB_BRIDGE_BOOTSTRAP];\n if (authToken && authBackend) {\n parts.unshift(buildCdecliTokenInjection(authToken, authBackend, authState));\n }\n return parts.join('\\n');\n }, [authToken, authBackend, authState]);\n\n /** If the SPA still shows the login gate after load, force one handoff reload. */\n const reinjectAfterLoad = useMemo(() => {\n if (!authToken || !authBackend) return undefined;\n return buildSurfaceGateRecoveryScript(authToken, authBackend, authState);\n }, [authToken, authBackend, authState]);\n\n const mfeConfig: MicroFrontendConfig = useMemo(\n () => ({\n url: mfeUrl,\n cachePolicy: 'default',\n }),\n [mfeUrl],\n );\n\n const webViewManager = WebViewManager.getInstance();\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const textColor = isDark ? '#f8fafc' : mobileTokens.color.text;\n const mutedColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n\n // Bridge + service handlers\n useEffect(() => {\n const bridge = new NativeWebViewBridge(webViewRef);\n bridgeRef.current = bridge;\n // eslint-disable-next-line no-new\n new AuthBridgeHandler(bridge);\n // eslint-disable-next-line no-new\n new NavigationBridgeHandler(bridge, () => navigation);\n // eslint-disable-next-line no-new\n new AnalyticsBridgeHandler(bridge);\n\n return () => {\n bridge.dispose();\n bridgeRef.current = null;\n };\n }, [navigation]);\n\n useEffect(() => {\n if (!authToken) return;\n const id = mfeConfig.url;\n webViewManager.registerWebView(id, webViewRef);\n return () => {\n webViewManager.unregisterWebView(id);\n };\n }, [authToken, mfeConfig.url, webViewManager]);\n\n useEffect(() => {\n const handleAppStateChange = (nextAppState: AppStateStatus) => {\n if (nextAppState === 'background') {\n webViewRef.current?.clearCache?.(true);\n }\n };\n const subscription = AppState.addEventListener('change', handleAppStateChange);\n return () => subscription.remove();\n }, []);\n\n useEffect(() => {\n if (!authReady || !authToken || hasError) return;\n const timer = setTimeout(() => {\n setIsLoading((loading) => {\n if (!loading) return loading;\n const detail = `Timed out loading ${mfeConfig.url}. Is WEB_BUILDER_URL reachable from this device?`;\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder]', detail);\n setErrorDetail(detail);\n setHasError(true);\n return false;\n });\n }, 20000);\n return () => clearTimeout(timer);\n }, [authReady, authToken, hasError, mfeConfig.url, reloadKey]);\n\n const handleLoadStart = useCallback(() => {\n setIsLoading(true);\n setHasError(false);\n setErrorDetail(null);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n setIsLoading(false);\n webViewManager.updateUsage(mfeConfig.url);\n }, [mfeConfig.url, webViewManager]);\n\n const handleError = useCallback(\n (event: WebViewErrorEvent) => {\n const { description, code, url } = event.nativeEvent;\n const detail = [description, code != null ? `code ${code}` : null, url || mfeConfig.url]\n .filter(Boolean)\n .join(' · ');\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] load error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleHttpError = useCallback(\n (event: WebViewHttpErrorEvent) => {\n const { statusCode, description, url } = event.nativeEvent;\n if (statusCode < 400) return;\n const detail = `HTTP ${statusCode}${description ? `: ${description}` : ''} · ${url || mfeConfig.url}`;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] http error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n try {\n const raw = event?.nativeEvent?.data;\n if (typeof raw === 'string' && raw.includes('wb-preview')) {\n const parsed = JSON.parse(raw) as { type?: string; open?: boolean };\n if (parsed?.type === 'wb-preview') {\n previewOpenRef.current = Boolean(parsed.open);\n }\n }\n } catch {\n /* non-JSON bridge frames are handled below */\n }\n bridgeRef.current?.handleMessage(event);\n }, []);\n\n const handleNavigationStateChange = useCallback((navState: WebViewNavigation) => {\n setCanGoBack(Boolean(navState.canGoBack));\n }, []);\n\n const handleRetry = useCallback(() => {\n clearWarmWebBuilderSession();\n setHasError(false);\n setErrorDetail(null);\n setAuthError(null);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(false);\n setIsLoading(true);\n setMintGeneration((g) => g + 1);\n setReloadKey((k) => k + 1);\n }, []);\n\n const handleNativeGoBack = useCallback(() => {\n if (navigation.canGoBack()) {\n navigation.goBack();\n return;\n }\n navigation.navigate('MainStack.Layout.Home' as never);\n }, [navigation]);\n\n // Header / hardware back: only intercept when in-app preview is open\n // (dismiss → stay on WebBuilder). Do NOT consume SPA WebView history —\n // handoff/pushState makes canGoBack true and trapped users on this screen.\n useEffect(() => {\n setWebBuilderBackHandler(() => {\n if (previewOpenRef.current) {\n webViewRef.current?.injectJavaScript(`\n(function () {\n try { window.__yantraWbNativeBack && window.__yantraWbNativeBack(); } catch (e) {}\n})();\ntrue;\n`);\n previewOpenRef.current = false;\n return true;\n }\n return false;\n });\n return () => setWebBuilderBackHandler(null);\n }, []);\n\n const cacheMode =\n mfeConfig.cachePolicy === 'cache-else-load' ? ('LOAD_CACHE_ELSE_NETWORK' as const) : ('LOAD_DEFAULT' as const);\n\n const showAuthSpinner = !authReady;\n const showAuthFailure = authReady && !authToken;\n\n if (showAuthSpinner) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n <Text style={[styles.errorBody, { color: mutedColor, marginTop: 12 }]}>Preparing Web Builder…</Text>\n </View>\n </SafeAreaView>\n );\n }\n\n if (showAuthFailure || hasError) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <Text style={[styles.errorTitle, { color: textColor }]}>\n {showAuthFailure ? 'Could not open Web Builder' : 'Failed to load micro frontend'}\n </Text>\n <Text style={[styles.errorBody, { color: mutedColor }]}>\n {showAuthFailure\n ? authError ||\n 'Sign-in token could not be minted for the surface. Ensure you are logged in with an org.'\n : `Could not open ${baseUrl}. Check WEB_BUILDER_URL / network, then retry.`}\n </Text>\n {errorDetail ? (\n <Text style={[styles.errorMeta, { color: mutedColor }]} selectable>\n {errorDetail}\n </Text>\n ) : null}\n <Pressable\n onPress={handleRetry}\n style={[styles.retryButton, { backgroundColor: mobileTokens.color.primary }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Retry loading WebBuilder\"\n >\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={[styles.container, { backgroundColor: surfaceColor }]}>\n <WebViewWithNavigation webViewRef={webViewRef} canGoBack={canGoBack} onGoBack={handleNativeGoBack} />\n\n {isLoading && (\n <View style={[styles.loadingOverlay, { backgroundColor: surfaceColor }]} pointerEvents=\"none\">\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n </View>\n )}\n\n <WebView\n key={`${reloadKey}-${handoffParams.channelId ?? 'none'}-${handoffParams.snapshotId ?? 'nosnap'}-${authToken?.slice(-8) ?? 'none'}`}\n ref={webViewRef}\n source={{\n uri: mfeConfig.url,\n }}\n style={styles.webview}\n onLoadStart={handleLoadStart}\n onLoadEnd={handleLoadEnd}\n onError={handleError}\n onHttpError={handleHttpError}\n onMessage={handleMessage}\n onNavigationStateChange={handleNavigationStateChange}\n injectedJavaScriptBeforeContentLoaded={injectedBeforeContent}\n injectedJavaScript={reinjectAfterLoad}\n cacheEnabled={mfeConfig.cachePolicy !== 'reload'}\n cacheMode={cacheMode}\n javaScriptEnabled\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n startInLoadingState\n scalesPageToFit\n originWhitelist={['*']}\n mixedContentMode=\"always\"\n // Surfaces run the shared AI chat, whose voice input records via\n // getUserMedia. WKWebView denies capture unless the host grants it\n // (the app already holds NSMicrophoneUsageDescription / RECORD_AUDIO),\n // which is why the record button in a surface silently did nothing.\n mediaCapturePermissionGrantType=\"grant\"\n // Inline playback so canvas/board videos play in place instead of\n // being hijacked into the fullscreen player.\n allowsInlineMediaPlayback\n mediaPlaybackRequiresUserAction\n setSupportMultipleWindows={false}\n allowsBackForwardNavigationGestures\n {...(Platform.OS === 'android' ? { overScrollMode: 'never' as const } : null)}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n webview: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n loadingOverlay: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n },\n centered: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 24,\n gap: 12,\n },\n errorTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n errorBody: {\n fontSize: 14,\n textAlign: 'center',\n marginBottom: 4,\n lineHeight: 20,\n },\n errorMeta: {\n fontSize: 12,\n textAlign: 'center',\n marginBottom: 8,\n lineHeight: 16,\n },\n retryButton: {\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderRadius: mobileTokens.radius.md,\n },\n retryLabel: {\n color: '#ffffff',\n fontSize: 15,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../src/screens/WebBuilder/index.tsx"],"sourcesContent":["/**\n * WebBuilder — native shell hosting the webbuilder-surface WebView.\n *\n * Mints the org system JWT (same as CDeCLI) and hands it to the surface via\n * `?token=&state=` (SurfaceLoginGate.captureLoginCallback) + localStorage\n * `cdecli_token`, so the standalone \"Sign in with Yantra\" gate is skipped.\n */\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport {\n ActivityIndicator,\n AppState,\n type AppStateStatus,\n Platform,\n Pressable,\n StyleSheet,\n Text,\n useColorScheme,\n View,\n} from 'react-native';\nimport { SafeAreaView } from 'react-native-safe-area-context';\nimport { WebView, type WebViewMessageEvent, type WebViewNavigation } from 'react-native-webview';\nimport type { WebViewErrorEvent, WebViewHttpErrorEvent } from 'react-native-webview/lib/WebViewTypes';\nimport { useNavigation, useRoute } from '@react-navigation/native';\nimport { config } from '../../config/env-config';\nimport { mobileTokens } from '../../theme/mobileTokens';\nimport {\n AnalyticsBridgeHandler,\n AuthBridgeHandler,\n getPackagerHost,\n NativeWebViewBridge,\n NavigationBridgeHandler,\n resolveMobileWebUrl,\n WEB_BRIDGE_BOOTSTRAP,\n WebViewManager,\n} from '../../bridge';\nimport {\n appendSurfaceAuthParams,\n buildCdecliTokenInjection,\n buildSurfaceGateRecoveryScript,\n resolveSurfaceAuthGraphqlUrl,\n} from '../../hooks/mintSurfaceSystemToken';\nimport { useObtainSystemToken } from '../../hooks/useObtainSystemToken';\nimport { usePrerequisiteIds } from '../../hooks/usePrerequisiteIds';\nimport { WebViewWithNavigation } from './WebViewWithNavigation';\nimport { setWebBuilderBackHandler } from './webbuilderBackHandler';\nimport {\n getWarmWebBuilderSession,\n setWarmWebBuilderSession,\n warmWebBuilderSession,\n clearWarmWebBuilderSession,\n} from './webbuilderWarmCache';\n\nexport type MicroFrontendCachePolicy = 'default' | 'reload' | 'cache-else-load';\n\nexport interface MicroFrontendConfig {\n url: string;\n preload?: boolean;\n cachePolicy?: MicroFrontendCachePolicy;\n}\n\nexport interface WebBuilderRouteParams {\n orgName?: string | null;\n /** Optional override URL; defaults to WEB_BUILDER_URL from env. */\n url?: string | null;\n /** Channel to open / continue in the surface (`?channelId=`). */\n channelId?: string | null;\n /** Yantra project UUID (`?projectId=`). Defaults to channelId on the surface if omitted. */\n projectId?: string | null;\n /** Optional first Agent prompt to auto-send after hydrate (`?message=`). */\n message?: string | null;\n /** E2B snapshot for template remix (`?snapshotId=`). */\n snapshotId?: string | null;\n /** Yantra form / catalog template id (`?templateId=`). */\n templateId?: string | null;\n /** Display title for the handoff template (`?templateTitle=`). */\n templateTitle?: string | null;\n /** Launcher tile name (Canvas, Design, …) — shown in the native header. */\n appTitle?: string | null;\n /** Stack template hint (`?seedTemplate=` e.g. vite-react). */\n seedTemplate?: string | null;\n deployUrl?: string | null;\n previewUrl?: string | null;\n}\n\nfunction makeHandoffState(): string {\n return `mobile-webview-${Date.now().toString(36)}`;\n}\n\nexport default function WebBuilderScreen() {\n const navigation = useNavigation<any>();\n const route = useRoute<any>();\n const colorScheme = useColorScheme();\n const isDark = colorScheme === 'dark';\n\n const webViewRef = useRef<WebView>(null);\n const bridgeRef = useRef<NativeWebViewBridge | null>(null);\n\n const packagerHost = getPackagerHost();\n const graphqlUrl = useMemo(() => resolveMobileWebUrl(config.GRAPHQL_URL, packagerHost), [packagerHost]);\n const routeSurfaceUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n return resolveMobileWebUrl(raw, packagerHost);\n }, [route?.params, packagerHost]);\n const authGraphqlUrl = useMemo(\n () => resolveSurfaceAuthGraphqlUrl(routeSurfaceUrl, graphqlUrl, config),\n [routeSurfaceUrl, graphqlUrl],\n );\n const crossBackendAuth = authGraphqlUrl.replace(/\\/$/, '') !== graphqlUrl.replace(/\\/$/, '');\n\n const [isLoading, setIsLoading] = useState(true);\n const [hasError, setHasError] = useState(false);\n const [errorDetail, setErrorDetail] = useState<string | null>(null);\n const [canGoBack, setCanGoBack] = useState(false);\n const previewOpenRef = useRef(false);\n const [reloadKey, setReloadKey] = useState(0);\n const warm = getWarmWebBuilderSession(authGraphqlUrl);\n const [authToken, setAuthToken] = useState<string | null>(() => warm?.token ?? null);\n const [authBackend, setAuthBackend] = useState<string | null>(() => warm?.backend ?? null);\n const [authState, setAuthState] = useState<string>(() => makeHandoffState());\n // If Home already warmed the session, skip the full-screen Preparing gate.\n const [authReady, setAuthReady] = useState(() => Boolean(warm?.token));\n const [authError, setAuthError] = useState<string | null>(null);\n const [mintGeneration, setMintGeneration] = useState(0);\n\n const { orgName, projectId, tagId } = usePrerequisiteIds();\n // Same Apollo session the rest of the app uses (web harness pastes this JWT).\n // Raw fetch + SecureStore Auth0 Bearer gets 401 on local GraphQL; Apollo does not.\n const { obtainSystemToken } = useObtainSystemToken(!crossBackendAuth);\n\n const handoffParams = useMemo(() => {\n const params = route?.params as WebBuilderRouteParams | undefined;\n const read = (key: keyof WebBuilderRouteParams) => {\n const value = params?.[key];\n return typeof value === 'string' ? value.trim() : '';\n };\n const channelId = read('channelId');\n const projectIdParam = read('projectId');\n const message = read('message');\n const snapshotId = read('snapshotId');\n const templateId = read('templateId');\n const templateTitle = read('templateTitle');\n const seedTemplate = read('seedTemplate');\n const deployUrl = read('deployUrl');\n const previewUrl = read('previewUrl');\n return {\n channelId: channelId || null,\n projectId: projectIdParam || null,\n message: message || null,\n snapshotId: snapshotId || null,\n templateId: templateId || null,\n templateTitle: templateTitle || null,\n seedTemplate: seedTemplate || null,\n deployUrl: deployUrl || null,\n previewUrl: previewUrl || null,\n };\n }, [route?.params]);\n\n const routeOrgName = useMemo(() => {\n const raw = (route?.params as WebBuilderRouteParams | undefined)?.orgName;\n return typeof raw === 'string' && raw.trim() ? raw.trim() : null;\n }, [route?.params]);\n const effectiveOrgName = orgName || routeOrgName;\n const effectiveProjectId = projectId || handoffParams.projectId;\n\n const baseUrl = useMemo(() => {\n const fromParams = (route?.params as WebBuilderRouteParams | undefined)?.url;\n const raw = typeof fromParams === 'string' && fromParams.trim() ? fromParams.trim() : config.WEB_BUILDER_URL;\n const resolved = resolveMobileWebUrl(raw, packagerHost);\n const stamp = (url: URL) => {\n // Always mark mobile WebView embeds so the surface hides harness chrome\n // (cdecli JWT bar + @yantra/webbuilder-surface label).\n url.searchParams.set('embed', 'mobile');\n // Snapshot remix: omit channelId/projectId/previewUrl/deployUrl so the surface\n // mints a fresh listen channel+project from snapshotId (does not reconnect a\n // live sandbox or poll an empty mobile-precreated channel).\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) url.searchParams.set('channelId', handoffParams.channelId);\n if (!isRemix && handoffParams.projectId) url.searchParams.set('projectId', handoffParams.projectId);\n if (handoffParams.message) url.searchParams.set('message', handoffParams.message);\n if (handoffParams.snapshotId) url.searchParams.set('snapshotId', handoffParams.snapshotId);\n if (handoffParams.templateId) url.searchParams.set('templateId', handoffParams.templateId);\n if (handoffParams.templateTitle) url.searchParams.set('templateTitle', handoffParams.templateTitle);\n if (handoffParams.seedTemplate) url.searchParams.set('seedTemplate', handoffParams.seedTemplate);\n };\n try {\n const url = new URL(resolved);\n stamp(url);\n return url.toString();\n } catch {\n const sep = resolved.includes('?') ? '&' : '?';\n const parts: string[] = ['embed=mobile'];\n const isRemix = Boolean(handoffParams.snapshotId);\n if (!isRemix && handoffParams.channelId) {\n parts.push(`channelId=${encodeURIComponent(handoffParams.channelId)}`);\n }\n if (!isRemix && handoffParams.projectId) {\n parts.push(`projectId=${encodeURIComponent(handoffParams.projectId)}`);\n }\n if (handoffParams.message) parts.push(`message=${encodeURIComponent(handoffParams.message)}`);\n if (handoffParams.snapshotId) parts.push(`snapshotId=${encodeURIComponent(handoffParams.snapshotId)}`);\n if (handoffParams.templateId) parts.push(`templateId=${encodeURIComponent(handoffParams.templateId)}`);\n if (handoffParams.templateTitle) {\n parts.push(`templateTitle=${encodeURIComponent(handoffParams.templateTitle)}`);\n }\n if (handoffParams.seedTemplate) {\n parts.push(`seedTemplate=${encodeURIComponent(handoffParams.seedTemplate)}`);\n }\n return `${resolved}${sep}${parts.join('&')}`;\n }\n }, [route?.params, packagerHost, handoffParams]);\n\n useEffect(() => {\n let cancelled = false;\n const handoffState = makeHandoffState();\n setAuthState(handoffState);\n setAuthError(null);\n\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] surface=', baseUrl, 'graphql=', graphqlUrl, 'authBackend=', authGraphqlUrl);\n }\n\n // Prefer Home prewarm only when it was minted for THIS surface's backend.\n // Canvas index verifies yantra-app-v1 keys; the webbuilder warm token is local.\n const cached = getWarmWebBuilderSession(authGraphqlUrl);\n if (cached?.token) {\n setAuthToken(cached.token);\n setAuthBackend(cached.backend || authGraphqlUrl);\n setAuthReady(true);\n return () => {\n cancelled = true;\n };\n }\n\n (async () => {\n try {\n // Don't hard-block on GetUserSystemToken loading — warm falls back to raw mint.\n const session = await warmWebBuilderSession({\n graphqlUrl: authGraphqlUrl,\n orgName: crossBackendAuth ? undefined : effectiveOrgName,\n projectId: crossBackendAuth ? undefined : effectiveProjectId,\n tagId: crossBackendAuth ? undefined : tagId,\n obtainSystemToken: crossBackendAuth ? undefined : obtainSystemToken,\n discoverScope: crossBackendAuth,\n });\n if (cancelled) return;\n setAuthToken(session.token);\n setAuthBackend(session.backend);\n setWarmWebBuilderSession(session);\n setAuthReady(true);\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log(\n '[WebBuilder] session ready length=',\n session.token.length,\n 'backend=',\n session.backend,\n );\n }\n } catch (err) {\n if (cancelled) return;\n // Still missing org/project — keep preparing a short while until they arrive.\n if (!crossBackendAuth && (!effectiveOrgName || !effectiveProjectId)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n const message = err instanceof Error ? err.message : 'Token mint failed';\n if (/Waiting for org\\/project/i.test(message)) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.log('[WebBuilder] waiting for org/project…');\n }\n return;\n }\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] surface token mint failed:', message);\n setAuthError(message);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(true);\n }\n })();\n\n // Absolute ceiling so Preparing never hangs indefinitely.\n const failsafe = setTimeout(() => {\n if (cancelled) return;\n setAuthReady((ready) => {\n if (ready) return ready;\n setAuthError('Timed out preparing Web Builder. Ensure you are signed in with an org, then retry.');\n return true;\n });\n }, 20000);\n\n return () => {\n cancelled = true;\n clearTimeout(failsafe);\n };\n }, [\n baseUrl,\n graphqlUrl,\n authGraphqlUrl,\n crossBackendAuth,\n obtainSystemToken,\n effectiveOrgName,\n effectiveProjectId,\n tagId,\n mintGeneration,\n ]);\n\n const mfeUrl = useMemo(() => {\n if (!authToken) return baseUrl;\n return appendSurfaceAuthParams(baseUrl, authToken, authState);\n }, [baseUrl, authToken, authState]);\n\n const injectedBeforeContent = useMemo(() => {\n const parts = [WEB_BRIDGE_BOOTSTRAP];\n if (authToken && authBackend) {\n parts.unshift(buildCdecliTokenInjection(authToken, authBackend, authState));\n }\n return parts.join('\\n');\n }, [authToken, authBackend, authState]);\n\n /** If the SPA still shows the login gate after load, force one handoff reload. */\n const reinjectAfterLoad = useMemo(() => {\n if (!authToken || !authBackend) return undefined;\n return buildSurfaceGateRecoveryScript(authToken, authBackend, authState);\n }, [authToken, authBackend, authState]);\n\n const mfeConfig: MicroFrontendConfig = useMemo(\n () => ({\n url: mfeUrl,\n cachePolicy: 'default',\n }),\n [mfeUrl],\n );\n\n const webViewManager = WebViewManager.getInstance();\n const surfaceColor = isDark ? '#0f172a' : mobileTokens.color.surface;\n const textColor = isDark ? '#f8fafc' : mobileTokens.color.text;\n const mutedColor = isDark ? '#94a3b8' : mobileTokens.color.textMuted;\n\n // Bridge + service handlers\n useEffect(() => {\n const bridge = new NativeWebViewBridge(webViewRef);\n bridgeRef.current = bridge;\n // eslint-disable-next-line no-new\n new AuthBridgeHandler(bridge);\n // eslint-disable-next-line no-new\n new NavigationBridgeHandler(bridge, () => navigation);\n // eslint-disable-next-line no-new\n new AnalyticsBridgeHandler(bridge);\n\n return () => {\n bridge.dispose();\n bridgeRef.current = null;\n };\n }, [navigation]);\n\n useEffect(() => {\n if (!authToken) return;\n const id = mfeConfig.url;\n webViewManager.registerWebView(id, webViewRef);\n return () => {\n webViewManager.unregisterWebView(id);\n };\n }, [authToken, mfeConfig.url, webViewManager]);\n\n useEffect(() => {\n const handleAppStateChange = (nextAppState: AppStateStatus) => {\n if (nextAppState === 'background') {\n webViewRef.current?.clearCache?.(true);\n }\n };\n const subscription = AppState.addEventListener('change', handleAppStateChange);\n return () => subscription.remove();\n }, []);\n\n useEffect(() => {\n if (!authReady || !authToken || hasError) return;\n const timer = setTimeout(() => {\n setIsLoading((loading) => {\n if (!loading) return loading;\n const detail = `Timed out loading ${mfeConfig.url}. Is WEB_BUILDER_URL reachable from this device?`;\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder]', detail);\n setErrorDetail(detail);\n setHasError(true);\n return false;\n });\n }, 20000);\n return () => clearTimeout(timer);\n }, [authReady, authToken, hasError, mfeConfig.url, reloadKey]);\n\n const handleLoadStart = useCallback(() => {\n setIsLoading(true);\n setHasError(false);\n setErrorDetail(null);\n }, []);\n\n const handleLoadEnd = useCallback(() => {\n setIsLoading(false);\n webViewManager.updateUsage(mfeConfig.url);\n }, [mfeConfig.url, webViewManager]);\n\n const handleError = useCallback(\n (event: WebViewErrorEvent) => {\n const { description, code, url } = event.nativeEvent;\n const detail = [description, code != null ? `code ${code}` : null, url || mfeConfig.url]\n .filter(Boolean)\n .join(' · ');\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] load error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleHttpError = useCallback(\n (event: WebViewHttpErrorEvent) => {\n const { statusCode, description, url } = event.nativeEvent;\n if (statusCode < 400) return;\n const detail = `HTTP ${statusCode}${description ? `: ${description}` : ''} · ${url || mfeConfig.url}`;\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilder] http error:', detail);\n }\n setErrorDetail(detail);\n setHasError(true);\n setIsLoading(false);\n },\n [mfeConfig.url],\n );\n\n const handleMessage = useCallback((event: WebViewMessageEvent) => {\n try {\n const raw = event?.nativeEvent?.data;\n if (typeof raw === 'string' && raw.includes('wb-preview')) {\n const parsed = JSON.parse(raw) as { type?: string; open?: boolean };\n if (parsed?.type === 'wb-preview') {\n previewOpenRef.current = Boolean(parsed.open);\n }\n }\n } catch {\n /* non-JSON bridge frames are handled below */\n }\n bridgeRef.current?.handleMessage(event);\n }, []);\n\n const handleNavigationStateChange = useCallback((navState: WebViewNavigation) => {\n setCanGoBack(Boolean(navState.canGoBack));\n }, []);\n\n const handleRetry = useCallback(() => {\n clearWarmWebBuilderSession();\n setHasError(false);\n setErrorDetail(null);\n setAuthError(null);\n setAuthToken(null);\n setAuthBackend(null);\n setAuthReady(false);\n setIsLoading(true);\n setMintGeneration((g) => g + 1);\n setReloadKey((k) => k + 1);\n }, []);\n\n const handleNativeGoBack = useCallback(() => {\n if (navigation.canGoBack()) {\n navigation.goBack();\n return;\n }\n navigation.navigate('MainStack.Layout.Home' as never);\n }, [navigation]);\n\n // Header / hardware back: only intercept when in-app preview is open\n // (dismiss → stay on WebBuilder). Do NOT consume SPA WebView history —\n // handoff/pushState makes canGoBack true and trapped users on this screen.\n useEffect(() => {\n setWebBuilderBackHandler(() => {\n if (previewOpenRef.current) {\n webViewRef.current?.injectJavaScript(`\n(function () {\n try { window.__yantraWbNativeBack && window.__yantraWbNativeBack(); } catch (e) {}\n})();\ntrue;\n`);\n previewOpenRef.current = false;\n return true;\n }\n return false;\n });\n return () => setWebBuilderBackHandler(null);\n }, []);\n\n const cacheMode =\n mfeConfig.cachePolicy === 'cache-else-load' ? ('LOAD_CACHE_ELSE_NETWORK' as const) : ('LOAD_DEFAULT' as const);\n\n const showAuthSpinner = !authReady;\n const showAuthFailure = authReady && !authToken;\n\n if (showAuthSpinner) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n <Text style={[styles.errorBody, { color: mutedColor, marginTop: 12 }]}>Preparing Web Builder…</Text>\n </View>\n </SafeAreaView>\n );\n }\n\n if (showAuthFailure || hasError) {\n return (\n <SafeAreaView\n edges={['left', 'right', 'bottom']}\n style={[styles.container, { backgroundColor: surfaceColor }]}\n >\n <View style={styles.centered}>\n <Text style={[styles.errorTitle, { color: textColor }]}>\n {showAuthFailure ? 'Could not open Web Builder' : 'Failed to load micro frontend'}\n </Text>\n <Text style={[styles.errorBody, { color: mutedColor }]}>\n {showAuthFailure\n ? authError ||\n 'Sign-in token could not be minted for the surface. Ensure you are logged in with an org.'\n : `Could not open ${baseUrl}. Check WEB_BUILDER_URL / network, then retry.`}\n </Text>\n {errorDetail ? (\n <Text style={[styles.errorMeta, { color: mutedColor }]} selectable>\n {errorDetail}\n </Text>\n ) : null}\n <Pressable\n onPress={handleRetry}\n style={[styles.retryButton, { backgroundColor: mobileTokens.color.primary }]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Retry loading WebBuilder\"\n >\n <Text style={styles.retryLabel}>Retry</Text>\n </Pressable>\n </View>\n </SafeAreaView>\n );\n }\n\n return (\n <SafeAreaView edges={['left', 'right', 'bottom']} style={[styles.container, { backgroundColor: surfaceColor }]}>\n <WebViewWithNavigation webViewRef={webViewRef} canGoBack={canGoBack} onGoBack={handleNativeGoBack} />\n\n {isLoading && (\n <View style={[styles.loadingOverlay, { backgroundColor: surfaceColor }]} pointerEvents=\"none\">\n <ActivityIndicator size=\"large\" color={mobileTokens.color.primary} />\n </View>\n )}\n\n <WebView\n key={`${reloadKey}-${handoffParams.channelId ?? 'none'}-${handoffParams.snapshotId ?? 'nosnap'}-${authToken?.slice(-8) ?? 'none'}`}\n ref={webViewRef}\n source={{\n uri: mfeConfig.url,\n }}\n style={styles.webview}\n onLoadStart={handleLoadStart}\n onLoadEnd={handleLoadEnd}\n onError={handleError}\n onHttpError={handleHttpError}\n onMessage={handleMessage}\n onNavigationStateChange={handleNavigationStateChange}\n injectedJavaScriptBeforeContentLoaded={injectedBeforeContent}\n injectedJavaScript={reinjectAfterLoad}\n cacheEnabled={mfeConfig.cachePolicy !== 'reload'}\n cacheMode={cacheMode}\n javaScriptEnabled\n domStorageEnabled\n sharedCookiesEnabled\n thirdPartyCookiesEnabled\n startInLoadingState\n scalesPageToFit\n originWhitelist={['*']}\n mixedContentMode=\"always\"\n // Surfaces run the shared AI chat, whose voice input records via\n // getUserMedia. WKWebView denies capture unless the host grants it\n // (the app already holds NSMicrophoneUsageDescription / RECORD_AUDIO),\n // which is why the record button in a surface silently did nothing.\n mediaCapturePermissionGrantType=\"grant\"\n // Inline playback so canvas/board videos play in place instead of\n // being hijacked into the fullscreen player.\n allowsInlineMediaPlayback\n mediaPlaybackRequiresUserAction\n setSupportMultipleWindows={false}\n allowsBackForwardNavigationGestures\n {...(Platform.OS === 'android' ? { overScrollMode: 'never' as const } : null)}\n />\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n },\n webview: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n loadingOverlay: {\n ...StyleSheet.absoluteFillObject,\n justifyContent: 'center',\n alignItems: 'center',\n zIndex: 1000,\n },\n centered: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n paddingHorizontal: 24,\n gap: 12,\n },\n errorTitle: {\n fontSize: 17,\n fontWeight: '600',\n textAlign: 'center',\n },\n errorBody: {\n fontSize: 14,\n textAlign: 'center',\n marginBottom: 4,\n lineHeight: 20,\n },\n errorMeta: {\n fontSize: 12,\n textAlign: 'center',\n marginBottom: 8,\n lineHeight: 16,\n },\n retryButton: {\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderRadius: mobileTokens.radius.md,\n },\n retryLabel: {\n color: '#ffffff',\n fontSize: 15,\n fontWeight: '600',\n },\n});\n"],"names":["_a","_b"],"mappings":"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"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
const TTL_MS = 45 * 60 * 1e3;
|
|
2
2
|
let session = null;
|
|
3
3
|
let inflight = null;
|
|
4
|
-
function
|
|
4
|
+
function backendsMatch(a, b) {
|
|
5
|
+
return a.trim().replace(/\/$/, "") === b.trim().replace(/\/$/, "");
|
|
6
|
+
}
|
|
7
|
+
function getWarmWebBuilderSession(backend) {
|
|
5
8
|
var _a;
|
|
6
9
|
if (!((_a = session == null ? void 0 : session.token) == null ? void 0 : _a.trim())) return null;
|
|
7
10
|
if (Date.now() - session.warmedAt > TTL_MS) {
|
|
8
11
|
session = null;
|
|
9
12
|
return null;
|
|
10
13
|
}
|
|
14
|
+
if (backend && !backendsMatch(session.backend, backend)) return null;
|
|
11
15
|
return session;
|
|
12
16
|
}
|
|
13
17
|
function setWarmWebBuilderSession(next) {
|
|
@@ -22,18 +26,18 @@ function clearWarmWebBuilderSession() {
|
|
|
22
26
|
inflight = null;
|
|
23
27
|
}
|
|
24
28
|
async function warmWebBuilderSession(input) {
|
|
25
|
-
const
|
|
29
|
+
const backend = (input.graphqlUrl || "").trim();
|
|
30
|
+
const existing = getWarmWebBuilderSession(backend);
|
|
26
31
|
if (existing) return existing;
|
|
27
|
-
if (inflight) return inflight;
|
|
28
|
-
|
|
32
|
+
if (inflight && inflight.backend === backend) return inflight.promise;
|
|
33
|
+
const promise = (async () => {
|
|
29
34
|
var _a, _b, _c;
|
|
30
|
-
const backend = (input.graphqlUrl || "").trim();
|
|
31
35
|
if (!backend) {
|
|
32
36
|
throw new Error("GRAPHQL_URL is not configured");
|
|
33
37
|
}
|
|
34
38
|
let token = null;
|
|
35
39
|
let apolloAttempted = false;
|
|
36
|
-
if (input.obtainSystemToken) {
|
|
40
|
+
if (input.obtainSystemToken && !input.discoverScope) {
|
|
37
41
|
apolloAttempted = true;
|
|
38
42
|
try {
|
|
39
43
|
token = ((_a = await input.obtainSystemToken()) == null ? void 0 : _a.trim()) || null;
|
|
@@ -44,7 +48,7 @@ async function warmWebBuilderSession(input) {
|
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
50
|
if (!token) {
|
|
47
|
-
if (apolloAttempted && (!((_b = input.orgName) == null ? void 0 : _b.trim()) || !((_c = input.projectId) == null ? void 0 : _c.trim()))) {
|
|
51
|
+
if (apolloAttempted && !input.discoverScope && (!((_b = input.orgName) == null ? void 0 : _b.trim()) || !((_c = input.projectId) == null ? void 0 : _c.trim()))) {
|
|
48
52
|
throw new Error("Waiting for org/project before minting Web Builder token");
|
|
49
53
|
}
|
|
50
54
|
const {
|
|
@@ -54,7 +58,8 @@ async function warmWebBuilderSession(input) {
|
|
|
54
58
|
graphqlUrl: backend,
|
|
55
59
|
orgName: input.orgName,
|
|
56
60
|
projectId: input.projectId,
|
|
57
|
-
tagId: input.tagId
|
|
61
|
+
tagId: input.tagId,
|
|
62
|
+
discoverScope: input.discoverScope
|
|
58
63
|
});
|
|
59
64
|
token = minted.token.trim();
|
|
60
65
|
}
|
|
@@ -69,9 +74,13 @@ async function warmWebBuilderSession(input) {
|
|
|
69
74
|
setWarmWebBuilderSession(next);
|
|
70
75
|
return next;
|
|
71
76
|
})().finally(() => {
|
|
72
|
-
inflight = null;
|
|
77
|
+
if ((inflight == null ? void 0 : inflight.promise) === promise) inflight = null;
|
|
73
78
|
});
|
|
74
|
-
|
|
79
|
+
inflight = {
|
|
80
|
+
backend,
|
|
81
|
+
promise
|
|
82
|
+
};
|
|
83
|
+
return promise;
|
|
75
84
|
}
|
|
76
85
|
function webbuilderPreloadUrl(surfaceBase) {
|
|
77
86
|
const raw = (surfaceBase || "").trim() || "http://localhost:5174/";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webbuilderWarmCache.js","sources":["../../../src/screens/WebBuilder/webbuilderWarmCache.ts"],"sourcesContent":["/**\n * Background warm cache for Web Builder surface auth.\n * Home (Build mode) mints ahead of time so navigate → WebView skips the\n * full-screen \"Preparing Web Builder…\" gate.\n */\n\nexport type WarmWebBuilderSession = {\n token: string;\n backend: string;\n warmedAt: number;\n};\n\nconst TTL_MS = 45 * 60 * 1000;\n\nlet session: WarmWebBuilderSession | null = null;\nlet inflight: Promise<WarmWebBuilderSession> | null = null;\n\nexport function getWarmWebBuilderSession(): WarmWebBuilderSession | null {\n if (!session?.token?.trim()) return null;\n if (Date.now() - session.warmedAt > TTL_MS) {\n session = null;\n return null;\n }\n return session;\n}\n\nexport function setWarmWebBuilderSession(next: WarmWebBuilderSession): void {\n session = {\n token: next.token.trim(),\n backend: next.backend.trim(),\n warmedAt: next.warmedAt || Date.now(),\n };\n}\n\nexport function clearWarmWebBuilderSession(): void {\n session = null;\n inflight = null;\n}\n\nexport type WarmWebBuilderInput = {\n graphqlUrl: string;\n orgName?: string | null;\n projectId?: string | null;\n tagId?: string | null;\n /** Prefer Apollo mint when provided (same session as chat). */\n obtainSystemToken?: () => Promise<string | null>;\n};\n\n/**\n * Ensure a system JWT + backend URL are ready for the WebBuilder WebView.\n * Dedupes concurrent callers (Home prewarm + WebBuilder mount).\n */\nexport async function warmWebBuilderSession(input: WarmWebBuilderInput): Promise<WarmWebBuilderSession> {\n const existing = getWarmWebBuilderSession();\n if (existing) return existing;\n if (inflight) return inflight;\n\n
|
|
1
|
+
{"version":3,"file":"webbuilderWarmCache.js","sources":["../../../src/screens/WebBuilder/webbuilderWarmCache.ts"],"sourcesContent":["/**\n * Background warm cache for Web Builder surface auth.\n * Home (Build mode) mints ahead of time so navigate → WebView skips the\n * full-screen \"Preparing Web Builder…\" gate.\n */\n\nexport type WarmWebBuilderSession = {\n token: string;\n backend: string;\n warmedAt: number;\n};\n\nconst TTL_MS = 45 * 60 * 1000;\n\nlet session: WarmWebBuilderSession | null = null;\nlet inflight: { backend: string; promise: Promise<WarmWebBuilderSession> } | null = null;\n\nfunction backendsMatch(a: string, b: string): boolean {\n return a.trim().replace(/\\/$/, '') === b.trim().replace(/\\/$/, '');\n}\n\nexport function getWarmWebBuilderSession(backend?: string): WarmWebBuilderSession | null {\n if (!session?.token?.trim()) return null;\n if (Date.now() - session.warmedAt > TTL_MS) {\n session = null;\n return null;\n }\n if (backend && !backendsMatch(session.backend, backend)) return null;\n return session;\n}\n\nexport function setWarmWebBuilderSession(next: WarmWebBuilderSession): void {\n session = {\n token: next.token.trim(),\n backend: next.backend.trim(),\n warmedAt: next.warmedAt || Date.now(),\n };\n}\n\nexport function clearWarmWebBuilderSession(): void {\n session = null;\n inflight = null;\n}\n\nexport type WarmWebBuilderInput = {\n graphqlUrl: string;\n orgName?: string | null;\n projectId?: string | null;\n tagId?: string | null;\n /** Prefer Apollo mint when provided (same session as chat). */\n obtainSystemToken?: () => Promise<string | null>;\n /**\n * Mint against `graphqlUrl`'s own org/project/env. Used when the surface\n * index lives on a different cluster than the mobile GRAPHQL_URL (canvas).\n */\n discoverScope?: boolean;\n};\n\n/**\n * Ensure a system JWT + backend URL are ready for the WebBuilder WebView.\n * Dedupes concurrent callers (Home prewarm + WebBuilder mount).\n */\nexport async function warmWebBuilderSession(input: WarmWebBuilderInput): Promise<WarmWebBuilderSession> {\n const backend = (input.graphqlUrl || '').trim();\n const existing = getWarmWebBuilderSession(backend);\n if (existing) return existing;\n if (inflight && inflight.backend === backend) return inflight.promise;\n\n const promise = (async () => {\n if (!backend) {\n throw new Error('GRAPHQL_URL is not configured');\n }\n\n let token: string | null = null;\n let apolloAttempted = false;\n if (input.obtainSystemToken && !input.discoverScope) {\n apolloAttempted = true;\n try {\n token = (await input.obtainSystemToken())?.trim() || null;\n } catch (err) {\n if (__DEV__) {\n // eslint-disable-next-line no-console\n console.warn('[WebBuilderWarm] Apollo mint failed, trying raw GraphQL:', err);\n }\n }\n }\n\n if (!token) {\n // Raw mint must send ismobile+authstrategy (see mintSurfaceSystemToken).\n // Prefer Apollo when org/project are ready — avoid racing raw mint before session is hydrated.\n if (apolloAttempted && !input.discoverScope && (!input.orgName?.trim() || !input.projectId?.trim())) {\n throw new Error('Waiting for org/project before minting Web Builder token');\n }\n const { mintSurfaceSystemToken } = await import('../../hooks/mintSurfaceSystemToken');\n const minted = await mintSurfaceSystemToken({\n graphqlUrl: backend,\n orgName: input.orgName,\n projectId: input.projectId,\n tagId: input.tagId,\n discoverScope: input.discoverScope,\n });\n token = minted.token.trim();\n }\n\n if (!token) {\n throw new Error('Could not obtain system token for Web Builder');\n }\n\n const next: WarmWebBuilderSession = {\n token,\n backend: backend,\n warmedAt: Date.now(),\n };\n setWarmWebBuilderSession(next);\n return next;\n })().finally(() => {\n if (inflight?.promise === promise) inflight = null;\n });\n inflight = { backend, promise };\n return promise;\n}\n\n/** Stable surface origin for background preload (no handoff query yet). */\nexport function webbuilderPreloadUrl(surfaceBase: string): string {\n const raw = (surfaceBase || '').trim() || 'http://localhost:5174/';\n try {\n const url = new URL(raw);\n url.searchParams.set('embed', 'mobile');\n // Drop any leftover handoff from a previous session.\n for (const key of [\n 'message',\n 'snapshotId',\n 'channelId',\n 'projectId',\n 'templateId',\n 'templateTitle',\n 'seedTemplate',\n 'token',\n 'code',\n 'state',\n ]) {\n url.searchParams.delete(key);\n }\n return url.toString();\n } catch {\n const sep = raw.includes('?') ? '&' : '?';\n return `${raw}${sep}embed=mobile`;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {CommonActions}from'@react-navigation/native';import {navigationRef}from'@common-stack/client-react';var __defProp = Object.defineProperty;
|
|
2
|
+
var __defProps = Object.defineProperties;
|
|
3
|
+
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
4
|
+
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __spreadValues = (a, b) => {
|
|
9
|
+
for (var prop in b || (b = {}))
|
|
10
|
+
if (__hasOwnProp.call(b, prop))
|
|
11
|
+
__defNormalProp(a, prop, b[prop]);
|
|
12
|
+
if (__getOwnPropSymbols)
|
|
13
|
+
for (var prop of __getOwnPropSymbols(b)) {
|
|
14
|
+
if (__propIsEnum.call(b, prop))
|
|
15
|
+
__defNormalProp(a, prop, b[prop]);
|
|
16
|
+
}
|
|
17
|
+
return a;
|
|
18
|
+
};
|
|
19
|
+
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
20
|
+
function navigateToNewChatHome(navigation, orgName) {
|
|
21
|
+
var _a;
|
|
22
|
+
const trimmed = typeof orgName === "string" && orgName.trim() ? orgName.trim() : void 0;
|
|
23
|
+
const params = __spreadProps(__spreadValues({}, trimmed ? {
|
|
24
|
+
orgName: trimmed
|
|
25
|
+
} : {}), {
|
|
26
|
+
newChatNonce: Date.now()
|
|
27
|
+
});
|
|
28
|
+
const nested = {
|
|
29
|
+
name: "MainStack",
|
|
30
|
+
params: {
|
|
31
|
+
screen: "MainStack.Layout.Home",
|
|
32
|
+
params
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
if (navigationRef.isReady()) {
|
|
36
|
+
navigationRef.navigate(nested.name, nested.params);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
(_a = navigation == null ? void 0 : navigation.dispatch) == null ? void 0 : _a.call(navigation, CommonActions.navigate(nested));
|
|
40
|
+
}export{navigateToNewChatHome};//# sourceMappingURL=navigateToNewChatHome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigateToNewChatHome.js","sources":["../../src/utils/navigateToNewChatHome.ts"],"sourcesContent":["import { CommonActions } from '@react-navigation/native';\nimport { navigationRef } from '@common-stack/client-react';\n\n/**\n * Open the Home composer as a fresh chat.\n *\n * Chat History / Chat / Apps live on the root stack next to the `MainStack`\n * drawer. `navigate('MainStack.Layout.Home')` from those screens looks for a\n * sibling that does not exist, so the New chat header control was a no-op.\n * Target the drawer screen first, then Home inside it — same path as `NewChat`.\n */\nexport function navigateToNewChatHome(\n navigation?: { dispatch?: (action: unknown) => void } | null,\n orgName?: string | null,\n) {\n const trimmed = typeof orgName === 'string' && orgName.trim() ? orgName.trim() : undefined;\n const params = {\n ...(trimmed ? { orgName: trimmed } : {}),\n newChatNonce: Date.now(),\n };\n\n const nested = {\n name: 'MainStack',\n params: {\n screen: 'MainStack.Layout.Home',\n params,\n },\n };\n\n if (navigationRef.isReady()) {\n navigationRef.navigate(nested.name as never, nested.params as never);\n return;\n }\n\n navigation?.dispatch?.(CommonActions.navigate(nested));\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAWgB,SAAA,qBAAA,CAAsB,YAE5B,OAAyB,EAAA;AAbnC,EAAA,IAAA,EAAA;AAcE,EAAM,MAAA,OAAA,GAAU,OAAO,OAAY,KAAA,QAAA,IAAY,QAAQ,IAAK,EAAA,GAAI,OAAQ,CAAA,IAAA,EAAS,GAAA,MAAA;AACjF,EAAM,MAAA,MAAA,GAAS,iCACT,OAAU,GAAA;AAAA,IACZ,OAAS,EAAA;AAAA,GACX,GAAI,EAHS,CAAA,EAAA;AAAA,IAIb,YAAA,EAAc,KAAK,GAAI;AAAA,GACzB,CAAA;AACA,EAAA,MAAM,MAAS,GAAA;AAAA,IACb,IAAM,EAAA,WAAA;AAAA,IACN,MAAQ,EAAA;AAAA,MACN,MAAQ,EAAA,uBAAA;AAAA,MACR;AAAA;AACF,GACF;AACA,EAAI,IAAA,aAAA,CAAc,SAAW,EAAA;AAC3B,IAAA,aAAA,CAAc,QAAS,CAAA,MAAA,CAAO,IAAe,EAAA,MAAA,CAAO,MAAe,CAAA;AACnE,IAAA;AAAA;AAEF,EAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,QAAZ,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,UAAA,EAAuB,aAAc,CAAA,QAAA,CAAS,MAAM,CAAA,CAAA;AACtD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adminide-stack/yantra-mobile",
|
|
3
|
-
"version": "12.0.44
|
|
3
|
+
"version": "12.0.44",
|
|
4
4
|
"description": "Sample core for higher packages to depend on",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"author": "CDMBase LLC",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"uuid": "^9.0.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
|
-
"common": "12.0.44
|
|
28
|
+
"common": "^12.0.44"
|
|
29
29
|
},
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@admin-layout/gluestack-ui-mobile": "*",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"@messenger-box/platform-mobile": "*",
|
|
42
42
|
"@react-native-async-storage/async-storage": "*",
|
|
43
43
|
"@react-navigation/native": "*",
|
|
44
|
-
"common": "12.0.
|
|
44
|
+
"common": "12.0.42",
|
|
45
45
|
"expo-constants": "*",
|
|
46
46
|
"expo-secure-store": "*",
|
|
47
47
|
"lodash": "*",
|
|
@@ -56,5 +56,5 @@
|
|
|
56
56
|
"typescript": {
|
|
57
57
|
"definition": "lib/index.d.ts"
|
|
58
58
|
},
|
|
59
|
-
"gitHead": "
|
|
59
|
+
"gitHead": "d8d2e8ca98b02cada2c5fce40ffa90031c6b8776"
|
|
60
60
|
}
|