@adminide-stack/yantra-mobile 12.0.69-alpha.0 → 12.0.69-alpha.2

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.
@@ -135,6 +135,15 @@ const MOBILE_APP_CATALOG = [{
135
135
  prompt: "Text my customers a short reminder about this week's offer.",
136
136
  nativeRoute: "webbuilder",
137
137
  surfaceSlug: "smscampaign"
138
+ }, {
139
+ key: "social-post",
140
+ label: "Social Posts",
141
+ icon: "send-outline",
142
+ group: "Sell",
143
+ prompt: "Draft a launch post for X and LinkedIn and schedule it for Tuesday morning.",
144
+ nativeRoute: "webbuilder",
145
+ // The deployed surface is `posts-surface`, not `social-post-surface`.
146
+ surfaceSlug: "posts"
138
147
  }, {
139
148
  key: "expenses",
140
149
  label: "Expenses",
@@ -1 +1 @@
1
- {"version":3,"file":"mobileAppCatalog.js","sources":["../../../src/features/apps/mobileAppCatalog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport type { MaterialCommunityIcons } from '@expo/vector-icons';\n\ntype IconName = ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type AppGroupId = 'Create' | 'Automate' | 'Sell' | 'Money' | 'Team' | 'More';\n\nexport type MobileAppItem = {\n key: string;\n label: string;\n icon: IconName;\n group: AppGroupId;\n /** Prompt sent as the first chat turn when the app has no native screen. */\n prompt: string;\n /**\n * Which surface host opens this app, if it has one. `webbuilder` is the\n * historical name of the shared WebView surface shell (`screens/WebBuilder`),\n * which is not web-builder-specific: it takes a `url` route param, mints the\n * system token, injects the bridge + cdecli token, stamps `embed=mobile` and\n * owns the timeout/retry UI. Anything with a deployed surface SPA can use it.\n */\n nativeRoute?:\n | 'webbuilder'\n | 'canvas-native'\n | 'characters-native'\n | 'chat-native'\n | 'billing-native'\n | 'shopping-native'\n | 'travel-native'\n | 'job-search-native'\n | 'resume-native';\n /**\n * Deployed surface SPA for this app, as the `<slug>-surface` name. Resolved\n * against SURFACE_URL_TEMPLATE so one env var covers every surface and stays\n * per-environment, instead of 20+ near-identical URLs in eas.json.\n *\n * The slug is the SURFACE's name, which is not always the tile key\n * (issue-ticket -> issues, shop -> shopping, notebook -> notebooklm).\n */\n surfaceSlug?: string;\n /**\n * Explicit env override, for the surfaces people actually run locally\n * (design 5174, canvas 5175, webbuilder). Wins over `surfaceSlug`.\n */\n surfaceUrlKey?: 'WEB_BUILDER_URL' | 'CANVAS_SURFACE_URL' | 'DESIGN_SURFACE_URL';\n /**\n * Key of the web tile this native tile replaces in every launcher list.\n * The web entry stays in the catalog (deep links, tests, the WebView\n * lane) but users see one tile per app, the native one, under the\n * shared name.\n */\n supersedes?: string;\n /**\n * Account chrome, not a product app. Stays in the catalog so drawer /\n * deep-link routing still knows the native host, but never appears as\n * a tile in Apps or the Apps menu.\n */\n hideInLauncher?: boolean;\n};\n\n/**\n * Mobile Apps launcher. Labels, groups, and prompts stay in lockstep with the\n * browser ChatTopBar Apps menu (`packages-modules/account/browser`).\n */\nexport const MOBILE_APP_CATALOG: readonly MobileAppItem[] = [\n {\n key: 'design',\n label: 'Design',\n icon: 'palette-outline',\n group: 'Create',\n prompt: 'Design a 10-slide pitch deck for a coffee subscription startup',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'DESIGN_SURFACE_URL',\n surfaceSlug: 'design',\n },\n {\n key: 'canvas',\n label: 'Canvas',\n icon: 'view-grid-outline',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'CANVAS_SURFACE_URL',\n surfaceSlug: 'canvas',\n },\n {\n key: 'canvas-native',\n label: 'Canvas',\n supersedes: 'canvas',\n icon: 'vector-square',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n // Renders through Module Federation: the viewer downloads from the\n // canvas-surface origin on open. First native surface; the classic\n // Canvas tile keeps the full web editor in the WebView host.\n nativeRoute: 'canvas-native',\n },\n {\n key: 'webbuilder',\n label: 'Web Builder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'WEB_BUILDER_URL',\n surfaceSlug: 'webbuilder',\n },\n {\n key: 'paper2poster',\n label: 'Paper 2 Poster',\n icon: 'presentation',\n group: 'Create',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'paper2poster',\n },\n {\n key: 'codezen',\n label: 'Codezen',\n icon: 'code-braces',\n group: 'Create',\n prompt: 'Clone my repository and fix the failing test',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'codezen',\n },\n {\n key: 'character',\n label: 'Characters',\n icon: 'drama-masks',\n group: 'Create',\n prompt: 'Create a stoic philosophy mentor character I can chat with',\n // Native federated experience (gallery -> detail -> chat); the web\n // surface remains reachable through the surface lane if ever needed.\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'characters-native',\n label: 'Characters',\n supersedes: 'character',\n icon: 'account-star',\n group: 'Create',\n prompt: 'Show me characters I can chat with.',\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'chat-native',\n label: 'Chats',\n icon: 'message-text-outline',\n group: 'Team',\n prompt: 'Show me my conversations.',\n // Person-to-person messaging, federated like canvas: the whole UI\n // downloads from the chat-native surface on open. Not the AI chat -\n // that is the Home tab.\n nativeRoute: 'chat-native',\n },\n {\n key: 'workflow',\n label: 'Workflow',\n icon: 'sitemap',\n group: 'Automate',\n prompt: 'Build a workflow that runs every morning and sends me a summary of what changed.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'workflow',\n },\n {\n key: 'computer',\n label: 'Computer',\n icon: 'monitor',\n group: 'Automate',\n prompt: 'Open a browser and compare the top 5 CRM tools with screenshots',\n },\n {\n key: 'crm',\n label: 'CRM',\n icon: 'account-group-outline',\n group: 'Sell',\n prompt: 'Look at my pipeline and tell me which deals are going cold and what I should send them.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'crm',\n },\n {\n key: 'salesiq',\n label: 'SalesIQ',\n icon: 'radar',\n group: 'Sell',\n prompt: 'Show me who is on my website right now',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'salesiq',\n },\n {\n key: 'inbox',\n label: 'Inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'inbox',\n },\n {\n key: 'mailcampaign',\n label: 'Mail Campaigns',\n icon: 'bullhorn-outline',\n group: 'Sell',\n prompt: 'Draft an email campaign announcing what we shipped this month.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'mailcampaign',\n },\n {\n key: 'smscampaign',\n label: 'SMS Campaigns',\n icon: 'message-text-outline',\n group: 'Sell',\n prompt: \"Text my customers a short reminder about this week's offer.\",\n nativeRoute: 'webbuilder',\n surfaceSlug: 'smscampaign',\n },\n {\n key: 'expenses',\n label: 'Expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'expenses',\n },\n {\n key: 'cards-wallet',\n label: 'Cards & Wallet',\n icon: 'credit-card-outline',\n group: 'Money',\n prompt: 'Issue a $200 virtual card for monthly ad spend',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'cards-wallet',\n },\n {\n key: 'billing',\n label: 'Billing',\n icon: 'currency-usd',\n group: 'Money',\n prompt: 'Create an invoice for a $2,400 consulting project',\n nativeRoute: 'billing-native',\n surfaceSlug: 'billing',\n // Plan / subscription for this account — already in the drawer.\n hideInLauncher: true,\n },\n {\n key: 'kpi-motivation',\n label: 'KPI Motivation',\n icon: 'trophy-outline',\n group: 'Team',\n prompt: 'Set up a weekly sales KPI scoreboard for my team',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'kpi-motivation',\n },\n {\n key: 'issue-ticket',\n label: 'Issue Ticket',\n icon: 'bug-outline',\n group: 'Team',\n prompt: 'Create a bug board and triage my open issues',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'issues',\n },\n {\n key: 'notebook',\n label: 'Study',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'notebooklm',\n },\n {\n key: 'resume',\n label: 'Resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'resume',\n },\n {\n key: 'resume-native',\n label: 'Resume',\n supersedes: 'resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'resume-native',\n },\n {\n key: 'job-search',\n label: 'Job Search',\n icon: 'briefcase-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'job-search',\n },\n {\n key: 'job-search-native',\n label: 'Job Search',\n supersedes: 'job-search',\n icon: 'briefcase-search-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'job-search-native',\n },\n {\n key: 'shop',\n label: 'Shop',\n icon: 'cart-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'shopping',\n },\n {\n key: 'shopping-native',\n label: 'Shop',\n supersedes: 'shop',\n icon: 'storefront-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n // Federated storefront: search + cart download from shopping_native/Shop.\n // The classic Shop tile keeps the web surface in the WebView host.\n nativeRoute: 'shopping-native',\n },\n {\n key: 'travel-native',\n label: 'Travel',\n supersedes: 'travel',\n icon: 'airplane-takeoff',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'travel-native',\n },\n {\n key: 'travel',\n label: 'Travel',\n icon: 'airplane',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'travel',\n },\n {\n key: 'social-events',\n label: 'yantra.live',\n icon: 'ticket-outline',\n group: 'More',\n prompt: 'What concerts are happening nearby this weekend?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'social-events',\n },\n];\n\nexport const APP_GROUP_ORDER: readonly AppGroupId[] = ['Create', 'Automate', 'Sell', 'Money', 'Team', 'More'];\n\nexport type AppsTab = 'all' | 'favorites';\n\n/**\n * Poster colors per group - the tile artwork. Deliberately the same in light\n * and dark themes: artwork is content, the card chrome is what adapts.\n */\nexport const APP_GROUP_ART: Record<AppGroupId, { base: string; glow: string }> = {\n Create: { base: '#4f46e5', glow: '#c4b5fd' },\n Automate: { base: '#0f766e', glow: '#99f6e4' },\n Sell: { base: '#c2410c', glow: '#fed7aa' },\n Money: { base: '#15803d', glow: '#bbf7d0' },\n Team: { base: '#0369a1', glow: '#bae6fd' },\n More: { base: '#be185d', glow: '#fbcfe8' },\n};\n\nexport function matchesAppQuery(label: string, query: string): boolean {\n const q = query.toLowerCase().replace(/[^a-z0-9]/g, '');\n if (!q) return true;\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .includes(q);\n}\n\n/** One tile per app: a web tile disappears when its native replacement is in the list. */\nexport function visibleMobileApps(items: readonly MobileAppItem[]): MobileAppItem[] {\n const replaced = new Set(items.map((item) => item.supersedes).filter(Boolean));\n return items.filter((item) => !item.hideInLauncher && !replaced.has(item.key));\n}\n\nexport function groupMobileApps(items: readonly MobileAppItem[], query: string) {\n const hits = visibleMobileApps(items).filter((item) => matchesAppQuery(item.label, query));\n return APP_GROUP_ORDER.map((label) => ({\n label,\n items: hits.filter((item) => item.group === label),\n })).filter((group) => group.items.length > 0);\n}\n\n/**\n * One flat grid (Manus/game-launcher style) instead of grouped sections: rows\n * stay dense and the group reads from each card's caption. Catalog order is\n * kept inside a group; groups follow APP_GROUP_ORDER.\n */\nexport function filterMobileApps(\n items: readonly MobileAppItem[],\n query: string,\n tab: AppsTab,\n favorites: ReadonlySet<string>,\n): MobileAppItem[] {\n const rank = new Map(APP_GROUP_ORDER.map((group, index) => [group, index]));\n return visibleMobileApps(items)\n .filter((item) => matchesAppQuery(item.label, query))\n .filter((item) => tab !== 'favorites' || favorites.has(item.key))\n .sort((a, b) => (rank.get(a.group) ?? APP_GROUP_ORDER.length) - (rank.get(b.group) ?? APP_GROUP_ORDER.length));\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mobileAppCatalog.js","sources":["../../../src/features/apps/mobileAppCatalog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\nimport type { MaterialCommunityIcons } from '@expo/vector-icons';\n\ntype IconName = ComponentProps<typeof MaterialCommunityIcons>['name'];\n\nexport type AppGroupId = 'Create' | 'Automate' | 'Sell' | 'Money' | 'Team' | 'More';\n\nexport type MobileAppItem = {\n key: string;\n label: string;\n icon: IconName;\n group: AppGroupId;\n /** Prompt sent as the first chat turn when the app has no native screen. */\n prompt: string;\n /**\n * Which surface host opens this app, if it has one. `webbuilder` is the\n * historical name of the shared WebView surface shell (`screens/WebBuilder`),\n * which is not web-builder-specific: it takes a `url` route param, mints the\n * system token, injects the bridge + cdecli token, stamps `embed=mobile` and\n * owns the timeout/retry UI. Anything with a deployed surface SPA can use it.\n */\n nativeRoute?:\n | 'webbuilder'\n | 'canvas-native'\n | 'characters-native'\n | 'chat-native'\n | 'billing-native'\n | 'shopping-native'\n | 'travel-native'\n | 'job-search-native'\n | 'resume-native';\n /**\n * Deployed surface SPA for this app, as the `<slug>-surface` name. Resolved\n * against SURFACE_URL_TEMPLATE so one env var covers every surface and stays\n * per-environment, instead of 20+ near-identical URLs in eas.json.\n *\n * The slug is the SURFACE's name, which is not always the tile key\n * (issue-ticket -> issues, shop -> shopping, notebook -> notebooklm).\n */\n surfaceSlug?: string;\n /**\n * Explicit env override, for the surfaces people actually run locally\n * (design 5174, canvas 5175, webbuilder). Wins over `surfaceSlug`.\n */\n surfaceUrlKey?: 'WEB_BUILDER_URL' | 'CANVAS_SURFACE_URL' | 'DESIGN_SURFACE_URL';\n /**\n * Key of the web tile this native tile replaces in every launcher list.\n * The web entry stays in the catalog (deep links, tests, the WebView\n * lane) but users see one tile per app, the native one, under the\n * shared name.\n */\n supersedes?: string;\n /**\n * Account chrome, not a product app. Stays in the catalog so drawer /\n * deep-link routing still knows the native host, but never appears as\n * a tile in Apps or the Apps menu.\n */\n hideInLauncher?: boolean;\n};\n\n/**\n * Mobile Apps launcher. Labels, groups, and prompts stay in lockstep with the\n * browser ChatTopBar Apps menu (`packages-modules/account/browser`).\n */\nexport const MOBILE_APP_CATALOG: readonly MobileAppItem[] = [\n {\n key: 'design',\n label: 'Design',\n icon: 'palette-outline',\n group: 'Create',\n prompt: 'Design a 10-slide pitch deck for a coffee subscription startup',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'DESIGN_SURFACE_URL',\n surfaceSlug: 'design',\n },\n {\n key: 'canvas',\n label: 'Canvas',\n icon: 'view-grid-outline',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'CANVAS_SURFACE_URL',\n surfaceSlug: 'canvas',\n },\n {\n key: 'canvas-native',\n label: 'Canvas',\n supersedes: 'canvas',\n icon: 'vector-square',\n group: 'Create',\n prompt: 'Open a canvas and help me lay out the assets for this project.',\n // Renders through Module Federation: the viewer downloads from the\n // canvas-surface origin on open. First native surface; the classic\n // Canvas tile keeps the full web editor in the WebView host.\n nativeRoute: 'canvas-native',\n },\n {\n key: 'webbuilder',\n label: 'Web Builder',\n icon: 'application-outline',\n group: 'Create',\n prompt: 'Build a landing page for my bakery with a menu and a contact form',\n nativeRoute: 'webbuilder',\n surfaceUrlKey: 'WEB_BUILDER_URL',\n surfaceSlug: 'webbuilder',\n },\n {\n key: 'paper2poster',\n label: 'Paper 2 Poster',\n icon: 'presentation',\n group: 'Create',\n prompt: 'Turn this research paper into a conference poster I can edit.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'paper2poster',\n },\n {\n key: 'codezen',\n label: 'Codezen',\n icon: 'code-braces',\n group: 'Create',\n prompt: 'Clone my repository and fix the failing test',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'codezen',\n },\n {\n key: 'character',\n label: 'Characters',\n icon: 'drama-masks',\n group: 'Create',\n prompt: 'Create a stoic philosophy mentor character I can chat with',\n // Native federated experience (gallery -> detail -> chat); the web\n // surface remains reachable through the surface lane if ever needed.\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'characters-native',\n label: 'Characters',\n supersedes: 'character',\n icon: 'account-star',\n group: 'Create',\n prompt: 'Show me characters I can chat with.',\n nativeRoute: 'characters-native',\n surfaceSlug: 'character',\n },\n {\n key: 'chat-native',\n label: 'Chats',\n icon: 'message-text-outline',\n group: 'Team',\n prompt: 'Show me my conversations.',\n // Person-to-person messaging, federated like canvas: the whole UI\n // downloads from the chat-native surface on open. Not the AI chat -\n // that is the Home tab.\n nativeRoute: 'chat-native',\n },\n {\n key: 'workflow',\n label: 'Workflow',\n icon: 'sitemap',\n group: 'Automate',\n prompt: 'Build a workflow that runs every morning and sends me a summary of what changed.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'workflow',\n },\n {\n key: 'computer',\n label: 'Computer',\n icon: 'monitor',\n group: 'Automate',\n prompt: 'Open a browser and compare the top 5 CRM tools with screenshots',\n },\n {\n key: 'crm',\n label: 'CRM',\n icon: 'account-group-outline',\n group: 'Sell',\n prompt: 'Look at my pipeline and tell me which deals are going cold and what I should send them.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'crm',\n },\n {\n key: 'salesiq',\n label: 'SalesIQ',\n icon: 'radar',\n group: 'Sell',\n prompt: 'Show me who is on my website right now',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'salesiq',\n },\n {\n key: 'inbox',\n label: 'Inbox',\n icon: 'inbox-outline',\n group: 'Sell',\n prompt: 'Go through my inbox, tell me what actually needs a reply, and draft those replies.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'inbox',\n },\n {\n key: 'mailcampaign',\n label: 'Mail Campaigns',\n icon: 'bullhorn-outline',\n group: 'Sell',\n prompt: 'Draft an email campaign announcing what we shipped this month.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'mailcampaign',\n },\n {\n key: 'smscampaign',\n label: 'SMS Campaigns',\n icon: 'message-text-outline',\n group: 'Sell',\n prompt: \"Text my customers a short reminder about this week's offer.\",\n nativeRoute: 'webbuilder',\n surfaceSlug: 'smscampaign',\n },\n {\n key: 'social-post',\n label: 'Social Posts',\n icon: 'send-outline',\n group: 'Sell',\n prompt: 'Draft a launch post for X and LinkedIn and schedule it for Tuesday morning.',\n nativeRoute: 'webbuilder',\n // The deployed surface is `posts-surface`, not `social-post-surface`.\n surfaceSlug: 'posts',\n },\n {\n key: 'expenses',\n label: 'Expenses',\n icon: 'receipt',\n group: 'Money',\n prompt: 'Summarise my spend this month and flag anything unusual.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'expenses',\n },\n {\n key: 'cards-wallet',\n label: 'Cards & Wallet',\n icon: 'credit-card-outline',\n group: 'Money',\n prompt: 'Issue a $200 virtual card for monthly ad spend',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'cards-wallet',\n },\n {\n key: 'billing',\n label: 'Billing',\n icon: 'currency-usd',\n group: 'Money',\n prompt: 'Create an invoice for a $2,400 consulting project',\n nativeRoute: 'billing-native',\n surfaceSlug: 'billing',\n // Plan / subscription for this account — already in the drawer.\n hideInLauncher: true,\n },\n {\n key: 'kpi-motivation',\n label: 'KPI Motivation',\n icon: 'trophy-outline',\n group: 'Team',\n prompt: 'Set up a weekly sales KPI scoreboard for my team',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'kpi-motivation',\n },\n {\n key: 'issue-ticket',\n label: 'Issue Ticket',\n icon: 'bug-outline',\n group: 'Team',\n prompt: 'Create a bug board and triage my open issues',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'issues',\n },\n {\n key: 'notebook',\n label: 'Study',\n icon: 'school-outline',\n group: 'Team',\n prompt: 'Make a study guide from my lecture notes',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'notebooklm',\n },\n {\n key: 'resume',\n label: 'Resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'resume',\n },\n {\n key: 'resume-native',\n label: 'Resume',\n supersedes: 'resume',\n icon: 'file-account-outline',\n group: 'Team',\n prompt: 'Draft a resume for a senior product designer with 8 years of experience',\n nativeRoute: 'resume-native',\n },\n {\n key: 'job-search',\n label: 'Job Search',\n icon: 'briefcase-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'job-search',\n },\n {\n key: 'job-search-native',\n label: 'Job Search',\n supersedes: 'job-search',\n icon: 'briefcase-search-outline',\n group: 'Team',\n prompt: 'Find remote senior backend engineer roles and tailor my resume for one',\n nativeRoute: 'job-search-native',\n },\n {\n key: 'shop',\n label: 'Shop',\n icon: 'cart-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'shopping',\n },\n {\n key: 'shopping-native',\n label: 'Shop',\n supersedes: 'shop',\n icon: 'storefront-outline',\n group: 'More',\n prompt: 'Compare the best options for what I need and show me the tradeoffs.',\n // Federated storefront: search + cart download from shopping_native/Shop.\n // The classic Shop tile keeps the web surface in the WebView host.\n nativeRoute: 'shopping-native',\n },\n {\n key: 'travel-native',\n label: 'Travel',\n supersedes: 'travel',\n icon: 'airplane-takeoff',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'travel-native',\n },\n {\n key: 'travel',\n label: 'Travel',\n icon: 'airplane',\n group: 'More',\n prompt: 'Plan a 4-day trip for me: flights, somewhere to stay, and what to do each day.',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'travel',\n },\n {\n key: 'social-events',\n label: 'yantra.live',\n icon: 'ticket-outline',\n group: 'More',\n prompt: 'What concerts are happening nearby this weekend?',\n nativeRoute: 'webbuilder',\n surfaceSlug: 'social-events',\n },\n];\n\nexport const APP_GROUP_ORDER: readonly AppGroupId[] = ['Create', 'Automate', 'Sell', 'Money', 'Team', 'More'];\n\nexport type AppsTab = 'all' | 'favorites';\n\n/**\n * Poster colors per group - the tile artwork. Deliberately the same in light\n * and dark themes: artwork is content, the card chrome is what adapts.\n */\nexport const APP_GROUP_ART: Record<AppGroupId, { base: string; glow: string }> = {\n Create: { base: '#4f46e5', glow: '#c4b5fd' },\n Automate: { base: '#0f766e', glow: '#99f6e4' },\n Sell: { base: '#c2410c', glow: '#fed7aa' },\n Money: { base: '#15803d', glow: '#bbf7d0' },\n Team: { base: '#0369a1', glow: '#bae6fd' },\n More: { base: '#be185d', glow: '#fbcfe8' },\n};\n\nexport function matchesAppQuery(label: string, query: string): boolean {\n const q = query.toLowerCase().replace(/[^a-z0-9]/g, '');\n if (!q) return true;\n return label\n .toLowerCase()\n .replace(/[^a-z0-9]/g, '')\n .includes(q);\n}\n\n/** One tile per app: a web tile disappears when its native replacement is in the list. */\nexport function visibleMobileApps(items: readonly MobileAppItem[]): MobileAppItem[] {\n const replaced = new Set(items.map((item) => item.supersedes).filter(Boolean));\n return items.filter((item) => !item.hideInLauncher && !replaced.has(item.key));\n}\n\nexport function groupMobileApps(items: readonly MobileAppItem[], query: string) {\n const hits = visibleMobileApps(items).filter((item) => matchesAppQuery(item.label, query));\n return APP_GROUP_ORDER.map((label) => ({\n label,\n items: hits.filter((item) => item.group === label),\n })).filter((group) => group.items.length > 0);\n}\n\n/**\n * One flat grid (Manus/game-launcher style) instead of grouped sections: rows\n * stay dense and the group reads from each card's caption. Catalog order is\n * kept inside a group; groups follow APP_GROUP_ORDER.\n */\nexport function filterMobileApps(\n items: readonly MobileAppItem[],\n query: string,\n tab: AppsTab,\n favorites: ReadonlySet<string>,\n): MobileAppItem[] {\n const rank = new Map(APP_GROUP_ORDER.map((group, index) => [group, index]));\n return visibleMobileApps(items)\n .filter((item) => matchesAppQuery(item.label, query))\n .filter((item) => tab !== 'favorites' || favorites.has(item.key))\n .sort((a, b) => (rank.get(a.group) ?? APP_GROUP_ORDER.length) - (rank.get(b.group) ?? APP_GROUP_ORDER.length));\n}\n"],"names":[],"mappings":"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"}
@@ -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 { useWebViewRetention } from '../../hooks/useWebViewRetention';\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 /**\n * `clearCache` frees the HTTP cache and leaves the WebContent renderer\n * process - and its whole JS heap and layer store - resident. That is why the\n * app used to be evicted within seconds of backgrounding on a 6GB device.\n * Releasing the WebView itself (below) is what actually returns the memory;\n * this still drops the cache on the way out.\n */\n /**\n * Release the builder WebView while the app is backgrounded, but NOT on blur:\n * the user is actively working in this surface and a reload on every\n * navigation away would be hostile. Backgrounding is different - the app was\n * being evicted outright there, losing everything, so dropping the renderer\n * and reloading on return is strictly the better trade. `webbuilderWarmCache`\n * makes that return cheap.\n */\n const shouldRenderWebView = useWebViewRetention({ releaseOnBlur: false });\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 {shouldRenderWebView && (\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 )}\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 { useWebViewRetention } from '../../hooks/useWebViewRetention';\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 /**\n * `clearCache` frees the HTTP cache and leaves the WebContent renderer\n * process - and its whole JS heap and layer store - resident. That is why the\n * app used to be evicted within seconds of backgrounding on a 6GB device.\n * Releasing the WebView itself (below) is what actually returns the memory;\n * this still drops the cache on the way out.\n */\n /**\n * Release the builder WebView while the app is backgrounded, but NOT on blur:\n * the user is actively working in this surface and a reload on every\n * navigation away would be hostile. Backgrounding is different - the app was\n * being evicted outright there, losing everything, so dropping the renderer\n * and reloading on return is strictly the better trade. `webbuilderWarmCache`\n * makes that return cheap.\n */\n const shouldRenderWebView = useWebViewRetention({ releaseOnBlur: false });\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 {shouldRenderWebView && (\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 )}\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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adminide-stack/yantra-mobile",
3
- "version": "12.0.69-alpha.0",
3
+ "version": "12.0.69-alpha.2",
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.69-alpha.0"
28
+ "common": "12.0.69-alpha.2"
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.68-alpha.9",
44
+ "common": "12.0.69-alpha.0",
45
45
  "expo-constants": "*",
46
46
  "expo-secure-store": "*",
47
47
  "lodash": "*",
@@ -57,5 +57,5 @@
57
57
  "typescript": {
58
58
  "definition": "lib/index.d.ts"
59
59
  },
60
- "gitHead": "8dab0828d1c24d07f6b58add980888b94bc88684"
60
+ "gitHead": "e8d86de31198216a9edb5f5d01cf33adb3e8a038"
61
61
  }