@adminide-stack/yantra-mobile 12.0.32-alpha.4 → 12.0.32
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/AuthenticatedFetch.js +77 -0
- package/lib/bridge/AuthenticatedFetch.js.map +1 -0
- package/lib/bridge/BridgeDebugger.js +65 -0
- package/lib/bridge/BridgeDebugger.js.map +1 -0
- package/lib/bridge/CancellableRequest.js +38 -0
- package/lib/bridge/CancellableRequest.js.map +1 -0
- package/lib/bridge/ChunkedMessageHandler.js +71 -0
- package/lib/bridge/ChunkedMessageHandler.js.map +1 -0
- package/lib/bridge/NativeWebViewBridge.js +256 -0
- package/lib/bridge/NativeWebViewBridge.js.map +1 -0
- package/lib/bridge/TypedBridge.js +8 -0
- package/lib/bridge/TypedBridge.js.map +1 -0
- package/lib/bridge/WebViewManager.js +57 -0
- package/lib/bridge/WebViewManager.js.map +1 -0
- package/lib/bridge/handlers/AnalyticsBridgeHandler.js +23 -0
- package/lib/bridge/handlers/AnalyticsBridgeHandler.js.map +1 -0
- package/lib/bridge/handlers/AuthBridgeHandler.js +49 -0
- package/lib/bridge/handlers/AuthBridgeHandler.js.map +1 -0
- package/lib/bridge/handlers/NavigationBridgeHandler.js +62 -0
- package/lib/bridge/handlers/NavigationBridgeHandler.js.map +1 -0
- package/lib/bridge/readAuth0Session.js +51 -0
- package/lib/bridge/readAuth0Session.js.map +1 -0
- package/lib/bridge/resolveMobileWebUrl.js +35 -0
- package/lib/bridge/resolveMobileWebUrl.js.map +1 -0
- package/lib/bridge/types.js +12 -0
- package/lib/bridge/types.js.map +1 -0
- package/lib/bridge/webBridgeBootstrap.js +185 -0
- package/lib/bridge/webBridgeBootstrap.js.map +1 -0
- package/lib/components/CustomDrawer.js +6 -2
- package/lib/components/CustomDrawer.js.map +1 -1
- package/lib/compute.js +54 -1
- package/lib/compute.js.map +1 -1
- package/lib/config/env-config.js +4 -0
- package/lib/config/env-config.js.map +1 -1
- package/lib/hooks/mintSurfaceSystemToken.js +260 -0
- package/lib/hooks/mintSurfaceSystemToken.js.map +1 -0
- package/lib/hooks/useObtainSystemToken.js +76 -0
- package/lib/hooks/useObtainSystemToken.js.map +1 -0
- package/lib/hooks/usePrerequisiteIds.js +97 -54
- package/lib/hooks/usePrerequisiteIds.js.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/routes.json +55 -0
- package/lib/screens/Chat/index.js +41 -10
- package/lib/screens/Chat/index.js.map +1 -1
- package/lib/screens/Home/HomeScreen.js +31 -11
- package/lib/screens/Home/HomeScreen.js.map +1 -1
- package/lib/screens/WebBuilder/WebViewWithNavigation.js +20 -0
- package/lib/screens/WebBuilder/WebViewWithNavigation.js.map +1 -0
- package/lib/screens/WebBuilder/index.js +345 -0
- package/lib/screens/WebBuilder/index.js.map +1 -0
- package/lib/theme/mobileTokens.js +3 -1
- package/lib/theme/mobileTokens.js.map +1 -1
- package/package.json +11 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomDrawer.js","sources":["../../src/components/CustomDrawer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Image, Pressable, StyleSheet, View } from 'react-native';\nimport { DrawerContentScrollView } from '@react-navigation/drawer';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { IUserState } from '@adminide-stack/core';\nimport { Store, logoutAndRedirect, userSelector } from '@adminide-stack/user-auth0-client';\nimport { useAccountProfileQuery } from 'common/graphql';\nimport { mobileTokens } from '../theme/mobileTokens';\n\nconst APP_ICON = require('../assets/icon.png');\n\n/** Standard neutral drawer (iOS/Material-like): lets the logo stay the only strong color accent. */\nconst PALETTE = {\n bg: mobileTokens.color.bg,\n surface: mobileTokens.color.surface,\n border: mobileTokens.color.border,\n text: mobileTokens.color.text,\n textSecondary: mobileTokens.color.textMuted,\n icon: '#334155',\n rowHighlight: mobileTokens.color.primarySoft,\n} as const;\n\nfunction routeLabel(descriptor: any, route: any): string {\n const optLabel = descriptor?.options?.drawerLabel;\n if (typeof optLabel === 'string' && optLabel.trim()) return optLabel;\n const title = descriptor?.options?.title;\n if (typeof title === 'string' && title.trim()) return title;\n const tail =\n String(route?.name ?? '')\n .split('.')\n .pop() || 'Route';\n return tail === 'Chat' ? 'Chat' : tail;\n}\n\nfunction isVisibleDrawerRoute(route: any, descriptor: any): boolean {\n const routeName = String(route?.name ?? '');\n const itemStyle = descriptor?.options?.drawerItemStyle as any;\n if (itemStyle && itemStyle.display === 'none') return false;\n return true;\n}\n\n/** Auth0 / Redux user slice exposes OIDC claims under `profile` (see terminal authUser shape). */\ntype Auth0ProfileClaims = {\n email?: string;\n name?: string;\n nickname?: string;\n picture?: string;\n given_name?: string;\n family_name?: string;\n};\n\nfunction getInitials(name: string): string {\n const cleaned = name.trim();\n if (!cleaned) return 'A';\n const parts = cleaned.split(/\\s+/).filter(Boolean);\n if (parts.length === 1) return parts[0].slice(0, 1).toUpperCase();\n return `${parts[0].slice(0, 1)}${parts[1].slice(0, 1)}`.toUpperCase();\n}\n\nfunction pickPrimaryDisplayName(authUser: IUserState | null | undefined): string {\n const u = authUser as IUserState & {\n profile?: Auth0ProfileClaims;\n givenName?: string;\n familyName?: string;\n name?: string;\n nickname?: string;\n email?: string;\n };\n const p = u?.profile;\n const email = (p?.email ?? u?.email ?? '').trim();\n const emailLower = email.toLowerCase();\n\n const given = (p?.given_name ?? u?.givenName ?? '').trim();\n const family = (p?.family_name ?? u?.familyName ?? '').trim();\n /** 1) Full / partial legal name from given + family (given-only counts). */\n const fromParts = [given, family].filter(Boolean).join(' ').trim();\n if (fromParts) return fromParts;\n\n const nickname = (p?.nickname ?? u?.nickname ?? '').trim();\n const legalName = (p?.name ?? u?.name ?? '').trim();\n const legalLower = legalName.toLowerCase();\n\n /** 2) OIDC `name` when it is not just the email (often a proper display name). */\n if (legalName && legalLower !== emailLower) return legalName;\n\n /** 3) Username / nickname. */\n if (nickname) return nickname;\n\n /** 4) Fallback to `name` even when it duplicates email. */\n if (legalName) return legalName;\n\n const local = email.includes('@') ? (email.split('@')[0] ?? '').trim() : '';\n return local || 'Account';\n}\n\nfunction pickAuthEmail(authUser: IUserState | null | undefined): string {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; email?: string };\n return (u?.profile?.email ?? u?.email ?? '').trim();\n}\n\nfunction pickAuthPicture(authUser: IUserState | null | undefined): string | null {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; picture?: string };\n const pic = u?.profile?.picture ?? u?.picture;\n return typeof pic === 'string' && pic.trim() ? pic.trim() : null;\n}\n\nfunction DrawerProfileHeader({ isAuthenticated }: { isAuthenticated: boolean }) {\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'all',\n skip: !isAuthenticated,\n });\n\n const photoUrl = useMemo(() => {\n const fromProfile = profileData?.accountProfile?.photos?.find((p) => p?.url)?.url;\n if (fromProfile) return fromProfile;\n return pickAuthPicture(authUser);\n }, [profileData?.accountProfile?.photos, authUser]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n\n const subtitle = useMemo(() => {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; nickname?: string };\n const nick = (u?.profile?.nickname ?? u?.nickname ?? '').trim();\n if (!nick || nick === displayName.trim()) return null;\n return `@${nick.replace(/^@/, '')}`;\n }, [authUser, displayName]);\n\n if (!isAuthenticated) return null;\n\n return (\n <View style={styles.profileCard}>\n <View style={styles.profileCardInner}>\n <View style={styles.avatarOuter}>\n {photoUrl ? (\n <Image source={{ uri: photoUrl }} style={styles.avatarImage} resizeMode=\"cover\" />\n ) : (\n <View style={styles.avatarPlaceholder}>\n <Text style={styles.avatarInitials}>{getInitials(displayName)}</Text>\n </View>\n )}\n </View>\n <View style={styles.profileMeta}>\n <Text style={styles.profileName} numberOfLines={2}>\n {displayName}\n </Text>\n {subtitle ? (\n <Text style={styles.profileUsername} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n {email ? (\n <Text style={styles.profileEmail} numberOfLines={1}>\n {email}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\nexport default function CustomDrawer(props: any) {\n const { state, descriptors, navigation } = props;\n /** Mirrors layout settings from `navigation.js` (`defaultHeaderProps.logout`). */\n const showLogout = props.logout !== false;\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const route = useRoute<any>();\n const insets = useSafeAreaInsets();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const isAuthenticated = useMemo(() => {\n if (!authUser) return false;\n const email = pickAuthEmail(authUser);\n const name = pickPrimaryDisplayName(authUser);\n return Boolean(email || name !== 'Account');\n }, [authUser]);\n const visibleRoutes = (state?.routes ?? []).filter((r: any) => isVisibleDrawerRoute(r, descriptors?.[r.key]));\n\n const scrollContentStyle = useMemo(\n () => [\n styles.contentWrap,\n {\n // Drawer scroll views often don't reserve status-bar space reliably — combine inset + breathing room.\n paddingTop: Math.max(insets.top, 14) + 10,\n },\n ],\n [insets.top],\n );\n\n const handleLogout = useCallback(async () => {\n if (isLoggingOut) return;\n setIsLoggingOut(true);\n try {\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n navigation?.closeDrawer?.();\n } catch (error) {\n console.error('[CustomDrawer] Logout failed:', error);\n } finally {\n setIsLoggingOut(false);\n }\n }, [dispatch, isLoggingOut, navigation]);\n\n const handleLogin = useCallback(() => {\n navigation?.closeDrawer?.();\n try {\n navigation?.navigate?.('MainStack.Login');\n } catch {\n navigation?.getParent?.()?.navigate?.('MainStack', { screen: 'MainStack.Login' });\n }\n }, [navigation]);\n\n useEffect(() => {\n // Prevent stale \"Logging out...\" state if the user logs back in and returns to the drawer.\n if (authUser) {\n setIsLoggingOut(false);\n }\n }, [authUser]);\n\n return (\n <SafeAreaView style={styles.safeArea} edges={['left', 'bottom']}>\n <View style={styles.drawerColumn}>\n <DrawerContentScrollView {...props} style={styles.scroll} contentContainerStyle={scrollContentStyle}>\n <View style={styles.brandBlock}>\n <View style={styles.brandStrip}>\n <Image source={APP_ICON} style={styles.brandIconSmall} resizeMode=\"contain\" />\n <Text style={styles.brandStripTitle}>Yantra</Text>\n </View>\n </View>\n\n <DrawerProfileHeader isAuthenticated={isAuthenticated} />\n\n {isAuthenticated ? <Text style={styles.sectionLabel}>Menu</Text> : null}\n {isAuthenticated ? (\n <View style={styles.menuGroup}>\n {visibleRoutes.map((r: any) => {\n const descriptor = descriptors?.[r.key];\n const focused = state?.index === state?.routes?.findIndex((x: any) => x.key === r.key);\n const label = routeLabel(descriptor, r);\n const iconFn = descriptor?.options?.drawerIcon;\n\n return (\n <Pressable\n key={r.key}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: focused }}\n onPress={() => {\n if (isLoggingOut) return;\n const params = route?.params?.orgName\n ? { orgName: route.params.orgName }\n : undefined;\n navigation.navigate(r.name, params);\n }}\n style={({ pressed }) => [\n styles.navRow,\n focused ? styles.navRowFocused : styles.navRowIdle,\n pressed && styles.navRowPressed,\n ]}\n >\n <View\n style={[\n styles.navIconCircle,\n focused ? styles.navIconCircleFocused : styles.navIconCircleIdle,\n ]}\n >\n {typeof iconFn === 'function' ? (\n iconFn({\n color: focused ? PALETTE.text : PALETTE.icon,\n size: 22,\n focused,\n })\n ) : (\n <Ionicons\n name={\n label.trim().toLowerCase() === 'chat'\n ? 'chatbubbles-outline'\n : 'home-outline'\n }\n size={22}\n color={focused ? PALETTE.text : PALETTE.icon}\n />\n )}\n </View>\n <Text style={[styles.navLabel, focused && styles.navLabelFocused]}>\n {label}\n </Text>\n <Ionicons\n name=\"chevron-forward\"\n size={18}\n color=\"#9ca3af\"\n style={styles.navChevron}\n />\n </Pressable>\n );\n })}\n </View>\n ) : null}\n {!isAuthenticated ? (\n <View style={styles.loggedOutStateCard}>\n <View style={styles.loggedOutStateIconWrap}>\n <Ionicons\n name=\"shield-checkmark-outline\"\n size={22}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={styles.loggedOutStateTitle}>Sign in to continue</Text>\n <Text style={styles.loggedOutStateSubtitle}>\n Access your chat history, profile, and personalized workspace after login.\n </Text>\n <Pressable\n onPress={handleLogin}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log in\"\n style={({ pressed }) => [\n styles.loggedOutStateButton,\n pressed && styles.loggedOutStateButtonPressed,\n ]}\n >\n <Ionicons name=\"log-in-outline\" size={18} color={mobileTokens.color.surface} />\n <Text style={styles.loggedOutStateButtonLabel}>Log in</Text>\n </Pressable>\n </View>\n ) : null}\n </DrawerContentScrollView>\n\n {showLogout && isAuthenticated ? (\n <View style={styles.logoutFooter}>\n <Pressable\n onPress={handleLogout}\n disabled={isLoggingOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log out\"\n style={({ pressed }) => [\n styles.logoutButton,\n pressed && !isLoggingOut && styles.logoutButtonPressed,\n ]}\n >\n <View style={styles.logoutIconCircle}>\n {isLoggingOut ? (\n <ActivityIndicator size=\"small\" color=\"#b91c1c\" />\n ) : (\n <Ionicons name=\"log-out-outline\" size={20} color=\"#b91c1c\" />\n )}\n </View>\n <Text style={styles.logoutLabel}>{isLoggingOut ? 'Logging out...' : 'Log out'}</Text>\n </Pressable>\n </View>\n ) : showLogout ? (\n <View style={styles.logoutFooter}>\n <Text style={styles.loggedOutFooterHint}>You are currently signed out</Text>\n </View>\n ) : null}\n </View>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: PALETTE.bg,\n },\n drawerColumn: {\n flex: 1,\n },\n scroll: {\n flex: 1,\n },\n contentWrap: {\n flexGrow: 1,\n paddingBottom: 24,\n paddingHorizontal: 18,\n },\n brandBlock: {\n marginBottom: 16,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: PALETTE.border,\n },\n brandStrip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n brandIconSmall: {\n width: 36,\n height: 36,\n borderRadius: 10,\n },\n brandStripTitle: {\n color: PALETTE.text,\n fontSize: 22,\n fontWeight: '800',\n letterSpacing: -0.6,\n },\n profileCard: {\n borderRadius: 12,\n overflow: 'hidden',\n marginBottom: 20,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n },\n profileCardInner: {\n flexDirection: 'row',\n padding: 16,\n gap: 14,\n },\n avatarOuter: {\n width: 56,\n height: 56,\n borderRadius: 28,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarImage: {\n width: '100%',\n height: '100%',\n },\n avatarPlaceholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarInitials: {\n fontSize: 20,\n fontWeight: '700',\n color: mobileTokens.color.primary,\n letterSpacing: 0.3,\n },\n profileMeta: {\n flex: 1,\n minWidth: 0,\n justifyContent: 'center',\n },\n profileName: {\n fontSize: 19,\n fontWeight: '600',\n color: PALETTE.text,\n letterSpacing: -0.3,\n lineHeight: 24,\n },\n profileUsername: {\n marginTop: 4,\n fontSize: 14,\n fontWeight: '500',\n color: PALETTE.textSecondary,\n letterSpacing: -0.1,\n },\n profileEmail: {\n marginTop: 6,\n fontSize: 13,\n fontWeight: '400',\n color: PALETTE.textSecondary,\n },\n sectionLabel: {\n fontSize: 11,\n fontWeight: '600',\n color: '#9ca3af',\n textTransform: 'uppercase',\n letterSpacing: 0.6,\n marginBottom: 8,\n marginLeft: 2,\n },\n menuGroup: {\n gap: 8,\n },\n loggedOutStateCard: {\n marginTop: 18,\n borderRadius: 14,\n paddingHorizontal: 16,\n paddingVertical: 18,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n alignItems: 'center',\n gap: 10,\n },\n loggedOutStateIconWrap: {\n width: 44,\n height: 44,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n loggedOutStateTitle: {\n fontSize: 17,\n fontWeight: '700',\n color: PALETTE.text,\n letterSpacing: -0.2,\n },\n loggedOutStateSubtitle: {\n fontSize: 13,\n lineHeight: 19,\n color: PALETTE.textSecondary,\n textAlign: 'center',\n paddingHorizontal: 4,\n },\n loggedOutStateButton: {\n marginTop: 4,\n borderRadius: 12,\n backgroundColor: mobileTokens.color.primary,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n loggedOutStateButtonPressed: {\n opacity: 0.88,\n },\n loggedOutStateButtonLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: mobileTokens.color.surface,\n },\n navRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 14,\n borderRadius: 10,\n gap: 12,\n },\n navRowIdle: {\n backgroundColor: PALETTE.surface,\n },\n navRowFocused: {\n backgroundColor: PALETTE.rowHighlight,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n navRowPressed: {\n opacity: 0.88,\n },\n navIconCircle: {\n width: 40,\n height: 40,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n },\n navIconCircleIdle: {\n backgroundColor: 'transparent',\n },\n navIconCircleFocused: {\n backgroundColor: 'rgba(79, 70, 229, 0.10)',\n },\n navLabel: {\n flex: 1,\n fontSize: 16,\n fontWeight: '500',\n color: PALETTE.text,\n },\n navLabelFocused: {\n fontWeight: '600',\n color: mobileTokens.color.primary,\n },\n navChevron: {\n marginLeft: 'auto',\n },\n logoutFooter: {\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: PALETTE.border,\n paddingHorizontal: 18,\n paddingTop: 10,\n paddingBottom: 8,\n backgroundColor: PALETTE.surface,\n },\n logoutButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingVertical: 12,\n paddingHorizontal: 12,\n borderRadius: 14,\n },\n logoutIconCircle: {\n width: 40,\n height: 40,\n borderRadius: 12,\n backgroundColor: '#fef2f2',\n alignItems: 'center',\n justifyContent: 'center',\n },\n logoutButtonPressed: {\n opacity: 0.75,\n backgroundColor: '#fef2f2',\n },\n logoutLabel: {\n fontSize: 16,\n fontWeight: '600',\n color: '#b91c1c',\n },\n loggedOutFooterHint: {\n fontSize: 12,\n textAlign: 'center',\n color: PALETTE.textSecondary,\n paddingVertical: 8,\n },\n});\n"],"names":["_a"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CustomDrawer.js","sources":["../../src/components/CustomDrawer.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { ActivityIndicator, Image, Pressable, StyleSheet, View } from 'react-native';\nimport { DrawerContentScrollView } from '@react-navigation/drawer';\nimport { Ionicons } from '@expo/vector-icons';\nimport { Text } from '@admin-layout/gluestack-ui-mobile';\nimport { useRoute } from '@react-navigation/native';\nimport { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';\nimport { useDispatch, useSelector } from 'react-redux';\nimport type { IUserState } from '@adminide-stack/core';\nimport { Store, logoutAndRedirect, userSelector } from '@adminide-stack/user-auth0-client';\nimport { useAccountProfileQuery } from 'common/graphql';\nimport { mobileTokens } from '../theme/mobileTokens';\n\nconst APP_ICON = require('../assets/icon.png');\n\n/** Standard neutral drawer (iOS/Material-like): lets the logo stay the only strong color accent. */\nconst PALETTE = {\n bg: mobileTokens.color.bg,\n surface: mobileTokens.color.surface,\n border: mobileTokens.color.border,\n text: mobileTokens.color.text,\n textSecondary: mobileTokens.color.textMuted,\n icon: '#334155',\n rowHighlight: mobileTokens.color.primarySoft,\n} as const;\n\nfunction routeLabel(descriptor: any, route: any): string {\n const optLabel = descriptor?.options?.drawerLabel;\n if (typeof optLabel === 'string' && optLabel.trim()) return optLabel;\n const title = descriptor?.options?.title;\n if (typeof title === 'string' && title.trim()) return title;\n const tail =\n String(route?.name ?? '')\n .split('.')\n .pop() || 'Route';\n return tail === 'Chat' ? 'Chat' : tail;\n}\n\nfunction isVisibleDrawerRoute(route: any, descriptor: any): boolean {\n const routeName = String(route?.name ?? '');\n if (routeName.includes('WebBuilder') || routeName.toLowerCase().includes('webbuilder')) {\n return false;\n }\n const itemStyle = descriptor?.options?.drawerItemStyle as any;\n if (itemStyle && itemStyle.display === 'none') return false;\n if (descriptor?.options?.hideInMenu === true) return false;\n return true;\n}\n\n/** Auth0 / Redux user slice exposes OIDC claims under `profile` (see terminal authUser shape). */\ntype Auth0ProfileClaims = {\n email?: string;\n name?: string;\n nickname?: string;\n picture?: string;\n given_name?: string;\n family_name?: string;\n};\n\nfunction getInitials(name: string): string {\n const cleaned = name.trim();\n if (!cleaned) return 'A';\n const parts = cleaned.split(/\\s+/).filter(Boolean);\n if (parts.length === 1) return parts[0].slice(0, 1).toUpperCase();\n return `${parts[0].slice(0, 1)}${parts[1].slice(0, 1)}`.toUpperCase();\n}\n\nfunction pickPrimaryDisplayName(authUser: IUserState | null | undefined): string {\n const u = authUser as IUserState & {\n profile?: Auth0ProfileClaims;\n givenName?: string;\n familyName?: string;\n name?: string;\n nickname?: string;\n email?: string;\n };\n const p = u?.profile;\n const email = (p?.email ?? u?.email ?? '').trim();\n const emailLower = email.toLowerCase();\n\n const given = (p?.given_name ?? u?.givenName ?? '').trim();\n const family = (p?.family_name ?? u?.familyName ?? '').trim();\n /** 1) Full / partial legal name from given + family (given-only counts). */\n const fromParts = [given, family].filter(Boolean).join(' ').trim();\n if (fromParts) return fromParts;\n\n const nickname = (p?.nickname ?? u?.nickname ?? '').trim();\n const legalName = (p?.name ?? u?.name ?? '').trim();\n const legalLower = legalName.toLowerCase();\n\n /** 2) OIDC `name` when it is not just the email (often a proper display name). */\n if (legalName && legalLower !== emailLower) return legalName;\n\n /** 3) Username / nickname. */\n if (nickname) return nickname;\n\n /** 4) Fallback to `name` even when it duplicates email. */\n if (legalName) return legalName;\n\n const local = email.includes('@') ? (email.split('@')[0] ?? '').trim() : '';\n return local || 'Account';\n}\n\nfunction pickAuthEmail(authUser: IUserState | null | undefined): string {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; email?: string };\n return (u?.profile?.email ?? u?.email ?? '').trim();\n}\n\nfunction pickAuthPicture(authUser: IUserState | null | undefined): string | null {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; picture?: string };\n const pic = u?.profile?.picture ?? u?.picture;\n return typeof pic === 'string' && pic.trim() ? pic.trim() : null;\n}\n\nfunction DrawerProfileHeader({ isAuthenticated }: { isAuthenticated: boolean }) {\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const { data: profileData } = useAccountProfileQuery({\n fetchPolicy: 'cache-first',\n errorPolicy: 'all',\n skip: !isAuthenticated,\n });\n\n const photoUrl = useMemo(() => {\n const fromProfile = profileData?.accountProfile?.photos?.find((p) => p?.url)?.url;\n if (fromProfile) return fromProfile;\n return pickAuthPicture(authUser);\n }, [profileData?.accountProfile?.photos, authUser]);\n\n const displayName = useMemo(() => pickPrimaryDisplayName(authUser), [authUser]);\n\n const email = useMemo(() => pickAuthEmail(authUser), [authUser]);\n\n const subtitle = useMemo(() => {\n const u = authUser as IUserState & { profile?: Auth0ProfileClaims; nickname?: string };\n const nick = (u?.profile?.nickname ?? u?.nickname ?? '').trim();\n if (!nick || nick === displayName.trim()) return null;\n return `@${nick.replace(/^@/, '')}`;\n }, [authUser, displayName]);\n\n if (!isAuthenticated) return null;\n\n return (\n <View style={styles.profileCard}>\n <View style={styles.profileCardInner}>\n <View style={styles.avatarOuter}>\n {photoUrl ? (\n <Image source={{ uri: photoUrl }} style={styles.avatarImage} resizeMode=\"cover\" />\n ) : (\n <View style={styles.avatarPlaceholder}>\n <Text style={styles.avatarInitials}>{getInitials(displayName)}</Text>\n </View>\n )}\n </View>\n <View style={styles.profileMeta}>\n <Text style={styles.profileName} numberOfLines={2}>\n {displayName}\n </Text>\n {subtitle ? (\n <Text style={styles.profileUsername} numberOfLines={1}>\n {subtitle}\n </Text>\n ) : null}\n {email ? (\n <Text style={styles.profileEmail} numberOfLines={1}>\n {email}\n </Text>\n ) : null}\n </View>\n </View>\n </View>\n );\n}\n\nexport default function CustomDrawer(props: any) {\n const { state, descriptors, navigation } = props;\n /** Mirrors layout settings from `navigation.js` (`defaultHeaderProps.logout`). */\n const showLogout = props.logout !== false;\n const dispatch = useDispatch();\n const authUser = useSelector<Store.Auth, IUserState>(userSelector);\n const route = useRoute<any>();\n const insets = useSafeAreaInsets();\n const [isLoggingOut, setIsLoggingOut] = useState(false);\n const isAuthenticated = useMemo(() => {\n if (!authUser) return false;\n const email = pickAuthEmail(authUser);\n const name = pickPrimaryDisplayName(authUser);\n return Boolean(email || name !== 'Account');\n }, [authUser]);\n const visibleRoutes = (state?.routes ?? []).filter((r: any) => isVisibleDrawerRoute(r, descriptors?.[r.key]));\n\n const scrollContentStyle = useMemo(\n () => [\n styles.contentWrap,\n {\n // Drawer scroll views often don't reserve status-bar space reliably — combine inset + breathing room.\n paddingTop: Math.max(insets.top, 14) + 10,\n },\n ],\n [insets.top],\n );\n\n const handleLogout = useCallback(async () => {\n if (isLoggingOut) return;\n setIsLoggingOut(true);\n try {\n await Promise.resolve(dispatch(logoutAndRedirect() as any));\n navigation?.closeDrawer?.();\n } catch (error) {\n console.error('[CustomDrawer] Logout failed:', error);\n } finally {\n setIsLoggingOut(false);\n }\n }, [dispatch, isLoggingOut, navigation]);\n\n const handleLogin = useCallback(() => {\n navigation?.closeDrawer?.();\n try {\n navigation?.navigate?.('MainStack.Login');\n } catch {\n navigation?.getParent?.()?.navigate?.('MainStack', { screen: 'MainStack.Login' });\n }\n }, [navigation]);\n\n useEffect(() => {\n // Prevent stale \"Logging out...\" state if the user logs back in and returns to the drawer.\n if (authUser) {\n setIsLoggingOut(false);\n }\n }, [authUser]);\n\n return (\n <SafeAreaView style={styles.safeArea} edges={['left', 'bottom']}>\n <View style={styles.drawerColumn}>\n <DrawerContentScrollView {...props} style={styles.scroll} contentContainerStyle={scrollContentStyle}>\n <View style={styles.brandBlock}>\n <View style={styles.brandStrip}>\n <Image source={APP_ICON} style={styles.brandIconSmall} resizeMode=\"contain\" />\n <Text style={styles.brandStripTitle}>Yantra</Text>\n </View>\n </View>\n\n <DrawerProfileHeader isAuthenticated={isAuthenticated} />\n\n {isAuthenticated ? <Text style={styles.sectionLabel}>Menu</Text> : null}\n {isAuthenticated ? (\n <View style={styles.menuGroup}>\n {visibleRoutes.map((r: any) => {\n const descriptor = descriptors?.[r.key];\n const focused = state?.index === state?.routes?.findIndex((x: any) => x.key === r.key);\n const label = routeLabel(descriptor, r);\n const iconFn = descriptor?.options?.drawerIcon;\n\n return (\n <Pressable\n key={r.key}\n accessibilityRole=\"button\"\n accessibilityState={{ selected: focused }}\n onPress={() => {\n if (isLoggingOut) return;\n const params = route?.params?.orgName\n ? { orgName: route.params.orgName }\n : undefined;\n navigation.navigate(r.name, params);\n }}\n style={({ pressed }) => [\n styles.navRow,\n focused ? styles.navRowFocused : styles.navRowIdle,\n pressed && styles.navRowPressed,\n ]}\n >\n <View\n style={[\n styles.navIconCircle,\n focused ? styles.navIconCircleFocused : styles.navIconCircleIdle,\n ]}\n >\n {typeof iconFn === 'function' ? (\n iconFn({\n color: focused ? PALETTE.text : PALETTE.icon,\n size: 22,\n focused,\n })\n ) : (\n <Ionicons\n name={\n label.trim().toLowerCase() === 'chat'\n ? 'chatbubbles-outline'\n : 'home-outline'\n }\n size={22}\n color={focused ? PALETTE.text : PALETTE.icon}\n />\n )}\n </View>\n <Text style={[styles.navLabel, focused && styles.navLabelFocused]}>\n {label}\n </Text>\n <Ionicons\n name=\"chevron-forward\"\n size={18}\n color=\"#9ca3af\"\n style={styles.navChevron}\n />\n </Pressable>\n );\n })}\n </View>\n ) : null}\n {!isAuthenticated ? (\n <View style={styles.loggedOutStateCard}>\n <View style={styles.loggedOutStateIconWrap}>\n <Ionicons\n name=\"shield-checkmark-outline\"\n size={22}\n color={mobileTokens.color.primary}\n />\n </View>\n <Text style={styles.loggedOutStateTitle}>Sign in to continue</Text>\n <Text style={styles.loggedOutStateSubtitle}>\n Access your chat history, profile, and personalized workspace after login.\n </Text>\n <Pressable\n onPress={handleLogin}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log in\"\n style={({ pressed }) => [\n styles.loggedOutStateButton,\n pressed && styles.loggedOutStateButtonPressed,\n ]}\n >\n <Ionicons name=\"log-in-outline\" size={18} color={mobileTokens.color.surface} />\n <Text style={styles.loggedOutStateButtonLabel}>Log in</Text>\n </Pressable>\n </View>\n ) : null}\n </DrawerContentScrollView>\n\n {showLogout && isAuthenticated ? (\n <View style={styles.logoutFooter}>\n <Pressable\n onPress={handleLogout}\n disabled={isLoggingOut}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Log out\"\n style={({ pressed }) => [\n styles.logoutButton,\n pressed && !isLoggingOut && styles.logoutButtonPressed,\n ]}\n >\n <View style={styles.logoutIconCircle}>\n {isLoggingOut ? (\n <ActivityIndicator size=\"small\" color=\"#b91c1c\" />\n ) : (\n <Ionicons name=\"log-out-outline\" size={20} color=\"#b91c1c\" />\n )}\n </View>\n <Text style={styles.logoutLabel}>{isLoggingOut ? 'Logging out...' : 'Log out'}</Text>\n </Pressable>\n </View>\n ) : showLogout ? (\n <View style={styles.logoutFooter}>\n <Text style={styles.loggedOutFooterHint}>You are currently signed out</Text>\n </View>\n ) : null}\n </View>\n </SafeAreaView>\n );\n}\n\nconst styles = StyleSheet.create({\n safeArea: {\n flex: 1,\n backgroundColor: PALETTE.bg,\n },\n drawerColumn: {\n flex: 1,\n },\n scroll: {\n flex: 1,\n },\n contentWrap: {\n flexGrow: 1,\n paddingBottom: 24,\n paddingHorizontal: 18,\n },\n brandBlock: {\n marginBottom: 16,\n paddingBottom: 14,\n borderBottomWidth: StyleSheet.hairlineWidth,\n borderBottomColor: PALETTE.border,\n },\n brandStrip: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n },\n brandIconSmall: {\n width: 36,\n height: 36,\n borderRadius: 10,\n },\n brandStripTitle: {\n color: PALETTE.text,\n fontSize: 22,\n fontWeight: '800',\n letterSpacing: -0.6,\n },\n profileCard: {\n borderRadius: 12,\n overflow: 'hidden',\n marginBottom: 20,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n },\n profileCardInner: {\n flexDirection: 'row',\n padding: 16,\n gap: 14,\n },\n avatarOuter: {\n width: 56,\n height: 56,\n borderRadius: 28,\n overflow: 'hidden',\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarImage: {\n width: '100%',\n height: '100%',\n },\n avatarPlaceholder: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: PALETTE.rowHighlight,\n },\n avatarInitials: {\n fontSize: 20,\n fontWeight: '700',\n color: mobileTokens.color.primary,\n letterSpacing: 0.3,\n },\n profileMeta: {\n flex: 1,\n minWidth: 0,\n justifyContent: 'center',\n },\n profileName: {\n fontSize: 19,\n fontWeight: '600',\n color: PALETTE.text,\n letterSpacing: -0.3,\n lineHeight: 24,\n },\n profileUsername: {\n marginTop: 4,\n fontSize: 14,\n fontWeight: '500',\n color: PALETTE.textSecondary,\n letterSpacing: -0.1,\n },\n profileEmail: {\n marginTop: 6,\n fontSize: 13,\n fontWeight: '400',\n color: PALETTE.textSecondary,\n },\n sectionLabel: {\n fontSize: 11,\n fontWeight: '600',\n color: '#9ca3af',\n textTransform: 'uppercase',\n letterSpacing: 0.6,\n marginBottom: 8,\n marginLeft: 2,\n },\n menuGroup: {\n gap: 8,\n },\n loggedOutStateCard: {\n marginTop: 18,\n borderRadius: 14,\n paddingHorizontal: 16,\n paddingVertical: 18,\n backgroundColor: PALETTE.surface,\n borderWidth: StyleSheet.hairlineWidth,\n borderColor: PALETTE.border,\n alignItems: 'center',\n gap: 10,\n },\n loggedOutStateIconWrap: {\n width: 44,\n height: 44,\n borderRadius: 14,\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: mobileTokens.color.primarySoft,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n loggedOutStateTitle: {\n fontSize: 17,\n fontWeight: '700',\n color: PALETTE.text,\n letterSpacing: -0.2,\n },\n loggedOutStateSubtitle: {\n fontSize: 13,\n lineHeight: 19,\n color: PALETTE.textSecondary,\n textAlign: 'center',\n paddingHorizontal: 4,\n },\n loggedOutStateButton: {\n marginTop: 4,\n borderRadius: 12,\n backgroundColor: mobileTokens.color.primary,\n paddingHorizontal: 16,\n paddingVertical: 10,\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n loggedOutStateButtonPressed: {\n opacity: 0.88,\n },\n loggedOutStateButtonLabel: {\n fontSize: 14,\n fontWeight: '600',\n color: mobileTokens.color.surface,\n },\n navRow: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 12,\n paddingHorizontal: 14,\n borderRadius: 10,\n gap: 12,\n },\n navRowIdle: {\n backgroundColor: PALETTE.surface,\n },\n navRowFocused: {\n backgroundColor: PALETTE.rowHighlight,\n borderWidth: 1,\n borderColor: mobileTokens.color.primaryBorder,\n },\n navRowPressed: {\n opacity: 0.88,\n },\n navIconCircle: {\n width: 40,\n height: 40,\n borderRadius: 12,\n alignItems: 'center',\n justifyContent: 'center',\n },\n navIconCircleIdle: {\n backgroundColor: 'transparent',\n },\n navIconCircleFocused: {\n backgroundColor: 'rgba(79, 70, 229, 0.10)',\n },\n navLabel: {\n flex: 1,\n fontSize: 16,\n fontWeight: '500',\n color: PALETTE.text,\n },\n navLabelFocused: {\n fontWeight: '600',\n color: mobileTokens.color.primary,\n },\n navChevron: {\n marginLeft: 'auto',\n },\n logoutFooter: {\n borderTopWidth: StyleSheet.hairlineWidth,\n borderTopColor: PALETTE.border,\n paddingHorizontal: 18,\n paddingTop: 10,\n paddingBottom: 8,\n backgroundColor: PALETTE.surface,\n },\n logoutButton: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 12,\n paddingVertical: 12,\n paddingHorizontal: 12,\n borderRadius: 14,\n },\n logoutIconCircle: {\n width: 40,\n height: 40,\n borderRadius: 12,\n backgroundColor: '#fef2f2',\n alignItems: 'center',\n justifyContent: 'center',\n },\n logoutButtonPressed: {\n opacity: 0.75,\n backgroundColor: '#fef2f2',\n },\n logoutLabel: {\n fontSize: 16,\n fontWeight: '600',\n color: '#b91c1c',\n },\n loggedOutFooterHint: {\n fontSize: 12,\n textAlign: 'center',\n color: PALETTE.textSecondary,\n paddingVertical: 8,\n },\n});\n"],"names":["_a"],"mappings":"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"}
|
package/lib/compute.js
CHANGED
|
@@ -136,7 +136,60 @@ const yantraMobilePageStore = [{
|
|
|
136
136
|
},
|
|
137
137
|
componentPath: "@adminide-stack/yantra-mobile/lib/screens/ChatHistory/index.js",
|
|
138
138
|
hasComponent: true
|
|
139
|
+
}, {
|
|
140
|
+
key: "webbuilder",
|
|
141
|
+
path: "/:orgName/c/:channelId/webbuilder",
|
|
142
|
+
name: "WebBuilder",
|
|
143
|
+
exact: true,
|
|
144
|
+
priority: 4,
|
|
145
|
+
hideInMenu: true,
|
|
146
|
+
auth: true,
|
|
147
|
+
menu_position: "side",
|
|
148
|
+
importPaths: {
|
|
149
|
+
navigationHeader: "@adminide-stack/yantra-mobile/lib/components/NavigationHeader/NavigationHeader.js"
|
|
150
|
+
},
|
|
151
|
+
customHeader: {
|
|
152
|
+
name: "NavigationHeader",
|
|
153
|
+
component: "$.importPaths.navigationHeader",
|
|
154
|
+
props: {
|
|
155
|
+
showTitle: true,
|
|
156
|
+
showToggle: false,
|
|
157
|
+
showFilter: false,
|
|
158
|
+
isSearchBack: false,
|
|
159
|
+
showBack: true,
|
|
160
|
+
showGateway: false,
|
|
161
|
+
showHistory: false,
|
|
162
|
+
showNewChat: false
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
props: {
|
|
166
|
+
initialParams: {
|
|
167
|
+
orgName: null,
|
|
168
|
+
url: null,
|
|
169
|
+
channelId: null,
|
|
170
|
+
projectId: null,
|
|
171
|
+
message: null
|
|
172
|
+
},
|
|
173
|
+
options: {
|
|
174
|
+
title: "Web Builder",
|
|
175
|
+
headerTintColor: "black",
|
|
176
|
+
headerTitleStyle: {
|
|
177
|
+
fontWeight: "bold"
|
|
178
|
+
},
|
|
179
|
+
// Reachable only via Build-mode submit — never list in the drawer.
|
|
180
|
+
drawerItemStyle: {
|
|
181
|
+
display: "none"
|
|
182
|
+
},
|
|
183
|
+
headerTitleAlign: "left",
|
|
184
|
+
gestureEnabled: false,
|
|
185
|
+
swipeEnabled: false,
|
|
186
|
+
animation: "fade",
|
|
187
|
+
animationTypeForReplace: "pop"
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
componentPath: "@adminide-stack/yantra-mobile/lib/screens/WebBuilder/index.js",
|
|
191
|
+
hasComponent: true
|
|
139
192
|
}];
|
|
140
|
-
const selectedRoutes = ["home", "chat", "chathistory"];
|
|
193
|
+
const selectedRoutes = ["home", "chat", "chathistory", "webbuilder"];
|
|
141
194
|
const filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);
|
|
142
195
|
export { filteredRoutes, yantraMobilePageStore }; //# sourceMappingURL=compute.js.map
|
package/lib/compute.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';\nimport type { IRouteModule } from '@common-stack/core';\n\nexport const yantraMobilePageStore: IRouteModule[] = [\n {\n key: 'home',\n path: '/:orgName/l/home',\n name: 'Home',\n exact: true,\n index: true,\n priority: 1,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/Home'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: true,\n showFilter: true,\n isSearchBack: false,\n showGateway: true,\n showHistory: true,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { initialSessionId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n {\n key: 'chat',\n path: '/:orgName/chat/:channelId',\n name: 'Chat',\n exact: false,\n priority: 2,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/Chat'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: true,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { channelId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n {\n key: 'chathistory',\n path: '/:orgName/chathistory',\n name: 'ChatHistory',\n exact: false,\n priority: 3,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/ChatHistory'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Chat history',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n];\n\nconst selectedRoutes = ['home', 'chat', 'chathistory'];\n\nconst filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"compute.js","sources":["../src/compute.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { getFilteredRoutes } from '@common-stack/client-react/lib/utils/filteredRoutes.js';\nimport type { IRouteModule } from '@common-stack/core';\n\nexport const yantraMobilePageStore: IRouteModule[] = [\n {\n key: 'home',\n path: '/:orgName/l/home',\n name: 'Home',\n exact: true,\n index: true,\n priority: 1,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/Home'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: true,\n showFilter: true,\n isSearchBack: false,\n showGateway: true,\n showHistory: true,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { initialSessionId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n {\n key: 'chat',\n path: '/:orgName/chat/:channelId',\n name: 'Chat',\n exact: false,\n priority: 2,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/Chat'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: true,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { channelId: null, orgName: null },\n options: {\n title: 'Yantra',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n drawerLabel: 'Chat',\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n {\n key: 'chathistory',\n path: '/:orgName/chathistory',\n name: 'ChatHistory',\n exact: false,\n priority: 3,\n hideInMenu: true,\n auth: true,\n component: () => import('./screens/ChatHistory'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: true,\n },\n },\n props: {\n initialParams: { orgName: null },\n options: {\n title: 'Chat history',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n {\n key: 'webbuilder',\n path: '/:orgName/c/:channelId/webbuilder',\n name: 'WebBuilder',\n exact: true,\n priority: 4,\n hideInMenu: true,\n auth: true,\n menu_position: 'side',\n component: () => import('./screens/WebBuilder'),\n importPaths: {\n navigationHeader: () => import('./components/NavigationHeader/NavigationHeader'),\n },\n customHeader: {\n name: 'NavigationHeader',\n component: '$.importPaths.navigationHeader',\n props: {\n showTitle: true,\n showToggle: false,\n showFilter: false,\n isSearchBack: false,\n showBack: true,\n showGateway: false,\n showHistory: false,\n showNewChat: false,\n },\n },\n props: {\n initialParams: { orgName: null, url: null, channelId: null, projectId: null, message: null },\n options: {\n title: 'Web Builder',\n headerTintColor: 'black',\n headerTitleStyle: {\n fontWeight: 'bold',\n },\n // Reachable only via Build-mode submit — never list in the drawer.\n drawerItemStyle: { display: 'none' },\n headerTitleAlign: 'left',\n gestureEnabled: false,\n swipeEnabled: false,\n animation: 'fade',\n animationTypeForReplace: 'pop',\n },\n },\n },\n];\n\nconst selectedRoutes = ['home', 'chat', 'chathistory', 'webbuilder'];\n\nconst filteredRoutes = getFilteredRoutes(yantraMobilePageStore, selectedRoutes);\n\nexport { filteredRoutes };\n"],"names":[],"mappings":"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"}
|
package/lib/config/env-config.js
CHANGED
|
@@ -25,6 +25,10 @@ const baseConfig = cleanEnv(env, {
|
|
|
25
25
|
CLIENT_URL: str({
|
|
26
26
|
default: "http://localhost:3000"
|
|
27
27
|
}),
|
|
28
|
+
/** Standalone Web Builder surface embedded in the mobile WebView shell. */
|
|
29
|
+
WEB_BUILDER_URL: str({
|
|
30
|
+
default: "http://localhost:5174/"
|
|
31
|
+
}),
|
|
28
32
|
APP_NAME: str({
|
|
29
33
|
default: "Yantra"
|
|
30
34
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.js","sources":["../../src/config/env-config.ts"],"sourcesContent":["import { str, cleanEnv, bool, num } from 'envalid';\n\nconst env = (process as { APP_ENV?: NodeJS.ProcessEnv; env?: NodeJS.ProcessEnv }).APP_ENV || process.env;\n\nconst baseConfig = cleanEnv(env, {\n GRAPHQL_URL: str({ default: 'http://localhost:8080/graphql' }),\n CLIENT_URL: str({ default: 'http://localhost:3000' }),\n APP_NAME: str({ default: 'Yantra' }),\n GROQ_API_KEY: str({ default: '' }),\n CDECLI_AGENT_ENDPOINT: str({ default: 'https://cdecli-agent.cdebase.dev' }),\n CDECLI_AGENT_AUTH_TOKEN: str({ default: '' }),\n /** Seconds to wait for CDeCLI stream completion before timing out (then fallback chat API runs). Min 15, max 600. */\n /** Aligned with web `useCdecliChannel` (120s). Mobile hook uses the same constant inline. */\n CDECLI_CHAT_RESPONSE_TIMEOUT_SEC: num({ default: 120 }),\n BACKEND_URL: str({ default: '' }),\n USE_PROXY_STAGING_GATEWAY: bool({ default: false }),\n PROXY_STAGING_GATEWAY_URL: str({ default: '' }),\n});\n\nfunction resolveAgentGatewayGraphqlUrl(): string {\n if (baseConfig.USE_PROXY_STAGING_GATEWAY && baseConfig.PROXY_STAGING_GATEWAY_URL) {\n return baseConfig.PROXY_STAGING_GATEWAY_URL;\n }\n if (baseConfig.GRAPHQL_URL) return baseConfig.GRAPHQL_URL;\n if (baseConfig.BACKEND_URL) return `${baseConfig.BACKEND_URL.replace(/\\/$/, '')}/graphql`;\n return '/graphql';\n}\n\nfunction resolveBaseWsUrl(graphqlUrl: string): string {\n const base = graphqlUrl.replace(/\\/graphql$/, '');\n return base.replace(/^http/, 'ws');\n}\n\nfunction resolveAgentGatewayWsUrl(graphqlUrl: string): string {\n return `${resolveBaseWsUrl(graphqlUrl)}/ws/openclaw-chat`;\n}\n\nconst agentGatewayGraphqlUrl = resolveAgentGatewayGraphqlUrl();\n\nconst clampedCdecliTimeoutSec = Math.min(600, Math.max(15, Math.round(baseConfig.CDECLI_CHAT_RESPONSE_TIMEOUT_SEC)));\n\nexport const config = {\n ...baseConfig,\n CDECLI_CHAT_RESPONSE_TIMEOUT_SEC: clampedCdecliTimeoutSec,\n AGENT_GATEWAY_GRAPHQL_URL: agentGatewayGraphqlUrl,\n AGENT_GATEWAY_WS_URL: resolveAgentGatewayWsUrl(agentGatewayGraphqlUrl),\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AACA,MAAM,GAAA,GAAO,OAGV,CAAA,OAAA,IAAW,OAAQ,CAAA,GAAA;AACtB,MAAM,UAAA,GAAa,SAAS,GAAK,EAAA;AAAA,EAC/B,aAAa,GAAI,CAAA;AAAA,IACf,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,YAAY,GAAI,CAAA;AAAA,IACd,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,UAAU,GAAI,CAAA;AAAA,IACZ,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,cAAc,GAAI,CAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,uBAAuB,GAAI,CAAA;AAAA,IACzB,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,yBAAyB,GAAI,CAAA;AAAA,IAC3B,OAAS,EAAA;AAAA,GACV,CAAA;AAAA;AAAA;AAAA,EAGD,kCAAkC,GAAI,CAAA;AAAA,IACpC,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,aAAa,GAAI,CAAA;AAAA,IACf,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,2BAA2B,IAAK,CAAA;AAAA,IAC9B,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,2BAA2B,GAAI,CAAA;AAAA,IAC7B,OAAS,EAAA;AAAA,GACV;AACH,CAAC,CAAA;AACD,SAAS,6BAAwC,GAAA;AAC/C,EAAI,IAAA,UAAA,CAAW,yBAA6B,IAAA,UAAA,CAAW,yBAA2B,EAAA;AAChF,IAAA,OAAO,UAAW,CAAA,yBAAA;AAAA;AAEpB,EAAI,IAAA,UAAA,CAAW,WAAa,EAAA,OAAO,UAAW,CAAA,WAAA;AAC9C,EAAI,IAAA,UAAA,CAAW,aAAoB,OAAA,CAAA,EAAG,WAAW,WAAY,CAAA,OAAA,CAAQ,KAAO,EAAA,EAAE,CAAC,CAAA,QAAA,CAAA;AAC/E,EAAO,OAAA,UAAA;AACT;AACA,SAAS,iBAAiB,UAA4B,EAAA;AACpD,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,OAAQ,CAAA,YAAA,EAAc,EAAE,CAAA;AAChD,EAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,EAAS,IAAI,CAAA;AACnC;AACA,SAAS,yBAAyB,UAA4B,EAAA;AAC5D,EAAO,OAAA,CAAA,EAAG,gBAAiB,CAAA,UAAU,CAAC,CAAA,iBAAA,CAAA;AACxC;AACA,MAAM,yBAAyB,6BAA8B,EAAA;AAC7D,MAAM,uBAA0B,GAAA,IAAA,CAAK,GAAI,CAAA,GAAA,EAAK,IAAK,CAAA,GAAA,CAAI,EAAI,EAAA,IAAA,CAAK,KAAM,CAAA,UAAA,CAAW,gCAAgC,CAAC,CAAC,CAAA;AACtG,MAAA,MAAA,GAAS,iCACjB,UADiB,CAAA,EAAA;AAAA,EAEpB,gCAAkC,EAAA,uBAAA;AAAA,EAClC,yBAA2B,EAAA,sBAAA;AAAA,EAC3B,oBAAA,EAAsB,yBAAyB,sBAAsB;AACvE,CAAA"}
|
|
1
|
+
{"version":3,"file":"env-config.js","sources":["../../src/config/env-config.ts"],"sourcesContent":["import { str, cleanEnv, bool, num } from 'envalid';\n\nconst env = (process as { APP_ENV?: NodeJS.ProcessEnv; env?: NodeJS.ProcessEnv }).APP_ENV || process.env;\n\nconst baseConfig = cleanEnv(env, {\n GRAPHQL_URL: str({ default: 'http://localhost:8080/graphql' }),\n CLIENT_URL: str({ default: 'http://localhost:3000' }),\n /** Standalone Web Builder surface embedded in the mobile WebView shell. */\n WEB_BUILDER_URL: str({ default: 'http://localhost:5174/' }),\n APP_NAME: str({ default: 'Yantra' }),\n GROQ_API_KEY: str({ default: '' }),\n CDECLI_AGENT_ENDPOINT: str({ default: 'https://cdecli-agent.cdebase.dev' }),\n CDECLI_AGENT_AUTH_TOKEN: str({ default: '' }),\n /** Seconds to wait for CDeCLI stream completion before timing out (then fallback chat API runs). Min 15, max 600. */\n /** Aligned with web `useCdecliChannel` (120s). Mobile hook uses the same constant inline. */\n CDECLI_CHAT_RESPONSE_TIMEOUT_SEC: num({ default: 120 }),\n BACKEND_URL: str({ default: '' }),\n USE_PROXY_STAGING_GATEWAY: bool({ default: false }),\n PROXY_STAGING_GATEWAY_URL: str({ default: '' }),\n});\n\nfunction resolveAgentGatewayGraphqlUrl(): string {\n if (baseConfig.USE_PROXY_STAGING_GATEWAY && baseConfig.PROXY_STAGING_GATEWAY_URL) {\n return baseConfig.PROXY_STAGING_GATEWAY_URL;\n }\n if (baseConfig.GRAPHQL_URL) return baseConfig.GRAPHQL_URL;\n if (baseConfig.BACKEND_URL) return `${baseConfig.BACKEND_URL.replace(/\\/$/, '')}/graphql`;\n return '/graphql';\n}\n\nfunction resolveBaseWsUrl(graphqlUrl: string): string {\n const base = graphqlUrl.replace(/\\/graphql$/, '');\n return base.replace(/^http/, 'ws');\n}\n\nfunction resolveAgentGatewayWsUrl(graphqlUrl: string): string {\n return `${resolveBaseWsUrl(graphqlUrl)}/ws/openclaw-chat`;\n}\n\nconst agentGatewayGraphqlUrl = resolveAgentGatewayGraphqlUrl();\n\nconst clampedCdecliTimeoutSec = Math.min(600, Math.max(15, Math.round(baseConfig.CDECLI_CHAT_RESPONSE_TIMEOUT_SEC)));\n\nexport const config = {\n ...baseConfig,\n CDECLI_CHAT_RESPONSE_TIMEOUT_SEC: clampedCdecliTimeoutSec,\n AGENT_GATEWAY_GRAPHQL_URL: agentGatewayGraphqlUrl,\n AGENT_GATEWAY_WS_URL: resolveAgentGatewayWsUrl(agentGatewayGraphqlUrl),\n};\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AACA,MAAM,GAAA,GAAO,OAGV,CAAA,OAAA,IAAW,OAAQ,CAAA,GAAA;AACtB,MAAM,UAAA,GAAa,SAAS,GAAK,EAAA;AAAA,EAC/B,aAAa,GAAI,CAAA;AAAA,IACf,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,YAAY,GAAI,CAAA;AAAA,IACd,OAAS,EAAA;AAAA,GACV,CAAA;AAAA;AAAA,EAED,iBAAiB,GAAI,CAAA;AAAA,IACnB,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,UAAU,GAAI,CAAA;AAAA,IACZ,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,cAAc,GAAI,CAAA;AAAA,IAChB,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,uBAAuB,GAAI,CAAA;AAAA,IACzB,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,yBAAyB,GAAI,CAAA;AAAA,IAC3B,OAAS,EAAA;AAAA,GACV,CAAA;AAAA;AAAA;AAAA,EAGD,kCAAkC,GAAI,CAAA;AAAA,IACpC,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,aAAa,GAAI,CAAA;AAAA,IACf,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,2BAA2B,IAAK,CAAA;AAAA,IAC9B,OAAS,EAAA;AAAA,GACV,CAAA;AAAA,EACD,2BAA2B,GAAI,CAAA;AAAA,IAC7B,OAAS,EAAA;AAAA,GACV;AACH,CAAC,CAAA;AACD,SAAS,6BAAwC,GAAA;AAC/C,EAAI,IAAA,UAAA,CAAW,yBAA6B,IAAA,UAAA,CAAW,yBAA2B,EAAA;AAChF,IAAA,OAAO,UAAW,CAAA,yBAAA;AAAA;AAEpB,EAAI,IAAA,UAAA,CAAW,WAAa,EAAA,OAAO,UAAW,CAAA,WAAA;AAC9C,EAAI,IAAA,UAAA,CAAW,aAAoB,OAAA,CAAA,EAAG,WAAW,WAAY,CAAA,OAAA,CAAQ,KAAO,EAAA,EAAE,CAAC,CAAA,QAAA,CAAA;AAC/E,EAAO,OAAA,UAAA;AACT;AACA,SAAS,iBAAiB,UAA4B,EAAA;AACpD,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,OAAQ,CAAA,YAAA,EAAc,EAAE,CAAA;AAChD,EAAO,OAAA,IAAA,CAAK,OAAQ,CAAA,OAAA,EAAS,IAAI,CAAA;AACnC;AACA,SAAS,yBAAyB,UAA4B,EAAA;AAC5D,EAAO,OAAA,CAAA,EAAG,gBAAiB,CAAA,UAAU,CAAC,CAAA,iBAAA,CAAA;AACxC;AACA,MAAM,yBAAyB,6BAA8B,EAAA;AAC7D,MAAM,uBAA0B,GAAA,IAAA,CAAK,GAAI,CAAA,GAAA,EAAK,IAAK,CAAA,GAAA,CAAI,EAAI,EAAA,IAAA,CAAK,KAAM,CAAA,UAAA,CAAW,gCAAgC,CAAC,CAAC,CAAA;AACtG,MAAA,MAAA,GAAS,iCACjB,UADiB,CAAA,EAAA;AAAA,EAEpB,gCAAkC,EAAA,uBAAA;AAAA,EAClC,yBAA2B,EAAA,sBAAA;AAAA,EAC3B,oBAAA,EAAsB,yBAAyB,sBAAsB;AACvE,CAAA"}
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import {readAuth0IdToken}from'../bridge/readAuth0Session.js';import {config}from'../config/env-config.js';const OBTAIN_USER_SYSTEM_TOKEN = `
|
|
2
|
+
mutation ObtainUserSystemToken($input: ObtainUserSystemTokenInput!) {
|
|
3
|
+
obtainUserSystemToken(input: $input) {
|
|
4
|
+
token
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
`;
|
|
8
|
+
const GET_USER_SYSTEM_TOKEN = `
|
|
9
|
+
query GetUserSystemToken {
|
|
10
|
+
getUserSystemToken {
|
|
11
|
+
id
|
|
12
|
+
expiresAt
|
|
13
|
+
isSystemToken
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
`;
|
|
17
|
+
const CREATE_SECRET_API_TOKEN = `
|
|
18
|
+
mutation CreateSecretApiToken($input: SecretApiTokenInput!) {
|
|
19
|
+
createSecretApiToken(input: $input) {
|
|
20
|
+
id
|
|
21
|
+
expiresAt
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
`;
|
|
25
|
+
const REVEAL_SECRET_API_TOKEN = `
|
|
26
|
+
mutation RevealSecretApiToken($id: ID!) {
|
|
27
|
+
revealSecretApiToken(id: $id)
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
function normalizeGraphqlUrl(url) {
|
|
31
|
+
return url.trim().replace(/\/$/, "");
|
|
32
|
+
}
|
|
33
|
+
function resolveSurfaceCatalogBackend(graphqlUrl) {
|
|
34
|
+
const raw = (graphqlUrl == null ? void 0 : graphqlUrl.trim()) || config.GRAPHQL_URL;
|
|
35
|
+
if (!(raw == null ? void 0 : raw.trim())) {
|
|
36
|
+
throw new Error("GRAPHQL_URL is not configured");
|
|
37
|
+
}
|
|
38
|
+
return normalizeGraphqlUrl(raw);
|
|
39
|
+
}
|
|
40
|
+
async function gqlFetch(graphqlUrl, idToken, query, variables) {
|
|
41
|
+
const res = await fetch(graphqlUrl, {
|
|
42
|
+
method: "POST",
|
|
43
|
+
headers: {
|
|
44
|
+
"content-type": "application/json",
|
|
45
|
+
authorization: `Bearer ${idToken}`
|
|
46
|
+
},
|
|
47
|
+
body: JSON.stringify({
|
|
48
|
+
query,
|
|
49
|
+
variables
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
if (!res.ok) {
|
|
53
|
+
const text = await res.text().catch(() => "");
|
|
54
|
+
throw new Error(`GraphQL HTTP ${res.status}: ${text.slice(0, 200)}`);
|
|
55
|
+
}
|
|
56
|
+
return await res.json();
|
|
57
|
+
}
|
|
58
|
+
async function mintSurfaceSystemToken(input) {
|
|
59
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w;
|
|
60
|
+
const idToken = await readAuth0IdToken();
|
|
61
|
+
if (!idToken) {
|
|
62
|
+
throw new Error("No Auth0 id_token in storage \u2014 sign in to the mobile app first.");
|
|
63
|
+
}
|
|
64
|
+
const graphqlUrl = resolveSurfaceCatalogBackend(input.graphqlUrl);
|
|
65
|
+
if (__DEV__) {
|
|
66
|
+
console.log("[WebBuilder] minting system token via", graphqlUrl);
|
|
67
|
+
}
|
|
68
|
+
const orgName = ((_a = input.orgName) == null ? void 0 : _a.trim()) || "default";
|
|
69
|
+
const projectId = ((_b = input.projectId) == null ? void 0 : _b.trim()) || "default";
|
|
70
|
+
const environmentTagId = ((_c = input.tagId) == null ? void 0 : _c.trim()) || void 0;
|
|
71
|
+
if (environmentTagId) {
|
|
72
|
+
try {
|
|
73
|
+
const obtained = await gqlFetch(graphqlUrl, idToken, OBTAIN_USER_SYSTEM_TOKEN, {
|
|
74
|
+
input: {
|
|
75
|
+
projectId,
|
|
76
|
+
environmentTagId,
|
|
77
|
+
orgName,
|
|
78
|
+
renewBufferSeconds: 7 * 24 * 60 * 60
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
const token2 = (_f = (_e = (_d = obtained.data) == null ? void 0 : _d.obtainUserSystemToken) == null ? void 0 : _e.token) == null ? void 0 : _f.trim();
|
|
82
|
+
if (token2 && !((_g = obtained.errors) == null ? void 0 : _g.length)) {
|
|
83
|
+
if (__DEV__) {
|
|
84
|
+
console.log("[WebBuilder] obtained system token length=", token2.length);
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
token: token2,
|
|
88
|
+
backend: graphqlUrl
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
} catch (err) {
|
|
92
|
+
if (__DEV__) {
|
|
93
|
+
console.warn("[WebBuilder] obtainUserSystemToken failed, falling back to reveal:", err);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const getResult = await gqlFetch(graphqlUrl, idToken, GET_USER_SYSTEM_TOKEN);
|
|
98
|
+
if ((_h = getResult.errors) == null ? void 0 : _h.length) {
|
|
99
|
+
throw new Error(((_i = getResult.errors[0]) == null ? void 0 : _i.message) || "GetUserSystemToken failed");
|
|
100
|
+
}
|
|
101
|
+
let tokenId = (_l = (_k = (_j = getResult.data) == null ? void 0 : _j.getUserSystemToken) == null ? void 0 : _k.id) != null ? _l : null;
|
|
102
|
+
if (!tokenId) {
|
|
103
|
+
const createResult = await gqlFetch(graphqlUrl, idToken, CREATE_SECRET_API_TOKEN, {
|
|
104
|
+
input: {
|
|
105
|
+
name: "System Token",
|
|
106
|
+
expiryInSeconds: 31536e3,
|
|
107
|
+
isSystemToken: true,
|
|
108
|
+
environmentTagId,
|
|
109
|
+
orgName,
|
|
110
|
+
projectId,
|
|
111
|
+
algorithm: "RS256"
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
const createErr = ((_n = (_m = createResult.errors) == null ? void 0 : _m[0]) == null ? void 0 : _n.message) || "";
|
|
115
|
+
if (createErr && !/already have a system token/i.test(createErr)) {
|
|
116
|
+
throw new Error(createErr);
|
|
117
|
+
}
|
|
118
|
+
if ((_p = (_o = createResult.data) == null ? void 0 : _o.createSecretApiToken) == null ? void 0 : _p.id) {
|
|
119
|
+
tokenId = createResult.data.createSecretApiToken.id;
|
|
120
|
+
} else {
|
|
121
|
+
const refetch = await gqlFetch(graphqlUrl, idToken, GET_USER_SYSTEM_TOKEN);
|
|
122
|
+
tokenId = (_s = (_r = (_q = refetch.data) == null ? void 0 : _q.getUserSystemToken) == null ? void 0 : _r.id) != null ? _s : null;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (!tokenId) {
|
|
126
|
+
throw new Error("No system token id on GraphQL backend \u2014 cannot reveal.");
|
|
127
|
+
}
|
|
128
|
+
const reveal = await gqlFetch(graphqlUrl, idToken, REVEAL_SECRET_API_TOKEN, {
|
|
129
|
+
id: tokenId
|
|
130
|
+
});
|
|
131
|
+
if ((_t = reveal.errors) == null ? void 0 : _t.length) {
|
|
132
|
+
throw new Error(((_u = reveal.errors[0]) == null ? void 0 : _u.message) || "RevealSecretApiToken failed");
|
|
133
|
+
}
|
|
134
|
+
const token = (_w = (_v = reveal.data) == null ? void 0 : _v.revealSecretApiToken) == null ? void 0 : _w.trim();
|
|
135
|
+
if (!token) {
|
|
136
|
+
throw new Error("RevealSecretApiToken returned empty token");
|
|
137
|
+
}
|
|
138
|
+
if (__DEV__) {
|
|
139
|
+
console.log("[WebBuilder] minted system token length=", token.length);
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
token,
|
|
143
|
+
backend: graphqlUrl
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
function appendSurfaceAuthParams(baseUrl, token, state) {
|
|
147
|
+
try {
|
|
148
|
+
const url = new URL(baseUrl);
|
|
149
|
+
url.searchParams.set("token", token);
|
|
150
|
+
url.searchParams.set("code", token);
|
|
151
|
+
url.searchParams.set("state", state);
|
|
152
|
+
return url.toString();
|
|
153
|
+
} catch (e) {
|
|
154
|
+
const sep = baseUrl.includes("?") ? "&" : "?";
|
|
155
|
+
return `${baseUrl}${sep}token=${encodeURIComponent(token)}&code=${encodeURIComponent(token)}&state=${encodeURIComponent(state)}`;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
function tokenFingerprint(token) {
|
|
159
|
+
var _a;
|
|
160
|
+
const sig = (_a = token.split(".")[2]) != null ? _a : token;
|
|
161
|
+
return sig.slice(-24);
|
|
162
|
+
}
|
|
163
|
+
function buildSurfaceHandoffScript(token, backend, state, withGateRecovery) {
|
|
164
|
+
const safeToken = JSON.stringify(token);
|
|
165
|
+
const safeBackend = JSON.stringify(backend);
|
|
166
|
+
const safeState = JSON.stringify(state);
|
|
167
|
+
const fp = JSON.stringify(tokenFingerprint(token));
|
|
168
|
+
const recovery = withGateRecovery ? `
|
|
169
|
+
function tryRecover() {
|
|
170
|
+
stamp();
|
|
171
|
+
var gate = document.querySelector('[data-surface-login]');
|
|
172
|
+
if (!gate) return;
|
|
173
|
+
if (sessionStorage.getItem('__yantra_wb_token_reload')) return;
|
|
174
|
+
sessionStorage.setItem('__yantra_wb_token_reload', '1');
|
|
175
|
+
var u = new URL(window.location.href);
|
|
176
|
+
u.searchParams.set('token', t);
|
|
177
|
+
u.searchParams.set('code', t);
|
|
178
|
+
u.searchParams.set('state', state);
|
|
179
|
+
window.location.replace(u.toString());
|
|
180
|
+
}
|
|
181
|
+
tryRecover();
|
|
182
|
+
var i = 0;
|
|
183
|
+
var timer = setInterval(function () {
|
|
184
|
+
i += 1;
|
|
185
|
+
tryRecover();
|
|
186
|
+
if (i >= 40 || !document.querySelector('[data-surface-login]')) clearInterval(timer);
|
|
187
|
+
}, 250);
|
|
188
|
+
` : `
|
|
189
|
+
var n = 0;
|
|
190
|
+
var id = setInterval(function () {
|
|
191
|
+
stamp();
|
|
192
|
+
n += 1;
|
|
193
|
+
if (n >= 80) clearInterval(id);
|
|
194
|
+
}, 50);
|
|
195
|
+
`;
|
|
196
|
+
return `
|
|
197
|
+
(function () {
|
|
198
|
+
try {
|
|
199
|
+
var t = ${safeToken};
|
|
200
|
+
var backend = ${safeBackend};
|
|
201
|
+
var state = ${safeState};
|
|
202
|
+
var fp = ${fp};
|
|
203
|
+
var PROBE_Q = 'query { getUserAccount { id } }';
|
|
204
|
+
|
|
205
|
+
if (!window.__yantraWbFetchPatched) {
|
|
206
|
+
window.__yantraWbFetchPatched = true;
|
|
207
|
+
var origFetch = window.fetch.bind(window);
|
|
208
|
+
window.fetch = function (input, init) {
|
|
209
|
+
try {
|
|
210
|
+
var url = typeof input === 'string' ? input : (input && input.url) ? String(input.url) : '';
|
|
211
|
+
// Force surface-kit resolveCatalogBackend() to our GRAPHQL_URL (not remote agent \u2192 ideback).
|
|
212
|
+
if (url.indexOf('/v1/auth/context') !== -1) {
|
|
213
|
+
return Promise.resolve(new Response(
|
|
214
|
+
JSON.stringify({ backendGraphqlUrl: backend }),
|
|
215
|
+
{ status: 200, headers: { 'Content-Type': 'application/json' } }
|
|
216
|
+
));
|
|
217
|
+
}
|
|
218
|
+
var body = init && typeof init.body === 'string' ? init.body : '';
|
|
219
|
+
if (body && body.indexOf('getUserAccount') !== -1) {
|
|
220
|
+
var parsed = JSON.parse(body);
|
|
221
|
+
var q = parsed && typeof parsed.query === 'string' ? parsed.query.replace(/\\s+/g, ' ').trim() : '';
|
|
222
|
+
if (q === PROBE_Q) {
|
|
223
|
+
return Promise.resolve(new Response(
|
|
224
|
+
JSON.stringify({ data: { getUserAccount: { id: 'mobile-webview-handoff' } } }),
|
|
225
|
+
{ status: 200, headers: { 'Content-Type': 'application/json' } }
|
|
226
|
+
));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
} catch (e0) {}
|
|
230
|
+
return origFetch(input, init);
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function stamp() {
|
|
235
|
+
try {
|
|
236
|
+
sessionStorage.setItem('cdecli_oauth_state', state);
|
|
237
|
+
localStorage.setItem('cdecli_token', t);
|
|
238
|
+
sessionStorage.setItem('cdecli_token', t);
|
|
239
|
+
localStorage.setItem('cdecli_system_token', t);
|
|
240
|
+
localStorage.setItem('cdecli_token_meta', JSON.stringify({
|
|
241
|
+
backend: backend,
|
|
242
|
+
verifiedAt: Date.now(),
|
|
243
|
+
fp: fp
|
|
244
|
+
}));
|
|
245
|
+
} catch (e1) {}
|
|
246
|
+
}
|
|
247
|
+
stamp();
|
|
248
|
+
${recovery}
|
|
249
|
+
} catch (e) {}
|
|
250
|
+
true;
|
|
251
|
+
})();
|
|
252
|
+
true;
|
|
253
|
+
`;
|
|
254
|
+
}
|
|
255
|
+
function buildCdecliTokenInjection(token, backend, state) {
|
|
256
|
+
return buildSurfaceHandoffScript(token, backend, state, false);
|
|
257
|
+
}
|
|
258
|
+
function buildSurfaceGateRecoveryScript(token, backend, state) {
|
|
259
|
+
return buildSurfaceHandoffScript(token, backend, state, true);
|
|
260
|
+
}export{appendSurfaceAuthParams,buildCdecliTokenInjection,buildSurfaceGateRecoveryScript,mintSurfaceSystemToken,resolveSurfaceCatalogBackend};//# sourceMappingURL=mintSurfaceSystemToken.js.map
|