@xapps-platform/marketplace-ui 0.1.16 → 0.1.18

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.
Files changed (35) hide show
  1. package/dist/MarketplaceContext.d.ts.map +1 -1
  2. package/dist/components/MarketplaceActivityTabs.d.ts.map +1 -1
  3. package/dist/components/MarketplacePrimaryNav.d.ts.map +1 -1
  4. package/dist/components/XappWorkspaceNav.d.ts +24 -0
  5. package/dist/components/XappWorkspaceNav.d.ts.map +1 -0
  6. package/dist/httpMarketplaceClient.d.ts +25 -0
  7. package/dist/httpMarketplaceClient.d.ts.map +1 -0
  8. package/dist/i18n.d.ts.map +1 -1
  9. package/dist/index.css +200 -14
  10. package/dist/index.css.map +2 -2
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +2804 -1721
  14. package/dist/index.js.map +4 -4
  15. package/dist/marketplace.css +239 -9
  16. package/dist/pages/CatalogPage.d.ts.map +1 -1
  17. package/dist/pages/InvoicesPage.d.ts.map +1 -1
  18. package/dist/pages/MonetizationPage.d.ts +1 -0
  19. package/dist/pages/MonetizationPage.d.ts.map +1 -1
  20. package/dist/pages/NotificationsPage.d.ts.map +1 -1
  21. package/dist/pages/PaymentsPage.d.ts.map +1 -1
  22. package/dist/pages/PublisherDetailPage.d.ts.map +1 -1
  23. package/dist/pages/RequestDetailPage.d.ts.map +1 -1
  24. package/dist/pages/RequestsPage.d.ts.map +1 -1
  25. package/dist/pages/WidgetView.d.ts.map +1 -1
  26. package/dist/pages/XappDetailPage.d.ts.map +1 -1
  27. package/dist/utils/installationPolicy.d.ts +7 -0
  28. package/dist/utils/installationPolicy.d.ts.map +1 -0
  29. package/dist/utils/marketplaceRouting.d.ts +8 -0
  30. package/dist/utils/marketplaceRouting.d.ts.map +1 -0
  31. package/dist/utils/operationalSurfaces.d.ts +1 -0
  32. package/dist/utils/operationalSurfaces.d.ts.map +1 -1
  33. package/dist/utils/xappWorkspace.d.ts +7 -0
  34. package/dist/utils/xappWorkspace.d.ts.map +1 -0
  35. package/package.json +2 -2
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/MarketplaceContext.tsx", "../../platform-i18n/src/index.tsx", "../src/i18n.tsx", "../src/MarketplaceApp.tsx", "../src/pages/CatalogPage.tsx", "../src/components/ConfirmActionModal.tsx", "../src/components/MarketplacePrimaryNav.tsx", "../src/utils/embedSearch.ts", "../src/utils/readers.ts", "../src/pages/InvoicesPage.tsx", "../src/components/MarketplaceActivityTabs.tsx", "../../browser-host/src/xmsCopy.ts", "../../browser-host/src/xms.ts", "../src/pages/MonetizationPage.tsx", "../src/pages/NotificationsPage.tsx", "../src/pages/PaymentsPage.tsx", "../src/pages/RequestDetailPage.tsx", "../src/components/SchemaOutputView.tsx", "../src/utils/paymentLock.ts", "../src/utils/guardMonetization.ts", "../src/utils/operationalSurfaces.ts", "../src/pages/RequestsPage.tsx", "../src/pages/XappDetailPage.tsx", "../src/utils/monetizationAccess.ts", "../src/pages/WidgetView.tsx", "../src/pages/PublishersPage.tsx", "../src/pages/PublisherDetailPage.tsx"],
4
- "sourcesContent": ["import React, { createContext, useContext, useEffect } from \"react\";\nimport { MarketplaceI18nProvider } from \"./i18n\";\nimport type { MarketplaceClient, MarketplaceEnv, MarketplaceHostAdapter } from \"./types\";\n\nexport type MarketplaceContextValue = {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n};\n\nconst Ctx = createContext<MarketplaceContextValue | null>(null);\n\nfunction applyMarketplaceThemeToDocument(theme: Record<string, unknown> | null | undefined): void {\n if (!theme || typeof document === \"undefined\") return;\n const root = document.documentElement;\n const map: Array<[string, string[]]> = [\n [\"primary\", [\"--cx-primary\", \"--mx-primary\"]],\n [\"primaryDark\", [\"--cx-primary-dark\", \"--mx-primary-hover\"]],\n [\"bg\", [\"--cx-bg\", \"--mx-bg\"]],\n [\"bgSubtle\", [\"--cx-bg-subtle\", \"--mx-bg-subtle\"]],\n [\"card\", [\"--cx-card\", \"--mx-card-bg\"]],\n [\"border\", [\"--cx-border\", \"--mx-border\"]],\n [\"text\", [\"--cx-text\", \"--mx-text-main\"]],\n [\"muted\", [\"--cx-muted\", \"--mx-text-muted\"]],\n [\"shadowSm\", [\"--cx-shadow-sm\", \"--mx-shadow-sm\"]],\n [\"shadow\", [\"--cx-shadow\", \"--mx-shadow\"]],\n [\"shadowLg\", [\"--cx-shadow-lg\", \"--mx-shadow-lg\"]],\n [\"radiusSm\", [\"--cx-radius-sm\", \"--mx-radius-sm\"]],\n [\"radiusMd\", [\"--cx-radius-md\", \"--mx-radius-md\"]],\n [\"radius\", [\"--cx-radius\", \"--cx-radius-lg\", \"--mx-radius-md\", \"--mx-radius-lg\"]],\n [\"radiusLg\", [\"--cx-radius-lg\", \"--mx-radius-lg\"]],\n [\"fontFamily\", [\"--mx-font-family\"]],\n ];\n\n for (const [key, cssVars] of map) {\n const rawValue = theme[key];\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n for (const cssVar of cssVars) root.style.setProperty(cssVar, value);\n }\n\n if (\n typeof theme.radius === \"string\" &&\n theme.radius.trim() &&\n !(typeof theme.radiusSm === \"string\" && theme.radiusSm.trim())\n ) {\n root.style.setProperty(\"--cx-radius-sm\", theme.radius.trim());\n root.style.setProperty(\"--mx-radius-sm\", theme.radius.trim());\n }\n if (typeof theme.bg === \"string\" && theme.bg.trim() && !theme.bgSubtle) {\n root.style.setProperty(\"--cx-bg-subtle\", theme.bg.trim());\n root.style.setProperty(\"--mx-bg-subtle\", theme.bg.trim());\n }\n\n const directTokens =\n theme.tokens && typeof theme.tokens === \"object\" && !Array.isArray(theme.tokens)\n ? (theme.tokens as Record<string, unknown>)\n : null;\n if (directTokens) {\n for (const [cssVar, rawValue] of Object.entries(directTokens)) {\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n if (\n !cssVar.startsWith(\"--mx-\") &&\n !cssVar.startsWith(\"--cx-\") &&\n !cssVar.startsWith(\"--xapps-\")\n ) {\n continue;\n }\n root.style.setProperty(cssVar, value);\n }\n }\n\n const themeMode =\n typeof theme.mode === \"string\"\n ? theme.mode.trim().toLowerCase()\n : typeof theme.themeMode === \"string\"\n ? theme.themeMode.trim().toLowerCase()\n : \"\";\n if (themeMode === \"dark\" || themeMode === \"light\") {\n root.dataset.xappsThemeMode = themeMode;\n }\n}\n\nfunction MarketplaceRuntimeBridge(props: {\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n useEffect(() => {\n const locale = String(props.env?.locale || props.host.locale || \"\").trim();\n if (locale && typeof document !== \"undefined\") {\n document.documentElement.lang = locale;\n }\n }, [props.env?.locale, props.host.locale]);\n\n useEffect(() => {\n applyMarketplaceThemeToDocument(props.host.theme || null);\n }, [props.host.theme]);\n\n return <>{props.children}</>;\n}\n\nexport function MarketplaceProvider(props: {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n return (\n <MarketplaceI18nProvider locale={props.env?.locale}>\n <MarketplaceRuntimeBridge host={props.host} env={props.env}>\n <Ctx.Provider value={{ client: props.client, host: props.host, env: props.env }}>\n {props.children}\n </Ctx.Provider>\n </MarketplaceRuntimeBridge>\n </MarketplaceI18nProvider>\n );\n}\n\nexport function useMarketplace(): MarketplaceContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"MarketplaceProvider is missing\");\n return v;\n}\n", "import React, { createContext, useContext, useMemo } from \"react\";\n\nexport type LocalizedText = string | Record<string, string | null | undefined> | null | undefined;\nexport type TranslationParams = Record<string, string | number | boolean | null | undefined>;\nexport type TranslationCatalog = Record<string, string>;\nexport type TranslationCatalogs = Record<string, TranslationCatalog>;\n\nexport type TranslateFunction = (\n key: string,\n params?: TranslationParams,\n fallback?: string,\n) => string;\n\nexport function normalizeLocale(input: unknown, fallbackLocale = \"en\"): string {\n const raw = String(input || \"\")\n .trim()\n .replace(/_/g, \"-\");\n if (!raw) return fallbackLocale;\n const parts = raw\n .split(\"-\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length === 0) return fallbackLocale;\n const [language, ...rest] = parts;\n return [language.toLowerCase(), ...rest.map((part) => part.toUpperCase())].join(\"-\");\n}\n\nexport function getLocaleCandidates(input: unknown, fallbackLocale = \"en\"): string[] {\n const normalized = normalizeLocale(input, fallbackLocale);\n const out = new Set<string>();\n if (normalized) out.add(normalized);\n const dash = normalized.indexOf(\"-\");\n if (dash > 0) out.add(normalized.slice(0, dash));\n const fallback = normalizeLocale(fallbackLocale, \"en\");\n if (fallback) out.add(fallback);\n const fallbackDash = fallback.indexOf(\"-\");\n if (fallbackDash > 0) out.add(fallback.slice(0, fallbackDash));\n out.add(\"en\");\n return Array.from(out);\n}\n\nexport function pickSupportedLocale(\n input: unknown,\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n const normalizedSupported = Array.from(\n new Set(\n supportedLocales.map((locale) => normalizeLocale(locale, fallbackLocale)).filter(Boolean),\n ),\n );\n const candidates = getLocaleCandidates(input, fallbackLocale);\n for (const candidate of candidates) {\n if (normalizedSupported.includes(candidate)) return candidate;\n }\n return normalizedSupported[0] || normalizeLocale(fallbackLocale, \"en\");\n}\n\nexport function detectBrowserLocale(\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n if (typeof navigator === \"undefined\") {\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n }\n const candidates = [\n navigator.language,\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n ];\n for (const candidate of candidates) {\n const resolved = pickSupportedLocale(candidate, supportedLocales, fallbackLocale);\n if (resolved) return resolved;\n }\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n}\n\nexport function interpolateTranslation(\n template: string,\n params: TranslationParams | undefined,\n): string {\n if (!params || Object.keys(params).length === 0) return template;\n return template.replace(/\\{([a-zA-Z0-9_]+)\\}/g, (_match, key) => {\n const value = params[key];\n return value === null || value === undefined ? \"\" : String(value);\n });\n}\n\nexport function resolveLocalizedText(\n value: LocalizedText,\n locale: string,\n fallbackLocale = \"en\",\n): string {\n if (typeof value === \"string\") return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n const candidates = getLocaleCandidates(locale, fallbackLocale);\n for (const candidate of candidates) {\n const localized = value[candidate];\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n for (const localized of Object.values(value)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n\nexport function translateFromCatalogs(input: {\n catalogs: TranslationCatalogs;\n locale: string;\n key: string;\n params?: TranslationParams;\n fallback?: string;\n fallbackLocale?: string;\n}): string {\n const fallbackLocale = input.fallbackLocale || \"en\";\n const candidates = getLocaleCandidates(input.locale, fallbackLocale);\n for (const candidate of candidates) {\n const catalog = input.catalogs[candidate];\n const template = catalog?.[input.key];\n if (typeof template === \"string\" && template.trim()) {\n return interpolateTranslation(template, input.params);\n }\n }\n return interpolateTranslation(input.fallback || input.key, input.params);\n}\n\ntype I18nContextValue = {\n locale: string;\n fallbackLocale: string;\n supportedLocales: readonly string[];\n setLocale: (nextLocale: string) => void;\n t: TranslateFunction;\n resolveText: (value: LocalizedText) => string;\n};\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\nexport function I18nProvider(props: {\n locale: string;\n catalogs: TranslationCatalogs;\n supportedLocales?: readonly string[];\n fallbackLocale?: string;\n setLocale?: (nextLocale: string) => void;\n children: React.ReactNode;\n}) {\n const fallbackLocale = props.fallbackLocale || \"en\";\n const supportedLocales = props.supportedLocales || Object.keys(props.catalogs);\n const locale = pickSupportedLocale(props.locale, supportedLocales, fallbackLocale);\n const setLocale = props.setLocale || (() => {});\n\n const value = useMemo<I18nContextValue>(\n () => ({\n locale,\n fallbackLocale,\n supportedLocales,\n setLocale,\n t: (key, params, fallback) =>\n translateFromCatalogs({\n catalogs: props.catalogs,\n locale,\n key,\n params,\n fallback,\n fallbackLocale,\n }),\n resolveText: (value) => resolveLocalizedText(value, locale, fallbackLocale),\n }),\n [fallbackLocale, locale, props.catalogs, setLocale, supportedLocales],\n );\n\n return <I18nContext.Provider value={value}>{props.children}</I18nContext.Provider>;\n}\n\nexport function useI18n(): I18nContextValue {\n const value = useContext(I18nContext);\n if (!value) {\n throw new Error(\"I18nProvider is missing\");\n }\n return value;\n}\n", "import { I18nProvider, type LocalizedText, useI18n } from \"@xapps-platform/platform-i18n\";\nimport type { ReactNode } from \"react\";\n\nfunction buildMarketplaceXmsCatalog(locale: \"en\" | \"ro\") {\n if (locale === \"ro\") {\n return {\n \"xapp.current_plan_label\": \"Plan curent\",\n \"xapp.selected_label\": \"Selectat\",\n \"xapp.default_label\": \"Implicit\",\n \"xapp.owned_unlock_label\": \"Unlock de\u021Binut\",\n \"xapp.additive_unlock_label\": \"Supliment cu abonament\",\n \"xapp.owned_unlock_active\": \"Unlock deja activ\",\n \"xapp.current_plan_active\": \"Plan activ\",\n \"xapp.checkout_starting\": \"Se porne\u0219te checkout-ul...\",\n \"xapp.additive_unlock_action\": \"Cump\u0103r\u0103 suplimentul\",\n \"xapp.checkout_action\": \"\u00CEncepe checkout-ul\",\n \"xapp.subscription_status_label\": \"Stare abonament\",\n \"xapp.subscription_coverage_label\": \"Acoperire\",\n \"xapp.subscription_reason_label\": \"Motiv stare\",\n \"xapp.subscription_overdue_since_label\": \"Restant din\",\n \"xapp.subscription_expiry_boundary_label\": \"Limit\u0103 expirare\",\n \"xapp.current_period_ends_label\": \"Perioada curent\u0103 se \u00EEncheie la\",\n \"xapp.cancelled_at_label\": \"Anulat la\",\n \"xapp.virtual_currency_label\": \"Moned\u0103 virtual\u0103\",\n \"xapp.current_balances_label\": \"Solduri acum\",\n \"xapp.credits_remaining_label\": \"Sold\",\n \"xapp.add_on_unlocks_label\": \"Unlock-uri suplimentare\",\n \"xapp.subscription_refresh_action\": \"Actualizeaz\u0103 starea\",\n \"xapp.subscription_refreshing\": \"Se actualizeaz\u0103...\",\n \"xapp.subscription_cancel_action\": \"Anuleaz\u0103 abonamentul\",\n \"xapp.subscription_cancelling\": \"Se anuleaz\u0103...\",\n \"xapp.subscription_operator_authority_label\": \"Autoritate operator\",\n \"xapp.subscription_management_destination_label\": \"Administreaz\u0103 \u00EEn\",\n \"xapp.subscription_operator_authority_gateway\": \"Gateway\",\n \"xapp.subscription_operator_authority_tenant\": \"Tenant\",\n \"xapp.subscription_operator_authority_publisher\": \"Publisher\",\n \"xapp.subscription_operator_authority_owner\": \"Proprietar aplica\u021Bie\",\n \"xapp.subscription_management_destination_gateway\": \"Administrare gateway\",\n \"xapp.subscription_management_destination_tenant\": \"Aplica\u021Bia tenantului\",\n \"xapp.subscription_management_destination_publisher\": \"Aplica\u021Bia publisherului\",\n \"xapp.subscription_management_destination_owner\": \"Proprietarul aplica\u021Biei\",\n \"xapp.subscription_management_hint_gateway\":\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn administrarea gateway-ului.\",\n \"xapp.subscription_management_hint_tenant\":\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia tenantului.\",\n \"xapp.subscription_management_hint_publisher\":\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia publisherului.\",\n \"xapp.subscription_management_hint_owner\":\n \"Administrarea avansat\u0103 a abonamentului este gestionat\u0103 de proprietarul aplica\u021Biei.\",\n \"xapp.subscription_management_open_action\": \"Deschide administrarea\",\n \"xapp.lifecycle_preview_at_label\": \"Previzualizare la\",\n \"xapp.lifecycle_preview_hint\":\n \"Starea abonamentului este previzualizat\u0103 pentru momentul selectat.\",\n \"xapp.history_route_subtitle\": \"Solduri, activitate recent\u0103 \u0219i cump\u0103r\u0103ri pentru {title}.\",\n \"xapp.history_route_subtitle_default\":\n \"Solduri, activitate recent\u0103 \u0219i cump\u0103r\u0103ri pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.plans_route_subtitle\": \"Acces, planuri \u0219i solduri pentru {title}.\",\n \"xapp.plans_route_subtitle_default\": \"Acces, planuri \u0219i solduri pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.plans_loading_title\": \"Se \u00EEncarc\u0103 planurile\",\n \"xapp.plans_loading_desc\":\n \"Se preg\u0103tesc planurile publicate, soldurile \u0219i accesul curent pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.no_plans_available\": \"Momentan nu exist\u0103 planuri disponibile.\",\n \"xapp.no_plans_available_desc\":\n \"Planurile publicate vor ap\u0103rea aici atunci c\u00E2nd aceast\u0103 aplica\u021Bie expune un paywall.\",\n \"xapp.checkout_hint\":\n \"Checkout-ul se deschide \u00EEntr-o pagin\u0103 securizat\u0103 de plat\u0103 administrat\u0103 de platform\u0103.\",\n \"xapp.current_plan_note\": \"Acest plan este deja activ pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.owned_unlock_note\": \"Acest supliment este deja inclus \u00EEn accesul curent.\",\n };\n }\n return {\n \"xapp.current_plan_label\": \"Current plan\",\n \"xapp.selected_label\": \"Selected\",\n \"xapp.default_label\": \"Default\",\n \"xapp.owned_unlock_label\": \"Owned unlock\",\n \"xapp.additive_unlock_label\": \"Add-on with membership\",\n \"xapp.owned_unlock_active\": \"Owned unlock active\",\n \"xapp.current_plan_active\": \"Current plan active\",\n \"xapp.checkout_starting\": \"Starting checkout...\",\n \"xapp.additive_unlock_action\": \"Purchase add-on unlock\",\n \"xapp.checkout_action\": \"Start checkout\",\n \"xapp.subscription_status_label\": \"Subscription state\",\n \"xapp.subscription_coverage_label\": \"Coverage\",\n \"xapp.subscription_reason_label\": \"Status reason\",\n \"xapp.subscription_overdue_since_label\": \"Overdue since\",\n \"xapp.subscription_expiry_boundary_label\": \"Expiry boundary\",\n \"xapp.current_period_ends_label\": \"Current period ends\",\n \"xapp.cancelled_at_label\": \"Cancelled at\",\n \"xapp.virtual_currency_label\": \"Currency\",\n \"xapp.current_balances_label\": \"Balances now\",\n \"xapp.credits_remaining_label\": \"Balance\",\n \"xapp.add_on_unlocks_label\": \"Add-on unlocks\",\n \"xapp.subscription_refresh_action\": \"Refresh status\",\n \"xapp.subscription_refreshing\": \"Refreshing...\",\n \"xapp.subscription_cancel_action\": \"Cancel subscription\",\n \"xapp.subscription_cancelling\": \"Cancelling...\",\n \"xapp.subscription_operator_authority_label\": \"Operator authority\",\n \"xapp.subscription_management_destination_label\": \"Manage in\",\n \"xapp.subscription_operator_authority_gateway\": \"Gateway\",\n \"xapp.subscription_operator_authority_tenant\": \"Tenant\",\n \"xapp.subscription_operator_authority_publisher\": \"Publisher\",\n \"xapp.subscription_operator_authority_owner\": \"App owner\",\n \"xapp.subscription_management_destination_gateway\": \"Gateway admin\",\n \"xapp.subscription_management_destination_tenant\": \"Tenant app\",\n \"xapp.subscription_management_destination_publisher\": \"Publisher app\",\n \"xapp.subscription_management_destination_owner\": \"App owner\",\n \"xapp.subscription_management_hint_gateway\":\n \"Advanced subscription management is handled in Gateway admin.\",\n \"xapp.subscription_management_hint_tenant\":\n \"Advanced subscription management is handled in the tenant app.\",\n \"xapp.subscription_management_hint_publisher\":\n \"Advanced subscription management is handled in the publisher app.\",\n \"xapp.subscription_management_hint_owner\":\n \"Advanced subscription management is handled by the app owner.\",\n \"xapp.subscription_management_open_action\": \"Open management\",\n \"xapp.lifecycle_preview_at_label\": \"Preview as of\",\n \"xapp.lifecycle_preview_hint\": \"Subscription state is being previewed for the selected time.\",\n \"xapp.history_route_subtitle\": \"Balances, recent activity, and purchases for {title}.\",\n \"xapp.history_route_subtitle_default\": \"Balances, recent activity, and purchases for this app.\",\n \"xapp.plans_route_subtitle\": \"Access, plans, and balances for {title}.\",\n \"xapp.plans_route_subtitle_default\": \"Access, plans, and balances for this app.\",\n \"xapp.plans_loading_title\": \"Loading plans\",\n \"xapp.plans_loading_desc\":\n \"Preparing published plans, balances, and current access for this app.\",\n \"xapp.no_plans_available\": \"No plans are currently available.\",\n \"xapp.no_plans_available_desc\":\n \"Published plans will appear here when this app exposes a paywall.\",\n \"xapp.checkout_hint\":\n \"Checkout opens in a secure hosted payment page managed by the platform.\",\n \"xapp.current_plan_note\": \"This plan is already active for this app.\",\n \"xapp.owned_unlock_note\": \"This add-on is already included in the current access.\",\n };\n}\n\nconst MARKETPLACE_CATALOGS = {\n en: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Error\",\n \"common.refresh\": \"Refresh\",\n \"common.previous\": \"Previous\",\n \"common.next\": \"Next\",\n \"common.search\": \"Search\",\n \"common.tag\": \"Tag\",\n \"common.all_tags\": \"All Tags\",\n \"common.clear_filter\": \"Clear Filter\",\n \"common.close_dialog\": \"Close dialog\",\n \"common.back_to_marketplace\": \"Back to Marketplace\",\n \"common.back_to_portal\": \"Back to Portal\",\n \"common.view_app_details\": \"View app details\",\n \"common.catalog_app\": \"Catalog app\",\n \"common.by\": \"by\",\n \"common.added\": \"Added\",\n \"common.added_only\": \"Added only\",\n \"common.confirm\": \"Confirm\",\n \"common.cancel\": \"Cancel\",\n \"common.details\": \"Details\",\n \"common.version\": \"Version\",\n \"common.status\": \"Status\",\n \"common.created\": \"Created\",\n \"common.completed\": \"Completed\",\n \"common.tool\": \"Tool\",\n \"common.action\": \"Action\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Session\",\n \"common.amount\": \"Amount\",\n \"common.payment\": \"Payment\",\n \"common.payment_session\": \"Payment Session\",\n \"common.invoice\": \"Invoice\",\n \"common.provider\": \"Provider\",\n \"common.channel\": \"Channel\",\n \"common.message\": \"Message\",\n \"common.trigger\": \"Trigger\",\n \"common.received\": \"Received\",\n \"common.document\": \"Document\",\n \"common.download\": \"Download\",\n \"common.open\": \"Open\",\n \"common.request\": \"Request\",\n \"common.request_id\": \"Request ID\",\n \"common.reason\": \"Reason\",\n \"common.app\": \"App\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"just now\",\n \"common.seconds_ago\": \"{value}s ago\",\n \"common.minutes_ago\": \"{value}m ago\",\n \"common.hours_ago\": \"{value}h ago\",\n \"common.days_ago\": \"{value}d ago\",\n \"nav.marketplace\": \"Marketplace navigation\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Publishers\",\n \"nav.activity\": \"Activity\",\n \"publisher.publishers_title\": \"Publishers\",\n \"publisher.search_publishers\": \"Search publishers\",\n \"publisher.search_publishers_placeholder\": \"Search by name or slug...\",\n \"publisher.publishers_count\": \"Publishers\",\n \"publisher.catalog_xapps\": \"Catalog xApps\",\n \"publisher.results_count\": \"{count} publisher{suffix}\",\n \"publisher.no_publishers_found\": \"No publishers found\",\n \"publisher.empty_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_default\": \"No publishers are available in the catalog right now.\",\n \"publisher.view_publisher\": \"View publisher\",\n \"publisher.search_xapps\": \"Search xapps\",\n \"publisher.search_xapps_placeholder\": \"Search by title, slug, description...\",\n \"publisher.search_xapps_aria\": \"Search this publisher's xapps\",\n \"publisher.no_xapps_found\": \"No xapps found\",\n \"publisher.empty_xapps_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_xapps_default\": \"{publisher} has no active xapps in the catalog right now.\",\n \"activity.navigation\": \"Activity navigation\",\n \"activity.requests\": \"Requests\",\n \"activity.monetization\": \"Monetization\",\n \"activity.payments\": \"Payments\",\n \"activity.invoices\": \"Invoices\",\n \"activity.notifications\": \"Notifications\",\n \"activity.requests_title\": \"Requests\",\n \"activity.monetization_title\": \"Monetization\",\n \"activity.payments_title\": \"Payments\",\n \"activity.invoices_title\": \"Invoices\",\n \"activity.notifications_title\": \"Notifications\",\n \"activity.unavailable_requests_title\": \"Requests are unavailable\",\n \"activity.unavailable_monetization_title\": \"Plans and balances are unavailable in this host.\",\n \"activity.unavailable_requests_desc\":\n \"This public catalog does not support viewing personal requests.\",\n \"activity.unavailable_payments_title\": \"Payments are unavailable in this host.\",\n \"activity.unavailable_invoices_title\": \"Invoices are unavailable in this host.\",\n \"activity.unavailable_notifications_title\": \"Notifications are unavailable in this host.\",\n \"activity.subject_required_title\": \"Subject required\",\n \"activity.subject_required_desc\":\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n \"activity.showing_requests_for\": \"Showing requests for {title}\",\n \"activity.showing_requests_for_prefix\": \"Showing requests for\",\n \"activity.showing_monetization_for\": \"Showing plans and balances for {title}\",\n \"activity.showing_monetization_for_prefix\": \"Showing plans and balances for\",\n \"activity.showing_payments_for\": \"Showing payment activity for {title}\",\n \"activity.showing_payments_for_prefix\": \"Showing payment activity for\",\n \"activity.showing_invoices_for\": \"Showing invoice records for {title}\",\n \"activity.showing_invoices_for_prefix\": \"Showing invoice records for\",\n \"activity.showing_notifications_for\": \"Showing notification activity for {title}\",\n \"activity.showing_notifications_for_prefix\": \"Showing notification activity for\",\n \"activity.payment_detail\": \"Payment Detail\",\n \"activity.invoice_detail\": \"Invoice Detail\",\n \"activity.back_to_payment_list\": \"Back to payment list\",\n \"activity.back_to_invoice_list\": \"Back to invoice list\",\n \"activity.back_to_notification_list\": \"Back to notification list\",\n \"activity.mark_all_read\": \"Mark all read\",\n \"activity.mark_read\": \"Mark read\",\n \"activity.unread_count\": \"{count} unread item{suffix}\",\n \"activity.loading_requests\": \"Loading requests...\",\n \"activity.loading_monetization\": \"Loading plans, balances, and recent activity...\",\n \"activity.no_requests\": \"No requests yet.\",\n \"activity.no_monetization\": \"No monetized apps are currently installed for this subject.\",\n \"activity.no_monetization_current\": \"No current plans or balances were found for this subject.\",\n \"activity.no_monetization_history\": \"No plan or balance history was found for this subject.\",\n \"activity.loading_payments\": \"Loading payments...\",\n \"activity.no_payments\": \"No payment activity found.\",\n \"activity.loading_payment_detail\": \"Loading payment details...\",\n \"activity.resume_payment\": \"Resume\",\n \"activity.loading_invoices\": \"Loading invoices...\",\n \"activity.no_invoices\": \"No invoices found.\",\n \"activity.loading_invoice_detail\": \"Loading invoice details...\",\n \"activity.lifecycle_history\": \"Lifecycle History\",\n \"activity.open_document\": \"Open Document\",\n \"activity.open_external\": \"Open External\",\n \"activity.notification_detail\": \"Notification Detail\",\n \"activity.loading_notifications\": \"Loading notifications...\",\n \"activity.no_notifications\": \"No notification activity found.\",\n \"activity.loading_notification_detail\": \"Loading notification details...\",\n \"activity.monetization_overview_hint\":\n \"Review current plans, subscriptions, and balances across this subject's apps.\",\n \"activity.monetization_overview_hint_with_past\":\n \"Review current and past plans, subscriptions, and balances across this subject's apps.\",\n \"activity.monetization_summary_title\": \"Plans and balances\",\n \"activity.monetization_summary_subtitle\":\n \"Review active plans, subscriptions, and balances before opening app details or history.\",\n \"activity.monetization_summary_apps\": \"Apps\",\n \"activity.monetization_summary_subscriptions\": \"Subscriptions\",\n \"activity.monetization_summary_balances\": \"Balances\",\n \"activity.monetization_summary_currencies\": \"Named currencies\",\n \"activity.monetization_card_subtitle\":\n \"Current plans, balances, and subscription state for this app.\",\n \"activity.monetization_focus_xapp\": \"Only this app\",\n \"activity.monetization_show_past\": \"Include past apps\",\n \"activity.monetization_show_current_only\": \"Only current apps\",\n \"activity.monetization_open_plans\": \"View plans\",\n \"activity.monetization_open_history\": \"View history\",\n \"activity.monetization_access_label\": \"Access\",\n \"activity.monetization_plan_label\": \"Plan\",\n \"activity.monetization_credits_label\": \"Balance\",\n \"activity.monetization_subscription_label\": \"Subscription\",\n \"activity.monetization_coverage_label\": \"Renewal state\",\n \"activity.monetization_renews_at\": \"Renews at\",\n \"activity.monetization_balance_state\": \"Balance status\",\n \"activity.monetization_balances_label\": \"Balances\",\n \"activity.monetization_source_label\": \"Origin\",\n \"activity.monetization_no_currency\": \"No named currency\",\n \"activity.monetization_unknown\": \"Unknown\",\n \"activity.monetization_none\": \"None\",\n \"activity.monetization_no_source\": \"No source\",\n \"activity.monetization_no_subscription\": \"No subscription\",\n \"activity.monetization_no_recurring_coverage\": \"No recurring coverage\",\n \"activity.monetization_not_scheduled\": \"Not scheduled\",\n \"activity.monetization_balance_unknown\": \"unknown\",\n \"activity.page_of\": \"Page {page} of {totalPages}\",\n \"activity.event\": \"Event\",\n \"activity.event_fallback\": \"event\",\n \"activity.request_detail_title\": \"Request Details\",\n \"activity.show_details\": \"Show details\",\n \"activity.hide_details\": \"Hide details\",\n \"activity.response_title\": \"Response\",\n \"activity.payment_pending\": \"Payment Pending\",\n \"activity.payment_required\": \"Payment Required\",\n \"activity.complete_payment\": \"Complete Payment\",\n \"activity.confirm_payment\": \"Confirm Payment\",\n \"activity.confirming_payment\": \"Confirming...\",\n \"activity.refresh_status\": \"Refresh Status\",\n \"activity.waiting_for_payment\": \"Waiting for payment confirmation\u2026\",\n \"activity.waiting_for_response\": \"Waiting for response\u2026\",\n \"activity.execution_timeline\": \"Execution Timeline\",\n \"activity.artifacts_title\": \"Artifacts\",\n \"activity.download_artifact\": \"Download Artifact\",\n \"activity.related_widgets_title\": \"Related Widgets\",\n \"activity.help_title\": \"Help\",\n \"activity.back_to_requests\": \"Back to Requests\",\n \"activity.open_widget\": \"Open {widget}\",\n \"activity.help_request\":\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} event\",\n \"activity.timeline_count_other\": \"{count} events\",\n \"activity.timeline_error_count_one\": \"{count} error\",\n \"activity.timeline_error_count_other\": \"{count} errors\",\n \"activity.guard_badge\": \"guard: {value}\",\n \"activity.trigger_badge\": \"trigger: {value}\",\n \"activity.outcome_badge\": \"outcome: {value}\",\n \"activity.current_access_badge\": \"access: {value}\",\n \"activity.current_access_detail\": \"Current access: {value}\",\n \"activity.reason_detail\": \"reason={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Upgrade subscription{suffix}\",\n \"activity.guard_action_complete_payment\": \"Complete payment{suffix}\",\n \"activity.guard_action_step_up_authentication\": \"Complete step-up authentication{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm action\",\n \"activity.guard_action_confirm_action_message\": \"Confirm action ({message})\",\n \"activity.guard_action_custom\": \"Action: {kind}\",\n ...buildMarketplaceXmsCatalog(\"en\"),\n \"status.unread\": \"Unread\",\n \"status.read\": \"Read\",\n \"common.back\": \"Back\",\n \"catalog.search_placeholder\": \"Search by name, description...\",\n \"catalog.search_aria\": \"Search apps\",\n \"catalog.filter_by_tag\": \"Filter by tag\",\n \"catalog.results_all\": \"{count} app{suffix}\",\n \"catalog.results_filtered\": \"{count} of {total} app{suffix}\",\n \"catalog.no_apps_found\": \"No apps found\",\n \"catalog.empty_added_only\":\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n \"catalog.empty_filtered\":\n \"Try adjusting your search or filters to find what you're looking for.\",\n \"catalog.empty_default\": \"No apps are available in the catalog right now.\",\n \"catalog.view_details\": \"View details\",\n \"catalog.remove_app_title\": \"Remove app?\",\n \"catalog.remove_app_description\":\n \"Remove {title} from your current workspace? You can add it again later.\",\n \"xapp.kicker_publisher\": \"Publisher: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Add to workspace\",\n \"xapp.remove_from_workspace\": \"Remove from workspace\",\n \"xapp.update_app\": \"Update app\",\n \"xapp.open_app\": \"Open app\",\n \"xapp.terms_title\": \"Terms & Conditions\",\n \"xapp.update_available\": \"Update available\",\n \"xapp.about_title\": \"About\",\n \"xapp.available_views_title\": \"Available Views\",\n \"xapp.open_to_access_views\":\n \"Open this app to start and install it automatically for your workspace.\",\n \"xapp.add_to_access_views\": \"Add this app to your workspace to access its available views.\",\n \"xapp.update_to_access_views_auto\":\n \"Open a view to update the app automatically for your workspace.\",\n \"xapp.update_to_access_views\":\n \"An update is available. Please update the app to access its available views.\",\n \"xapp.load_as_user_to_access\": \"Load the catalog as a user to access this app.\",\n \"xapp.no_views_available\": \"No app views are currently available.\",\n \"xapp.widget_primary\": \"Primary\",\n \"xapp.widget_open\": \"Open\",\n \"xapp.how_app_runs\": \"How This App Runs\",\n \"xapp.view_details\": \"View details\",\n \"xapp.no_run_requirements\": \"This app has no extra run requirements configured.\",\n \"xapp.guard_summary\":\n \"This app includes {itemCount} run check{itemSuffix} across {stageCount} stage{stageSuffix}. Open details to review access, payment, or follow-up steps.\",\n \"xapp.trigger_before_tool_run\": \"Before running this app\",\n \"xapp.trigger_after_tool_run\": \"After this app finishes\",\n \"xapp.trigger_before_widget_open\": \"Before opening this app\",\n \"xapp.trigger_after_widget_open\": \"After opening this app\",\n \"xapp.trigger_default\": \"App stage\",\n \"xapp.policy_any\": \"Any one satisfies\",\n \"xapp.policy_all\": \"All steps apply\",\n \"xapp.auto\": \"Auto\",\n \"xapp.user_step\": \"User step\",\n \"xapp.required\": \"Required\",\n \"xapp.info\": \"Info\",\n \"xapp.screenshots_title\": \"Screenshots\",\n \"xapp.screenshot_alt\": \"Screenshot {index}\",\n \"xapp.usage_credits_title\": \"Usage Credits\",\n \"xapp.current_access_title\": \"Current access\",\n \"xapp.access_state_label\": \"Access state\",\n \"xapp.access_state_available\": \"available\",\n \"xapp.subscription_status_label\": \"Subscription state\",\n \"xapp.subscription_coverage_label\": \"Coverage\",\n \"xapp.subscription_reason_label\": \"Status reason\",\n \"xapp.subscription_overdue_since_label\": \"Overdue since\",\n \"xapp.subscription_expiry_boundary_label\": \"Expiry boundary\",\n \"xapp.subscription_coverage_active\": \"Still covered\",\n \"xapp.subscription_coverage_inactive\": \"Not covered\",\n \"xapp.subscription_reason_grace_covered_past_due\": \"Coverage remains during grace period\",\n \"xapp.subscription_reason_past_due_after_period_end\":\n \"Current period ended without successful renewal\",\n \"xapp.subscription_reason_expired_after_boundary\": \"Expiry boundary reached\",\n \"xapp.renews_at_label\": \"Renews at\",\n \"xapp.current_period_ends_label\": \"Current period ends\",\n \"xapp.cancelled_at_label\": \"Cancelled at\",\n \"xapp.expires_at_label\": \"Expires at\",\n \"xapp.subscription_refresh_action\": \"Refresh status\",\n \"xapp.subscription_refreshing\": \"Refreshing...\",\n \"xapp.subscription_refresh_failed\": \"Unable to refresh subscription state.\",\n \"xapp.subscription_cancel_action\": \"Cancel subscription\",\n \"xapp.subscription_cancelling\": \"Cancelling...\",\n \"xapp.subscription_cancel_title\": \"Cancel subscription?\",\n \"xapp.subscription_cancel_description\":\n \"The subscription will stop renewing. Current access remains available until the current period ends.\",\n \"xapp.subscription_cancel_failed\": \"Unable to cancel this subscription.\",\n \"xapp.lifecycle_preview_at_label\": \"Preview as of\",\n \"xapp.lifecycle_preview_hint\": \"Subscription state is being previewed for the selected time.\",\n \"xapp.virtual_currency_label\": \"Currency\",\n \"xapp.current_balances_label\": \"Balances now\",\n \"xapp.credits_remaining_label\": \"Balance\",\n \"xapp.available_label\": \"Available\",\n \"xapp.ready_to_use\": \"{count} ready to use\",\n \"xapp.source_label\": \"Source\",\n \"xapp.linked_payment_sessions\": \"{count} linked to visible payment sessions\",\n \"xapp.in_flight_label\": \"In flight\",\n \"xapp.needs_review_label\": \"Needs review\",\n \"xapp.invalid_label\": \"Invalid\",\n \"xapp.invalid_credits\": \"{count} orphan ledger rows are not usable credits\",\n \"xapp.by_tool_label\": \"By tool\",\n \"xapp.for_label\": \"for\",\n \"xapp.invalid_short\": \"{count} invalid\",\n \"xapp.in_flight_short\": \"{count} in flight\",\n \"xapp.stale_short\": \"{count} stale\",\n \"xapp.activity_title\": \"Activity\",\n \"xapp.details_title\": \"Details\",\n \"xapp.app_id_label\": \"App ID\",\n \"xapp.status_added\": \"Added\",\n \"xapp.status_available\": \"Available\",\n \"xapp.publisher_label\": \"Publisher\",\n \"xapp.tags_label\": \"Tags\",\n \"xapp.view_terms\": \"View Terms & Conditions\",\n \"xapp.close_terms_dialog\": \"Close terms dialog\",\n \"xapp.view_full_document\": \"View Full Document\",\n \"xapp.accept_terms\": \"I have read and accept the terms and conditions.\",\n \"xapp.accept_add_app\": \"Accept & Add app\",\n \"xapp.accept_update\": \"Accept & Update\",\n \"widget.session_ended_title\": \"Session ended\",\n \"widget.session_ended_message\": \"Your session ended. Go back and open the widget again.\",\n \"widget.session_expired_title\": \"Widget session expired\",\n \"widget.session_expired_refresh_failed\":\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n \"widget.session_expired_default\":\n \"This widget session ended. Go back and open it again to continue.\",\n \"widget.confirm_continue_prompt\": \"This action requires confirmation. Continue?\",\n \"widget.unable_to_load\": \"Unable to load widget\",\n \"widget.preparing\": \"Preparing {title}...\",\n \"widget.secure_session_setup\": \"Setting up a secure session for this app.\",\n \"payment_lock.complete_payment\": \"Complete Payment\",\n \"payment_lock.continue\": \"Continue\",\n \"payment_lock.confirming_payment_finality\": \"Confirming payment finality with provider.\",\n \"payment_lock.pending_retry_confirm\":\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n \"payment_lock.confirmed_refresh\": \"Payment is confirmed. Refresh to continue.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Payment is not settled. Complete a new payment attempt.\",\n \"payment_lock.requires_additional_action\":\n \"Payment requires additional action. Complete payment to continue.\",\n \"payment_lock.attempt_failed\": \"Last payment attempt failed. Complete payment to continue.\",\n \"payment_lock.evidence_used\": \"Payment evidence was already used. Start a new payment attempt.\",\n \"payment_lock.evidence_consumed\":\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n \"payment_lock.required_before_request\": \"Payment is required before this request can proceed.\",\n },\n ro: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Eroare\",\n \"common.refresh\": \"Re\u00EEmprosp\u0103tare\",\n \"common.previous\": \"Anterior\",\n \"common.next\": \"Urm\u0103tor\",\n \"common.search\": \"C\u0103utare\",\n \"common.tag\": \"Etichet\u0103\",\n \"common.all_tags\": \"Toate etichetele\",\n \"common.clear_filter\": \"\u0218terge filtrul\",\n \"common.close_dialog\": \"\u00CEnchide dialogul\",\n \"common.back_to_marketplace\": \"\u00CEnapoi la Marketplace\",\n \"common.back_to_portal\": \"\u00CEnapoi la Portal\",\n \"common.view_app_details\": \"Vezi detaliile aplica\u021Biei\",\n \"common.catalog_app\": \"Aplica\u021Bie din catalog\",\n \"common.by\": \"de\",\n \"common.added\": \"Ad\u0103ugat\u0103\",\n \"common.added_only\": \"Doar ad\u0103ugate\",\n \"common.confirm\": \"Confirm\u0103\",\n \"common.cancel\": \"Anuleaz\u0103\",\n \"common.details\": \"Detalii\",\n \"common.version\": \"Versiune\",\n \"common.status\": \"Stare\",\n \"common.created\": \"Creat\",\n \"common.completed\": \"Finalizat\",\n \"common.tool\": \"Instrument\",\n \"common.action\": \"Ac\u021Biune\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Sesiune\",\n \"common.amount\": \"Sum\u0103\",\n \"common.payment\": \"Plat\u0103\",\n \"common.payment_session\": \"Sesiune de plat\u0103\",\n \"common.invoice\": \"Factur\u0103\",\n \"common.provider\": \"Furnizor\",\n \"common.channel\": \"Canal\",\n \"common.message\": \"Mesaj\",\n \"common.trigger\": \"Declan\u0219ator\",\n \"common.received\": \"Primit\",\n \"common.document\": \"Document\",\n \"common.download\": \"Descarc\u0103\",\n \"common.open\": \"Deschide\",\n \"common.request\": \"Cerere\",\n \"common.request_id\": \"ID cerere\",\n \"common.reason\": \"Motiv\",\n \"common.app\": \"Aplica\u021Bie\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"chiar acum\",\n \"common.seconds_ago\": \"acum {value}s\",\n \"common.minutes_ago\": \"acum {value}m\",\n \"common.hours_ago\": \"acum {value}h\",\n \"common.days_ago\": \"acum {value}z\",\n \"nav.marketplace\": \"Navigare marketplace\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Dezvoltatori\",\n \"nav.activity\": \"Activitate\",\n \"activity.navigation\": \"Navigare activitate\",\n \"activity.requests\": \"Cereri\",\n \"activity.monetization\": \"Monetizare\",\n \"activity.payments\": \"Pl\u0103\u021Bi\",\n \"activity.invoices\": \"Facturi\",\n \"activity.notifications\": \"Notific\u0103ri\",\n \"activity.requests_title\": \"Cereri\",\n \"activity.monetization_title\": \"Monetizare\",\n \"activity.payments_title\": \"Pl\u0103\u021Bi\",\n \"activity.invoices_title\": \"Facturi\",\n \"activity.notifications_title\": \"Notific\u0103ri\",\n \"publisher.publishers_title\": \"Dezvoltatori\",\n \"publisher.search_publishers\": \"Caut\u0103 dezvoltatori\",\n \"publisher.search_publishers_placeholder\": \"Caut\u0103 dup\u0103 nume sau slug...\",\n \"publisher.publishers_count\": \"Dezvoltatori\",\n \"publisher.catalog_xapps\": \"xApps \u00EEn catalog\",\n \"publisher.results_count\": \"{count} dezvoltator{suffix}\",\n \"publisher.no_publishers_found\": \"Nu au fost g\u0103si\u021Bi dezvoltatori\",\n \"publisher.empty_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_default\": \"Momentan nu exist\u0103 dezvoltatori disponibili \u00EEn catalog.\",\n \"publisher.view_publisher\": \"Vezi dezvoltatorul\",\n \"publisher.search_xapps\": \"Caut\u0103 xapps\",\n \"publisher.search_xapps_placeholder\": \"Caut\u0103 dup\u0103 titlu, slug, descriere...\",\n \"publisher.search_xapps_aria\": \"Caut\u0103 xapps-urile acestui dezvoltator\",\n \"publisher.no_xapps_found\": \"Nu au fost g\u0103site xapps\",\n \"publisher.empty_xapps_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_xapps_default\": \"{publisher} nu are xapps active \u00EEn catalog acum.\",\n \"activity.unavailable_requests_title\": \"Cereri indisponibile\",\n \"activity.unavailable_monetization_title\": \"Monetizarea nu este disponibil\u0103 \u00EEn acest host.\",\n \"activity.unavailable_requests_desc\":\n \"Acest catalog public nu permite vizualizarea cererilor personale.\",\n \"activity.unavailable_payments_title\": \"Pl\u0103\u021Bile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_invoices_title\": \"Facturile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_notifications_title\": \"Notific\u0103rile nu sunt disponibile \u00EEn acest host.\",\n \"activity.subject_required_title\": \"Subiect necesar\",\n \"activity.subject_required_desc\":\n \"Aceast\u0103 sesiune de host nu este asociat\u0103 cu un utilizator. Cere hostului s\u0103 creeze o sesiune de catalog cu un subjectId.\",\n \"activity.showing_requests_for\": \"Se afi\u0219eaz\u0103 cererile pentru {title}\",\n \"activity.showing_requests_for_prefix\": \"Se afi\u0219eaz\u0103 cererile pentru\",\n \"activity.showing_monetization_for\": \"Se afi\u0219eaz\u0103 planurile \u0219i soldurile pentru {title}\",\n \"activity.showing_monetization_for_prefix\": \"Se afi\u0219eaz\u0103 planurile \u0219i soldurile pentru\",\n \"activity.showing_payments_for\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru {title}\",\n \"activity.showing_payments_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru\",\n \"activity.showing_invoices_for\": \"Se afi\u0219eaz\u0103 facturile pentru {title}\",\n \"activity.showing_invoices_for_prefix\": \"Se afi\u0219eaz\u0103 facturile pentru\",\n \"activity.showing_notifications_for\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru {title}\",\n \"activity.showing_notifications_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru\",\n \"activity.payment_detail\": \"Detaliu plat\u0103\",\n \"activity.invoice_detail\": \"Detaliu factur\u0103\",\n \"activity.back_to_payment_list\": \"\u00CEnapoi la lista pl\u0103\u021Bilor\",\n \"activity.back_to_invoice_list\": \"\u00CEnapoi la lista facturilor\",\n \"activity.back_to_notification_list\": \"\u00CEnapoi la lista notific\u0103rilor\",\n \"activity.mark_all_read\": \"Marcheaz\u0103 tot ca citit\",\n \"activity.mark_read\": \"Marcheaz\u0103 ca citit\",\n \"activity.unread_count\": \"{count} notific{suffix} necitit{suffix2}\",\n \"activity.loading_requests\": \"Se \u00EEncarc\u0103 cererile...\",\n \"activity.loading_monetization\": \"Se \u00EEncarc\u0103 planurile, soldurile \u0219i activitatea recent\u0103...\",\n \"activity.no_requests\": \"Nu exist\u0103 \u00EEnc\u0103 cereri.\",\n \"activity.no_monetization\":\n \"Nu exist\u0103 \u00EEnc\u0103 aplica\u021Bii monetizate instalate pentru acest subiect.\",\n \"activity.no_monetization_current\":\n \"Nu au fost g\u0103site planuri sau solduri curente pentru acest subiect.\",\n \"activity.no_monetization_history\":\n \"Nu a fost g\u0103sit niciun istoric de planuri sau solduri pentru acest subiect.\",\n \"activity.loading_payments\": \"Se \u00EEncarc\u0103 pl\u0103\u021Bile...\",\n \"activity.no_payments\": \"Nu a fost g\u0103sit\u0103 activitate de plat\u0103.\",\n \"activity.loading_payment_detail\": \"Se \u00EEncarc\u0103 detaliile pl\u0103\u021Bii...\",\n \"activity.resume_payment\": \"Reia\",\n \"activity.loading_invoices\": \"Se \u00EEncarc\u0103 facturile...\",\n \"activity.no_invoices\": \"Nu au fost g\u0103site facturi.\",\n \"activity.loading_invoice_detail\": \"Se \u00EEncarc\u0103 detaliile facturii...\",\n \"activity.lifecycle_history\": \"Istoric ciclu de via\u021B\u0103\",\n \"activity.open_document\": \"Deschide documentul\",\n \"activity.open_external\": \"Deschide extern\",\n \"activity.notification_detail\": \"Detaliu notificare\",\n \"activity.loading_notifications\": \"Se \u00EEncarc\u0103 notific\u0103rile...\",\n \"activity.no_notifications\": \"Nu a fost g\u0103sit\u0103 activitate de notificare.\",\n \"activity.loading_notification_detail\": \"Se \u00EEncarc\u0103 detaliile notific\u0103rii...\",\n \"activity.monetization_overview_hint\":\n \"Revizuie\u0219te planurile, abonamentele \u0219i soldurile curente pentru aplica\u021Biile legate de acest subiect.\",\n \"activity.monetization_overview_hint_with_past\":\n \"Revizuie\u0219te planurile, abonamentele \u0219i soldurile curente \u0219i trecute pentru aplica\u021Biile acestui subiect.\",\n \"activity.monetization_summary_title\": \"Planuri \u0219i solduri\",\n \"activity.monetization_summary_subtitle\":\n \"Revizuie\u0219te planurile active, abonamentele \u0219i soldurile \u00EEnainte s\u0103 deschizi detaliile aplica\u021Biei sau istoricul.\",\n \"activity.monetization_summary_apps\": \"Aplica\u021Bii\",\n \"activity.monetization_summary_subscriptions\": \"Abonamente\",\n \"activity.monetization_summary_balances\": \"Solduri\",\n \"activity.monetization_summary_currencies\": \"Monede nominale\",\n \"activity.monetization_card_subtitle\":\n \"Planurile curente, soldurile \u0219i starea abonamentului pentru aceast\u0103 aplica\u021Bie.\",\n \"activity.monetization_focus_xapp\": \"Doar aceast\u0103 aplica\u021Bie\",\n \"activity.monetization_show_past\": \"Include aplica\u021Biile anterioare\",\n \"activity.monetization_show_current_only\": \"Doar aplica\u021Biile curente\",\n \"activity.monetization_open_plans\": \"Vezi planurile\",\n \"activity.monetization_open_history\": \"Vezi istoricul\",\n \"activity.monetization_access_label\": \"Acces\",\n \"activity.monetization_plan_label\": \"Plan\",\n \"activity.monetization_credits_label\": \"Sold\",\n \"activity.monetization_subscription_label\": \"Abonament\",\n \"activity.monetization_coverage_label\": \"Stare re\u00EEnnoire\",\n \"activity.monetization_renews_at\": \"Se re\u00EEnnoie\u0219te la\",\n \"activity.monetization_balance_state\": \"Status sold\",\n \"activity.monetization_balances_label\": \"Solduri\",\n \"activity.monetization_source_label\": \"Origine\",\n \"activity.monetization_no_currency\": \"F\u0103r\u0103 moned\u0103 nominal\u0103\",\n \"activity.monetization_unknown\": \"Necunoscut\",\n \"activity.monetization_none\": \"Niciunul\",\n \"activity.monetization_no_source\": \"F\u0103r\u0103 surs\u0103\",\n \"activity.monetization_no_subscription\": \"F\u0103r\u0103 abonament\",\n \"activity.monetization_no_recurring_coverage\": \"F\u0103r\u0103 acoperire recurent\u0103\",\n \"activity.monetization_not_scheduled\": \"Neprogramat\",\n \"activity.monetization_balance_unknown\": \"necunoscut\",\n \"activity.page_of\": \"Pagina {page} din {totalPages}\",\n \"activity.event\": \"Eveniment\",\n \"activity.event_fallback\": \"eveniment\",\n \"activity.request_detail_title\": \"Detalii cerere\",\n \"activity.show_details\": \"Arat\u0103 detalii\",\n \"activity.hide_details\": \"Ascunde detalii\",\n \"activity.response_title\": \"R\u0103spuns\",\n \"activity.payment_pending\": \"Plat\u0103 \u00EEn a\u0219teptare\",\n \"activity.payment_required\": \"Plata este necesar\u0103\",\n \"activity.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"activity.confirm_payment\": \"Confirm\u0103 plata\",\n \"activity.confirming_payment\": \"Se confirm\u0103...\",\n \"activity.refresh_status\": \"Re\u00EEmprosp\u0103teaz\u0103 starea\",\n \"activity.waiting_for_payment\": \"\u00CEn a\u0219teptarea confirm\u0103rii pl\u0103\u021Bii\u2026\",\n \"activity.waiting_for_response\": \"\u00CEn a\u0219teptarea r\u0103spunsului\u2026\",\n \"activity.execution_timeline\": \"Cronologia execu\u021Biei\",\n \"activity.artifacts_title\": \"Artefacte\",\n \"activity.download_artifact\": \"Descarc\u0103 artefactul\",\n \"activity.related_widgets_title\": \"Widget-uri asociate\",\n \"activity.help_title\": \"Ajutor\",\n \"activity.back_to_requests\": \"\u00CEnapoi la cereri\",\n \"activity.open_widget\": \"Deschide {widget}\",\n \"activity.help_request\":\n \"Ai nevoie de ajutor pentru aceast\u0103 cerere? Contacteaz\u0103 administratorul folosind ID-ul cererii de mai sus.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} eveniment\",\n \"activity.timeline_count_other\": \"{count} evenimente\",\n \"activity.timeline_error_count_one\": \"{count} eroare\",\n \"activity.timeline_error_count_other\": \"{count} erori\",\n \"activity.guard_badge\": \"gard\u0103: {value}\",\n \"activity.trigger_badge\": \"declan\u0219ator: {value}\",\n \"activity.outcome_badge\": \"rezultat: {value}\",\n \"activity.current_access_badge\": \"acces: {value}\",\n \"activity.current_access_detail\": \"Acces curent: {value}\",\n \"activity.reason_detail\": \"motiv={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Actualizeaz\u0103 abonamentul{suffix}\",\n \"activity.guard_action_complete_payment\": \"Finalizeaz\u0103 plata{suffix}\",\n \"activity.guard_action_step_up_authentication\":\n \"Finalizeaz\u0103 autentificarea suplimentar\u0103{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm\u0103 ac\u021Biunea\",\n \"activity.guard_action_confirm_action_message\": \"Confirm\u0103 ac\u021Biunea ({message})\",\n \"activity.guard_action_custom\": \"Ac\u021Biune: {kind}\",\n ...buildMarketplaceXmsCatalog(\"ro\"),\n \"status.unread\": \"Necitit\",\n \"status.read\": \"Citit\",\n \"common.back\": \"\u00CEnapoi\",\n \"catalog.search_placeholder\": \"Caut\u0103 dup\u0103 nume, descriere...\",\n \"catalog.search_aria\": \"Caut\u0103 aplica\u021Bii\",\n \"catalog.filter_by_tag\": \"Filtreaz\u0103 dup\u0103 etichet\u0103\",\n \"catalog.results_all\": \"{count} aplica\u021Bi{suffix}\",\n \"catalog.results_filtered\": \"{count} din {total} aplica\u021Bi{suffix}\",\n \"catalog.no_apps_found\": \"Nu au fost g\u0103site aplica\u021Bii\",\n \"catalog.empty_added_only\":\n \"Nu exist\u0103 \u00EEnc\u0103 aplica\u021Bii instalate pentru subiectul curent. Dezactiveaz\u0103 filtrul Doar ad\u0103ugate pentru a vedea catalogul complet.\",\n \"catalog.empty_filtered\":\n \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea sau filtrele pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"catalog.empty_default\": \"Momentan nu exist\u0103 aplica\u021Bii disponibile \u00EEn catalog.\",\n \"catalog.view_details\": \"Vezi detalii\",\n \"catalog.remove_app_title\": \"Elimini aplica\u021Bia?\",\n \"catalog.remove_app_description\":\n \"Elimini {title} din spa\u021Biul de lucru curent? O po\u021Bi ad\u0103uga din nou mai t\u00E2rziu.\",\n \"xapp.kicker_publisher\": \"Dezvoltator: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Adaug\u0103 \u00EEn spa\u021Biul de lucru\",\n \"xapp.remove_from_workspace\": \"Elimin\u0103 din spa\u021Biul de lucru\",\n \"xapp.update_app\": \"Actualizeaz\u0103 aplica\u021Bia\",\n \"xapp.open_app\": \"Deschide aplica\u021Bia\",\n \"xapp.terms_title\": \"Termeni \u0219i condi\u021Bii\",\n \"xapp.update_available\": \"Actualizare disponibil\u0103\",\n \"xapp.about_title\": \"Despre\",\n \"xapp.available_views_title\": \"Vizualiz\u0103ri disponibile\",\n \"xapp.open_to_access_views\":\n \"Deschide aceast\u0103 aplica\u021Bie pentru a o porni \u0219i instala automat \u00EEn spa\u021Biul t\u0103u de lucru.\",\n \"xapp.add_to_access_views\":\n \"Adaug\u0103 aceast\u0103 aplica\u021Bie \u00EEn spa\u021Biul t\u0103u de lucru pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.update_to_access_views_auto\":\n \"Deschide o vizualizare pentru a actualiza automat aplica\u021Bia \u00EEn spa\u021Biul t\u0103u de lucru.\",\n \"xapp.update_to_access_views\":\n \"Este disponibil\u0103 o actualizare. Actualizeaz\u0103 aplica\u021Bia pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.load_as_user_to_access\":\n \"\u00CEncarc\u0103 catalogul ca utilizator pentru a accesa aceast\u0103 aplica\u021Bie.\",\n \"xapp.no_views_available\": \"Nu exist\u0103 \u00EEn prezent vizualiz\u0103ri disponibile pentru aplica\u021Bie.\",\n \"xapp.widget_primary\": \"Principal\",\n \"xapp.widget_open\": \"Deschide\",\n \"xapp.how_app_runs\": \"Cum ruleaz\u0103 aceast\u0103 aplica\u021Bie\",\n \"xapp.view_details\": \"Vezi detalii\",\n \"xapp.no_run_requirements\":\n \"Aceast\u0103 aplica\u021Bie nu are cerin\u021Be suplimentare de rulare configurate.\",\n \"xapp.guard_summary\":\n \"Aceast\u0103 aplica\u021Bie include {itemCount} verific\u0103r{itemSuffix} de rulare \u00EEn {stageCount} etap{stageSuffix}. Deschide detaliile pentru a vedea accesul, plata sau pa\u0219ii de continuare.\",\n \"xapp.trigger_before_tool_run\": \"\u00CEnainte de rularea aplica\u021Biei\",\n \"xapp.trigger_after_tool_run\": \"Dup\u0103 finalizarea aplica\u021Biei\",\n \"xapp.trigger_before_widget_open\": \"\u00CEnainte de deschiderea aplica\u021Biei\",\n \"xapp.trigger_after_widget_open\": \"Dup\u0103 deschiderea aplica\u021Biei\",\n \"xapp.trigger_default\": \"Etap\u0103 aplica\u021Bie\",\n \"xapp.policy_any\": \"Este suficient\u0103 una\",\n \"xapp.policy_all\": \"Se aplic\u0103 to\u021Bi pa\u0219ii\",\n \"xapp.auto\": \"Automat\",\n \"xapp.user_step\": \"Pas utilizator\",\n \"xapp.required\": \"Obligatoriu\",\n \"xapp.info\": \"Informativ\",\n \"xapp.screenshots_title\": \"Capturi de ecran\",\n \"xapp.screenshot_alt\": \"Captur\u0103 de ecran {index}\",\n \"xapp.usage_credits_title\": \"Credite de utilizare\",\n \"xapp.current_access_title\": \"Acces curent\",\n \"xapp.access_state_label\": \"Stare acces\",\n \"xapp.access_state_available\": \"disponibil\",\n \"xapp.subscription_status_label\": \"Stare abonament\",\n \"xapp.subscription_coverage_label\": \"Acoperire\",\n \"xapp.subscription_reason_label\": \"Motiv stare\",\n \"xapp.subscription_overdue_since_label\": \"\u00CEn \u00EEnt\u00E2rziere din\",\n \"xapp.subscription_expiry_boundary_label\": \"Limit\u0103 expirare\",\n \"xapp.subscription_coverage_active\": \"\u00CEnc\u0103 activ\",\n \"xapp.subscription_coverage_inactive\": \"Inactiv\",\n \"xapp.subscription_reason_grace_covered_past_due\": \"Accesul r\u0103m\u00E2ne activ \u00EEn perioada de gra\u021Bie\",\n \"xapp.subscription_reason_past_due_after_period_end\":\n \"Perioada curent\u0103 s-a \u00EEncheiat f\u0103r\u0103 re\u00EEnnoire reu\u0219it\u0103\",\n \"xapp.subscription_reason_expired_after_boundary\": \"A fost atins\u0103 limita de expirare\",\n \"xapp.renews_at_label\": \"Se re\u00EEnnoie\u0219te la\",\n \"xapp.current_period_ends_label\": \"Perioada curent\u0103 se \u00EEncheie la\",\n \"xapp.cancelled_at_label\": \"Anulat la\",\n \"xapp.expires_at_label\": \"Expir\u0103 la\",\n \"xapp.subscription_refresh_action\": \"Actualizeaz\u0103 starea\",\n \"xapp.subscription_refreshing\": \"Se actualizeaz\u0103...\",\n \"xapp.subscription_refresh_failed\": \"Starea abonamentului nu a putut fi actualizat\u0103.\",\n \"xapp.subscription_cancel_action\": \"Anuleaz\u0103 abonamentul\",\n \"xapp.subscription_cancelling\": \"Se anuleaz\u0103...\",\n \"xapp.subscription_cancel_title\": \"Anulezi abonamentul?\",\n \"xapp.subscription_cancel_description\":\n \"Abonamentul nu se va mai re\u00EEnnoi. Accesul curent r\u0103m\u00E2ne disponibil p\u00E2n\u0103 la sf\u00E2r\u0219itul perioadei curente.\",\n \"xapp.subscription_cancel_failed\": \"Abonamentul nu a putut fi anulat.\",\n \"xapp.lifecycle_preview_at_label\": \"Previzualizare la\",\n \"xapp.lifecycle_preview_hint\":\n \"Ciclul de via\u021B\u0103 al abonamentului este previzualizat pentru momentul selectat.\",\n \"xapp.virtual_currency_label\": \"Moned\u0103 virtual\u0103\",\n \"xapp.current_balances_label\": \"Solduri curente\",\n \"xapp.credits_remaining_label\": \"Sold\",\n \"xapp.available_label\": \"Disponibile\",\n \"xapp.ready_to_use\": \"{count} gata de utilizare\",\n \"xapp.source_label\": \"Surs\u0103\",\n \"xapp.linked_payment_sessions\": \"{count} asociate sesiunilor de plat\u0103 vizibile\",\n \"xapp.in_flight_label\": \"\u00CEn curs\",\n \"xapp.needs_review_label\": \"Necesit\u0103 verificare\",\n \"xapp.invalid_label\": \"Invalide\",\n \"xapp.invalid_credits\":\n \"{count} \u00EEnregistr\u0103ri orfane din ledger nu reprezint\u0103 credite utilizabile\",\n \"xapp.by_tool_label\": \"Dup\u0103 instrument\",\n \"xapp.for_label\": \"pentru\",\n \"xapp.invalid_short\": \"{count} invalide\",\n \"xapp.in_flight_short\": \"{count} \u00EEn curs\",\n \"xapp.stale_short\": \"{count} expirate\",\n \"xapp.activity_title\": \"Activitate\",\n \"xapp.details_title\": \"Detalii\",\n \"xapp.app_id_label\": \"ID aplica\u021Bie\",\n \"xapp.status_added\": \"Ad\u0103ugat\u0103\",\n \"xapp.status_available\": \"Disponibil\u0103\",\n \"xapp.publisher_label\": \"Dezvoltator\",\n \"xapp.tags_label\": \"Etichete\",\n \"xapp.view_terms\": \"Vezi termenii \u0219i condi\u021Biile\",\n \"xapp.close_terms_dialog\": \"\u00CEnchide dialogul termenilor\",\n \"xapp.view_full_document\": \"Vezi documentul complet\",\n \"xapp.accept_terms\": \"Am citit \u0219i accept termenii \u0219i condi\u021Biile.\",\n \"xapp.accept_add_app\": \"Accept\u0103 \u0219i adaug\u0103 aplica\u021Bia\",\n \"xapp.accept_update\": \"Accept\u0103 \u0219i actualizeaz\u0103\",\n \"widget.session_ended_title\": \"Sesiune \u00EEncheiat\u0103\",\n \"widget.session_ended_message\": \"Sesiunea s-a \u00EEncheiat. Revino \u0219i deschide din nou widgetul.\",\n \"widget.session_expired_title\": \"Sesiunea widgetului a expirat\",\n \"widget.session_expired_refresh_failed\":\n \"Sesiunea acestui widget a expirat \u0219i nu a putut fi re\u00EEnnoit\u0103. Deschide-l din nou pentru a continua.\",\n \"widget.session_expired_default\":\n \"Sesiunea acestui widget s-a \u00EEncheiat. Revino \u0219i deschide-l din nou pentru a continua.\",\n \"widget.confirm_continue_prompt\": \"Aceast\u0103 ac\u021Biune necesit\u0103 confirmare. Continua\u021Bi?\",\n \"widget.unable_to_load\": \"Widgetul nu a putut fi \u00EEnc\u0103rcat\",\n \"widget.preparing\": \"Se preg\u0103te\u0219te {title}...\",\n \"widget.secure_session_setup\": \"Se configureaz\u0103 o sesiune securizat\u0103 pentru aceast\u0103 aplica\u021Bie.\",\n \"payment_lock.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"payment_lock.continue\": \"Continu\u0103\",\n \"payment_lock.confirming_payment_finality\": \"Se confirm\u0103 finalitatea pl\u0103\u021Bii la procesator.\",\n \"payment_lock.pending_retry_confirm\":\n \"Plata este \u00EEnc\u0103 \u00EEn a\u0219teptare la procesator. Re\u00EEncearc\u0103 verificarea \u00EEn c\u00E2teva secunde.\",\n \"payment_lock.confirmed_refresh\": \"Plata este confirmat\u0103. Re\u00EEmprosp\u0103teaz\u0103 pentru a continua.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Plata nu este finalizat\u0103. \u00CEncepe o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.requires_additional_action\":\n \"Plata necesit\u0103 o ac\u021Biune suplimentar\u0103. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.attempt_failed\":\n \"Ultima \u00EEncercare de plat\u0103 a e\u0219uat. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.evidence_used\":\n \"Dovada pl\u0103\u021Bii a fost deja folosit\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.evidence_consumed\":\n \"Dovada pl\u0103\u021Bii a fost deja consumat\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.required_before_request\":\n \"Plata este necesar\u0103 \u00EEnainte ca aceast\u0103 cerere s\u0103 poat\u0103 continua.\",\n },\n} as const;\n\nexport function MarketplaceI18nProvider(props: { locale?: string; children: ReactNode }) {\n return (\n <I18nProvider locale={props.locale || \"en\"} catalogs={MARKETPLACE_CATALOGS}>\n {props.children}\n </I18nProvider>\n );\n}\n\nexport function useMarketplaceI18n() {\n return useI18n();\n}\n\nexport function resolveMarketplaceText(value: LocalizedText, locale?: string | null): string {\n let candidateValue: LocalizedText = value;\n if (typeof candidateValue === \"string\") {\n const trimmed = candidateValue.trim();\n if (!trimmed) return \"\";\n if (trimmed.startsWith(\"{\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n candidateValue = parsed as Record<string, string | null | undefined>;\n } else {\n return trimmed;\n }\n } catch {\n return trimmed;\n }\n } else {\n return trimmed;\n }\n }\n if (!candidateValue || typeof candidateValue !== \"object\" || Array.isArray(candidateValue)) {\n return \"\";\n }\n const currentLocale = String(locale || \"en\").trim() || \"en\";\n const direct = candidateValue[currentLocale];\n if (typeof direct === \"string\" && direct.trim()) return direct;\n const base = currentLocale.split(\"-\")[0];\n const baseValue = candidateValue[base];\n if (typeof baseValue === \"string\" && baseValue.trim()) return baseValue;\n const english = candidateValue.en;\n if (typeof english === \"string\" && english.trim()) return english;\n for (const localized of Object.values(candidateValue)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n", "import { Route, Routes } from \"react-router-dom\";\nimport { CatalogPage } from \"./pages/CatalogPage\";\nimport { InvoicesPage } from \"./pages/InvoicesPage\";\nimport { MonetizationPage } from \"./pages/MonetizationPage\";\nimport { NotificationsPage } from \"./pages/NotificationsPage\";\nimport { PaymentsPage } from \"./pages/PaymentsPage\";\nimport { RequestDetailPage } from \"./pages/RequestDetailPage\";\nimport { RequestsPage } from \"./pages/RequestsPage\";\nimport XappDetailPage, { XappPlansPage } from \"./pages/XappDetailPage\";\nimport { WidgetView } from \"./pages/WidgetView\";\nimport { PublishersPage } from \"./pages/PublishersPage\";\nimport { PublisherDetailPage } from \"./pages/PublisherDetailPage\";\n\nexport function MarketplaceApp() {\n return (\n <Routes>\n {/*\n IMPORTANT: These routes must be mountable under arbitrary bases (Portal: /marketplace,\n Embed: /embed/catalog). Therefore, we use relative paths (no leading \"/\").\n */}\n <Route path=\"\" element={<CatalogPage />} />\n <Route path=\"publishers\" element={<PublishersPage />} />\n <Route path=\"publishers/:publisherSlug\" element={<PublisherDetailPage />} />\n <Route path=\"xapps/:xappId\" element={<XappDetailPage />} />\n <Route path=\"xapps/:xappId/plans\" element={<XappPlansPage />} />\n <Route path=\"requests\" element={<RequestsPage />} />\n <Route path=\"monetization\" element={<MonetizationPage />} />\n <Route path=\"payments\" element={<PaymentsPage />} />\n <Route path=\"invoices\" element={<InvoicesPage />} />\n <Route path=\"notifications\" element={<NotificationsPage />} />\n <Route path=\"requests/:id\" element={<RequestDetailPage />} />\n <Route path=\"widget/:installationId/:widgetId\" element={<WidgetView />} />\n <Route path=\"*\" element={<CatalogPage />} />\n </Routes>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXapp } from \"../types\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype StoredCatalogFilters = {\n addedOnly?: boolean;\n selectedTag?: string;\n};\n\ntype PendingRemoval = {\n installationId: string;\n xappId: string;\n title: string;\n} | null;\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction getDefaultWidgetId(x: CatalogXapp): string | null {\n const rawWidgets = asRecord(x.manifest).widgets;\n const widgets: unknown[] | null = Array.isArray(rawWidgets) ? rawWidgets : null;\n if (!widgets || widgets.length === 0) return null;\n const def = widgets.find((w) => asRecord(w).default === true);\n const pick = def || widgets[0];\n return readFirstString(asRecord(pick).id) || null;\n}\n\nfunction getDefaultWidgetName(x: CatalogXapp, locale?: string | null): string | null {\n const rawWidgets = asRecord(x.manifest).widgets;\n const widgets: unknown[] | null = Array.isArray(rawWidgets) ? rawWidgets : null;\n if (!widgets || widgets.length === 0) return null;\n const def = widgets.find((w) => asRecord(w).default === true);\n const pick = asRecord(def || widgets[0]);\n return (\n resolveMarketplaceText(pick.title as any, locale) || readFirstString(pick.name, pick.id) || null\n );\n}\n\nfunction buildCatalogFilterStorageKey(input: {\n isEmbedded: boolean;\n singleXappMode?: boolean;\n xappId?: string;\n publishers?: string[];\n tags?: string[];\n subjectId?: string | null;\n}): string {\n const mode = input.isEmbedded ? \"embed\" : \"portal\";\n const scope = input.singleXappMode && input.xappId ? `xapp:${input.xappId}` : \"catalog\";\n const publishers = (input.publishers ?? []).slice().sort().join(\",\") || \"all\";\n const tags = (input.tags ?? []).slice().sort().join(\",\") || \"all\";\n const subject = String(input.subjectId || \"\").trim() || \"anonymous\";\n return `xapps:marketplace:catalog-filters:${mode}:${scope}:subject=${subject}:publishers=${publishers}:tags=${tags}`;\n}\n\nfunction readStoredCatalogFilters(storageKey: string): StoredCatalogFilters | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredCatalogFilters | null;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredCatalogFilters(storageKey: string, value: StoredCatalogFilters): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(value));\n } catch {\n // Ignore storage write failures; filters still work for the current session.\n }\n}\n\nexport function CatalogPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel = env?.copy?.addAppLabel || \"Add app\";\n const removeAppLabel = env?.copy?.removeAppLabel || \"Remove app\";\n const openAppLabel = env?.copy?.openAppLabel || t(\"xapp.open_app\", undefined, \"Open app\");\n const installationPolicyResolved = env?.installationPolicyResolved !== false;\n const mutationControlsReady = installationPolicyResolved || !host.subjectId || !canMutate;\n const autoUpdateMode =\n mutationControlsReady &&\n (env?.installationPolicy ?? host.installationPolicy)?.update_mode ===\n \"auto_update_compatible\" &&\n Boolean(host.subjectId);\n const autoAvailableMode =\n mutationControlsReady &&\n (env?.installationPolicy ?? host.installationPolicy)?.mode === \"auto_available\" &&\n Boolean(host.subjectId);\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const storageKey = useMemo(\n () =>\n buildCatalogFilterStorageKey({\n isEmbedded,\n singleXappMode: env?.singleXappMode,\n xappId: env?.xappId,\n publishers: env?.publishers,\n tags: env?.tags,\n subjectId: host.subjectId,\n }),\n [env?.publishers, env?.singleXappMode, env?.tags, env?.xappId, host.subjectId, isEmbedded],\n );\n const defaultTag = env?.tags?.[0] ?? \"\";\n\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [q, setQ] = useState(\"\");\n const [installedOnly, setInstalledOnly] = useState<boolean>(() =>\n Boolean(readStoredCatalogFilters(storageKey)?.addedOnly),\n );\n const [selectedTag, setSelectedTag] = useState<string>(() => {\n const stored = readStoredCatalogFilters(storageKey);\n return typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag;\n });\n const [pendingRemoval, setPendingRemoval] = useState<PendingRemoval>(null);\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n const allTags = useMemo(() => {\n const s = new Set<string>();\n for (const x of items) {\n const tags = x.manifest?.tags;\n if (Array.isArray(tags)) {\n for (const t of tags) s.add(t);\n }\n }\n // If env.tags provided, we might want to restrict the dropdown to only those.\n if (env?.tags && env.tags.length > 0) {\n return Array.from(s)\n .filter((t) => env.tags!.includes(t))\n .sort((a, b) => a.localeCompare(b));\n }\n return Array.from(s).sort((a, b) => a.localeCompare(b));\n }, [items, env?.tags]);\n\n async function refresh() {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listCatalogXapps();\n setItems(Array.isArray(res?.items) ? res.items : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const stored = readStoredCatalogFilters(storageKey);\n setInstalledOnly(Boolean(stored?.addedOnly));\n setSelectedTag(typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag);\n }, [defaultTag, storageKey]);\n\n useEffect(() => {\n if (!autoAvailableMode || !installedOnly) return;\n setInstalledOnly(false);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: false,\n selectedTag: selectedTag || \"\",\n });\n }, [autoAvailableMode, installedOnly, selectedTag, storageKey]);\n\n useEffect(() => {\n const restrictedTags = env?.tags ?? [];\n if (selectedTag && restrictedTags.length > 0 && !restrictedTags.includes(selectedTag)) {\n setSelectedTag(defaultTag);\n }\n }, [defaultTag, env?.tags, selectedTag]);\n\n useEffect(() => {\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: selectedTag || \"\",\n });\n }, [installedOnly, selectedTag, storageKey]);\n\n const filtered = useMemo(() => {\n const qq = q.trim().toLowerCase();\n return items.filter((x) => {\n const inst = installationsByXappId[String(x.id)];\n const isInstalled = Boolean(inst);\n if (installedOnly && !isInstalled) return false;\n\n // Filter by tags from env (if any) - these are usually mandatory restrictions from the session\n if (env?.tags && env.tags.length > 0) {\n const xTags = Array.isArray(x.manifest?.tags)\n ? x.manifest.tags.filter((tag): tag is string => typeof tag === \"string\")\n : [];\n const hasMatch = env.tags.some((t) => xTags.includes(t));\n if (!hasMatch) return false;\n }\n\n // Filter by publishers from env (if any)\n if (env?.publishers && env.publishers.length > 0) {\n if (x.publisher?.slug && !env.publishers.includes(x.publisher.slug)) return false;\n }\n\n // Local UI filter (Tags dropdown)\n if (selectedTag) {\n const tags = asRecord(x).manifest ? asRecord(asRecord(x).manifest).tags : undefined;\n if (!Array.isArray(tags) || !tags.includes(selectedTag)) return false;\n }\n\n if (!qq) return true;\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(x.name);\n const description =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${description} ${x.slug}`.toLowerCase();\n return hay.includes(qq);\n });\n }, [\n env?.publishers,\n env?.tags,\n installationsByXappId,\n installedOnly,\n items,\n locale,\n q,\n selectedTag,\n ]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav active=\"xapps\" isEmbedded={isEmbedded} tokenSearch={tokenSearch} />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">{t(\"common.search\", undefined, \"Search\")}</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"catalog.search_placeholder\",\n undefined,\n \"Search by name, description...\",\n )}\n aria-label={t(\"catalog.search_aria\", undefined, \"Search apps\")}\n />\n </div>\n\n <div className=\"mx-input-group\">\n <label className=\"mx-label\">{t(\"common.tag\", undefined, \"Tag\")}</label>\n <select\n className=\"mx-input mx-select\"\n value={selectedTag}\n onChange={(e) => {\n const next = e.target.value;\n setSelectedTag(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: next,\n });\n }}\n aria-label={t(\"catalog.filter_by_tag\", undefined, \"Filter by tag\")}\n >\n <option value=\"\">{t(\"common.all_tags\", undefined, \"All Tags\")}</option>\n {allTags.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n </div>\n\n {mutationControlsReady && !autoAvailableMode ? (\n <label className=\"mx-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={installedOnly}\n onChange={(e) => {\n const next = e.target.checked;\n setInstalledOnly(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: next,\n selectedTag: selectedTag || \"\",\n });\n }}\n className=\"mx-checkbox\"\n />\n <span className=\"mx-label mx-label-inline\">\n {t(\"common.added_only\", undefined, \"Added only\")}\n </span>\n </label>\n ) : null}\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filtered.length === items.length\n ? t(\n \"catalog.results_all\",\n {\n count: filtered.length,\n suffix: filtered.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} app${filtered.length === 1 ? \"\" : \"s\"}`,\n )\n : t(\n \"catalog.results_filtered\",\n {\n count: filtered.length,\n total: items.length,\n suffix: items.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} of ${items.length} app${items.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filtered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"catalog.no_apps_found\", undefined, \"No apps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {!autoAvailableMode && installedOnly && items.length > 0\n ? t(\n \"catalog.empty_added_only\",\n undefined,\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n )\n : q || selectedTag || installedOnly\n ? t(\n \"catalog.empty_filtered\",\n undefined,\n \"Try adjusting your search or filters to find what you're looking for.\",\n )\n : t(\n \"catalog.empty_default\",\n undefined,\n \"No apps are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n filtered.map((x: CatalogXapp) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n readFirstString(x.name, x.slug) ||\n \"App\";\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const image =\n typeof manifest.image === \"string\"\n ? manifest.image\n : \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const updateAvailable = Boolean(inst?.updateAvailable);\n const defaultWidgetId = getDefaultWidgetId(x);\n const defaultWidgetName =\n getDefaultWidgetName(x, locale) || t(\"common.widget\", undefined, \"Widget\");\n\n const xTerms = asRecord(manifest.terms);\n const requiresTerms = Boolean(\n Object.keys(xTerms).length > 0 ||\n (typeof xTerms.text === \"string\" && xTerms.text.trim()) ||\n (typeof xTerms.url === \"string\" && xTerms.url.trim()),\n );\n const needsInstallDetails = !x.manifest || !(\"terms\" in manifest) || requiresTerms;\n\n const detailTo = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(x.id))}`\n : `/marketplace/xapps/${encodeURIComponent(String(x.id))}`,\n search: tokenSearch,\n };\n\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n {x.publisher?.slug ? (\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")}{\" \"}\n <Link\n to={{\n pathname: isEmbedded\n ? `/publishers/${encodeURIComponent(String(x.publisher.slug))}`\n : `/marketplace/publishers/${encodeURIComponent(\n String(x.publisher.slug),\n )}`,\n search: tokenSearch,\n }}\n className=\"mx-inline-link\"\n >\n {x.publisher.name || x.publisher.slug}\n </Link>\n </div>\n ) : (\n <div className=\"mx-card-publisher\">\n {t(\"common.catalog_app\", undefined, \"Catalog app\")}\n </div>\n )}\n <div className=\"mx-card-badges\">\n {!autoAvailableMode && installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {(Array.isArray(manifest.tags) ? manifest.tags : [])\n .filter((t): t is string => typeof t === \"string\")\n .slice(0, 3)\n .map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"catalog.view_details\", undefined, \"View details\")}\n </Link>\n {canMutate &&\n mutationControlsReady &&\n (!installed ? (\n <button\n className=\"mx-btn mx-btn-primary mx-btn-sm\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (needsInstallDetails) {\n navigate(detailTo);\n return;\n }\n host.requestInstall({\n xappId: String(x.id),\n defaultWidgetId,\n xappTitle: title,\n widgetName: defaultWidgetName,\n openAfterInstall: autoAvailableMode && Boolean(defaultWidgetId),\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {autoAvailableMode ? openAppLabel : addAppLabel}\n </button>\n ) : autoAvailableMode ? (\n <button\n className=\"mx-btn mx-btn-primary mx-btn-sm\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!defaultWidgetId || !inst?.installationId) {\n navigate(detailTo);\n return;\n }\n if (updateAvailable && host.requestUpdate && autoUpdateMode) {\n host.requestUpdate({\n installationId: inst.installationId,\n xappId: String(x.id),\n widgetId: defaultWidgetId,\n xappTitle: title,\n widgetName: defaultWidgetName,\n });\n return;\n }\n if (updateAvailable) {\n navigate(detailTo);\n return;\n }\n host.openWidget({\n installationId: inst.installationId,\n widgetId: defaultWidgetId,\n xappId: String(x.id),\n xappTitle: title,\n widgetName: t(\"common.widget\", undefined, \"Widget\"),\n });\n }}\n >\n {openAppLabel}\n </button>\n ) : !autoAvailableMode ? (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm mx-btn-danger-text\"\n disabled={!inst?.installationId}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (inst?.installationId) {\n setPendingRemoval({\n installationId: inst.installationId,\n xappId: String(x.id),\n title,\n });\n }\n }}\n >\n {removeAppLabel}\n </button>\n ) : null)}\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n <ConfirmActionModal\n open={Boolean(pendingRemoval)}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={\n pendingRemoval\n ? t(\n \"catalog.remove_app_description\",\n { title: pendingRemoval.title },\n `Remove ${pendingRemoval.title} from your current workspace? You can add it again later.`,\n )\n : \"\"\n }\n confirmLabel={removeAppLabel}\n onCancel={() => setPendingRemoval(null)}\n onConfirm={() => {\n if (!pendingRemoval) return;\n host.requestUninstall?.({\n installationId: pendingRemoval.installationId,\n xappId: pendingRemoval.xappId,\n });\n setPendingRemoval(null);\n }}\n />\n </div>\n );\n}\n", "import { useEffect } from \"react\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\nexport function ConfirmActionModal(props: {\n open: boolean;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const { t } = useMarketplaceI18n();\n const {\n open,\n title,\n description,\n confirmLabel = t(\"common.confirm\", undefined, \"Confirm\"),\n cancelLabel = t(\"common.cancel\", undefined, \"Cancel\"),\n onConfirm,\n onCancel,\n } = props;\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onCancel();\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [onCancel, open]);\n\n if (!open) return null;\n\n return (\n <div className=\"mx-detail-modal-backdrop\" onClick={onCancel}>\n <div\n className=\"mx-sidebar-card mx-detail-modal\"\n onClick={(event) => event.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"mx-confirm-action-title\"\n >\n <div className=\"mx-detail-modal-head\">\n <h2 id=\"mx-confirm-action-title\" className=\"mx-section-title mx-section-title-tight\">\n {title}\n </h2>\n <button\n onClick={onCancel}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"common.close_dialog\", undefined, \"Close dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {description ? (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{description}</div>\n ) : null}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <button className=\"mx-btn mx-btn-outline\" data-variant=\"danger\" onClick={onConfirm}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\ntype MarketplacePrimaryNavProps = {\n active: \"xapps\" | \"publishers\" | \"activity\";\n isEmbedded: boolean;\n tokenSearch: string;\n};\n\nexport function MarketplacePrimaryNav(props: MarketplacePrimaryNavProps) {\n const { t } = useMarketplaceI18n();\n const xappsTo = props.isEmbedded ? `/${props.tokenSearch}` : `/marketplace${props.tokenSearch}`;\n const publishersTo = props.isEmbedded\n ? `/publishers${props.tokenSearch}`\n : `/marketplace/publishers${props.tokenSearch}`;\n const activityTo = props.isEmbedded\n ? `/requests${props.tokenSearch}`\n : `/marketplace/requests${props.tokenSearch}`;\n\n return (\n <nav\n className=\"mx-nav-switch\"\n aria-label={t(\"nav.marketplace\", undefined, \"Marketplace navigation\")}\n >\n <Link\n to={xappsTo as any}\n className={`mx-nav-link ${props.active === \"xapps\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"xapps\" ? \"page\" : undefined}\n >\n {t(\"nav.xapps\", undefined, \"Xapps\")}\n </Link>\n <Link\n to={publishersTo as any}\n className={`mx-nav-link ${props.active === \"publishers\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"publishers\" ? \"page\" : undefined}\n >\n {t(\"nav.publishers\", undefined, \"Publishers\")}\n </Link>\n <Link\n to={activityTo as any}\n className={`mx-nav-link ${props.active === \"activity\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"activity\" ? \"page\" : undefined}\n >\n {t(\"nav.activity\", undefined, \"Activity\")}\n </Link>\n </nav>\n );\n}\n", "export function readHostReturnUrl(search: string): string {\n const qs = new URLSearchParams(String(search || \"\"));\n return String(qs.get(\"xapps_host_return_url\") || qs.get(\"xappsHostReturnUrl\") || \"\").trim();\n}\n\nexport function buildTokenSearch(token: string, search: string): string {\n const params = new URLSearchParams();\n if (token) params.set(\"token\", token);\n const hostReturnUrl = readHostReturnUrl(search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n const out = params.toString();\n return out ? `?${out}` : \"\";\n}\n", "export function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nexport function readString(value: unknown): string {\n if (typeof value === \"string\") return value.trim();\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return \"\";\n}\n\nexport function readFirstString(...values: unknown[]): string {\n for (const value of values) {\n const candidate = readString(value);\n if (candidate) return candidate;\n }\n return \"\";\n}\n\nexport function parseDateValue(value: unknown): Date | null {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value;\n }\n\n if (isRecord(value)) {\n const secondsValue = value.seconds ?? value._seconds;\n const nanosValue = value.nanoseconds ?? value._nanoseconds;\n const seconds = typeof secondsValue === \"number\" ? secondsValue : Number(secondsValue);\n const nanos = typeof nanosValue === \"number\" ? nanosValue : Number(nanosValue || 0);\n if (Number.isFinite(seconds)) {\n const parsed = new Date(seconds * 1000 + (Number.isFinite(nanos) ? nanos / 1_000_000 : 0));\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n }\n\n const text = readString(value);\n if (!text) return null;\n\n const candidates = new Set<string>([text]);\n if (/^\\d+$/.test(text)) {\n const asMs = new Date(Number(text));\n if (!Number.isNaN(asMs.getTime())) return asMs;\n }\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/.test(text)) {\n candidates.add(text.replace(\" \", \"T\"));\n candidates.add(`${text.replace(\" \", \"T\")}Z`);\n }\n if (text.endsWith(\" UTC\")) {\n candidates.add(`${text.slice(0, -4)}Z`);\n }\n\n for (const candidate of candidates) {\n const parsed = new Date(candidate);\n if (!Number.isNaN(parsed.getTime())) return parsed;\n }\n\n return null;\n}\n\nexport function formatDateTime(value: unknown): string {\n const parsed = parseDateValue(value);\n return parsed ? parsed.toLocaleString() : \"\";\n}\n\nexport function normalizeExpandStage(\n value: unknown,\n expanded: boolean,\n): \"inline\" | \"focus\" | \"fullscreen\" {\n return value === \"inline\" || value === \"focus\" || value === \"fullscreen\"\n ? value\n : expanded\n ? \"focus\"\n : \"inline\";\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype InvoiceRecord = Record<string, unknown>;\ntype InvoicePagination = { total: number; page: number; pageSize: number; totalPages: number };\n\nexport function InvoicesPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedInvoiceId = query.get(\"invoiceId\") ?? \"\";\n const paymentSessionIdFilter = query.get(\"paymentSessionId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n const [items, setItems] = useState<InvoiceRecord[]>([]);\n const [focusedInvoice, setFocusedInvoice] = useState<InvoiceRecord | null>(null);\n const [focusedHistory, setFocusedHistory] = useState<InvoiceRecord[]>([]);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [pagination, setPagination] = useState<InvoicePagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh(page: number = 1) {\n if (!client.listMyInvoices) {\n setError(\n t(\n \"activity.unavailable_invoices_title\",\n undefined,\n \"Invoices are unavailable in this host.\",\n ),\n );\n setItems([]);\n setPagination(null);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyInvoices({\n paymentSessionId: paymentSessionIdFilter || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n const nextPagination = asRecord(res?.pagination);\n setPagination(\n Object.keys(nextPagination).length\n ? {\n total: Number(nextPagination.total || 0),\n page: Number(nextPagination.page || page),\n pageSize: Number(nextPagination.pageSize || 20),\n totalPages: Number(nextPagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"invoices\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [installationIdFilter, pageParam, paymentSessionIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedInvoiceId || !client.getMyInvoiceHistory) {\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyInvoiceHistory!(focusedInvoiceId);\n if (cancelled) return;\n const history = asRecord(res);\n setFocusedInvoice(asRecord(history.item));\n setFocusedHistory(\n Array.isArray(history.events) ? history.events.map((event) => asRecord(event)) : [],\n );\n } catch (e) {\n if (cancelled) return;\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedInvoiceId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n if (paymentSessionIdFilter) qs.set(\"paymentSessionId\", paymentSessionIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.invoices_title\", undefined, \"Invoices\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.invoices_title\", undefined, \"Invoices\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh(pageParam)}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"invoices\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_invoices_for_prefix\", undefined, \"Showing invoice records for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedInvoiceId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.invoice_detail\", undefined, \"Invoice Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedInvoiceId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_invoice_list\", undefined, \"Back to invoice list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedInvoice ? (\n <>\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readFirstString(\n focusedInvoice.status,\n focusedInvoice.lifecycle_status,\n )}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.provider\", undefined, \"Provider\")}\n </div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedInvoice.provider_key, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.payment_session\", undefined, \"Payment Session\")}\n </div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedInvoice.payment_session_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedInvoice.created_at) || \"\u2014\"}\n </div>\n </div>\n {(readString(focusedInvoice.document_url) ||\n readString(focusedInvoice.document_download_url) ||\n readString(focusedInvoice.external_url)) && (\n <div className=\"mx-record-actions\">\n {focusedInvoice.document_url ? (\n <a\n href={String(focusedInvoice.document_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_document\", undefined, \"Open Document\")}\n </a>\n ) : null}\n {focusedInvoice.document_download_url ? (\n <a\n href={String(focusedInvoice.document_download_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.download\", undefined, \"Download\")}\n </a>\n ) : null}\n {!focusedInvoice.document_download_url &&\n !focusedInvoice.document_url &&\n focusedInvoice.external_url ? (\n <a\n href={String(focusedInvoice.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_external\", undefined, \"Open External\")}\n </a>\n ) : null}\n </div>\n )}\n </div>\n {focusedHistory.length > 0 && (\n <div className=\"mx-record-timeline\">\n <div className=\"mx-record-label\">\n {t(\"activity.lifecycle_history\", undefined, \"Lifecycle History\")}\n </div>\n <div className=\"mx-detail-guard-list mx-detail-guard-list-compact\">\n {focusedHistory.map((event, index) => (\n <div\n key={readFirstString(event.id, index)}\n className=\"mx-record-timeline-item\"\n >\n <strong>\n {readFirstString(\n event.action,\n event.type,\n t(\"activity.event\", undefined, \"Event\"),\n )}\n </strong>\n {formatDateTime(event.created_at)\n ? ` \u2022 ${formatDateTime(event.created_at)}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoice_detail\", undefined, \"Loading invoice details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.invoice\", undefined, \"Invoice\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.provider\", undefined, \"Provider\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.document\", undefined, \"Document\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 5 : 6}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoices\", undefined, \"Loading invoices...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_invoices\", undefined, \"No invoices found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td data-label={t(\"common.invoice\", undefined, \"Invoice\")}>\n <div className=\"mx-cell-bold\">\n {readFirstString(\n item.invoice_identifier,\n item.series,\n item.number,\n item.id,\n \"\u2014\",\n )}\n </div>\n {readString(item.payment_session_id) && (\n <div className=\"mx-cell-sub\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(item.payment_session_id)}\n </div>\n )}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readFirstString(item.status, item.lifecycle_status)} />\n </td>\n <td data-label={t(\"common.provider\", undefined, \"Provider\")}>\n {readFirstString(item.provider_key, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.document\", undefined, \"Document\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"invoiceId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.document_download_url || item.external_url ? (\n <a\n href={String(item.document_download_url || item.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.open\", undefined, \"Open\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam <= 1}\n onClick={() => void refresh(pageParam - 1)}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </button>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam >= Number(pagination.totalPages || 1)}\n onClick={() => void refresh(pageParam + 1)}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </button>\n </div>\n )}\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\ntype ActivityTabKey = \"requests\" | \"monetization\" | \"payments\" | \"invoices\" | \"notifications\";\n\ntype MarketplaceActivityTabsProps = {\n active: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n};\n\nfunction buildActivityHref(input: {\n surface: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n}) {\n const qs = new URLSearchParams();\n if (input.token) qs.set(\"token\", input.token);\n if (input.xappId) qs.set(\"xappId\", input.xappId);\n if (input.installationId && input.surface !== \"requests\") {\n qs.set(\"installationId\", input.installationId);\n }\n const suffix = qs.toString();\n return {\n pathname: input.isEmbedded ? `/${input.surface}` : `/marketplace/${input.surface}`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nexport function MarketplaceActivityTabs(props: MarketplaceActivityTabsProps) {\n const { t } = useMarketplaceI18n();\n const tabs: Array<{ key: ActivityTabKey; label: string }> = [\n { key: \"requests\", label: t(\"activity.requests\", undefined, \"Requests\") },\n { key: \"monetization\", label: t(\"activity.monetization\", undefined, \"Monetization\") },\n { key: \"payments\", label: t(\"activity.payments\", undefined, \"Payments\") },\n { key: \"invoices\", label: t(\"activity.invoices\", undefined, \"Invoices\") },\n { key: \"notifications\", label: t(\"activity.notifications\", undefined, \"Notifications\") },\n ];\n\n return (\n <nav\n className=\"mx-activity-tabs\"\n aria-label={t(\"activity.navigation\", undefined, \"Activity navigation\")}\n >\n {tabs.map((tab) => (\n <Link\n key={tab.key}\n to={\n buildActivityHref({\n surface: tab.key,\n isEmbedded: props.isEmbedded,\n token: props.token,\n xappId: props.xappId,\n installationId: props.installationId,\n }) as any\n }\n className={`mx-activity-tab ${props.active === tab.key ? \"is-active\" : \"\"}`}\n aria-current={props.active === tab.key ? \"page\" : undefined}\n >\n {tab.label}\n </Link>\n ))}\n </nav>\n );\n}\n", "function readString(value: unknown): string {\n return String(value ?? \"\").trim();\n}\n\nfunction readLower(value: unknown): string {\n return readString(value).toLowerCase();\n}\n\nexport function isRomanianLocale(value: unknown): boolean {\n const locale = readLower(value);\n return locale === \"ro\" || locale.startsWith(\"ro-\");\n}\n\nexport type XmsPackageCopy = {\n consumedLabel: string;\n currentPlanLabel: string;\n ownedUnlockLabel: string;\n addOnWithMembershipLabel: string;\n selectedLabel: string;\n defaultLabel: string;\n ownedUnlockActiveLabel: string;\n currentPlanActiveLabel: string;\n startingCheckoutLabel: string;\n purchaseAddOnUnlockLabel: string;\n continueToCheckoutLabel: string;\n generalUpgradeFitLabel: string;\n generalUpgradeSummary: string;\n durableUnlockFitLabel: string;\n durableUnlockSummary: string;\n recurringMembershipFitLabel: string;\n recurringMembershipSummary: string;\n creditTopUpFitLabel: string;\n hybridUpgradeFitLabel: string;\n creditPackFitSummary(unitLabel: string): string;\n hybridPackFitSummary(unitLabel: string): string;\n packageCurrencySignalLabel(unitLabel: string): string;\n billedSignalLabel(periodLabel: string): string;\n generalOfferingSummary: string;\n featurePaywallOfferingSummary: string;\n defaultPaywallOfferingSummary: string;\n checkoutOfferingSummary: string;\n upgradeOfferingSummary: string;\n featureDurableUnlockReason: string;\n featureRecurringAccessReason: string;\n featureHybridAccessReason: string;\n featureSubscriptionDirectReason: string;\n featureHybridSubscriptionReason: string;\n creditRequirementCoveredLabel(amountLabel: string): string;\n creditRequirementAddedLabel(amountLabel: string): string;\n hybridCreditsSupportLabel(unitLabel: string): string;\n};\n\nexport type XmsSurfaceCopy = {\n plansTitle: string;\n historyTitle: string;\n plansSubtitle: string;\n historySubtitle: string;\n offeringFallbackLabel: string;\n packageFallbackLabel: string;\n paywallFallbackLabel: string;\n availableLabel: string;\n unavailableLabel: string;\n unknownLabel: string;\n yesLabel: string;\n noLabel: string;\n defaultBadgeLabel: string;\n choosePackageActionLabel: string;\n noPaywallPackagesLabel: string;\n priceUnavailableLabel: string;\n plansLabel: string;\n historyLabel: string;\n closeLabel: string;\n tabsAriaLabel: string;\n loadingLabel: string;\n subjectRequiredNotice: string;\n paymentCompletedNotice: string;\n checkoutCancelledNotice: string;\n paymentFailedNotice: string;\n subscriptionRefreshCompletedNotice: string;\n subscriptionRefreshFailedNotice: string;\n subscriptionCancelCompletedNotice: string;\n subscriptionCancelFailedNotice: string;\n subscriptionCancelConfirmTitle: string;\n subscriptionCancelConfirmMessage: string;\n subscriptionCancelConfirmLabel: string;\n subscriptionCancelDismissLabel: string;\n missingPackageMetadataMessage: string;\n missingIntentMessage: string;\n missingPaymentPageMessage: string;\n startCheckoutFailedMessage: string;\n loadFailedMessage: string;\n currentCoverageTitle: string;\n currentPlanLabel: string;\n membershipAccessLabel: string;\n subscriptionStatusLabel: string;\n subscriptionCoverageLabel: string;\n subscriptionReasonLabel: string;\n currentPeriodEndsLabel: string;\n renewsAtLabel: string;\n expiresAtLabel: string;\n overdueSinceLabel: string;\n expiryBoundaryLabel: string;\n cancelledAtLabel: string;\n operatorAuthorityLabel: string;\n managementDestinationLabel: string;\n operatorAuthorityGatewayLabel: string;\n operatorAuthorityTenantLabel: string;\n operatorAuthorityPublisherLabel: string;\n operatorAuthorityOwnerLabel: string;\n managementDestinationGatewayLabel: string;\n managementDestinationTenantLabel: string;\n managementDestinationPublisherLabel: string;\n managementDestinationOwnerLabel: string;\n managementDestinationHintGatewayLabel: string;\n managementDestinationHintTenantLabel: string;\n managementDestinationHintPublisherLabel: string;\n managementDestinationHintOwnerLabel: string;\n openManagementDestinationActionLabel: string;\n virtualCurrencyLabel: string;\n creditsRemainingLabel: string;\n addOnUnlocksLabel: string;\n coverageActiveLabel: string;\n coverageInactiveLabel: string;\n noOverdueRestrictionLabel: string;\n reasonGraceCoveredPastDueLabel: string;\n reasonPastDueAfterPeriodEndLabel: string;\n reasonExpiredAfterBoundaryLabel: string;\n refreshStatusActionLabel: string;\n refreshingStatusActionLabel: string;\n cancelSubscriptionActionLabel: string;\n cancellingSubscriptionActionLabel: string;\n noPublishedPlansLabel: string;\n recentTimelineTitle: string;\n recentTimelineSubtitle: string;\n historyAuditTitle: string;\n historyAuditSubtitle: string;\n historyBalanceSummaryTitle: string;\n historyBalanceSummarySubtitle: string;\n noHistoryAvailableLabel: string;\n historyGenericLabel: string;\n historyPurchaseIntentsTitle: string;\n historyPurchaseIntentLabel: string;\n historyTransactionsTitle: string;\n historyTransactionLabel: string;\n historySettlementDetailDisputeWarningNeedsResponse: string;\n historySettlementDetailDisputeWarningUnderReview: string;\n historySettlementDetailDisputeWarningClosed: string;\n historySettlementDetailDisputeNeedsResponse: string;\n historySettlementDetailDisputeUnderReview: string;\n historySettlementDetailDisputeWon: string;\n historySettlementDetailDisputeLost: string;\n historySubscriptionsTitle: string;\n historySubscriptionContractLabel: string;\n historyEntitlementsTitle: string;\n historyEntitlementLabel: string;\n historyWalletAccountsTitle: string;\n historyWalletAccountLabel: string;\n historyWalletLedgerTitle: string;\n historyWalletLedgerEntryLabel: string;\n historyAccessSnapshotsTitle: string;\n historyAccessSnapshotLabel: string;\n historyInvoicesTitle: string;\n historyInvoiceLabel: string;\n featureCurrentAccessMissingLabel: string;\n featureSubscriptionMissingLabel: string;\n featureCreditsMissingLabel(requiredLabel: string, availableLabel: string): string;\n featureBlockedSummary(title: string): string;\n featureReadySummary(title: string): string;\n featureNeedMixedAccessLabel: string;\n featureNeedMembershipAndCreditsLabel(unitLabel: string): string;\n featureNeedMembershipLabel: string;\n featureNeedCreditsLabel(unitLabel: string): string;\n featureNeedAccessLabel: string;\n featureLockedLabel: string;\n featureGapShortLabel(amountLabel: string): string;\n featureCurrentAccessMissingBadge: string;\n featureMembershipNotActiveBadge: string;\n featureCandidateLead(selectedPackageTitle: string): string;\n featureCandidateFallbackLead: string;\n featureViewHybridOptionsLabel: string;\n featureViewMembershipOptionsLabel: string;\n featureViewCreditOptionsLabel(unitLabel: string): string;\n featureViewUnlockOptionsLabel: string;\n featureOpenPaywallLabel: string;\n featureUnlockCheckoutLabel: string;\n featureStartMembershipCheckoutLabel: string;\n featureBuyCreditsCheckoutLabel(unitLabel: string): string;\n featureStartHybridCheckoutLabel: string;\n featureCreatePaymentSessionLabel: string;\n};\n\nexport const XMS_COPY_CATALOG = {\n en: {\n package: {\n consumedLabel: \"Consumed\",\n currentPlanLabel: \"Current plan\",\n ownedUnlockLabel: \"Owned unlock\",\n addOnWithMembershipLabel: \"Add-on with membership\",\n selectedLabel: \"Selected\",\n defaultLabel: \"Default\",\n ownedUnlockActiveLabel: \"Owned unlock active\",\n currentPlanActiveLabel: \"Current plan active\",\n startingCheckoutLabel: \"Starting checkout...\",\n purchaseAddOnUnlockLabel: \"Purchase add-on unlock\",\n continueToCheckoutLabel: \"Continue to checkout\",\n generalUpgradeFitLabel: \"Flexible option\",\n generalUpgradeSummary: \"A general plan option for this app.\",\n durableUnlockFitLabel: \"One-time unlock\",\n durableUnlockSummary: \"Best when you want access without an ongoing subscription.\",\n recurringMembershipFitLabel: \"Subscription\",\n recurringMembershipSummary:\n \"Best when this app is meant to stay active through recurring coverage.\",\n creditTopUpFitLabel: \"Balance top-up\",\n hybridUpgradeFitLabel: \"Access + balance\",\n creditPackFitSummary: (unitLabel: string) =>\n `Best when the feature spends ${unitLabel} for each advanced action.`,\n hybridPackFitSummary: (unitLabel: string) =>\n `Blends access coverage with bundled ${unitLabel} for mixed workflows.`,\n packageCurrencySignalLabel: (unitLabel: string) => `currency ${unitLabel}`,\n billedSignalLabel: (periodLabel: string) => `billed ${periodLabel}`,\n generalOfferingSummary: \"Available plans for this app.\",\n featurePaywallOfferingSummary: \"Shown when this app needs extra access or balance.\",\n defaultPaywallOfferingSummary: \"Main plan selection for this app.\",\n checkoutOfferingSummary: \"Direct purchase flow for this app.\",\n upgradeOfferingSummary: \"Best for switching or upgrading your current plan.\",\n featureDurableUnlockReason: \"Aligned with one-time unlock access.\",\n featureRecurringAccessReason: \"Recurring membership also grants current access.\",\n featureHybridAccessReason: \"Hybrid package contributes to current access coverage.\",\n featureSubscriptionDirectReason: \"Matches the subscription requirement directly.\",\n featureHybridSubscriptionReason:\n \"Hybrid package can also cover part of the subscription shape.\",\n creditRequirementCoveredLabel: (amountLabel: string) =>\n `Covers the ${amountLabel} requirement.`,\n creditRequirementAddedLabel: (amountLabel: string) =>\n `Adds ${amountLabel} toward the requirement.`,\n hybridCreditsSupportLabel: (unitLabel: string) =>\n `Hybrid package can add bundled ${unitLabel} for this flow.`,\n },\n surface: {\n plansTitle: \"Plans\",\n historyTitle: \"History\",\n plansSubtitle: \"Access, plans, and balances for this app\",\n historySubtitle: \"Recent monetization events, invoices, subscriptions, and wallet activity\",\n offeringFallbackLabel: \"Offering\",\n packageFallbackLabel: \"Package\",\n paywallFallbackLabel: \"Plans\",\n availableLabel: \"Available\",\n unavailableLabel: \"Unavailable\",\n unknownLabel: \"Unknown\",\n yesLabel: \"Yes\",\n noLabel: \"No\",\n defaultBadgeLabel: \"default\",\n choosePackageActionLabel: \"Choose package\",\n noPaywallPackagesLabel: \"No plans are currently available.\",\n priceUnavailableLabel: \"Price unavailable\",\n plansLabel: \"Plans\",\n historyLabel: \"History\",\n closeLabel: \"Close\",\n tabsAriaLabel: \"Plans and history view\",\n loadingLabel: \"Loading plans...\",\n subjectRequiredNotice:\n \"Checkout requires a subject-bound catalog session. Start from a signed host session to purchase plans.\",\n paymentCompletedNotice: \"Payment completed and access was refreshed.\",\n checkoutCancelledNotice: \"Checkout was cancelled before completion.\",\n paymentFailedNotice: \"Payment failed before access could be issued.\",\n subscriptionRefreshCompletedNotice: \"Subscription status was refreshed.\",\n subscriptionRefreshFailedNotice: \"Subscription status could not be refreshed.\",\n subscriptionCancelCompletedNotice: \"Subscription renewal was cancelled.\",\n subscriptionCancelFailedNotice: \"Subscription could not be cancelled.\",\n subscriptionCancelConfirmTitle: \"Cancel subscription\",\n subscriptionCancelConfirmMessage: \"Cancel renewal for this subscription?\",\n subscriptionCancelConfirmLabel: \"Cancel subscription\",\n subscriptionCancelDismissLabel: \"Keep subscription\",\n missingPackageMetadataMessage:\n \"This package is missing purchase metadata in the published plans configuration.\",\n missingIntentMessage: \"Purchase intent was created without an identifier.\",\n missingPaymentPageMessage: \"Payment page is not available for this package.\",\n startCheckoutFailedMessage: \"Unable to start checkout for this package.\",\n loadFailedMessage: \"Unable to load plans.\",\n currentCoverageTitle: \"Current coverage\",\n currentPlanLabel: \"Current plan\",\n membershipAccessLabel: \"Membership access\",\n subscriptionStatusLabel: \"Subscription state\",\n subscriptionCoverageLabel: \"Coverage\",\n subscriptionReasonLabel: \"Status reason\",\n currentPeriodEndsLabel: \"Current period ends\",\n renewsAtLabel: \"Renews at\",\n expiresAtLabel: \"Expires at\",\n overdueSinceLabel: \"Overdue since\",\n expiryBoundaryLabel: \"Expiry boundary\",\n cancelledAtLabel: \"Cancelled at\",\n operatorAuthorityLabel: \"Operator authority\",\n managementDestinationLabel: \"Manage in\",\n operatorAuthorityGatewayLabel: \"Gateway\",\n operatorAuthorityTenantLabel: \"Tenant\",\n operatorAuthorityPublisherLabel: \"Publisher\",\n operatorAuthorityOwnerLabel: \"App owner\",\n managementDestinationGatewayLabel: \"Gateway admin\",\n managementDestinationTenantLabel: \"Tenant app\",\n managementDestinationPublisherLabel: \"Publisher app\",\n managementDestinationOwnerLabel: \"App owner\",\n managementDestinationHintGatewayLabel:\n \"Advanced subscription management is handled in Gateway admin.\",\n managementDestinationHintTenantLabel:\n \"Advanced subscription management is handled in the tenant app.\",\n managementDestinationHintPublisherLabel:\n \"Advanced subscription management is handled in the publisher app.\",\n managementDestinationHintOwnerLabel:\n \"Advanced subscription management is handled by the app owner.\",\n openManagementDestinationActionLabel: \"Open management\",\n virtualCurrencyLabel: \"Currency\",\n creditsRemainingLabel: \"Balance\",\n addOnUnlocksLabel: \"Add-on unlocks\",\n coverageActiveLabel: \"Still covered\",\n coverageInactiveLabel: \"Not covered\",\n noOverdueRestrictionLabel: \"No active overdue restriction.\",\n reasonGraceCoveredPastDueLabel: \"Coverage remains during grace period\",\n reasonPastDueAfterPeriodEndLabel: \"Current period ended without successful renewal\",\n reasonExpiredAfterBoundaryLabel: \"Expiry boundary reached\",\n refreshStatusActionLabel: \"Refresh status\",\n refreshingStatusActionLabel: \"Refreshing...\",\n cancelSubscriptionActionLabel: \"Cancel subscription\",\n cancellingSubscriptionActionLabel: \"Cancelling...\",\n noPublishedPlansLabel: \"No plans are currently available.\",\n recentTimelineTitle: \"Recent activity\",\n recentTimelineSubtitle:\n \"Latest subscription, balance, purchase, and invoice activity for this app.\",\n historyAuditTitle: \"Detailed history\",\n historyAuditSubtitle:\n \"Recent records grouped by subscriptions, balances, purchases, and invoices.\",\n historyBalanceSummaryTitle: \"Balances now\",\n historyBalanceSummarySubtitle:\n \"Latest visible wallet balances grouped by virtual currency for this app.\",\n noHistoryAvailableLabel: \"No monetization history is available for this app yet.\",\n historyGenericLabel: \"History\",\n historyPurchaseIntentsTitle: \"Purchase intents\",\n historyPurchaseIntentLabel: \"Purchase intent\",\n historyTransactionsTitle: \"Transactions\",\n historyTransactionLabel: \"Transaction\",\n historySettlementDetailDisputeWarningNeedsResponse: \"Dispute warning: response needed\",\n historySettlementDetailDisputeWarningUnderReview: \"Dispute warning under review\",\n historySettlementDetailDisputeWarningClosed: \"Dispute warning closed\",\n historySettlementDetailDisputeNeedsResponse: \"Dispute needs response\",\n historySettlementDetailDisputeUnderReview: \"Dispute under review\",\n historySettlementDetailDisputeWon: \"Dispute won\",\n historySettlementDetailDisputeLost: \"Dispute lost\",\n historySubscriptionsTitle: \"Subscriptions\",\n historySubscriptionContractLabel: \"Subscription contract\",\n historyEntitlementsTitle: \"Entitlements\",\n historyEntitlementLabel: \"Entitlement\",\n historyWalletAccountsTitle: \"Wallet accounts\",\n historyWalletAccountLabel: \"Wallet account\",\n historyWalletLedgerTitle: \"Wallet ledger\",\n historyWalletLedgerEntryLabel: \"Wallet ledger entry\",\n historyAccessSnapshotsTitle: \"Access snapshots\",\n historyAccessSnapshotLabel: \"Access snapshot\",\n historyInvoicesTitle: \"Invoices\",\n historyInvoiceLabel: \"Invoice\",\n featureCurrentAccessMissingLabel: \"Current access coverage is not active on this scope.\",\n featureSubscriptionMissingLabel: \"No active subscription is visible for this scope.\",\n featureCreditsMissingLabel: (requiredLabel: string, availableLabel: string) =>\n `This action needs ${requiredLabel}, but only ${availableLabel} are visible right now.`,\n featureBlockedSummary: (title: string) =>\n `${title || \"Feature\"} is blocked on the current scope.`,\n featureReadySummary: (title: string) =>\n `${title || \"Feature\"} can be unlocked from the current plan options.`,\n featureNeedMixedAccessLabel: \"needs mixed access\",\n featureNeedMembershipAndCreditsLabel: (unitLabel: string) =>\n `needs membership + ${unitLabel}`,\n featureNeedMembershipLabel: \"needs membership\",\n featureNeedCreditsLabel: (unitLabel: string) => `needs ${unitLabel}`,\n featureNeedAccessLabel: \"needs access\",\n featureLockedLabel: \"locked\",\n featureGapShortLabel: (amountLabel: string) => `${amountLabel} short`,\n featureCurrentAccessMissingBadge: \"current access missing\",\n featureMembershipNotActiveBadge: \"membership not active\",\n featureCandidateLead: (selectedPackageTitle: string) =>\n `${selectedPackageTitle || \"Selected package\"} is one package candidate for this access gap.`,\n featureCandidateFallbackLead: \"Choose a plan option that covers the current access gap.\",\n featureViewHybridOptionsLabel: \"View hybrid options\",\n featureViewMembershipOptionsLabel: \"View membership options\",\n featureViewCreditOptionsLabel: (unitLabel: string) => `View ${unitLabel} options`,\n featureViewUnlockOptionsLabel: \"View unlock options\",\n featureOpenPaywallLabel: \"Open plans\",\n featureUnlockCheckoutLabel: \"Unlock with hosted checkout\",\n featureStartMembershipCheckoutLabel: \"Start membership checkout\",\n featureBuyCreditsCheckoutLabel: (unitLabel: string) =>\n `Buy ${unitLabel} with hosted checkout`,\n featureStartHybridCheckoutLabel: \"Start hybrid checkout\",\n featureCreatePaymentSessionLabel: \"Create payment session\",\n },\n },\n ro: {\n package: {\n consumedLabel: \"Consumat\",\n currentPlanLabel: \"Plan curent\",\n ownedUnlockLabel: \"Unlock de\u021Binut\",\n addOnWithMembershipLabel: \"Supliment cu abonament\",\n selectedLabel: \"Selectat\",\n defaultLabel: \"Implicit\",\n ownedUnlockActiveLabel: \"Unlock deja activ\",\n currentPlanActiveLabel: \"Plan activ\",\n startingCheckoutLabel: \"Se porne\u0219te checkout-ul...\",\n purchaseAddOnUnlockLabel: \"Cump\u0103r\u0103 suplimentul\",\n continueToCheckoutLabel: \"Continu\u0103 spre checkout\",\n generalUpgradeFitLabel: \"Op\u021Biune flexibil\u0103\",\n generalUpgradeSummary: \"O op\u021Biune general\u0103 de plan pentru aceast\u0103 aplica\u021Bie.\",\n durableUnlockFitLabel: \"Unlock unic\",\n durableUnlockSummary: \"Potrivit c\u00E2nd vrei acces f\u0103r\u0103 un abonament recurent.\",\n recurringMembershipFitLabel: \"Abonament\",\n recurringMembershipSummary:\n \"Potrivit c\u00E2nd aceast\u0103 aplica\u021Bie trebuie s\u0103 r\u0103m\u00E2n\u0103 activ\u0103 prin acoperire recurent\u0103.\",\n creditTopUpFitLabel: \"Top-up sold\",\n hybridUpgradeFitLabel: \"Acces + sold\",\n creditPackFitSummary: (unitLabel: string) =>\n `Potrivit c\u00E2nd func\u021Bia consum\u0103 ${unitLabel} pentru fiecare ac\u021Biune avansat\u0103.`,\n hybridPackFitSummary: (unitLabel: string) =>\n `Combin\u0103 acoperirea accesului cu ${unitLabel} incluse pentru fluxuri mixte.`,\n packageCurrencySignalLabel: (unitLabel: string) => `moned\u0103 ${unitLabel}`,\n billedSignalLabel: (periodLabel: string) => `facturat ${periodLabel}`,\n generalOfferingSummary: \"Planuri disponibile pentru aceast\u0103 aplica\u021Bie.\",\n featurePaywallOfferingSummary:\n \"Afi\u0219at c\u00E2nd aceast\u0103 aplica\u021Bie are nevoie de acces sau sold suplimentar.\",\n defaultPaywallOfferingSummary: \"Selec\u021Bia principal\u0103 de planuri pentru aceast\u0103 aplica\u021Bie.\",\n checkoutOfferingSummary: \"Flux de cump\u0103rare direct pentru aceast\u0103 aplica\u021Bie.\",\n upgradeOfferingSummary: \"Potrivit pentru schimbarea sau \u00EEmbun\u0103t\u0103\u021Birea planului curent.\",\n featureDurableUnlockReason: \"Se potrive\u0219te cu accesul de tip unlock unic.\",\n featureRecurringAccessReason: \"Abonamentul recurent ofer\u0103 \u0219i acces curent pentru acest flux.\",\n featureHybridAccessReason: \"Pachetul hibrid contribuie la acoperirea accesului curent.\",\n featureSubscriptionDirectReason: \"Se potrive\u0219te direct cu cerin\u021Ba de abonament.\",\n featureHybridSubscriptionReason:\n \"Pachetul hibrid poate acoperi \u0219i o parte din forma de abonament.\",\n creditRequirementCoveredLabel: (amountLabel: string) => `Acoper\u0103 cerin\u021Ba de ${amountLabel}.`,\n creditRequirementAddedLabel: (amountLabel: string) => `Adaug\u0103 ${amountLabel} c\u0103tre cerin\u021B\u0103.`,\n hybridCreditsSupportLabel: (unitLabel: string) =>\n `Pachetul hibrid poate ad\u0103uga ${unitLabel} incluse pentru acest flux.`,\n },\n surface: {\n plansTitle: \"Planuri\",\n historyTitle: \"Istoric\",\n plansSubtitle: \"Acces, planuri \u0219i solduri pentru aceast\u0103 aplica\u021Bie\",\n historySubtitle:\n \"Evenimente recente de monetizare, facturi, abonamente \u0219i activitate din portofel\",\n offeringFallbackLabel: \"Ofert\u0103\",\n packageFallbackLabel: \"Pachet\",\n paywallFallbackLabel: \"Planuri\",\n availableLabel: \"Disponibil\",\n unavailableLabel: \"Indisponibil\",\n unknownLabel: \"Necunoscut\",\n yesLabel: \"Da\",\n noLabel: \"Nu\",\n defaultBadgeLabel: \"implicit\",\n choosePackageActionLabel: \"Alege pachetul\",\n noPaywallPackagesLabel: \"Nu exist\u0103 momentan planuri disponibile.\",\n priceUnavailableLabel: \"Pre\u021B indisponibil\",\n plansLabel: \"Planuri\",\n historyLabel: \"Istoric\",\n closeLabel: \"\u00CEnchide\",\n tabsAriaLabel: \"Vizualizare planuri \u0219i istoric\",\n loadingLabel: \"Se \u00EEncarc\u0103 planurile...\",\n subjectRequiredNotice:\n \"Checkout-ul necesit\u0103 o sesiune de catalog asociat\u0103 unui subiect. Porne\u0219te dintr-o sesiune gazd\u0103 autentificat\u0103 pentru a cump\u0103ra planuri.\",\n paymentCompletedNotice: \"Plata a fost finalizat\u0103 \u0219i accesul a fost actualizat.\",\n checkoutCancelledNotice: \"Checkout-ul a fost anulat \u00EEnainte de finalizare.\",\n paymentFailedNotice: \"Plata a e\u0219uat \u00EEnainte ca accesul s\u0103 poat\u0103 fi acordat.\",\n subscriptionRefreshCompletedNotice: \"Starea abonamentului a fost actualizat\u0103.\",\n subscriptionRefreshFailedNotice: \"Starea abonamentului nu a putut fi actualizat\u0103.\",\n subscriptionCancelCompletedNotice: \"Re\u00EEnnoirea abonamentului a fost anulat\u0103.\",\n subscriptionCancelFailedNotice: \"Abonamentul nu a putut fi anulat.\",\n subscriptionCancelConfirmTitle: \"Anuleaz\u0103 abonamentul\",\n subscriptionCancelConfirmMessage: \"Anulezi re\u00EEnnoirea acestui abonament?\",\n subscriptionCancelConfirmLabel: \"Anuleaz\u0103 abonamentul\",\n subscriptionCancelDismissLabel: \"P\u0103streaz\u0103 abonamentul\",\n missingPackageMetadataMessage:\n \"Acest pachet nu are metadatele de cump\u0103rare necesare \u00EEn configura\u021Bia publicat\u0103 a planurilor.\",\n missingIntentMessage: \"Intentul de cump\u0103rare a fost creat f\u0103r\u0103 identificator.\",\n missingPaymentPageMessage: \"Pagina de plat\u0103 nu este disponibil\u0103 pentru acest pachet.\",\n startCheckoutFailedMessage: \"Nu s-a putut porni checkout-ul pentru acest pachet.\",\n loadFailedMessage: \"Planurile nu au putut fi \u00EEnc\u0103rcate.\",\n currentCoverageTitle: \"Acoperire curent\u0103\",\n currentPlanLabel: \"Plan curent\",\n membershipAccessLabel: \"Acces de membru\",\n subscriptionStatusLabel: \"Stare abonament\",\n subscriptionCoverageLabel: \"Acoperire\",\n subscriptionReasonLabel: \"Motiv stare\",\n currentPeriodEndsLabel: \"Perioada curent\u0103 se \u00EEncheie la\",\n renewsAtLabel: \"Se re\u00EEnnoie\u0219te la\",\n expiresAtLabel: \"Expir\u0103 la\",\n overdueSinceLabel: \"Restant din\",\n expiryBoundaryLabel: \"Limit\u0103 expirare\",\n cancelledAtLabel: \"Anulat la\",\n operatorAuthorityLabel: \"Autoritate operator\",\n managementDestinationLabel: \"Administreaz\u0103 \u00EEn\",\n operatorAuthorityGatewayLabel: \"Gateway\",\n operatorAuthorityTenantLabel: \"Tenant\",\n operatorAuthorityPublisherLabel: \"Publisher\",\n operatorAuthorityOwnerLabel: \"Proprietar aplica\u021Bie\",\n managementDestinationGatewayLabel: \"Administrare gateway\",\n managementDestinationTenantLabel: \"Aplica\u021Bia tenantului\",\n managementDestinationPublisherLabel: \"Aplica\u021Bia publisherului\",\n managementDestinationOwnerLabel: \"Proprietarul aplica\u021Biei\",\n managementDestinationHintGatewayLabel:\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn administrarea gateway-ului.\",\n managementDestinationHintTenantLabel:\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia tenantului.\",\n managementDestinationHintPublisherLabel:\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia publisherului.\",\n managementDestinationHintOwnerLabel:\n \"Administrarea avansat\u0103 a abonamentului este gestionat\u0103 de proprietarul aplica\u021Biei.\",\n openManagementDestinationActionLabel: \"Deschide administrarea\",\n virtualCurrencyLabel: \"Moned\u0103 virtual\u0103\",\n creditsRemainingLabel: \"Sold\",\n addOnUnlocksLabel: \"Unlock-uri suplimentare\",\n coverageActiveLabel: \"\u00CEnc\u0103 activ\",\n coverageInactiveLabel: \"Neacoperit\",\n noOverdueRestrictionLabel: \"Nu exist\u0103 restric\u021Bii active de \u00EEnt\u00E2rziere.\",\n reasonGraceCoveredPastDueLabel: \"Accesul r\u0103m\u00E2ne activ \u00EEn perioada de gra\u021Bie\",\n reasonPastDueAfterPeriodEndLabel: \"Perioada curent\u0103 s-a \u00EEncheiat f\u0103r\u0103 o re\u00EEnnoire reu\u0219it\u0103\",\n reasonExpiredAfterBoundaryLabel: \"A fost atins\u0103 limita de expirare\",\n refreshStatusActionLabel: \"Actualizeaz\u0103 starea\",\n refreshingStatusActionLabel: \"Se actualizeaz\u0103...\",\n cancelSubscriptionActionLabel: \"Anuleaz\u0103 abonamentul\",\n cancellingSubscriptionActionLabel: \"Se anuleaz\u0103...\",\n noPublishedPlansLabel: \"Nu exist\u0103 planuri disponibile \u00EEn acest moment.\",\n recentTimelineTitle: \"Activitate recent\u0103\",\n recentTimelineSubtitle:\n \"Cele mai recente actualiz\u0103ri pentru abonamente, solduri, cump\u0103r\u0103ri \u0219i facturi pentru aceast\u0103 aplica\u021Bie.\",\n historyAuditTitle: \"Istoric detaliat\",\n historyAuditSubtitle:\n \"\u00CEnregistr\u0103ri recente grupate dup\u0103 abonamente, solduri, cump\u0103r\u0103ri \u0219i facturi.\",\n historyBalanceSummaryTitle: \"Solduri acum\",\n historyBalanceSummarySubtitle:\n \"Cele mai recente solduri vizibile din portofel, grupate dup\u0103 moneda virtual\u0103 pentru aceast\u0103 aplica\u021Bie.\",\n noHistoryAvailableLabel:\n \"Nu exist\u0103 \u00EEnc\u0103 istoric de monetizare disponibil pentru aceast\u0103 aplica\u021Bie.\",\n historyGenericLabel: \"Istoric\",\n historyPurchaseIntentsTitle: \"Inten\u021Bii de cump\u0103rare\",\n historyPurchaseIntentLabel: \"Inten\u021Bie de cump\u0103rare\",\n historyTransactionsTitle: \"Tranzac\u021Bii\",\n historyTransactionLabel: \"Tranzac\u021Bie\",\n historySettlementDetailDisputeWarningNeedsResponse:\n \"Avertisment disput\u0103: este necesar un r\u0103spuns\",\n historySettlementDetailDisputeWarningUnderReview: \"Avertisment disput\u0103 \u00EEn analiz\u0103\",\n historySettlementDetailDisputeWarningClosed: \"Avertisment disput\u0103 \u00EEnchis\",\n historySettlementDetailDisputeNeedsResponse: \"Disput\u0103 ce necesit\u0103 r\u0103spuns\",\n historySettlementDetailDisputeUnderReview: \"Disput\u0103 \u00EEn analiz\u0103\",\n historySettlementDetailDisputeWon: \"Disput\u0103 c\u00E2\u0219tigat\u0103\",\n historySettlementDetailDisputeLost: \"Disput\u0103 pierdut\u0103\",\n historySubscriptionsTitle: \"Abonamente\",\n historySubscriptionContractLabel: \"Contract de abonament\",\n historyEntitlementsTitle: \"Drepturi de acces\",\n historyEntitlementLabel: \"Drept de acces\",\n historyWalletAccountsTitle: \"Conturi de portofel\",\n historyWalletAccountLabel: \"Cont de portofel\",\n historyWalletLedgerTitle: \"Registru portofel\",\n historyWalletLedgerEntryLabel: \"\u00CEnregistrare \u00EEn registrul portofelului\",\n historyAccessSnapshotsTitle: \"Instantanee acces\",\n historyAccessSnapshotLabel: \"Instantaneu acces\",\n historyInvoicesTitle: \"Facturi\",\n historyInvoiceLabel: \"Factur\u0103\",\n featureCurrentAccessMissingLabel: \"Acoperirea de acces curent nu este activ\u0103 pe acest scope.\",\n featureSubscriptionMissingLabel: \"Nu este vizibil niciun abonament activ pentru acest scope.\",\n featureCreditsMissingLabel: (requiredLabel: string, availableLabel: string) =>\n `Aceast\u0103 ac\u021Biune are nevoie de ${requiredLabel}, dar acum sunt vizibile doar ${availableLabel}.`,\n featureBlockedSummary: (title: string) =>\n `${title || \"Func\u021Bia\"} este blocat\u0103 pe scope-ul curent.`,\n featureReadySummary: (title: string) =>\n `${title || \"Func\u021Bia\"} poate fi deblocat\u0103 din op\u021Biunile curente de plan.`,\n featureNeedMixedAccessLabel: \"necesit\u0103 acces mixt\",\n featureNeedMembershipAndCreditsLabel: (unitLabel: string) =>\n `necesit\u0103 abonament + ${unitLabel}`,\n featureNeedMembershipLabel: \"necesit\u0103 abonament\",\n featureNeedCreditsLabel: (unitLabel: string) => `necesit\u0103 ${unitLabel}`,\n featureNeedAccessLabel: \"necesit\u0103 acces\",\n featureLockedLabel: \"blocat\",\n featureGapShortLabel: (amountLabel: string) => `lipse\u0219te ${amountLabel}`,\n featureCurrentAccessMissingBadge: \"lipse\u0219te accesul curent\",\n featureMembershipNotActiveBadge: \"abonamentul nu este activ\",\n featureCandidateLead: (selectedPackageTitle: string) =>\n `${selectedPackageTitle || \"Pachetul selectat\"} este un pachet candidat pentru acest gol de acces.`,\n featureCandidateFallbackLead: \"Alege o op\u021Biune de plan care acoper\u0103 golul curent de acces.\",\n featureViewHybridOptionsLabel: \"Vezi op\u021Biunile hibride\",\n featureViewMembershipOptionsLabel: \"Vezi op\u021Biunile de abonament\",\n featureViewCreditOptionsLabel: (unitLabel: string) => `Vezi op\u021Biunile ${unitLabel}`,\n featureViewUnlockOptionsLabel: \"Vezi op\u021Biunile de unlock\",\n featureOpenPaywallLabel: \"Deschide planurile\",\n featureUnlockCheckoutLabel: \"Deblocheaz\u0103 prin checkout g\u0103zduit\",\n featureStartMembershipCheckoutLabel: \"Porne\u0219te checkout-ul de abonament\",\n featureBuyCreditsCheckoutLabel: (unitLabel: string) =>\n `Cump\u0103r\u0103 ${unitLabel} prin checkout g\u0103zduit`,\n featureStartHybridCheckoutLabel: \"Porne\u0219te checkout-ul hibrid\",\n featureCreatePaymentSessionLabel: \"Creeaz\u0103 sesiunea de plat\u0103\",\n },\n },\n} as const;\n\nexport type XmsCopyLocale = keyof typeof XMS_COPY_CATALOG;\n\nexport function resolveXmsCopyLocale(locale: unknown): XmsCopyLocale {\n return isRomanianLocale(locale) ? \"ro\" : \"en\";\n}\n\nexport function buildXmsPackageCopy(locale: unknown): XmsPackageCopy {\n return XMS_COPY_CATALOG[resolveXmsCopyLocale(locale)].package;\n}\n\nexport function buildXmsSurfaceCopy(input?: { locale?: unknown }): XmsSurfaceCopy {\n return XMS_COPY_CATALOG[resolveXmsCopyLocale(input?.locale)].surface;\n}\n", "import { buildXmsPackageCopy, buildXmsSurfaceCopy } from \"./xmsCopy.js\";\nexport { buildXmsSurfaceCopy } from \"./xmsCopy.js\";\n\nfunction readString(value: unknown): string {\n return String(value ?? \"\").trim();\n}\n\nfunction readNumber(value: unknown, fallback = 0): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction readLower(value: unknown): string {\n return readString(value).toLowerCase();\n}\n\nfunction readBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction readLocalizedText(value: unknown, fallback = \"\"): string {\n if (typeof value === \"string\") {\n return readString(value) || fallback;\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return fallback;\n }\n const record = value as Record<string, unknown>;\n return (\n readString(record.en) ||\n readString(record.ro) ||\n Object.values(record)\n .map((item) => readString(item))\n .find(Boolean) ||\n fallback\n );\n}\n\nfunction readVirtualCurrencyDefinition(value: unknown): Record<string, unknown> | null {\n const record = readRecord(value);\n if (!record) return null;\n const code = readString(record.code);\n const name = readString(record.name);\n if (!code && !name) return null;\n return record;\n}\n\nfunction formatVirtualCurrencyLabel(\n value: unknown,\n options?: {\n includeCode?: boolean;\n preferCode?: boolean;\n },\n): string {\n const record = readVirtualCurrencyDefinition(value);\n if (!record) return \"\";\n const code = readString(record.code);\n const name = readString(record.name);\n if (options?.preferCode && code) return code;\n if (options?.includeCode && name && code && readLower(name) !== readLower(code)) {\n return `${name} (${code})`;\n }\n return name || code;\n}\n\nfunction formatVirtualCurrencyAmountLabel(input: {\n amount: unknown;\n virtualCurrency?: unknown;\n fallbackUnit?: string;\n}): string {\n const amount = readString(input.amount);\n if (!amount) return \"\";\n const currencyLabel = formatVirtualCurrencyLabel(input.virtualCurrency);\n if (currencyLabel) return `${amount} ${currencyLabel}`;\n const fallbackUnit = readString(input.fallbackUnit);\n return fallbackUnit ? `${amount} ${fallbackUnit}` : amount;\n}\n\nfunction normalizeVirtualCurrencyDisplayLabel(label: unknown): string {\n const normalized = readString(label);\n if (!normalized) return \"\";\n return normalized.replace(/\\s+\\([^)]+\\)\\s*$/, \"\").trim() || normalized;\n}\n\nfunction readPackageVirtualCurrency(item: unknown): Record<string, unknown> | null {\n const record = readRecord(item);\n return (\n readVirtualCurrencyDefinition(record?.virtualCurrency) ??\n readVirtualCurrencyDefinition(readRecord(record?.productMetadata)?.virtual_currency)\n );\n}\n\nfunction readFeatureCurrencyUnitLabel(input: {\n snapshotSummary?: unknown;\n activePackage?: unknown;\n}): string {\n const snapshotSummary = readRecord(input.snapshotSummary);\n const wallet = readRecord(snapshotSummary?.wallet);\n const walletCurrencyLabel = normalizeVirtualCurrencyDisplayLabel(wallet?.virtualCurrencyLabel);\n if (walletCurrencyLabel) return walletCurrencyLabel;\n const packageCurrencyLabel = normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(readPackageVirtualCurrency(input.activePackage), {\n includeCode: true,\n }),\n );\n return packageCurrencyLabel || \"credits\";\n}\n\nfunction formatNamedUnitAmount(amount: unknown, unitLabel: string): string {\n const normalizedAmount = readString(amount);\n return normalizedAmount ? `${normalizedAmount} ${unitLabel}` : \"\";\n}\n\nfunction escapeHtml(value: unknown): string {\n return String(value ?? \"\")\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&#39;\");\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readColorToken(value: unknown): string {\n const token = readString(value);\n if (!token) return \"\";\n return token;\n}\n\nfunction buildPaywallThemeStyle(options: {\n themeTokens?: unknown;\n compact?: boolean;\n emphasis?: unknown;\n}): string {\n const theme = readRecord(options.themeTokens) ?? {};\n const emphasis = readLower(options.emphasis) || \"default\";\n const compact = options.compact === true;\n const vars = new Map<string, string>();\n const setVar = (name: string, value: unknown) => {\n const token = readColorToken(value);\n if (!token) return;\n vars.set(name, token);\n };\n\n setVar(\"--xapps-paywall-surface\", theme.surface);\n setVar(\"--xapps-paywall-package-surface\", theme.package_surface ?? theme.surface_alt);\n setVar(\"--xapps-paywall-text\", theme.text);\n setVar(\"--xapps-paywall-muted\", theme.muted_text ?? theme.muted);\n setVar(\"--xapps-paywall-border\", theme.border);\n setVar(\"--xapps-paywall-accent-start\", theme.accent_start ?? theme.accent);\n setVar(\"--xapps-paywall-accent-end\", theme.accent_end ?? theme.accent_alt);\n setVar(\"--xapps-paywall-badge-bg\", theme.badge_bg);\n setVar(\"--xapps-paywall-badge-text\", theme.badge_text);\n setVar(\"--xapps-paywall-action-text\", theme.action_text);\n setVar(\"--xapps-paywall-money-bg\", theme.money_bg);\n setVar(\"--xapps-paywall-money-text\", theme.money_text);\n\n if (compact) {\n vars.set(\"--xapps-paywall-gap\", \"10px\");\n vars.set(\"--xapps-paywall-padding\", \"14px\");\n vars.set(\"--xapps-paywall-package-padding\", \"10px\");\n }\n\n if (emphasis === \"soft\") {\n vars.set(\"--xapps-paywall-shadow\", \"0 8px 24px rgba(15, 23, 42, 0.06)\");\n } else if (emphasis === \"strong\") {\n vars.set(\"--xapps-paywall-shadow\", \"0 14px 36px rgba(15, 23, 42, 0.14)\");\n vars.set(\"--xapps-paywall-package-shadow\", \"0 8px 24px rgba(15, 23, 42, 0.12)\");\n }\n\n return Array.from(vars.entries())\n .map(([name, value]) => `${name}:${escapeHtml(value)}`)\n .join(\";\");\n}\n\nfunction formatStateLabel(value: unknown, fallback = \"\u2014\"): string {\n const raw = readString(value);\n if (!raw) return fallback;\n return raw.replace(/_/g, \" \");\n}\n\nfunction hasPositiveCredits(accessProjection: Record<string, unknown> | null): boolean {\n return readNumber(accessProjection?.credits_remaining, 0) > 0;\n}\n\nfunction isExhaustedIncludedCreditAccess(input: {\n accessProjection: Record<string, unknown> | null;\n currentSubscription?: Record<string, unknown> | null;\n}): boolean {\n const balanceState = readLower(input.accessProjection?.balance_state);\n const entitlementState = readLower(input.accessProjection?.entitlement_state);\n return (\n !input.currentSubscription &&\n entitlementState === \"active\" &&\n !hasPositiveCredits(input.accessProjection) &&\n (balanceState === \"empty\" || balanceState === \"insufficient\")\n );\n}\n\nfunction hasEffectiveCoverage(input: {\n accessProjection: Record<string, unknown> | null;\n currentSubscription?: Record<string, unknown> | null;\n}): boolean {\n if (isExhaustedIncludedCreditAccess(input)) return false;\n return Boolean(input.accessProjection?.has_current_access);\n}\n\nfunction formatCoverageLabel(input: {\n accessProjection: Record<string, unknown> | null;\n currentSubscription?: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n if (isExhaustedIncludedCreditAccess(input)) {\n return buildXmsPackageCopy(input.locale).consumedLabel;\n }\n if (hasEffectiveCoverage(input)) return copy.coverageActiveLabel;\n return copy.coverageInactiveLabel;\n}\n\nfunction resolveSubscriptionCoverageLabel(input: {\n currentSubscription: Record<string, unknown> | null;\n overduePolicy: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n if (typeof input.overduePolicy?.has_current_access === \"boolean\") {\n return input.overduePolicy.has_current_access\n ? copy.coverageActiveLabel\n : copy.coverageInactiveLabel;\n }\n const status = readLower(input.currentSubscription?.status);\n if (\n status === \"active\" ||\n status === \"trialing\" ||\n status === \"grace\" ||\n status === \"cancelled\"\n ) {\n return copy.coverageActiveLabel;\n }\n if (status === \"past_due\" || status === \"expired\" || status === \"suspended\") {\n return copy.coverageInactiveLabel;\n }\n return \"\";\n}\n\nfunction resolveSubscriptionReasonLabel(input: {\n overduePolicy: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const reason = readLower(input.overduePolicy?.effective_status_reason);\n if (!reason) return \"\";\n if (reason === \"grace_covered_past_due\") return copy.reasonGraceCoveredPastDueLabel;\n if (reason === \"past_due_after_period_end\") return copy.reasonPastDueAfterPeriodEndLabel;\n if (reason === \"expired_after_boundary\") return copy.reasonExpiredAfterBoundaryLabel;\n return formatStateLabel(reason, \"\");\n}\n\nfunction resolveSubscriptionOperatorAuthorityLabel(input: {\n currentSubscription: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const management = readRecord(input.currentSubscription?.subscription_management);\n const ownerScope = readLower(management?.operator_owner_scope);\n if (ownerScope === \"gateway\") return copy.operatorAuthorityGatewayLabel;\n if (ownerScope === \"tenant\") return copy.operatorAuthorityTenantLabel;\n if (ownerScope === \"publisher\") return copy.operatorAuthorityPublisherLabel;\n if (ownerScope === \"owner\") return copy.operatorAuthorityOwnerLabel;\n return \"\";\n}\n\nfunction resolveSubscriptionManagementDestinationLabel(input: {\n currentSubscription: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const management = readRecord(input.currentSubscription?.subscription_management);\n const destination = readRecord(management?.management_destination);\n const kind = readLower(destination?.kind);\n if (kind === \"gateway_admin\") return copy.managementDestinationGatewayLabel;\n if (kind === \"tenant_app\") return copy.managementDestinationTenantLabel;\n if (kind === \"publisher_app\") return copy.managementDestinationPublisherLabel;\n if (kind === \"app_owner\") return copy.managementDestinationOwnerLabel;\n return \"\";\n}\n\nfunction resolveSubscriptionManagementDestinationHint(input: {\n currentSubscription: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const management = readRecord(input.currentSubscription?.subscription_management);\n const destination = readRecord(management?.management_destination);\n const kind = readLower(destination?.kind);\n if (kind === \"gateway_admin\") return copy.managementDestinationHintGatewayLabel;\n if (kind === \"tenant_app\") return copy.managementDestinationHintTenantLabel;\n if (kind === \"publisher_app\") return copy.managementDestinationHintPublisherLabel;\n if (kind === \"app_owner\") return copy.managementDestinationHintOwnerLabel;\n return \"\";\n}\n\nfunction resolveSubscriptionManagementDestinationHref(input: {\n currentSubscription: Record<string, unknown> | null;\n}): string {\n const management = readRecord(input.currentSubscription?.subscription_management);\n const destination = readRecord(management?.management_destination);\n return readString(destination?.href);\n}\n\nfunction readSubscriptionActionAvailability(input: {\n currentSubscription: Record<string, unknown> | null;\n actionKey: \"refresh_status\" | \"cancel_subscription\";\n fallback: boolean;\n}): boolean {\n const management = readRecord(input.currentSubscription?.subscription_management);\n const subjectActions = readRecord(management?.subject_actions);\n const action = readRecord(subjectActions?.[input.actionKey]);\n return readBoolean(action?.available, input.fallback);\n}\n\nexport function buildXmsSubscriptionLifecycleSummary(input: {\n currentSubscription?: unknown;\n current_subscription?: unknown;\n locale?: unknown;\n}): {\n present: boolean;\n status: string;\n statusLabel: string;\n coverageLabel: string;\n reasonCode: string | null;\n reasonLabel: string;\n renewsAt: string | null;\n currentPeriodEndsAt: string | null;\n expiresAt: string | null;\n cancelledAt: string | null;\n overdueSince: string | null;\n expiryBoundaryAt: string | null;\n canCancel: boolean;\n canRefresh: boolean;\n} {\n const currentSubscription = readRecord(input.currentSubscription ?? input.current_subscription);\n const overduePolicy =\n currentSubscription?.overdue_policy &&\n typeof currentSubscription.overdue_policy === \"object\" &&\n !Array.isArray(currentSubscription.overdue_policy)\n ? (currentSubscription.overdue_policy as Record<string, unknown>)\n : null;\n const status = readLower(currentSubscription?.status);\n const renewsAt = readString(currentSubscription?.renews_at) || null;\n const currentPeriodEndsAt = readString(currentSubscription?.current_period_ends_at) || null;\n const expiresAt = readString(currentSubscription?.expired_at) || null;\n const cancelledAt = readString(currentSubscription?.cancelled_at) || null;\n const overdueSince = readString(overduePolicy?.overdue_since) || null;\n const expiryBoundaryAt = readString(overduePolicy?.expiry_boundary_at) || null;\n\n return {\n present: Boolean(currentSubscription),\n status,\n statusLabel: formatStateLabel(currentSubscription?.status, \"\"),\n coverageLabel: resolveSubscriptionCoverageLabel({\n currentSubscription,\n overduePolicy,\n locale: input.locale,\n }),\n reasonCode: readString(overduePolicy?.effective_status_reason) || null,\n reasonLabel: resolveSubscriptionReasonLabel({\n overduePolicy,\n locale: input.locale,\n }),\n renewsAt,\n currentPeriodEndsAt,\n expiresAt,\n cancelledAt,\n overdueSince,\n expiryBoundaryAt,\n canCancel:\n Boolean(currentSubscription) &&\n (status === \"active\" || status === \"trialing\" || status === \"grace\" || status === \"past_due\"),\n canRefresh: Boolean(currentSubscription),\n };\n}\n\nexport function hasSubjectMonetizationContext(session: unknown): boolean {\n const record = session && typeof session === \"object\" ? (session as Record<string, unknown>) : {};\n const context =\n record.context && typeof record.context === \"object\" && !Array.isArray(record.context)\n ? (record.context as Record<string, unknown>)\n : {};\n return Boolean(readString(context.subject_id));\n}\n\nexport function hasInstallationMonetizationContext(session: unknown): boolean {\n const record = session && typeof session === \"object\" ? (session as Record<string, unknown>) : {};\n const context =\n record.context && typeof record.context === \"object\" && !Array.isArray(record.context)\n ? (record.context as Record<string, unknown>)\n : {};\n return Boolean(readString(context.installation_id));\n}\n\nexport function getDefaultXappMonetizationScopeKind(\n session: unknown,\n): \"subject\" | \"installation\" | \"realm\" {\n if (hasSubjectMonetizationContext(session)) return \"subject\";\n if (hasInstallationMonetizationContext(session)) return \"installation\";\n return \"realm\";\n}\n\nexport function flattenXappMonetizationCatalog(items: unknown): Array<Record<string, unknown>> {\n const out: Array<Record<string, unknown>> = [];\n for (const offering of Array.isArray(items) ? items : []) {\n const packages = Array.isArray((offering as any)?.packages) ? (offering as any).packages : [];\n for (const pkg of packages) {\n const price = Array.isArray((pkg as any)?.prices) ? (pkg as any).prices[0] || null : null;\n out.push({\n offeringId: readString((offering as any)?.id),\n offeringSlug: readString((offering as any)?.slug),\n offeringTitle: readLocalizedText(\n (offering as any)?.title,\n readString((offering as any)?.slug) || buildXmsSurfaceCopy().offeringFallbackLabel,\n ),\n offeringPlacement: readString((offering as any)?.placement) || null,\n packageId: readString((pkg as any)?.id),\n packageSlug: readString((pkg as any)?.slug),\n packageTitle: readLocalizedText(\n (pkg as any)?.title,\n readString((pkg as any)?.slug) || buildXmsSurfaceCopy().packageFallbackLabel,\n ),\n packageKind: readString((pkg as any)?.package_kind) || \"standard\",\n productId: readString((pkg as any)?.product?.id),\n productSlug: readString((pkg as any)?.product?.slug),\n productFamily: readString((pkg as any)?.product?.product_family),\n virtualCurrency: readVirtualCurrencyDefinition((pkg as any)?.product?.virtual_currency),\n productMetadata:\n (pkg as any)?.product?.metadata && typeof (pkg as any).product.metadata === \"object\"\n ? (pkg as any).product.metadata\n : {},\n priceId: readString((price as any)?.id),\n amount: readString((price as any)?.amount),\n currency: readString((price as any)?.currency),\n billingPeriod: readString((price as any)?.billing_period) || null,\n description:\n readLocalizedText((pkg as any)?.description) ||\n readLocalizedText((pkg as any)?.product?.description),\n metadata:\n (pkg as any)?.metadata && typeof (pkg as any).metadata === \"object\"\n ? (pkg as any).metadata\n : {},\n });\n }\n }\n return out.filter((item) => item.offeringId && item.packageId && item.priceId);\n}\n\nexport function listXappMonetizationPaywalls(items: unknown): Array<Record<string, unknown>> {\n return (Array.isArray(items) ? items : [])\n .filter((item) => item && typeof item === \"object\" && !Array.isArray(item))\n .map((item) => item as Record<string, unknown>);\n}\n\nfunction buildPaywallPlacementCandidates(value: unknown): string[] {\n const raw = readLower(value);\n if (!raw) return [];\n const out = new Set<string>([raw]);\n if (raw === \"paywall\" || raw === \"default_paywall\") {\n out.add(\"paywall\");\n out.add(\"default_paywall\");\n }\n if (raw === \"feature_paywall\" || raw === \"feature_gate\") {\n out.add(\"feature_paywall\");\n out.add(\"feature_gate\");\n }\n if (raw === \"upgrade\" || raw === \"upgrade_paywall\") {\n out.add(\"upgrade\");\n out.add(\"upgrade_paywall\");\n }\n if (raw === \"retention\" || raw === \"retention_paywall\") {\n out.add(\"retention\");\n out.add(\"retention_paywall\");\n }\n if (raw === \"checkout\" || raw === \"checkout_entry\") {\n out.add(\"checkout\");\n out.add(\"checkout_entry\");\n }\n return Array.from(out);\n}\n\nexport function selectXappMonetizationPaywall(input: {\n paywalls: unknown;\n slug?: unknown;\n placement?: unknown;\n}): Record<string, unknown> | null {\n const paywalls = listXappMonetizationPaywalls(input.paywalls);\n const slug = readLower(input.slug);\n const placement = readLower(input.placement);\n if (slug) {\n const matched = paywalls.find((item) => readLower(item.slug) === slug);\n if (matched) return matched;\n }\n if (placement) {\n const candidates = buildPaywallPlacementCandidates(placement);\n const matched = paywalls.find((item) => candidates.includes(readLower(item.placement)));\n if (matched) return matched;\n }\n return paywalls[0] || null;\n}\n\nexport function flattenXappMonetizationPaywallPackages(\n paywall: unknown,\n): Array<Record<string, unknown>> {\n const record =\n paywall && typeof paywall === \"object\" && !Array.isArray(paywall)\n ? (paywall as Record<string, unknown>)\n : {};\n const out: Array<Record<string, unknown>> = [];\n for (const pkg of Array.isArray(record.packages) ? record.packages : []) {\n const packageRecord =\n pkg && typeof pkg === \"object\" && !Array.isArray(pkg) ? (pkg as Record<string, unknown>) : {};\n const price = Array.isArray(packageRecord.prices) ? packageRecord.prices[0] || null : null;\n out.push({\n offeringId: readString(packageRecord.offering_id),\n offeringSlug: readString(packageRecord.offering_slug),\n offeringTitle:\n readString(packageRecord.offering_slug) || buildXmsSurfaceCopy().offeringFallbackLabel,\n offeringPlacement: readString(packageRecord.offering_placement) || null,\n packageId: readString(packageRecord.id),\n packageSlug: readString(packageRecord.slug),\n packageTitle: readString(packageRecord.slug) || buildXmsSurfaceCopy().packageFallbackLabel,\n packageKind: readString(packageRecord.package_kind) || \"standard\",\n productId: readString((packageRecord.product as Record<string, unknown> | undefined)?.id),\n productSlug: readString((packageRecord.product as Record<string, unknown> | undefined)?.slug),\n productFamily: readString(\n (packageRecord.product as Record<string, unknown> | undefined)?.product_family,\n ),\n virtualCurrency:\n readVirtualCurrencyDefinition(\n (packageRecord.product as Record<string, unknown> | undefined)?.virtual_currency,\n ) ?? null,\n productMetadata:\n (packageRecord.product as Record<string, unknown> | undefined)?.metadata &&\n typeof (packageRecord.product as Record<string, unknown>).metadata === \"object\"\n ? ((packageRecord.product as Record<string, unknown>).metadata as Record<string, unknown>)\n : {},\n priceId: readString((price as Record<string, unknown> | null)?.id),\n amount: readString((price as Record<string, unknown> | null)?.amount),\n currency: readString((price as Record<string, unknown> | null)?.currency),\n billingPeriod: readString((price as Record<string, unknown> | null)?.billing_period) || null,\n purchasePolicy: readProjectedPurchasePolicy(packageRecord.purchase_policy),\n metadata:\n packageRecord.metadata && typeof packageRecord.metadata === \"object\"\n ? (packageRecord.metadata as Record<string, unknown>)\n : {},\n });\n }\n return out.filter((item) => item.offeringId && item.packageId && item.priceId);\n}\n\nfunction formatPlacementLabel(value: unknown, fallback = \"General placement\"): string {\n const raw = readString(value);\n if (!raw) return fallback;\n return raw.replace(/[_-]+/g, \" \");\n}\n\nfunction readPackageCredits(item: Record<string, unknown>): number {\n const metadata =\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {};\n const direct = readNumber((item as any).credits ?? metadata.credits, -1);\n if (direct > 0) return direct;\n const included = readNumber(metadata.included_credits, -1);\n if (included > 0) return included;\n return 0;\n}\n\nexport function buildMonetizationOfferingPresentation(input: unknown): {\n offeringLabel: string;\n placementLabel: string;\n summary: string;\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const surfaceCopy = buildXmsSurfaceCopy({ locale: record.locale });\n const offeringLabel =\n readString(record.offeringTitle) ||\n formatStateLabel(record.offeringSlug, surfaceCopy.offeringFallbackLabel);\n const placementRaw = readLower(record.offeringPlacement);\n const placementLabel = formatPlacementLabel(record.offeringPlacement);\n const copy = buildXmsPackageCopy(record.locale);\n let summary = copy.generalOfferingSummary;\n\n if (placementRaw.includes(\"feature\") && placementRaw.includes(\"paywall\")) {\n summary = copy.featurePaywallOfferingSummary;\n } else if (placementRaw.includes(\"paywall\")) {\n summary = copy.defaultPaywallOfferingSummary;\n } else if (placementRaw.includes(\"checkout\")) {\n summary = copy.checkoutOfferingSummary;\n } else if (placementRaw.includes(\"upgrade\")) {\n summary = copy.upgradeOfferingSummary;\n }\n\n return {\n offeringLabel,\n placementLabel,\n summary,\n };\n}\n\nexport function buildMonetizationPaywallPresentation(input: unknown): {\n paywallLabel: string;\n placementLabel: string;\n summary: string;\n defaultPackageLabel: string;\n packageCountLabel: string;\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const paywallLabel =\n readLocalizedText(\n record.title,\n formatStateLabel(\n record.slug,\n buildXmsSurfaceCopy({ locale: record.locale }).paywallFallbackLabel,\n ),\n ) || buildXmsSurfaceCopy({ locale: record.locale }).paywallFallbackLabel;\n const placementLabel = formatPlacementLabel(record.placement);\n const packages = flattenXappMonetizationPaywallPackages(record);\n const defaultPackageRef = readString(record.default_package_ref);\n const defaultPackage =\n packages.find((item) => readString(item.packageSlug) === defaultPackageRef) ||\n packages[0] ||\n null;\n const summary =\n readLocalizedText(record.description) ||\n (placementLabel === \"General placement\"\n ? \"Presentation surface for monetized package selection.\"\n : `${placementLabel} surface for monetized package selection.`);\n return {\n paywallLabel,\n placementLabel,\n summary,\n defaultPackageLabel: defaultPackage ? readString(defaultPackage.packageTitle) : \"\",\n packageCountLabel: `${packages.length} package${packages.length === 1 ? \"\" : \"s\"}`,\n };\n}\n\nexport function buildMonetizationPaywallRenderModel(input: unknown): {\n paywallLabel: string;\n placementLabel: string;\n summary: string;\n defaultPackageLabel: string;\n packageCountLabel: string;\n badges: string[];\n packages: Array<{\n packageId: string;\n packageSlug: string;\n packageTitle: string;\n productId: string;\n productSlug: string;\n productFamily: string;\n virtualCurrencyCode: string;\n virtualCurrencyName: string;\n virtualCurrencyLabel: string;\n productMetadata: Record<string, unknown>;\n metadata: Record<string, unknown>;\n description: string;\n fitLabel: string;\n moneyLabel: string;\n offeringLabel: string;\n placementLabel: string;\n signals: string[];\n isDefault: boolean;\n }>;\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const presentation = buildMonetizationPaywallPresentation(record);\n const defaultPackageRef = readString(record.default_package_ref);\n const packages = flattenXappMonetizationPaywallPackages(record).map((item) => {\n const packagePresentation = buildMonetizationPackagePresentation(item);\n return {\n packageId: readString(item.packageId),\n packageSlug: readString(item.packageSlug),\n packageTitle: readString(item.packageTitle) || buildXmsSurfaceCopy().packageFallbackLabel,\n productId: readString(item.productId),\n productSlug: readString(item.productSlug),\n productFamily: readString(item.productFamily),\n virtualCurrencyCode: formatVirtualCurrencyLabel(item.virtualCurrency, { preferCode: true }),\n virtualCurrencyName: formatVirtualCurrencyLabel(item.virtualCurrency),\n virtualCurrencyLabel: formatVirtualCurrencyLabel(item.virtualCurrency, { includeCode: true }),\n productMetadata:\n item.productMetadata &&\n typeof item.productMetadata === \"object\" &&\n !Array.isArray(item.productMetadata)\n ? (item.productMetadata as Record<string, unknown>)\n : {},\n metadata:\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {},\n description: readString(item.description) || packagePresentation.summary,\n fitLabel: packagePresentation.fitLabel,\n moneyLabel: packagePresentation.moneyLabel,\n offeringLabel: packagePresentation.offeringLabel,\n placementLabel: packagePresentation.placementLabel,\n signals: packagePresentation.signals,\n isDefault: Boolean(defaultPackageRef) && readString(item.packageSlug) === defaultPackageRef,\n };\n });\n\n const badges = [presentation.placementLabel, presentation.packageCountLabel];\n if (presentation.defaultPackageLabel) {\n badges.push(`default ${presentation.defaultPackageLabel}`);\n }\n\n return {\n ...presentation,\n badges,\n packages,\n };\n}\n\nexport const monetizationPaywallRendererStyles = `\n.xapps-paywall {\n display: grid;\n gap: var(--xapps-paywall-gap, 14px);\n padding: var(--xapps-paywall-padding, 18px);\n border-radius: 18px;\n border: 1px solid var(--xapps-paywall-border, rgba(58, 47, 28, 0.14));\n background: var(--xapps-paywall-surface, rgba(255,255,255,0.92));\n color: var(--xapps-paywall-text, #241b10);\n box-shadow: var(--xapps-paywall-shadow, none);\n}\n.xapps-paywall__head {\n display: grid;\n gap: 8px;\n}\n.xapps-paywall__title {\n margin: 0;\n font: 700 1.15rem/1.15 \"IBM Plex Serif\", Georgia, serif;\n}\n.xapps-paywall__summary {\n color: var(--xapps-paywall-muted, #6c5d49);\n font-size: 14px;\n}\n.xapps-paywall__badges {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.xapps-paywall__badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border-radius: 999px;\n background: var(--xapps-paywall-badge-bg, rgba(15,118,110,0.08));\n color: var(--xapps-paywall-badge-text, #155e75);\n font-size: 12px;\n font-weight: 700;\n}\n.xapps-paywall__packages {\n display: grid;\n gap: 12px;\n}\n.xapps-paywall__package {\n display: grid;\n gap: 10px;\n padding: var(--xapps-paywall-package-padding, 14px);\n border-radius: 16px;\n border: 1px solid var(--xapps-paywall-package-border, rgba(58, 47, 28, 0.12));\n background: var(--xapps-paywall-package-surface, rgba(255,255,255,0.88));\n box-shadow: var(--xapps-paywall-package-shadow, none);\n}\n.xapps-paywall__package.is-default {\n border-color: rgba(15,118,110,0.28);\n box-shadow: inset 0 0 0 1px rgba(15,118,110,0.08);\n}\n.xapps-paywall__package.is-selected {\n border-color: rgba(21,94,117,0.32);\n box-shadow: inset 0 0 0 1px rgba(21,94,117,0.1);\n}\n.xapps-paywall__package-head {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n justify-content: space-between;\n}\n.xapps-paywall__package-title {\n margin: 0;\n font: 700 1rem/1.15 \"IBM Plex Serif\", Georgia, serif;\n}\n.xapps-paywall__money {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n padding: 6px 10px;\n border-radius: 999px;\n background: var(--xapps-paywall-money-bg, rgba(58, 47, 28, 0.08));\n color: var(--xapps-paywall-money-text, #3a2f1c);\n font-size: 12px;\n font-weight: 700;\n}\n.xapps-paywall__desc {\n color: var(--xapps-paywall-muted, #6c5d49);\n font-size: 14px;\n}\n.xapps-paywall__signals {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.xapps-paywall__signal {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 9px;\n border-radius: 999px;\n background: var(--xapps-paywall-signal-bg, rgba(58, 47, 28, 0.06));\n color: var(--xapps-paywall-signal-text, #5a4a31);\n font-size: 12px;\n}\n.xapps-paywall__action {\n justify-self: start;\n border: 0;\n border-radius: 999px;\n padding: 10px 14px;\n background: linear-gradient(\n 135deg,\n var(--xapps-paywall-accent-start, #0f766e),\n var(--xapps-paywall-accent-end, #155e75)\n );\n color: var(--xapps-paywall-action-text, #f5fffd);\n font-weight: 700;\n cursor: pointer;\n}\n.xapps-paywall__empty {\n color: var(--xapps-paywall-muted, #6c5d49);\n font-size: 14px;\n}\n`;\n\nexport const monetizationPlansSurfaceStyles = `\n.xapps-xms-plans {\n display: grid;\n gap: 16px;\n color: var(--xapps-text-primary, #0f172a);\n font-family: var(--xapps-font-family, Inter, \"Segoe UI\", sans-serif);\n}\n.xapps-xms-plans__header {\n display: grid;\n gap: 6px;\n}\n.xapps-xms-plans__title {\n margin: 0;\n font: 700 1.05rem/1.15 var(--xapps-display-font, \"IBM Plex Serif\", Georgia, serif);\n letter-spacing: -0.01em;\n}\n.xapps-xms-plans__subtitle {\n color: var(--xapps-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.45;\n}\n.xapps-xms-plans__grid {\n display: grid;\n gap: 14px;\n}\n.xapps-xms-plans__card {\n display: grid;\n gap: 12px;\n padding: 16px;\n border-radius: 18px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.24)) 92%, transparent);\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 98%, var(--xapps-surface-subtle, #f8fafc)) 0%,\n color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 92%, var(--xapps-surface-subtle, #f8fafc)) 100%\n );\n box-shadow: 0 16px 36px color-mix(in srgb, var(--xapps-text-primary, #0f172a) 8%, transparent);\n}\n.xapps-xms-plans__section-title {\n margin: 0;\n font: 700 0.98rem/1.1 var(--xapps-display-font, \"IBM Plex Serif\", Georgia, serif);\n letter-spacing: -0.01em;\n}\n.xapps-xms-plans__meta {\n display: grid;\n gap: 10px;\n}\n.xapps-xms-plans__surface-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n.xapps-xms-plans__meta-row {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n align-items: flex-start;\n font-size: 13px;\n}\n.xapps-xms-plans__meta-label {\n color: var(--xapps-text-secondary, #64748b);\n flex: 0 0 124px;\n}\n.xapps-xms-plans__meta-value {\n color: var(--xapps-text-primary, #0f172a);\n text-align: right;\n font-weight: 600;\n}\n.xapps-xms-plans__stack {\n display: grid;\n gap: 6px;\n}\n.xapps-xms-plans__notice {\n padding: 10px 12px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--xapps-accent, #0f766e) 8%, var(--xapps-surface-bg, #ffffff));\n color: color-mix(in srgb, var(--xapps-accent, #0f766e) 82%, var(--xapps-text-primary, #0f172a));\n font-size: 13px;\n}\n.xapps-xms-plans__error {\n padding: 10px 12px;\n border-radius: 12px;\n background: color-mix(in srgb, var(--xapps-danger, #dc2626) 8%, var(--xapps-surface-bg, #ffffff));\n color: var(--xapps-danger, #b91c1c);\n font-size: 13px;\n}\n.xapps-xms-plans__packages {\n display: grid;\n gap: 12px;\n}\n.xapps-xms-plans__package {\n display: grid;\n gap: 10px;\n padding: 14px;\n border-radius: 16px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.22)) 88%, transparent);\n background: color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 94%, var(--xapps-surface-subtle, #f8fafc));\n}\n.xapps-xms-plans__package.is-selected {\n border-color: color-mix(in srgb, var(--xapps-accent, #2563eb) 34%, var(--xapps-border-color, transparent));\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--xapps-accent, #2563eb) 12%, transparent);\n}\n.xapps-xms-plans__package.is-default {\n border-color: color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-border-color, transparent));\n box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--xapps-accent, #0f766e) 10%, transparent);\n}\n.xapps-xms-plans__package-head {\n display: flex;\n gap: 12px;\n justify-content: space-between;\n align-items: flex-start;\n}\n.xapps-xms-plans__package-title {\n margin: 0;\n font: 700 0.98rem/1.15 var(--xapps-display-font, \"IBM Plex Serif\", Georgia, serif);\n letter-spacing: -0.01em;\n}\n.xapps-xms-plans__package-description {\n margin-top: 4px;\n color: var(--xapps-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.45;\n}\n.xapps-xms-plans__money {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n padding: 6px 10px;\n border-radius: 999px;\n background: color-mix(in srgb, var(--xapps-accent, #0f766e) 7%, var(--xapps-surface-bg, #ffffff));\n color: color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-text-primary, #1e293b));\n font-size: 12px;\n font-weight: 700;\n border: 1px solid color-mix(in srgb, var(--xapps-accent, #0f766e) 14%, var(--xapps-border-color, transparent));\n}\n.xapps-xms-plans__badges,\n.xapps-xms-plans__signals {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.xapps-xms-plans__badge,\n.xapps-xms-plans__signal {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 9px;\n border-radius: 999px;\n font-size: 12px;\n}\n.xapps-xms-plans__badge {\n background: color-mix(in srgb, var(--xapps-accent, #2563eb) 8%, var(--xapps-surface-bg, #ffffff));\n color: color-mix(in srgb, var(--xapps-accent, #2563eb) 66%, var(--xapps-text-primary, #1d4ed8));\n font-weight: 700;\n}\n.xapps-xms-plans__signal {\n background: color-mix(in srgb, var(--xapps-text-primary, #0f172a) 4%, var(--xapps-surface-bg, #ffffff));\n color: color-mix(in srgb, var(--xapps-text-primary, #0f172a) 42%, var(--xapps-text-secondary, #64748b));\n}\n.xapps-xms-plans__action {\n justify-self: start;\n min-height: 40px;\n border: 0;\n border-radius: 12px;\n padding: 10px 14px;\n background: linear-gradient(\n 135deg,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 94%, white),\n color-mix(in srgb, var(--xapps-accent-strong, var(--xapps-accent, #155e75)) 94%, black)\n );\n color: #f8fafc;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 22px color-mix(in srgb, var(--xapps-accent, #0f766e) 18%, transparent);\n transition:\n transform 0.18s ease,\n box-shadow 0.18s ease,\n filter 0.18s ease;\n}\n.xapps-xms-plans__action:hover,\n.xapps-xms-plans__action:focus-visible {\n color: #f8fafc;\n filter: saturate(1.04) brightness(1.01);\n box-shadow: 0 14px 28px color-mix(in srgb, var(--xapps-accent, #0f766e) 24%, transparent);\n}\n.xapps-xms-plans__action:active {\n transform: translateY(1px);\n}\n.xapps-xms-plans__action[disabled] {\n cursor: not-allowed;\n opacity: 0.6;\n filter: none;\n transform: none;\n box-shadow: none;\n}\n.xapps-xms-plans__surface-action {\n min-height: 38px;\n border-radius: 12px;\n padding: 9px 13px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.24)) 92%, transparent);\n background: color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 96%, var(--xapps-surface-subtle, #f8fafc));\n color: var(--xapps-text-primary, #0f172a);\n font-weight: 700;\n cursor: pointer;\n transition:\n border-color 0.18s ease,\n background-color 0.18s ease,\n color 0.18s ease,\n box-shadow 0.18s ease;\n}\n.xapps-xms-plans__surface-action:hover,\n.xapps-xms-plans__surface-action:focus-visible {\n border-color: color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-border-color, transparent));\n background: color-mix(in srgb, var(--xapps-accent, #0f766e) 7%, var(--xapps-surface-bg, #ffffff));\n color: color-mix(in srgb, var(--xapps-accent, #0f766e) 24%, var(--xapps-text-primary, #0f172a));\n}\n.xapps-xms-plans__surface-action[data-variant=\"danger\"] {\n border-color: color-mix(in srgb, var(--xapps-danger, #dc2626) 22%, var(--xapps-border-color, transparent));\n color: var(--xapps-danger, #b91c1c);\n}\n.xapps-xms-plans__surface-action[data-variant=\"danger\"]:hover,\n.xapps-xms-plans__surface-action[data-variant=\"danger\"]:focus-visible {\n border-color: color-mix(in srgb, var(--xapps-danger, #dc2626) 34%, var(--xapps-border-color, transparent));\n background: color-mix(in srgb, var(--xapps-danger, #dc2626) 8%, var(--xapps-surface-bg, #ffffff));\n color: var(--xapps-danger, #991b1b);\n}\n.xapps-xms-plans__surface-action[disabled] {\n cursor: not-allowed;\n opacity: 0.6;\n box-shadow: none;\n}\n.xapps-xms-plans__empty {\n color: var(--xapps-text-secondary, #64748b);\n font-size: 14px;\n}\n.xapps-xms-plans__timeline {\n display: grid;\n gap: 10px;\n}\n.xapps-xms-plans__timeline-item {\n display: grid;\n gap: 5px;\n padding: 12px 14px;\n border-radius: 14px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.18)) 86%, transparent);\n background: color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 95%, var(--xapps-surface-subtle, #f8fafc));\n}\n.xapps-xms-plans__timeline-top {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n.xapps-xms-plans__timeline-title {\n color: var(--xapps-text-primary, #0f172a);\n font-size: 13px;\n font-weight: 700;\n}\n.xapps-xms-plans__timeline-when {\n color: var(--xapps-text-secondary, #64748b);\n font-size: 12px;\n white-space: nowrap;\n}\n.xapps-xms-plans__timeline-meta {\n color: #64748b;\n font-size: 12px;\n line-height: 1.5;\n}\n.xapps-xms-plans__history-grid {\n display: grid;\n gap: 12px;\n}\n.xapps-xms-plans__history-section {\n display: grid;\n gap: 10px;\n padding: 14px;\n border-radius: 16px;\n border: 1px solid rgba(148, 163, 184, 0.18);\n background: rgba(255,255,255,0.92);\n}\n.xapps-xms-plans__history-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 12px;\n}\n.xapps-xms-plans__history-title {\n margin: 0;\n font: 700 0.92rem/1.1 \"IBM Plex Serif\", Georgia, serif;\n}\n.xapps-xms-plans__history-count {\n color: #64748b;\n font-size: 12px;\n font-weight: 700;\n}\n.xapps-xms-plans__history-list {\n display: grid;\n gap: 9px;\n}\n.xapps-xms-plans__history-item {\n display: grid;\n gap: 4px;\n}\n.xapps-xms-plans__history-item-head {\n display: flex;\n gap: 10px;\n justify-content: space-between;\n align-items: flex-start;\n}\n.xapps-xms-plans__history-item-title {\n color: #0f172a;\n font-size: 13px;\n font-weight: 700;\n}\n.xapps-xms-plans__history-item-status {\n color: #1d4ed8;\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n.xapps-xms-plans__history-item-meta {\n color: #64748b;\n font-size: 12px;\n line-height: 1.5;\n}\n`;\n\nexport function buildMonetizationPaywallHtml(\n input: unknown,\n options: {\n actionLabel?: unknown;\n selectedPackageId?: unknown;\n showSummary?: boolean;\n showSignals?: boolean;\n showBadges?: boolean;\n interactive?: boolean;\n emptyLabel?: unknown;\n themeTokens?: unknown;\n compact?: boolean;\n emphasis?: \"default\" | \"soft\" | \"strong\" | unknown;\n } = {},\n): string {\n const renderModel = buildMonetizationPaywallRenderModel(input);\n const surfaceCopy = buildXmsSurfaceCopy();\n const actionLabel = readString(options.actionLabel) || surfaceCopy.choosePackageActionLabel;\n const selectedPackageId = readString(options.selectedPackageId);\n const showSummary = options.showSummary !== false;\n const showSignals = options.showSignals !== false;\n const showBadges = options.showBadges !== false;\n const interactive = options.interactive !== false;\n const emptyLabel = readString(options.emptyLabel) || surfaceCopy.noPaywallPackagesLabel;\n const themeStyle = buildPaywallThemeStyle({\n themeTokens: options.themeTokens,\n compact: options.compact === true,\n emphasis: options.emphasis,\n });\n\n const packagesHtml = renderModel.packages.length\n ? renderModel.packages\n .map((item) => {\n const classes = [\n \"xapps-paywall__package\",\n item.isDefault ? \"is-default\" : \"\",\n selectedPackageId && item.packageId === selectedPackageId ? \"is-selected\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const signalHtml =\n showSignals && item.signals.length\n ? `<div class=\"xapps-paywall__signals\">${item.signals\n .map(\n (signal) => `<span class=\"xapps-paywall__signal\">${escapeHtml(signal)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\";\n const defaultBadge = item.isDefault\n ? `<span class=\"xapps-paywall__badge\">${escapeHtml(surfaceCopy.defaultBadgeLabel)}</span>`\n : \"\";\n const buttonAttrs = interactive\n ? ` type=\"button\" data-package-id=\"${escapeHtml(item.packageId)}\" data-package-slug=\"${escapeHtml(\n item.packageSlug,\n )}\"`\n : ` type=\"button\" disabled`;\n return `\n <div class=\"${classes}\">\n <div class=\"xapps-paywall__package-head\">\n <div>\n <h4 class=\"xapps-paywall__package-title\">${escapeHtml(item.packageTitle)}</h4>\n <div class=\"xapps-paywall__desc\">${escapeHtml(item.description)}</div>\n </div>\n <div class=\"xapps-paywall__money\">${escapeHtml(item.moneyLabel)}</div>\n </div>\n <div class=\"xapps-paywall__badges\">\n <span class=\"xapps-paywall__badge\">${escapeHtml(item.fitLabel)}</span>\n <span class=\"xapps-paywall__badge\">${escapeHtml(item.offeringLabel)}</span>\n ${defaultBadge}\n </div>\n ${signalHtml}\n <button class=\"xapps-paywall__action\"${buttonAttrs}>${escapeHtml(actionLabel)}</button>\n </div>\n `;\n })\n .join(\"\")\n : `<div class=\"xapps-paywall__empty\">${escapeHtml(emptyLabel)}</div>`;\n\n const badgesHtml =\n showBadges && renderModel.badges.length\n ? `<div class=\"xapps-paywall__badges\">${renderModel.badges\n .map((badge) => `<span class=\"xapps-paywall__badge\">${escapeHtml(badge)}</span>`)\n .join(\"\")}</div>`\n : \"\";\n\n return `\n <section class=\"xapps-paywall${options.compact ? \" is-compact\" : \"\"}\"${\n themeStyle ? ` style=\"${themeStyle}\"` : \"\"\n }>\n <div class=\"xapps-paywall__head\">\n <h3 class=\"xapps-paywall__title\">${escapeHtml(renderModel.paywallLabel)}</h3>\n ${\n showSummary\n ? `<div class=\"xapps-paywall__summary\">${escapeHtml(renderModel.summary)}</div>`\n : \"\"\n }\n </div>\n ${badgesHtml}\n <div class=\"xapps-paywall__packages\">${packagesHtml}</div>\n </section>\n `;\n}\n\nexport function renderMonetizationPaywall(\n root: Element,\n input: unknown,\n options: {\n actionLabel?: unknown;\n selectedPackageId?: unknown;\n showSummary?: boolean;\n showSignals?: boolean;\n showBadges?: boolean;\n interactive?: boolean;\n emptyLabel?: unknown;\n themeTokens?: unknown;\n compact?: boolean;\n emphasis?: \"default\" | \"soft\" | \"strong\" | unknown;\n onSelectPackage?: ((input: { packageId: string; packageSlug: string }) => void) | null;\n } = {},\n): { destroy: () => void } {\n root.innerHTML = buildMonetizationPaywallHtml(input, options);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>(\".xapps-paywall__action\"));\n const listeners: Array<() => void> = [];\n const onSelectPackage =\n typeof options.onSelectPackage === \"function\" ? options.onSelectPackage : null;\n\n if (onSelectPackage) {\n for (const button of buttons) {\n const handler = () => {\n onSelectPackage({\n packageId: readString(button.dataset.packageId),\n packageSlug: readString(button.dataset.packageSlug),\n });\n };\n button.addEventListener(\"click\", handler);\n listeners.push(() => button.removeEventListener(\"click\", handler));\n }\n }\n\n return {\n destroy() {\n for (const cleanup of listeners) cleanup();\n root.innerHTML = \"\";\n },\n };\n}\n\nfunction formatPlansDateTime(value: unknown, locale = \"en\"): string {\n const raw = readString(value);\n if (!raw) return \"\";\n const parsed = new Date(raw);\n if (Number.isNaN(parsed.getTime())) return raw;\n try {\n return parsed.toLocaleString(locale || undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n } catch {\n return parsed.toISOString();\n }\n}\n\nfunction readActiveAdditiveEntitlements(items: unknown): Array<Record<string, unknown>> {\n return (Array.isArray(items) ? items : [])\n .map((item) => readRecord(item))\n .filter((item): item is Record<string, unknown> => Boolean(item))\n .filter((item) => hasCurrentOwnedEntitlement(item));\n}\n\nfunction formatAdditiveEntitlementLabels(items: Array<Record<string, unknown>>): string[] {\n const labels = new Map<string, string>();\n for (const item of items) {\n const label = readString(item.product_slug) || readString(item.tier);\n if (!label) continue;\n const identity =\n readString(item.product_id) || readString(item.product_slug) || readString(item.id) || label;\n if (!labels.has(identity)) labels.set(identity, label);\n }\n return Array.from(labels.values());\n}\n\nfunction buildPlansActionLabel(input: {\n locale?: unknown;\n policy: {\n canPurchase: boolean;\n status: \"available\" | \"current_recurring_plan\" | \"owned_additive_unlock\";\n transitionKind:\n | \"start_recurring\"\n | \"replace_recurring\"\n | \"buy_additive_unlock\"\n | \"buy_credit_pack\"\n | \"activate_hybrid\"\n | \"none\";\n reason: string | null;\n };\n busy: boolean;\n}): string {\n const copy = buildXmsPackageCopy(input.locale);\n if (input.policy.status === \"owned_additive_unlock\") return copy.ownedUnlockActiveLabel;\n if (input.policy.status === \"current_recurring_plan\") return copy.currentPlanActiveLabel;\n if (input.busy) return copy.startingCheckoutLabel;\n if (input.policy.transitionKind === \"buy_additive_unlock\") return copy.purchaseAddOnUnlockLabel;\n return copy.continueToCheckoutLabel;\n}\n\nfunction readHistoryBucket(\n history: Record<string, unknown> | null,\n key: string,\n): { total: number; items: Array<Record<string, unknown>> } {\n const bucketSource = history ? history[key] : undefined;\n const bucket = readRecord(bucketSource);\n const bucketItems = bucket ? bucket.items : undefined;\n const items = (Array.isArray(bucketItems) ? bucketItems : [])\n .map((item) => readRecord(item))\n .filter((item): item is Record<string, unknown> => Boolean(item));\n return {\n total: readNumber(bucket?.total, items.length),\n items,\n };\n}\n\nfunction formatBalanceQuantity(value: number): string {\n if (!Number.isFinite(value)) return \"\";\n const normalized = Math.round(value * 10000) / 10000;\n if (Number.isInteger(normalized)) return String(normalized);\n return normalized.toFixed(4).replace(/\\.?0+$/, \"\");\n}\n\nexport function summarizeVirtualCurrencyBalances(input: unknown): {\n balances: Array<{\n key: string;\n label: string;\n amount: string;\n amountLabel: string;\n accountCount: number;\n }>;\n totalAccounts: number;\n totalCurrencies: number;\n} {\n const record = readRecord(input) ?? {};\n const history = readRecord(record.history) ?? record;\n const walletAccounts = readHistoryBucket(history, \"wallet_accounts\").items;\n const accessSnapshots = readHistoryBucket(history, \"access_snapshots\").items;\n const aggregates = new Map<\n string,\n {\n label: string;\n amount: number;\n accountCount: number;\n virtualCurrency: unknown;\n fallbackUnit: string;\n }\n >();\n\n const upsertBalance = (inputValue: {\n amount: unknown;\n virtualCurrency?: unknown;\n fallbackUnit?: unknown;\n fallbackKey?: unknown;\n }) => {\n const amount = readNumber(inputValue.amount, Number.NaN);\n if (!Number.isFinite(amount) || Math.abs(amount) < 0.0000001) return;\n const label =\n formatVirtualCurrencyLabel(inputValue.virtualCurrency, {\n includeCode: true,\n }) ||\n readString(inputValue.fallbackUnit) ||\n readString(inputValue.fallbackKey) ||\n \"Balance\";\n const key =\n formatVirtualCurrencyLabel(inputValue.virtualCurrency, {\n preferCode: true,\n }) ||\n readString(inputValue.fallbackKey) ||\n label.toLowerCase();\n const existing = aggregates.get(key);\n if (existing) {\n existing.amount += amount;\n existing.accountCount += 1;\n return;\n }\n aggregates.set(key, {\n label,\n amount,\n accountCount: 1,\n virtualCurrency: inputValue.virtualCurrency ?? null,\n fallbackUnit: readString(inputValue.fallbackUnit),\n });\n };\n\n for (const item of walletAccounts) {\n upsertBalance({\n amount: item.balance_remaining,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: item.currency,\n fallbackKey: item.product_slug || item.id,\n });\n }\n\n if (aggregates.size === 0 && accessSnapshots.length > 0) {\n for (const item of accessSnapshots) {\n upsertBalance({\n amount: item.credits_remaining,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: \"credits\",\n fallbackKey: item.tier || item.id,\n });\n }\n }\n\n const balances = Array.from(aggregates.entries())\n .map(([key, item]) => {\n const amount = formatBalanceQuantity(item.amount);\n return {\n key,\n label: item.label,\n amount,\n amountLabel:\n formatVirtualCurrencyAmountLabel({\n amount,\n virtualCurrency: item.virtualCurrency,\n fallbackUnit: item.fallbackUnit,\n }) || amount,\n accountCount: item.accountCount,\n };\n })\n .sort((left, right) => {\n const amountDiff = readNumber(right.amount) - readNumber(left.amount);\n if (Math.abs(amountDiff) > 0.0000001) return amountDiff > 0 ? 1 : -1;\n return left.label.localeCompare(right.label);\n });\n\n return {\n balances,\n totalAccounts: walletAccounts.length,\n totalCurrencies: balances.length,\n };\n}\n\nfunction readHistoryTitle(item: Record<string, unknown>, keys: string[], fallback: string): string {\n for (const key of keys) {\n const segments = key.split(\".\");\n let current: unknown = item;\n for (const segment of segments) {\n const record = readRecord(current);\n current = record ? record[segment] : undefined;\n }\n if (key.startsWith(\"virtual_currency.\")) {\n const value = formatVirtualCurrencyLabel(item.virtual_currency ?? current, {\n includeCode: true,\n });\n if (value) return value;\n }\n const value = readString(current);\n if (value) return value;\n }\n return fallback;\n}\n\nfunction readHistoryMeta(item: Record<string, unknown>, keys: string[], locale: string): string[] {\n const out: string[] = [];\n for (const key of keys) {\n const segments = key.split(\".\");\n let current: unknown = item;\n for (const segment of segments) {\n const record = readRecord(current);\n current = record ? record[segment] : undefined;\n }\n const value =\n key === \"settlement_effect_detail\"\n ? formatSettlementEffectDetailLabel(item.settlement_effect, current, locale)\n : key === \"balance_remaining\"\n ? formatVirtualCurrencyAmountLabel({\n amount: current,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: readString(item.currency),\n })\n : key === \"amount\"\n ? formatVirtualCurrencyAmountLabel({\n amount: current,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: readString(item.currency),\n })\n : key === \"credits_remaining\"\n ? formatVirtualCurrencyAmountLabel({\n amount: current,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: \"credits\",\n })\n : key.endsWith(\"_at\")\n ? formatPlansDateTime(current, locale)\n : readString(current);\n if (value) out.push(formatStateLabel(value, value));\n }\n return out;\n}\n\nfunction formatTimelineBucketLabel(value: unknown, locale: string): string {\n const normalized = readLower(value);\n const copy = buildXmsSurfaceCopy({ locale });\n if (!normalized) return copy.historyGenericLabel;\n if (normalized === \"purchase_intents\") return copy.historyPurchaseIntentLabel;\n if (normalized === \"transactions\") return copy.historyTransactionLabel;\n if (normalized === \"subscriptions\") return copy.historySubscriptionContractLabel;\n if (normalized === \"entitlements\") return copy.historyEntitlementLabel;\n if (normalized === \"wallet_ledger\") return copy.historyWalletLedgerTitle;\n if (normalized === \"access_snapshots\") return copy.historyAccessSnapshotLabel;\n if (normalized === \"invoices\") return copy.historyInvoiceLabel;\n return formatStateLabel(normalized, normalized);\n}\n\nfunction formatSettlementEffectDetailLabel(\n effect: unknown,\n detail: unknown,\n locale: string,\n): string | null {\n const rawDetail = readString(detail);\n if (!rawDetail) return null;\n const normalizedEffect = readLower(effect);\n const normalizedDetail = readLower(detail);\n const copy = buildXmsSurfaceCopy({ locale });\n if (normalizedEffect === \"transaction_chargeback\") {\n if (normalizedDetail === \"warning_needs_response\") {\n return copy.historySettlementDetailDisputeWarningNeedsResponse;\n }\n if (normalizedDetail === \"warning_under_review\") {\n return copy.historySettlementDetailDisputeWarningUnderReview;\n }\n if (normalizedDetail === \"warning_closed\") {\n return copy.historySettlementDetailDisputeWarningClosed;\n }\n if (normalizedDetail === \"needs_response\") {\n return copy.historySettlementDetailDisputeNeedsResponse;\n }\n if (normalizedDetail === \"under_review\") {\n return copy.historySettlementDetailDisputeUnderReview;\n }\n if (normalizedDetail === \"won\") {\n return copy.historySettlementDetailDisputeWon;\n }\n if (normalizedDetail === \"lost\") {\n return copy.historySettlementDetailDisputeLost;\n }\n return normalizedDetail.replace(/_/g, \" \");\n }\n return rawDetail;\n}\n\nfunction buildTimelineHtml(input: {\n total: number;\n items: Array<Record<string, unknown>>;\n locale: string;\n}): string {\n if (!input.total) return \"\";\n const items = [...input.items].sort((left, right) => {\n const leftAt = Date.parse(readString(left.occurred_at));\n const rightAt = Date.parse(readString(right.occurred_at));\n if (Number.isFinite(leftAt) && Number.isFinite(rightAt) && leftAt !== rightAt) {\n return rightAt - leftAt;\n }\n return readString(right.id).localeCompare(readString(left.id));\n });\n return `\n <div class=\"xapps-xms-plans__timeline\">\n ${items\n .map((item) => {\n const title =\n readString(item.title) ||\n readString(item.id) ||\n formatTimelineBucketLabel(item.bucket, input.locale);\n const when = formatPlansDateTime(item.occurred_at, input.locale);\n const meta = [\n formatTimelineBucketLabel(item.bucket, input.locale),\n readString(item.status) ? formatStateLabel(item.status, readString(item.status)) : \"\",\n readString(item.settlement_effect)\n ? formatStateLabel(item.settlement_effect, readString(item.settlement_effect))\n : \"\",\n formatSettlementEffectDetailLabel(\n item.settlement_effect,\n item.settlement_effect_detail,\n input.locale,\n ),\n readString(item.scope),\n readString(item.correlation),\n formatVirtualCurrencyAmountLabel({\n amount: item.amount,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: readString(item.currency),\n }),\n readString(item.note),\n ].filter(Boolean);\n return `\n <div class=\"xapps-xms-plans__timeline-item\">\n <div class=\"xapps-xms-plans__timeline-top\">\n <div class=\"xapps-xms-plans__timeline-title\">${escapeHtml(title)}</div>\n ${when ? `<div class=\"xapps-xms-plans__timeline-when\">${escapeHtml(when)}</div>` : \"\"}\n </div>\n ${\n meta.length\n ? `<div class=\"xapps-xms-plans__timeline-meta\">${escapeHtml(meta.join(\" \u2022 \"))}</div>`\n : \"\"\n }\n </div>\n `;\n })\n .join(\"\")}\n </div>\n `;\n}\n\nfunction buildHistorySectionHtml(input: {\n title: string;\n total: number;\n items: Array<Record<string, unknown>>;\n locale: string;\n itemTitleKeys: string[];\n itemFallbackTitle: string;\n itemStatusKeys?: string[];\n itemMetaKeys: string[];\n}): string {\n if (!input.total) return \"\";\n return `\n <section class=\"xapps-xms-plans__history-section\">\n <div class=\"xapps-xms-plans__history-head\">\n <h5 class=\"xapps-xms-plans__history-title\">${escapeHtml(input.title)}</h5>\n <span class=\"xapps-xms-plans__history-count\">${escapeHtml(String(input.total))}</span>\n </div>\n <div class=\"xapps-xms-plans__history-list\">\n ${input.items\n .map((item) => {\n const title = readHistoryTitle(item, input.itemTitleKeys, input.itemFallbackTitle);\n const statusKeys = input.itemStatusKeys || [];\n const status = statusKeys.map((key) => readString(item[key])).find(Boolean);\n const meta = readHistoryMeta(item, input.itemMetaKeys, input.locale);\n return `\n <div class=\"xapps-xms-plans__history-item\">\n <div class=\"xapps-xms-plans__history-item-head\">\n <div class=\"xapps-xms-plans__history-item-title\">${escapeHtml(title)}</div>\n ${\n status\n ? `<div class=\"xapps-xms-plans__history-item-status\">${escapeHtml(\n formatStateLabel(status, status),\n )}</div>`\n : \"\"\n }\n </div>\n ${\n meta.length\n ? `<div class=\"xapps-xms-plans__history-item-meta\">${escapeHtml(\n meta.join(\" \u2022 \"),\n )}</div>`\n : \"\"\n }\n </div>\n `;\n })\n .join(\"\")}\n </div>\n </section>\n `;\n}\n\nfunction buildMonetizationHistorySections(input: {\n history: Record<string, unknown> | null;\n locale: string;\n}): string[] {\n const { history, locale } = input;\n const copy = buildXmsSurfaceCopy({ locale });\n return [\n buildHistorySectionHtml({\n title: copy.historySubscriptionsTitle,\n total: readHistoryBucket(history, \"subscriptions\").total,\n items: readHistoryBucket(history, \"subscriptions\").items,\n locale,\n itemTitleKeys: [\"tier\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historySubscriptionContractLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"billing_period\", \"renews_at\", \"expired_at\", \"cancelled_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyEntitlementsTitle,\n total: readHistoryBucket(history, \"entitlements\").total,\n items: readHistoryBucket(history, \"entitlements\").items,\n locale,\n itemTitleKeys: [\"tier\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyEntitlementLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"source_kind\", \"starts_at\", \"expires_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyWalletAccountsTitle,\n total: readHistoryBucket(history, \"wallet_accounts\").total,\n items: readHistoryBucket(history, \"wallet_accounts\").items,\n locale,\n itemTitleKeys: [\"virtual_currency.code\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyWalletAccountLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"balance_remaining\", \"updated_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyWalletLedgerTitle,\n total: readHistoryBucket(history, \"wallet_ledger\").total,\n items: readHistoryBucket(history, \"wallet_ledger\").items,\n locale,\n itemTitleKeys: [\"event_kind\", \"virtual_currency.code\", \"wallet_product_slug\", \"id\"],\n itemFallbackTitle: copy.historyWalletLedgerEntryLabel,\n itemStatusKeys: [],\n itemMetaKeys: [\"amount\", \"settlement_effect\", \"source_kind\", \"occurred_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyTransactionsTitle,\n total: readHistoryBucket(history, \"transactions\").total,\n items: readHistoryBucket(history, \"transactions\").items,\n locale,\n itemTitleKeys: [\"package_slug\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyTransactionLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\n \"amount\",\n \"currency\",\n \"settlement_effect\",\n \"payment_session_id\",\n \"occurred_at\",\n ],\n }),\n buildHistorySectionHtml({\n title: copy.historyPurchaseIntentsTitle,\n total: readHistoryBucket(history, \"purchase_intents\").total,\n items: readHistoryBucket(history, \"purchase_intents\").items,\n locale,\n itemTitleKeys: [\"package_slug\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyPurchaseIntentLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"amount\", \"currency\", \"payment_lane\", \"updated_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyInvoicesTitle,\n total: readHistoryBucket(history, \"invoices\").total,\n items: readHistoryBucket(history, \"invoices\").items,\n locale,\n itemTitleKeys: [\"invoice_identifier\", \"id\"],\n itemFallbackTitle: copy.historyInvoiceLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\n \"settlement_effect\",\n \"settlement_effect_detail\",\n \"provider_key\",\n \"owner_scope\",\n \"created_at\",\n ],\n }),\n buildHistorySectionHtml({\n title: copy.historyAccessSnapshotsTitle,\n total: readHistoryBucket(history, \"access_snapshots\").total,\n items: readHistoryBucket(history, \"access_snapshots\").items,\n locale,\n itemTitleKeys: [\"tier\", \"id\"],\n itemFallbackTitle: copy.historyAccessSnapshotLabel,\n itemStatusKeys: [\"entitlement_state\"],\n itemMetaKeys: [\"balance_state\", \"credits_remaining\", \"updated_at\"],\n }),\n ].filter(Boolean);\n}\n\nfunction buildMonetizationHistoryBalanceSummaryHtml(input: {\n history: Record<string, unknown> | null;\n locale: string;\n}): string {\n const { history, locale } = input;\n const copy = buildXmsSurfaceCopy({ locale });\n const summary = summarizeVirtualCurrencyBalances(history);\n if (!summary.balances.length) return \"\";\n return `\n <section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(copy.historyBalanceSummaryTitle)}</h4>\n <div class=\"xapps-xms-plans__subtitle\">${escapeHtml(copy.historyBalanceSummarySubtitle)}</div>\n <div class=\"xapps-xms-plans__badges\">\n ${summary.balances\n .map(\n (item) => `<span class=\"xapps-xms-plans__badge\">${escapeHtml(item.amountLabel)}</span>`,\n )\n .join(\"\")}\n </div>\n </section>\n `;\n}\n\nexport type XmsSurfaceView = \"plans\" | \"history\";\n\nexport function buildXmsSurfaceShellTheme(input?: { themeTokens?: unknown }): {\n overlayBg: string;\n panelBg: string;\n panelBorder: string;\n panelRadius: string;\n panelShadow: string;\n headerBg: string;\n headerBorder: string;\n titleColor: string;\n subtitleColor: string;\n tabRailBg: string;\n tabRailBorder: string;\n tabActiveBg: string;\n tabActiveText: string;\n tabInactiveText: string;\n closeBg: string;\n closeBorder: string;\n closeText: string;\n bodyBg: string;\n} {\n const theme = readRecord(input?.themeTokens) ?? {};\n const card = readString(theme.card) || \"#ffffff\";\n const bg = readString(theme.bg) || \"#f8fafc\";\n const border = readString(theme.border) || \"rgba(148, 163, 184, 0.28)\";\n const text = readString(theme.text) || \"#0f172a\";\n const muted = readString(theme.muted) || \"#64748b\";\n const shadow = readString(theme.shadow) || \"0 28px 70px rgba(15, 23, 42, 0.28)\";\n const radius = readString(theme.radiusLg) || readString(theme.radius) || \"18px\";\n return {\n overlayBg: \"rgba(2,6,23,0.56)\",\n panelBg: card,\n panelBorder: border,\n panelRadius: radius,\n panelShadow: shadow,\n headerBg: `linear-gradient(180deg, ${card} 0%, ${bg} 100%)`,\n headerBorder: \"1px solid rgba(226, 232, 240, 0.95)\",\n titleColor: text,\n subtitleColor: muted,\n tabRailBg: \"rgba(226, 232, 240, 0.72)\",\n tabRailBorder: \"1px solid rgba(203, 213, 225, 0.92)\",\n tabActiveBg: card,\n tabActiveText: text,\n tabInactiveText: muted,\n closeBg: card,\n closeBorder: border,\n closeText: text,\n bodyBg: `linear-gradient(180deg, ${bg} 0%, ${card} 22%)`,\n };\n}\n\nexport function resolveXmsSurfaceView(\n value: unknown,\n fallback: XmsSurfaceView = \"plans\",\n): XmsSurfaceView {\n const normalized = readLower(value);\n return normalized === \"history\" ? \"history\" : fallback;\n}\n\nexport function buildXmsSurfaceShellModel(input: {\n view?: unknown;\n locale?: unknown;\n plansTitle?: unknown;\n plansSubtitle?: unknown;\n historyTitle?: unknown;\n historySubtitle?: unknown;\n plansLabel?: unknown;\n historyLabel?: unknown;\n closeLabel?: unknown;\n}): {\n view: XmsSurfaceView;\n title: string;\n subtitle: string;\n closeLabel: string;\n tabs: Array<{ key: XmsSurfaceView; label: string; active: boolean }>;\n} {\n const view = resolveXmsSurfaceView(input.view);\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const plansTitle = readString(input.plansTitle) || copy.plansTitle;\n const historyTitle = readString(input.historyTitle) || copy.historyTitle;\n const plansSubtitle = readString(input.plansSubtitle) || copy.plansSubtitle;\n const historySubtitle = readString(input.historySubtitle) || copy.historySubtitle;\n const plansLabel = readString(input.plansLabel) || copy.plansLabel;\n const historyLabel = readString(input.historyLabel) || copy.historyLabel;\n const closeLabel = readString(input.closeLabel) || copy.closeLabel;\n return {\n view,\n title: view === \"history\" ? historyTitle : plansTitle,\n subtitle: view === \"history\" ? historySubtitle : plansSubtitle,\n closeLabel,\n tabs: [\n { key: \"plans\", label: plansLabel, active: view === \"plans\" },\n { key: \"history\", label: historyLabel, active: view === \"history\" },\n ],\n };\n}\n\nexport function buildMonetizationPlansSurfaceHtml(\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n selectedPackageSlug?: unknown;\n busyPackageSlug?: unknown;\n busyAction?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n interactive?: boolean;\n showOperatorManagement?: boolean;\n onRefreshSubscription?: (() => void) | null;\n onCancelSubscription?: (() => void) | null;\n } = {},\n): string {\n const record = readRecord(input) ?? {};\n const accessProjection = readRecord(record.accessProjection ?? record.access_projection);\n const currentSubscription = readRecord(record.currentSubscription ?? record.current_subscription);\n const additiveEntitlements = readActiveAdditiveEntitlements(\n record.additiveEntitlements ?? record.additive_entitlements,\n );\n const paywall = readRecord(record.paywall) ?? record;\n const locale = readString(options.locale) || \"en\";\n const renderModel = buildMonetizationPaywallRenderModel(paywall);\n const packageRecords = flattenXappMonetizationPaywallPackages(paywall);\n const packageRecordBySlug = new Map(\n packageRecords.map((item) => [readLower(item.packageSlug), item]),\n );\n const selectedPackageSlug = readLower(options.selectedPackageSlug);\n const busyPackageSlug = readLower(options.busyPackageSlug);\n const busyAction = readLower(options.busyAction);\n const includeStyles = options.includeStyles !== false;\n const showHeader = options.showHeader !== false;\n const packageCopy = buildXmsPackageCopy(locale);\n const surfaceCopy = buildXmsSurfaceCopy({ locale });\n const lifecycle = buildXmsSubscriptionLifecycleSummary({\n currentSubscription,\n locale,\n });\n const lifecycleInteractive = options.interactive !== false;\n const showOperatorManagement = options.showOperatorManagement === true;\n const operatorAuthority = showOperatorManagement\n ? resolveSubscriptionOperatorAuthorityLabel({\n currentSubscription,\n locale,\n })\n : \"\";\n const managementDestination = showOperatorManagement\n ? resolveSubscriptionManagementDestinationLabel({\n currentSubscription,\n locale,\n })\n : \"\";\n const managementDestinationHref = showOperatorManagement\n ? resolveSubscriptionManagementDestinationHref({\n currentSubscription,\n })\n : \"\";\n const managementDestinationHint = showOperatorManagement\n ? resolveSubscriptionManagementDestinationHint({\n currentSubscription,\n locale,\n })\n : \"\";\n const hasRefreshSubscriptionAction =\n lifecycleInteractive &&\n typeof options.onRefreshSubscription === \"function\" &&\n readSubscriptionActionAvailability({\n currentSubscription,\n actionKey: \"refresh_status\",\n fallback: true,\n });\n const hasCancelSubscriptionAction =\n lifecycleInteractive &&\n lifecycle.canCancel &&\n typeof options.onCancelSubscription === \"function\" &&\n readSubscriptionActionAvailability({\n currentSubscription,\n actionKey: \"cancel_subscription\",\n fallback: true,\n });\n const currentTier = readString(currentSubscription?.tier) || readString(accessProjection?.tier);\n const accessState = formatCoverageLabel({ accessProjection, currentSubscription, locale });\n const creditsRemaining = readString(accessProjection?.credits_remaining);\n const accessVirtualCurrency = readVirtualCurrencyDefinition(accessProjection?.virtual_currency);\n const additiveUnlocks = formatAdditiveEntitlementLabels(additiveEntitlements);\n const accessRows = [\n currentTier ? [surfaceCopy.currentPlanLabel, currentTier] : null,\n accessState ? [surfaceCopy.membershipAccessLabel, accessState] : null,\n lifecycle.statusLabel ? [surfaceCopy.subscriptionStatusLabel, lifecycle.statusLabel] : null,\n lifecycle.coverageLabel\n ? [surfaceCopy.subscriptionCoverageLabel, lifecycle.coverageLabel]\n : null,\n lifecycle.reasonLabel ? [surfaceCopy.subscriptionReasonLabel, lifecycle.reasonLabel] : null,\n lifecycle.overdueSince\n ? [surfaceCopy.overdueSinceLabel, formatPlansDateTime(lifecycle.overdueSince, locale)]\n : null,\n lifecycle.expiryBoundaryAt\n ? [surfaceCopy.expiryBoundaryLabel, formatPlansDateTime(lifecycle.expiryBoundaryAt, locale)]\n : null,\n lifecycle.renewsAt\n ? [surfaceCopy.renewsAtLabel, formatPlansDateTime(lifecycle.renewsAt, locale)]\n : null,\n lifecycle.currentPeriodEndsAt\n ? [\n surfaceCopy.currentPeriodEndsLabel,\n formatPlansDateTime(lifecycle.currentPeriodEndsAt, locale),\n ]\n : null,\n lifecycle.cancelledAt\n ? [surfaceCopy.cancelledAtLabel, formatPlansDateTime(lifecycle.cancelledAt, locale)]\n : null,\n lifecycle.expiresAt\n ? [surfaceCopy.expiresAtLabel, formatPlansDateTime(lifecycle.expiresAt, locale)]\n : null,\n operatorAuthority ? [surfaceCopy.operatorAuthorityLabel, operatorAuthority] : null,\n managementDestination ? [surfaceCopy.managementDestinationLabel, managementDestination] : null,\n accessVirtualCurrency\n ? [\n surfaceCopy.virtualCurrencyLabel,\n formatVirtualCurrencyLabel(accessVirtualCurrency, { includeCode: true }),\n ]\n : null,\n creditsRemaining\n ? [\n surfaceCopy.creditsRemainingLabel,\n formatVirtualCurrencyAmountLabel({\n amount: creditsRemaining,\n virtualCurrency: accessVirtualCurrency,\n fallbackUnit: \"credits\",\n }),\n ]\n : null,\n ].filter((item): item is [string, string] => Boolean(item));\n const lifecycleActionsHtml =\n lifecycle.present && (hasRefreshSubscriptionAction || hasCancelSubscriptionAction)\n ? `<div class=\"xapps-xms-plans__surface-actions\">\n ${\n hasRefreshSubscriptionAction\n ? `<button\n type=\"button\"\n class=\"xapps-xms-plans__surface-action\"\n data-subscription-action=\"refresh\"\n ${busyAction ? \"disabled\" : \"\"}\n >${escapeHtml(\n busyAction === \"refresh\"\n ? surfaceCopy.refreshingStatusActionLabel\n : surfaceCopy.refreshStatusActionLabel,\n )}</button>`\n : \"\"\n }\n ${\n hasCancelSubscriptionAction\n ? `<button\n type=\"button\"\n class=\"xapps-xms-plans__surface-action\"\n data-subscription-action=\"cancel\"\n data-variant=\"danger\"\n ${busyAction ? \"disabled\" : \"\"}\n >${escapeHtml(\n busyAction === \"cancel\"\n ? surfaceCopy.cancellingSubscriptionActionLabel\n : surfaceCopy.cancelSubscriptionActionLabel,\n )}</button>`\n : \"\"\n }\n ${\n managementDestinationHref\n ? `<a\n class=\"xapps-xms-plans__surface-action\"\n href=\"${escapeHtml(managementDestinationHref)}\"\n target=\"_top\"\n rel=\"noopener noreferrer\"\n >${escapeHtml(surfaceCopy.openManagementDestinationActionLabel)}</a>`\n : \"\"\n }\n </div>`\n : managementDestinationHref\n ? `<div class=\"xapps-xms-plans__surface-actions\">\n <a\n class=\"xapps-xms-plans__surface-action\"\n href=\"${escapeHtml(managementDestinationHref)}\"\n target=\"_top\"\n rel=\"noopener noreferrer\"\n >${escapeHtml(surfaceCopy.openManagementDestinationActionLabel)}</a>\n </div>`\n : \"\";\n\n const packagesHtml = renderModel.packages.length\n ? renderModel.packages\n .map((item) => {\n const packageRecord = packageRecordBySlug.get(readLower(item.packageSlug)) ?? item;\n const purchasePolicy = resolveMonetizationPackagePurchasePolicy({\n item: packageRecord,\n currentSubscription,\n additiveEntitlements,\n accessProjection,\n });\n const packageSignals = item.signals.filter(\n (signal) =>\n !(\n purchasePolicy.transitionKind === \"replace_recurring\" &&\n readLower(signal).includes(\"trial\")\n ),\n );\n const badges = [item.fitLabel];\n if (selectedPackageSlug && readLower(item.packageSlug) === selectedPackageSlug) {\n badges.push(packageCopy.selectedLabel);\n }\n if (purchasePolicy.status === \"owned_additive_unlock\") {\n badges.push(packageCopy.ownedUnlockLabel);\n } else if (purchasePolicy.status === \"current_recurring_plan\") {\n badges.push(packageCopy.currentPlanLabel);\n } else if (purchasePolicy.transitionKind === \"buy_additive_unlock\") {\n badges.push(packageCopy.addOnWithMembershipLabel);\n }\n if (item.isDefault) badges.push(packageCopy.defaultLabel);\n const interactive = options.interactive !== false;\n const disabled =\n !interactive ||\n !purchasePolicy.canPurchase ||\n (busyPackageSlug && busyPackageSlug !== readLower(item.packageSlug));\n return `\n <section class=\"xapps-xms-plans__package ${item.isDefault ? \"is-default\" : \"\"} ${\n selectedPackageSlug && readLower(item.packageSlug) === selectedPackageSlug\n ? \"is-selected\"\n : \"\"\n }\">\n <div class=\"xapps-xms-plans__package-head\">\n <div>\n <h4 class=\"xapps-xms-plans__package-title\">${escapeHtml(item.packageTitle)}</h4>\n <div class=\"xapps-xms-plans__package-description\">${escapeHtml(\n item.description,\n )}</div>\n </div>\n <div class=\"xapps-xms-plans__money\">${escapeHtml(item.moneyLabel)}</div>\n </div>\n <div class=\"xapps-xms-plans__badges\">\n ${badges\n .map(\n (badge) => `<span class=\"xapps-xms-plans__badge\">${escapeHtml(badge)}</span>`,\n )\n .join(\"\")}\n </div>\n ${\n packageSignals.length\n ? `<div class=\"xapps-xms-plans__signals\">${packageSignals\n .map(\n (signal) =>\n `<span class=\"xapps-xms-plans__signal\">${escapeHtml(signal)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\"\n }\n <button\n class=\"xapps-xms-plans__action\"\n type=\"button\"\n data-package-id=\"${escapeHtml(item.packageId)}\"\n data-package-slug=\"${escapeHtml(item.packageSlug)}\"\n ${disabled ? \"disabled\" : \"\"}\n >${escapeHtml(\n buildPlansActionLabel({\n locale,\n policy: purchasePolicy,\n busy: busyPackageSlug === readLower(item.packageSlug),\n }),\n )}</button>\n </section>\n `;\n })\n .join(\"\")\n : `<div class=\"xapps-xms-plans__empty\">${escapeHtml(surfaceCopy.noPublishedPlansLabel)}</div>`;\n\n return `\n ${includeStyles ? `<style>${monetizationPlansSurfaceStyles}</style>` : \"\"}\n <section class=\"xapps-xms-plans\">\n ${\n showHeader\n ? `<div class=\"xapps-xms-plans__header\">\n <h3 class=\"xapps-xms-plans__title\">${escapeHtml(\n readString(options.title) || renderModel.paywallLabel || \"Plans\",\n )}</h3>\n ${\n readString(options.subtitle)\n ? `<div class=\"xapps-xms-plans__subtitle\">${escapeHtml(\n readString(options.subtitle),\n )}</div>`\n : \"\"\n }\n </div>`\n : \"\"\n }\n ${readString(options.notice) ? `<div class=\"xapps-xms-plans__notice\">${escapeHtml(readString(options.notice))}</div>` : \"\"}\n ${readString(options.error) ? `<div class=\"xapps-xms-plans__error\">${escapeHtml(readString(options.error))}</div>` : \"\"}\n ${\n accessRows.length || additiveUnlocks.length\n ? `<section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(surfaceCopy.currentCoverageTitle)}</h4>\n <div class=\"xapps-xms-plans__meta\">\n ${accessRows\n .map(\n ([label, value]) => `\n <div class=\"xapps-xms-plans__meta-row\">\n <span class=\"xapps-xms-plans__meta-label\">${escapeHtml(label)}</span>\n <span class=\"xapps-xms-plans__meta-value\">${escapeHtml(value)}</span>\n </div>`,\n )\n .join(\"\")}\n ${\n additiveUnlocks.length\n ? `<div class=\"xapps-xms-plans__meta-row\">\n <span class=\"xapps-xms-plans__meta-label\">${escapeHtml(surfaceCopy.addOnUnlocksLabel)}</span>\n <span class=\"xapps-xms-plans__meta-value\">\n <span class=\"xapps-xms-plans__stack\">${additiveUnlocks\n .map((label) => `<span>${escapeHtml(label)}</span>`)\n .join(\"\")}</span>\n </span>\n </div>`\n : \"\"\n }\n </div>\n ${\n managementDestinationHint\n ? `<div class=\"xapps-xms-plans__notice\">${escapeHtml(managementDestinationHint)}</div>`\n : \"\"\n }\n ${lifecycleActionsHtml}\n </section>`\n : \"\"\n }\n <section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(\n renderModel.paywallLabel || surfaceCopy.plansTitle,\n )}</h4>\n ${\n renderModel.summary\n ? `<div class=\"xapps-xms-plans__subtitle\">${escapeHtml(renderModel.summary)}</div>`\n : \"\"\n }\n <div class=\"xapps-xms-plans__packages\">${packagesHtml}</div>\n </section>\n </section>\n `;\n}\n\nexport function renderMonetizationPlansSurface(\n root: Element,\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n selectedPackageSlug?: unknown;\n busyPackageSlug?: unknown;\n busyAction?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n interactive?: boolean;\n showOperatorManagement?: boolean;\n onCheckoutPackage?: ((input: { packageId: string; packageSlug: string }) => void) | null;\n onRefreshSubscription?: (() => void) | null;\n onCancelSubscription?: (() => void) | null;\n } = {},\n): { destroy: () => void } {\n root.innerHTML = buildMonetizationPlansSurfaceHtml(input, options);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>(\".xapps-xms-plans__action\"));\n const refreshButton = root.querySelector<HTMLButtonElement>(\n '[data-subscription-action=\"refresh\"]',\n );\n const cancelButton = root.querySelector<HTMLButtonElement>('[data-subscription-action=\"cancel\"]');\n const listeners: Array<() => void> = [];\n const onCheckoutPackage =\n typeof options.onCheckoutPackage === \"function\" ? options.onCheckoutPackage : null;\n const onRefreshSubscription =\n typeof options.onRefreshSubscription === \"function\" ? options.onRefreshSubscription : null;\n const onCancelSubscription =\n typeof options.onCancelSubscription === \"function\" ? options.onCancelSubscription : null;\n\n if (onCheckoutPackage) {\n for (const button of buttons) {\n if (button.disabled) continue;\n const handler = () => {\n onCheckoutPackage({\n packageId: readString(button.dataset.packageId),\n packageSlug: readString(button.dataset.packageSlug),\n });\n };\n button.addEventListener(\"click\", handler);\n listeners.push(() => button.removeEventListener(\"click\", handler));\n }\n }\n\n if (onRefreshSubscription && refreshButton && !refreshButton.disabled) {\n const handler = () => {\n onRefreshSubscription();\n };\n refreshButton.addEventListener(\"click\", handler);\n listeners.push(() => refreshButton.removeEventListener(\"click\", handler));\n }\n\n if (onCancelSubscription && cancelButton && !cancelButton.disabled) {\n const handler = () => {\n onCancelSubscription();\n };\n cancelButton.addEventListener(\"click\", handler);\n listeners.push(() => cancelButton.removeEventListener(\"click\", handler));\n }\n\n return {\n destroy() {\n for (const cleanup of listeners) cleanup();\n root.innerHTML = \"\";\n },\n };\n}\n\nexport function buildMonetizationHistorySurfaceHtml(\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n } = {},\n): string {\n const record = readRecord(input) ?? {};\n const history = readRecord(record.history) ?? record;\n const locale = readString(options.locale) || \"en\";\n const includeStyles = options.includeStyles !== false;\n const showHeader = options.showHeader !== false;\n const surfaceCopy = buildXmsSurfaceCopy({ locale });\n const historySections = buildMonetizationHistorySections({ history, locale });\n const balanceSummaryHtml = buildMonetizationHistoryBalanceSummaryHtml({ history, locale });\n const timeline = readHistoryBucket(history, \"timeline\");\n const hasHistory = Boolean(timeline.total || historySections.length || balanceSummaryHtml);\n\n return `\n ${includeStyles ? `<style>${monetizationPlansSurfaceStyles}</style>` : \"\"}\n <section class=\"xapps-xms-plans\">\n ${\n showHeader\n ? `<div class=\"xapps-xms-plans__header\">\n <h3 class=\"xapps-xms-plans__title\">${escapeHtml(\n readString(options.title) || surfaceCopy.historyTitle,\n )}</h3>\n ${\n readString(options.subtitle)\n ? `<div class=\"xapps-xms-plans__subtitle\">${escapeHtml(\n readString(options.subtitle),\n )}</div>`\n : \"\"\n }\n </div>`\n : \"\"\n }\n ${readString(options.notice) ? `<div class=\"xapps-xms-plans__notice\">${escapeHtml(readString(options.notice))}</div>` : \"\"}\n ${readString(options.error) ? `<div class=\"xapps-xms-plans__error\">${escapeHtml(readString(options.error))}</div>` : \"\"}\n ${balanceSummaryHtml}\n ${\n timeline.total\n ? `<section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(surfaceCopy.recentTimelineTitle)}</h4>\n <div class=\"xapps-xms-plans__subtitle\">${escapeHtml(surfaceCopy.recentTimelineSubtitle)}</div>\n ${buildTimelineHtml({\n total: timeline.total,\n items: timeline.items,\n locale,\n })}\n </section>`\n : \"\"\n }\n ${\n historySections.length\n ? `<section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(surfaceCopy.historyAuditTitle)}</h4>\n <div class=\"xapps-xms-plans__subtitle\">${escapeHtml(surfaceCopy.historyAuditSubtitle)}</div>\n <div class=\"xapps-xms-plans__history-grid\">${historySections.join(\"\")}</div>\n </section>`\n : \"\"\n }\n ${\n !hasHistory\n ? `<section class=\"xapps-xms-plans__card\">\n <div class=\"xapps-xms-plans__empty\">${escapeHtml(surfaceCopy.noHistoryAvailableLabel)}</div>\n </section>`\n : \"\"\n }\n </section>\n `;\n}\n\nexport function renderMonetizationHistorySurface(\n root: Element,\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n } = {},\n): { destroy: () => void } {\n root.innerHTML = buildMonetizationHistorySurfaceHtml(input, options);\n return {\n destroy() {\n root.innerHTML = \"\";\n },\n };\n}\n\nexport function buildMonetizationPackagePresentation(input: unknown): {\n fitLabel: string;\n summary: string;\n signals: string[];\n moneyLabel: string;\n offeringLabel: string;\n placementLabel: string;\n offeringSummary: string;\n} {\n const item =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const copy = buildXmsPackageCopy(item.locale);\n const packageKind = readString(item.packageKind);\n const packageSlug = readLower(item.packageSlug);\n const metadata =\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {};\n const credits = readPackageCredits(item);\n const virtualCurrency =\n readVirtualCurrencyDefinition(item.virtualCurrency) ??\n readVirtualCurrencyDefinition(\n item.productMetadata && typeof item.productMetadata === \"object\"\n ? (item.productMetadata as Record<string, unknown>).virtual_currency\n : null,\n );\n const moneyLabel = normalizeMoneyLabel(item);\n const offeringPresentation = buildMonetizationOfferingPresentation(item);\n let fitLabel = copy.generalUpgradeFitLabel;\n let summary = copy.generalUpgradeSummary;\n\n if (packageKind === \"one_time_unlock\") {\n fitLabel = copy.durableUnlockFitLabel;\n summary = copy.durableUnlockSummary;\n } else if (packageKind === \"subscription\") {\n fitLabel = copy.recurringMembershipFitLabel;\n summary = copy.recurringMembershipSummary;\n } else if (packageKind === \"credit_pack\") {\n const unitLabel = normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n );\n fitLabel = copy.creditTopUpFitLabel;\n summary = copy.creditPackFitSummary(unitLabel || \"credits\");\n } else if (packageSlug.includes(\"hybrid\")) {\n const unitLabel = normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n );\n fitLabel = copy.hybridUpgradeFitLabel;\n summary = copy.hybridPackFitSummary(unitLabel || \"credits\");\n }\n\n const signals: string[] = [];\n if (readString(metadata.badge)) {\n signals.push(readString(metadata.badge));\n }\n if (credits > 0 && virtualCurrency) {\n signals.push(\n formatVirtualCurrencyAmountLabel({\n amount: String(credits),\n virtualCurrency,\n fallbackUnit: \"credits\",\n }),\n );\n } else if (credits > 0) {\n signals.push(`${credits} credits`);\n } else if (virtualCurrency) {\n signals.push(\n copy.packageCurrencySignalLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n ),\n );\n }\n if (readString(item.billingPeriod)) {\n signals.push(copy.billedSignalLabel(readString(item.billingPeriod)));\n }\n if (offeringPresentation.offeringLabel) {\n signals.push(offeringPresentation.offeringLabel);\n }\n\n return {\n fitLabel,\n summary,\n signals,\n moneyLabel,\n offeringLabel: offeringPresentation.offeringLabel,\n placementLabel: offeringPresentation.placementLabel,\n offeringSummary: offeringPresentation.summary,\n };\n}\n\nexport function resolveXmsModeForPackage(item: unknown): {\n key: string;\n label: string;\n description: string;\n} {\n const record = item && typeof item === \"object\" ? (item as Record<string, unknown>) : {};\n const productFamily = readLower(record.productFamily);\n const packageKind = readLower(record.packageKind);\n\n if (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") {\n return {\n key: \"one_time_purchase\",\n label: \"one_time_purchase\",\n description: \"Durable entitlement/unlock after a single successful purchase.\",\n };\n }\n\n if (productFamily === \"subscription_plan\" || packageKind === \"subscription\") {\n return {\n key: \"subscription\",\n label: \"subscription\",\n description: \"Recurring contract with current subscription and access state.\",\n };\n }\n\n if (productFamily === \"credit_pack\" || packageKind === \"credit_pack\") {\n return {\n key: \"credit_wallet\",\n label: \"credit_wallet\",\n description: \"Wallet top-up flow that issues credits and ledger entries.\",\n };\n }\n\n if (productFamily === \"hybrid_plan\") {\n return {\n key: \"hybrid_composition\",\n label: \"hybrid_composition\",\n description: \"Composition of subscription/access and bundled credit behavior.\",\n };\n }\n\n return {\n key: \"unknown\",\n label: \"unknown\",\n description: \"Package shape is not yet mapped to an explicit XMS mode.\",\n };\n}\n\nfunction collectPackageOwnershipCandidates(item: Record<string, unknown>): string[] {\n const metadata =\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {};\n const productMetadata =\n item.productMetadata &&\n typeof item.productMetadata === \"object\" &&\n !Array.isArray(item.productMetadata)\n ? (item.productMetadata as Record<string, unknown>)\n : {};\n return [\n readLower(item.productSlug),\n readLower(item.packageSlug),\n readLower(metadata.tier),\n readLower(metadata.access_tier),\n readLower(productMetadata.tier),\n readLower(productMetadata.access_tier),\n ].filter(Boolean);\n}\n\nfunction collectCurrentSubscriptionCandidates(\n currentSubscription: Record<string, unknown>,\n): string[] {\n const metadata =\n currentSubscription.metadata && typeof currentSubscription.metadata === \"object\"\n ? (currentSubscription.metadata as Record<string, unknown>)\n : currentSubscription.metadata_jsonb && typeof currentSubscription.metadata_jsonb === \"object\"\n ? (currentSubscription.metadata_jsonb as Record<string, unknown>)\n : {};\n return [\n readLower(currentSubscription.product_slug),\n readLower(currentSubscription.tier),\n readLower(metadata.product_slug),\n readLower(metadata.tier),\n readLower(metadata.access_tier),\n ].filter(Boolean);\n}\n\nfunction hasActiveRecurringSubscription(currentSubscription: unknown): boolean {\n const record =\n currentSubscription &&\n typeof currentSubscription === \"object\" &&\n !Array.isArray(currentSubscription)\n ? (currentSubscription as Record<string, unknown>)\n : {};\n const status = readLower(record.status);\n if (!status || status === \"expired\") return false;\n const expiredAt = readString(record.expired_at);\n if (!expiredAt) return true;\n const expiresAtMs = Date.parse(expiredAt);\n return Number.isNaN(expiresAtMs) || expiresAtMs > Date.now();\n}\n\nfunction hasCurrentOwnedEntitlement(entitlement: Record<string, unknown>): boolean {\n const status = readLower(entitlement.status);\n if (status !== \"active\" && status !== \"grace_period\") return false;\n const expiresAt = readString(entitlement.expires_at);\n if (!expiresAt) return true;\n const expiresAtMs = Date.parse(expiresAt);\n return Number.isNaN(expiresAtMs) || expiresAtMs > Date.now();\n}\n\nfunction readProjectedPurchasePolicy(value: unknown): {\n canPurchase: boolean;\n status: \"available\" | \"current_recurring_plan\" | \"owned_additive_unlock\";\n transitionKind:\n | \"start_recurring\"\n | \"replace_recurring\"\n | \"buy_additive_unlock\"\n | \"buy_credit_pack\"\n | \"activate_hybrid\"\n | \"none\";\n reason: string | null;\n} | null {\n const record =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n if (!record) return null;\n const status = readLower(record.status);\n const transitionKind = readLower(record.transition_kind ?? record.transitionKind);\n if (!status || !transitionKind) return null;\n return {\n canPurchase: readBoolean(record.can_purchase ?? record.canPurchase, true),\n status:\n status === \"current_recurring_plan\" || status === \"owned_additive_unlock\"\n ? status\n : \"available\",\n transitionKind:\n transitionKind === \"start_recurring\" ||\n transitionKind === \"replace_recurring\" ||\n transitionKind === \"buy_additive_unlock\" ||\n transitionKind === \"buy_credit_pack\" ||\n transitionKind === \"activate_hybrid\"\n ? transitionKind\n : \"none\",\n reason: readString(record.reason) || null,\n };\n}\n\nexport function resolveMonetizationPackagePurchasePolicy(input: {\n item: unknown;\n currentSubscription?: unknown;\n additiveEntitlements?: unknown;\n accessProjection?: unknown;\n}): {\n canPurchase: boolean;\n status: \"available\" | \"current_recurring_plan\" | \"owned_additive_unlock\";\n transitionKind:\n | \"start_recurring\"\n | \"replace_recurring\"\n | \"buy_additive_unlock\"\n | \"buy_credit_pack\"\n | \"activate_hybrid\"\n | \"none\";\n reason: string | null;\n} {\n const item =\n input.item && typeof input.item === \"object\" ? (input.item as Record<string, unknown>) : {};\n const projectedPolicy = readProjectedPurchasePolicy(item.purchasePolicy ?? item.purchase_policy);\n if (projectedPolicy) return projectedPolicy;\n const currentSubscription =\n input.currentSubscription &&\n typeof input.currentSubscription === \"object\" &&\n !Array.isArray(input.currentSubscription)\n ? (input.currentSubscription as Record<string, unknown>)\n : {};\n const additiveEntitlements = Array.isArray(input.additiveEntitlements)\n ? (input.additiveEntitlements as unknown[])\n : [];\n const productFamily = readLower(item.productFamily);\n const packageKind = readLower(item.packageKind);\n const productId = readLower(item.productId);\n const currentSubscriptionProductId = readLower(currentSubscription.product_id);\n const includedCredits = readPackageCredits(item);\n const ownershipCandidates = new Set(collectPackageOwnershipCandidates(item));\n const currentSubscriptionCandidates = new Set(\n collectCurrentSubscriptionCandidates(currentSubscription),\n );\n const ownedAdditiveUnlock = additiveEntitlements.some((entry) => {\n const entitlement =\n entry && typeof entry === \"object\" && !Array.isArray(entry)\n ? (entry as Record<string, unknown>)\n : {};\n if (!hasCurrentOwnedEntitlement(entitlement)) return false;\n const entitlementProductId = readLower(entitlement.product_id);\n if (productId && entitlementProductId && productId === entitlementProductId) return true;\n const candidateValues = [\n readLower(entitlement.product_slug),\n readLower(entitlement.tier),\n ].filter(Boolean);\n return candidateValues.some((value) => ownershipCandidates.has(value));\n });\n\n if (\n hasActiveRecurringSubscription(currentSubscription) &&\n productId &&\n currentSubscriptionProductId &&\n productId === currentSubscriptionProductId\n ) {\n return {\n canPurchase: false,\n status: \"current_recurring_plan\",\n transitionKind: \"none\",\n reason: \"current_recurring_plan\",\n };\n }\n\n if (\n hasActiveRecurringSubscription(currentSubscription) &&\n Array.from(ownershipCandidates).some((value) => currentSubscriptionCandidates.has(value))\n ) {\n return {\n canPurchase: false,\n status: \"current_recurring_plan\",\n transitionKind: \"none\",\n reason: \"current_recurring_plan\",\n };\n }\n\n const consumableOneTimeUnlock =\n (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") &&\n includedCredits > 0;\n\n if (consumableOneTimeUnlock) {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"buy_additive_unlock\",\n reason: null,\n };\n }\n\n if (\n (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") &&\n ownedAdditiveUnlock\n ) {\n return {\n canPurchase: false,\n status: \"owned_additive_unlock\",\n transitionKind: \"none\",\n reason: \"owned_additive_unlock\",\n };\n }\n\n if (productFamily === \"credit_pack\" || packageKind === \"credit_pack\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"buy_credit_pack\",\n reason: null,\n };\n }\n\n if (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"buy_additive_unlock\",\n reason: null,\n };\n }\n\n if (productFamily === \"subscription_plan\" || packageKind === \"subscription\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: hasActiveRecurringSubscription(currentSubscription)\n ? \"replace_recurring\"\n : \"start_recurring\",\n reason: null,\n };\n }\n\n if (productFamily === \"hybrid_plan\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"activate_hybrid\",\n reason: null,\n };\n }\n\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"none\",\n reason: null,\n };\n}\n\nfunction normalizeMoneyLabel(item: Record<string, unknown>) {\n const amount = readString(item.amount);\n const currency = readString(item.currency);\n const billingPeriod = readString(item.billingPeriod);\n if (!amount && !currency) {\n return buildXmsSurfaceCopy({ locale: item.locale }).priceUnavailableLabel;\n }\n return `${amount} ${currency}${billingPeriod ? ` / ${billingPeriod}` : \"\"}`.trim();\n}\n\nfunction packageCredits(item: Record<string, unknown>) {\n return readPackageCredits(item);\n}\n\nfunction scorePackageForFeature(\n feature: Record<string, unknown>,\n item: Record<string, unknown>,\n locale?: unknown,\n) {\n const copy = buildXmsPackageCopy(locale);\n const requirements =\n feature.requirements && typeof feature.requirements === \"object\"\n ? (feature.requirements as Record<string, unknown>)\n : {};\n const packageKind = readString(item.packageKind);\n const packageSlug = readString(item.packageSlug);\n const offeringSlug = readString(item.offeringSlug);\n const credits = packageCredits(item);\n const virtualCurrency = readPackageVirtualCurrency(item);\n const unitLabel =\n normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n ) || \"credits\";\n let score = 0;\n const reasons: string[] = [];\n\n if (requirements.currentAccess) {\n if (packageKind === \"one_time_unlock\") {\n score += 7;\n reasons.push(copy.featureDurableUnlockReason);\n } else if (packageKind === \"subscription\") {\n score += 6;\n reasons.push(copy.featureRecurringAccessReason);\n } else if (packageSlug.includes(\"hybrid\")) {\n score += 5;\n reasons.push(copy.featureHybridAccessReason);\n }\n }\n\n if (requirements.subscription) {\n if (packageKind === \"subscription\") {\n score += 8;\n reasons.push(copy.featureSubscriptionDirectReason);\n } else if (packageSlug.includes(\"hybrid\")) {\n score += 5;\n reasons.push(copy.featureHybridSubscriptionReason);\n }\n }\n\n const requiredCredits = Number(requirements.credits || 0);\n if (requiredCredits) {\n if (credits >= requiredCredits) {\n score += 8;\n reasons.push(\n copy.creditRequirementCoveredLabel(formatNamedUnitAmount(requiredCredits, unitLabel)),\n );\n } else if (credits > 0) {\n score += 4;\n reasons.push(copy.creditRequirementAddedLabel(formatNamedUnitAmount(credits, unitLabel)));\n } else if (packageSlug.includes(\"hybrid\")) {\n score += 3;\n reasons.push(copy.hybridCreditsSupportLabel(unitLabel));\n }\n }\n\n if (packageSlug.includes(\"default_paywall\") || offeringSlug.includes(\"paywall\")) {\n score += 1;\n }\n\n return {\n score,\n reasons,\n credits,\n moneyLabel: normalizeMoneyLabel(item),\n };\n}\n\nexport function buildFeaturePaywall(input: {\n feature: unknown;\n packages: unknown;\n selectedPackage?: unknown;\n locale?: unknown;\n}): {\n activePackage: Record<string, unknown> | null;\n candidatePackages: Array<Record<string, unknown>>;\n recommendedPackages: Array<Record<string, unknown>>;\n rankedPackages: Array<Record<string, unknown>>;\n allPackages: Array<Record<string, unknown>>;\n} {\n const feature =\n input.feature && typeof input.feature === \"object\"\n ? (input.feature as Record<string, unknown>)\n : {};\n const selectedPackage =\n input.selectedPackage && typeof input.selectedPackage === \"object\"\n ? (input.selectedPackage as Record<string, unknown>)\n : null;\n const ranked: Array<Record<string, unknown>> = (\n Array.isArray(input.packages) ? input.packages : []\n )\n .map((item) => {\n const record =\n item && typeof item === \"object\"\n ? (item as Record<string, unknown>)\n : ({} as Record<string, unknown>);\n const scored = scorePackageForFeature(feature, record, input.locale);\n return {\n ...record,\n recommendationScore: scored.score,\n candidateScore: scored.score,\n recommendationReasons: scored.reasons,\n candidateReasons: scored.reasons,\n credits: scored.credits,\n moneyLabel: scored.moneyLabel,\n };\n })\n .sort((left, right) => {\n if (Number(right.recommendationScore) !== Number(left.recommendationScore)) {\n return Number(right.recommendationScore) - Number(left.recommendationScore);\n }\n return readString((left as Record<string, unknown>).packageTitle).localeCompare(\n readString((right as Record<string, unknown>).packageTitle),\n );\n });\n\n const recommended = ranked.filter((item) => Number(item.recommendationScore) > 0);\n const selectedPackageId = readString(selectedPackage?.packageId);\n const activePackage =\n recommended.find(\n (item) => readString((item as Record<string, unknown>).packageId) === selectedPackageId,\n ) ||\n recommended[0] ||\n ranked.find(\n (item) => readString((item as Record<string, unknown>).packageId) === selectedPackageId,\n ) ||\n ranked[0] ||\n null;\n\n return {\n activePackage,\n candidatePackages: recommended.slice(0, 3),\n recommendedPackages: recommended.slice(0, 3),\n rankedPackages: ranked,\n allPackages: ranked,\n };\n}\n\nfunction readFeatureRequirements(feature: Record<string, unknown>) {\n return feature.requirements && typeof feature.requirements === \"object\"\n ? (feature.requirements as Record<string, unknown>)\n : {};\n}\n\nfunction buildFeatureGapBadges(input: {\n requirements: Record<string, unknown>;\n snapshotSummary: {\n accessCoverage?: { available?: boolean | null };\n wallet?: { creditsRemaining?: string | null; virtualCurrencyLabel?: string | null };\n };\n activePackage?: unknown;\n currentSubscriptionStatus?: unknown;\n locale?: unknown;\n}): string[] {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const badges: string[] = [];\n const creditsRemaining = readNumber(input.snapshotSummary?.wallet?.creditsRemaining);\n const unitLabel = readFeatureCurrencyUnitLabel({\n snapshotSummary: input.snapshotSummary,\n activePackage: input.activePackage,\n });\n if (input.requirements.currentAccess && !input.snapshotSummary?.accessCoverage?.available) {\n badges.push(copy.featureCurrentAccessMissingBadge);\n }\n const hasSubscription = Boolean(readString(input.currentSubscriptionStatus));\n if (input.requirements.subscription && !hasSubscription) {\n badges.push(copy.featureMembershipNotActiveBadge);\n }\n const requiredCredits = readNumber(input.requirements.credits);\n if (requiredCredits > 0 && creditsRemaining < requiredCredits) {\n badges.push(\n copy.featureGapShortLabel(\n formatNamedUnitAmount(requiredCredits - creditsRemaining, unitLabel),\n ),\n );\n }\n return badges;\n}\n\nfunction buildFeatureNeedLabel(\n requirements: Record<string, unknown>,\n unitLabel: string,\n locale?: unknown,\n): string {\n const copy = buildXmsSurfaceCopy({ locale });\n const needsAccess = Boolean(requirements.currentAccess);\n const needsSubscription = Boolean(requirements.subscription);\n const needsCredits = readNumber(requirements.credits) > 0;\n if (needsAccess && needsCredits) return copy.featureNeedMixedAccessLabel;\n if (needsSubscription && needsCredits)\n return copy.featureNeedMembershipAndCreditsLabel(unitLabel);\n if (needsSubscription) return copy.featureNeedMembershipLabel;\n if (needsCredits) return copy.featureNeedCreditsLabel(unitLabel);\n if (needsAccess) return copy.featureNeedAccessLabel;\n return copy.featureLockedLabel;\n}\n\nfunction buildFeaturePaywallOpenLabel(\n requirements: Record<string, unknown>,\n unitLabel: string,\n locale?: unknown,\n): string {\n const copy = buildXmsSurfaceCopy({ locale });\n const needsAccess = Boolean(requirements.currentAccess);\n const needsSubscription = Boolean(requirements.subscription);\n const needsCredits = readNumber(requirements.credits) > 0;\n if (needsAccess && needsCredits) return copy.featureViewHybridOptionsLabel;\n if (needsSubscription && needsCredits) return copy.featureViewMembershipOptionsLabel;\n if (needsSubscription) return copy.featureViewMembershipOptionsLabel;\n if (needsCredits) return copy.featureViewCreditOptionsLabel(unitLabel);\n if (needsAccess) return copy.featureViewUnlockOptionsLabel;\n return copy.featureOpenPaywallLabel;\n}\n\nfunction buildFeatureCheckoutLabel(\n activePackage: Record<string, unknown> | null,\n locale?: unknown,\n): string {\n const copy = buildXmsSurfaceCopy({ locale });\n const packageKind = readString(activePackage?.packageKind);\n if (packageKind === \"one_time_unlock\") return copy.featureUnlockCheckoutLabel;\n if (packageKind === \"subscription\") return copy.featureStartMembershipCheckoutLabel;\n if (packageKind === \"credit_pack\") {\n const unitLabel = readFeatureCurrencyUnitLabel({ activePackage });\n return copy.featureBuyCreditsCheckoutLabel(unitLabel);\n }\n if (readString(activePackage?.packageSlug).includes(\"hybrid\")) {\n return copy.featureStartHybridCheckoutLabel;\n }\n return copy.featureCreatePaymentSessionLabel;\n}\n\nexport function buildFeaturePaywallCopyModel(input: {\n feature: unknown;\n snapshotSummary: unknown;\n currentSubscriptionStatus?: unknown;\n activePackage?: unknown;\n assetMixLabel?: unknown;\n locale?: unknown;\n}): {\n summary: string;\n missingLines: string[];\n candidateLead: string;\n recommendationLead: string;\n ctaLabel: string;\n openPaywallLabel: string;\n activePackageLabel: string;\n statusLabel: string;\n assetMixLabel: string;\n coverageLabel: string;\n subscriptionLabel: string;\n creditsLabel: string;\n gapBadges: string[];\n} {\n const feature =\n input.feature && typeof input.feature === \"object\"\n ? (input.feature as Record<string, unknown>)\n : {};\n const snapshotSummary =\n input.snapshotSummary && typeof input.snapshotSummary === \"object\"\n ? (input.snapshotSummary as Record<string, any>)\n : {};\n const requirements = readFeatureRequirements(feature);\n const creditsRemaining = readNumber(snapshotSummary?.wallet?.creditsRemaining);\n const requiredCredits = readNumber(requirements.credits);\n const hasCurrentAccess = Boolean(snapshotSummary?.accessCoverage?.available);\n const hasSubscription = Boolean(readString(input.currentSubscriptionStatus));\n const activePackage =\n input.activePackage && typeof input.activePackage === \"object\"\n ? (input.activePackage as Record<string, unknown>)\n : null;\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const unitLabel = readFeatureCurrencyUnitLabel({\n snapshotSummary,\n activePackage,\n });\n\n const missingLines: string[] = [];\n if (requirements.currentAccess && !hasCurrentAccess) {\n missingLines.push(copy.featureCurrentAccessMissingLabel);\n }\n if (requirements.subscription && !hasSubscription) {\n missingLines.push(copy.featureSubscriptionMissingLabel);\n }\n if (requiredCredits > 0 && creditsRemaining < requiredCredits) {\n missingLines.push(\n copy.featureCreditsMissingLabel(\n formatNamedUnitAmount(requiredCredits, unitLabel),\n formatNamedUnitAmount(creditsRemaining, unitLabel),\n ),\n );\n }\n\n let summary = copy.featureBlockedSummary(readString(feature.title) || \"Feature\");\n if (!missingLines.length) {\n summary = copy.featureReadySummary(readString(feature.title) || \"Feature\");\n } else if (missingLines.length === 1) {\n summary = missingLines[0];\n } else {\n summary = `${missingLines[0]} ${missingLines[1]}`;\n }\n\n const candidateLead = activePackage\n ? copy.featureCandidateLead(readString(activePackage.packageTitle))\n : copy.featureCandidateFallbackLead;\n\n return {\n summary,\n missingLines,\n candidateLead,\n recommendationLead: candidateLead,\n ctaLabel: buildFeatureCheckoutLabel(activePackage, input.locale),\n openPaywallLabel: buildFeaturePaywallOpenLabel(requirements, unitLabel, input.locale),\n activePackageLabel: activePackage ? readString(activePackage.packageTitle) : \"\",\n statusLabel: missingLines.length\n ? buildFeatureNeedLabel(requirements, unitLabel, input.locale)\n : \"ready\",\n assetMixLabel: readString(input.assetMixLabel) || \"unknown\",\n coverageLabel: formatStateLabel(\n snapshotSummary?.accessCoverage?.coverageLabel,\n buildXmsSurfaceCopy({ locale: input.locale }).unavailableLabel,\n ),\n subscriptionLabel: formatStateLabel(input.currentSubscriptionStatus, \"inactive\"),\n creditsLabel: formatNamedUnitAmount(creditsRemaining, unitLabel),\n gapBadges: buildFeatureGapBadges({\n requirements,\n snapshotSummary: snapshotSummary as any,\n activePackage,\n currentSubscriptionStatus: input.currentSubscriptionStatus,\n locale: input.locale,\n }),\n };\n}\n\nexport function summarizeXappMonetizationSnapshot(input: unknown): {\n accessCoverage: {\n available: boolean;\n coverageLabel: string;\n accessStateLabel: string;\n tierLabel: string;\n sourceRefLabel: string;\n };\n currentSubscription: {\n present: boolean;\n statusLabel: string;\n tierLabel: string;\n coverageLabel: string;\n coverageReasonLabel: string;\n renewsAt: string | null;\n expiresAt: string | null;\n paymentSessionIdLabel: string;\n };\n wallet: {\n creditsRemaining: string;\n virtualCurrencyLabel: string;\n balanceStateLabel: string;\n currentAccessLabel: string;\n };\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const accessProjection =\n record.access_projection &&\n typeof record.access_projection === \"object\" &&\n !Array.isArray(record.access_projection)\n ? (record.access_projection as Record<string, unknown>)\n : null;\n const currentSubscription =\n record.current_subscription &&\n typeof record.current_subscription === \"object\" &&\n !Array.isArray(record.current_subscription)\n ? (record.current_subscription as Record<string, unknown>)\n : null;\n const lifecycle = buildXmsSubscriptionLifecycleSummary({ currentSubscription });\n\n return {\n accessCoverage: {\n available: hasEffectiveCoverage({ accessProjection, currentSubscription }),\n coverageLabel: formatCoverageLabel({ accessProjection, currentSubscription }),\n accessStateLabel: formatStateLabel(accessProjection?.entitlement_state, \"inactive\"),\n tierLabel: formatStateLabel(accessProjection?.tier),\n sourceRefLabel: formatStateLabel(accessProjection?.source_ref),\n },\n currentSubscription: {\n present: lifecycle.present,\n statusLabel: lifecycle.statusLabel || formatStateLabel(currentSubscription?.status),\n tierLabel: formatStateLabel(currentSubscription?.tier),\n coverageLabel: lifecycle.coverageLabel || buildXmsSurfaceCopy().unknownLabel,\n coverageReasonLabel: lifecycle.reasonLabel || buildXmsSurfaceCopy().noOverdueRestrictionLabel,\n renewsAt: lifecycle.renewsAt,\n expiresAt: lifecycle.expiresAt || lifecycle.currentPeriodEndsAt,\n paymentSessionIdLabel: formatStateLabel(currentSubscription?.payment_session_id),\n },\n wallet: {\n creditsRemaining: readString(accessProjection?.credits_remaining) || \"0\",\n virtualCurrencyLabel: formatVirtualCurrencyLabel(accessProjection?.virtual_currency, {\n includeCode: true,\n }),\n balanceStateLabel: formatStateLabel(accessProjection?.balance_state, \"unknown\"),\n currentAccessLabel: hasEffectiveCoverage({ accessProjection, currentSubscription })\n ? buildXmsSurfaceCopy().yesLabel\n : buildXmsSurfaceCopy().noLabel,\n },\n };\n}\n", "import {\n summarizeVirtualCurrencyBalances,\n summarizeXappMonetizationSnapshot,\n} from \"@xapps-platform/browser-host/xms\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport type { CatalogXappDetail, InstallationInfo } from \"../types\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype MonetizationCard = {\n xappId: string;\n installationId?: string;\n title: string;\n subtitle: string;\n detailHref: { pathname: string; search: string };\n plansHref: { pathname: string; search: string };\n historyHref: { pathname: string; search: string };\n accessLabel: string;\n tierLabel: string;\n sourceLabel: string;\n subscriptionStatus: string;\n subscriptionCoverage: string;\n renewsAt: string;\n virtualCurrencyLabel: string;\n creditsRemaining: string;\n balanceState: string;\n balanceSummary: string[];\n hasSubscription: boolean;\n hasNamedCurrency: boolean;\n hasBalance: boolean;\n};\n\nfunction formatVirtualCurrencyLabel(input: unknown, options?: { includeCode?: boolean }): string {\n const record = asRecord(input);\n const code = readString(record.code);\n const name = readString(record.name);\n if (name && code && options?.includeCode) return `${name} (${code})`;\n return name || code || \"\";\n}\n\nfunction formatVirtualCurrencyAmount(value: unknown, virtualCurrency: unknown): string {\n const amount = readString(value);\n if (!amount) return \"\";\n const currencyLabel = formatVirtualCurrencyLabel(virtualCurrency);\n return currencyLabel ? `${amount} ${currencyLabel}` : amount;\n}\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction isMonetizationCandidate(detail: CatalogXappDetail | null | undefined): boolean {\n const record = asRecord(detail);\n const operational = asRecord(record.operational_surfaces);\n if (asRecord(operational.monetization).enabled === true) return true;\n const manifest = asRecord(record.manifest);\n if (manifest.monetization && typeof manifest.monetization === \"object\") return true;\n return (\n Array.isArray(manifest.payment_guard_definitions) &&\n manifest.payment_guard_definitions.length > 0\n );\n}\n\nfunction buildXappRoute(input: {\n xappId: string;\n token: string;\n isEmbedded: boolean;\n installationId?: string;\n}): { pathname: string; search: string } {\n const params = new URLSearchParams();\n if (input.token) params.set(\"token\", input.token);\n if (input.installationId) params.set(\"installationId\", input.installationId);\n const suffix = params.toString();\n return {\n pathname: input.isEmbedded\n ? `/xapps/${encodeURIComponent(input.xappId)}`\n : `/marketplace/xapps/${encodeURIComponent(input.xappId)}`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nfunction buildPlansRoute(input: {\n xappId: string;\n token: string;\n isEmbedded: boolean;\n installationId?: string;\n view?: \"plans\" | \"history\";\n}): { pathname: string; search: string } {\n const params = new URLSearchParams();\n if (input.token) params.set(\"token\", input.token);\n if (input.installationId) params.set(\"installationId\", input.installationId);\n if (input.view === \"history\") params.set(\"view\", \"history\");\n const suffix = params.toString();\n return {\n pathname: input.isEmbedded\n ? `/xapps/${encodeURIComponent(input.xappId)}/plans`\n : `/marketplace/xapps/${encodeURIComponent(input.xappId)}/plans`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nexport function MonetizationPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const showPast = query.get(\"showPast\") === \"1\";\n const subjectResolutionPending = env?.subjectResolved === false;\n const [items, setItems] = useState<MonetizationCard[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n const visibilityRefreshRef = useRef<number>(0);\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n const overview = useMemo(\n () => ({\n apps: items.length,\n subscriptions: items.filter((item) => item.hasSubscription).length,\n namedCurrencies: items.filter((item) => item.hasNamedCurrency).length,\n balances: items.filter((item) => item.hasBalance).length,\n }),\n [items],\n );\n\n const refresh = useCallback(async () => {\n if (!client.getMyXappMonetization) {\n setError(\n t(\n \"activity.unavailable_monetization_title\",\n undefined,\n \"Plans and balances are unavailable in this host.\",\n ),\n );\n setItems([]);\n setBusy(false);\n return;\n }\n if (!host.subjectId && subjectResolutionPending) {\n setError(null);\n setItems([]);\n setBusy(true);\n return;\n }\n\n if (!host.subjectId) {\n setError(\"Subject required\");\n setItems([]);\n setBusy(false);\n return;\n }\n\n const installations = host.getInstallationsByXappId();\n const entries: InstallationInfo[] = Object.values(installations || {});\n const overviewResponse =\n !xappIdFilter && typeof client.listMyMonetizedXapps === \"function\"\n ? await client.listMyMonetizedXapps({\n currentOnly: !showPast,\n })\n : null;\n const overviewItems = Array.isArray(asRecord(asRecord(overviewResponse).overview).items)\n ? (asRecord(asRecord(overviewResponse).overview).items as Array<Record<string, unknown>>)\n : [];\n const candidates = xappIdFilter\n ? [\n {\n xappId: xappIdFilter,\n installationId:\n installationIdFilter ||\n entries.find((item) => item.xappId === xappIdFilter)?.installationId ||\n undefined,\n },\n ]\n : overviewItems.length > 0\n ? overviewItems.map((item) => {\n const xappId = readString(item.xapp_id);\n return {\n xappId,\n installationId:\n entries.find((entry) => entry.xappId === xappId)?.installationId || undefined,\n };\n })\n : entries.map((item) => ({\n xappId: item.xappId,\n installationId: item.installationId,\n }));\n const deduped = Array.from(\n new Map(candidates.map((item) => [item.xappId, item])).values(),\n ).filter((item) => Boolean(item.xappId));\n\n setError(null);\n setBusy(true);\n try {\n const next = await Promise.all(\n deduped.map(async (item): Promise<MonetizationCard | null> => {\n const [detail, state, history] = await Promise.all([\n client.getCatalogXapp(item.xappId, {\n installationId: item.installationId || null,\n }),\n client.getMyXappMonetization!(item.xappId, {\n installationId: item.installationId || null,\n locale,\n }),\n typeof client.getMyXappMonetizationHistory === \"function\"\n ? client.getMyXappMonetizationHistory(item.xappId, {\n installationId: item.installationId || null,\n limit: 20,\n })\n : Promise.resolve(null),\n ]);\n if (!xappIdFilter && !isMonetizationCandidate(detail)) return null;\n const summary = summarizeXappMonetizationSnapshot(state);\n const balanceSummary = summarizeVirtualCurrencyBalances(history).balances.map(\n (entry) => entry.amountLabel,\n );\n const detailRecord = asRecord(detail);\n const accessProjection = asRecord(asRecord(state).access_projection);\n const virtualCurrencyLabel = formatVirtualCurrencyLabel(\n accessProjection.virtual_currency,\n {\n includeCode: true,\n },\n );\n const creditsRemainingLabel =\n formatVirtualCurrencyAmount(\n accessProjection.credits_remaining,\n accessProjection.virtual_currency,\n ) ||\n summary.wallet.creditsRemaining ||\n \"0\";\n const title =\n resolveMarketplaceText(asRecord(detailRecord.manifest).title as any, locale) ||\n readFirstString(asRecord(detailRecord.xapp).name) ||\n item.xappId;\n const subtitle =\n resolveMarketplaceText(asRecord(detailRecord.manifest).summary as any, locale) ||\n resolveMarketplaceText(asRecord(detailRecord.manifest).description as any, locale) ||\n t(\n \"activity.monetization_card_subtitle\",\n undefined,\n \"Access, plans, and balances for this app.\",\n );\n return {\n xappId: item.xappId,\n installationId: item.installationId,\n title,\n subtitle,\n detailHref: buildXappRoute({\n xappId: item.xappId,\n token,\n isEmbedded,\n installationId: item.installationId,\n }),\n plansHref: buildPlansRoute({\n xappId: item.xappId,\n token,\n isEmbedded,\n installationId: item.installationId,\n }),\n historyHref: buildPlansRoute({\n xappId: item.xappId,\n token,\n isEmbedded,\n installationId: item.installationId,\n view: \"history\",\n }),\n accessLabel:\n summary.accessCoverage.coverageLabel ||\n t(\"activity.monetization_unknown\", undefined, \"Unknown\"),\n tierLabel:\n summary.accessCoverage.tierLabel ||\n t(\"activity.monetization_none\", undefined, \"None\"),\n sourceLabel:\n summary.accessCoverage.sourceRefLabel ||\n t(\"activity.monetization_no_source\", undefined, \"No source\"),\n subscriptionStatus:\n summary.currentSubscription.statusLabel ||\n t(\"activity.monetization_no_subscription\", undefined, \"No subscription\"),\n subscriptionCoverage:\n summary.currentSubscription.present && summary.currentSubscription.coverageLabel\n ? summary.currentSubscription.coverageLabel\n : t(\n \"activity.monetization_no_recurring_coverage\",\n undefined,\n \"No recurring coverage\",\n ),\n renewsAt:\n summary.currentSubscription.renewsAt ||\n t(\"activity.monetization_not_scheduled\", undefined, \"Not scheduled\"),\n virtualCurrencyLabel,\n creditsRemaining: creditsRemainingLabel,\n balanceState:\n summary.wallet.balanceStateLabel ||\n t(\"activity.monetization_balance_unknown\", undefined, \"unknown\"),\n balanceSummary,\n hasSubscription: summary.currentSubscription.present,\n hasNamedCurrency: Boolean(virtualCurrencyLabel),\n hasBalance: Boolean(balanceSummary.length || creditsRemainingLabel),\n };\n }),\n );\n setItems(next.filter((item): item is MonetizationCard => Boolean(item)));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n setItems([]);\n } finally {\n setBusy(false);\n }\n }, [\n client,\n host,\n installationIdFilter,\n isEmbedded,\n locale,\n showPast,\n subjectResolutionPending,\n t,\n token,\n xappIdFilter,\n ]);\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"monetization\",\n params: {\n xappId: xappIdFilter || null,\n installationId: installationIdFilter || null,\n },\n });\n }, [host, installationIdFilter, refresh, xappIdFilter]);\n\n useEffect(() => {\n function handleVisibilityRefresh() {\n if (typeof document === \"undefined\" || document.visibilityState !== \"visible\") return;\n const now = Date.now();\n if (now - visibilityRefreshRef.current < 1500) return;\n visibilityRefreshRef.current = now;\n void refresh();\n }\n document.addEventListener(\"visibilitychange\", handleVisibilityRefresh);\n return () => {\n document.removeEventListener(\"visibilitychange\", handleVisibilityRefresh);\n };\n }, [refresh]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter), {\n installationId: installationIdFilter || null,\n });\n if (!alive) return;\n const detail = asRecord(res);\n const manifest = asRecord(detail.manifest);\n const xapp = asRecord(detail.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, installationIdFilter, locale, xappIdFilter]);\n\n const clearHref = {\n pathname: isEmbedded ? \"/monetization\" : \"/marketplace/monetization\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const togglePastHref = !xappIdFilter\n ? ({\n pathname: isEmbedded ? \"/monetization\" : \"/marketplace/monetization\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (!showPast) qs.set(\"showPast\", \"1\");\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n } as const)\n : null;\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n } as any)\n : null;\n\n return (\n <div className={`mx-catalog-container mx-monetization-page ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.monetization_title\", undefined, \"Monetization\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.monetization_title\", undefined, \"Monetization\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {togglePastHref && (\n <Link to={togglePastHref as any} className=\"mx-btn mx-btn-ghost\">\n {showPast\n ? t(\"activity.monetization_show_current_only\", undefined, \"Show current only\")\n : t(\"activity.monetization_show_past\", undefined, \"Show past apps\")}\n </Link>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"monetization\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {error === \"Subject required\" || error === \"Session token required\" ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter ? (\n <div className=\"mx-table-container mx-subtle-note-card\">\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {t(\n \"activity.showing_monetization_for_prefix\",\n undefined,\n \"Showing plans and balances for\",\n )}{\" \"}\n <span className=\"mx-subtle-note-strong\">{xappIdFilter}</span>\n </div>\n </div>\n ) : (\n <div className=\"mx-table-container mx-subtle-note-card\">\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {showPast\n ? t(\n \"activity.monetization_overview_hint_with_past\",\n undefined,\n \"Review current and past plans, subscriptions, and balances across this subject's apps.\",\n )\n : t(\n \"activity.monetization_overview_hint\",\n undefined,\n \"Review current plans, subscriptions, and balances across this subject's apps.\",\n )}\n </div>\n </div>\n )}\n\n <section className=\"mx-table-container mx-monetization-summary-card\">\n <div className=\"mx-monetization-card-body\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.monetization_title\", undefined, \"Monetization\")}\n </div>\n <div className=\"mx-record-panel-id\">\n {t(\"activity.monetization_summary_title\", undefined, \"Plans and balances\")}\n </div>\n <div className=\"mx-record-panel-subtitle\">\n {t(\n \"activity.monetization_summary_subtitle\",\n undefined,\n \"Review active plans, subscriptions, and balances before opening app details or history.\",\n )}\n </div>\n </div>\n </div>\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_apps\", undefined, \"Apps\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.apps}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_subscriptions\", undefined, \"Subscriptions\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.subscriptions}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_balances\", undefined, \"Balances\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.balances}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_currencies\", undefined, \"Named currencies\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.namedCurrencies}</div>\n </div>\n </div>\n </div>\n </section>\n\n {busy ? (\n <div className=\"mx-table-container\">\n <div className=\"mx-loading-center mx-loading-table\">\n {t(\n \"activity.loading_monetization\",\n undefined,\n \"Loading plans, balances, and recent activity...\",\n )}\n </div>\n </div>\n ) : null}\n\n {!busy && !error && items.length === 0 ? (\n <div className=\"mx-table-container\">\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u25CE</div>\n <div className=\"mx-empty-catalog-title\">\n {showPast\n ? t(\n \"activity.no_monetization_history\",\n undefined,\n \"No plan or balance history was found for this subject.\",\n )\n : t(\n \"activity.no_monetization_current\",\n undefined,\n \"No current plans or balances were found for this subject.\",\n )}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {showPast\n ? t(\n \"activity.monetization_overview_hint_with_past\",\n undefined,\n \"Review current and past plans, subscriptions, and balances across this subject's apps.\",\n )\n : t(\n \"activity.monetization_overview_hint\",\n undefined,\n \"Review current plans, subscriptions, and balances across this subject's apps.\",\n )}\n </div>\n </div>\n </div>\n ) : null}\n\n {!busy && items.length > 0 ? (\n <div className=\"mx-record-panel-stack\">\n {items.map((item) => (\n <section key={item.xappId} className=\"mx-table-container mx-monetization-activity-card\">\n <div className=\"mx-monetization-card-body\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.monetization\", undefined, \"Monetization\")}\n </div>\n <div className=\"mx-record-panel-id\">{item.title}</div>\n <div className=\"mx-record-panel-subtitle\">{item.subtitle}</div>\n <div className=\"mx-monetization-card-badges\">\n <span className=\"mx-badge mx-badge-warning\">{item.accessLabel}</span>\n <span\n className={`mx-badge ${\n item.hasSubscription ? \"mx-badge-success\" : \"mx-badge-warning\"\n }`}\n >\n {item.subscriptionStatus}\n </span>\n <span className=\"mx-tag\">\n {item.virtualCurrencyLabel ||\n t(\"activity.monetization_no_currency\", undefined, \"No named currency\")}\n </span>\n </div>\n </div>\n <div className=\"mx-record-actions mx-record-actions-monetization\">\n <div className=\"mx-action-group\">\n <Link to={item.plansHref as any} className=\"mx-btn mx-btn-primary\">\n {t(\"activity.monetization_open_plans\", undefined, \"View plans\")}\n </Link>\n <Link to={item.historyHref as any} className=\"mx-btn mx-btn-secondary\">\n {t(\"activity.monetization_open_history\", undefined, \"View history\")}\n </Link>\n </div>\n <div className=\"mx-action-group\">\n <Link to={item.detailHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.view_app_details\", undefined, \"View app details\")}\n </Link>\n {!xappIdFilter ? (\n <Link\n to={\n {\n pathname: isEmbedded ? \"/monetization\" : \"/marketplace/monetization\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n qs.set(\"xappId\", item.xappId);\n if (item.installationId)\n qs.set(\"installationId\", item.installationId);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-ghost\"\n >\n {t(\"activity.monetization_focus_xapp\", undefined, \"Only this app\")}\n </Link>\n ) : null}\n </div>\n </div>\n </div>\n\n <div className=\"mx-record-grid mx-monetization-card-primary-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_access_label\", undefined, \"Access\")}\n </div>\n <div className=\"mx-record-value is-strong\">{item.accessLabel}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_plan_label\", undefined, \"Plan\")}\n </div>\n <div className=\"mx-record-value is-strong\">{item.tierLabel}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_subscription_label\", undefined, \"Subscription\")}\n </div>\n <div className=\"mx-record-value\">{item.subscriptionStatus}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_credits_label\", undefined, \"Balance\")}\n </div>\n <div className=\"mx-record-value is-strong\">{item.creditsRemaining}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_renews_at\", undefined, \"Renews at\")}\n </div>\n <div className=\"mx-record-value\">{item.renewsAt}</div>\n </div>\n </div>\n\n <div className=\"mx-monetization-card-secondary\">\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"xapp.virtual_currency_label\", undefined, \"Currency\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">\n {item.virtualCurrencyLabel || \"\u2014\"}\n </span>\n </div>\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"activity.monetization_coverage_label\", undefined, \"Renewal state\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">\n {item.subscriptionCoverage}\n </span>\n </div>\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"activity.monetization_balance_state\", undefined, \"Balance status\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">\n {item.balanceState}\n </span>\n </div>\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"activity.monetization_source_label\", undefined, \"Origin\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">{item.sourceLabel}</span>\n </div>\n </div>\n\n {item.balanceSummary.length > 0 ? (\n <div className=\"mx-monetization-card-balance-strip\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_balances_label\", undefined, \"Balances\")}\n </div>\n <div className=\"mx-tag-list\">\n {item.balanceSummary.map((entry) => (\n <span key={`${item.xappId}:${entry}`} className=\"mx-tag\">\n {entry}\n </span>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n </section>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status, unread }: { status: string; unread: boolean }) {\n const { t } = useMarketplaceI18n();\n if (unread) {\n return (\n <span className=\"mx-badge mx-badge-warning\">{t(\"status.unread\", undefined, \"Unread\")}</span>\n );\n }\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className = normalized === \"COMPLETED\" ? \"mx-badge-success\" : \"mx-badge-danger\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype NotificationRecord = Record<string, unknown>;\n\nexport function NotificationsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedNotificationId = query.get(\"notificationId\") ?? \"\";\n const [items, setItems] = useState<NotificationRecord[]>([]);\n const [focusedNotification, setFocusedNotification] = useState<NotificationRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [unreadCount, setUnreadCount] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh() {\n if (!client.listMyNotifications) {\n setError(\n t(\n \"activity.unavailable_notifications_title\",\n undefined,\n \"Notifications are unavailable in this host.\",\n ),\n );\n setItems([]);\n setUnreadCount(0);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyNotifications({\n notificationId: focusedNotificationId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n async function markRead(notificationId: string) {\n if (!client.markMyNotificationRead) return;\n try {\n const res = await client.markMyNotificationRead(notificationId);\n setItems((current) =>\n current.map((item) =>\n readString(item.id) === notificationId\n ? {\n ...item,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : item,\n ),\n );\n setFocusedNotification((current) =>\n current && readString(current.id) === notificationId\n ? {\n ...current,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n async function markAllRead() {\n if (!client.markAllMyNotificationsRead) return;\n try {\n const res = await client.markAllMyNotificationsRead();\n setItems((current) =>\n current.map((item) => ({\n ...item,\n unread: false,\n read_at: readString(item.read_at) || new Date().toISOString(),\n })),\n );\n setFocusedNotification((current) =>\n current\n ? {\n ...current,\n unread: false,\n read_at: readString(current.read_at) || new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"notifications\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedNotificationId) {\n setFocusedNotification(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.listMyNotifications?.({\n notificationId: focusedNotificationId,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 1,\n });\n if (cancelled) return;\n const item = Array.isArray(res?.items) ? asRecord(res.items[0]) : null;\n setFocusedNotification(item);\n } catch (e) {\n if (cancelled) return;\n setFocusedNotification(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.notifications_title\", undefined, \"Notifications\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <div>\n <h1 className=\"mx-title\">\n {t(\"activity.notifications_title\", undefined, \"Notifications\")}\n </h1>\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {t(\n \"activity.unread_count\",\n {\n count: unreadCount,\n suffix: unreadCount === 1 ? \"\" : \"s\",\n suffix2: unreadCount === 1 ? \"\" : \"e\",\n },\n `${unreadCount} unread item${unreadCount === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {client.markAllMyNotificationsRead && unreadCount > 0 && (\n <button className=\"mx-btn mx-btn-outline\" onClick={() => void markAllRead()}>\n {t(\"activity.mark_all_read\", undefined, \"Mark all read\")}\n </button>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"notifications\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\n \"activity.showing_notifications_for_prefix\",\n undefined,\n \"Showing notification activity for\",\n )}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedNotificationId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.notification_detail\", undefined, \"Notification Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedNotificationId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_notification_list\", undefined, \"Back to notification list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedNotification ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readString(focusedNotification.status)}\n unread={Boolean(focusedNotification.unread)}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.trigger\", undefined, \"Trigger\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.trigger, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.channel\", undefined, \"Channel\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.channel, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.received\", undefined, \"Received\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedNotification.created_at) || \"\u2014\"}\n </div>\n </div>\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">{t(\"common.message\", undefined, \"Message\")}</div>\n <div className=\"mx-record-value\">\n {readFirstString(focusedNotification.message, \"\u2014\")}\n </div>\n </div>\n {(readString(focusedNotification.request_id) ||\n readString(focusedNotification.payment_session_id) ||\n readString(focusedNotification.reason)) && (\n <div className=\"mx-record-pill-row\">\n {readString(focusedNotification.request_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.request\", undefined, \"Request\")}:{\" \"}\n {readString(focusedNotification.request_id)}\n </span>\n ) : null}\n {readString(focusedNotification.payment_session_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(focusedNotification.payment_session_id)}\n </span>\n ) : null}\n {readString(focusedNotification.reason) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.reason\", undefined, \"Reason\")}:{\" \"}\n {readString(focusedNotification.reason)}\n </span>\n ) : null}\n </div>\n )}\n {Boolean(focusedNotification.unread) && client.markMyNotificationRead ? (\n <div className=\"mx-record-actions\">\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(focusedNotification.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\n \"activity.loading_notification_detail\",\n undefined,\n \"Loading notification details...\",\n )}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.trigger\", undefined, \"Trigger\")}</th>\n <th scope=\"col\">{t(\"common.channel\", undefined, \"Channel\")}</th>\n <th scope=\"col\">{t(\"common.message\", undefined, \"Message\")}</th>\n <th scope=\"col\">{t(\"common.received\", undefined, \"Received\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td colSpan={6} className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}>\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_notifications\", undefined, \"Loading notifications...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_notifications\", undefined, \"No notification activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} unread={Boolean(item.unread)} />\n </td>\n <td data-label={t(\"common.trigger\", undefined, \"Trigger\")}>\n {readFirstString(item.trigger, \"\u2014\")}\n </td>\n <td data-label={t(\"common.channel\", undefined, \"Channel\")}>\n {readFirstString(item.channel, \"\u2014\")}\n </td>\n <td data-label={t(\"common.message\", undefined, \"Message\")}>\n {readFirstString(item.message, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.received\", undefined, \"Received\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"notificationId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {Boolean(item.unread) && client.markMyNotificationRead ? (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(item.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype PaymentSessionRecord = Record<string, unknown>;\n\nexport function PaymentsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedPaymentSessionId = query.get(\"paymentSessionId\") ?? \"\";\n const [items, setItems] = useState<PaymentSessionRecord[]>([]);\n const [focusedSession, setFocusedSession] = useState<PaymentSessionRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n async function refresh() {\n if (!client.listMyPaymentSessions) {\n setError(\n t(\n \"activity.unavailable_payments_title\",\n undefined,\n \"Payments are unavailable in this host.\",\n ),\n );\n setItems([]);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyPaymentSessions({\n paymentSessionId: focusedPaymentSessionId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"payments\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedPaymentSessionId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedPaymentSessionId || !client.getMyPaymentSession) {\n setFocusedSession(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyPaymentSession!(focusedPaymentSessionId);\n if (cancelled) return;\n const session = asRecord(asRecord(res).session);\n setFocusedSession(Object.keys(session).length > 0 ? session : null);\n } catch (e) {\n if (cancelled) return;\n setFocusedSession(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedPaymentSessionId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const clearHref = {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const listHref = {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter) qs.set(\"xappId\", xappIdFilter);\n if (installationIdFilter) qs.set(\"installationId\", installationIdFilter);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.payments_title\", undefined, \"Payments\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.payments_title\", undefined, \"Payments\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"payments\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_payments_for_prefix\", undefined, \"Showing payment activity for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedPaymentSessionId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.payment_detail\", undefined, \"Payment Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedPaymentSessionId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_payment_list\", undefined, \"Back to payment list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedSession ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge status={readString(focusedSession.status)} />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.amount\", undefined, \"Amount\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.amount, \"\u2014\")}{\" \"}\n {readString(focusedSession.currency)}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.tool\", undefined, \"Tool\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.tool_name, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.provider\", undefined, \"Provider\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.provider_key, focusedSession.issuer, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.request\", undefined, \"Request\")}</div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedSession.request_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedSession.created_at) || \"\u2014\"}\n </div>\n </div>\n {Array.isArray(focusedSession.invoices) && focusedSession.invoices.length > 0 && (\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">\n {t(\"activity.invoices_title\", undefined, \"Invoices\")}\n </div>\n <div className=\"mx-record-pill-row\">\n {focusedSession.invoices.map((invoice, index) => {\n const invoiceRecord = asRecord(invoice);\n return (\n <span\n key={readFirstString(invoiceRecord.id, index)}\n className=\"mx-badge mx-badge-outline\"\n >\n {readFirstString(\n invoiceRecord.invoice_identifier,\n invoiceRecord.id,\n t(\"common.invoice\", undefined, \"Invoice\"),\n )}\n </span>\n );\n })}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payment_detail\", undefined, \"Loading payment details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.session\", undefined, \"Session\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.amount\", undefined, \"Amount\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 6 : 7}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payments\", undefined, \"Loading payments...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_payments\", undefined, \"No payment activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.payment_session_id, item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td\n className=\"mx-cell-mono\"\n data-label={t(\"common.session\", undefined, \"Session\")}\n >\n {readFirstString(item.payment_session_id, \"\u2014\")}\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n {readFirstString(item.tool_name, \"\u2014\")}\n </td>\n <td className=\"mx-cell-bold\" data-label={t(\"common.amount\", undefined, \"Amount\")}>\n {readString(item.amount)} {readString(item.currency)}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.payment_session_id)\n qs.set(\"paymentSessionId\", String(item.payment_session_id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.resume_url ? (\n <a\n href={String(item.resume_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.resume_payment\", undefined, \"Resume\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { SchemaOutputView } from \"../components/SchemaOutputView\";\nimport {\n resolvePaymentLockStateFromGuardSummary,\n type PaymentReconcileState,\n} from \"../utils/paymentLock\";\nimport { describeGuardCurrentAccess } from \"../utils/guardMonetization\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { buildOperationalSurfaceHref } from \"../utils/operationalSurfaces\";\nimport {\n asRecord,\n formatDateTime,\n parseDateValue,\n readFirstString,\n readString,\n} from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction navigateToExternalOrHost(url: string): void {\n const next = String(url || \"\").trim();\n if (!next || typeof window === \"undefined\") return;\n try {\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({ type: \"XAPPS_UI_NAVIGATE\", data: { path: next } }, \"*\");\n return;\n }\n } catch {\n // fall through to top-level navigation\n }\n window.location.href = next;\n}\n\nexport function RequestDetailPage() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { id } = useParams();\n const token = useQueryToken();\n const query = useQuery();\n const loc = useLocation();\n const navigate = useNavigate();\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n\n const tokenSearch = buildTokenSearch(token, loc.search);\n\n const [data, setData] = useState<unknown>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [reconcileBusy, setReconcileBusy] = useState(false);\n const [reconcileError, setReconcileError] = useState<string | null>(null);\n const [reconcileState, setReconcileState] = useState<PaymentReconcileState>(\"none\");\n const dataRecord = asRecord(data);\n const requestRecord = asRecord(dataRecord.request);\n const toolRecord = asRecord(dataRecord.tool);\n const manifestRecord = asRecord(dataRecord.manifest);\n const requestPayment = asRecord(requestRecord.payment);\n const requestPaymentSummary = asRecord(requestRecord.payment_summary);\n const status = readFirstString(requestRecord.status) || undefined;\n const isTerminal = status === \"COMPLETED\" || status === \"FAILED\";\n const effectiveXappId = readFirstString(requestRecord.xapp_id, xappIdFilter);\n const effectiveXappTitle =\n resolveMarketplaceText(manifestRecord.title as any, locale) ||\n readFirstString(requestRecord.xapp_name);\n const xappCrumbLabel = effectiveXappTitle || effectiveXappId;\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n\n const marketplaceTo = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: tokenSearch,\n };\n\n const xappTo = effectiveXappId\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(effectiveXappId)}`\n : `/marketplace/xapps/${encodeURIComponent(effectiveXappId)}`,\n search: tokenSearch,\n } as any)\n : null;\n\n const backToRequests = {\n pathname: isEmbedded ? \"/requests\" : \"/marketplace/requests\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n ...(readHostReturnUrl(loc.search)\n ? { xapps_host_return_url: readHostReturnUrl(loc.search) }\n : {}),\n }).toString()}`,\n };\n\n async function refreshOnce() {\n if (!id) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getMyRequest(String(id));\n setData(res);\n if (\n !resolvePaymentLockStateFromGuardSummary(\n asRecord(asRecord(res).request).guard_summary ?? null,\n {\n requestStatus: readFirstString(asRecord(asRecord(res).request).status),\n paymentStatus: readFirstString(asRecord(asRecord(res).request).payment_status),\n t: (key, fallback) => t(key, undefined, fallback),\n },\n ).isLocked\n ) {\n setReconcileState(\"confirmed_paid\");\n }\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n if (!id) return;\n let alive = true;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"request-detail\",\n params: { id },\n });\n\n void refreshOnce();\n\n timer = setInterval(async () => {\n try {\n const res = await client.getMyRequest(String(id));\n if (!alive) return;\n setData(res);\n const s = asRecord(asRecord(res).request).status;\n if (s === \"COMPLETED\" || s === \"FAILED\") {\n if (timer) clearInterval(timer);\n }\n } catch {\n // ignore background polling errors\n }\n }, 1500);\n\n return () => {\n alive = false;\n if (timer) clearInterval(timer);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const title =\n resolveMarketplaceText(toolRecord.title as any, locale) ||\n readFirstString(requestRecord.tool_name) ||\n t(\"activity.request_detail_title\", undefined, \"Request Details\");\n const artifacts = Array.isArray(dataRecord.artifacts) ? dataRecord.artifacts : [];\n\n function attachArtifactLinks(value: unknown, arts: unknown[]): unknown {\n if (typeof value === \"string\") {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === value);\n if (readString(match?.url)) {\n return {\n filename: readFirstString(match?.filename, value),\n url: readString(match?.url),\n mimeType: readString(match?.mime_type) || undefined,\n };\n }\n }\n if (Array.isArray(value)) {\n return value.map((item) => attachArtifactLinks(item, arts));\n }\n if (!value || typeof value !== \"object\") {\n return value;\n }\n const record = asRecord(value);\n const filename = readString(record.filename) || null;\n if (filename && !readString(record.url)) {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === filename);\n if (readString(match?.url)) {\n return {\n ...record,\n url: readString(match?.url),\n mimeType: record.mimeType ?? match?.mime_type,\n };\n }\n }\n const next: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n next[key] = attachArtifactLinks(val, arts);\n }\n return next;\n }\n\n if (env?.requestsEnabled === false) {\n const backToX = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToX as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n const responsePayload = useMemo(\n () => attachArtifactLinks(dataRecord.response ?? null, artifacts),\n [dataRecord, artifacts],\n );\n\n const outputSchema = useMemo(() => {\n const schema = toolRecord.output_schema;\n return schema && typeof schema === \"object\" ? asRecord(schema) : null;\n }, [toolRecord]);\n const requestPaymentLock = useMemo(\n () =>\n resolvePaymentLockStateFromGuardSummary(requestRecord.guard_summary ?? null, {\n requestStatus: readFirstString(requestRecord.status),\n paymentStatus: readFirstString(requestRecord.payment_status),\n reconcileState,\n t: (key, fallback) => t(key, undefined, fallback),\n }),\n [requestRecord.guard_summary, reconcileState, t],\n );\n const isPaymentPending =\n String(status || \"\")\n .trim()\n .toUpperCase() === \"PAYMENT_PENDING\";\n const showPaymentWaitState = requestPaymentLock.isLocked || isPaymentPending;\n const requestGuardCurrentAccess = describeGuardCurrentAccess(\n requestRecord.guard_summary ?? null,\n {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\"),\n },\n );\n const eventPaymentSessionId = useMemo(() => {\n const events = Array.isArray(dataRecord.events) ? dataRecord.events : [];\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const candidate = readPaymentSessionIdFromUnknown(getEventPayload(events[index]));\n if (candidate) return candidate;\n }\n return \"\";\n }, [dataRecord.events]);\n const effectivePaymentSessionId =\n readFirstString(\n requestPaymentLock.paymentSessionId,\n requestRecord.payment_session_id,\n requestRecord.paymentSessionId,\n requestPayment.payment_session_id,\n requestPayment.paymentSessionId,\n requestPaymentSummary.payment_session_id,\n requestPaymentSummary.paymentSessionId,\n eventPaymentSessionId,\n ) || \"\";\n const directPaymentUrl =\n readFirstString(\n requestRecord.payment_resume_url,\n requestRecord.paymentResumeUrl,\n requestPayment.resume_url,\n requestPayment.resumeUrl,\n requestPaymentSummary.payment_resume_url,\n requestPaymentSummary.paymentResumeUrl,\n requestPaymentLock.actionUrl,\n ) || \"\";\n const paymentSurfaceHref = (() => {\n if (!effectivePaymentSessionId) return \"\";\n const installationId = readFirstString(requestRecord.installation_id) || undefined;\n if (effectiveXappId) {\n return buildOperationalSurfaceHref({\n surface: \"payments\",\n xappId: effectiveXappId,\n installationId,\n paymentSessionId: effectivePaymentSessionId,\n token: token || undefined,\n isEmbedded,\n });\n }\n const params = new URLSearchParams({\n paymentSessionId: effectivePaymentSessionId,\n ...(installationId ? { installationId } : {}),\n ...(token ? { token } : {}),\n });\n return `${isEmbedded ? \"/payments\" : \"/marketplace/payments\"}?${params.toString()}`;\n })();\n\n function getEventPayload(ev: unknown): unknown | null {\n const eventRecord = asRecord(ev);\n if (!Object.keys(eventRecord).length) return null;\n const keys = [\"data\", \"payload\", \"details\", \"detail\", \"meta\", \"extra\", \"context\"];\n for (const k of keys) {\n const v = eventRecord[k];\n if (v !== undefined) return v;\n }\n const err = asRecord(eventRecord.error);\n if (Object.keys(err).length) {\n if (err.details) return err.details;\n if (err.data) return err.data;\n if (err.meta) return err.meta;\n }\n return null;\n }\n\n function readPaymentSessionIdFromUnknown(value: unknown): string {\n const record = asRecord(value);\n const direct = readFirstString(\n record.payment_session_id,\n record.paymentSessionId,\n asRecord(record.action).payment_session_id,\n asRecord(record.action).paymentSessionId,\n asRecord(record.guard).payment_session_id,\n asRecord(asRecord(record.guard).action).payment_session_id,\n asRecord(asRecord(record.guard).action).paymentSessionId,\n );\n if (direct) return direct;\n const url = readFirstString(\n record.url,\n record.payment_url,\n record.paymentUrl,\n asRecord(record.action).url,\n asRecord(asRecord(record.guard).action).url,\n );\n if (!url) return \"\";\n try {\n const parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : \"http://localhost\",\n );\n return (\n readFirstString(\n parsed.searchParams.get(\"payment_session_id\"),\n parsed.searchParams.get(\"paymentSessionId\"),\n ) || \"\"\n );\n } catch {\n return \"\";\n }\n }\n\n function extractGuardSummary(payload: unknown): {\n trigger: string;\n outcome: string;\n guardSlug: string;\n reason: string;\n actionKind: string;\n actionUrl: string;\n actionMessage: string;\n } | null {\n const p = asRecord(payload);\n const guard = asRecord(p.guard);\n const topAction = asRecord(p.action);\n const guardAction = asRecord(guard.action);\n const action = Object.keys(topAction).length > 0 ? topAction : guardAction;\n\n const trigger =\n readString(p.trigger) || readString(p.guardTrigger) || readString(p.guard_trigger);\n const outcome =\n readString(p.outcome) || readString(p.guardOutcome) || readString(p.guard_outcome);\n const guardSlug = readString(guard.slug) || readString(p.guardSlug) || readString(p.guard_slug);\n const reason =\n readString(guard.reason) ||\n readString(p.reason) ||\n readString(p.guardReason) ||\n readString(p.guard_reason);\n const actionKind = readString(action.kind);\n const actionUrl = readString(action.url);\n const actionMessage = readString(action.message);\n\n if (!trigger && !outcome && !guardSlug && !reason && !actionKind) return null;\n return { trigger, outcome, guardSlug, reason, actionKind, actionUrl, actionMessage };\n }\n\n function renderGuardActionLabel(summary: ReturnType<typeof extractGuardSummary>): string {\n if (!summary) return \"\";\n const suffix = summary.actionUrl ? ` (${summary.actionUrl})` : \"\";\n if (summary.actionKind === \"upgrade_subscription\") {\n return t(\n \"activity.guard_action_upgrade_subscription\",\n { suffix },\n \"Upgrade subscription{suffix}\",\n );\n }\n if (summary.actionKind === \"complete_payment\") {\n return t(\"activity.guard_action_complete_payment\", { suffix }, \"Complete payment{suffix}\");\n }\n if (summary.actionKind === \"step_up_auth\") {\n return t(\n \"activity.guard_action_step_up_authentication\",\n { suffix },\n \"Complete step-up authentication{suffix}\",\n );\n }\n if (summary.actionKind === \"confirm_action\") {\n return summary.actionMessage\n ? t(\n \"activity.guard_action_confirm_action_message\",\n { message: summary.actionMessage },\n \"Confirm action ({message})\",\n )\n : t(\"activity.guard_action_confirm_action\", undefined, \"Confirm action\");\n }\n return summary.actionKind\n ? t(\"activity.guard_action_custom\", { kind: summary.actionKind }, \"Action: {kind}\")\n : \"\";\n }\n\n function relativeTime(dateValue: unknown): string {\n try {\n const parsed = parseDateValue(dateValue);\n if (!parsed) return \"\";\n const now = Date.now();\n const then = parsed.getTime();\n if (Number.isNaN(then)) return \"\";\n const diff = now - then;\n if (diff < 0) return t(\"common.just_now\", undefined, \"just now\");\n const seconds = Math.floor(diff / 1000);\n if (seconds < 10) return t(\"common.just_now\", undefined, \"just now\");\n if (seconds < 60) return t(\"common.seconds_ago\", { value: seconds }, \"{value}s ago\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return t(\"common.minutes_ago\", { value: minutes }, \"{value}m ago\");\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return t(\"common.hours_ago\", { value: hours }, \"{value}h ago\");\n const days = Math.floor(hours / 24);\n return t(\"common.days_ago\", { value: days }, \"{value}d ago\");\n } catch {\n return \"\";\n }\n }\n\n const [expandedPayloads, setExpandedPayloads] = useState<Record<number, boolean>>({});\n const [timelineOpen, setTimelineOpen] = useState(false);\n\n function togglePayload(idx: number) {\n setExpandedPayloads((prev) => ({ ...prev, [idx]: !prev[idx] }));\n }\n\n function renderEventPayload(ev: unknown, idx: number) {\n const raw = getEventPayload(ev);\n if (raw == null) return null;\n const enriched = attachArtifactLinks(raw, artifacts);\n const isOpen = expandedPayloads[idx] ?? false;\n return (\n <>\n <button\n className={`mx-event-payload-toggle ${isOpen ? \"is-open\" : \"\"}`}\n onClick={() => togglePayload(idx)}\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n {isOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"activity.show_details\", undefined, \"Show details\")}\n </button>\n {isOpen && (\n <div className=\"mx-event-payload-body\">\n <SchemaOutputView schema={null} value={enriched} />\n </div>\n )}\n </>\n );\n }\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n async function continuePayment() {\n if (client.reconcileMyRequestPayment && isPaymentPending) {\n setReconcileError(null);\n setReconcileState(\"confirming_payment\");\n setReconcileBusy(true);\n try {\n const hostReturnUrl = readHostReturnUrl(loc.search);\n const currentReturnUrl = String(\n hostReturnUrl || (typeof window !== \"undefined\" ? window.location.href : \"\") || \"\",\n ).trim();\n const res = await client.reconcileMyRequestPayment({\n requestId: String(id),\n paymentSessionId: isPaymentPending ? undefined : effectivePaymentSessionId || undefined,\n returnUrl: currentReturnUrl || undefined,\n cancelUrl: currentReturnUrl || undefined,\n });\n setReconcileState(res?.finality_state || \"none\");\n const redirectUrl = String(res?.redirect_url || \"\").trim();\n if (redirectUrl) {\n navigateToExternalOrHost(redirectUrl);\n return;\n }\n await refreshOnce();\n return;\n } catch (e) {\n setReconcileError(readFirstString(asRecord(e).message) || String(e));\n setReconcileState(\"failed\");\n return;\n } finally {\n setReconcileBusy(false);\n }\n }\n\n if (directPaymentUrl) {\n navigateToExternalOrHost(directPaymentUrl);\n return;\n }\n if (paymentSurfaceHref) {\n void navigate(paymentSurfaceHref);\n }\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {env?.singleXappMode && !env?.embedMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {xappTo && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !env?.embedMode)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappTo}>{xappCrumbLabel}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToRequests as any}>\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span className=\"mx-cell-mono\">{id?.slice(0, 8)}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {t(\"activity.request_detail_title\", undefined, \"Request Details\")}\n </h1>\n <div className=\"mx-header-actions\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refreshOnce()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {busy && !data ? (\n <div className=\"mx-request-detail-skeleton\">\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-meta-grid\">\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n </div>\n </div>\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ) : (\n <div className=\"mx-detail-grid\">\n <div className=\"mx-detail-main\">\n <section className=\"mx-table-container mx-request-section\">\n <div className=\"mx-request-section-head\">\n <div>\n <h2 className=\"mx-title mx-request-section-title\">{title}</h2>\n <div className=\"mx-request-meta-row\">\n <span>{effectiveXappTitle || \"\u2014\"}</span>\n {readString(requestRecord.xapp_version) && (\n <>\n <span>\u00B7</span>\n <span>v{readString(requestRecord.xapp_version)}</span>\n </>\n )}\n </div>\n </div>\n <StatusBadge status={status ?? \"\"} />\n </div>\n\n <div className=\"mx-request-meta-grid\">\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.request_id\", undefined, \"Request ID\")}\n </span>\n <code className=\"mx-request-code\">{id}</code>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.tool\", undefined, \"Tool\")}</span>\n <span className=\"mx-meta-value\">\n {title || readFirstString(requestRecord.tool_name) || \"\u2014\"}\n </span>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.created\", undefined, \"Created\")}</span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.created_at) || \"\u2014\"}\n </span>\n </div>\n {readString(requestRecord.completed_at) && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.completed\", undefined, \"Completed\")}\n </span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.completed_at) || \"\u2014\"}\n </span>\n </div>\n )}\n </div>\n </section>\n\n <section className=\"mx-table-container mx-request-section\">\n <h3 className=\"mx-section-title mx-section-title-md\">\n {t(\"activity.response_title\", undefined, \"Response\")}\n </h3>\n {showPaymentWaitState ? (\n <div className=\"mx-payment-lock-banner\">\n <div className=\"mx-payment-lock-title\">\n {isPaymentPending\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : t(\"activity.payment_required\", undefined, \"Payment Required\")}\n </div>\n <div className=\"mx-payment-lock-message\">\n {requestPaymentLock.isLocked\n ? requestPaymentLock.message\n : t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n {requestGuardCurrentAccess ? (\n <div className=\"mx-payment-lock-message\">\n {t(\n \"activity.current_access_detail\",\n { value: requestGuardCurrentAccess },\n \"Current access: {value}\",\n )}\n </div>\n ) : null}\n <div className=\"mx-payment-lock-actions\">\n {isPaymentPending ||\n effectivePaymentSessionId ||\n directPaymentUrl ||\n paymentSurfaceHref ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n onClick={() => void continuePayment()}\n disabled={reconcileBusy}\n >\n {t(\"activity.complete_payment\", undefined, \"Complete Payment\")}\n </button>\n ) : null}\n <button className=\"mx-btn mx-btn-secondary\" onClick={() => void refreshOnce()}>\n {t(\"activity.refresh_status\", undefined, \"Refresh Status\")}\n </button>\n </div>\n {reconcileError ? (\n <div className=\"mx-payment-lock-error\">{reconcileError}</div>\n ) : null}\n </div>\n ) : null}\n {!isTerminal ? (\n showPaymentWaitState ? (\n <div className=\"mx-waiting-state\">\n {t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n ) : (\n <div className=\"mx-waiting-state\">\n {t(\"activity.waiting_for_response\", undefined, \"Waiting for response\u2026\")}\n </div>\n )\n ) : (\n <SchemaOutputView schema={outputSchema} value={responsePayload} />\n )}\n </section>\n\n {Array.isArray(dataRecord.events) &&\n dataRecord.events.length > 0 &&\n (() => {\n const evts = dataRecord.events;\n const classifyEvent = (ev: unknown) => {\n const t = readString(asRecord(ev).type).toLowerCase();\n if (t.includes(\"fail\") || t.includes(\"error\") || t.includes(\"exception\"))\n return \"error\";\n if (t.includes(\"warn\") || t.includes(\"retry\")) return \"warn\";\n if (t.includes(\"complet\") || t.includes(\"success\") || t.includes(\"done\"))\n return \"success\";\n return \"default\";\n };\n const errorCount = evts.filter((e) => classifyEvent(e) === \"error\").length;\n const successCount = evts.filter((e) => classifyEvent(e) === \"success\").length;\n const firstTs = parseDateValue(asRecord(evts[0]).created_at);\n const lastTs = parseDateValue(asRecord(evts[evts.length - 1]).created_at);\n let durationLabel = \"\";\n if (firstTs && lastTs) {\n const ms = Math.abs(lastTs.getTime() - firstTs.getTime());\n if (ms < 1000) {\n durationLabel = t(\"activity.timeline_duration_ms\", { value: ms }, \"{value}ms\");\n } else if (ms < 60_000) {\n durationLabel = t(\n \"activity.timeline_duration_seconds\",\n { value: (ms / 1000).toFixed(1) },\n \"{value}s\",\n );\n } else {\n durationLabel = t(\n \"activity.timeline_duration_minutes\",\n { value: (ms / 60_000).toFixed(1) },\n \"{value}m\",\n );\n }\n }\n return (\n <section className=\"mx-table-container mx-request-section\">\n <button\n type=\"button\"\n className=\"mx-timeline-toggle\"\n onClick={() => setTimelineOpen((v) => !v)}\n aria-expanded={timelineOpen}\n >\n <svg\n className={`mx-timeline-chevron ${timelineOpen ? \"is-open\" : \"\"}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n <div className=\"mx-timeline-toggle-content\">\n <div className=\"mx-timeline-toggle-top\">\n <h3 className=\"mx-section-title mx-section-title-md mx-section-title-tight\">\n {t(\"activity.execution_timeline\", undefined, \"Execution Timeline\")}\n </h3>\n <span className=\"mx-timeline-count\">\n {evts.length === 1\n ? t(\n \"activity.timeline_count_one\",\n { count: evts.length },\n \"{count} event\",\n )\n : t(\n \"activity.timeline_count_other\",\n { count: evts.length },\n \"{count} events\",\n )}\n </span>\n </div>\n {!timelineOpen && (\n <div className=\"mx-timeline-summary\">\n <div className=\"mx-timeline-dots\">\n {evts.map((ev, i: number) => (\n <span\n key={i}\n className={`mx-timeline-mini-dot mx-timeline-mini-dot-${classifyEvent(ev)}`}\n />\n ))}\n </div>\n <div className=\"mx-timeline-summary-stats\">\n {errorCount > 0 && (\n <span className=\"mx-timeline-stat mx-timeline-stat-error\">\n {errorCount === 1\n ? t(\n \"activity.timeline_error_count_one\",\n { count: errorCount },\n \"{count} error\",\n )\n : t(\n \"activity.timeline_error_count_other\",\n { count: errorCount },\n \"{count} errors\",\n )}\n </span>\n )}\n {durationLabel && (\n <span className=\"mx-timeline-stat mx-timeline-stat-duration\">\n {durationLabel}\n </span>\n )}\n </div>\n </div>\n )}\n </div>\n </button>\n {timelineOpen && (\n <ol className=\"mx-timeline\">\n {dataRecord.events.map((ev, idx: number) => {\n const eventRecord = asRecord(ev);\n const typeText =\n readFirstString(eventRecord.type) ||\n t(\"activity.event_fallback\", undefined, \"event\");\n const lower = typeText.toLowerCase();\n const isErr =\n lower.includes(\"fail\") ||\n lower.includes(\"error\") ||\n lower.includes(\"exception\");\n const isWarn = lower.includes(\"warn\") || lower.includes(\"retry\");\n const isComplete =\n lower.includes(\"complet\") ||\n lower.includes(\"success\") ||\n lower.includes(\"done\");\n\n const dotClass = isErr\n ? \"mx-timeline-dot-error\"\n : isWarn\n ? \"mx-timeline-dot-warn\"\n : isComplete\n ? \"mx-timeline-dot-success\"\n : \"mx-timeline-dot-default\";\n\n const progress =\n typeof eventRecord.progress === \"number\" ? eventRecord.progress : null;\n const guardSummary =\n extractGuardSummary(ev) ??\n extractGuardSummary(getEventPayload(ev)) ??\n extractGuardSummary(eventRecord.payload);\n const guardActionLabel = renderGuardActionLabel(guardSummary);\n const guardMonetizationSource =\n getEventPayload(ev) ?? eventRecord.payload ?? ev;\n const guardCurrentAccess = describeGuardCurrentAccess(\n guardMonetizationSource,\n {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\n \"xapp.subscription_coverage_inactive\",\n undefined,\n \"Not covered\",\n ),\n },\n );\n\n return (\n <li\n key={readFirstString(eventRecord.id) || String(idx)}\n className=\"mx-timeline-item\"\n >\n <div className={`mx-timeline-dot ${dotClass}`}>\n {isErr ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : isComplete ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : isWarn ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ) : null}\n </div>\n <div\n className={`mx-event-card ${isErr ? \"mx-event-card-error\" : isWarn ? \"mx-event-card-warn\" : \"\"}`}\n >\n <div className=\"mx-event-head\">\n <div\n className={`mx-event-type ${isErr ? \"mx-event-type-error\" : isWarn ? \"mx-event-type-warn\" : \"\"}`}\n >\n {typeText}\n {readString(eventRecord.code) && (\n <span className=\"mx-event-code\">\n {readString(eventRecord.code)}\n </span>\n )}\n </div>\n <div className=\"mx-event-time\">\n <div className=\"mx-event-date\">\n {formatDateTime(eventRecord.created_at)}\n </div>\n {parseDateValue(eventRecord.created_at) && (\n <div className=\"mx-event-relative\">\n {relativeTime(eventRecord.created_at)}\n </div>\n )}\n </div>\n </div>\n\n {readString(eventRecord.message) && (\n <div className=\"mx-event-message\">\n {readString(eventRecord.message)}\n </div>\n )}\n\n {guardSummary && (\n <div className=\"mx-event-guard\">\n <div className=\"mx-event-guard-badges\">\n {guardSummary.guardSlug && (\n <span className=\"mx-badge\">\n {t(\n \"activity.guard_badge\",\n { value: guardSummary.guardSlug },\n \"guard: {value}\",\n )}\n </span>\n )}\n {guardSummary.trigger && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.trigger_badge\",\n { value: guardSummary.trigger },\n \"trigger: {value}\",\n )}\n </span>\n )}\n {guardSummary.outcome && (\n <span className=\"mx-badge mx-badge-success\">\n {t(\n \"activity.outcome_badge\",\n { value: guardSummary.outcome },\n \"outcome: {value}\",\n )}\n </span>\n )}\n {guardCurrentAccess && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.current_access_badge\",\n { value: guardCurrentAccess },\n \"access: {value}\",\n )}\n </span>\n )}\n </div>\n {(guardSummary.reason || guardActionLabel) && (\n <div className=\"mx-event-guard-detail\">\n {guardSummary.reason\n ? t(\n \"activity.reason_detail\",\n { value: guardSummary.reason },\n \"reason={value}\",\n )\n : \"\"}\n {guardSummary.reason && guardActionLabel ? \" \u00B7 \" : \"\"}\n {guardActionLabel}\n </div>\n )}\n </div>\n )}\n\n {progress != null && (\n <div className=\"mx-event-progress-track\">\n <div\n className={`mx-event-progress-bar ${isErr ? \"mx-event-progress-error\" : \"mx-event-progress-default\"}`}\n style={{\n width: `${Math.max(0, Math.min(100, progress <= 1 ? progress * 100 : progress))}%`,\n }}\n />\n </div>\n )}\n\n {renderEventPayload(ev, idx)}\n </div>\n </li>\n );\n })}\n </ol>\n )}\n </section>\n );\n })()}\n </div>\n\n <aside className=\"mx-detail-sidebar\">\n {artifacts.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.artifacts_title\", undefined, \"Artifacts\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {artifacts.map((a) => {\n const artifact = asRecord(a);\n return (\n <a\n key={readFirstString(artifact.id, artifact.url, artifact.filename)}\n href={readFirstString(artifact.url) || \"#\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-sidebar-artifact-link\"\n >\n {readFirstString(artifact.filename) ||\n t(\"activity.download_artifact\", undefined, \"Download Artifact\")}\n </a>\n );\n })}\n </div>\n </div>\n )}\n\n {readString(requestRecord.installation_id) &&\n Array.isArray(dataRecord.widgets) &&\n dataRecord.widgets.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.related_widgets_title\", undefined, \"Related Widgets\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {(Array.isArray(dataRecord.widgets) ? dataRecord.widgets : []).map((w) => {\n const widget = asRecord(w);\n return (\n <button\n key={readFirstString(widget.id)}\n className=\"mx-btn mx-btn-primary mx-btn-sidebar\"\n onClick={() => {\n const installationId = readFirstString(requestRecord.installation_id);\n const widgetId = readFirstString(widget.id);\n const widgetName =\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\");\n if (!installationId || !widgetId) return;\n\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n host.openWidget({\n installationId,\n widgetId,\n xappId: readString(requestRecord.xapp_id),\n xappTitle: effectiveXappTitle,\n widgetName,\n toolName: readString(requestRecord.tool_name),\n });\n }}\n >\n {t(\n \"activity.open_widget\",\n {\n widget:\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n },\n `Open ${\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\")\n }`,\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.help_title\", undefined, \"Help\")}\n </h3>\n <p className=\"mx-sidebar-help-text\">\n {t(\n \"activity.help_request\",\n undefined,\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n )}\n </p>\n <Link to={backToRequests as any} className=\"mx-btn mx-btn-outline mx-btn-sidebar\">\n {t(\"activity.back_to_requests\", undefined, \"Back to Requests\")}\n </Link>\n </div>\n </aside>\n </div>\n )}\n </div>\n );\n}\n", "import React from \"react\";\n\ntype JsonSchema = Record<string, unknown> | null;\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction isPrimitive(value: unknown) {\n return value == null || [\"string\", \"number\", \"boolean\"].includes(typeof value);\n}\n\nfunction asArtifactLink(\n value: unknown,\n): { filename?: string; url: string; mimeType?: string } | null {\n const record = asRecord(value);\n if (typeof record.url === \"string\") {\n return {\n filename: typeof record.filename === \"string\" ? record.filename : undefined,\n url: record.url,\n mimeType: typeof record.mimeType === \"string\" ? record.mimeType : undefined,\n };\n }\n return null;\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div style={{ display: \"grid\", gap: 6, padding: \"8px 0\", borderBottom: \"1px solid #f3f4f6\" }}>\n <div style={{ fontSize: 12, color: \"#6b7280\" }}>{label}</div>\n <div>{children}</div>\n </div>\n );\n}\n\nfunction renderValue(schema: JsonSchema | undefined, value: unknown): React.ReactNode {\n const artifact = asArtifactLink(value);\n if (artifact) {\n return (\n <a href={artifact.url} target=\"_blank\" rel=\"noreferrer\">\n {artifact.filename ?? artifact.url}\n </a>\n );\n }\n\n if (isPrimitive(value)) {\n return (\n <code style={{ fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\" }}>\n {String(value)}\n </code>\n );\n }\n\n if (Array.isArray(value)) {\n const itemSchema = asRecord(schema?.items);\n return (\n <div style={{ display: \"grid\", gap: 8 }}>\n {value.map((v, idx) => (\n <div key={idx} style={{ padding: 10, border: \"1px solid #e5e7eb\", borderRadius: 10 }}>\n {renderValue(itemSchema, v)}\n </div>\n ))}\n </div>\n );\n }\n\n // object\n const props = asRecord(schema?.properties);\n const valueRecord = asRecord(value);\n const keys = Object.keys(props).length ? Object.keys(props) : Object.keys(valueRecord);\n return (\n <div>\n {keys.map((k) => (\n <Field key={k} label={asRecord(props[k]).title ? String(asRecord(props[k]).title) : k}>\n {renderValue(asRecord(props[k]), valueRecord[k])}\n </Field>\n ))}\n </div>\n );\n}\n\nexport function SchemaOutputView({ schema, value }: { schema: JsonSchema; value: unknown }) {\n if (!schema) {\n return (\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n background: \"#f8fafc\",\n padding: 12,\n borderRadius: 12,\n }}\n >\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n }\n\n return <div>{renderValue(schema, value)}</div>;\n}\n", "export type PaymentReconcileState =\n | \"none\"\n | \"confirming_payment\"\n | \"still_pending\"\n | \"confirmed_paid\"\n | \"failed\";\n\nexport type PaymentLockResolution = {\n isLocked: boolean;\n reason: string;\n actionKind: string;\n actionUrl: string;\n ctaLabel: string;\n message: string;\n paymentSessionId: string | null;\n paymentAttemptState: string;\n reconcileState: PaymentReconcileState;\n monetizationState: Record<string, unknown> | null;\n};\n\ntype PaymentLockTranslate = (key: string, fallback: string) => string;\ntype PaymentLockOptions = {\n reconcileState?: PaymentReconcileState | null;\n requestStatus?: string | null;\n paymentStatus?: string | null;\n t?: PaymentLockTranslate;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction resolveAction(summary: Record<string, unknown>): Record<string, unknown> {\n const topAction = asRecord(summary.action);\n if (Object.keys(topAction).length > 0) return topAction;\n const details = asRecord(summary.details);\n const detailsAction = asRecord(details.action);\n if (Object.keys(detailsAction).length > 0) return detailsAction;\n const guard = asRecord(summary.guard);\n const guardAction = asRecord(guard.action);\n if (Object.keys(guardAction).length > 0) return guardAction;\n return {};\n}\n\nfunction normalizeActionKind(raw: string): string {\n return readString(raw).toLowerCase();\n}\n\nfunction resolveText(t: PaymentLockTranslate | undefined, key: string, fallback: string): string {\n return typeof t === \"function\" ? t(key, fallback) : fallback;\n}\n\nfunction isSettledPaymentStatus(value: unknown): boolean {\n const normalized = readString(value).toLowerCase();\n return (\n normalized === \"paid\" ||\n normalized === \"settled\" ||\n normalized === \"succeeded\" ||\n normalized === \"completed\"\n );\n}\n\nfunction resolveCtaLabel(actionKind: string, t?: PaymentLockTranslate): string {\n if (actionKind === \"complete_payment\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n if (actionKind === \"payment_required\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n return resolveText(t, \"payment_lock.continue\", \"Continue\");\n}\n\nfunction resolveLockMessage(\n reason: string,\n paymentAttemptState: string,\n reconcileState: PaymentReconcileState,\n t?: PaymentLockTranslate,\n): string {\n if (reconcileState === \"confirming_payment\") {\n return resolveText(\n t,\n \"payment_lock.confirming_payment_finality\",\n \"Confirming payment finality with provider.\",\n );\n }\n if (reconcileState === \"still_pending\") {\n return resolveText(\n t,\n \"payment_lock.pending_retry_confirm\",\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n );\n }\n if (reconcileState === \"confirmed_paid\") {\n return resolveText(\n t,\n \"payment_lock.confirmed_refresh\",\n \"Payment is confirmed. Refresh to continue.\",\n );\n }\n if (reconcileState === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.not_settled_new_attempt\",\n \"Payment is not settled. Complete a new payment attempt.\",\n );\n }\n const attempt = readString(paymentAttemptState).toLowerCase();\n if (attempt === \"requires_action\") {\n return resolveText(\n t,\n \"payment_lock.requires_additional_action\",\n \"Payment requires additional action. Complete payment to continue.\",\n );\n }\n if (attempt === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.attempt_failed\",\n \"Last payment attempt failed. Complete payment to continue.\",\n );\n }\n if (attempt === \"replayed\") {\n return resolveText(\n t,\n \"payment_lock.evidence_used\",\n \"Payment evidence was already used. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_receipt_already_used\") {\n return resolveText(\n t,\n \"payment_lock.evidence_consumed\",\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_evidence_missing\" || reason === \"payment_required\") {\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n }\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n}\n\nexport function resolvePaymentLockStateFromGuardSummary(\n summaryInput: unknown,\n options?: PaymentLockOptions,\n): PaymentLockResolution {\n const summary = asRecord(summaryInput);\n const action = resolveAction(summary);\n const actionKind = normalizeActionKind(String(action.kind ?? summary.reason ?? \"\"));\n const actionUrl = readString(action.url);\n const reason = readString(summary.reason).toLowerCase();\n const monetizationState = asRecord(summary.monetization_state);\n const paymentSessionId =\n readString(monetizationState.payment_session_id) || readString(action.payment_session_id);\n const paymentAttemptState = readString(monetizationState.payment_attempt_state).toLowerCase();\n const reconcileState = ((): PaymentReconcileState => {\n const candidate = readString(options?.reconcileState).toLowerCase();\n if (\n candidate === \"confirming_payment\" ||\n candidate === \"still_pending\" ||\n candidate === \"confirmed_paid\" ||\n candidate === \"failed\"\n ) {\n return candidate;\n }\n return \"none\";\n })();\n const isPaymentKind = actionKind === \"complete_payment\" || actionKind === \"payment_required\";\n const isPaymentReason =\n reason === \"payment_required\" ||\n reason === \"payment_evidence_missing\" ||\n reason === \"payment_receipt_already_used\";\n const requestStatus = readString(options?.requestStatus).toUpperCase();\n const paymentSettled = isSettledPaymentStatus(options?.paymentStatus);\n const isHeldForPayment = requestStatus === \"PAYMENT_PENDING\";\n const isResolvedPastHold = paymentSettled && requestStatus !== \"\" && !isHeldForPayment;\n const isLocked = !isResolvedPastHold && (isPaymentKind || isPaymentReason);\n\n return {\n isLocked,\n reason,\n actionKind,\n actionUrl,\n ctaLabel: resolveCtaLabel(actionKind, options?.t),\n message: resolveLockMessage(reason, paymentAttemptState, reconcileState, options?.t),\n paymentSessionId: paymentSessionId || null,\n paymentAttemptState: paymentAttemptState || \"unknown\",\n reconcileState,\n monetizationState: Object.keys(monetizationState).length > 0 ? monetizationState : null,\n };\n}\n", "function asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nexport function readGuardMonetizationState(input: unknown): Record<string, unknown> | null {\n const root = asRecord(input);\n const details = asRecord(root.details);\n const guard = asRecord(root.guard);\n const guardDetails = asRecord(guard.details);\n const candidates = [\n asRecord(root.monetization_state),\n asRecord(details.monetization_state),\n asRecord(guardDetails.monetization_state),\n ];\n for (const candidate of candidates) {\n if (Object.keys(candidate).length > 0) return candidate;\n }\n return null;\n}\n\nexport function readGuardHasCurrentAccess(input: unknown): boolean | null {\n const value = readGuardMonetizationState(input)?.has_current_access;\n return typeof value === \"boolean\" ? value : null;\n}\n\nexport function describeGuardCurrentAccess(\n input: unknown,\n labels: { available: string; unavailable: string },\n): string {\n const hasCurrentAccess = readGuardHasCurrentAccess(input);\n if (hasCurrentAccess === null) return \"\";\n return hasCurrentAccess ? labels.available : labels.unavailable;\n}\n", "import type {\n CatalogXappDetail,\n MarketplaceClient,\n MarketplaceEnv,\n OperationalSurfacePlacement,\n OperationalSurfacesDescriptor,\n} from \"../types\";\n\nexport type OperationalSurfaceKey = keyof OperationalSurfacesDescriptor;\n\nfunction readPathEmbedded(): boolean {\n return typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n}\n\nexport function getOperationalSurfaces(\n detail: CatalogXappDetail | null | undefined,\n): OperationalSurfacesDescriptor | null {\n const value = detail?.operational_surfaces;\n if (!value || typeof value !== \"object\") return null;\n return value;\n}\n\nfunction readOperationalSurfaceMode(input: {\n env?: MarketplaceEnv;\n isEmbedded: boolean;\n}): \"contract\" | \"testing_all\" {\n const policy = input.env?.operationalSurfacesVisibility;\n return input.isEmbedded ? (policy?.embed ?? \"contract\") : (policy?.portal ?? \"contract\");\n}\n\nexport function isOperationalSurfaceVisible(\n detail: CatalogXappDetail | null | undefined,\n surface: OperationalSurfaceKey,\n options?: { isEmbedded?: boolean },\n): boolean {\n const surfaces = getOperationalSurfaces(detail);\n const descriptor = surfaces?.[surface];\n if (!descriptor?.enabled) return false;\n const isEmbedded = options?.isEmbedded ?? readPathEmbedded();\n return isEmbedded ? descriptor.visibility.embed : descriptor.visibility.portal;\n}\n\nexport function surfaceClientAvailable(\n client: MarketplaceClient,\n surface: OperationalSurfaceKey,\n): boolean {\n if (surface === \"requests\") return typeof client.listMyRequests === \"function\";\n if (surface === \"monetization\") return typeof client.getMyXappMonetization === \"function\";\n if (surface === \"payments\") return typeof client.listMyPaymentSessions === \"function\";\n if (surface === \"invoices\") return typeof client.listMyInvoices === \"function\";\n if (surface === \"notifications\") return typeof client.listMyNotifications === \"function\";\n return false;\n}\n\nexport function buildOperationalSurfaceHref(input: {\n surface: OperationalSurfaceKey;\n xappId: string;\n installationId?: string;\n requestId?: string;\n paymentSessionId?: string;\n invoiceId?: string;\n notificationId?: string;\n token?: string;\n isEmbedded?: boolean;\n}): string {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const params = new URLSearchParams({\n xappId: input.xappId,\n ...(input.installationId ? { installationId: input.installationId } : {}),\n ...(input.paymentSessionId ? { paymentSessionId: input.paymentSessionId } : {}),\n ...(input.invoiceId ? { invoiceId: input.invoiceId } : {}),\n ...(input.notificationId ? { notificationId: input.notificationId } : {}),\n ...(input.token ? { token: input.token } : {}),\n });\n const base = isEmbedded ? `/${input.surface}` : `/marketplace/${input.surface}`;\n const detailSegment =\n input.surface === \"requests\" && input.requestId\n ? `/${encodeURIComponent(input.requestId)}`\n : \"\";\n return `${base}${detailSegment}?${params.toString()}`;\n}\n\nexport function getVisibleOperationalSurfaces(input: {\n detail: CatalogXappDetail | null | undefined;\n client: MarketplaceClient;\n env?: MarketplaceEnv;\n isEmbedded?: boolean;\n}): OperationalSurfaceKey[] {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const mode = readOperationalSurfaceMode({\n env: input.env,\n isEmbedded,\n });\n const allSurfaces = [\n \"requests\",\n \"monetization\",\n \"payments\",\n \"invoices\",\n \"notifications\",\n ] as OperationalSurfaceKey[];\n if (mode === \"testing_all\") {\n return allSurfaces.filter((surface) => {\n if (surface === \"requests\" && input.env?.requestsEnabled === false) return false;\n return surfaceClientAvailable(input.client, surface);\n });\n }\n const surfaces = getOperationalSurfaces(input.detail);\n if (!surfaces) return [];\n return allSurfaces.filter(\n (surface) =>\n surfaceClientAvailable(input.client, surface) &&\n isOperationalSurfaceVisible(input.detail, surface, { isEmbedded }),\n );\n}\n\nexport function getOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"requests\") return \"Requests\";\n if (surface === \"monetization\") return \"Monetization\";\n if (surface === \"payments\") return \"Payments\";\n if (surface === \"invoices\") return \"Invoices\";\n return \"Notifications\";\n}\n\nexport function resolveOperationalSurfacePlacement(input: {\n env?: MarketplaceEnv;\n surface: OperationalSurfaceKey;\n isEmbedded?: boolean;\n}): OperationalSurfacePlacement {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const policy = input.env?.operationalSurfacePlacement;\n const scopePolicy = isEmbedded ? policy?.embed : policy?.portal;\n const bySurface = scopePolicy?.bySurface?.[input.surface];\n if (bySurface) return bySurface;\n return scopePolicy?.default ?? \"in_router\";\n}\n\nexport async function discoverOperationalSurfaceData(input: {\n client: MarketplaceClient;\n xappId: string;\n installationId?: string | null;\n}): Promise<OperationalSurfaceKey[]> {\n const xappId = String(input.xappId || \"\").trim();\n const installationId = String(input.installationId || \"\").trim();\n if (!xappId) return [];\n\n const queryBase = {\n xappId,\n ...(installationId ? { installationId } : {}),\n };\n\n const checks = await Promise.all([\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.getMyXappMonetization !== \"function\") return null;\n try {\n const res = await input.client.getMyXappMonetization(xappId, {\n installationId: installationId || null,\n });\n const paywalls = Array.isArray((res as any)?.paywalls) ? (res as any).paywalls : [];\n const accessProjection =\n res && typeof res === \"object\" ? ((res as any).access_projection ?? null) : null;\n const currentSubscription =\n res && typeof res === \"object\" ? ((res as any).current_subscription ?? null) : null;\n return paywalls.length > 0 || accessProjection || currentSubscription\n ? \"monetization\"\n : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyPaymentSessions !== \"function\") return null;\n try {\n const res = await input.client.listMyPaymentSessions({\n ...queryBase,\n limit: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"payments\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyInvoices !== \"function\") return null;\n try {\n const res = await input.client.listMyInvoices({\n ...queryBase,\n page: 1,\n pageSize: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"invoices\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyNotifications !== \"function\") return null;\n try {\n const res = await input.client.listMyNotifications({\n ...queryBase,\n limit: 1,\n });\n return (Array.isArray(res?.items) && res.items.length > 0) ||\n Number(res?.unread_count || 0) > 0\n ? \"notifications\"\n : null;\n } catch {\n return null;\n }\n })(),\n ]);\n\n return checks.filter((surface): surface is OperationalSurfaceKey => Boolean(surface));\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport { describeGuardCurrentAccess } from \"../utils/guardMonetization\";\nimport \"../marketplace.css\";\n\ntype RequestListPagination = {\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction renderGuardActionHint(summary: Record<string, unknown>): string {\n const action = asRecord(summary.action);\n const kind = readString(action.kind);\n if (kind === \"upgrade_subscription\") return \"Upgrade subscription\";\n if (kind === \"complete_payment\") return \"Complete payment\";\n if (kind === \"step_up_auth\") return \"Complete step-up authentication\";\n if (kind === \"confirm_action\") {\n const msg = readString(action.message);\n return msg ? `Confirm action (${msg})` : \"Confirm action\";\n }\n return kind ? `Action: ${kind}` : \"\";\n}\n\nexport function RequestsPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n\n const [items, setItems] = useState<unknown[]>([]);\n const [pagination, setPagination] = useState<RequestListPagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n\n async function refresh(page: number = 1) {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyRequests({\n xappId: xappIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res.items) ? res.items : []);\n setPagination(\n res.pagination\n ? {\n total: Number(res.pagination.total || 0),\n page: Number(res.pagination.page || 1),\n pageSize: Number(res.pagination.pageSize || 20),\n totalPages: Number(res.pagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"requests\",\n params: { xappId: xappIdFilter },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [xappIdFilter, pageParam]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n return;\n }\n\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n const detail = asRecord(res);\n const name =\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name);\n if (!alive) return;\n setXappTitle(name);\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n\n return () => {\n alive = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale, xappIdFilter]);\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const xappLink = xappIdFilter\n ? ({\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappIdFilter))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappIdFilter))}`,\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n } as any)\n : null;\n\n const backToContext =\n xappIdFilter && xappLink\n ? xappLink\n : {\n pathname: isEmbedded ? \"\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const clearHref = {\n pathname: isEmbedded ? \"/requests\" : \"/marketplace/requests\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n if (env?.requestsEnabled === false) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToContext as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {env?.singleXappMode && !isEmbedded && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {xappIdFilter && xappLink && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !isEmbedded)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappLink as any}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.requests_title\", undefined, \"Requests\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.requests_title\", undefined, \"Requests\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n <MarketplaceActivityTabs\n active=\"requests\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n />\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_requests_for_prefix\", undefined, \"Showing requests for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || String(xappIdFilter)}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || String(xappIdFilter)}</span>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.id\", undefined, \"ID\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.version\", undefined, \"Version\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={5}\n data-label={t(\"common.status\", undefined, \"Status\")}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_requests\", undefined, \"Loading requests...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_requests\", undefined, \"No requests yet.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((r) => {\n const request = asRecord(r);\n const manifest = asRecord(request.manifest);\n const href = {\n pathname: `./${encodeURIComponent(readFirstString(request.id))}`,\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n }).toString()}`,\n };\n\n const tags: string[] = Array.isArray(manifest.tags)\n ? manifest.tags\n .filter((t) => typeof t === \"string\" && t.trim())\n .map((t) => String(t).trim())\n : [];\n const guardSummary = asRecord(request.guard_summary);\n const guardSlug =\n readString(guardSummary.slug) || readString(guardSummary.guardSlug);\n const guardReason = readString(guardSummary.reason);\n const guardOutcome = readString(guardSummary.outcome);\n const guardActionHint = renderGuardActionHint(guardSummary);\n const guardAccessHint = describeGuardCurrentAccess(guardSummary, {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\"),\n });\n const hasGuardInfo =\n Boolean(guardSlug) ||\n Boolean(guardReason) ||\n Boolean(guardActionHint) ||\n Boolean(guardAccessHint);\n\n return (\n <tr key={readFirstString(request.id)}>\n <td className=\"mx-cell-id\" data-label={t(\"common.id\", undefined, \"ID\")}>\n <Link to={href as any}>{readFirstString(request.id).slice(0, 8)}...</Link>\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n <div className=\"mx-cell-bold\">\n {resolveMarketplaceText(request.tool_title as any, locale) ||\n readFirstString(request.tool_name) ||\n \"\u2014\"}\n </div>\n {tags.length > 0 && (\n <div className=\"mx-card-tags mx-card-tags-inline\">\n {tags.slice(0, 3).map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n )}\n {hasGuardInfo && (\n <div className=\"mx-guard-summary\">\n <div>\n {guardSlug ? `guard=${guardSlug}` : \"\"}\n {guardSlug && guardOutcome ? \" \u00B7 \" : \"\"}\n {guardOutcome ? `outcome=${guardOutcome}` : \"\"}\n {(guardSlug || guardOutcome) && guardReason ? \" \u00B7 \" : \"\"}\n {guardReason ? `reason=${guardReason}` : \"\"}\n </div>\n {guardActionHint && <div>{guardActionHint}</div>}\n {guardAccessHint && (\n <div>\n {t(\n \"activity.current_access_detail\",\n { value: guardAccessHint },\n \"Current access: {value}\",\n )}\n </div>\n )}\n </div>\n )}\n </td>\n <td\n className=\"mx-cell-muted\"\n data-label={t(\"common.version\", undefined, \"Version\")}\n >\n {readString(request.xapp_version)\n ? `v${readString(request.xapp_version)}`\n : \"\u2014\"}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(request.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(request.created_at) || \"\u2014\"}\n </td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.max(1, pageParam - 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam <= 1 || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </Link>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.min(pagination.totalPages, pageParam + 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam >= pagination.totalPages || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </Link>\n </div>\n )}\n </div>\n );\n}\n", "import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport type { TranslateFunction } from \"@xapps-platform/platform-i18n\";\nimport {\n buildXmsSubscriptionLifecycleSummary,\n buildMonetizationHistorySurfaceHtml,\n buildMonetizationPaywallRenderModel,\n flattenXappMonetizationPaywallPackages,\n listXappMonetizationPaywalls,\n resolveMonetizationPackagePurchasePolicy,\n selectXappMonetizationPaywall,\n summarizeVirtualCurrencyBalances,\n} from \"@xapps-platform/browser-host/xms\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport {\n hasMarketplaceCatalogMonetization,\n resolveMarketplaceDefaultAccessState,\n} from \"../utils/monetizationAccess\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getVisibleOperationalSurfaces,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport type {\n CatalogXappDetail,\n MarketplaceMonetizationAccessProjection,\n MarketplaceXappMonetizationState,\n} from \"../types\";\nimport \"../marketplace.css\";\n\ntype GuardInfo = {\n slug: string;\n label?: string;\n trigger: string;\n headless: boolean;\n blocking: boolean;\n order: number | null;\n policyKind: string;\n};\n\ntype UsageCreditToolSummary = {\n tool_name: string;\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n};\n\ntype UsageCreditSummary = {\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n updated_at: string | null;\n by_tool: UsageCreditToolSummary[];\n};\n\ntype MonetizationPaywallRenderModel = ReturnType<typeof buildMonetizationPaywallRenderModel>;\ntype MonetizationPaywallRenderPackage = MonetizationPaywallRenderModel[\"packages\"][number];\ntype MonetizationPaywallPackageRecord = ReturnType<\n typeof flattenXappMonetizationPaywallPackages\n>[number];\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQueryAction(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"action\") ?? \"\";\n}\n\nfunction useQueryToolName(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"toolName\") ?? qs.get(\"tool_name\") ?? \"\";\n}\n\nfunction buildRequestsHref(input: { xappId: string; token?: string; isEmbedded: boolean }): string {\n const params = new URLSearchParams({\n xappId: input.xappId,\n ...(input.token ? { token: input.token } : {}),\n });\n const s = params.toString();\n\n // IMPORTANT: Navigate from `xapps/:xappId` to the sibling `requests` route.\n // In Portal, this is sibling. In Embed, we want absolute path to be safe.\n if (input.isEmbedded) return `/requests?${s}`;\n return `/marketplace/requests?${s}`;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction readBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction readNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction buildMonetizationCheckoutReturnUrl(input: {\n currentHref: string;\n intentId: string;\n packageSlug?: string | null;\n}): string {\n const url = new URL(input.currentHref, window.location.href);\n url.searchParams.set(\"focus\", \"plans\");\n url.searchParams.set(\"xapps_monetization_intent_id\", input.intentId);\n if (input.packageSlug) {\n url.searchParams.set(\"paywallPackage\", input.packageSlug);\n }\n return url.toString();\n}\n\nfunction buildHostedPaymentPageUrl(input: {\n currentHref: string;\n apiBaseUrl?: string | null;\n}): string {\n const apiBaseUrl = String(input.apiBaseUrl || \"\").trim();\n if (apiBaseUrl) {\n try {\n const apiUrl = new URL(apiBaseUrl, window.location.href);\n return `${apiUrl.origin}/v1/gateway-payment.html`;\n } catch {\n // fall through\n }\n }\n const url = new URL(input.currentHref, window.location.href);\n return `${url.origin}/v1/gateway-payment.html`;\n}\n\nfunction normalizeHostedCheckoutUrl(input: {\n paymentPageUrl: string;\n apiBaseUrl?: string | null;\n}): string {\n const raw = String(input.paymentPageUrl || \"\").trim();\n if (!raw) return \"\";\n try {\n const apiBaseUrl = String(input.apiBaseUrl || \"\").trim();\n if (apiBaseUrl) {\n return new URL(raw, apiBaseUrl).toString();\n }\n } catch {\n // fall through\n }\n try {\n return new URL(raw, window.location.href).toString();\n } catch {\n return raw;\n }\n}\n\nfunction navigateToHostedCheckout(url: string): void {\n const target = String(url || \"\").trim();\n if (!target) return;\n try {\n const opened = window.open(target, \"_top\");\n if (opened) return;\n } catch {\n // Fall through to direct location assignment attempts below.\n }\n try {\n if (typeof window !== \"undefined\" && window.top && window.top !== window) {\n window.top.location.assign(target);\n return;\n }\n } catch {\n // Cross-window access can fail; fall through to same-window navigation.\n }\n window.location.assign(target);\n}\n\nfunction stripMonetizationCheckoutReturnParams(search: string): string {\n const next = new URLSearchParams(search);\n const keysToDelete: string[] = [];\n for (const key of next.keys()) {\n if (key.startsWith(\"xapps_payment_\")) keysToDelete.push(key);\n }\n keysToDelete.push(\"xapps_monetization_intent_id\");\n for (const key of keysToDelete) next.delete(key);\n const rendered = next.toString();\n return rendered ? `?${rendered}` : \"\";\n}\n\nfunction formatDateTime(value: unknown, locale: string): string {\n const raw = readString(value);\n if (!raw) return \"\";\n const parsed = new Date(raw);\n if (Number.isNaN(parsed.getTime())) return raw;\n try {\n return parsed.toLocaleString(locale || undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n } catch {\n return parsed.toISOString();\n }\n}\n\nfunction readVirtualCurrencyDefinition(value: unknown): Record<string, unknown> | null {\n const record = asRecord(value);\n if (!record) return null;\n const code = readString(record.code);\n const name = readString(record.name);\n if (!code && !name) return null;\n return record;\n}\n\nfunction formatVirtualCurrencyLabel(\n value: unknown,\n options?: {\n includeCode?: boolean;\n },\n): string {\n const record = readVirtualCurrencyDefinition(value);\n if (!record) return \"\";\n const code = readString(record.code);\n const name = readString(record.name);\n if (options?.includeCode && name && code && name.toLowerCase() !== code.toLowerCase()) {\n return `${name} (${code})`;\n }\n return name || code;\n}\n\nfunction formatVirtualCurrencyAmount(value: unknown, virtualCurrency: unknown): string {\n const amount = readString(value);\n if (!amount) return \"\";\n const currencyLabel = formatVirtualCurrencyLabel(virtualCurrency);\n return currencyLabel ? `${amount} ${currencyLabel}` : amount;\n}\n\nfunction normalizeUsageCreditSummary(value: unknown): UsageCreditSummary | null {\n const summary = asRecord(value);\n if (!summary) return null;\n const availableCount = readNumber(summary.available_count) ?? 0;\n const availableSessionBackedCount = readNumber(summary.available_session_backed_count) ?? 0;\n const availableLedgerOnlyCount = readNumber(summary.available_ledger_only_count) ?? 0;\n const reservedCount = readNumber(summary.reserved_count) ?? 0;\n const reservedActiveCount = readNumber(summary.reserved_active_count) ?? reservedCount;\n const reservedStaleCount = readNumber(summary.reserved_stale_count) ?? 0;\n const consumedCount = readNumber(summary.consumed_count) ?? 0;\n const byToolRaw = Array.isArray(summary.by_tool) ? summary.by_tool : [];\n const byTool = byToolRaw\n .map((entry): UsageCreditToolSummary | null => {\n const record = asRecord(entry);\n if (!record) return null;\n const toolName = readString(record.tool_name);\n if (!toolName) return null;\n return {\n tool_name: toolName,\n available_count: readNumber(record.available_count) ?? 0,\n available_session_backed_count: readNumber(record.available_session_backed_count) ?? 0,\n available_ledger_only_count: readNumber(record.available_ledger_only_count) ?? 0,\n reserved_count: readNumber(record.reserved_count) ?? 0,\n reserved_active_count:\n readNumber(record.reserved_active_count) ?? readNumber(record.reserved_count) ?? 0,\n reserved_stale_count: readNumber(record.reserved_stale_count) ?? 0,\n consumed_count: readNumber(record.consumed_count) ?? 0,\n };\n })\n .filter((entry): entry is UsageCreditToolSummary => Boolean(entry))\n .filter(\n (entry) =>\n entry.available_count > 0 ||\n entry.available_ledger_only_count > 0 ||\n entry.reserved_active_count > 0 ||\n entry.reserved_stale_count > 0,\n );\n if (\n availableCount <= 0 &&\n availableLedgerOnlyCount <= 0 &&\n reservedCount <= 0 &&\n consumedCount <= 0 &&\n byTool.length === 0\n ) {\n return null;\n }\n return {\n available_count: availableCount,\n available_session_backed_count: availableSessionBackedCount,\n available_ledger_only_count: availableLedgerOnlyCount,\n reserved_count: reservedCount,\n reserved_active_count: reservedActiveCount,\n reserved_stale_count: reservedStaleCount,\n consumed_count: consumedCount,\n updated_at: readString(summary.updated_at) || null,\n by_tool: byTool,\n };\n}\n\nfunction normalizeGuardPolicyKind(policy: unknown): string {\n if (policy === \"all\" || policy === \"any\") return policy;\n const policyObj = asRecord(policy);\n const mode = readString(policyObj?.mode);\n return mode === \"any\" ? \"any\" : \"all\";\n}\n\nfunction defaultBlockingForTrigger(trigger: string): boolean {\n return !trigger.startsWith(\"after:\");\n}\n\nfunction humanizeSlug(slug: string): string {\n return String(slug || \"\")\n .trim()\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction buildMonetizationHookSummaryItems(manifest: Record<string, unknown> | null): GuardInfo[] {\n const monetization = asRecord(manifest?.monetization);\n const hooks = asRecord(monetization?.hooks);\n const afterPaymentCompleted = asRecord(\n hooks?.after_payment_completed ?? hooks?.afterPaymentCompleted,\n );\n if (!afterPaymentCompleted || readBoolean(afterPaymentCompleted.enabled, true) === false) {\n return [];\n }\n\n const baseItems: GuardInfo[] = [];\n const defaultInvoiceRef = readString(\n afterPaymentCompleted.invoice_ref ?? afterPaymentCompleted.invoiceRef,\n );\n baseItems.push({\n slug: \"xms_after_payment_completed\",\n label: defaultInvoiceRef ? `Payment completed \u00B7 ${defaultInvoiceRef}` : \"Payment completed\",\n trigger: \"after:payment_completed\",\n headless: true,\n blocking: false,\n order: null,\n policyKind: \"all\",\n });\n\n const byPaymentGuardRef = asRecord(\n afterPaymentCompleted.by_payment_guard_ref ?? afterPaymentCompleted.byPaymentGuardRef,\n );\n for (const [paymentGuardRef, rawValue] of Object.entries(byPaymentGuardRef ?? {})) {\n const config = asRecord(rawValue);\n if (!config || readBoolean(config.enabled, true) === false) continue;\n const invoiceRef = readString(config.invoice_ref ?? config.invoiceRef);\n baseItems.push({\n slug: `xms_after_payment_completed_${paymentGuardRef}`,\n label: invoiceRef\n ? `Payment completed \u00B7 ${paymentGuardRef} \u00B7 ${invoiceRef}`\n : `Payment completed \u00B7 ${paymentGuardRef}`,\n trigger: \"after:payment_completed\",\n headless: true,\n blocking: false,\n order: null,\n policyKind: \"all\",\n });\n }\n\n return baseItems;\n}\n\nfunction humanizeTrigger(trigger: string, translate: TranslateFunction): string {\n const normalized = String(trigger || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"before:tool_run\") {\n return translate(\"xapp.trigger_before_tool_run\", undefined, \"Before running this app\");\n }\n if (normalized === \"after:tool_run\") {\n return translate(\"xapp.trigger_after_tool_run\", undefined, \"After this app finishes\");\n }\n if (normalized === \"before:widget_open\") {\n return translate(\"xapp.trigger_before_widget_open\", undefined, \"Before opening this app\");\n }\n if (normalized === \"after:widget_open\") {\n return translate(\"xapp.trigger_after_widget_open\", undefined, \"After opening this app\");\n }\n if (!normalized) return translate(\"xapp.trigger_default\", undefined, \"App stage\");\n return humanizeSlug(normalized.replace(/:/g, \" \"));\n}\n\nfunction describeGuardChain(policyKind: string, translate: TranslateFunction): string {\n return policyKind === \"any\"\n ? translate(\"xapp.policy_any\", undefined, \"Any one satisfies\")\n : translate(\"xapp.policy_all\", undefined, \"All steps apply\");\n}\n\nexport default function XappDetailPage() {\n return <XappDetailPageContent />;\n}\n\nexport { XappDetailPage };\n\nexport function XappPlansPage() {\n return <XappDetailPageContent renderMode=\"plans_only\" />;\n}\n\nfunction XappDetailPageContent(props?: { renderMode?: \"full\" | \"plans_only\" }) {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const { xappId } = useParams();\n const loc = useLocation();\n const token = useQueryToken();\n const action = useQueryAction();\n const queryToolName = useQueryToolName();\n const routeQuery = useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n const routeSource = String(routeQuery.get(\"from\") || \"\")\n .trim()\n .toLowerCase();\n const focusedSection = String(routeQuery.get(\"focus\") || \"\")\n .trim()\n .toLowerCase();\n const requestedPaywallSlug = String(routeQuery.get(\"paywall\") || \"\")\n .trim()\n .toLowerCase();\n const selectedPaywallPackageSlug = String(routeQuery.get(\"paywallPackage\") || \"\")\n .trim()\n .toLowerCase();\n const paymentReturnStatus = String(routeQuery.get(\"xapps_payment_status\") || \"\")\n .trim()\n .toLowerCase();\n const routeView = String(routeQuery.get(\"view\") || \"\")\n .trim()\n .toLowerCase();\n const paymentReturnSessionId = String(routeQuery.get(\"xapps_payment_session_id\") || \"\").trim();\n const paymentReturnIntentId = String(routeQuery.get(\"xapps_monetization_intent_id\") || \"\").trim();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const autoOpenedWidgetKeyRef = useRef<string>(\"\");\n const plansSectionRef = useRef<HTMLDivElement | null>(null);\n const visibilityRefreshRef = useRef<number>(0);\n\n const canMutate = host.canMutate ? host.canMutate() : true;\n const renderMode = props?.renderMode === \"plans_only\" ? \"plans_only\" : \"full\";\n const plansOnlyMode = renderMode === \"plans_only\";\n const widgetHostedPlansMode = plansOnlyMode && routeSource === \"widget\";\n const addAppLabel =\n env?.copy?.addAppLabel || t(\"xapp.add_to_workspace\", undefined, \"Add to workspace\");\n const removeAppLabel =\n env?.copy?.removeAppLabel ||\n t(\"xapp.remove_from_workspace\", undefined, \"Remove from workspace\");\n const updateAppLabel = env?.copy?.updateAppLabel || t(\"xapp.update_app\", undefined, \"Update app\");\n const openAppLabel = env?.copy?.openAppLabel || t(\"xapp.open_app\", undefined, \"Open app\");\n const hasSubject = Boolean(host.subjectId);\n const installationPolicyResolved = env?.installationPolicyResolved !== false;\n const mutationControlsReady = installationPolicyResolved || !hasSubject || !canMutate;\n const installationPolicy = env?.installationPolicy ?? host.installationPolicy ?? null;\n\n const [data, setData] = useState<Record<string, unknown> | null>(null);\n const [monetization, setMonetization] = useState<MarketplaceXappMonetizationState | null>(null);\n const [monetizationHistory, setMonetizationHistory] = useState<Record<string, unknown> | null>(\n null,\n );\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n\n const [termsOpen, setTermsOpen] = useState(false);\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [termsAction, setTermsAction] = useState<\"none\" | \"install\" | \"update\">(\"none\");\n const [termsWidgetId, setTermsWidgetId] = useState<string | null>(null);\n const [termsWidgetName, setTermsWidgetName] = useState<string | null>(null);\n const [removeConfirmOpen, setRemoveConfirmOpen] = useState(false);\n const [guardSummaryOpen, setGuardSummaryOpen] = useState(false);\n const [checkoutBusyPackageSlug, setCheckoutBusyPackageSlug] = useState(\"\");\n const [checkoutError, setCheckoutError] = useState<string | null>(null);\n const [checkoutNotice, setCheckoutNotice] = useState<string | null>(null);\n const [subscriptionActionBusy, setSubscriptionActionBusy] = useState<\"\" | \"cancel\" | \"refresh\">(\n \"\",\n );\n const [subscriptionActionError, setSubscriptionActionError] = useState<string | null>(null);\n const [cancelSubscriptionConfirmOpen, setCancelSubscriptionConfirmOpen] = useState(false);\n const checkoutFinalizeKeyRef = useRef<string>(\"\");\n\n const installationsByXappId = hasSubject ? host.getInstallationsByXappId() : {};\n const routeInstallationId = String(routeQuery.get(\"installationId\") || \"\").trim();\n const routePreviewAt = String(\n routeQuery.get(\"previewAt\") || routeQuery.get(\"preview_at\") || \"\",\n ).trim();\n const installation =\n xappId && installationsByXappId[String(xappId)]\n ? installationsByXappId[String(xappId)]\n : xappId && routeInstallationId\n ? {\n installationId: routeInstallationId,\n xappId: String(xappId),\n }\n : null;\n const updateAvailable = Boolean(installation?.updateAvailable);\n const autoAvailableMode =\n mutationControlsReady &&\n installationPolicy?.mode === \"auto_available\" &&\n Boolean(hasSubject) &&\n canMutate;\n const autoUpdateMode =\n mutationControlsReady &&\n installationPolicy?.update_mode === \"auto_update_compatible\" &&\n Boolean(hasSubject) &&\n canMutate;\n const widgetsEnabled =\n Boolean(hasSubject) &&\n (Boolean(installation) || autoAvailableMode) &&\n (!updateAvailable || autoUpdateMode);\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const singleXappMode = env?.singleXappMode;\n const lifecyclePreviewEnabled = env?.devMode === true;\n const routeSurfaceView = routeView === \"history\" ? \"history\" : \"plans\";\n\n const refresh = useCallback(async () => {\n if (!xappId) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getCatalogXapp(String(xappId), {\n installationId: installation?.installationId ?? null,\n });\n setData(asRecord(res));\n } catch (e) {\n setError(readString(asRecord(e)?.message) || String(e));\n } finally {\n setBusy(false);\n }\n }, [client, installation?.installationId, xappId]);\n\n const refreshMonetization = useCallback(async () => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId || !host.subjectId || typeof client.getMyXappMonetization !== \"function\") {\n setMonetization(null);\n return;\n }\n try {\n const next = await client.getMyXappMonetization(currentXappId, {\n installationId: installation?.installationId ?? null,\n locale,\n previewAt: lifecyclePreviewEnabled ? routePreviewAt || null : null,\n });\n setMonetization(next);\n } catch {\n setMonetization(null);\n }\n }, [\n client,\n host.subjectId,\n installation?.installationId,\n lifecyclePreviewEnabled,\n locale,\n routePreviewAt,\n xappId,\n ]);\n\n const refreshMonetizationHistory = useCallback(async () => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (\n !currentXappId ||\n !host.subjectId ||\n typeof client.getMyXappMonetizationHistory !== \"function\"\n ) {\n setMonetizationHistory(null);\n return;\n }\n try {\n const next = await client.getMyXappMonetizationHistory(currentXappId, {\n installationId: installation?.installationId ?? null,\n limit: 12,\n });\n setMonetizationHistory(asRecord(next));\n } catch {\n setMonetizationHistory(null);\n }\n }, [client, host.subjectId, installation?.installationId, xappId]);\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"xapp-detail\",\n params: { xappId },\n });\n // Intentionally avoid depending on the whole host object here.\n // The host changes when installations refresh, and re-running this effect\n // would re-trigger the page fetch and make the plans/paywall redraw.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refresh, xappId]);\n\n useEffect(() => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId: currentXappId,\n installationId: installation?.installationId ?? null,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installation?.installationId, xappId]);\n\n useEffect(() => {\n void refreshMonetization();\n }, [refreshMonetization]);\n\n useEffect(() => {\n void refreshMonetizationHistory();\n }, [refreshMonetizationHistory]);\n\n useEffect(() => {\n function handleVisibilityRefresh() {\n if (typeof document === \"undefined\" || document.visibilityState !== \"visible\") return;\n const now = Date.now();\n if (now - visibilityRefreshRef.current < 1500) return;\n visibilityRefreshRef.current = now;\n void refresh();\n void refreshMonetization();\n void refreshMonetizationHistory();\n }\n document.addEventListener(\"visibilitychange\", handleVisibilityRefresh);\n return () => {\n document.removeEventListener(\"visibilitychange\", handleVisibilityRefresh);\n };\n }, [refresh, refreshMonetization, refreshMonetizationHistory]);\n\n const manifest = asRecord(data?.manifest);\n const xappRecord = asRecord(data?.xapp);\n const versionRecord = asRecord(data?.version);\n const publisherRecord = asRecord(xappRecord?.publisher);\n const title =\n resolveMarketplaceText(manifest?.title as any, locale) ||\n readString(xappRecord?.name) ||\n t(\"xapp.kicker_default\", undefined, \"Xapp\");\n const description =\n resolveMarketplaceText(manifest?.description as any, locale) ||\n readString(xappRecord?.description) ||\n \"\";\n const imageUrl = readString(manifest?.image) || \"https://picsum.photos/seed/xapps-detail/840/360\";\n\n const widgets: Record<string, unknown>[] = Array.isArray(data?.widgets)\n ? data.widgets.filter((widget): widget is Record<string, unknown> => Boolean(asRecord(widget)))\n : [];\n const defaultWidget = useMemo(() => {\n const def = widgets.find((w) => readBoolean(w.default, false));\n return def || widgets[0] || null;\n }, [widgets]);\n const requestedWidget = useMemo(() => {\n const desiredToolName = readString(queryToolName);\n if (!desiredToolName) return defaultWidget;\n return (\n widgets.find((widget) => readString(widget.bind_tool_name) === desiredToolName) ||\n defaultWidget\n );\n }, [defaultWidget, queryToolName, widgets]);\n\n const backTo = {\n pathname: isEmbedded ? \"/embed/catalog\" : \"..\",\n search: tokenSearch,\n };\n const marketplaceRootHref = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n const detailHref = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(xappId ?? \"\"))}`\n : `/marketplace/xapps/${encodeURIComponent(String(xappId ?? \"\"))}`,\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (installation?.installationId) qs.set(\"installationId\", installation.installationId);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n };\n\n const terms = asRecord(manifest?.terms);\n const termsTitle =\n resolveMarketplaceText(terms?.title as any, locale) ||\n t(\"xapp.terms_title\", undefined, \"Terms & Conditions\");\n const termsText = resolveMarketplaceText(terms?.text as any, locale) || readString(terms?.text);\n const termsUrl = readString(terms?.url);\n const hasTermsContent = Boolean(termsText || termsUrl);\n const requiresTerms = Boolean(terms || action === \"install\" || action === \"update\");\n\n function requestInstallForWidget(\n widgetId: string | null,\n widgetName: string | null = null,\n acceptedTerms = false,\n openAfterInstall = false,\n ) {\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: widgetId,\n xappTitle: String(title),\n widgetName,\n openAfterInstall,\n subjectId: host.subjectId ?? null,\n ...(acceptedTerms ? { termsAccepted: true } : {}),\n });\n }\n\n function requestUpdateForWidget(widgetId: string | null, acceptedTerms = false) {\n if (!installation?.installationId || !host.requestUpdate) return;\n const activeWidget =\n widgetId && Array.isArray(widgets)\n ? widgets.find((entry) => readString(entry.id) === widgetId) || null\n : null;\n host.requestUpdate({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n widgetId,\n xappTitle: String(title),\n widgetName:\n resolveMarketplaceText(activeWidget?.title as any, locale) ||\n readString(activeWidget?.name) ||\n null,\n ...(acceptedTerms ? { termsAccepted: true } : {}),\n });\n }\n\n function openInstalledWidget(widgetId: string, widgetName: string, toolName?: string) {\n if (!installation) return;\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName,\n toolName,\n });\n }\n\n function launchWidgetForSubject(widgetId: string, widgetName: string, toolName?: string) {\n if (!hasSubject || !widgetId) return;\n if (!installation) {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsWidgetId(widgetId);\n setTermsWidgetName(widgetName);\n setTermsOpen(true);\n return;\n }\n requestInstallForWidget(widgetId, widgetName, false, true);\n return;\n }\n if (updateAvailable) {\n if (autoUpdateMode && host.requestUpdate) {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsWidgetId(widgetId);\n setTermsWidgetName(widgetName);\n setTermsOpen(true);\n return;\n }\n requestUpdateForWidget(widgetId);\n }\n return;\n }\n openInstalledWidget(widgetId, widgetName, toolName);\n }\n\n useEffect(() => {\n if (action === \"install\") {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsWidgetId(readString(defaultWidget?.id) || null);\n setTermsWidgetName(resolveMarketplaceText(defaultWidget?.title as any, locale) || null);\n setTermsOpen(true);\n return;\n }\n if (action === \"update\" && installation) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n setTermsOpen(true);\n }\n }, [action, defaultWidget, installation, locale]);\n\n useEffect(() => {\n if (action !== \"open-widget\") return;\n if (env?.embedMode) return;\n if (!requestedWidget || !widgetsEnabled) return;\n\n const widget = requestedWidget;\n const widgetId = readString(widget?.id);\n if (!widgetId) return;\n\n const key = [\n String(xappId ?? \"\"),\n installation?.installationId || \"auto\",\n widgetId,\n readString(queryToolName),\n ].join(\":\");\n if (autoOpenedWidgetKeyRef.current === key) return;\n autoOpenedWidgetKeyRef.current = key;\n\n launchWidgetForSubject(\n widgetId,\n resolveMarketplaceText(widget?.title as any, locale) ||\n readString(widget?.widget_name) ||\n readString(widget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n readString(widget?.bind_tool_name),\n );\n }, [\n action,\n env?.embedMode,\n installation,\n launchWidgetForSubject,\n locale,\n queryToolName,\n requestedWidget,\n widgetsEnabled,\n xappId,\n ]);\n\n const requestsTo = buildRequestsHref({\n xappId: String(xappId ?? \"\"),\n isEmbedded,\n ...(token ? { token } : {}),\n });\n const detailForOperationalSurfaces = data as unknown as CatalogXappDetail | null;\n const visibleOperationalSurfaces = useMemo(\n () =>\n getVisibleOperationalSurfaces({\n detail: detailForOperationalSurfaces,\n client,\n env,\n isEmbedded,\n }),\n [client, detailForOperationalSurfaces, env, isEmbedded],\n );\n const secondarySurfaceLinks = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n ).filter((surface) => surface !== \"requests\");\n function getLocalizedOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"monetization\") {\n return t(\"activity.monetization_title\", undefined, \"Monetization\");\n }\n if (surface === \"payments\") {\n return t(\"activity.payments_title\", undefined, \"Payments\");\n }\n if (surface === \"invoices\") {\n return t(\"activity.invoices_title\", undefined, \"Invoices\");\n }\n if (surface === \"notifications\") {\n return t(\"activity.notifications_title\", undefined, \"Notifications\");\n }\n return t(\"activity.requests_title\", undefined, \"Requests\");\n }\n const publisherSlug = readString(publisherRecord?.slug);\n const publisherName = readString(publisherRecord?.name) || publisherSlug;\n const publisherTo = publisherSlug\n ? {\n pathname: isEmbedded\n ? `/publishers/${encodeURIComponent(publisherSlug)}`\n : `/marketplace/publishers/${encodeURIComponent(publisherSlug)}`,\n search: tokenSearch,\n }\n : null;\n const guardSummary = useMemo(() => {\n const guardsRaw = Array.isArray(manifest?.guards) ? manifest.guards : [];\n const policyMap = asRecord(manifest?.guards_policy) ?? {};\n const guardItems: GuardInfo[] = guardsRaw\n .map((raw): GuardInfo | null => {\n const guard = asRecord(raw);\n if (!guard) return null;\n const trigger = readString(guard.trigger);\n const slug = readString(guard.slug);\n if (!trigger || !slug) return null;\n const policyKind = normalizeGuardPolicyKind(policyMap[trigger]);\n return {\n slug,\n trigger,\n headless: readBoolean(guard.headless, true),\n blocking: readBoolean(guard.blocking, defaultBlockingForTrigger(trigger)),\n order: readNumber(guard.order),\n policyKind,\n };\n })\n .filter((item): item is GuardInfo => Boolean(item));\n const items: GuardInfo[] = [...guardItems, ...buildMonetizationHookSummaryItems(manifest)].sort(\n (a, b) => {\n const orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n if (orderA !== orderB) return orderA - orderB;\n if (a.trigger !== b.trigger) return a.trigger.localeCompare(b.trigger);\n return a.slug.localeCompare(b.slug);\n },\n );\n const byTrigger = new Map<string, GuardInfo[]>();\n for (const item of items) {\n const existing = byTrigger.get(item.trigger) ?? [];\n existing.push(item);\n byTrigger.set(item.trigger, existing);\n }\n return { items, byTrigger };\n }, [manifest]);\n const usageCreditSummary = useMemo(\n () => normalizeUsageCreditSummary(data?.usage_credit_summary),\n [data?.usage_credit_summary],\n );\n const monetizationAccessProjection =\n (monetization?.access_projection as\n | MarketplaceMonetizationAccessProjection\n | null\n | undefined) ?? null;\n const monetizationPaywalls = useMemo(\n () => listXappMonetizationPaywalls(monetization?.paywalls),\n [monetization?.paywalls],\n );\n const selectedPaywall = useMemo(\n () =>\n monetizationPaywalls.find(\n (item) => readString(asRecord(item)?.slug).trim().toLowerCase() === requestedPaywallSlug,\n ) ||\n selectXappMonetizationPaywall({\n paywalls: monetizationPaywalls,\n placement: \"default_paywall\",\n }) ||\n selectXappMonetizationPaywall({\n paywalls: monetizationPaywalls,\n placement: \"paywall\",\n }) ||\n monetizationPaywalls[0] ||\n null,\n [monetizationPaywalls, requestedPaywallSlug],\n );\n const selectedPaywallRenderModel = useMemo(\n () => (selectedPaywall ? buildMonetizationPaywallRenderModel(selectedPaywall) : null),\n [selectedPaywall],\n );\n const selectedPaywallPackageRecords = useMemo(\n (): MonetizationPaywallPackageRecord[] =>\n selectedPaywall ? flattenXappMonetizationPaywallPackages(selectedPaywall) : [],\n [selectedPaywall],\n );\n\n useEffect(() => {\n if (focusedSection !== \"plans\" || !plansSectionRef.current) return;\n if (typeof plansSectionRef.current.scrollIntoView === \"function\") {\n plansSectionRef.current.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }, [focusedSection]);\n\n useEffect(() => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId || !paymentReturnIntentId || !paymentReturnStatus) return;\n\n const handledKey = [\n currentXappId,\n paymentReturnIntentId,\n paymentReturnSessionId,\n paymentReturnStatus,\n ].join(\":\");\n if (checkoutFinalizeKeyRef.current === handledKey) return;\n checkoutFinalizeKeyRef.current = handledKey;\n\n const clearReturnParams = () => {\n const nextSearch = stripMonetizationCheckoutReturnParams(loc.search);\n void navigate(\n {\n pathname: loc.pathname,\n search: nextSearch,\n },\n { replace: true },\n );\n };\n\n if (paymentReturnStatus === \"cancelled\" || paymentReturnStatus === \"canceled\") {\n setCheckoutError(null);\n setCheckoutNotice(\n t(\"xapp.checkout_cancelled\", undefined, \"Checkout was cancelled before completion.\"),\n );\n clearReturnParams();\n return;\n }\n\n if (paymentReturnStatus === \"failed\") {\n setCheckoutNotice(null);\n setCheckoutError(\n t(\"xapp.checkout_failed\", undefined, \"Payment failed before access could be issued.\"),\n );\n clearReturnParams();\n return;\n }\n\n if (\n paymentReturnStatus !== \"paid\" ||\n typeof client.finalizeMyXappPurchasePaymentSession !== \"function\"\n ) {\n return;\n }\n\n let cancelled = false;\n setCheckoutNotice(\n t(\"xapp.checkout_finalizing\", undefined, \"Finalizing payment and refreshing access...\"),\n );\n setCheckoutError(null);\n\n void (async () => {\n try {\n await client.finalizeMyXappPurchasePaymentSession!({\n xappId: currentXappId,\n intentId: paymentReturnIntentId,\n });\n if (typeof client.getMyXappMonetization === \"function\") {\n const next = await client.getMyXappMonetization(currentXappId, {\n installationId: installation?.installationId ?? null,\n locale,\n previewAt: lifecyclePreviewEnabled ? routePreviewAt || null : null,\n });\n if (!cancelled) setMonetization(next);\n }\n if (!cancelled) {\n setCheckoutNotice(\n t(\"xapp.checkout_finalized\", undefined, \"Payment completed and access was refreshed.\"),\n );\n clearReturnParams();\n }\n } catch (error) {\n if (cancelled) return;\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\n \"xapp.checkout_finalize_failed\",\n undefined,\n \"Payment returned, but access refresh did not complete yet.\",\n );\n setCheckoutNotice(null);\n setCheckoutError(message);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [\n client,\n installation?.installationId,\n locale,\n loc.pathname,\n loc.search,\n navigate,\n paymentReturnIntentId,\n paymentReturnSessionId,\n paymentReturnStatus,\n lifecyclePreviewEnabled,\n routePreviewAt,\n t,\n xappId,\n ]);\n\n async function refreshSubscriptionLifecycle() {\n const currentXappId = String(xappId ?? \"\").trim();\n const contractId = readString(monetizationSubscription?.id);\n if (\n !currentXappId ||\n !contractId ||\n typeof client.refreshMyXappSubscriptionContractState !== \"function\"\n ) {\n return;\n }\n setSubscriptionActionBusy(\"refresh\");\n setSubscriptionActionError(null);\n try {\n await client.refreshMyXappSubscriptionContractState({\n xappId: currentXappId,\n contractId,\n });\n await refreshMonetization();\n await refreshMonetizationHistory();\n } catch (error) {\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\"xapp.subscription_refresh_failed\", undefined, \"Unable to refresh subscription state.\");\n setSubscriptionActionError(message);\n } finally {\n setSubscriptionActionBusy(\"\");\n }\n }\n\n async function cancelSubscriptionLifecycle() {\n const currentXappId = String(xappId ?? \"\").trim();\n const contractId = readString(monetizationSubscription?.id);\n if (\n !currentXappId ||\n !contractId ||\n typeof client.cancelMyXappSubscriptionContract !== \"function\"\n ) {\n return;\n }\n setSubscriptionActionBusy(\"cancel\");\n setSubscriptionActionError(null);\n try {\n await client.cancelMyXappSubscriptionContract({\n xappId: currentXappId,\n contractId,\n });\n await refreshMonetization();\n await refreshMonetizationHistory();\n setCancelSubscriptionConfirmOpen(false);\n } catch (error) {\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\"xapp.subscription_cancel_failed\", undefined, \"Unable to cancel this subscription.\");\n setSubscriptionActionError(message);\n } finally {\n setSubscriptionActionBusy(\"\");\n }\n }\n\n async function finalizeCurrentUserCheckoutIntent(currentXappId: string, intentId: string) {\n if (typeof client.finalizeMyXappPurchasePaymentSession !== \"function\") {\n throw new Error(\n t(\n \"xapp.checkout_finalize_unavailable\",\n undefined,\n \"Access refresh is not available for this checkout flow.\",\n ),\n );\n }\n setCheckoutNotice(\n t(\"xapp.checkout_finalizing\", undefined, \"Finalizing payment and refreshing access...\"),\n );\n setCheckoutError(null);\n await client.finalizeMyXappPurchasePaymentSession({\n xappId: currentXappId,\n intentId,\n });\n if (typeof client.getMyXappMonetization === \"function\") {\n const next = await client.getMyXappMonetization(currentXappId, {\n installationId: installation?.installationId ?? null,\n locale,\n previewAt: lifecyclePreviewEnabled ? routePreviewAt || null : null,\n });\n setMonetization(next);\n }\n setCheckoutNotice(\n t(\"xapp.checkout_finalized\", undefined, \"Payment completed and access was refreshed.\"),\n );\n }\n\n async function startPackageCheckout(packageSlug: string) {\n const normalizedSlug = packageSlug.trim().toLowerCase();\n if (\n !xappId ||\n typeof client.prepareMyXappPurchaseIntent !== \"function\" ||\n typeof client.createMyXappPurchasePaymentSession !== \"function\" ||\n !normalizedSlug\n ) {\n return;\n }\n if (!hasSubject || !canMutate) {\n setCheckoutError(\n t(\n \"xapp.checkout_session_required\",\n undefined,\n \"Checkout requires a subject-bound catalog session. Start from a signed host session to purchase plans.\",\n ),\n );\n return;\n }\n\n const pkg = selectedPaywallPackageRecords.find(\n (item: MonetizationPaywallPackageRecord) =>\n readString(item.packageSlug).trim().toLowerCase() === normalizedSlug,\n );\n if (pkg) {\n const purchasePolicy = getPackagePurchasePolicy(pkg);\n if (!purchasePolicy.canPurchase) {\n setCheckoutError(\n purchasePolicy.status === \"owned_additive_unlock\"\n ? t(\n \"xapp.checkout_owned_unlock_blocked\",\n undefined,\n \"This add-on unlock is already owned for the current monetization scope.\",\n )\n : t(\n \"xapp.checkout_current_plan_blocked\",\n undefined,\n \"This plan is already active for the current monetization scope.\",\n ),\n );\n return;\n }\n }\n const offeringId = readString(pkg?.offeringId);\n const packageId = readString(pkg?.packageId);\n const priceId = readString(pkg?.priceId);\n if (!offeringId || !packageId || !priceId) {\n setCheckoutError(\n t(\n \"xapp.checkout_package_missing\",\n undefined,\n \"This package is missing purchase metadata in the published paywall.\",\n ),\n );\n return;\n }\n\n setCheckoutBusyPackageSlug(normalizedSlug);\n setCheckoutError(null);\n setCheckoutNotice(null);\n try {\n const prepared = await client.prepareMyXappPurchaseIntent({\n xappId: String(xappId),\n offeringId,\n packageId,\n priceId,\n installationId: installation?.installationId ?? null,\n });\n const returnUrl = buildMonetizationCheckoutReturnUrl({\n currentHref: window.location.href,\n intentId: String(prepared.prepared_intent.purchase_intent_id || \"\"),\n packageSlug: normalizedSlug,\n });\n const payment = await client.createMyXappPurchasePaymentSession({\n xappId: String(xappId),\n intentId: String(prepared.prepared_intent.purchase_intent_id || \"\"),\n pageUrl: buildHostedPaymentPageUrl({\n currentHref: window.location.href,\n apiBaseUrl: env?.apiBaseUrl || null,\n }),\n returnUrl,\n cancelUrl: returnUrl,\n xappsResume: returnUrl,\n locale,\n });\n const paymentPageUrl = normalizeHostedCheckoutUrl({\n paymentPageUrl: readString(payment.payment_page_url),\n apiBaseUrl: env?.apiBaseUrl || null,\n });\n const paymentStatus = readString(payment.payment_session?.status).trim().toLowerCase();\n if (!paymentPageUrl && (paymentStatus === \"paid\" || paymentStatus === \"completed\")) {\n await finalizeCurrentUserCheckoutIntent(\n String(xappId),\n String(prepared.prepared_intent.purchase_intent_id || \"\"),\n );\n return;\n }\n if (!paymentPageUrl) {\n throw new Error(\n t(\n \"xapp.checkout_page_missing\",\n undefined,\n \"Payment page is not available for this package.\",\n ),\n );\n }\n navigateToHostedCheckout(paymentPageUrl);\n } catch (error) {\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\"xapp.checkout_start_failed\", undefined, \"Unable to start checkout for this package.\");\n setCheckoutError(message);\n } finally {\n setCheckoutBusyPackageSlug(\"\");\n }\n }\n\n const hasCatalogMonetization = hasMarketplaceCatalogMonetization(manifest);\n const monetizationAccess = asRecord(monetization?.access_projection);\n const monetizationSubscription = asRecord(monetization?.current_subscription);\n const additiveEntitlements = Array.isArray(monetization?.additive_entitlements)\n ? (monetization.additive_entitlements\n .map((item) => asRecord(item))\n .filter((item) => (item ? Object.keys(item).length > 0 : false)) as Array<\n Record<string, unknown>\n >)\n : [];\n const activeAdditiveEntitlements = additiveEntitlements.filter((item) => {\n const status = readString(item.status).trim().toLowerCase();\n return status === \"active\" || status === \"grace_period\";\n });\n const additiveUnlockLabels = activeAdditiveEntitlements\n .map((item) => readString(item.tier) || readString(item.product_slug))\n .filter(Boolean)\n .reduce<string[]>((labels, label) => {\n if (!labels.includes(label)) labels.push(label);\n return labels;\n }, []);\n const subscriptionLifecycle = buildXmsSubscriptionLifecycleSummary({\n currentSubscription: monetizationSubscription,\n locale,\n });\n const subscriptionManagement = asRecord(monetizationSubscription?.subscription_management);\n const subscriptionSubjectActions = asRecord(subscriptionManagement?.subject_actions);\n const canRefreshSubscriptionAction = readBoolean(\n asRecord(subscriptionSubjectActions?.refresh_status)?.available,\n true,\n );\n const canCancelSubscriptionAction = readBoolean(\n asRecord(subscriptionSubjectActions?.cancel_subscription)?.available,\n true,\n );\n const currentTier =\n readString(monetizationSubscription?.tier) || readString(monetizationAccess?.tier);\n const balanceState = readString(monetizationAccess?.balance_state);\n const subscriptionStatus = subscriptionLifecycle.statusLabel;\n const subscriptionCoverage = subscriptionLifecycle.coverageLabel;\n const subscriptionReason = subscriptionLifecycle.reasonLabel;\n const overdueSince = formatDateTime(subscriptionLifecycle.overdueSince, locale);\n const expiryBoundaryAt = formatDateTime(subscriptionLifecycle.expiryBoundaryAt, locale);\n const renewsAt = formatDateTime(subscriptionLifecycle.renewsAt, locale);\n const currentPeriodEndsAt = formatDateTime(subscriptionLifecycle.currentPeriodEndsAt, locale);\n const cancelledAt = formatDateTime(subscriptionLifecycle.cancelledAt, locale);\n const expiresAt = formatDateTime(subscriptionLifecycle.expiresAt, locale);\n const lifecyclePreviewAt = lifecyclePreviewEnabled ? formatDateTime(routePreviewAt, locale) : \"\";\n const creditsRemaining = readString(monetizationAccess?.credits_remaining);\n const accessVirtualCurrencyLabel = formatVirtualCurrencyLabel(\n monetizationAccess?.virtual_currency,\n {\n includeCode: true,\n },\n );\n const creditsRemainingLabel = formatVirtualCurrencyAmount(\n monetizationAccess?.credits_remaining,\n monetizationAccess?.virtual_currency,\n );\n const currentBalanceSummary = useMemo(() => {\n const historySource =\n (asRecord(monetizationHistory)?.history as Record<string, unknown> | null | undefined) ??\n monetizationHistory;\n const summarized = summarizeVirtualCurrencyBalances({\n history: historySource,\n }).balances;\n if (summarized.length > 0) {\n return summarized.map((item) => item.amountLabel).filter(Boolean);\n }\n if (creditsRemainingLabel) return [creditsRemainingLabel];\n return [];\n }, [creditsRemainingLabel, monetizationHistory]);\n const accessState = resolveMarketplaceDefaultAccessState({\n projection: monetizationAccessProjection,\n hasCatalogMonetization,\n availableLabel: t(\"xapp.access_state_available\", undefined, \"available\"),\n });\n const hasMonetizationState = Boolean(\n currentTier ||\n accessState ||\n subscriptionStatus ||\n subscriptionCoverage ||\n subscriptionReason ||\n overdueSince ||\n expiryBoundaryAt ||\n renewsAt ||\n currentPeriodEndsAt ||\n cancelledAt ||\n expiresAt ||\n lifecyclePreviewAt ||\n accessVirtualCurrencyLabel ||\n currentBalanceSummary.length > 0 ||\n creditsRemaining ||\n additiveUnlockLabels.length > 0,\n );\n const manifestScreenshots = Array.isArray(manifest?.screenshots)\n ? manifest.screenshots.map((shot) => readString(shot)).filter(Boolean)\n : [];\n const manifestTags = Array.isArray(manifest?.tags)\n ? manifest.tags.map((tag) => readString(tag)).filter(Boolean)\n : [];\n\n function getPackagePurchasePolicy(item: Record<string, unknown>) {\n return resolveMonetizationPackagePurchasePolicy({\n item,\n currentSubscription: monetizationSubscription,\n additiveEntitlements: activeAdditiveEntitlements,\n accessProjection: monetizationAccessProjection,\n });\n }\n const currentAccessCard = hasMonetizationState ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.current_access_title\", undefined, \"Current access\")}\n </h3>\n {currentTier ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.current_plan_label\", undefined, \"Current plan\")}\n </span>\n <span className=\"mx-meta-value\">{currentTier}</span>\n </div>\n ) : null}\n {accessState ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.access_state_label\", undefined, \"Access state\")}\n </span>\n <span className=\"mx-meta-value\">{accessState}</span>\n </div>\n ) : null}\n {subscriptionStatus ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_status_label\", undefined, \"Subscription state\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionStatus}</span>\n </div>\n ) : null}\n {subscriptionCoverage ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_coverage_label\", undefined, \"Coverage\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionCoverage}</span>\n </div>\n ) : null}\n {subscriptionReason ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_reason_label\", undefined, \"Status reason\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionReason}</span>\n </div>\n ) : null}\n {overdueSince ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_overdue_since_label\", undefined, \"Overdue since\")}\n </span>\n <span className=\"mx-meta-value\">{overdueSince}</span>\n </div>\n ) : null}\n {expiryBoundaryAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_expiry_boundary_label\", undefined, \"Expiry boundary\")}\n </span>\n <span className=\"mx-meta-value\">{expiryBoundaryAt}</span>\n </div>\n ) : null}\n {renewsAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.renews_at_label\", undefined, \"Renews at\")}</span>\n <span className=\"mx-meta-value\">{renewsAt}</span>\n </div>\n ) : null}\n {currentPeriodEndsAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.current_period_ends_label\", undefined, \"Current period ends\")}\n </span>\n <span className=\"mx-meta-value\">{currentPeriodEndsAt}</span>\n </div>\n ) : null}\n {cancelledAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.cancelled_at_label\", undefined, \"Cancelled at\")}\n </span>\n <span className=\"mx-meta-value\">{cancelledAt}</span>\n </div>\n ) : null}\n {expiresAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.expires_at_label\", undefined, \"Expires at\")}\n </span>\n <span className=\"mx-meta-value\">{expiresAt}</span>\n </div>\n ) : null}\n {lifecyclePreviewAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.lifecycle_preview_at_label\", undefined, \"Preview as of\")}\n </span>\n <span className=\"mx-meta-value\">{lifecyclePreviewAt}</span>\n </div>\n ) : null}\n {accessVirtualCurrencyLabel ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.virtual_currency_label\", undefined, \"Currency\")}\n </span>\n <span className=\"mx-meta-value\">{accessVirtualCurrencyLabel}</span>\n </div>\n ) : null}\n {currentBalanceSummary.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.current_balances_label\", undefined, \"Balances now\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n {currentBalanceSummary.map((label, index) => (\n <div key={`${label}:${index}`}>{label}</div>\n ))}\n </div>\n </div>\n ) : null}\n {creditsRemaining ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.credits_remaining_label\", undefined, \"Balance\")}\n </span>\n <span className=\"mx-meta-value\">{creditsRemainingLabel || creditsRemaining}</span>\n </div>\n ) : null}\n {additiveUnlockLabels.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.add_on_unlocks_label\", undefined, \"Add-on unlocks\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n {additiveUnlockLabels.map((label, index) => (\n <div key={`${label}:${index}`}>{label}</div>\n ))}\n </div>\n </div>\n ) : null}\n {lifecyclePreviewAt ? (\n <div className=\"mx-subtle-note\">\n {t(\n \"xapp.lifecycle_preview_hint\",\n undefined,\n \"Subscription state is being previewed for the selected time.\",\n )}\n </div>\n ) : null}\n {subscriptionActionError ? (\n <div className=\"mx-subtle-note\">{subscriptionActionError}</div>\n ) : null}\n {monetizationSubscription?.id &&\n ((canRefreshSubscriptionAction &&\n typeof client.refreshMyXappSubscriptionContractState === \"function\") ||\n (canCancelSubscriptionAction &&\n subscriptionLifecycle.canCancel &&\n typeof client.cancelMyXappSubscriptionContract === \"function\")) ? (\n <div className=\"mx-detail-actions\">\n {canRefreshSubscriptionAction &&\n typeof client.refreshMyXappSubscriptionContractState === \"function\" ? (\n <button\n className=\"mx-btn mx-btn-secondary\"\n disabled={subscriptionActionBusy !== \"\"}\n onClick={() => {\n void refreshSubscriptionLifecycle();\n }}\n >\n {subscriptionActionBusy === \"refresh\"\n ? t(\"xapp.subscription_refreshing\", undefined, \"Refreshing...\")\n : t(\"xapp.subscription_refresh_action\", undefined, \"Refresh status\")}\n </button>\n ) : null}\n {canCancelSubscriptionAction &&\n subscriptionLifecycle.canCancel &&\n typeof client.cancelMyXappSubscriptionContract === \"function\" ? (\n <button\n className=\"mx-btn mx-btn-outline\"\n data-variant=\"danger\"\n disabled={subscriptionActionBusy !== \"\"}\n onClick={() => setCancelSubscriptionConfirmOpen(true)}\n >\n {subscriptionActionBusy === \"cancel\"\n ? t(\"xapp.subscription_cancelling\", undefined, \"Cancelling...\")\n : t(\"xapp.subscription_cancel_action\", undefined, \"Cancel subscription\")}\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null;\n const plansCard = selectedPaywallRenderModel ? (\n <div className=\"mx-sidebar-card\" ref={plansSectionRef}>\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </h3>\n <div className=\"mx-paywall-card-head\">\n <div className=\"mx-paywall-card-kicker\">\n {t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </div>\n <div className=\"mx-paywall-card-title\">{selectedPaywallRenderModel.paywallLabel}</div>\n {selectedPaywallRenderModel.summary ? (\n <div className=\"mx-paywall-card-summary\">{selectedPaywallRenderModel.summary}</div>\n ) : null}\n </div>\n {selectedPaywallRenderModel.badges.length > 0 ? (\n <div className=\"mx-paywall-card-badges\">\n {selectedPaywallRenderModel.badges.map((badge: string) => (\n <span key={badge} className=\"mx-paywall-card-badge\">\n {badge}\n </span>\n ))}\n </div>\n ) : null}\n <div className=\"mx-paywall-card-packages\">\n {selectedPaywallRenderModel.packages.map(\n (item: MonetizationPaywallRenderPackage, index) => {\n const normalizedPackageSlug = item.packageSlug.trim().toLowerCase();\n const purchasePolicy = getPackagePurchasePolicy(item);\n const packageSignals = item.signals.filter(\n (signal: string) =>\n !(\n purchasePolicy.transitionKind === \"replace_recurring\" &&\n signal.toLowerCase().includes(\"trial\")\n ),\n );\n const isCurrentPackage = purchasePolicy.status === \"current_recurring_plan\";\n const isOwnedAdditive = purchasePolicy.status === \"owned_additive_unlock\";\n const isAdditiveCompanion =\n purchasePolicy.transitionKind === \"buy_additive_unlock\" &&\n subscriptionStatus === \"active\";\n const packageActionNote = isOwnedAdditive\n ? t(\n \"xapp.owned_unlock_note\",\n undefined,\n \"This add-on is already included in the current access.\",\n )\n : isCurrentPackage\n ? t(\n \"xapp.current_plan_note\",\n undefined,\n \"This plan is already active for this app.\",\n )\n : t(\n \"xapp.checkout_hint\",\n undefined,\n \"Checkout opens in a secure hosted payment page managed by the platform.\",\n );\n return (\n <div\n key={`${item.packageId || item.packageSlug || normalizedPackageSlug}:${index}`}\n className={`mx-paywall-card-package ${item.isDefault ? \"is-default\" : \"\"} ${\n selectedPaywallPackageSlug && normalizedPackageSlug === selectedPaywallPackageSlug\n ? \"is-selected\"\n : \"\"\n }`}\n >\n <div className=\"mx-paywall-card-package-head\">\n <div>\n <div className=\"mx-paywall-card-package-title\">{item.packageTitle}</div>\n {item.description ? (\n <div className=\"mx-paywall-card-package-description\">{item.description}</div>\n ) : null}\n </div>\n <div className=\"mx-paywall-card-money\">{item.moneyLabel}</div>\n </div>\n <div className=\"mx-paywall-card-package-meta\">\n <span className=\"mx-paywall-card-package-fit\">{item.fitLabel}</span>\n {selectedPaywallPackageSlug &&\n normalizedPackageSlug === selectedPaywallPackageSlug ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.selected_label\", undefined, \"Selected\")}\n </span>\n ) : null}\n {isOwnedAdditive ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.owned_unlock_label\", undefined, \"Owned unlock\")}\n </span>\n ) : null}\n {isCurrentPackage && !isOwnedAdditive ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.current_plan_label\", undefined, \"Current plan\")}\n </span>\n ) : null}\n {isAdditiveCompanion ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.additive_unlock_label\", undefined, \"Add-on with membership\")}\n </span>\n ) : null}\n {item.isDefault ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.default_label\", undefined, \"Default\")}\n </span>\n ) : null}\n </div>\n {packageSignals.length > 0 ? (\n <div className=\"mx-paywall-card-signals\">\n {packageSignals.map((signal: string) => (\n <span key={signal} className=\"mx-paywall-card-signal\">\n {signal}\n </span>\n ))}\n </div>\n ) : null}\n {isAdditiveCompanion ? (\n <div className=\"mx-paywall-card-summary\">\n {t(\n \"xapp.additive_unlock_message\",\n undefined,\n \"This one-time unlock is additive. It adds access on top of the active subscription instead of replacing it.\",\n )}\n </div>\n ) : null}\n <div className=\"mx-paywall-card-package-actions\">\n {typeof client.prepareMyXappPurchaseIntent === \"function\" &&\n typeof client.createMyXappPurchasePaymentSession === \"function\" &&\n hasSubject &&\n canMutate ? (\n <button\n className={`mx-btn ${\n purchasePolicy.canPurchase &&\n !checkoutBusyPackageSlug &&\n !isOwnedAdditive &&\n !isCurrentPackage\n ? \"mx-btn-primary\"\n : \"mx-btn-secondary\"\n }`}\n disabled={\n !purchasePolicy.canPurchase ||\n checkoutBusyPackageSlug === normalizedPackageSlug\n }\n onClick={() => void startPackageCheckout(item.packageSlug)}\n >\n {isOwnedAdditive\n ? t(\"xapp.owned_unlock_active\", undefined, \"Owned unlock active\")\n : isCurrentPackage\n ? t(\"xapp.current_plan_active\", undefined, \"Current plan active\")\n : checkoutBusyPackageSlug === normalizedPackageSlug\n ? t(\"xapp.checkout_starting\", undefined, \"Starting checkout...\")\n : isAdditiveCompanion\n ? t(\n \"xapp.additive_unlock_action\",\n undefined,\n \"Purchase add-on unlock\",\n )\n : t(\"xapp.checkout_action\", undefined, \"Start checkout\")}\n </button>\n ) : null}\n <div className=\"mx-paywall-card-package-note\">{packageActionNote}</div>\n </div>\n </div>\n );\n },\n )}\n </div>\n {checkoutNotice ? <div className=\"mx-paywall-card-summary\">{checkoutNotice}</div> : null}\n {checkoutError ? <div className=\"mx-payment-lock-error\">{checkoutError}</div> : null}\n </div>\n ) : null;\n const historySurfaceHtml = useMemo(\n () =>\n buildMonetizationHistorySurfaceHtml(\n {\n history:\n (asRecord(monetizationHistory)?.history as\n | Record<string, unknown>\n | null\n | undefined) ?? monetizationHistory,\n },\n {\n title: t(\"xapp.history_title\", undefined, \"History\"),\n subtitle: title\n ? t(\n \"xapp.history_route_subtitle\",\n { title },\n `Balances, recent activity, and purchases for ${title}.`,\n )\n : t(\n \"xapp.history_route_subtitle_default\",\n undefined,\n \"Balances, recent activity, and purchases for this app.\",\n ),\n locale,\n showHeader: false,\n },\n ),\n [locale, monetizationHistory, t, title],\n );\n if (plansOnlyMode) {\n return (\n <div className={`mx-detail-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n {error && <div className=\"mx-detail-error\">{error}</div>}\n {busy && !data ? (\n <div className=\"mx-sidebar-card mx-detail-empty mx-plans-route-empty\" aria-busy=\"true\">\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u25CE</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"xapp.plans_loading_title\", undefined, \"Loading plans\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {t(\n \"xapp.plans_loading_desc\",\n undefined,\n \"Preparing published plans, balances, and current access for this app.\",\n )}\n </div>\n </div>\n </div>\n ) : (\n <div className={`mx-plans-route ${widgetHostedPlansMode ? \"is-widget-hosted\" : \"\"}`}>\n {!widgetHostedPlansMode ? (\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceRootHref as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={detailHref as any}>{title}</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>\n {routeSurfaceView === \"history\"\n ? t(\"xapp.history_title\", undefined, \"History\")\n : t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </span>\n </div>\n ) : null}\n {!widgetHostedPlansMode ? (\n <div className=\"mx-plans-route-header\">\n <div className=\"mx-plans-route-title\">\n {routeSurfaceView === \"history\"\n ? t(\"xapp.history_title\", undefined, \"History\")\n : t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </div>\n <div className=\"mx-plans-route-subtitle\">\n {routeSurfaceView === \"history\"\n ? title\n ? t(\n \"xapp.history_route_subtitle\",\n { title },\n `Balances, recent activity, and purchases for ${title}.`,\n )\n : t(\n \"xapp.history_route_subtitle_default\",\n undefined,\n \"Balances, recent activity, and purchases for this app.\",\n )\n : title\n ? t(\n \"xapp.plans_route_subtitle\",\n { title },\n `Access, plans, and balances for ${title}.`,\n )\n : t(\n \"xapp.plans_route_subtitle_default\",\n undefined,\n \"Access, plans, and balances for this app.\",\n )}\n </div>\n </div>\n ) : null}\n <div className=\"mx-plans-route-grid\">\n <div className=\"mx-plans-route-main\">\n {currentAccessCard}\n {routeSurfaceView === \"history\" ? (\n <div\n className=\"mx-history-route-surface\"\n dangerouslySetInnerHTML={{ __html: historySurfaceHtml }}\n />\n ) : (\n plansCard || (\n <div className=\"mx-sidebar-card mx-detail-empty mx-plans-route-empty\">\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u25CE</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"xapp.no_plans_available\", undefined, \"No plans are currently available.\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {t(\n \"xapp.no_plans_available_desc\",\n undefined,\n \"Published plans will appear here when this app exposes a paywall.\",\n )}\n </div>\n </div>\n </div>\n )\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n }\n return (\n <div className={`mx-detail-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-detail-topbar\">\n <div className=\"mx-detail-topbar-left\">\n {!singleXappMode && (\n <Link to={backTo as any} relative=\"path\" className=\"mx-btn mx-btn-ghost\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n )}\n <div className=\"mx-detail-topbar-title\">{title}</div>\n </div>\n <div className=\"mx-detail-topbar-right\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </div>\n\n {error && <div className=\"mx-detail-error\">{error}</div>}\n\n {busy && !data ? (\n <>\n <div className=\"mx-detail-skeleton-header\" aria-busy=\"true\">\n <div className=\"mx-detail-skeleton-icon\" />\n <div className=\"mx-detail-skeleton-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"55%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"45%\" }} />\n </div>\n </div>\n <div className=\"mx-detail-skeleton-grid\">\n <div className=\"mx-detail-skeleton-sections\">\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"30%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"70%\" }} />\n </div>\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"40%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"60%\" }} />\n </div>\n </div>\n <div>\n <div className=\"mx-detail-skeleton-sidebar-card\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"45%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"65%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </>\n ) : (\n <>\n <header className=\"mx-detail-header\">\n <img src={imageUrl} alt={title} className=\"mx-detail-icon\" />\n <div className=\"mx-detail-info\">\n <div className=\"mx-detail-kicker\">\n {publisherName\n ? t(\n \"xapp.kicker_publisher\",\n { publisher: publisherName },\n `Publisher: ${publisherName}`,\n )\n : t(\"xapp.kicker_default\", undefined, \"Xapp\")}\n </div>\n <h1 className=\"mx-detail-title\">{title}</h1>\n {description ? <p className=\"mx-detail-subtitle\">{description}</p> : null}\n <div className=\"mx-detail-meta-row\">\n <div className=\"mx-card-slug\">{xappId}</div>\n {readString(versionRecord?.version) && (\n <div className=\"mx-card-version mx-detail-version-pill\">\n v{readString(versionRecord?.version)}\n </div>\n )}\n {updateAvailable ? (\n <div className=\"mx-detail-update-pill\">\n {t(\"xapp.update_available\", undefined, \"Update available\")}\n </div>\n ) : null}\n </div>\n </div>\n <div className=\"mx-detail-actions\">\n {canMutate && mutationControlsReady ? (\n <>\n {installation &&\n updateAvailable &&\n host.requestUpdate &&\n installationPolicy?.update_mode !== \"auto_update_compatible\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n setTermsOpen(true);\n return;\n }\n if (!installation.installationId) return;\n requestUpdateForWidget(null);\n }}\n >\n {updateAppLabel}\n </button>\n ) : null}\n\n {!installation ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsWidgetId(readString(defaultWidget?.id) || null);\n setTermsWidgetName(\n resolveMarketplaceText(defaultWidget?.title as any, locale) || null,\n );\n setTermsOpen(true);\n return;\n }\n requestInstallForWidget(\n readString(defaultWidget?.id) || null,\n resolveMarketplaceText(defaultWidget?.title as any, locale) || null,\n false,\n autoAvailableMode,\n );\n }}\n >\n {autoAvailableMode ? openAppLabel : addAppLabel}\n </button>\n ) : !autoAvailableMode ? (\n <button\n className=\"mx-btn mx-btn-outline\"\n data-variant=\"danger\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (!installation.installationId) return;\n setRemoveConfirmOpen(true);\n }}\n >\n {removeAppLabel}\n </button>\n ) : null}\n </>\n ) : null}\n </div>\n </header>\n\n <div className=\"mx-detail-grid\">\n <main className=\"mx-detail-main\">\n <section className=\"mx-detail-section mx-detail-section-about\">\n <h2 className=\"mx-section-title\">{t(\"xapp.about_title\", undefined, \"About\")}</h2>\n <div className=\"mx-detail-desc\">{description}</div>\n </section>\n\n <section className=\"mx-detail-section mx-detail-section-widgets\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.available_views_title\", undefined, \"Available Views\")}\n </h2>\n {!widgetsEnabled ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {!installation\n ? autoAvailableMode\n ? t(\n \"xapp.open_to_access_views\",\n undefined,\n \"Open this app to start and install it automatically for your workspace.\",\n )\n : t(\n \"xapp.add_to_access_views\",\n undefined,\n \"Add this app to your workspace to access its available views.\",\n )\n : updateAvailable\n ? autoUpdateMode\n ? t(\n \"xapp.update_to_access_views_auto\",\n undefined,\n \"Open a view to update the app automatically for your workspace.\",\n )\n : t(\n \"xapp.update_to_access_views\",\n undefined,\n \"An update is available. Please update the app to access its available views.\",\n )\n : !hasSubject\n ? t(\n \"xapp.load_as_user_to_access\",\n undefined,\n \"Load the catalog as a user to access this app.\",\n )\n : null}\n </div>\n ) : widgets.length === 0 ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {t(\n \"xapp.no_views_available\",\n undefined,\n \"No app views are currently available.\",\n )}\n </div>\n ) : (\n <div className=\"mx-detail-widget-list\">\n {widgets.map((w, idx) => {\n const name =\n resolveMarketplaceText(w.title as any, locale) ||\n readString(w.widget_name) ||\n readString(w.name) ||\n readString(w.id) ||\n t(\"common.widget\", undefined, \"Widget\");\n const disabled = !widgetsEnabled;\n const isDefault =\n readBoolean(w.default, false) ||\n (idx === 0 && !widgets.some((ww) => readBoolean(ww.default, false)));\n const widgetType = String(w.type || \"\").toLowerCase();\n return (\n <button\n key={String(w.id)}\n disabled={disabled}\n className={`mx-detail-widget-card ${disabled ? \"is-disabled\" : \"\"} ${isDefault ? \"is-default\" : \"\"}`}\n onClick={() => {\n if (!widgetsEnabled) return;\n const widgetId = readString(w.id);\n if (!widgetId) return;\n launchWidgetForSubject(widgetId, name, readString(w.bind_tool_name));\n }}\n >\n <div className=\"mx-detail-widget-icon\">\n {widgetType === \"read\" ? (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n )}\n </div>\n <div className=\"mx-detail-widget-body\">\n <div className=\"mx-detail-widget-name\">{name}</div>\n {readString(w.bind_tool_name) && (\n <div className=\"mx-detail-widget-tool\">\n {readString(w.bind_tool_name)}\n </div>\n )}\n <div className=\"mx-detail-widget-badges\">\n {isDefault && (\n <span className=\"mx-detail-widget-badge is-primary\">\n {t(\"xapp.widget_primary\", undefined, \"Primary\")}\n </span>\n )}\n {widgetType && (\n <span className=\"mx-detail-widget-badge\">{widgetType}</span>\n )}\n </div>\n </div>\n <div className=\"mx-detail-widget-action\">\n <span className=\"mx-detail-widget-action-label\">\n {t(\"xapp.widget_open\", undefined, \"Open\")}\n </span>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n <polyline points=\"12 5 19 12 12 19\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </section>\n <section className=\"mx-detail-section mx-detail-section-guards\">\n <div className=\"mx-detail-guard-header\">\n <h2 className=\"mx-section-title mx-section-title-tight\">\n {t(\"xapp.how_app_runs\", undefined, \"How This App Runs\")}\n </h2>\n <button\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n onClick={() => setGuardSummaryOpen((v) => !v)}\n >\n {guardSummaryOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"xapp.view_details\", undefined, \"View details\")}\n </button>\n </div>\n {!guardSummaryOpen ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n {guardSummary.items.length === 0 ? (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 2l7 4v4c0 4.42-2.98 8.28-7 9.5C5.98 18.28 3 14.42 3 10V6l7-4z\"\n stroke=\"#126bf1\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 10l2 2 4-4\"\n stroke=\"#126bf1\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-summary-text\">\n {guardSummary.items.length === 0\n ? t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )\n : t(\n \"xapp.guard_summary\",\n {\n itemCount: guardSummary.items.length,\n itemSuffix: guardSummary.items.length === 1 ? \"\" : \"s\",\n stageCount: guardSummary.byTrigger.size,\n stageSuffix: guardSummary.byTrigger.size === 1 ? \"\" : \"s\",\n },\n `This app includes ${guardSummary.items.length} run check${guardSummary.items.length === 1 ? \"\" : \"s\"} across ${guardSummary.byTrigger.size} stage${guardSummary.byTrigger.size === 1 ? \"\" : \"s\"}. Open details to review access, payment, or follow-up steps.`,\n )}\n </div>\n </div>\n ) : guardSummary.items.length === 0 ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mx-guard-summary-text\">\n {t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )}\n </div>\n </div>\n ) : (\n <div className=\"mx-guard-pipeline\">\n {Array.from(guardSummary.byTrigger.entries()).map(\n ([trigger, items], stageIdx) => (\n <div key={trigger} className=\"mx-guard-stage\">\n <div className=\"mx-guard-stage-header\">\n <div className=\"mx-guard-stage-number\">{stageIdx + 1}</div>\n <div className=\"mx-guard-stage-icon\">\n {trigger.startsWith(\"after:\") ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 8l3 3 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 3.5l6 4.5-6 4.5V3.5z\" fill=\"currentColor\" />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-stage-title\">\n {humanizeTrigger(trigger, t)}\n </div>\n <div className=\"mx-guard-stage-policy\">\n {describeGuardChain(items[0]?.policyKind || \"all\", t)}\n </div>\n </div>\n <div className=\"mx-guard-stage-body\">\n {items.map((guard, guardIdx) => (\n <div\n key={`${trigger}-${guard.slug}`}\n className={`mx-guard-row ${guard.blocking ? \"mx-guard-row--required\" : \"mx-guard-row--info\"}`}\n >\n <div className=\"mx-guard-row-left\">\n {guard.order !== null ? (\n <span className=\"mx-guard-row-order\">{guard.order}</span>\n ) : (\n <span className=\"mx-guard-row-order\">{guardIdx + 1}</span>\n )}\n <span\n className=\"mx-guard-row-name\"\n title={guard.label || guard.slug}\n >\n {guard.label ? guard.label : humanizeSlug(guard.slug)}\n </span>\n </div>\n <div className=\"mx-guard-row-right\">\n <span\n className={`mx-guard-indicator ${guard.headless ? \"mx-guard-indicator--auto\" : \"mx-guard-indicator--user\"}`}\n >\n {guard.headless ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"7\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M4.5 7l2 2 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"4.5\"\n r=\"2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M2 12c0-2.76 2.24-5 5-5s5 2.24 5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n <span>\n {guard.headless\n ? t(\"xapp.auto\", undefined, \"Auto\")\n : t(\"xapp.user_step\", undefined, \"User step\")}\n </span>\n </span>\n <span\n className={`mx-guard-severity ${guard.blocking ? \"mx-guard-severity--required\" : \"mx-guard-severity--optional\"}`}\n >\n {guard.blocking\n ? t(\"xapp.required\", undefined, \"Required\")\n : t(\"xapp.info\", undefined, \"Info\")}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n ),\n )}\n </div>\n )}\n </section>\n\n {manifestScreenshots.length > 0 && (\n <section className=\"mx-detail-section mx-detail-section-screenshots\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.screenshots_title\", undefined, \"Screenshots\")}\n </h2>\n <div className=\"mx-screenshots\">\n {manifestScreenshots.map((s, i) => (\n <img\n key={i}\n src={s}\n alt={t(\"xapp.screenshot_alt\", { index: i + 1 }, `Screenshot ${i + 1}`)}\n className=\"mx-screenshot\"\n />\n ))}\n </div>\n </section>\n )}\n </main>\n\n <aside className=\"mx-detail-sidebar\">\n {currentAccessCard}\n\n {usageCreditSummary ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.usage_credits_title\", undefined, \"Usage Credits\")}\n </h3>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.available_label\", undefined, \"Available\")}\n </span>\n <span className=\"mx-meta-value\">\n {t(\n \"xapp.ready_to_use\",\n { count: usageCreditSummary.available_count },\n `${usageCreditSummary.available_count} ready to use`,\n )}\n </span>\n </div>\n {usageCreditSummary.available_session_backed_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.source_label\", undefined, \"Source\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.linked_payment_sessions\",\n { count: usageCreditSummary.available_session_backed_count },\n `${usageCreditSummary.available_session_backed_count} linked to visible payment sessions`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.reserved_active_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.in_flight_label\", undefined, \"In flight\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_active_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.reserved_stale_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.needs_review_label\", undefined, \"Needs review\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_stale_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.available_ledger_only_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.invalid_label\", undefined, \"Invalid\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.invalid_credits\",\n { count: usageCreditSummary.available_ledger_only_count },\n `${usageCreditSummary.available_ledger_only_count} orphan ledger rows are not usable credits`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.by_tool.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.by_tool_label\", undefined, \"By tool\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-md\">\n {usageCreditSummary.by_tool.map((tool) => (\n <div key={tool.tool_name}>\n <strong>{tool.available_count}</strong>{\" \"}\n {t(\"xapp.for_label\", undefined, \"for\")} <code>{tool.tool_name}</code>\n {tool.available_ledger_only_count > 0\n ? ` \u00B7 ${t(\n \"xapp.invalid_short\",\n { count: tool.available_ledger_only_count },\n `${tool.available_ledger_only_count} invalid`,\n )}`\n : \"\"}\n {tool.reserved_active_count > 0\n ? ` \u00B7 ${t(\n \"xapp.in_flight_short\",\n { count: tool.reserved_active_count },\n `${tool.reserved_active_count} in flight`,\n )}`\n : \"\"}\n {tool.reserved_stale_count > 0\n ? ` \u00B7 ${t(\n \"xapp.stale_short\",\n { count: tool.reserved_stale_count },\n `${tool.reserved_stale_count} stale`,\n )}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {plansCard}\n\n {defaultWidget && hasSubject && (installation || autoAvailableMode) && (\n <button\n className=\"mx-btn mx-btn-primary mx-detail-primary-cta\"\n onClick={() => {\n const widgetId = readString(defaultWidget.id);\n if (!widgetId) return;\n launchWidgetForSubject(\n widgetId,\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n readString(defaultWidget?.widget_name) ||\n readString(defaultWidget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n readString(defaultWidget?.bind_tool_name),\n );\n }}\n >\n {openAppLabel}\n </button>\n )}\n\n {(env?.requestsEnabled !== false || secondarySurfaceLinks.length > 0) && (\n <div className=\"mx-sidebar-card mx-activity-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.activity_title\", undefined, \"Activity\")}\n </h3>\n {env?.requestsEnabled !== false && (\n <Link to={requestsTo} relative=\"path\" className=\"mx-activity-link\">\n <div className=\"mx-activity-link-icon mx-activity-link-icon-requests\">\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n </svg>\n </div>\n <span className=\"mx-activity-link-label\">\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n )}\n {secondarySurfaceLinks.map((surface: OperationalSurfaceKey) => {\n const iconClass =\n surface === \"monetization\"\n ? \"mx-activity-link-icon-monetization\"\n : surface === \"payments\"\n ? \"mx-activity-link-icon-payments\"\n : surface === \"invoices\"\n ? \"mx-activity-link-icon-invoices\"\n : \"mx-activity-link-icon-notifications\";\n return (\n <Link\n key={surface}\n to={buildOperationalSurfaceHref({\n surface,\n xappId: String(xappId ?? \"\"),\n token,\n isEmbedded,\n })}\n className=\"mx-activity-link\"\n >\n <div className={`mx-activity-link-icon ${iconClass}`}>\n {surface === \"monetization\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M4 19h16\" />\n <path d=\"M6 15V9\" />\n <path d=\"M12 15V5\" />\n <path d=\"M18 15v-3\" />\n </svg>\n ) : surface === \"payments\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"1\" y=\"4\" width=\"22\" height=\"16\" rx=\"2\" ry=\"2\" />\n <line x1=\"1\" y1=\"10\" x2=\"23\" y2=\"10\" />\n </svg>\n ) : surface === \"invoices\" ? (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\n <polyline points=\"14 2 14 8 20 8\" />\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\n <polyline points=\"10 9 9 9 8 9\" />\n </svg>\n ) : (\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n )}\n </div>\n <span className=\"mx-activity-link-label\">\n {getLocalizedOperationalSurfaceLabel(surface)}\n </span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n );\n })}\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.details_title\", undefined, \"Details\")}\n </h3>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.app_id_label\", undefined, \"App ID\")}\n </span>\n <code className=\"mx-meta-value mx-meta-code\">{xappId}</code>\n </div>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.status\", undefined, \"Status\")}</span>\n <span className=\"mx-meta-value\">\n {installation\n ? t(\"xapp.status_added\", undefined, \"Added\")\n : t(\"xapp.status_available\", undefined, \"Available\")}\n </span>\n </div>\n\n {publisherTo ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.publisher_label\", undefined, \"Publisher\")}\n </span>\n <Link to={publisherTo as any} className=\"mx-meta-value\">\n {publisherName}\n </Link>\n </div>\n ) : null}\n\n {manifestTags.length > 0 && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.tags_label\", undefined, \"Tags\")}</span>\n <div className=\"mx-tag-list\">\n {manifestTags.map((t) => (\n <span key={t} className=\"mx-tag\">\n {t}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {requiresTerms && (\n <div className=\"mx-detail-terms-link-wrap\">\n <button\n className=\"mx-btn mx-btn-ghost mx-detail-terms-link\"\n onClick={() => {\n setTermsAction(\"none\");\n setTermsOpen(true);\n }}\n >\n {t(\"xapp.view_terms\", undefined, \"View Terms & Conditions\")} \u2192\n </button>\n </div>\n )}\n </div>\n </aside>\n </div>\n\n {termsOpen && (\n <div className=\"mx-detail-modal-backdrop\" onClick={() => setTermsOpen(false)}>\n <div className=\"mx-sidebar-card mx-detail-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"mx-detail-modal-head\">\n <h2 className=\"mx-section-title mx-section-title-tight\">{termsTitle}</h2>\n <button\n onClick={() => setTermsOpen(false)}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"xapp.close_terms_dialog\", undefined, \"Close terms dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {termsText && (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{termsText}</div>\n )}\n {termsUrl && (\n <a\n href={termsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-detail-modal-link\"\n >\n {t(\"xapp.view_full_document\", undefined, \"View Full Document\")}\n </a>\n )}\n\n {(termsAction === \"install\" || termsAction === \"update\") && (\n <label className=\"mx-detail-terms-accept\">\n <input\n type=\"checkbox\"\n checked={termsAccepted}\n onChange={(e) => setTermsAccepted(e.target.checked)}\n className=\"mx-detail-terms-checkbox\"\n />\n <span className=\"mx-detail-terms-copy\">\n {t(\n \"xapp.accept_terms\",\n undefined,\n \"I have read and accept the terms and conditions.\",\n )}\n </span>\n </label>\n )}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button\n className=\"mx-btn mx-btn-outline\"\n onClick={() => {\n setTermsOpen(false);\n setTermsAction(\"none\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n }}\n >\n {t(\"common.cancel\", undefined, \"Cancel\")}\n </button>\n {termsAction === \"install\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted}\n onClick={() => {\n requestInstallForWidget(\n termsWidgetId ?? readString(defaultWidget?.id) ?? null,\n termsWidgetName ||\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n null,\n true,\n autoAvailableMode,\n );\n setTermsOpen(false);\n setTermsAction(\"none\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n }}\n >\n {t(\"xapp.accept_add_app\", undefined, \"Accept & Add app\")}\n </button>\n ) : termsAction === \"update\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted || !installation}\n onClick={() => {\n if (!installation) return;\n requestUpdateForWidget(termsWidgetId, true);\n setTermsOpen(false);\n setTermsAction(\"none\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n }}\n >\n {t(\"xapp.accept_update\", undefined, \"Accept & Update\")}\n </button>\n ) : null}\n </div>\n </div>\n </div>\n )}\n\n <ConfirmActionModal\n open={cancelSubscriptionConfirmOpen}\n title={t(\"xapp.subscription_cancel_title\", undefined, \"Cancel subscription?\")}\n description={t(\n \"xapp.subscription_cancel_description\",\n undefined,\n \"The subscription will stop renewing. Current access remains available until the current period ends.\",\n )}\n confirmLabel={t(\"xapp.subscription_cancel_action\", undefined, \"Cancel subscription\")}\n onCancel={() => setCancelSubscriptionConfirmOpen(false)}\n onConfirm={() => {\n void cancelSubscriptionLifecycle();\n }}\n />\n\n <ConfirmActionModal\n open={removeConfirmOpen}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={t(\n \"catalog.remove_app_description\",\n { title },\n `Remove ${title} from your current workspace? You can add it again later.`,\n )}\n confirmLabel={removeAppLabel}\n onCancel={() => setRemoveConfirmOpen(false)}\n onConfirm={() => {\n if (!host.requestUninstall || !installation?.installationId) return;\n host.requestUninstall({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\n setRemoveConfirmOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n", "import type { MarketplaceMonetizationAccessProjection } from \"../types\";\nimport { readString } from \"./readers\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readCurrentAccessFlag(value: unknown): boolean {\n return typeof value === \"boolean\" ? value : false;\n}\n\nexport function hasMarketplaceCatalogMonetization(manifest: unknown): boolean {\n const manifestRecord = asRecord(manifest);\n const monetization = asRecord(manifestRecord?.monetization);\n if (!monetization) return false;\n return [\"products\", \"offerings\", \"packages\", \"prices\"].some((key) => {\n const items = monetization[key];\n return Array.isArray(items) && items.length > 0;\n });\n}\n\nexport function hasMarketplaceCurrentAccess(\n projection: MarketplaceMonetizationAccessProjection | null | undefined,\n): boolean {\n if (!projection) return false;\n if (readCurrentAccessFlag(projection.has_current_access)) return true;\n\n const entitlementState = readString(projection.entitlement_state);\n const balanceState = readString(projection.balance_state);\n return (\n entitlementState === \"active\" ||\n entitlementState === \"grace_period\" ||\n balanceState === \"sufficient\"\n );\n}\n\nexport function resolveMarketplaceAccessState(input: {\n projection: MarketplaceMonetizationAccessProjection | null | undefined;\n hasCatalogMonetization?: boolean;\n availableLabel: string;\n}): string | null {\n const entitlementState = readString(input.projection?.entitlement_state);\n if (entitlementState && entitlementState !== \"inactive\") return entitlementState;\n return hasMarketplaceCurrentAccess(input.projection)\n ? input.availableLabel\n : entitlementState || null;\n}\n\nexport function resolveMarketplaceDefaultAccessState(input: {\n projection: MarketplaceMonetizationAccessProjection | null | undefined;\n hasCatalogMonetization?: boolean;\n availableLabel: string;\n}): string | null {\n const resolved = resolveMarketplaceAccessState(input);\n if (resolved && resolved !== \"inactive\") return resolved;\n if (input.projection && input.hasCatalogMonetization === false) {\n return input.availableLabel;\n }\n return resolved;\n}\n", "import { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport type { TranslationParams } from \"@xapps-platform/platform-i18n\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXappDetail } from \"../types\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { asRecord, normalizeExpandStage, readFirstString, readString } from \"../utils/readers\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getOperationalSurfaceLabel,\n getVisibleOperationalSurfaces,\n resolveOperationalSurfacePlacement,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport \"../marketplace.css\";\n\ntype ExpandStage = \"inline\" | \"focus\" | \"fullscreen\";\n\ntype NestedPendingExpand = {\n sourceWindow: Window | null;\n timeoutId: number;\n cleanupId: number | null;\n settled: boolean;\n onLateResult: ((value: Record<string, unknown>) => void) | null;\n resolve: (value: Record<string, unknown> | null) => void;\n};\n\ntype SessionExpiredUi = {\n title: string;\n message: string;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction readPaymentEvidenceParams(search: string): URLSearchParams {\n const out = new URLSearchParams();\n const qs = new URLSearchParams(String(search || \"\"));\n for (const [k, v] of qs.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n if (Array.from(out.keys()).length > 0) return out;\n const hostReturnUrl = readHostReturnUrl(search);\n if (!hostReturnUrl) return out;\n try {\n const host = new URL(hostReturnUrl);\n for (const [k, v] of host.searchParams.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n } catch {\n // ignore malformed host return URL\n }\n return out;\n}\n\nfunction toSessionExpiredUi(\n input: unknown,\n t: (key: string, params?: TranslationParams, fallback?: string) => string,\n): SessionExpiredUi {\n const data = asRecord(input);\n const reason = readString(data.reason).toLowerCase();\n const message = readFirstString(data.message);\n\n if (reason === \"logout\") {\n return {\n title: t(\"widget.session_ended_title\", undefined, \"Session ended\"),\n message:\n message ||\n t(\n \"widget.session_ended_message\",\n undefined,\n \"Your session ended. Go back and open the widget again.\",\n ),\n };\n }\n\n if (reason === \"token_refresh_failed\") {\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_refresh_failed\",\n undefined,\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n ),\n };\n }\n\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_default\",\n undefined,\n \"This widget session ended. Go back and open it again to continue.\",\n ),\n };\n}\n\nexport function WidgetView() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { installationId, widgetId } = useParams();\n const token = useQueryToken();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const shellRef = useRef<HTMLDivElement>(null);\n const nestedExpandSeqRef = useRef(0);\n const nestedExpandPendingRef = useRef<Map<string, NestedPendingExpand>>(new Map());\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n const [xappId, setXappId] = useState<string>(\"\");\n const [xappDetail, setXappDetail] = useState<CatalogXappDetail | null>(null);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n const [widgetToken, setWidgetToken] = useState<string>(\"\");\n const [widgetSessionContext, setWidgetSessionContext] = useState<{\n clientId: string;\n installationId: string;\n xappId: string;\n subjectId: string | null;\n requestId?: string | null;\n resultPresentation?: \"runtime_default\" | \"inline\" | \"publisher_managed\";\n locale?: string | null;\n } | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [sessionExpired, setSessionExpired] = useState<SessionExpiredUi | null>(null);\n const [hostNestedExpandStage, setHostNestedExpandStage] = useState<ExpandStage>(\"inline\");\n\n const loc = useLocation();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n\n const marketplaceTo = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: tokenSearch,\n };\n\n const xappTo = xappId\n ? {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(xappId)}`\n : `/marketplace/xapps/${encodeURIComponent(xappId)}`,\n search: tokenSearch,\n }\n : null;\n const visibleOperationalSurfaces = getVisibleOperationalSurfaces({\n detail: xappDetail,\n client,\n env,\n isEmbedded,\n });\n const linkedOperationalSurfaces = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n );\n\n const onBackToPortal = () => {\n host.notifyNavigation?.({\n path: \"/\",\n page: \"portal-home\",\n });\n };\n\n useEffect(() => {\n if (!installationId) return;\n let alive = true;\n void (async () => {\n try {\n const installs = host.getInstallationsByXappId();\n const inst = Object.values(installs || {}).find(\n (i) => i && String(i.installationId) === String(installationId),\n );\n if (inst && inst.xappId) {\n if (!alive) return;\n setXappId(inst.xappId);\n const res = await client.getCatalogXapp(inst.xappId, {\n installationId: String(installationId || \"\").trim() || null,\n });\n if (!alive) return;\n setXappDetail(res);\n const detail = asRecord(res);\n setXappTitle(\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name) ||\n \"App\",\n );\n }\n } catch {}\n })();\n return () => {\n alive = false;\n };\n }, [installationId, client, host, locale]);\n\n useEffect(() => {\n if (!xappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId,\n installationId,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installationId, xappId]);\n\n useEffect(() => {\n if (!installationId || !widgetId || !host.notifyNavigation) return;\n host.notifyNavigation({\n path: window.location.pathname,\n page: \"widget-view\",\n params: { installationId, widgetId },\n });\n }, [installationId, widgetId, host]);\n\n useEffect(() => {\n if (!installationId || !widgetId) return;\n let alive = true;\n void (async () => {\n try {\n const widgetTokenResponse = await client.getWidgetToken(installationId, widgetId);\n const resolvedWidgetId = readString(asRecord(widgetTokenResponse).widgetId);\n if (resolvedWidgetId && resolvedWidgetId !== widgetId) {\n navigate(\n {\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(resolvedWidgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(resolvedWidgetId)}`,\n search: tokenSearch,\n },\n { replace: true },\n );\n return;\n }\n const { token: wToken, context } = widgetTokenResponse;\n if (!alive) return;\n setSessionExpired(null);\n setWidgetToken(wToken);\n setWidgetSessionContext(context ?? null);\n } catch (e) {\n if (!alive) return;\n setWidgetSessionContext(null);\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n alive = false;\n };\n }, [installationId, widgetId, client, isEmbedded, navigate, tokenSearch]);\n\n async function remintWidgetSession() {\n if (!installationId || !widgetId) {\n throw new Error(\"Missing installationId/widgetId for widget refresh\");\n }\n const refreshed = await client.getWidgetToken(installationId, widgetId);\n const nextToken = String(refreshed?.token || \"\").trim();\n if (!nextToken) {\n throw new Error(\"Widget refresh did not return a token\");\n }\n setSessionExpired(null);\n setWidgetToken(nextToken);\n setWidgetSessionContext(refreshed?.context ?? null);\n return {\n token: nextToken,\n expires_in:\n Number.isFinite(Number(refreshed?.expires_in)) && Number(refreshed?.expires_in) > 0\n ? Number(refreshed?.expires_in)\n : undefined,\n };\n }\n\n function buildWidgetBridgeContext() {\n const context = widgetSessionContext;\n if (!context || !widgetToken) return null;\n const matchingWidget = Array.isArray(xappDetail?.widgets)\n ? xappDetail.widgets.find((item) => String(item?.id || \"\") === String(widgetId || \"\"))\n : null;\n return {\n type: \"XAPPS_WIDGET_CONTEXT\" as const,\n token: widgetToken,\n baseUrl: window.location.origin,\n hostOrigin: window.location.origin,\n installationId: context.installationId || String(installationId || \"\"),\n clientId: context.clientId,\n xappId: context.xappId || xappId,\n subjectId: context.subjectId,\n publisherUserId: null,\n email: null,\n bindToolName:\n readFirstString(\n asRecord(matchingWidget).bind_tool_name,\n asRecord(matchingWidget).bindToolName,\n ) || null,\n theme: host.theme || null,\n locale: context.locale || env?.locale || host.locale || null,\n };\n }\n\n useEffect(() => {\n return () => {\n for (const [, pending] of nestedExpandPendingRef.current) {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n pending.resolve(null);\n }\n nestedExpandPendingRef.current.clear();\n };\n }, []);\n\n useEffect(() => {\n const shell = shellRef.current;\n const rootEl = shell?.parentElement ?? null;\n const htmlEl = document.documentElement;\n const bodyEl = document.body;\n const expanded = env?.embedMode && hostNestedExpandStage !== \"inline\";\n\n if (!expanded) return;\n\n const prev = {\n htmlStyle: htmlEl.getAttribute(\"style\"),\n bodyStyle: bodyEl.getAttribute(\"style\"),\n rootStyle: rootEl?.getAttribute(\"style\") ?? null,\n };\n\n htmlEl.style.height = \"100%\";\n bodyEl.style.height = \"100%\";\n bodyEl.style.overflow = \"hidden\";\n bodyEl.style.margin = \"0\";\n if (rootEl) {\n rootEl.style.height = \"100%\";\n rootEl.style.display = \"flex\";\n rootEl.style.flexDirection = \"column\";\n rootEl.style.minHeight = \"0\";\n }\n\n return () => {\n if (prev.htmlStyle == null) htmlEl.removeAttribute(\"style\");\n else htmlEl.setAttribute(\"style\", prev.htmlStyle);\n if (prev.bodyStyle == null) bodyEl.removeAttribute(\"style\");\n else bodyEl.setAttribute(\"style\", prev.bodyStyle);\n if (rootEl) {\n if (prev.rootStyle == null) rootEl.removeAttribute(\"style\");\n else rootEl.setAttribute(\"style\", prev.rootStyle);\n }\n };\n }, [env?.embedMode, hostNestedExpandStage]);\n\n useEffect(() => {\n if (!env?.embedMode) return;\n const handler = (e: MessageEvent) => {\n if (e.source !== window.parent) return;\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (msgType !== \"XAPPS_UI_EXPAND_RESULT\") return;\n const data = asRecord(msg.data);\n const hostManaged = data.hostManaged === true;\n const expanded = data.expanded === true;\n const stage = normalizeExpandStage(data.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [env?.embedMode]);\n\n useEffect(() => {\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n const sourceIsParent = e.source === window.parent;\n const sourceIsSameOrigin = e.origin === window.location.origin;\n if (!sourceIsParent && !sourceIsSameOrigin) return;\n\n if (msgType === \"XAPPS_UI_NESTED_EXPAND_RESULT\" && sourceIsParent) {\n const data = asRecord(msg.data);\n const requestId = readString(data.requestId);\n if (!requestId) return;\n const pending = nestedExpandPendingRef.current.get(requestId);\n if (!pending) return;\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n if (pending.settled) {\n nestedExpandPendingRef.current.delete(requestId);\n pending.onLateResult?.(msg);\n return;\n }\n pending.settled = true;\n nestedExpandPendingRef.current.delete(requestId);\n pending.resolve(msg);\n return;\n }\n\n try {\n iframeRef.current?.contentWindow?.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n useEffect(() => {\n if (!widgetToken) return;\n\n const postExpandResultToWidget = (\n target: Window | null,\n result:\n | { ok: true; data: Record<string, unknown> }\n | { ok: false; error: { message: string; code?: string } },\n ) => {\n if (!target || typeof target.postMessage !== \"function\") return;\n try {\n target.postMessage(\n {\n type: \"XAPPS_UI_EXPAND_RESULT\",\n ...result,\n },\n \"*\",\n );\n } catch {}\n };\n\n const requestNestedHostExpand = async (\n sourceWindow: Window | null,\n input: Record<string, unknown>,\n onLateResult: ((value: Record<string, unknown>) => void) | null = null,\n ): Promise<Record<string, unknown> | null> => {\n if (!env?.embedMode || window.parent === window) return null;\n const requestId = `mx-nested-expand-${Date.now()}-${++nestedExpandSeqRef.current}`;\n const payload = {\n requestId,\n source: \"marketplace-widget-host\",\n installationId: installationId ? String(installationId) : \"\",\n widgetId: widgetId ? String(widgetId) : \"\",\n expanded: Boolean(input.expanded),\n stage: normalizeExpandStage(input.stage, Boolean(input.expanded)),\n mode: input.mode === \"expand\" || input.mode === \"collapse\" ? String(input.mode) : undefined,\n path: window.location.pathname,\n };\n\n const response = await new Promise<Record<string, unknown> | null>((resolve) => {\n const pending: NestedPendingExpand = {\n sourceWindow,\n timeoutId: 0,\n cleanupId: null,\n settled: false,\n onLateResult,\n resolve,\n };\n pending.timeoutId = window.setTimeout(() => {\n pending.settled = true;\n pending.cleanupId = window.setTimeout(() => {\n nestedExpandPendingRef.current.delete(requestId);\n }, 4000);\n resolve(null);\n }, 1200);\n nestedExpandPendingRef.current.set(requestId, pending);\n try {\n window.parent.postMessage(\n {\n type: \"XAPPS_UI_NESTED_EXPAND_REQUEST\",\n data: payload,\n },\n \"*\",\n );\n } catch {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n nestedExpandPendingRef.current.delete(requestId);\n resolve(null);\n }\n });\n\n return response;\n };\n\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n\n // Security check: only allow same-origin if it's from the catalog itself\n // or from the widget iframe (which we can't easily check origin of here\n // without extra plumbing, but we trust the type prefix).\n\n // Handle UI actions from the widget by forwarding them to the real host.\n // In embedMode, window.parent is the Host integration that frames the catalog.\n if (\n msgType === \"XAPPS_UI_EXPAND_REQUEST\" &&\n env?.embedMode &&\n e.source === iframeRef.current?.contentWindow\n ) {\n const data = asRecord(msg.data);\n void (async () => {\n const requestedExpanded = data.expanded === true;\n const requestedStage = normalizeExpandStage(data.stage, requestedExpanded);\n const applyNestedExpandResult = (nestedResp: Record<string, unknown> | null): boolean => {\n if (\n !nestedResp ||\n nestedResp.type !== \"XAPPS_UI_NESTED_EXPAND_RESULT\" ||\n nestedResp.ok !== true ||\n !nestedResp.data ||\n typeof nestedResp.data !== \"object\"\n ) {\n return false;\n }\n const nestedData = nestedResp.data as Record<string, unknown>;\n const hostManaged = nestedData.hostManaged === true;\n const expanded = nestedData.expanded === true;\n const stage = normalizeExpandStage(nestedData.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n postExpandResultToWidget(e.source as Window | null, {\n ok: true,\n data: {\n hostManaged,\n expanded: hostManaged && expanded,\n stage: hostManaged ? stage : \"inline\",\n ...(nestedData.nativeFullscreen === true ? { nativeFullscreen: true } : {}),\n },\n });\n return true;\n };\n // Optimistic UI reduction so the marketplace shell yields immediately while the\n // outer host processes nested expansion. We reconcile on ack or fallback.\n setHostNestedExpandStage(requestedExpanded ? requestedStage : \"inline\");\n const nestedResp = await requestNestedHostExpand(\n e.source as Window | null,\n data,\n (lateResp) => {\n if (applyNestedExpandResult(lateResp)) return;\n setHostNestedExpandStage(\"inline\");\n },\n );\n if (applyNestedExpandResult(nestedResp)) {\n return;\n }\n\n setHostNestedExpandStage(\"inline\");\n })();\n return;\n }\n\n if (msgType === \"XAPPS_UI_CONFIRM_REQUEST\") {\n if (!env?.embedMode) {\n const data = asRecord(msg.data);\n const requestId = msg.id;\n const prompt = String(\n data.message ||\n t(\n \"widget.confirm_continue_prompt\",\n undefined,\n \"This action requires confirmation. Continue?\",\n ),\n );\n const confirmed = typeof window.confirm === \"function\" ? window.confirm(prompt) : false;\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_UI_CONFIRM_RESULT\",\n id: requestId,\n ok: true,\n data: { confirmed },\n },\n \"*\",\n );\n } catch {}\n return;\n }\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (\n msgType === \"XAPPS_TOKEN_REFRESH_REQUEST\" &&\n e.source === iframeRef.current?.contentWindow\n ) {\n void (async () => {\n try {\n const refreshed = await remintWidgetSession();\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_TOKEN_REFRESH\",\n id: readString(msg.id) || undefined,\n data: {\n token: refreshed.token,\n ...(typeof refreshed.expires_in === \"number\"\n ? { expires_in: refreshed.expires_in }\n : {}),\n },\n },\n \"*\",\n );\n } catch {}\n } catch (refreshError) {\n const sessionExpiredUi = toSessionExpiredUi(\n {\n reason: \"token_refresh_failed\",\n message:\n readFirstString(asRecord(refreshError).message) ||\n \"Widget session refresh failed\",\n },\n t,\n );\n setSessionExpired(sessionExpiredUi);\n setWidgetToken(\"\");\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_SESSION_EXPIRED\",\n id: readString(msg.id) || undefined,\n data: {\n reason: \"token_refresh_failed\",\n channel: \"host\",\n recoverable: false,\n message: sessionExpiredUi.message,\n },\n },\n \"*\",\n );\n } catch {}\n }\n })();\n return;\n }\n\n if (\n (msgType === \"XAPPS_WIDGET_CONTEXT_REQUEST\" || msgType === \"XAPPS_WIDGET_READY\") &&\n e.source === iframeRef.current?.contentWindow\n ) {\n try {\n const payload = buildWidgetBridgeContext();\n (e.source as Window | null)?.postMessage(\n payload || {\n type: \"XAPPS_WIDGET_CONTEXT\",\n locale: env?.locale || null,\n },\n \"*\",\n );\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_SESSION_EXPIRED\") {\n setSessionExpired(toSessionExpiredUi(msg.data, t));\n setWidgetToken(\"\");\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_WIDGET\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const targetInstId = readFirstString(data.installationId, installationId);\n const targetWidgetId = readFirstString(data.widgetId);\n\n if (targetWidgetId && env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`\n : `/marketplace/widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n // If not in embed mode or no target widget, forward to host\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_OPERATIONAL_SURFACE\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const surface = readString(data.surface).toLowerCase();\n const placement =\n data.placement === \"in_router\" ||\n data.placement === \"side_panel\" ||\n data.placement === \"full_page\"\n ? data.placement\n : resolveOperationalSurfacePlacement({\n env,\n surface: surface as OperationalSurfaceKey,\n isEmbedded,\n });\n\n if (\n env?.embedMode &&\n xappId &&\n [\"requests\", \"monetization\", \"payments\", \"invoices\", \"notifications\"].includes(surface) &&\n placement === \"in_router\"\n ) {\n navigate(\n buildOperationalSurfaceHref({\n surface: surface as OperationalSurfaceKey,\n xappId,\n installationId: String(data.installationId || installationId || \"\"),\n requestId: String(data.requestId || \"\"),\n paymentSessionId: String(data.paymentSessionId || \"\"),\n invoiceId: String(data.invoiceId || \"\"),\n notificationId: String(data.notificationId || \"\"),\n token: token || undefined,\n isEmbedded,\n }),\n );\n return;\n }\n\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n // Forward all other XAPPS_* messages to host integration.\n // If it came from our own window (proxied from host), don't send it back to parent.\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [\n widgetToken,\n widgetSessionContext,\n installationId,\n widgetId,\n xappDetail,\n host,\n xappId,\n env?.embedMode,\n env?.locale,\n navigate,\n isEmbedded,\n tokenSearch,\n token,\n xappId,\n t,\n ]);\n\n useEffect(() => {\n if (!widgetToken || !env?.locale) return;\n try {\n iframeRef.current?.contentWindow?.postMessage(\n {\n type: \"XAPPS_LOCALE_CHANGED\",\n locale: env.locale,\n },\n \"*\",\n );\n } catch {}\n }, [env?.locale, widgetToken]);\n\n const widgetUrl = (() => {\n if (!widgetToken) return \"\";\n const params = new URLSearchParams({ token: widgetToken });\n const hostReturnUrl = readHostReturnUrl(loc.search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n if (env?.embedMode && hostNestedExpandStage !== \"inline\") {\n params.set(\"xapps_host_overlay\", \"1\");\n } else {\n params.delete(\"xapps_host_overlay\");\n }\n const paymentParams = readPaymentEvidenceParams(loc.search);\n for (const [k, v] of paymentParams.entries()) {\n params.set(k, v);\n }\n return `/embed/widgets/${widgetId}?${params.toString()}`;\n })();\n\n if (error) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.error\", undefined, \"Error\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">\n {t(\"widget.unable_to_load\", undefined, \"Unable to load widget\")}\n </div>\n <div className=\"mx-widget-error-desc\">{error}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n {xappTo && (\n <Link to={xappTo as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.view_app_details\", undefined, \"View app details\")}\n </Link>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n if (sessionExpired) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.session\", undefined, \"Session\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">{sessionExpired.title}</div>\n <div className=\"mx-widget-error-desc\">{sessionExpired.message}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n <button className=\"mx-btn mx-btn-ghost\" onClick={onBackToPortal}>\n {t(\"common.back_to_portal\", undefined, \"Back to Portal\")}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!widgetToken) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{xappTitle || t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n <div className=\"mx-widget-loading\">\n <div className=\"mx-spinner mx-spinner-lg\" />\n <div className=\"mx-widget-loading-title\">\n {t(\n \"widget.preparing\",\n {\n title: xappTitle || t(\"common.widget\", undefined, \"Widget\"),\n },\n \"Preparing {title}...\",\n )}\n </div>\n <div className=\"mx-widget-loading-sub\">\n {t(\n \"widget.secure_session_setup\",\n undefined,\n \"Setting up a secure session for this app.\",\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={shellRef}\n className={`mx-catalog-container mx-widget-view-shell ${isEmbedded ? \"is-embedded\" : \"\"} ${\n env?.embedMode && hostNestedExpandStage !== \"inline\" ? \"is-host-expanded\" : \"\"\n }`}\n data-expand-stage={env?.embedMode ? hostNestedExpandStage : \"inline\"}\n >\n {env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb mx-breadcrumb-top\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n {!env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n\n {!isEmbedded && xappId && linkedOperationalSurfaces.length > 0 && (\n <div className=\"mx-widget-surface-nav\">\n {linkedOperationalSurfaces.map((surface: OperationalSurfaceKey) => (\n <Link\n key={surface}\n to={buildOperationalSurfaceHref({\n surface,\n xappId,\n token,\n isEmbedded,\n })}\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n >\n {getOperationalSurfaceLabel(surface)}\n </Link>\n ))}\n </div>\n )}\n\n <div\n className=\"mx-widget-view-content\"\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}\n >\n <iframe\n ref={iframeRef}\n src={widgetUrl}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: hostNestedExpandStage === \"inline\" ? \"600px\" : \"0\",\n border: \"none\",\n borderRadius: \"var(--mx-radius)\",\n background: \"var(--mx-bg-card)\",\n }}\n title=\"Widget\"\n />\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype PublisherItem = {\n slug: string;\n name: string;\n xappCount: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nconst AVATAR_COLORS = [\n \"#2563eb\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#059669\",\n \"#d97706\",\n \"#dc2626\",\n \"#db2777\",\n \"#4f46e5\",\n \"#0d9488\",\n \"#ea580c\",\n];\n\nfunction avatarColor(slug: string): string {\n let hash = 0;\n for (let i = 0; i < slug.length; i++) {\n hash = slug.charCodeAt(i) + ((hash << 5) - hash);\n }\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nexport function PublishersPage() {\n const { client, env } = useMarketplace();\n const { t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const [q, setQ] = useState(\"\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<PublisherItem[]>([]);\n\n async function loadPublishers() {\n const res = await client.listCatalogXapps();\n const list = Array.isArray(res?.items) ? res.items : [];\n const grouped = new Map<string, PublisherItem>();\n for (const x of list) {\n const status = String(x.status || \"active\").toLowerCase();\n if (status !== \"active\") continue;\n const slug = String(x.publisher?.slug || \"\").trim();\n if (!slug) continue;\n const current = grouped.get(slug);\n if (current) {\n current.xappCount += 1;\n } else {\n grouped.set(slug, {\n slug,\n name: String(x.publisher?.name || slug),\n xappCount: 1,\n });\n }\n }\n setItems(Array.from(grouped.values()).sort((a, b) => a.name.localeCompare(b.name)));\n }\n\n useEffect(() => {\n void (async () => {\n setBusy(true);\n setError(null);\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }, [client]);\n\n const filtered = useMemo(() => {\n let list = items;\n if (env?.publishers && env.publishers.length > 0) {\n const allowed = new Set(env.publishers.map((v) => String(v)));\n list = list.filter((i) => allowed.has(i.slug));\n }\n const query = q.trim().toLowerCase();\n if (!query) return list;\n return list.filter((i) => {\n const hay = `${i.name} ${i.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, env?.publishers, q]);\n\n const totalXapps = useMemo(() => {\n return filtered.reduce((acc, p) => acc + p.xappCount, 0);\n }, [filtered]);\n\n const ordered = useMemo(() => {\n return [...filtered].sort((a, b) => {\n if (b.xappCount !== a.xappCount) return b.xappCount - a.xappCount;\n return a.name.localeCompare(b.name);\n });\n }, [filtered]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => {\n setBusy(true);\n void (async () => {\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_publishers_placeholder\",\n undefined,\n \"Search by name or slug...\",\n )}\n aria-label={t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n />\n </div>\n <div className=\"mx-stats-grid\">\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.publishers_count\", undefined, \"Publishers\")}\n </div>\n <div className=\"mx-stat-value\">{ordered.length}</div>\n </div>\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.catalog_xapps\", undefined, \"Catalog xApps\")}\n </div>\n <div className=\"mx-stat-value\">{totalXapps}</div>\n </div>\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-publisher-row\">\n <div className=\"mx-skeleton-line mx-skeleton-avatar\" />\n <div className=\"mx-skeleton-publisher-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {t(\n \"publisher.results_count\",\n { count: ordered.length, suffix: ordered.length === 1 ? \"\" : \"s\" },\n `${ordered.length} publisher${ordered.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {ordered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n </div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_publishers_found\", undefined, \"No publishers found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_default\",\n undefined,\n \"No publishers are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n ordered.map((p) => {\n const detailTo = isEmbedded\n ? `/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`\n : `/marketplace/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`;\n return (\n <div key={p.slug} className=\"mx-card\">\n <div className=\"mx-publisher-card-body\">\n <div\n className=\"mx-publisher-avatar\"\n style={{ background: avatarColor(p.slug) }}\n >\n {(p.name || p.slug).charAt(0)}\n </div>\n <div className=\"mx-publisher-card-info\">\n <div className=\"mx-publisher-card-slug\">{p.slug}</div>\n <h3 className=\"mx-publisher-card-name\">\n <Link to={detailTo}>{p.name}</Link>\n </h3>\n <div className=\"mx-publisher-card-count\">\n {p.xappCount} xapp{p.xappCount === 1 ? \"\" : \"s\"} in catalog\n </div>\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"publisher.view_publisher\", undefined, \"View publisher\")}\n </Link>\n <Link to={detailTo} className=\"mx-btn mx-btn-outline mx-btn-sm\">\n Browse xapps\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport type { CatalogXapp } from \"../types\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nexport function PublisherDetailPage() {\n const { publisherSlug = \"\" } = useParams();\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [q, setQ] = useState(\"\");\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n async function refresh() {\n if (!publisherSlug) return;\n setBusy(true);\n setError(null);\n try {\n const catalogRes = await client.listCatalogXapps();\n const list = Array.isArray(catalogRes?.items) ? catalogRes.items : [];\n setItems(\n list.filter((x) => {\n const slug = String(x.publisher?.slug || \"\").trim();\n const status = String(x.status || \"active\").toLowerCase();\n return slug === String(publisherSlug) && status === \"active\";\n }),\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [publisherSlug]);\n\n const publisherName = useMemo(() => {\n return String(items[0]?.publisher?.name || \"\").trim() || String(publisherSlug);\n }, [items, publisherSlug]);\n\n const backToPublishers = isEmbedded\n ? `/publishers${tokenSearch}`\n : `/marketplace/publishers${tokenSearch}`;\n const backToXapps = isEmbedded ? `/${tokenSearch}` : `/marketplace${tokenSearch}`;\n\n const filteredItems = useMemo(() => {\n const query = q.trim().toLowerCase();\n if (!query) return items;\n return items.filter((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(x.name);\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${desc} ${x.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, locale, q]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={backToXapps}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToPublishers}>\n {t(\"publisher.publishers_title\", undefined, \"Publishers\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{publisherName}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{publisherName}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_xapps\", undefined, \"Search xapps\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_xapps_placeholder\",\n undefined,\n \"Search by title, slug, description...\",\n )}\n aria-label={t(\n \"publisher.search_xapps_aria\",\n undefined,\n \"Search this publisher's xapps\",\n )}\n />\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filteredItems.length === items.length\n ? `${filteredItems.length} xapp${filteredItems.length === 1 ? \"\" : \"s\"}`\n : `${filteredItems.length} of ${items.length} xapp${items.length === 1 ? \"\" : \"s\"}`}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filteredItems.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_xapps_found\", undefined, \"No xapps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_xapps_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_xapps_default\",\n { publisher: publisherName },\n `${publisherName} has no active xapps in the catalog right now.`,\n )}\n </div>\n </div>\n ) : (\n filteredItems.map((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n readFirstString(x.name, x.slug, \"App\");\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n readFirstString(x.description);\n const image =\n readString(manifest.image) || \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const tags = Array.isArray(manifest.tags)\n ? manifest.tags\n .map((tag) => readString(tag))\n .filter(Boolean)\n .slice(0, 3)\n : [];\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const detailTo = {\n pathname: isEmbedded\n ? `/xapps/${encodeURIComponent(String(x.id))}`\n : `/marketplace/xapps/${encodeURIComponent(String(x.id))}`,\n search: tokenSearch,\n };\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")} {publisherName}\n </div>\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {tags.map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"catalog.view_details\", undefined, \"View details\")}\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n"],
5
- "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
6
- "names": ["createContext", "useContext", "value", "jsx", "jsx", "createContext", "useContext", "useEffect", "useMemo", "Link", "useEffect", "jsx", "useEffect", "jsx", "jsxs", "Fragment", "jsx", "jsxs", "useMemo", "t", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Link", "jsx", "Link", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useMemo", "useState", "useEffect", "Link", "readString", "readString", "readLower", "readString", "readLower", "readLower", "readString", "readLower", "readString", "readString", "readString", "value", "readLower", "readString", "readString", "readLower", "readLower", "readString", "readString", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "formatVirtualCurrencyLabel", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "jsx", "jsxs", "asRecord", "asRecord", "readString", "asRecord", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useNavigate", "useState", "useEffect", "Link", "StatusBadge", "status", "t", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useEffect", "StatusBadge", "Link", "t", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Link", "useLocation", "useNavigate", "useParams", "asRecord", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "asRecord", "readString", "readBoolean", "readNumber", "formatDateTime", "readVirtualCurrencyDefinition", "formatVirtualCurrencyLabel", "formatVirtualCurrencyAmount", "jsx", "useParams", "useLocation", "useQueryToken", "useMemo", "useNavigate", "useRef", "useState", "useCallback", "asRecord", "readString", "useEffect", "readBoolean", "readNumber", "error", "formatDateTime", "formatVirtualCurrencyLabel", "formatVirtualCurrencyAmount", "jsxs", "Link", "Fragment", "t", "useEffect", "useRef", "useState", "Link", "useLocation", "useNavigate", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useRef", "useState", "useNavigate", "useEffect", "nestedResp", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useState", "useEffect", "useMemo", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useState", "useEffect", "useMemo", "Link", "t", "jsx", "jsxs"]
3
+ "sources": ["../src/MarketplaceContext.tsx", "../../platform-i18n/src/index.tsx", "../src/i18n.tsx", "../src/MarketplaceApp.tsx", "../src/pages/CatalogPage.tsx", "../src/components/ConfirmActionModal.tsx", "../src/components/MarketplacePrimaryNav.tsx", "../src/utils/marketplaceRouting.ts", "../src/utils/embedSearch.ts", "../src/utils/installationPolicy.ts", "../src/utils/readers.ts", "../src/pages/InvoicesPage.tsx", "../src/components/MarketplaceActivityTabs.tsx", "../src/components/XappWorkspaceNav.tsx", "../src/utils/xappWorkspace.ts", "../../browser-host/src/xmsCopy.ts", "../../browser-host/src/xms.ts", "../src/pages/MonetizationPage.tsx", "../src/pages/NotificationsPage.tsx", "../src/pages/PaymentsPage.tsx", "../src/pages/RequestDetailPage.tsx", "../src/components/SchemaOutputView.tsx", "../src/utils/paymentLock.ts", "../src/utils/guardMonetization.ts", "../src/utils/operationalSurfaces.ts", "../src/pages/RequestsPage.tsx", "../src/pages/XappDetailPage.tsx", "../src/utils/monetizationAccess.ts", "../src/pages/WidgetView.tsx", "../src/pages/PublishersPage.tsx", "../src/pages/PublisherDetailPage.tsx", "../src/httpMarketplaceClient.ts"],
4
+ "sourcesContent": ["import React, { createContext, useContext, useEffect } from \"react\";\nimport { MarketplaceI18nProvider } from \"./i18n\";\nimport type { MarketplaceClient, MarketplaceEnv, MarketplaceHostAdapter } from \"./types\";\n\nexport type MarketplaceContextValue = {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n};\n\nconst Ctx = createContext<MarketplaceContextValue | null>(null);\n\nfunction applyMarketplaceThemeToDocument(theme: Record<string, unknown> | null | undefined): void {\n if (!theme || typeof document === \"undefined\") return;\n const root = document.documentElement;\n const map: Array<[string, string[]]> = [\n [\"primary\", [\"--cx-primary\", \"--mx-primary\"]],\n [\"primaryDark\", [\"--cx-primary-dark\", \"--mx-primary-hover\"]],\n [\"bg\", [\"--cx-bg\", \"--mx-bg\"]],\n [\"bgSubtle\", [\"--cx-bg-subtle\", \"--mx-bg-subtle\"]],\n [\"card\", [\"--cx-card\", \"--mx-card-bg\"]],\n [\"border\", [\"--cx-border\", \"--mx-border\"]],\n [\"text\", [\"--cx-text\", \"--mx-text-main\"]],\n [\"muted\", [\"--cx-muted\", \"--mx-text-muted\"]],\n [\"shadowSm\", [\"--cx-shadow-sm\", \"--mx-shadow-sm\"]],\n [\"shadow\", [\"--cx-shadow\", \"--mx-shadow\"]],\n [\"shadowLg\", [\"--cx-shadow-lg\", \"--mx-shadow-lg\"]],\n [\"radiusSm\", [\"--cx-radius-sm\", \"--mx-radius-sm\"]],\n [\"radiusMd\", [\"--cx-radius-md\", \"--mx-radius-md\"]],\n [\"radius\", [\"--cx-radius\", \"--cx-radius-lg\", \"--mx-radius-md\", \"--mx-radius-lg\"]],\n [\"radiusLg\", [\"--cx-radius-lg\", \"--mx-radius-lg\"]],\n [\"fontFamily\", [\"--xapps-font-family\", \"--mx-font-family\"]],\n [\"displayFont\", [\"--xapps-display-font\", \"--mx-display-font\"]],\n ];\n const derivedTokenMap: Array<[string, string]> = [\n [\"primary\", \"--xapps-accent\"],\n [\"primaryDark\", \"--xapps-accent-strong\"],\n [\"card\", \"--xapps-surface-bg\"],\n [\"bgSubtle\", \"--xapps-surface-subtle\"],\n [\"border\", \"--xapps-border-color\"],\n [\"text\", \"--xapps-text-primary\"],\n [\"muted\", \"--xapps-text-secondary\"],\n ];\n\n for (const [key, cssVars] of map) {\n const rawValue = theme[key];\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n for (const cssVar of cssVars) root.style.setProperty(cssVar, value);\n }\n\n if (\n typeof theme.radius === \"string\" &&\n theme.radius.trim() &&\n !(typeof theme.radiusSm === \"string\" && theme.radiusSm.trim())\n ) {\n root.style.setProperty(\"--cx-radius-sm\", theme.radius.trim());\n root.style.setProperty(\"--mx-radius-sm\", theme.radius.trim());\n }\n if (typeof theme.bg === \"string\" && theme.bg.trim() && !theme.bgSubtle) {\n root.style.setProperty(\"--cx-bg-subtle\", theme.bg.trim());\n root.style.setProperty(\"--mx-bg-subtle\", theme.bg.trim());\n }\n\n const directTokens =\n theme.tokens && typeof theme.tokens === \"object\" && !Array.isArray(theme.tokens)\n ? (theme.tokens as Record<string, unknown>)\n : null;\n if (directTokens) {\n for (const [cssVar, rawValue] of Object.entries(directTokens)) {\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n if (\n !cssVar.startsWith(\"--mx-\") &&\n !cssVar.startsWith(\"--cx-\") &&\n !cssVar.startsWith(\"--xapps-\")\n ) {\n continue;\n }\n root.style.setProperty(cssVar, value);\n }\n }\n for (const [key, cssVar] of derivedTokenMap) {\n const rawValue = theme[key];\n const value = typeof rawValue === \"string\" ? rawValue.trim() : \"\";\n if (!value) continue;\n root.style.setProperty(cssVar, value);\n }\n\n const themeMode =\n typeof theme.mode === \"string\"\n ? theme.mode.trim().toLowerCase()\n : typeof theme.themeMode === \"string\"\n ? theme.themeMode.trim().toLowerCase()\n : \"\";\n if (themeMode === \"dark\" || themeMode === \"light\") {\n root.dataset.xappsThemeMode = themeMode;\n }\n}\n\nfunction MarketplaceRuntimeBridge(props: {\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n useEffect(() => {\n const locale = String(props.env?.locale || props.host.locale || \"\").trim();\n if (locale && typeof document !== \"undefined\") {\n document.documentElement.lang = locale;\n }\n }, [props.env?.locale, props.host.locale]);\n\n useEffect(() => {\n applyMarketplaceThemeToDocument(props.host.theme || null);\n }, [props.host.theme]);\n\n return <>{props.children}</>;\n}\n\nexport function MarketplaceProvider(props: {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n return (\n <MarketplaceI18nProvider locale={props.env?.locale}>\n <MarketplaceRuntimeBridge host={props.host} env={props.env}>\n <Ctx.Provider value={{ client: props.client, host: props.host, env: props.env }}>\n {props.children}\n </Ctx.Provider>\n </MarketplaceRuntimeBridge>\n </MarketplaceI18nProvider>\n );\n}\n\nexport function useMarketplace(): MarketplaceContextValue {\n const v = useContext(Ctx);\n if (!v) throw new Error(\"MarketplaceProvider is missing\");\n return v;\n}\n", "import React, { createContext, useContext, useMemo } from \"react\";\n\nexport type LocalizedText = string | Record<string, string | null | undefined> | null | undefined;\nexport type TranslationParams = Record<string, string | number | boolean | null | undefined>;\nexport type TranslationCatalog = Record<string, string>;\nexport type TranslationCatalogs = Record<string, TranslationCatalog>;\n\nexport type TranslateFunction = (\n key: string,\n params?: TranslationParams,\n fallback?: string,\n) => string;\n\nexport function normalizeLocale(input: unknown, fallbackLocale = \"en\"): string {\n const raw = String(input || \"\")\n .trim()\n .replace(/_/g, \"-\");\n if (!raw) return fallbackLocale;\n const parts = raw\n .split(\"-\")\n .map((part) => part.trim())\n .filter(Boolean);\n if (parts.length === 0) return fallbackLocale;\n const [language, ...rest] = parts;\n return [language.toLowerCase(), ...rest.map((part) => part.toUpperCase())].join(\"-\");\n}\n\nexport function getLocaleCandidates(input: unknown, fallbackLocale = \"en\"): string[] {\n const normalized = normalizeLocale(input, fallbackLocale);\n const out = new Set<string>();\n if (normalized) out.add(normalized);\n const dash = normalized.indexOf(\"-\");\n if (dash > 0) out.add(normalized.slice(0, dash));\n const fallback = normalizeLocale(fallbackLocale, \"en\");\n if (fallback) out.add(fallback);\n const fallbackDash = fallback.indexOf(\"-\");\n if (fallbackDash > 0) out.add(fallback.slice(0, fallbackDash));\n out.add(\"en\");\n return Array.from(out);\n}\n\nexport function pickSupportedLocale(\n input: unknown,\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n const normalizedSupported = Array.from(\n new Set(\n supportedLocales.map((locale) => normalizeLocale(locale, fallbackLocale)).filter(Boolean),\n ),\n );\n const candidates = getLocaleCandidates(input, fallbackLocale);\n for (const candidate of candidates) {\n if (normalizedSupported.includes(candidate)) return candidate;\n }\n return normalizedSupported[0] || normalizeLocale(fallbackLocale, \"en\");\n}\n\nexport function detectBrowserLocale(\n supportedLocales: readonly string[],\n fallbackLocale = \"en\",\n): string {\n if (typeof navigator === \"undefined\") {\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n }\n const candidates = [\n navigator.language,\n ...(Array.isArray(navigator.languages) ? navigator.languages : []),\n ];\n for (const candidate of candidates) {\n const resolved = pickSupportedLocale(candidate, supportedLocales, fallbackLocale);\n if (resolved) return resolved;\n }\n return pickSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);\n}\n\nexport function interpolateTranslation(\n template: string,\n params: TranslationParams | undefined,\n): string {\n if (!params || Object.keys(params).length === 0) return template;\n return template.replace(/\\{([a-zA-Z0-9_]+)\\}/g, (_match, key) => {\n const value = params[key];\n return value === null || value === undefined ? \"\" : String(value);\n });\n}\n\nexport function resolveLocalizedText(\n value: LocalizedText,\n locale: string,\n fallbackLocale = \"en\",\n): string {\n if (typeof value === \"string\") return value;\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return \"\";\n const candidates = getLocaleCandidates(locale, fallbackLocale);\n for (const candidate of candidates) {\n const localized = value[candidate];\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n for (const localized of Object.values(value)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n\nexport function translateFromCatalogs(input: {\n catalogs: TranslationCatalogs;\n locale: string;\n key: string;\n params?: TranslationParams;\n fallback?: string;\n fallbackLocale?: string;\n}): string {\n const fallbackLocale = input.fallbackLocale || \"en\";\n const candidates = getLocaleCandidates(input.locale, fallbackLocale);\n for (const candidate of candidates) {\n const catalog = input.catalogs[candidate];\n const template = catalog?.[input.key];\n if (typeof template === \"string\" && template.trim()) {\n return interpolateTranslation(template, input.params);\n }\n }\n return interpolateTranslation(input.fallback || input.key, input.params);\n}\n\ntype I18nContextValue = {\n locale: string;\n fallbackLocale: string;\n supportedLocales: readonly string[];\n setLocale: (nextLocale: string) => void;\n t: TranslateFunction;\n resolveText: (value: LocalizedText) => string;\n};\n\nconst I18nContext = createContext<I18nContextValue | null>(null);\n\nexport function I18nProvider(props: {\n locale: string;\n catalogs: TranslationCatalogs;\n supportedLocales?: readonly string[];\n fallbackLocale?: string;\n setLocale?: (nextLocale: string) => void;\n children: React.ReactNode;\n}) {\n const fallbackLocale = props.fallbackLocale || \"en\";\n const supportedLocales = props.supportedLocales || Object.keys(props.catalogs);\n const locale = pickSupportedLocale(props.locale, supportedLocales, fallbackLocale);\n const setLocale = props.setLocale || (() => {});\n\n const value = useMemo<I18nContextValue>(\n () => ({\n locale,\n fallbackLocale,\n supportedLocales,\n setLocale,\n t: (key, params, fallback) =>\n translateFromCatalogs({\n catalogs: props.catalogs,\n locale,\n key,\n params,\n fallback,\n fallbackLocale,\n }),\n resolveText: (value) => resolveLocalizedText(value, locale, fallbackLocale),\n }),\n [fallbackLocale, locale, props.catalogs, setLocale, supportedLocales],\n );\n\n return <I18nContext.Provider value={value}>{props.children}</I18nContext.Provider>;\n}\n\nexport function useI18n(): I18nContextValue {\n const value = useContext(I18nContext);\n if (!value) {\n throw new Error(\"I18nProvider is missing\");\n }\n return value;\n}\n", "import { I18nProvider, type LocalizedText, useI18n } from \"@xapps-platform/platform-i18n\";\nimport type { ReactNode } from \"react\";\n\nfunction buildMarketplaceXmsCatalog(locale: \"en\" | \"ro\") {\n if (locale === \"ro\") {\n return {\n \"xapp.current_plan_label\": \"Plan curent\",\n \"xapp.selected_label\": \"Selectat\",\n \"xapp.default_label\": \"Implicit\",\n \"xapp.owned_unlock_label\": \"Unlock de\u021Binut\",\n \"xapp.additive_unlock_label\": \"Supliment cu abonament\",\n \"xapp.owned_unlock_active\": \"Unlock deja activ\",\n \"xapp.current_plan_active\": \"Plan activ\",\n \"xapp.checkout_starting\": \"Se porne\u0219te checkout-ul...\",\n \"xapp.additive_unlock_action\": \"Cump\u0103r\u0103 suplimentul\",\n \"xapp.checkout_action\": \"\u00CEncepe checkout-ul\",\n \"xapp.subscription_status_label\": \"Stare abonament\",\n \"xapp.subscription_coverage_label\": \"Acoperire\",\n \"xapp.subscription_reason_label\": \"Motiv stare\",\n \"xapp.subscription_overdue_since_label\": \"Restant din\",\n \"xapp.subscription_expiry_boundary_label\": \"Limit\u0103 expirare\",\n \"xapp.current_period_ends_label\": \"Perioada curent\u0103 se \u00EEncheie la\",\n \"xapp.cancelled_at_label\": \"Anulat la\",\n \"xapp.virtual_currency_label\": \"Moned\u0103 virtual\u0103\",\n \"xapp.current_balances_label\": \"Solduri acum\",\n \"xapp.current_credits_label\": \"Credite acum\",\n \"xapp.credits_remaining_label\": \"Sold\",\n \"xapp.credit_balance_label\": \"Credite\",\n \"xapp.add_on_unlocks_label\": \"Unlock-uri suplimentare\",\n \"xapp.subscription_refresh_action\": \"Actualizeaz\u0103 starea\",\n \"xapp.subscription_refreshing\": \"Se actualizeaz\u0103...\",\n \"xapp.subscription_cancel_action\": \"Anuleaz\u0103 abonamentul\",\n \"xapp.subscription_cancelling\": \"Se anuleaz\u0103...\",\n \"xapp.subscription_operator_authority_label\": \"Autoritate operator\",\n \"xapp.subscription_management_destination_label\": \"Administreaz\u0103 \u00EEn\",\n \"xapp.subscription_operator_authority_gateway\": \"Gateway\",\n \"xapp.subscription_operator_authority_tenant\": \"Tenant\",\n \"xapp.subscription_operator_authority_publisher\": \"Publisher\",\n \"xapp.subscription_operator_authority_owner\": \"Proprietar aplica\u021Bie\",\n \"xapp.subscription_management_destination_gateway\": \"Administrare gateway\",\n \"xapp.subscription_management_destination_tenant\": \"Aplica\u021Bia tenantului\",\n \"xapp.subscription_management_destination_publisher\": \"Aplica\u021Bia publisherului\",\n \"xapp.subscription_management_destination_owner\": \"Proprietarul aplica\u021Biei\",\n \"xapp.subscription_management_hint_gateway\":\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn administrarea gateway-ului.\",\n \"xapp.subscription_management_hint_tenant\":\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia tenantului.\",\n \"xapp.subscription_management_hint_publisher\":\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia publisherului.\",\n \"xapp.subscription_management_hint_owner\":\n \"Administrarea avansat\u0103 a abonamentului este gestionat\u0103 de proprietarul aplica\u021Biei.\",\n \"xapp.subscription_management_open_action\": \"Deschide administrarea\",\n \"xapp.lifecycle_preview_at_label\": \"Previzualizare la\",\n \"xapp.lifecycle_preview_hint\":\n \"Starea abonamentului este previzualizat\u0103 pentru momentul selectat.\",\n \"xapp.history_route_subtitle\": \"Solduri, activitate recent\u0103 \u0219i cump\u0103r\u0103ri pentru {title}.\",\n \"xapp.history_route_subtitle_default\":\n \"Solduri, activitate recent\u0103 \u0219i cump\u0103r\u0103ri pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.plans_route_subtitle\": \"Acces, planuri \u0219i solduri pentru {title}.\",\n \"xapp.plans_route_subtitle_default\": \"Acces, planuri \u0219i solduri pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.plans_loading_title\": \"Se \u00EEncarc\u0103 planurile\",\n \"xapp.plans_loading_desc\":\n \"Se preg\u0103tesc planurile publicate, soldurile \u0219i accesul curent pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.no_plans_available\": \"Momentan nu exist\u0103 planuri disponibile.\",\n \"xapp.no_plans_available_desc\":\n \"Planurile publicate vor ap\u0103rea aici atunci c\u00E2nd aceast\u0103 aplica\u021Bie expune un paywall.\",\n \"xapp.checkout_hint\":\n \"Checkout-ul se deschide \u00EEntr-o pagin\u0103 securizat\u0103 de plat\u0103 administrat\u0103 de platform\u0103.\",\n \"xapp.current_plan_note\": \"Acest plan este deja activ pentru aceast\u0103 aplica\u021Bie.\",\n \"xapp.owned_unlock_note\": \"Acest supliment este deja inclus \u00EEn accesul curent.\",\n };\n }\n return {\n \"xapp.current_plan_label\": \"Current plan\",\n \"xapp.selected_label\": \"Selected\",\n \"xapp.default_label\": \"Default\",\n \"xapp.owned_unlock_label\": \"Owned unlock\",\n \"xapp.additive_unlock_label\": \"Add-on with membership\",\n \"xapp.owned_unlock_active\": \"Owned unlock active\",\n \"xapp.current_plan_active\": \"Current plan active\",\n \"xapp.checkout_starting\": \"Starting checkout...\",\n \"xapp.additive_unlock_action\": \"Purchase add-on unlock\",\n \"xapp.checkout_action\": \"Start checkout\",\n \"xapp.subscription_status_label\": \"Subscription state\",\n \"xapp.subscription_coverage_label\": \"Coverage\",\n \"xapp.subscription_reason_label\": \"Status reason\",\n \"xapp.subscription_overdue_since_label\": \"Overdue since\",\n \"xapp.subscription_expiry_boundary_label\": \"Expiry boundary\",\n \"xapp.current_period_ends_label\": \"Current period ends\",\n \"xapp.cancelled_at_label\": \"Cancelled at\",\n \"xapp.virtual_currency_label\": \"Currency\",\n \"xapp.current_balances_label\": \"Balances now\",\n \"xapp.current_credits_label\": \"Credits now\",\n \"xapp.credits_remaining_label\": \"Balance\",\n \"xapp.credit_balance_label\": \"Credits\",\n \"xapp.add_on_unlocks_label\": \"Add-on unlocks\",\n \"xapp.subscription_refresh_action\": \"Refresh status\",\n \"xapp.subscription_refreshing\": \"Refreshing...\",\n \"xapp.subscription_cancel_action\": \"Cancel subscription\",\n \"xapp.subscription_cancelling\": \"Cancelling...\",\n \"xapp.subscription_operator_authority_label\": \"Operator authority\",\n \"xapp.subscription_management_destination_label\": \"Manage in\",\n \"xapp.subscription_operator_authority_gateway\": \"Gateway\",\n \"xapp.subscription_operator_authority_tenant\": \"Tenant\",\n \"xapp.subscription_operator_authority_publisher\": \"Publisher\",\n \"xapp.subscription_operator_authority_owner\": \"App owner\",\n \"xapp.subscription_management_destination_gateway\": \"Gateway admin\",\n \"xapp.subscription_management_destination_tenant\": \"Tenant app\",\n \"xapp.subscription_management_destination_publisher\": \"Publisher app\",\n \"xapp.subscription_management_destination_owner\": \"App owner\",\n \"xapp.subscription_management_hint_gateway\":\n \"Advanced subscription management is handled in Gateway admin.\",\n \"xapp.subscription_management_hint_tenant\":\n \"Advanced subscription management is handled in the tenant app.\",\n \"xapp.subscription_management_hint_publisher\":\n \"Advanced subscription management is handled in the publisher app.\",\n \"xapp.subscription_management_hint_owner\":\n \"Advanced subscription management is handled by the app owner.\",\n \"xapp.subscription_management_open_action\": \"Open management\",\n \"xapp.lifecycle_preview_at_label\": \"Preview as of\",\n \"xapp.lifecycle_preview_hint\": \"Subscription state is being previewed for the selected time.\",\n \"xapp.history_route_subtitle\": \"Balances, recent activity, and purchases for {title}.\",\n \"xapp.history_route_subtitle_default\": \"Balances, recent activity, and purchases for this app.\",\n \"xapp.plans_route_subtitle\": \"Access, plans, and balances for {title}.\",\n \"xapp.plans_route_subtitle_default\": \"Access, plans, and balances for this app.\",\n \"xapp.plans_loading_title\": \"Loading plans\",\n \"xapp.plans_loading_desc\":\n \"Preparing published plans, balances, and current access for this app.\",\n \"xapp.no_plans_available\": \"No plans are currently available.\",\n \"xapp.no_plans_available_desc\":\n \"Published plans will appear here when this app exposes a paywall.\",\n \"xapp.checkout_hint\": \"Checkout opens in a secure hosted payment page managed by the platform.\",\n \"xapp.current_plan_note\": \"This plan is already active for this app.\",\n \"xapp.owned_unlock_note\": \"This add-on is already included in the current access.\",\n };\n}\n\nconst MARKETPLACE_CATALOGS = {\n en: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Error\",\n \"common.refresh\": \"Refresh\",\n \"common.previous\": \"Previous\",\n \"common.next\": \"Next\",\n \"common.search\": \"Search\",\n \"common.tag\": \"Tag\",\n \"common.all_tags\": \"All Tags\",\n \"common.clear_filter\": \"Clear Filter\",\n \"common.close_dialog\": \"Close dialog\",\n \"common.back_to_marketplace\": \"Back to Marketplace\",\n \"common.back_to_portal\": \"Back to Portal\",\n \"common.view_app_details\": \"View app details\",\n \"common.catalog_app\": \"Catalog app\",\n \"common.by\": \"by\",\n \"common.added\": \"Added\",\n \"common.added_only\": \"Added only\",\n \"common.confirm\": \"Confirm\",\n \"common.cancel\": \"Cancel\",\n \"common.details\": \"Details\",\n \"common.version\": \"Version\",\n \"common.status\": \"Status\",\n \"common.created\": \"Created\",\n \"common.completed\": \"Completed\",\n \"common.tool\": \"Tool\",\n \"common.action\": \"Action\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Session\",\n \"common.amount\": \"Amount\",\n \"common.payment\": \"Payment\",\n \"common.payment_session\": \"Payment Session\",\n \"common.invoice\": \"Invoice\",\n \"common.provider\": \"Provider\",\n \"common.channel\": \"Channel\",\n \"common.message\": \"Message\",\n \"common.trigger\": \"Trigger\",\n \"common.received\": \"Received\",\n \"common.document\": \"Document\",\n \"common.download\": \"Download\",\n \"common.open\": \"Open\",\n \"common.request\": \"Request\",\n \"common.request_id\": \"Request ID\",\n \"common.reason\": \"Reason\",\n \"common.app\": \"App\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"just now\",\n \"common.seconds_ago\": \"{value}s ago\",\n \"common.minutes_ago\": \"{value}m ago\",\n \"common.hours_ago\": \"{value}h ago\",\n \"common.days_ago\": \"{value}d ago\",\n \"nav.marketplace\": \"Marketplace navigation\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Publishers\",\n \"nav.activity\": \"Activity\",\n \"publisher.publishers_title\": \"Publishers\",\n \"publisher.search_publishers\": \"Search publishers\",\n \"publisher.search_publishers_placeholder\": \"Search by name or slug...\",\n \"publisher.publishers_count\": \"Publishers\",\n \"publisher.catalog_xapps\": \"Catalog xApps\",\n \"publisher.results_count\": \"{count} publisher{suffix}\",\n \"publisher.no_publishers_found\": \"No publishers found\",\n \"publisher.empty_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_default\": \"No publishers are available in the catalog right now.\",\n \"publisher.view_publisher\": \"View publisher\",\n \"publisher.search_xapps\": \"Search xapps\",\n \"publisher.search_xapps_placeholder\": \"Search by title, slug, description...\",\n \"publisher.search_xapps_aria\": \"Search this publisher's xapps\",\n \"publisher.no_xapps_found\": \"No xapps found\",\n \"publisher.empty_xapps_filtered\": \"Try adjusting your search to find what you're looking for.\",\n \"publisher.empty_xapps_default\": \"{publisher} has no active xapps in the catalog right now.\",\n \"activity.navigation\": \"Activity navigation\",\n \"activity.requests\": \"Requests\",\n \"activity.monetization\": \"Monetization\",\n \"activity.payments\": \"Payments\",\n \"activity.invoices\": \"Invoices\",\n \"activity.notifications\": \"Notifications\",\n \"activity.requests_title\": \"Requests\",\n \"activity.monetization_title\": \"Monetization\",\n \"activity.payments_title\": \"Payments\",\n \"activity.invoices_title\": \"Invoices\",\n \"activity.notifications_title\": \"Notifications\",\n \"activity.unavailable_requests_title\": \"Requests are unavailable\",\n \"activity.unavailable_monetization_title\": \"Plans and balances are unavailable in this host.\",\n \"activity.unavailable_requests_desc\":\n \"This public catalog does not support viewing personal requests.\",\n \"activity.unavailable_payments_title\": \"Payments are unavailable in this host.\",\n \"activity.unavailable_invoices_title\": \"Invoices are unavailable in this host.\",\n \"activity.unavailable_notifications_title\": \"Notifications are unavailable in this host.\",\n \"activity.subject_required_title\": \"Subject required\",\n \"activity.subject_required_desc\":\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n \"activity.showing_requests_for\": \"Showing requests for {title}\",\n \"activity.showing_requests_for_prefix\": \"Showing requests for\",\n \"activity.showing_monetization_for\": \"Showing plans and balances for {title}\",\n \"activity.showing_monetization_for_prefix\": \"Showing plans and balances for\",\n \"activity.showing_payments_for\": \"Showing payment activity for {title}\",\n \"activity.showing_payments_for_prefix\": \"Showing payment activity for\",\n \"activity.showing_invoices_for\": \"Showing invoice records for {title}\",\n \"activity.showing_invoices_for_prefix\": \"Showing invoice records for\",\n \"activity.showing_notifications_for\": \"Showing notification activity for {title}\",\n \"activity.showing_notifications_for_prefix\": \"Showing notification activity for\",\n \"activity.payment_detail\": \"Payment Detail\",\n \"activity.invoice_detail\": \"Invoice Detail\",\n \"activity.back_to_payment_list\": \"Back to payment list\",\n \"activity.back_to_invoice_list\": \"Back to invoice list\",\n \"activity.back_to_notification_list\": \"Back to notification list\",\n \"activity.mark_all_read\": \"Mark all read\",\n \"activity.mark_read\": \"Mark read\",\n \"activity.unread_count\": \"{count} unread item{suffix}\",\n \"activity.loading_requests\": \"Loading requests...\",\n \"activity.loading_monetization\": \"Loading plans, balances, and recent activity...\",\n \"activity.no_requests\": \"No requests yet.\",\n \"activity.no_monetization\": \"No monetized apps are currently installed for this subject.\",\n \"activity.no_monetization_current\": \"No current plans or balances were found for this subject.\",\n \"activity.no_monetization_history\": \"No plan or balance history was found for this subject.\",\n \"activity.loading_payments\": \"Loading payments...\",\n \"activity.no_payments\": \"No payment activity found.\",\n \"activity.loading_payment_detail\": \"Loading payment details...\",\n \"activity.resume_payment\": \"Resume\",\n \"activity.loading_invoices\": \"Loading invoices...\",\n \"activity.no_invoices\": \"No invoices found.\",\n \"activity.loading_invoice_detail\": \"Loading invoice details...\",\n \"activity.lifecycle_history\": \"Lifecycle History\",\n \"activity.open_document\": \"Open Document\",\n \"activity.open_external\": \"Open External\",\n \"activity.notification_detail\": \"Notification Detail\",\n \"activity.loading_notifications\": \"Loading notifications...\",\n \"activity.no_notifications\": \"No notification activity found.\",\n \"activity.loading_notification_detail\": \"Loading notification details...\",\n \"activity.monetization_overview_hint\":\n \"Review current plans, subscriptions, and balances across this subject's apps.\",\n \"activity.monetization_overview_hint_with_past\":\n \"Review current and past plans, subscriptions, and balances across this subject's apps.\",\n \"activity.monetization_summary_title\": \"Plans and balances\",\n \"activity.monetization_summary_subtitle\":\n \"Review active plans, subscriptions, and balances before opening app details or history.\",\n \"activity.monetization_summary_apps\": \"Apps\",\n \"activity.monetization_summary_subscriptions\": \"Subscriptions\",\n \"activity.monetization_summary_balances\": \"Balances\",\n \"activity.monetization_summary_currencies\": \"Named currencies\",\n \"activity.monetization_card_subtitle\":\n \"Current plans, balances, and subscription state for this app.\",\n \"activity.monetization_focus_xapp\": \"Only this app\",\n \"activity.monetization_show_past\": \"Include past apps\",\n \"activity.monetization_show_current_only\": \"Only current apps\",\n \"activity.monetization_open_plans\": \"View plans\",\n \"activity.monetization_open_history\": \"View history\",\n \"activity.monetization_access_label\": \"Access\",\n \"activity.monetization_plan_label\": \"Plan\",\n \"activity.monetization_credits_label\": \"Balance\",\n \"activity.monetization_subscription_label\": \"Subscription\",\n \"activity.monetization_coverage_label\": \"Renewal state\",\n \"activity.monetization_renews_at\": \"Renews at\",\n \"activity.monetization_balance_state\": \"Balance status\",\n \"activity.monetization_balances_label\": \"Balances\",\n \"activity.monetization_source_label\": \"Origin\",\n \"activity.monetization_no_currency\": \"No named currency\",\n \"activity.monetization_unknown\": \"Unknown\",\n \"activity.monetization_none\": \"None\",\n \"activity.monetization_no_source\": \"No source\",\n \"activity.monetization_no_subscription\": \"No subscription\",\n \"activity.monetization_no_recurring_coverage\": \"No recurring coverage\",\n \"activity.monetization_not_scheduled\": \"Not scheduled\",\n \"activity.monetization_balance_unknown\": \"unknown\",\n \"activity.page_of\": \"Page {page} of {totalPages}\",\n \"activity.event\": \"Event\",\n \"activity.event_fallback\": \"event\",\n \"activity.request_detail_title\": \"Request Details\",\n \"activity.show_details\": \"Show details\",\n \"activity.hide_details\": \"Hide details\",\n \"activity.response_title\": \"Response\",\n \"activity.payment_pending\": \"Payment Pending\",\n \"activity.payment_required\": \"Payment Required\",\n \"activity.complete_payment\": \"Complete Payment\",\n \"activity.confirm_payment\": \"Confirm Payment\",\n \"activity.confirming_payment\": \"Confirming...\",\n \"activity.refresh_status\": \"Refresh Status\",\n \"activity.waiting_for_payment\": \"Waiting for payment confirmation\u2026\",\n \"activity.waiting_for_response\": \"Waiting for response\u2026\",\n \"activity.execution_timeline\": \"Execution Timeline\",\n \"activity.artifacts_title\": \"Artifacts\",\n \"activity.download_artifact\": \"Download Artifact\",\n \"activity.related_widgets_title\": \"Related Widgets\",\n \"activity.help_title\": \"Help\",\n \"activity.back_to_requests\": \"Back to Requests\",\n \"activity.open_widget\": \"Open {widget}\",\n \"activity.help_request\":\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} event\",\n \"activity.timeline_count_other\": \"{count} events\",\n \"activity.timeline_error_count_one\": \"{count} error\",\n \"activity.timeline_error_count_other\": \"{count} errors\",\n \"activity.guard_badge\": \"guard: {value}\",\n \"activity.trigger_badge\": \"trigger: {value}\",\n \"activity.outcome_badge\": \"outcome: {value}\",\n \"activity.current_access_badge\": \"access: {value}\",\n \"activity.current_access_detail\": \"Current access: {value}\",\n \"activity.reason_detail\": \"reason={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Upgrade subscription{suffix}\",\n \"activity.guard_action_complete_payment\": \"Complete payment{suffix}\",\n \"activity.guard_action_step_up_authentication\": \"Complete step-up authentication{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm action\",\n \"activity.guard_action_confirm_action_message\": \"Confirm action ({message})\",\n \"activity.guard_action_custom\": \"Action: {kind}\",\n ...buildMarketplaceXmsCatalog(\"en\"),\n \"status.unread\": \"Unread\",\n \"status.read\": \"Read\",\n \"common.back\": \"Back\",\n \"catalog.search_placeholder\": \"Search by name, description...\",\n \"catalog.search_aria\": \"Search apps\",\n \"catalog.filter_by_tag\": \"Filter by tag\",\n \"catalog.results_all\": \"{count} app{suffix}\",\n \"catalog.results_filtered\": \"{count} of {total} app{suffix}\",\n \"catalog.no_apps_found\": \"No apps found\",\n \"catalog.empty_added_only\":\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n \"catalog.empty_filtered\":\n \"Try adjusting your search or filters to find what you're looking for.\",\n \"catalog.empty_default\": \"No apps are available in the catalog right now.\",\n \"catalog.view_details\": \"View details\",\n \"catalog.remove_app_title\": \"Remove app?\",\n \"catalog.remove_app_description\":\n \"Remove {title} from your current workspace? You can add it again later.\",\n \"xapp.kicker_publisher\": \"Publisher: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Add to workspace\",\n \"xapp.remove_from_workspace\": \"Remove from workspace\",\n \"xapp.update_app\": \"Update app\",\n \"xapp.open_app\": \"Open app\",\n \"xapp.terms_title\": \"Terms & Conditions\",\n \"xapp.update_available\": \"Update available\",\n \"xapp.about_title\": \"About\",\n \"xapp.available_views_title\": \"Available Views\",\n \"xapp.open_to_access_views\":\n \"Open this app to start and install it automatically for your workspace.\",\n \"xapp.add_to_access_views\": \"Add this app to your workspace to access its available views.\",\n \"xapp.update_to_access_views_auto\":\n \"Open a view to update the app automatically for your workspace.\",\n \"xapp.update_to_access_views\":\n \"An update is available. Please update the app to access its available views.\",\n \"xapp.load_as_user_to_access\": \"Load the catalog as a user to access this app.\",\n \"xapp.no_views_available\": \"No app views are currently available.\",\n \"xapp.widget_primary\": \"Primary\",\n \"xapp.widget_open\": \"Open\",\n \"xapp.how_app_runs\": \"How This App Runs\",\n \"xapp.view_details\": \"View details\",\n \"xapp.no_run_requirements\": \"This app has no extra run requirements configured.\",\n \"xapp.guard_summary\":\n \"This app includes {itemCount} run check{itemSuffix} across {stageCount} stage{stageSuffix}. Open details to review access, payment, or follow-up steps.\",\n \"xapp.trigger_before_tool_run\": \"Before running this app\",\n \"xapp.trigger_after_tool_run\": \"After this app finishes\",\n \"xapp.trigger_before_widget_open\": \"Before opening this app\",\n \"xapp.trigger_after_widget_open\": \"After opening this app\",\n \"xapp.trigger_default\": \"App stage\",\n \"xapp.policy_any\": \"Any one satisfies\",\n \"xapp.policy_all\": \"All steps apply\",\n \"xapp.auto\": \"Auto\",\n \"xapp.user_step\": \"User step\",\n \"xapp.required\": \"Required\",\n \"xapp.info\": \"Info\",\n \"xapp.screenshots_title\": \"Screenshots\",\n \"xapp.screenshot_alt\": \"Screenshot {index}\",\n \"xapp.usage_credits_title\": \"Usage Credits\",\n \"xapp.current_access_title\": \"Current access\",\n \"xapp.access_state_label\": \"Access state\",\n \"xapp.access_state_available\": \"available\",\n \"xapp.subscription_status_label\": \"Subscription state\",\n \"xapp.subscription_coverage_label\": \"Coverage\",\n \"xapp.subscription_reason_label\": \"Status reason\",\n \"xapp.subscription_overdue_since_label\": \"Overdue since\",\n \"xapp.subscription_expiry_boundary_label\": \"Expiry boundary\",\n \"xapp.subscription_coverage_active\": \"Still covered\",\n \"xapp.subscription_coverage_inactive\": \"Not covered\",\n \"xapp.subscription_reason_grace_covered_past_due\": \"Coverage remains during grace period\",\n \"xapp.subscription_reason_past_due_after_period_end\":\n \"Current period ended without successful renewal\",\n \"xapp.subscription_reason_expired_after_boundary\": \"Expiry boundary reached\",\n \"xapp.renews_at_label\": \"Renews at\",\n \"xapp.current_period_ends_label\": \"Current period ends\",\n \"xapp.cancelled_at_label\": \"Cancelled at\",\n \"xapp.expires_at_label\": \"Expires at\",\n \"xapp.subscription_refresh_action\": \"Refresh status\",\n \"xapp.subscription_refreshing\": \"Refreshing...\",\n \"xapp.subscription_refresh_failed\": \"Unable to refresh subscription state.\",\n \"xapp.subscription_cancel_action\": \"Cancel subscription\",\n \"xapp.subscription_cancelling\": \"Cancelling...\",\n \"xapp.subscription_cancel_title\": \"Cancel subscription?\",\n \"xapp.subscription_cancel_description\":\n \"The subscription will stop renewing. Current access remains available until the current period ends.\",\n \"xapp.subscription_cancel_failed\": \"Unable to cancel this subscription.\",\n \"xapp.lifecycle_preview_at_label\": \"Preview as of\",\n \"xapp.lifecycle_preview_hint\": \"Subscription state is being previewed for the selected time.\",\n \"xapp.virtual_currency_label\": \"Currency\",\n \"xapp.current_balances_label\": \"Balances now\",\n \"xapp.current_credits_label\": \"Credits now\",\n \"xapp.credits_remaining_label\": \"Balance\",\n \"xapp.credit_balance_label\": \"Credits\",\n \"xapp.available_label\": \"Available\",\n \"xapp.ready_to_use\": \"{count} ready to use\",\n \"xapp.source_label\": \"Source\",\n \"xapp.linked_payment_sessions\": \"{count} linked to visible payment sessions\",\n \"xapp.in_flight_label\": \"In flight\",\n \"xapp.needs_review_label\": \"Needs review\",\n \"xapp.invalid_label\": \"Invalid\",\n \"xapp.invalid_credits\": \"{count} orphan ledger rows are not usable credits\",\n \"xapp.by_tool_label\": \"By tool\",\n \"xapp.for_label\": \"for\",\n \"xapp.invalid_short\": \"{count} invalid\",\n \"xapp.in_flight_short\": \"{count} in flight\",\n \"xapp.stale_short\": \"{count} stale\",\n \"xapp.activity_title\": \"Activity\",\n \"xapp.details_title\": \"Details\",\n \"xapp.app_id_label\": \"App ID\",\n \"xapp.status_added\": \"Added\",\n \"xapp.status_available\": \"Available\",\n \"xapp.publisher_label\": \"Publisher\",\n \"xapp.tags_label\": \"Tags\",\n \"xapp.view_terms\": \"View Terms & Conditions\",\n \"xapp.close_terms_dialog\": \"Close terms dialog\",\n \"xapp.view_full_document\": \"View Full Document\",\n \"xapp.accept_terms\": \"I have read and accept the terms and conditions.\",\n \"xapp.accept_add_app\": \"Accept & Add app\",\n \"xapp.accept_update\": \"Accept & Update\",\n \"widget.session_ended_title\": \"Session ended\",\n \"widget.session_ended_message\": \"Your session ended. Go back and open the widget again.\",\n \"widget.session_expired_title\": \"Widget session expired\",\n \"widget.session_expired_refresh_failed\":\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n \"widget.session_expired_default\":\n \"This widget session ended. Go back and open it again to continue.\",\n \"widget.confirm_continue_prompt\": \"This action requires confirmation. Continue?\",\n \"widget.unable_to_load\": \"Unable to load widget\",\n \"widget.preparing\": \"Preparing {title}...\",\n \"widget.secure_session_setup\": \"Setting up a secure session for this app.\",\n \"payment_lock.complete_payment\": \"Complete Payment\",\n \"payment_lock.continue\": \"Continue\",\n \"payment_lock.confirming_payment_finality\": \"Confirming payment finality with provider.\",\n \"payment_lock.pending_retry_confirm\":\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n \"payment_lock.confirmed_refresh\": \"Payment is confirmed. Refresh to continue.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Payment is not settled. Complete a new payment attempt.\",\n \"payment_lock.requires_additional_action\":\n \"Payment requires additional action. Complete payment to continue.\",\n \"payment_lock.attempt_failed\": \"Last payment attempt failed. Complete payment to continue.\",\n \"payment_lock.evidence_used\": \"Payment evidence was already used. Start a new payment attempt.\",\n \"payment_lock.evidence_consumed\":\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n \"payment_lock.required_before_request\": \"Payment is required before this request can proceed.\",\n },\n ro: {\n \"common.id\": \"ID\",\n \"common.marketplace\": \"Marketplace\",\n \"common.portal\": \"Portal\",\n \"common.error\": \"Eroare\",\n \"common.refresh\": \"Re\u00EEmprosp\u0103tare\",\n \"common.previous\": \"Anterior\",\n \"common.next\": \"Urm\u0103tor\",\n \"common.search\": \"C\u0103utare\",\n \"common.tag\": \"Etichet\u0103\",\n \"common.all_tags\": \"Toate etichetele\",\n \"common.clear_filter\": \"\u0218terge filtrul\",\n \"common.close_dialog\": \"\u00CEnchide dialogul\",\n \"common.back_to_marketplace\": \"\u00CEnapoi la Marketplace\",\n \"common.back_to_portal\": \"\u00CEnapoi la Portal\",\n \"common.view_app_details\": \"Vezi detaliile aplica\u021Biei\",\n \"common.catalog_app\": \"Aplica\u021Bie din catalog\",\n \"common.by\": \"de\",\n \"common.added\": \"Ad\u0103ugat\u0103\",\n \"common.added_only\": \"Doar ad\u0103ugate\",\n \"common.confirm\": \"Confirm\u0103\",\n \"common.cancel\": \"Anuleaz\u0103\",\n \"common.details\": \"Detalii\",\n \"common.version\": \"Versiune\",\n \"common.status\": \"Stare\",\n \"common.created\": \"Creat\",\n \"common.completed\": \"Finalizat\",\n \"common.tool\": \"Instrument\",\n \"common.action\": \"Ac\u021Biune\",\n \"common.xapp\": \"Xapp\",\n \"common.session\": \"Sesiune\",\n \"common.amount\": \"Sum\u0103\",\n \"common.payment\": \"Plat\u0103\",\n \"common.payment_session\": \"Sesiune de plat\u0103\",\n \"common.invoice\": \"Factur\u0103\",\n \"common.provider\": \"Furnizor\",\n \"common.channel\": \"Canal\",\n \"common.message\": \"Mesaj\",\n \"common.trigger\": \"Declan\u0219ator\",\n \"common.received\": \"Primit\",\n \"common.document\": \"Document\",\n \"common.download\": \"Descarc\u0103\",\n \"common.open\": \"Deschide\",\n \"common.request\": \"Cerere\",\n \"common.request_id\": \"ID cerere\",\n \"common.reason\": \"Motiv\",\n \"common.app\": \"Aplica\u021Bie\",\n \"common.widget\": \"Widget\",\n \"common.just_now\": \"chiar acum\",\n \"common.seconds_ago\": \"acum {value}s\",\n \"common.minutes_ago\": \"acum {value}m\",\n \"common.hours_ago\": \"acum {value}h\",\n \"common.days_ago\": \"acum {value}z\",\n \"nav.marketplace\": \"Navigare marketplace\",\n \"nav.xapps\": \"Xapps\",\n \"nav.publishers\": \"Dezvoltatori\",\n \"nav.activity\": \"Activitate\",\n \"activity.navigation\": \"Navigare activitate\",\n \"activity.requests\": \"Cereri\",\n \"activity.monetization\": \"Monetizare\",\n \"activity.payments\": \"Pl\u0103\u021Bi\",\n \"activity.invoices\": \"Facturi\",\n \"activity.notifications\": \"Notific\u0103ri\",\n \"activity.requests_title\": \"Cereri\",\n \"activity.monetization_title\": \"Monetizare\",\n \"activity.payments_title\": \"Pl\u0103\u021Bi\",\n \"activity.invoices_title\": \"Facturi\",\n \"activity.notifications_title\": \"Notific\u0103ri\",\n \"publisher.publishers_title\": \"Dezvoltatori\",\n \"publisher.search_publishers\": \"Caut\u0103 dezvoltatori\",\n \"publisher.search_publishers_placeholder\": \"Caut\u0103 dup\u0103 nume sau slug...\",\n \"publisher.publishers_count\": \"Dezvoltatori\",\n \"publisher.catalog_xapps\": \"xApps \u00EEn catalog\",\n \"publisher.results_count\": \"{count} dezvoltator{suffix}\",\n \"publisher.no_publishers_found\": \"Nu au fost g\u0103si\u021Bi dezvoltatori\",\n \"publisher.empty_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_default\": \"Momentan nu exist\u0103 dezvoltatori disponibili \u00EEn catalog.\",\n \"publisher.view_publisher\": \"Vezi dezvoltatorul\",\n \"publisher.search_xapps\": \"Caut\u0103 xapps\",\n \"publisher.search_xapps_placeholder\": \"Caut\u0103 dup\u0103 titlu, slug, descriere...\",\n \"publisher.search_xapps_aria\": \"Caut\u0103 xapps-urile acestui dezvoltator\",\n \"publisher.no_xapps_found\": \"Nu au fost g\u0103site xapps\",\n \"publisher.empty_xapps_filtered\": \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"publisher.empty_xapps_default\": \"{publisher} nu are xapps active \u00EEn catalog acum.\",\n \"activity.unavailable_requests_title\": \"Cereri indisponibile\",\n \"activity.unavailable_monetization_title\": \"Monetizarea nu este disponibil\u0103 \u00EEn acest host.\",\n \"activity.unavailable_requests_desc\":\n \"Acest catalog public nu permite vizualizarea cererilor personale.\",\n \"activity.unavailable_payments_title\": \"Pl\u0103\u021Bile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_invoices_title\": \"Facturile nu sunt disponibile \u00EEn acest host.\",\n \"activity.unavailable_notifications_title\": \"Notific\u0103rile nu sunt disponibile \u00EEn acest host.\",\n \"activity.subject_required_title\": \"Subiect necesar\",\n \"activity.subject_required_desc\":\n \"Aceast\u0103 sesiune de host nu este asociat\u0103 cu un utilizator. Cere hostului s\u0103 creeze o sesiune de catalog cu un subjectId.\",\n \"activity.showing_requests_for\": \"Se afi\u0219eaz\u0103 cererile pentru {title}\",\n \"activity.showing_requests_for_prefix\": \"Se afi\u0219eaz\u0103 cererile pentru\",\n \"activity.showing_monetization_for\": \"Se afi\u0219eaz\u0103 planurile \u0219i soldurile pentru {title}\",\n \"activity.showing_monetization_for_prefix\": \"Se afi\u0219eaz\u0103 planurile \u0219i soldurile pentru\",\n \"activity.showing_payments_for\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru {title}\",\n \"activity.showing_payments_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea pl\u0103\u021Bilor pentru\",\n \"activity.showing_invoices_for\": \"Se afi\u0219eaz\u0103 facturile pentru {title}\",\n \"activity.showing_invoices_for_prefix\": \"Se afi\u0219eaz\u0103 facturile pentru\",\n \"activity.showing_notifications_for\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru {title}\",\n \"activity.showing_notifications_for_prefix\": \"Se afi\u0219eaz\u0103 activitatea notific\u0103rilor pentru\",\n \"activity.payment_detail\": \"Detaliu plat\u0103\",\n \"activity.invoice_detail\": \"Detaliu factur\u0103\",\n \"activity.back_to_payment_list\": \"\u00CEnapoi la lista pl\u0103\u021Bilor\",\n \"activity.back_to_invoice_list\": \"\u00CEnapoi la lista facturilor\",\n \"activity.back_to_notification_list\": \"\u00CEnapoi la lista notific\u0103rilor\",\n \"activity.mark_all_read\": \"Marcheaz\u0103 tot ca citit\",\n \"activity.mark_read\": \"Marcheaz\u0103 ca citit\",\n \"activity.unread_count\": \"{count} notific{suffix} necitit{suffix2}\",\n \"activity.loading_requests\": \"Se \u00EEncarc\u0103 cererile...\",\n \"activity.loading_monetization\": \"Se \u00EEncarc\u0103 planurile, soldurile \u0219i activitatea recent\u0103...\",\n \"activity.no_requests\": \"Nu exist\u0103 \u00EEnc\u0103 cereri.\",\n \"activity.no_monetization\":\n \"Nu exist\u0103 \u00EEnc\u0103 aplica\u021Bii monetizate instalate pentru acest subiect.\",\n \"activity.no_monetization_current\":\n \"Nu au fost g\u0103site planuri sau solduri curente pentru acest subiect.\",\n \"activity.no_monetization_history\":\n \"Nu a fost g\u0103sit niciun istoric de planuri sau solduri pentru acest subiect.\",\n \"activity.loading_payments\": \"Se \u00EEncarc\u0103 pl\u0103\u021Bile...\",\n \"activity.no_payments\": \"Nu a fost g\u0103sit\u0103 activitate de plat\u0103.\",\n \"activity.loading_payment_detail\": \"Se \u00EEncarc\u0103 detaliile pl\u0103\u021Bii...\",\n \"activity.resume_payment\": \"Reia\",\n \"activity.loading_invoices\": \"Se \u00EEncarc\u0103 facturile...\",\n \"activity.no_invoices\": \"Nu au fost g\u0103site facturi.\",\n \"activity.loading_invoice_detail\": \"Se \u00EEncarc\u0103 detaliile facturii...\",\n \"activity.lifecycle_history\": \"Istoric ciclu de via\u021B\u0103\",\n \"activity.open_document\": \"Deschide documentul\",\n \"activity.open_external\": \"Deschide extern\",\n \"activity.notification_detail\": \"Detaliu notificare\",\n \"activity.loading_notifications\": \"Se \u00EEncarc\u0103 notific\u0103rile...\",\n \"activity.no_notifications\": \"Nu a fost g\u0103sit\u0103 activitate de notificare.\",\n \"activity.loading_notification_detail\": \"Se \u00EEncarc\u0103 detaliile notific\u0103rii...\",\n \"activity.monetization_overview_hint\":\n \"Revizuie\u0219te planurile, abonamentele \u0219i soldurile curente pentru aplica\u021Biile legate de acest subiect.\",\n \"activity.monetization_overview_hint_with_past\":\n \"Revizuie\u0219te planurile, abonamentele \u0219i soldurile curente \u0219i trecute pentru aplica\u021Biile acestui subiect.\",\n \"activity.monetization_summary_title\": \"Planuri \u0219i solduri\",\n \"activity.monetization_summary_subtitle\":\n \"Revizuie\u0219te planurile active, abonamentele \u0219i soldurile \u00EEnainte s\u0103 deschizi detaliile aplica\u021Biei sau istoricul.\",\n \"activity.monetization_summary_apps\": \"Aplica\u021Bii\",\n \"activity.monetization_summary_subscriptions\": \"Abonamente\",\n \"activity.monetization_summary_balances\": \"Solduri\",\n \"activity.monetization_summary_currencies\": \"Monede nominale\",\n \"activity.monetization_card_subtitle\":\n \"Planurile curente, soldurile \u0219i starea abonamentului pentru aceast\u0103 aplica\u021Bie.\",\n \"activity.monetization_focus_xapp\": \"Doar aceast\u0103 aplica\u021Bie\",\n \"activity.monetization_show_past\": \"Include aplica\u021Biile anterioare\",\n \"activity.monetization_show_current_only\": \"Doar aplica\u021Biile curente\",\n \"activity.monetization_open_plans\": \"Vezi planurile\",\n \"activity.monetization_open_history\": \"Vezi istoricul\",\n \"activity.monetization_access_label\": \"Acces\",\n \"activity.monetization_plan_label\": \"Plan\",\n \"activity.monetization_credits_label\": \"Sold\",\n \"activity.monetization_subscription_label\": \"Abonament\",\n \"activity.monetization_coverage_label\": \"Stare re\u00EEnnoire\",\n \"activity.monetization_renews_at\": \"Se re\u00EEnnoie\u0219te la\",\n \"activity.monetization_balance_state\": \"Status sold\",\n \"activity.monetization_balances_label\": \"Solduri\",\n \"activity.monetization_source_label\": \"Origine\",\n \"activity.monetization_no_currency\": \"F\u0103r\u0103 moned\u0103 nominal\u0103\",\n \"activity.monetization_unknown\": \"Necunoscut\",\n \"activity.monetization_none\": \"Niciunul\",\n \"activity.monetization_no_source\": \"F\u0103r\u0103 surs\u0103\",\n \"activity.monetization_no_subscription\": \"F\u0103r\u0103 abonament\",\n \"activity.monetization_no_recurring_coverage\": \"F\u0103r\u0103 acoperire recurent\u0103\",\n \"activity.monetization_not_scheduled\": \"Neprogramat\",\n \"activity.monetization_balance_unknown\": \"necunoscut\",\n \"activity.page_of\": \"Pagina {page} din {totalPages}\",\n \"activity.event\": \"Eveniment\",\n \"activity.event_fallback\": \"eveniment\",\n \"activity.request_detail_title\": \"Detalii cerere\",\n \"activity.show_details\": \"Arat\u0103 detalii\",\n \"activity.hide_details\": \"Ascunde detalii\",\n \"activity.response_title\": \"R\u0103spuns\",\n \"activity.payment_pending\": \"Plat\u0103 \u00EEn a\u0219teptare\",\n \"activity.payment_required\": \"Plata este necesar\u0103\",\n \"activity.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"activity.confirm_payment\": \"Confirm\u0103 plata\",\n \"activity.confirming_payment\": \"Se confirm\u0103...\",\n \"activity.refresh_status\": \"Re\u00EEmprosp\u0103teaz\u0103 starea\",\n \"activity.waiting_for_payment\": \"\u00CEn a\u0219teptarea confirm\u0103rii pl\u0103\u021Bii\u2026\",\n \"activity.waiting_for_response\": \"\u00CEn a\u0219teptarea r\u0103spunsului\u2026\",\n \"activity.execution_timeline\": \"Cronologia execu\u021Biei\",\n \"activity.artifacts_title\": \"Artefacte\",\n \"activity.download_artifact\": \"Descarc\u0103 artefactul\",\n \"activity.related_widgets_title\": \"Widget-uri asociate\",\n \"activity.help_title\": \"Ajutor\",\n \"activity.back_to_requests\": \"\u00CEnapoi la cereri\",\n \"activity.open_widget\": \"Deschide {widget}\",\n \"activity.help_request\":\n \"Ai nevoie de ajutor pentru aceast\u0103 cerere? Contacteaz\u0103 administratorul folosind ID-ul cererii de mai sus.\",\n \"activity.timeline_duration_ms\": \"{value}ms\",\n \"activity.timeline_duration_seconds\": \"{value}s\",\n \"activity.timeline_duration_minutes\": \"{value}m\",\n \"activity.timeline_count_one\": \"{count} eveniment\",\n \"activity.timeline_count_other\": \"{count} evenimente\",\n \"activity.timeline_error_count_one\": \"{count} eroare\",\n \"activity.timeline_error_count_other\": \"{count} erori\",\n \"activity.guard_badge\": \"gard\u0103: {value}\",\n \"activity.trigger_badge\": \"declan\u0219ator: {value}\",\n \"activity.outcome_badge\": \"rezultat: {value}\",\n \"activity.current_access_badge\": \"acces: {value}\",\n \"activity.current_access_detail\": \"Acces curent: {value}\",\n \"activity.reason_detail\": \"motiv={value}\",\n \"activity.guard_action_upgrade_subscription\": \"Actualizeaz\u0103 abonamentul{suffix}\",\n \"activity.guard_action_complete_payment\": \"Finalizeaz\u0103 plata{suffix}\",\n \"activity.guard_action_step_up_authentication\":\n \"Finalizeaz\u0103 autentificarea suplimentar\u0103{suffix}\",\n \"activity.guard_action_confirm_action\": \"Confirm\u0103 ac\u021Biunea\",\n \"activity.guard_action_confirm_action_message\": \"Confirm\u0103 ac\u021Biunea ({message})\",\n \"activity.guard_action_custom\": \"Ac\u021Biune: {kind}\",\n ...buildMarketplaceXmsCatalog(\"ro\"),\n \"status.unread\": \"Necitit\",\n \"status.read\": \"Citit\",\n \"common.back\": \"\u00CEnapoi\",\n \"catalog.search_placeholder\": \"Caut\u0103 dup\u0103 nume, descriere...\",\n \"catalog.search_aria\": \"Caut\u0103 aplica\u021Bii\",\n \"catalog.filter_by_tag\": \"Filtreaz\u0103 dup\u0103 etichet\u0103\",\n \"catalog.results_all\": \"{count} aplica\u021Bi{suffix}\",\n \"catalog.results_filtered\": \"{count} din {total} aplica\u021Bi{suffix}\",\n \"catalog.no_apps_found\": \"Nu au fost g\u0103site aplica\u021Bii\",\n \"catalog.empty_added_only\":\n \"Nu exist\u0103 \u00EEnc\u0103 aplica\u021Bii instalate pentru subiectul curent. Dezactiveaz\u0103 filtrul Doar ad\u0103ugate pentru a vedea catalogul complet.\",\n \"catalog.empty_filtered\":\n \"\u00CEncearc\u0103 s\u0103 ajustezi c\u0103utarea sau filtrele pentru a g\u0103si ceea ce cau\u021Bi.\",\n \"catalog.empty_default\": \"Momentan nu exist\u0103 aplica\u021Bii disponibile \u00EEn catalog.\",\n \"catalog.view_details\": \"Vezi detalii\",\n \"catalog.remove_app_title\": \"Elimini aplica\u021Bia?\",\n \"catalog.remove_app_description\":\n \"Elimini {title} din spa\u021Biul de lucru curent? O po\u021Bi ad\u0103uga din nou mai t\u00E2rziu.\",\n \"xapp.kicker_publisher\": \"Dezvoltator: {publisher}\",\n \"xapp.kicker_default\": \"Xapp\",\n \"xapp.add_to_workspace\": \"Adaug\u0103 \u00EEn spa\u021Biul de lucru\",\n \"xapp.remove_from_workspace\": \"Elimin\u0103 din spa\u021Biul de lucru\",\n \"xapp.update_app\": \"Actualizeaz\u0103 aplica\u021Bia\",\n \"xapp.open_app\": \"Deschide aplica\u021Bia\",\n \"xapp.terms_title\": \"Termeni \u0219i condi\u021Bii\",\n \"xapp.update_available\": \"Actualizare disponibil\u0103\",\n \"xapp.about_title\": \"Despre\",\n \"xapp.available_views_title\": \"Vizualiz\u0103ri disponibile\",\n \"xapp.open_to_access_views\":\n \"Deschide aceast\u0103 aplica\u021Bie pentru a o porni \u0219i instala automat \u00EEn spa\u021Biul t\u0103u de lucru.\",\n \"xapp.add_to_access_views\":\n \"Adaug\u0103 aceast\u0103 aplica\u021Bie \u00EEn spa\u021Biul t\u0103u de lucru pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.update_to_access_views_auto\":\n \"Deschide o vizualizare pentru a actualiza automat aplica\u021Bia \u00EEn spa\u021Biul t\u0103u de lucru.\",\n \"xapp.update_to_access_views\":\n \"Este disponibil\u0103 o actualizare. Actualizeaz\u0103 aplica\u021Bia pentru a-i accesa vizualiz\u0103rile disponibile.\",\n \"xapp.load_as_user_to_access\":\n \"\u00CEncarc\u0103 catalogul ca utilizator pentru a accesa aceast\u0103 aplica\u021Bie.\",\n \"xapp.no_views_available\": \"Nu exist\u0103 \u00EEn prezent vizualiz\u0103ri disponibile pentru aplica\u021Bie.\",\n \"xapp.widget_primary\": \"Principal\",\n \"xapp.widget_open\": \"Deschide\",\n \"xapp.how_app_runs\": \"Cum ruleaz\u0103 aceast\u0103 aplica\u021Bie\",\n \"xapp.view_details\": \"Vezi detalii\",\n \"xapp.no_run_requirements\":\n \"Aceast\u0103 aplica\u021Bie nu are cerin\u021Be suplimentare de rulare configurate.\",\n \"xapp.guard_summary\":\n \"Aceast\u0103 aplica\u021Bie include {itemCount} verific\u0103r{itemSuffix} de rulare \u00EEn {stageCount} etap{stageSuffix}. Deschide detaliile pentru a vedea accesul, plata sau pa\u0219ii de continuare.\",\n \"xapp.trigger_before_tool_run\": \"\u00CEnainte de rularea aplica\u021Biei\",\n \"xapp.trigger_after_tool_run\": \"Dup\u0103 finalizarea aplica\u021Biei\",\n \"xapp.trigger_before_widget_open\": \"\u00CEnainte de deschiderea aplica\u021Biei\",\n \"xapp.trigger_after_widget_open\": \"Dup\u0103 deschiderea aplica\u021Biei\",\n \"xapp.trigger_default\": \"Etap\u0103 aplica\u021Bie\",\n \"xapp.policy_any\": \"Este suficient\u0103 una\",\n \"xapp.policy_all\": \"Se aplic\u0103 to\u021Bi pa\u0219ii\",\n \"xapp.auto\": \"Automat\",\n \"xapp.user_step\": \"Pas utilizator\",\n \"xapp.required\": \"Obligatoriu\",\n \"xapp.info\": \"Informativ\",\n \"xapp.screenshots_title\": \"Capturi de ecran\",\n \"xapp.screenshot_alt\": \"Captur\u0103 de ecran {index}\",\n \"xapp.usage_credits_title\": \"Credite de utilizare\",\n \"xapp.current_access_title\": \"Acces curent\",\n \"xapp.access_state_label\": \"Stare acces\",\n \"xapp.access_state_available\": \"disponibil\",\n \"xapp.subscription_status_label\": \"Stare abonament\",\n \"xapp.subscription_coverage_label\": \"Acoperire\",\n \"xapp.subscription_reason_label\": \"Motiv stare\",\n \"xapp.subscription_overdue_since_label\": \"\u00CEn \u00EEnt\u00E2rziere din\",\n \"xapp.subscription_expiry_boundary_label\": \"Limit\u0103 expirare\",\n \"xapp.subscription_coverage_active\": \"\u00CEnc\u0103 activ\",\n \"xapp.subscription_coverage_inactive\": \"Inactiv\",\n \"xapp.subscription_reason_grace_covered_past_due\": \"Accesul r\u0103m\u00E2ne activ \u00EEn perioada de gra\u021Bie\",\n \"xapp.subscription_reason_past_due_after_period_end\":\n \"Perioada curent\u0103 s-a \u00EEncheiat f\u0103r\u0103 re\u00EEnnoire reu\u0219it\u0103\",\n \"xapp.subscription_reason_expired_after_boundary\": \"A fost atins\u0103 limita de expirare\",\n \"xapp.renews_at_label\": \"Se re\u00EEnnoie\u0219te la\",\n \"xapp.current_period_ends_label\": \"Perioada curent\u0103 se \u00EEncheie la\",\n \"xapp.cancelled_at_label\": \"Anulat la\",\n \"xapp.expires_at_label\": \"Expir\u0103 la\",\n \"xapp.subscription_refresh_action\": \"Actualizeaz\u0103 starea\",\n \"xapp.subscription_refreshing\": \"Se actualizeaz\u0103...\",\n \"xapp.subscription_refresh_failed\": \"Starea abonamentului nu a putut fi actualizat\u0103.\",\n \"xapp.subscription_cancel_action\": \"Anuleaz\u0103 abonamentul\",\n \"xapp.subscription_cancelling\": \"Se anuleaz\u0103...\",\n \"xapp.subscription_cancel_title\": \"Anulezi abonamentul?\",\n \"xapp.subscription_cancel_description\":\n \"Abonamentul nu se va mai re\u00EEnnoi. Accesul curent r\u0103m\u00E2ne disponibil p\u00E2n\u0103 la sf\u00E2r\u0219itul perioadei curente.\",\n \"xapp.subscription_cancel_failed\": \"Abonamentul nu a putut fi anulat.\",\n \"xapp.lifecycle_preview_at_label\": \"Previzualizare la\",\n \"xapp.lifecycle_preview_hint\":\n \"Ciclul de via\u021B\u0103 al abonamentului este previzualizat pentru momentul selectat.\",\n \"xapp.virtual_currency_label\": \"Moned\u0103 virtual\u0103\",\n \"xapp.current_balances_label\": \"Solduri curente\",\n \"xapp.current_credits_label\": \"Credite acum\",\n \"xapp.credits_remaining_label\": \"Sold\",\n \"xapp.credit_balance_label\": \"Credite\",\n \"xapp.available_label\": \"Disponibile\",\n \"xapp.ready_to_use\": \"{count} gata de utilizare\",\n \"xapp.source_label\": \"Surs\u0103\",\n \"xapp.linked_payment_sessions\": \"{count} asociate sesiunilor de plat\u0103 vizibile\",\n \"xapp.in_flight_label\": \"\u00CEn curs\",\n \"xapp.needs_review_label\": \"Necesit\u0103 verificare\",\n \"xapp.invalid_label\": \"Invalide\",\n \"xapp.invalid_credits\":\n \"{count} \u00EEnregistr\u0103ri orfane din ledger nu reprezint\u0103 credite utilizabile\",\n \"xapp.by_tool_label\": \"Dup\u0103 instrument\",\n \"xapp.for_label\": \"pentru\",\n \"xapp.invalid_short\": \"{count} invalide\",\n \"xapp.in_flight_short\": \"{count} \u00EEn curs\",\n \"xapp.stale_short\": \"{count} expirate\",\n \"xapp.activity_title\": \"Activitate\",\n \"xapp.details_title\": \"Detalii\",\n \"xapp.app_id_label\": \"ID aplica\u021Bie\",\n \"xapp.status_added\": \"Ad\u0103ugat\u0103\",\n \"xapp.status_available\": \"Disponibil\u0103\",\n \"xapp.publisher_label\": \"Dezvoltator\",\n \"xapp.tags_label\": \"Etichete\",\n \"xapp.view_terms\": \"Vezi termenii \u0219i condi\u021Biile\",\n \"xapp.close_terms_dialog\": \"\u00CEnchide dialogul termenilor\",\n \"xapp.view_full_document\": \"Vezi documentul complet\",\n \"xapp.accept_terms\": \"Am citit \u0219i accept termenii \u0219i condi\u021Biile.\",\n \"xapp.accept_add_app\": \"Accept\u0103 \u0219i adaug\u0103 aplica\u021Bia\",\n \"xapp.accept_update\": \"Accept\u0103 \u0219i actualizeaz\u0103\",\n \"widget.session_ended_title\": \"Sesiune \u00EEncheiat\u0103\",\n \"widget.session_ended_message\": \"Sesiunea s-a \u00EEncheiat. Revino \u0219i deschide din nou widgetul.\",\n \"widget.session_expired_title\": \"Sesiunea widgetului a expirat\",\n \"widget.session_expired_refresh_failed\":\n \"Sesiunea acestui widget a expirat \u0219i nu a putut fi re\u00EEnnoit\u0103. Deschide-l din nou pentru a continua.\",\n \"widget.session_expired_default\":\n \"Sesiunea acestui widget s-a \u00EEncheiat. Revino \u0219i deschide-l din nou pentru a continua.\",\n \"widget.confirm_continue_prompt\": \"Aceast\u0103 ac\u021Biune necesit\u0103 confirmare. Continua\u021Bi?\",\n \"widget.unable_to_load\": \"Widgetul nu a putut fi \u00EEnc\u0103rcat\",\n \"widget.preparing\": \"Se preg\u0103te\u0219te {title}...\",\n \"widget.secure_session_setup\": \"Se configureaz\u0103 o sesiune securizat\u0103 pentru aceast\u0103 aplica\u021Bie.\",\n \"payment_lock.complete_payment\": \"Finalizeaz\u0103 plata\",\n \"payment_lock.continue\": \"Continu\u0103\",\n \"payment_lock.confirming_payment_finality\": \"Se confirm\u0103 finalitatea pl\u0103\u021Bii la procesator.\",\n \"payment_lock.pending_retry_confirm\":\n \"Plata este \u00EEnc\u0103 \u00EEn a\u0219teptare la procesator. Re\u00EEncearc\u0103 verificarea \u00EEn c\u00E2teva secunde.\",\n \"payment_lock.confirmed_refresh\": \"Plata este confirmat\u0103. Re\u00EEmprosp\u0103teaz\u0103 pentru a continua.\",\n \"payment_lock.not_settled_new_attempt\":\n \"Plata nu este finalizat\u0103. \u00CEncepe o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.requires_additional_action\":\n \"Plata necesit\u0103 o ac\u021Biune suplimentar\u0103. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.attempt_failed\":\n \"Ultima \u00EEncercare de plat\u0103 a e\u0219uat. Finalizeaz\u0103 plata pentru a continua.\",\n \"payment_lock.evidence_used\":\n \"Dovada pl\u0103\u021Bii a fost deja folosit\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.evidence_consumed\":\n \"Dovada pl\u0103\u021Bii a fost deja consumat\u0103. Porne\u0219te o nou\u0103 \u00EEncercare de plat\u0103.\",\n \"payment_lock.required_before_request\":\n \"Plata este necesar\u0103 \u00EEnainte ca aceast\u0103 cerere s\u0103 poat\u0103 continua.\",\n },\n} as const;\n\nexport function MarketplaceI18nProvider(props: { locale?: string; children: ReactNode }) {\n return (\n <I18nProvider locale={props.locale || \"en\"} catalogs={MARKETPLACE_CATALOGS}>\n {props.children}\n </I18nProvider>\n );\n}\n\nexport function useMarketplaceI18n() {\n return useI18n();\n}\n\nexport function resolveMarketplaceText(value: LocalizedText, locale?: string | null): string {\n let candidateValue: LocalizedText = value;\n if (typeof candidateValue === \"string\") {\n const trimmed = candidateValue.trim();\n if (!trimmed) return \"\";\n if (trimmed.startsWith(\"{\")) {\n try {\n const parsed = JSON.parse(trimmed);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n candidateValue = parsed as Record<string, string | null | undefined>;\n } else {\n return trimmed;\n }\n } catch {\n return trimmed;\n }\n } else {\n return trimmed;\n }\n }\n if (!candidateValue || typeof candidateValue !== \"object\" || Array.isArray(candidateValue)) {\n return \"\";\n }\n const currentLocale = String(locale || \"en\").trim() || \"en\";\n const direct = candidateValue[currentLocale];\n if (typeof direct === \"string\" && direct.trim()) return direct;\n const base = currentLocale.split(\"-\")[0];\n const baseValue = candidateValue[base];\n if (typeof baseValue === \"string\" && baseValue.trim()) return baseValue;\n const english = candidateValue.en;\n if (typeof english === \"string\" && english.trim()) return english;\n for (const localized of Object.values(candidateValue)) {\n if (typeof localized === \"string\" && localized.trim()) return localized;\n }\n return \"\";\n}\n", "import { Route, Routes } from \"react-router-dom\";\nimport { CatalogPage } from \"./pages/CatalogPage\";\nimport { InvoicesPage } from \"./pages/InvoicesPage\";\nimport MonetizationPage from \"./pages/MonetizationPage\";\nimport { NotificationsPage } from \"./pages/NotificationsPage\";\nimport { PaymentsPage } from \"./pages/PaymentsPage\";\nimport { RequestDetailPage } from \"./pages/RequestDetailPage\";\nimport { RequestsPage } from \"./pages/RequestsPage\";\nimport XappDetailPage, { XappPlansPage } from \"./pages/XappDetailPage\";\nimport { WidgetView } from \"./pages/WidgetView\";\nimport { PublishersPage } from \"./pages/PublishersPage\";\nimport { PublisherDetailPage } from \"./pages/PublisherDetailPage\";\n\nexport function MarketplaceApp() {\n return (\n <Routes>\n {/*\n IMPORTANT: These routes must be mountable under arbitrary bases (Portal: /marketplace,\n Embed: /embed/catalog). Therefore, we use relative paths (no leading \"/\").\n */}\n <Route path=\"\" element={<CatalogPage />} />\n <Route path=\"publishers\" element={<PublishersPage />} />\n <Route path=\"publishers/:publisherSlug\" element={<PublisherDetailPage />} />\n <Route path=\"xapps/:xappId\" element={<XappDetailPage />} />\n <Route path=\"xapps/:xappId/plans\" element={<XappPlansPage />} />\n <Route path=\"requests\" element={<RequestsPage />} />\n <Route path=\"monetization\" element={<MonetizationPage />} />\n <Route path=\"payments\" element={<PaymentsPage />} />\n <Route path=\"invoices\" element={<InvoicesPage />} />\n <Route path=\"notifications\" element={<NotificationsPage />} />\n <Route path=\"requests/:id\" element={<RequestDetailPage />} />\n <Route path=\"widget/:installationId/:widgetId\" element={<WidgetView />} />\n <Route path=\"*\" element={<CatalogPage />} />\n </Routes>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport type { CatalogXapp } from \"../types\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { shouldHideMarketplaceVersions } from \"../utils/installationPolicy\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype StoredCatalogFilters = {\n addedOnly?: boolean;\n selectedTag?: string;\n};\n\ntype PendingRemoval = {\n installationId: string;\n xappId: string;\n title: string;\n} | null;\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction getDefaultWidgetId(x: CatalogXapp): string | null {\n const rawWidgets = asRecord(x.manifest).widgets;\n const widgets: unknown[] | null = Array.isArray(rawWidgets) ? rawWidgets : null;\n if (!widgets || widgets.length === 0) return null;\n const def = widgets.find((w) => asRecord(w).default === true);\n const pick = def || widgets[0];\n return readFirstString(asRecord(pick).id) || null;\n}\n\nfunction getDefaultWidgetName(x: CatalogXapp, locale?: string | null): string | null {\n const rawWidgets = asRecord(x.manifest).widgets;\n const widgets: unknown[] | null = Array.isArray(rawWidgets) ? rawWidgets : null;\n if (!widgets || widgets.length === 0) return null;\n const def = widgets.find((w) => asRecord(w).default === true);\n const pick = asRecord(def || widgets[0]);\n return (\n resolveMarketplaceText(pick.title as any, locale) || readFirstString(pick.name, pick.id) || null\n );\n}\n\nfunction buildCatalogFilterStorageKey(input: {\n isEmbedded: boolean;\n singleXappMode?: boolean;\n xappId?: string;\n publishers?: string[];\n tags?: string[];\n subjectId?: string | null;\n}): string {\n const mode = input.isEmbedded ? \"embed\" : \"portal\";\n const scope = input.singleXappMode && input.xappId ? `xapp:${input.xappId}` : \"catalog\";\n const publishers = (input.publishers ?? []).slice().sort().join(\",\") || \"all\";\n const tags = (input.tags ?? []).slice().sort().join(\",\") || \"all\";\n const subject = String(input.subjectId || \"\").trim() || \"anonymous\";\n return `xapps:marketplace:catalog-filters:${mode}:${scope}:subject=${subject}:publishers=${publishers}:tags=${tags}`;\n}\n\nfunction readStoredCatalogFilters(storageKey: string): StoredCatalogFilters | null {\n if (typeof window === \"undefined\") return null;\n try {\n const raw = window.localStorage.getItem(storageKey);\n if (!raw) return null;\n const parsed = JSON.parse(raw) as StoredCatalogFilters | null;\n if (!parsed || typeof parsed !== \"object\") return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nfunction writeStoredCatalogFilters(storageKey: string, value: StoredCatalogFilters): void {\n if (typeof window === \"undefined\") return;\n try {\n window.localStorage.setItem(storageKey, JSON.stringify(value));\n } catch {\n // Ignore storage write failures; filters still work for the current session.\n }\n}\n\nexport function CatalogPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel = env?.copy?.addAppLabel || \"Add app\";\n const removeAppLabel = env?.copy?.removeAppLabel || \"Remove app\";\n const openAppLabel = env?.copy?.openAppLabel || t(\"xapp.open_app\", undefined, \"Open app\");\n const installationPolicyResolved = env?.installationPolicyResolved !== false;\n const mutationControlsReady = installationPolicyResolved || !host.subjectId || !canMutate;\n const autoUpdateMode =\n mutationControlsReady &&\n (env?.installationPolicy ?? host.installationPolicy)?.update_mode ===\n \"auto_update_compatible\" &&\n Boolean(host.subjectId);\n const autoAvailableMode =\n mutationControlsReady &&\n (env?.installationPolicy ?? host.installationPolicy)?.mode === \"auto_available\" &&\n Boolean(host.subjectId);\n const hideVersions = shouldHideMarketplaceVersions({\n installationPolicy: env?.installationPolicy ?? host.installationPolicy ?? null,\n installationPolicyResolved,\n subjectId: host.subjectId,\n });\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const storageKey = useMemo(\n () =>\n buildCatalogFilterStorageKey({\n isEmbedded,\n singleXappMode: env?.singleXappMode,\n xappId: env?.xappId,\n publishers: env?.publishers,\n tags: env?.tags,\n subjectId: host.subjectId,\n }),\n [env?.publishers, env?.singleXappMode, env?.tags, env?.xappId, host.subjectId, isEmbedded],\n );\n const defaultTag = env?.tags?.[0] ?? \"\";\n\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [q, setQ] = useState(\"\");\n const [installedOnly, setInstalledOnly] = useState<boolean>(() =>\n Boolean(readStoredCatalogFilters(storageKey)?.addedOnly),\n );\n const [selectedTag, setSelectedTag] = useState<string>(() => {\n const stored = readStoredCatalogFilters(storageKey);\n return typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag;\n });\n const [pendingRemoval, setPendingRemoval] = useState<PendingRemoval>(null);\n\n const installationsByXappId = host.getInstallationsByXappId();\n\n const allTags = useMemo(() => {\n const s = new Set<string>();\n for (const x of items) {\n const tags = x.manifest?.tags;\n if (Array.isArray(tags)) {\n for (const t of tags) s.add(t);\n }\n }\n // If env.tags provided, we might want to restrict the dropdown to only those.\n if (env?.tags && env.tags.length > 0) {\n return Array.from(s)\n .filter((t) => env.tags!.includes(t))\n .sort((a, b) => a.localeCompare(b));\n }\n return Array.from(s).sort((a, b) => a.localeCompare(b));\n }, [items, env?.tags]);\n\n async function refresh() {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listCatalogXapps();\n setItems(Array.isArray(res?.items) ? res.items : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const stored = readStoredCatalogFilters(storageKey);\n setInstalledOnly(Boolean(stored?.addedOnly));\n setSelectedTag(typeof stored?.selectedTag === \"string\" ? stored.selectedTag : defaultTag);\n }, [defaultTag, storageKey]);\n\n useEffect(() => {\n if (!autoAvailableMode || !installedOnly) return;\n setInstalledOnly(false);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: false,\n selectedTag: selectedTag || \"\",\n });\n }, [autoAvailableMode, installedOnly, selectedTag, storageKey]);\n\n useEffect(() => {\n const restrictedTags = env?.tags ?? [];\n if (selectedTag && restrictedTags.length > 0 && !restrictedTags.includes(selectedTag)) {\n setSelectedTag(defaultTag);\n }\n }, [defaultTag, env?.tags, selectedTag]);\n\n useEffect(() => {\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: selectedTag || \"\",\n });\n }, [installedOnly, selectedTag, storageKey]);\n\n const filtered = useMemo(() => {\n const qq = q.trim().toLowerCase();\n return items.filter((x) => {\n const inst = installationsByXappId[String(x.id)];\n const isInstalled = Boolean(inst);\n if (installedOnly && !isInstalled) return false;\n\n // Filter by tags from env (if any) - these are usually mandatory restrictions from the session\n if (env?.tags && env.tags.length > 0) {\n const xTags = Array.isArray(x.manifest?.tags)\n ? x.manifest.tags.filter((tag): tag is string => typeof tag === \"string\")\n : [];\n const hasMatch = env.tags.some((t) => xTags.includes(t));\n if (!hasMatch) return false;\n }\n\n // Filter by publishers from env (if any)\n if (env?.publishers && env.publishers.length > 0) {\n if (x.publisher?.slug && !env.publishers.includes(x.publisher.slug)) return false;\n }\n\n // Local UI filter (Tags dropdown)\n if (selectedTag) {\n const tags = asRecord(x).manifest ? asRecord(asRecord(x).manifest).tags : undefined;\n if (!Array.isArray(tags) || !tags.includes(selectedTag)) return false;\n }\n\n if (!qq) return true;\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n resolveMarketplaceText(x.name as any, locale) ||\n readFirstString(x.name);\n const description =\n resolveMarketplaceText(manifest.description as any, locale) ||\n resolveMarketplaceText(x.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${description} ${x.slug}`.toLowerCase();\n return hay.includes(qq);\n });\n }, [\n env?.publishers,\n env?.tags,\n installationsByXappId,\n installedOnly,\n items,\n locale,\n q,\n selectedTag,\n ]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav active=\"xapps\" isEmbedded={isEmbedded} tokenSearch={tokenSearch} />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">{t(\"common.search\", undefined, \"Search\")}</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"catalog.search_placeholder\",\n undefined,\n \"Search by name, description...\",\n )}\n aria-label={t(\"catalog.search_aria\", undefined, \"Search apps\")}\n />\n </div>\n\n <div className=\"mx-input-group\">\n <label className=\"mx-label\">{t(\"common.tag\", undefined, \"Tag\")}</label>\n <select\n className=\"mx-input mx-select\"\n value={selectedTag}\n onChange={(e) => {\n const next = e.target.value;\n setSelectedTag(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: installedOnly,\n selectedTag: next,\n });\n }}\n aria-label={t(\"catalog.filter_by_tag\", undefined, \"Filter by tag\")}\n >\n <option value=\"\">{t(\"common.all_tags\", undefined, \"All Tags\")}</option>\n {allTags.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n </div>\n\n {mutationControlsReady && !autoAvailableMode ? (\n <label className=\"mx-checkbox-label\">\n <input\n type=\"checkbox\"\n checked={installedOnly}\n onChange={(e) => {\n const next = e.target.checked;\n setInstalledOnly(next);\n writeStoredCatalogFilters(storageKey, {\n addedOnly: next,\n selectedTag: selectedTag || \"\",\n });\n }}\n className=\"mx-checkbox\"\n />\n <span className=\"mx-label mx-label-inline\">\n {t(\"common.added_only\", undefined, \"Added only\")}\n </span>\n </label>\n ) : null}\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 6 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filtered.length === items.length\n ? t(\n \"catalog.results_all\",\n {\n count: filtered.length,\n suffix: filtered.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} app${filtered.length === 1 ? \"\" : \"s\"}`,\n )\n : t(\n \"catalog.results_filtered\",\n {\n count: filtered.length,\n total: items.length,\n suffix: items.length === 1 ? \"\" : \"s\",\n },\n `${filtered.length} of ${items.length} app${items.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filtered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"catalog.no_apps_found\", undefined, \"No apps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {!autoAvailableMode && installedOnly && items.length > 0\n ? t(\n \"catalog.empty_added_only\",\n undefined,\n \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\",\n )\n : q || selectedTag || installedOnly\n ? t(\n \"catalog.empty_filtered\",\n undefined,\n \"Try adjusting your search or filters to find what you're looking for.\",\n )\n : t(\n \"catalog.empty_default\",\n undefined,\n \"No apps are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n filtered.map((x: CatalogXapp) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n resolveMarketplaceText(x.name as any, locale) ||\n readFirstString(x.name, x.slug) ||\n \"App\";\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n resolveMarketplaceText(x.description as any, locale) ||\n readFirstString(x.description);\n const image =\n typeof manifest.image === \"string\"\n ? manifest.image\n : \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const updateAvailable = Boolean(inst?.updateAvailable);\n const defaultWidgetId = getDefaultWidgetId(x);\n const defaultWidgetName =\n getDefaultWidgetName(x, locale) || t(\"common.widget\", undefined, \"Widget\");\n\n const xTerms = asRecord(manifest.terms);\n const requiresTerms = Boolean(\n Object.keys(xTerms).length > 0 ||\n (typeof xTerms.text === \"string\" && xTerms.text.trim()) ||\n (typeof xTerms.url === \"string\" && xTerms.url.trim()),\n );\n const needsInstallDetails = !x.manifest || !(\"terms\" in manifest) || requiresTerms;\n\n const detailTo = {\n ...buildMarketplaceHref(\n loc.pathname,\n `xapps/${encodeURIComponent(String(x.id))}`,\n token ? { token } : {},\n ),\n };\n\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n {x.publisher?.slug ? (\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")}{\" \"}\n <Link\n to={{\n ...buildMarketplaceHref(\n loc.pathname,\n `publishers/${encodeURIComponent(String(x.publisher.slug))}`,\n token ? { token } : {},\n ),\n }}\n className=\"mx-inline-link\"\n >\n {x.publisher.name || x.publisher.slug}\n </Link>\n </div>\n ) : (\n <div className=\"mx-card-publisher\">\n {t(\"common.catalog_app\", undefined, \"Catalog app\")}\n </div>\n )}\n <div className=\"mx-card-badges\">\n {!autoAvailableMode && installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {!hideVersions && x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {(Array.isArray(manifest.tags) ? manifest.tags : [])\n .filter((t): t is string => typeof t === \"string\")\n .slice(0, 3)\n .map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"catalog.view_details\", undefined, \"View details\")}\n </Link>\n {canMutate &&\n mutationControlsReady &&\n (!installed ? (\n <button\n className=\"mx-btn mx-btn-primary mx-btn-sm\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (needsInstallDetails) {\n navigate(detailTo);\n return;\n }\n host.requestInstall({\n xappId: String(x.id),\n defaultWidgetId,\n xappTitle: title,\n widgetName: defaultWidgetName,\n openAfterInstall: autoAvailableMode && Boolean(defaultWidgetId),\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {autoAvailableMode ? openAppLabel : addAppLabel}\n </button>\n ) : autoAvailableMode ? (\n <button\n className=\"mx-btn mx-btn-primary mx-btn-sm\"\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (!defaultWidgetId || !inst?.installationId) {\n navigate(detailTo);\n return;\n }\n if (updateAvailable && host.requestUpdate && autoUpdateMode) {\n host.requestUpdate({\n installationId: inst.installationId,\n xappId: String(x.id),\n widgetId: defaultWidgetId,\n xappTitle: title,\n widgetName: defaultWidgetName,\n });\n return;\n }\n if (updateAvailable) {\n navigate(detailTo);\n return;\n }\n host.openWidget({\n installationId: inst.installationId,\n widgetId: defaultWidgetId,\n xappId: String(x.id),\n xappTitle: title,\n widgetName: t(\"common.widget\", undefined, \"Widget\"),\n });\n }}\n >\n {openAppLabel}\n </button>\n ) : !autoAvailableMode ? (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm mx-btn-danger-text\"\n disabled={!inst?.installationId}\n onClick={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (inst?.installationId) {\n setPendingRemoval({\n installationId: inst.installationId,\n xappId: String(x.id),\n title,\n });\n }\n }}\n >\n {removeAppLabel}\n </button>\n ) : null)}\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n <ConfirmActionModal\n open={Boolean(pendingRemoval)}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={\n pendingRemoval\n ? t(\n \"catalog.remove_app_description\",\n { title: pendingRemoval.title },\n `Remove ${pendingRemoval.title} from your current workspace? You can add it again later.`,\n )\n : \"\"\n }\n confirmLabel={removeAppLabel}\n onCancel={() => setPendingRemoval(null)}\n onConfirm={() => {\n if (!pendingRemoval) return;\n host.requestUninstall?.({\n installationId: pendingRemoval.installationId,\n xappId: pendingRemoval.xappId,\n });\n setPendingRemoval(null);\n }}\n />\n </div>\n );\n}\n", "import { useEffect } from \"react\";\nimport { useMarketplaceI18n } from \"../i18n\";\n\nexport function ConfirmActionModal(props: {\n open: boolean;\n title: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n}) {\n const { t } = useMarketplaceI18n();\n const {\n open,\n title,\n description,\n confirmLabel = t(\"common.confirm\", undefined, \"Confirm\"),\n cancelLabel = t(\"common.cancel\", undefined, \"Cancel\"),\n onConfirm,\n onCancel,\n } = props;\n\n useEffect(() => {\n if (!open || typeof window === \"undefined\") return;\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n event.preventDefault();\n onCancel();\n }\n };\n window.addEventListener(\"keydown\", handleKeyDown);\n return () => window.removeEventListener(\"keydown\", handleKeyDown);\n }, [onCancel, open]);\n\n if (!open) return null;\n\n return (\n <div className=\"mx-detail-modal-backdrop\" onClick={onCancel}>\n <div\n className=\"mx-sidebar-card mx-detail-modal\"\n onClick={(event) => event.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"mx-confirm-action-title\"\n >\n <div className=\"mx-detail-modal-head\">\n <h2 id=\"mx-confirm-action-title\" className=\"mx-section-title mx-section-title-tight\">\n {title}\n </h2>\n <button\n onClick={onCancel}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"common.close_dialog\", undefined, \"Close dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {description ? (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{description}</div>\n ) : null}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={onCancel}>\n {cancelLabel}\n </button>\n <button className=\"mx-btn mx-btn-outline\" data-variant=\"danger\" onClick={onConfirm}>\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>\n );\n}\n", "import { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\n\ntype MarketplacePrimaryNavProps = {\n active: \"xapps\" | \"publishers\" | \"activity\";\n isEmbedded: boolean;\n tokenSearch: string;\n};\n\nexport function MarketplacePrimaryNav(props: MarketplacePrimaryNavProps) {\n const { t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = props.tokenSearch.startsWith(\"?\")\n ? new URLSearchParams(props.tokenSearch.slice(1)).get(\"token\") || \"\"\n : \"\";\n const xappsTo = buildMarketplaceHref(loc.pathname, \"\", { token });\n const publishersTo = buildMarketplaceHref(loc.pathname, \"publishers\", { token });\n const activityTo = buildMarketplaceHref(loc.pathname, \"requests\", { token });\n\n return (\n <nav\n className=\"mx-nav-switch\"\n aria-label={t(\"nav.marketplace\", undefined, \"Marketplace navigation\")}\n >\n <Link\n to={xappsTo as any}\n className={`mx-nav-link ${props.active === \"xapps\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"xapps\" ? \"page\" : undefined}\n >\n {t(\"nav.xapps\", undefined, \"Xapps\")}\n </Link>\n <Link\n to={publishersTo as any}\n className={`mx-nav-link ${props.active === \"publishers\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"publishers\" ? \"page\" : undefined}\n >\n {t(\"nav.publishers\", undefined, \"Publishers\")}\n </Link>\n <Link\n to={activityTo as any}\n className={`mx-nav-link ${props.active === \"activity\" ? \"is-active\" : \"\"}`}\n aria-current={props.active === \"activity\" ? \"page\" : undefined}\n >\n {t(\"nav.activity\", undefined, \"Activity\")}\n </Link>\n </nav>\n );\n}\n", "function trimTrailingSlash(pathname: string): string {\n const normalized = String(pathname || \"\").trim() || \"/\";\n if (normalized === \"/\") return \"/\";\n return normalized.replace(/\\/+$/, \"\") || \"/\";\n}\n\nconst MARKETPLACE_ROUTE_SUFFIX_RE =\n /\\/(?:publishers(?:\\/[^/]+)?|xapps\\/[^/]+(?:\\/plans)?|requests(?:\\/[^/]+)?|monetization|payments|invoices|notifications|widget\\/[^/]+\\/[^/]+|widgets\\/[^/]+)$/;\n\nexport function resolveMarketplaceBasePath(pathname: string): string {\n const normalized = trimTrailingSlash(pathname);\n const stripped = normalized.replace(MARKETPLACE_ROUTE_SUFFIX_RE, \"\");\n return stripped || \"/\";\n}\n\nexport function buildMarketplaceSearch(params: Record<string, string | null | undefined>): string {\n const query = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n const normalized = String(value || \"\").trim();\n if (!normalized) continue;\n query.set(key, normalized);\n }\n const suffix = query.toString();\n return suffix ? `?${suffix}` : \"\";\n}\n\nexport function joinMarketplacePath(basePath: string, relativePath = \"\"): string {\n const normalizedBase = trimTrailingSlash(basePath);\n const normalizedRelative = String(relativePath || \"\")\n .replace(/^\\/+/, \"\")\n .trim();\n if (!normalizedRelative) return normalizedBase;\n return normalizedBase === \"/\"\n ? `/${normalizedRelative}`\n : `${normalizedBase}/${normalizedRelative}`;\n}\n\nexport function buildMarketplaceHref(\n pathname: string,\n relativePath: string,\n params: Record<string, string | null | undefined> = {},\n): { pathname: string; search: string } {\n const basePath = resolveMarketplaceBasePath(pathname);\n return {\n pathname: joinMarketplacePath(basePath, relativePath),\n search: buildMarketplaceSearch(params),\n };\n}\n", "export function readHostReturnUrl(search: string): string {\n const qs = new URLSearchParams(String(search || \"\"));\n return String(qs.get(\"xapps_host_return_url\") || qs.get(\"xappsHostReturnUrl\") || \"\").trim();\n}\n\nexport function buildTokenSearch(token: string, search: string): string {\n const params = new URLSearchParams();\n if (token) params.set(\"token\", token);\n const hostReturnUrl = readHostReturnUrl(search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n const out = params.toString();\n return out ? `?${out}` : \"\";\n}\n", "import type { MarketplaceInstallationPolicy } from \"../types\";\n\nexport function shouldHideMarketplaceVersions(input: {\n installationPolicy?: MarketplaceInstallationPolicy | null;\n installationPolicyResolved?: boolean;\n subjectId?: string | null;\n}): boolean {\n const installationPolicyResolved = input.installationPolicyResolved !== false;\n if (!installationPolicyResolved) return false;\n return (\n input.installationPolicy?.mode === \"auto_available\" &&\n input.installationPolicy?.update_mode === \"auto_update_compatible\"\n );\n}\n", "export function isRecord(value: unknown): value is Record<string, unknown> {\n return Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function asRecord(value: unknown): Record<string, unknown> {\n return isRecord(value) ? value : {};\n}\n\nexport function readString(value: unknown): string {\n if (typeof value === \"string\") return value.trim();\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n return \"\";\n}\n\nexport function readFirstString(...values: unknown[]): string {\n for (const value of values) {\n const candidate = readString(value);\n if (candidate) return candidate;\n }\n return \"\";\n}\n\nexport function parseDateValue(value: unknown): Date | null {\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? null : value;\n }\n\n if (isRecord(value)) {\n const secondsValue = value.seconds ?? value._seconds;\n const nanosValue = value.nanoseconds ?? value._nanoseconds;\n const seconds = typeof secondsValue === \"number\" ? secondsValue : Number(secondsValue);\n const nanos = typeof nanosValue === \"number\" ? nanosValue : Number(nanosValue || 0);\n if (Number.isFinite(seconds)) {\n const parsed = new Date(seconds * 1000 + (Number.isFinite(nanos) ? nanos / 1_000_000 : 0));\n return Number.isNaN(parsed.getTime()) ? null : parsed;\n }\n }\n\n const text = readString(value);\n if (!text) return null;\n\n const candidates = new Set<string>([text]);\n if (/^\\d+$/.test(text)) {\n const asMs = new Date(Number(text));\n if (!Number.isNaN(asMs.getTime())) return asMs;\n }\n if (/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}/.test(text)) {\n candidates.add(text.replace(\" \", \"T\"));\n candidates.add(`${text.replace(\" \", \"T\")}Z`);\n }\n if (text.endsWith(\" UTC\")) {\n candidates.add(`${text.slice(0, -4)}Z`);\n }\n\n for (const candidate of candidates) {\n const parsed = new Date(candidate);\n if (!Number.isNaN(parsed.getTime())) return parsed;\n }\n\n return null;\n}\n\nexport function formatDateTime(value: unknown): string {\n const parsed = parseDateValue(value);\n return parsed ? parsed.toLocaleString() : \"\";\n}\n\nexport function normalizeExpandStage(\n value: unknown,\n expanded: boolean,\n): \"inline\" | \"focus\" | \"fullscreen\" {\n return value === \"inline\" || value === \"focus\" || value === \"fullscreen\"\n ? value\n : expanded\n ? \"focus\"\n : \"inline\";\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport { readDefaultWidgetMeta } from \"../utils/xappWorkspace\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype InvoiceRecord = Record<string, unknown>;\ntype InvoicePagination = { total: number; page: number; pageSize: number; totalPages: number };\n\nexport function InvoicesPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const loc = useLocation();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedInvoiceId = query.get(\"invoiceId\") ?? \"\";\n const paymentSessionIdFilter = query.get(\"paymentSessionId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n const [items, setItems] = useState<InvoiceRecord[]>([]);\n const [focusedInvoice, setFocusedInvoice] = useState<InvoiceRecord | null>(null);\n const [focusedHistory, setFocusedHistory] = useState<InvoiceRecord[]>([]);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [pagination, setPagination] = useState<InvoicePagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n const [xappDefaultWidgetId, setXappDefaultWidgetId] = useState(\"\");\n const [xappDefaultWidgetName, setXappDefaultWidgetName] = useState(\"\");\n const [xappDefaultToolName, setXappDefaultToolName] = useState(\"\");\n const [xappOpenAppStrategy, setXappOpenAppStrategy] = useState<\"direct_widget\" | \"choose_widget\">(\n \"direct_widget\",\n );\n const xappInstallationId =\n installationIdFilter || host.getInstallationsByXappId?.()?.[xappIdFilter]?.installationId || \"\";\n const handleWorkspaceOpenApp =\n !isEmbedded &&\n xappOpenAppStrategy === \"direct_widget\" &&\n xappInstallationId &&\n xappDefaultWidgetId\n ? () => {\n host.openWidget({\n installationId: xappInstallationId,\n widgetId: xappDefaultWidgetId,\n xappId: xappIdFilter,\n xappTitle: xappTitle || xappIdFilter,\n widgetName: xappDefaultWidgetName,\n toolName: xappDefaultToolName || undefined,\n });\n }\n : undefined;\n async function refresh(page: number = 1) {\n if (!client.listMyInvoices) {\n setError(\n t(\n \"activity.unavailable_invoices_title\",\n undefined,\n \"Invoices are unavailable in this host.\",\n ),\n );\n setItems([]);\n setPagination(null);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyInvoices({\n paymentSessionId: paymentSessionIdFilter || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n const nextPagination = asRecord(res?.pagination);\n setPagination(\n Object.keys(nextPagination).length\n ? {\n total: Number(nextPagination.total || 0),\n page: Number(nextPagination.page || page),\n pageSize: Number(nextPagination.pageSize || 20),\n totalPages: Number(nextPagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"invoices\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [installationIdFilter, pageParam, paymentSessionIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedInvoiceId || !client.getMyInvoiceHistory) {\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyInvoiceHistory!(focusedInvoiceId);\n if (cancelled) return;\n const history = asRecord(res);\n setFocusedInvoice(asRecord(history.item));\n setFocusedHistory(\n Array.isArray(history.events) ? history.events.map((event) => asRecord(event)) : [],\n );\n } catch (e) {\n if (cancelled) return;\n setFocusedInvoice(null);\n setFocusedHistory([]);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedInvoiceId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n const widgetMeta = readDefaultWidgetMeta(\n res,\n locale,\n t(\"common.widget\", undefined, \"Widget\"),\n );\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n setXappDefaultWidgetId(widgetMeta?.widgetId || \"\");\n setXappDefaultWidgetName(widgetMeta?.widgetName || \"\");\n setXappDefaultToolName(widgetMeta?.toolName || \"\");\n setXappOpenAppStrategy(\n widgetMeta && widgetMeta.widgetCount > 1 ? \"choose_widget\" : \"direct_widget\",\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? (buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(String(xappIdFilter))}`, {\n token,\n }) as any)\n : null;\n\n const clearHref = buildMarketplaceHref(loc.pathname, \"invoices\", { token });\n const listHref = buildMarketplaceHref(loc.pathname, \"invoices\", {\n token,\n xappId: xappIdFilter,\n installationId: installationIdFilter,\n paymentSessionId: paymentSessionIdFilter,\n });\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={buildMarketplaceHref(loc.pathname, \"\", { token }) as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.invoices_title\", undefined, \"Invoices\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.invoices_title\", undefined, \"Invoices\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh(pageParam)}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {xappIdFilter ? (\n <XappWorkspaceNav\n xappId={xappIdFilter}\n xappTitle={xappTitle || xappIdFilter}\n isEmbedded={isEmbedded}\n token={token}\n installationId={xappInstallationId || undefined}\n active=\"billing\"\n billingActive=\"invoices\"\n openWidgetId={xappDefaultWidgetId}\n openWidgetName={xappDefaultWidgetName}\n openToolName={xappDefaultToolName}\n openAppStrategy={xappOpenAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n ) : (\n <MarketplaceActivityTabs\n active=\"invoices\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n )}\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_invoices_for_prefix\", undefined, \"Showing invoice records for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedInvoiceId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.invoice_detail\", undefined, \"Invoice Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedInvoiceId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_invoice_list\", undefined, \"Back to invoice list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedInvoice ? (\n <>\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readFirstString(\n focusedInvoice.status,\n focusedInvoice.lifecycle_status,\n )}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.provider\", undefined, \"Provider\")}\n </div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedInvoice.provider_key, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"common.payment_session\", undefined, \"Payment Session\")}\n </div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedInvoice.payment_session_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedInvoice.created_at) || \"\u2014\"}\n </div>\n </div>\n {(readString(focusedInvoice.document_url) ||\n readString(focusedInvoice.document_download_url) ||\n readString(focusedInvoice.external_url)) && (\n <div className=\"mx-record-actions\">\n {focusedInvoice.document_url ? (\n <a\n href={String(focusedInvoice.document_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_document\", undefined, \"Open Document\")}\n </a>\n ) : null}\n {focusedInvoice.document_download_url ? (\n <a\n href={String(focusedInvoice.document_download_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.download\", undefined, \"Download\")}\n </a>\n ) : null}\n {!focusedInvoice.document_download_url &&\n !focusedInvoice.document_url &&\n focusedInvoice.external_url ? (\n <a\n href={String(focusedInvoice.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.open_external\", undefined, \"Open External\")}\n </a>\n ) : null}\n </div>\n )}\n </div>\n {focusedHistory.length > 0 && (\n <div className=\"mx-record-timeline\">\n <div className=\"mx-record-label\">\n {t(\"activity.lifecycle_history\", undefined, \"Lifecycle History\")}\n </div>\n <div className=\"mx-detail-guard-list mx-detail-guard-list-compact\">\n {focusedHistory.map((event, index) => (\n <div\n key={readFirstString(event.id, index)}\n className=\"mx-record-timeline-item\"\n >\n <strong>\n {readFirstString(\n event.action,\n event.type,\n t(\"activity.event\", undefined, \"Event\"),\n )}\n </strong>\n {formatDateTime(event.created_at)\n ? ` \u2022 ${formatDateTime(event.created_at)}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n )}\n </>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoice_detail\", undefined, \"Loading invoice details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.invoice\", undefined, \"Invoice\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.provider\", undefined, \"Provider\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.document\", undefined, \"Document\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 5 : 6}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_invoices\", undefined, \"Loading invoices...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_invoices\", undefined, \"No invoices found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td data-label={t(\"common.invoice\", undefined, \"Invoice\")}>\n <div className=\"mx-cell-bold\">\n {readFirstString(\n item.invoice_identifier,\n item.series,\n item.number,\n item.id,\n \"\u2014\",\n )}\n </div>\n {readString(item.payment_session_id) && (\n <div className=\"mx-cell-sub\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(item.payment_session_id)}\n </div>\n )}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readFirstString(item.status, item.lifecycle_status)} />\n </td>\n <td data-label={t(\"common.provider\", undefined, \"Provider\")}>\n {readFirstString(item.provider_key, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.document\", undefined, \"Document\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/invoices\" : \"/marketplace/invoices\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"invoiceId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.document_download_url || item.external_url ? (\n <a\n href={String(item.document_download_url || item.external_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"common.open\", undefined, \"Open\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam <= 1}\n onClick={() => void refresh(pageParam - 1)}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </button>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <button\n className=\"mx-btn mx-btn-outline\"\n disabled={pageParam >= Number(pagination.totalPages || 1)}\n onClick={() => void refresh(pageParam + 1)}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </button>\n </div>\n )}\n </div>\n );\n}\n", "import { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\n\ntype ActivityTabKey = \"requests\" | \"monetization\" | \"payments\" | \"invoices\" | \"notifications\";\n\ntype MarketplaceActivityTabsProps = {\n active: ActivityTabKey;\n isEmbedded: boolean;\n token?: string;\n xappId?: string;\n installationId?: string;\n};\n\nfunction buildActivityHref(input: {\n surface: ActivityTabKey;\n pathname: string;\n token?: string;\n xappId?: string;\n installationId?: string;\n}) {\n return buildMarketplaceHref(input.pathname, input.surface, {\n token: input.token,\n xappId: input.xappId,\n installationId: input.surface !== \"requests\" ? input.installationId : undefined,\n });\n}\n\nexport function MarketplaceActivityTabs(props: MarketplaceActivityTabsProps) {\n const { t } = useMarketplaceI18n();\n const loc = useLocation();\n const tabs: Array<{ key: ActivityTabKey; label: string }> = [\n { key: \"requests\", label: t(\"activity.requests\", undefined, \"Requests\") },\n { key: \"monetization\", label: t(\"activity.monetization\", undefined, \"Monetization\") },\n { key: \"payments\", label: t(\"activity.payments\", undefined, \"Payments\") },\n { key: \"invoices\", label: t(\"activity.invoices\", undefined, \"Invoices\") },\n { key: \"notifications\", label: t(\"activity.notifications\", undefined, \"Notifications\") },\n ];\n\n return (\n <nav\n className=\"mx-activity-tabs\"\n aria-label={t(\"activity.navigation\", undefined, \"Activity navigation\")}\n >\n {tabs.map((tab) => (\n <Link\n key={tab.key}\n to={\n buildActivityHref({\n surface: tab.key,\n pathname: loc.pathname,\n token: props.token,\n xappId: props.xappId,\n installationId: props.installationId,\n }) as any\n }\n className={`mx-activity-tab ${props.active === tab.key ? \"is-active\" : \"\"}`}\n aria-current={props.active === tab.key ? \"page\" : undefined}\n >\n {tab.label}\n </Link>\n ))}\n </nav>\n );\n}\n", "import { useEffect, useRef, type ReactNode } from \"react\";\nimport { Link, useLocation, useNavigate } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport \"../marketplace.css\";\n\ntype XappWorkspaceTab = \"overview\" | \"open_app\" | \"requests\" | \"billing\" | \"notifications\";\ntype XappWorkspaceBillingTab = \"monetization\" | \"plans\" | \"payments\" | \"invoices\";\n\ntype XappWorkspaceNavProps = {\n xappId: string;\n isEmbedded: boolean;\n token?: string;\n installationId?: string;\n xappTitle?: string;\n active: XappWorkspaceTab;\n billingActive?: XappWorkspaceBillingTab;\n openWidgetId?: string;\n openWidgetName?: string;\n openToolName?: string;\n openAppStrategy?: \"direct_widget\" | \"choose_widget\";\n onOpenApp?: (() => void) | undefined;\n openAppHrefOverride?: { pathname: string; search?: string } | undefined;\n};\n\nfunction buildOverviewHref(input: {\n pathname: string;\n xappId: string;\n token?: string;\n installationId?: string;\n focus?: string;\n}) {\n return buildMarketplaceHref(input.pathname, `xapps/${encodeURIComponent(input.xappId)}`, {\n token: input.token,\n installationId: input.installationId,\n focus: input.focus,\n });\n}\n\nfunction buildRequestsHref(input: { pathname: string; xappId: string; token?: string }) {\n return buildMarketplaceHref(input.pathname, \"requests\", {\n token: input.token,\n xappId: input.xappId,\n });\n}\n\nfunction buildNotificationsHref(input: { pathname: string; xappId: string; token?: string }) {\n return buildMarketplaceHref(input.pathname, \"notifications\", {\n token: input.token,\n xappId: input.xappId,\n });\n}\n\nfunction buildMonetizationHref(input: {\n pathname: string;\n xappId: string;\n token?: string;\n installationId?: string;\n}) {\n return buildMarketplaceHref(input.pathname, \"monetization\", {\n token: input.token,\n xappId: input.xappId,\n installationId: input.installationId,\n });\n}\n\nfunction buildPlansHref(input: {\n pathname: string;\n xappId: string;\n token?: string;\n installationId?: string;\n}) {\n return buildMarketplaceHref(input.pathname, `xapps/${encodeURIComponent(input.xappId)}/plans`, {\n token: input.token,\n installationId: input.installationId,\n });\n}\n\nfunction buildBillingSurfaceHref(input: {\n pathname: string;\n surface: \"payments\" | \"invoices\";\n xappId: string;\n token?: string;\n}) {\n return buildMarketplaceHref(input.pathname, input.surface, {\n token: input.token,\n xappId: input.xappId,\n });\n}\n\nfunction buildOpenAppHref(input: {\n pathname: string;\n xappId: string;\n isEmbedded: boolean;\n token?: string;\n installationId?: string;\n xappTitle?: string;\n openWidgetId?: string;\n openWidgetName?: string;\n openToolName?: string;\n openAppStrategy?: \"direct_widget\" | \"choose_widget\";\n openAppHrefOverride?: { pathname: string; search?: string } | undefined;\n}) {\n if (input.openAppHrefOverride) {\n return {\n pathname: input.openAppHrefOverride.pathname,\n search: String(input.openAppHrefOverride.search || \"\"),\n };\n }\n const installationId = String(input.installationId || \"\").trim();\n const openWidgetId = String(input.openWidgetId || \"\").trim();\n if (input.openAppStrategy === \"choose_widget\") {\n return buildOverviewHref({ ...input, focus: \"views\" });\n }\n if (!installationId || !openWidgetId) {\n return buildOverviewHref({ ...input, focus: \"views\" });\n }\n if (input.isEmbedded) {\n return buildMarketplaceHref(\n input.pathname,\n `widget/${encodeURIComponent(installationId)}/${encodeURIComponent(openWidgetId)}`,\n {\n token: input.token,\n },\n );\n }\n return buildMarketplaceHref(\n input.pathname,\n `widget/${encodeURIComponent(installationId)}/${encodeURIComponent(openWidgetId)}`,\n {\n installationId,\n xappId: input.xappId,\n xappTitle: input.xappTitle,\n widgetName: input.openWidgetName,\n toolName: input.openToolName,\n },\n );\n}\n\nfunction buildHomeHref(input: { pathname: string; token?: string }) {\n return buildMarketplaceHref(input.pathname, \"\", {\n token: input.token,\n });\n}\n\nfunction WorkspaceLink(props: {\n to: { pathname: string; search: string };\n active: boolean;\n icon: ReactNode;\n tone?: \"default\" | \"subtle\" | \"primary\";\n children: ReactNode;\n}) {\n return (\n <Link\n to={props.to as any}\n className={`mx-xapp-workspace-link ${\n props.tone === \"subtle\" ? \"is-subtle\" : props.tone === \"primary\" ? \"is-primary\" : \"\"\n } ${props.active ? \"is-active\" : \"\"}`}\n aria-current={props.active ? \"page\" : undefined}\n >\n <span className=\"mx-xapp-workspace-link-icon\" aria-hidden=\"true\">\n {props.icon}\n </span>\n <span>{props.children}</span>\n </Link>\n );\n}\n\nfunction IconHome() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M3 9.5 10 4l7 5.5V17a1 1 0 0 1-1 1h-4.5v-4.5h-3V18H4a1 1 0 0 1-1-1V9.5Z\" />\n </svg>\n );\n}\n\nfunction IconOverview() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <rect x=\"3\" y=\"3\" width=\"5\" height=\"5\" rx=\"1.2\" />\n <rect x=\"12\" y=\"3\" width=\"5\" height=\"5\" rx=\"1.2\" />\n <rect x=\"3\" y=\"12\" width=\"5\" height=\"5\" rx=\"1.2\" />\n <rect x=\"12\" y=\"12\" width=\"5\" height=\"5\" rx=\"1.2\" />\n </svg>\n );\n}\n\nfunction IconOpenApp() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M7 13 15 5\" />\n <path d=\"M9 5h6v6\" />\n <rect x=\"4\" y=\"7\" width=\"9\" height=\"9\" rx=\"2\" />\n </svg>\n );\n}\n\nfunction IconRequests() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M6 5h10\" />\n <path d=\"M6 10h10\" />\n <path d=\"M6 15h10\" />\n <circle cx=\"3.5\" cy=\"5\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"3.5\" cy=\"10\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n <circle cx=\"3.5\" cy=\"15\" r=\"1\" fill=\"currentColor\" stroke=\"none\" />\n </svg>\n );\n}\n\nfunction IconMonetization() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M10 3v14\" />\n <path d=\"M13.5 6.5c0-1.38-1.57-2.5-3.5-2.5S6.5 5.12 6.5 6.5 8.07 9 10 9s3.5 1.12 3.5 2.5S11.93 14 10 14s-3.5-1.12-3.5-2.5\" />\n </svg>\n );\n}\n\nfunction IconMore() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <circle cx=\"4\" cy=\"10\" r=\"1.7\" />\n <circle cx=\"10\" cy=\"10\" r=\"1.7\" />\n <circle cx=\"16\" cy=\"10\" r=\"1.7\" />\n </svg>\n );\n}\n\nfunction IconPlans() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M4 5.5h12\" />\n <path d=\"M4 10h12\" />\n <path d=\"M4 14.5h8\" />\n </svg>\n );\n}\n\nfunction IconPayments() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <rect x=\"3\" y=\"5\" width=\"14\" height=\"10\" rx=\"2\" />\n <path d=\"M3 8.5h14\" />\n <path d=\"M7 12.2h2.8\" />\n </svg>\n );\n}\n\nfunction IconInvoices() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M6 3h6l3 3v11H6z\" />\n <path d=\"M12 3v3h3\" />\n <path d=\"M8 10h5\" />\n <path d=\"M8 13h4\" />\n </svg>\n );\n}\n\nfunction IconNotifications() {\n return (\n <svg viewBox=\"0 0 20 20\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.8\">\n <path d=\"M10 4a3 3 0 0 1 3 3v1.4c0 .7.22 1.38.64 1.94l.86 1.16c.47.62.02 1.5-.76 1.5H6.26c-.78 0-1.23-.88-.76-1.5l.86-1.16A3.22 3.22 0 0 0 7 8.4V7a3 3 0 0 1 3-3Z\" />\n <path d=\"M8.5 15a1.5 1.5 0 0 0 3 0\" />\n </svg>\n );\n}\n\nfunction WorkspaceButton(props: {\n active: boolean;\n onClick: () => void;\n icon: ReactNode;\n tone?: \"default\" | \"subtle\" | \"primary\";\n children: ReactNode;\n}) {\n return (\n <button\n type=\"button\"\n className={`mx-xapp-workspace-link ${\n props.tone === \"subtle\" ? \"is-subtle\" : props.tone === \"primary\" ? \"is-primary\" : \"\"\n } ${props.active ? \"is-active\" : \"\"}`}\n aria-current={props.active ? \"page\" : undefined}\n onClick={props.onClick}\n >\n <span className=\"mx-xapp-workspace-link-icon\" aria-hidden=\"true\">\n {props.icon}\n </span>\n <span>{props.children}</span>\n </button>\n );\n}\n\nfunction MoreMenuLink(props: {\n to: { pathname: string; search: string };\n active: boolean;\n icon: ReactNode;\n children: ReactNode;\n}) {\n return (\n <Link\n to={props.to as any}\n className={`mx-xapp-workspace-menu-item ${props.active ? \"is-active\" : \"\"}`}\n aria-current={props.active ? \"page\" : undefined}\n >\n <span className=\"mx-xapp-workspace-menu-item-icon\" aria-hidden=\"true\">\n {props.icon}\n </span>\n <span>{props.children}</span>\n </Link>\n );\n}\n\nfunction MoreMenuGroup(props: { label: ReactNode; children: ReactNode }) {\n return (\n <div className=\"mx-xapp-workspace-menu-group\">\n <div className=\"mx-xapp-workspace-menu-label\">{props.label}</div>\n {props.children}\n </div>\n );\n}\n\nexport function XappWorkspaceNav(props: XappWorkspaceNavProps) {\n const { t } = useMarketplaceI18n();\n const navigate = useNavigate();\n const loc = useLocation();\n const moreMenuRef = useRef<HTMLDetailsElement | null>(null);\n const overviewHref = buildOverviewHref({ ...props, pathname: loc.pathname });\n const openAppHref = buildOpenAppHref({ ...props, pathname: loc.pathname });\n const homeHref = buildHomeHref({ pathname: loc.pathname, token: props.token });\n const requestsHref = buildRequestsHref({ ...props, pathname: loc.pathname });\n const plansHref = buildPlansHref({ ...props, pathname: loc.pathname });\n const monetizationHref = buildMonetizationHref({ ...props, pathname: loc.pathname });\n const notificationsHref = buildNotificationsHref({ ...props, pathname: loc.pathname });\n const paymentsHref = buildBillingSurfaceHref({\n ...props,\n pathname: loc.pathname,\n surface: \"payments\",\n });\n const invoicesHref = buildBillingSurfaceHref({\n ...props,\n pathname: loc.pathname,\n surface: \"invoices\",\n });\n\n function handleOpenApp() {\n if (props.onOpenApp) {\n props.onOpenApp();\n return;\n }\n void navigate(openAppHref as any);\n }\n\n const monetizationActive = props.active === \"billing\" && props.billingActive === \"monetization\";\n const plansActive = props.active === \"billing\" && props.billingActive === \"plans\";\n const moreActive =\n monetizationActive ||\n plansActive ||\n props.billingActive === \"payments\" ||\n props.billingActive === \"invoices\" ||\n props.active === \"notifications\";\n\n useEffect(() => {\n function handlePointerDown(event: PointerEvent) {\n const menuEl = moreMenuRef.current;\n if (!menuEl || !menuEl.open) return;\n const target = event.target;\n if (target instanceof Node && menuEl.contains(target)) return;\n menuEl.open = false;\n }\n\n document.addEventListener(\"pointerdown\", handlePointerDown);\n return () => {\n document.removeEventListener(\"pointerdown\", handlePointerDown);\n };\n }, []);\n\n return (\n <div className=\"mx-xapp-workspace-shell\">\n <nav\n className=\"mx-xapp-workspace-nav\"\n aria-label={t(\"xapp.workspace_navigation\", undefined, \"App workspace navigation\")}\n >\n <WorkspaceLink to={homeHref} active={false} icon={<IconHome />} tone=\"subtle\">\n {t(\"common.home\", undefined, \"Home\")}\n </WorkspaceLink>\n <WorkspaceLink\n to={overviewHref}\n active={props.active === \"overview\"}\n icon={<IconOverview />}\n >\n {t(\"xapp.workspace_overview\", undefined, \"Overview\")}\n </WorkspaceLink>\n <WorkspaceButton\n active={props.active === \"open_app\"}\n onClick={handleOpenApp}\n icon={<IconOpenApp />}\n tone=\"primary\"\n >\n {t(\"xapp.workspace_open_app\", undefined, \"Open app\")}\n </WorkspaceButton>\n <WorkspaceLink\n to={requestsHref}\n active={props.active === \"requests\"}\n icon={<IconRequests />}\n >\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </WorkspaceLink>\n <details\n ref={moreMenuRef}\n className={`mx-xapp-workspace-menu ${moreActive ? \"is-active\" : \"\"}`}\n >\n <summary className=\"mx-xapp-workspace-link is-subtle\">\n <span className=\"mx-xapp-workspace-link-icon\" aria-hidden=\"true\">\n <IconMore />\n </span>\n <span>{t(\"common.more\", undefined, \"More\")}</span>\n </summary>\n <div className=\"mx-xapp-workspace-menu-panel\">\n <MoreMenuGroup label={t(\"xapp.workspace_billing\", undefined, \"Billing\")}>\n <MoreMenuLink\n to={monetizationHref}\n active={monetizationActive}\n icon={<IconMonetization />}\n >\n {t(\"activity.monetization_title\", undefined, \"Monetization\")}\n </MoreMenuLink>\n <MoreMenuLink to={plansHref} active={plansActive} icon={<IconPlans />}>\n {t(\"widget.page.plan_options_tab\", undefined, \"Plans\")}\n </MoreMenuLink>\n <MoreMenuLink\n to={paymentsHref}\n active={props.billingActive === \"payments\"}\n icon={<IconPayments />}\n >\n {t(\"activity.payments_title\", undefined, \"Payments\")}\n </MoreMenuLink>\n <MoreMenuLink\n to={invoicesHref}\n active={props.billingActive === \"invoices\"}\n icon={<IconInvoices />}\n >\n {t(\"activity.invoices_title\", undefined, \"Invoices\")}\n </MoreMenuLink>\n </MoreMenuGroup>\n <MoreMenuGroup label={t(\"common.activity\", undefined, \"Activity\")}>\n <MoreMenuLink\n to={notificationsHref}\n active={props.active === \"notifications\"}\n icon={<IconNotifications />}\n >\n {t(\"activity.notifications_title\", undefined, \"Notifications\")}\n </MoreMenuLink>\n </MoreMenuGroup>\n </div>\n </details>\n </nav>\n </div>\n );\n}\n", "import { resolveMarketplaceText } from \"../i18n\";\nimport { asRecord, readString } from \"./readers\";\n\nfunction readBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nexport function readDefaultWidgetMeta(\n detail: unknown,\n locale: string,\n fallbackLabel: string,\n): {\n widgetCount: number;\n widgetId: string;\n widgetName: string;\n toolName: string;\n} | null {\n const widgets = Array.isArray(asRecord(detail).widgets)\n ? (asRecord(detail).widgets as unknown[])\n : [];\n const records = widgets\n .map((entry) => asRecord(entry))\n .filter((entry) => Object.keys(entry).length > 0);\n if (!records.length) return null;\n const selected = records.find((entry) => readBoolean(entry.default, false)) || records[0] || null;\n if (!selected) return null;\n const widgetId = readString(selected.id);\n if (!widgetId) return null;\n return {\n widgetCount: records.length,\n widgetId,\n widgetName:\n resolveMarketplaceText(selected.title as any, locale) ||\n readString(selected.widget_name) ||\n readString(selected.name) ||\n fallbackLabel,\n toolName: readString(selected.bind_tool_name),\n };\n}\n", "function readString(value: unknown): string {\n return String(value ?? \"\").trim();\n}\n\nfunction readLower(value: unknown): string {\n return readString(value).toLowerCase();\n}\n\nexport function isRomanianLocale(value: unknown): boolean {\n const locale = readLower(value);\n return locale === \"ro\" || locale.startsWith(\"ro-\");\n}\n\nexport type XmsPackageCopy = {\n consumedLabel: string;\n currentPlanLabel: string;\n ownedUnlockLabel: string;\n addOnWithMembershipLabel: string;\n selectedLabel: string;\n defaultLabel: string;\n ownedUnlockActiveLabel: string;\n currentPlanActiveLabel: string;\n startingCheckoutLabel: string;\n purchaseAddOnUnlockLabel: string;\n continueToCheckoutLabel: string;\n generalUpgradeFitLabel: string;\n generalUpgradeSummary: string;\n durableUnlockFitLabel: string;\n durableUnlockSummary: string;\n recurringMembershipFitLabel: string;\n recurringMembershipSummary: string;\n creditTopUpFitLabel: string;\n hybridUpgradeFitLabel: string;\n creditPackFitSummary(unitLabel: string): string;\n hybridPackFitSummary(unitLabel: string): string;\n packageCurrencySignalLabel(unitLabel: string): string;\n billedSignalLabel(periodLabel: string): string;\n generalOfferingSummary: string;\n featurePaywallOfferingSummary: string;\n defaultPaywallOfferingSummary: string;\n checkoutOfferingSummary: string;\n upgradeOfferingSummary: string;\n featureDurableUnlockReason: string;\n featureRecurringAccessReason: string;\n featureHybridAccessReason: string;\n featureSubscriptionDirectReason: string;\n featureHybridSubscriptionReason: string;\n creditRequirementCoveredLabel(amountLabel: string): string;\n creditRequirementAddedLabel(amountLabel: string): string;\n hybridCreditsSupportLabel(unitLabel: string): string;\n};\n\nexport type XmsSurfaceCopy = {\n plansTitle: string;\n historyTitle: string;\n plansSubtitle: string;\n historySubtitle: string;\n offeringFallbackLabel: string;\n packageFallbackLabel: string;\n paywallFallbackLabel: string;\n availableLabel: string;\n unavailableLabel: string;\n unknownLabel: string;\n yesLabel: string;\n noLabel: string;\n defaultBadgeLabel: string;\n choosePackageActionLabel: string;\n noPaywallPackagesLabel: string;\n priceUnavailableLabel: string;\n plansLabel: string;\n historyLabel: string;\n closeLabel: string;\n tabsAriaLabel: string;\n loadingLabel: string;\n subjectRequiredNotice: string;\n paymentCompletedNotice: string;\n checkoutCancelledNotice: string;\n paymentFailedNotice: string;\n subscriptionRefreshCompletedNotice: string;\n subscriptionRefreshFailedNotice: string;\n subscriptionCancelCompletedNotice: string;\n subscriptionCancelFailedNotice: string;\n subscriptionCancelConfirmTitle: string;\n subscriptionCancelConfirmMessage: string;\n subscriptionCancelConfirmLabel: string;\n subscriptionCancelDismissLabel: string;\n missingPackageMetadataMessage: string;\n missingIntentMessage: string;\n missingPaymentPageMessage: string;\n startCheckoutFailedMessage: string;\n loadFailedMessage: string;\n currentCoverageTitle: string;\n currentPlanLabel: string;\n membershipAccessLabel: string;\n subscriptionStatusLabel: string;\n subscriptionCoverageLabel: string;\n subscriptionReasonLabel: string;\n currentPeriodEndsLabel: string;\n renewsAtLabel: string;\n expiresAtLabel: string;\n overdueSinceLabel: string;\n expiryBoundaryLabel: string;\n cancelledAtLabel: string;\n operatorAuthorityLabel: string;\n managementDestinationLabel: string;\n operatorAuthorityGatewayLabel: string;\n operatorAuthorityTenantLabel: string;\n operatorAuthorityPublisherLabel: string;\n operatorAuthorityOwnerLabel: string;\n managementDestinationGatewayLabel: string;\n managementDestinationTenantLabel: string;\n managementDestinationPublisherLabel: string;\n managementDestinationOwnerLabel: string;\n managementDestinationHintGatewayLabel: string;\n managementDestinationHintTenantLabel: string;\n managementDestinationHintPublisherLabel: string;\n managementDestinationHintOwnerLabel: string;\n openManagementDestinationActionLabel: string;\n virtualCurrencyLabel: string;\n currentCreditsLabel: string;\n creditsRemainingLabel: string;\n creditBalanceLabel: string;\n addOnUnlocksLabel: string;\n coverageActiveLabel: string;\n coverageInactiveLabel: string;\n noOverdueRestrictionLabel: string;\n reasonGraceCoveredPastDueLabel: string;\n reasonPastDueAfterPeriodEndLabel: string;\n reasonExpiredAfterBoundaryLabel: string;\n refreshStatusActionLabel: string;\n refreshingStatusActionLabel: string;\n cancelSubscriptionActionLabel: string;\n cancellingSubscriptionActionLabel: string;\n noPublishedPlansLabel: string;\n recentTimelineTitle: string;\n recentTimelineSubtitle: string;\n historyAuditTitle: string;\n historyAuditSubtitle: string;\n historyBalanceSummaryTitle: string;\n historyCreditSummaryTitle: string;\n historyBalanceSummarySubtitle: string;\n noHistoryAvailableLabel: string;\n historyGenericLabel: string;\n historyPurchaseIntentsTitle: string;\n historyPurchaseIntentLabel: string;\n historyTransactionsTitle: string;\n historyTransactionLabel: string;\n historySettlementDetailDisputeWarningNeedsResponse: string;\n historySettlementDetailDisputeWarningUnderReview: string;\n historySettlementDetailDisputeWarningClosed: string;\n historySettlementDetailDisputeNeedsResponse: string;\n historySettlementDetailDisputeUnderReview: string;\n historySettlementDetailDisputeWon: string;\n historySettlementDetailDisputeLost: string;\n historySubscriptionsTitle: string;\n historySubscriptionContractLabel: string;\n historyEntitlementsTitle: string;\n historyEntitlementLabel: string;\n historyWalletAccountsTitle: string;\n historyWalletAccountLabel: string;\n historyWalletLedgerTitle: string;\n historyWalletLedgerEntryLabel: string;\n historyAccessSnapshotsTitle: string;\n historyAccessSnapshotLabel: string;\n historyInvoicesTitle: string;\n historyInvoiceLabel: string;\n featureCurrentAccessMissingLabel: string;\n featureSubscriptionMissingLabel: string;\n featureCreditsMissingLabel(requiredLabel: string, availableLabel: string): string;\n featureBlockedSummary(title: string): string;\n featureReadySummary(title: string): string;\n featureNeedMixedAccessLabel: string;\n featureNeedMembershipAndCreditsLabel(unitLabel: string): string;\n featureNeedMembershipLabel: string;\n featureNeedCreditsLabel(unitLabel: string): string;\n featureNeedAccessLabel: string;\n featureLockedLabel: string;\n featureGapShortLabel(amountLabel: string): string;\n featureCurrentAccessMissingBadge: string;\n featureMembershipNotActiveBadge: string;\n featureCandidateLead(selectedPackageTitle: string): string;\n featureCandidateFallbackLead: string;\n featureViewHybridOptionsLabel: string;\n featureViewMembershipOptionsLabel: string;\n featureViewCreditOptionsLabel(unitLabel: string): string;\n featureViewUnlockOptionsLabel: string;\n featureOpenPaywallLabel: string;\n featureUnlockCheckoutLabel: string;\n featureStartMembershipCheckoutLabel: string;\n featureBuyCreditsCheckoutLabel(unitLabel: string): string;\n featureStartHybridCheckoutLabel: string;\n featureCreatePaymentSessionLabel: string;\n};\n\nexport const XMS_COPY_CATALOG = {\n en: {\n package: {\n consumedLabel: \"Consumed\",\n currentPlanLabel: \"Current plan\",\n ownedUnlockLabel: \"Owned unlock\",\n addOnWithMembershipLabel: \"Add-on with membership\",\n selectedLabel: \"Selected\",\n defaultLabel: \"Default\",\n ownedUnlockActiveLabel: \"Owned unlock active\",\n currentPlanActiveLabel: \"Current plan active\",\n startingCheckoutLabel: \"Starting checkout...\",\n purchaseAddOnUnlockLabel: \"Purchase add-on unlock\",\n continueToCheckoutLabel: \"Continue to checkout\",\n generalUpgradeFitLabel: \"Flexible option\",\n generalUpgradeSummary: \"A general plan option for this app.\",\n durableUnlockFitLabel: \"One-time unlock\",\n durableUnlockSummary: \"Best when you want access without an ongoing subscription.\",\n recurringMembershipFitLabel: \"Subscription\",\n recurringMembershipSummary:\n \"Best when this app is meant to stay active through recurring coverage.\",\n creditTopUpFitLabel: \"Balance top-up\",\n hybridUpgradeFitLabel: \"Access + balance\",\n creditPackFitSummary: (unitLabel: string) =>\n `Best when the feature spends ${unitLabel} for each advanced action.`,\n hybridPackFitSummary: (unitLabel: string) =>\n `Blends access coverage with bundled ${unitLabel} for mixed workflows.`,\n packageCurrencySignalLabel: (unitLabel: string) => `currency ${unitLabel}`,\n billedSignalLabel: (periodLabel: string) => `billed ${periodLabel}`,\n generalOfferingSummary: \"Available plans for this app.\",\n featurePaywallOfferingSummary: \"Shown when this app needs extra access or balance.\",\n defaultPaywallOfferingSummary: \"Main plan selection for this app.\",\n checkoutOfferingSummary: \"Direct purchase flow for this app.\",\n upgradeOfferingSummary: \"Best for switching or upgrading your current plan.\",\n featureDurableUnlockReason: \"Aligned with one-time unlock access.\",\n featureRecurringAccessReason: \"Recurring membership also grants current access.\",\n featureHybridAccessReason: \"Hybrid package contributes to current access coverage.\",\n featureSubscriptionDirectReason: \"Matches the subscription requirement directly.\",\n featureHybridSubscriptionReason:\n \"Hybrid package can also cover part of the subscription shape.\",\n creditRequirementCoveredLabel: (amountLabel: string) =>\n `Covers the ${amountLabel} requirement.`,\n creditRequirementAddedLabel: (amountLabel: string) =>\n `Adds ${amountLabel} toward the requirement.`,\n hybridCreditsSupportLabel: (unitLabel: string) =>\n `Hybrid package can add bundled ${unitLabel} for this flow.`,\n },\n surface: {\n plansTitle: \"Plans\",\n historyTitle: \"History\",\n plansSubtitle: \"Access, plans, and balances for this app\",\n historySubtitle: \"Recent monetization events, invoices, subscriptions, and wallet activity\",\n offeringFallbackLabel: \"Offering\",\n packageFallbackLabel: \"Package\",\n paywallFallbackLabel: \"Plans\",\n availableLabel: \"Available\",\n unavailableLabel: \"Unavailable\",\n unknownLabel: \"Unknown\",\n yesLabel: \"Yes\",\n noLabel: \"No\",\n defaultBadgeLabel: \"default\",\n choosePackageActionLabel: \"Choose package\",\n noPaywallPackagesLabel: \"No plans are currently available.\",\n priceUnavailableLabel: \"Price unavailable\",\n plansLabel: \"Plans\",\n historyLabel: \"History\",\n closeLabel: \"Close\",\n tabsAriaLabel: \"Plans and history view\",\n loadingLabel: \"Loading plans...\",\n subjectRequiredNotice:\n \"Checkout requires a subject-bound catalog session. Start from a signed host session to purchase plans.\",\n paymentCompletedNotice: \"Payment completed and access was refreshed.\",\n checkoutCancelledNotice: \"Checkout was cancelled before completion.\",\n paymentFailedNotice: \"Payment failed before access could be issued.\",\n subscriptionRefreshCompletedNotice: \"Subscription status was refreshed.\",\n subscriptionRefreshFailedNotice: \"Subscription status could not be refreshed.\",\n subscriptionCancelCompletedNotice: \"Subscription renewal was cancelled.\",\n subscriptionCancelFailedNotice: \"Subscription could not be cancelled.\",\n subscriptionCancelConfirmTitle: \"Cancel subscription\",\n subscriptionCancelConfirmMessage: \"Cancel renewal for this subscription?\",\n subscriptionCancelConfirmLabel: \"Cancel subscription\",\n subscriptionCancelDismissLabel: \"Keep subscription\",\n missingPackageMetadataMessage:\n \"This package is missing purchase metadata in the published plans configuration.\",\n missingIntentMessage: \"Purchase intent was created without an identifier.\",\n missingPaymentPageMessage: \"Payment page is not available for this package.\",\n startCheckoutFailedMessage: \"Unable to start checkout for this package.\",\n loadFailedMessage: \"Unable to load plans.\",\n currentCoverageTitle: \"Current coverage\",\n currentPlanLabel: \"Current plan\",\n membershipAccessLabel: \"Membership access\",\n subscriptionStatusLabel: \"Subscription state\",\n subscriptionCoverageLabel: \"Coverage\",\n subscriptionReasonLabel: \"Status reason\",\n currentPeriodEndsLabel: \"Current period ends\",\n renewsAtLabel: \"Renews at\",\n expiresAtLabel: \"Expires at\",\n overdueSinceLabel: \"Overdue since\",\n expiryBoundaryLabel: \"Expiry boundary\",\n cancelledAtLabel: \"Cancelled at\",\n operatorAuthorityLabel: \"Operator authority\",\n managementDestinationLabel: \"Manage in\",\n operatorAuthorityGatewayLabel: \"Gateway\",\n operatorAuthorityTenantLabel: \"Tenant\",\n operatorAuthorityPublisherLabel: \"Publisher\",\n operatorAuthorityOwnerLabel: \"App owner\",\n managementDestinationGatewayLabel: \"Gateway admin\",\n managementDestinationTenantLabel: \"Tenant app\",\n managementDestinationPublisherLabel: \"Publisher app\",\n managementDestinationOwnerLabel: \"App owner\",\n managementDestinationHintGatewayLabel:\n \"Advanced subscription management is handled in Gateway admin.\",\n managementDestinationHintTenantLabel:\n \"Advanced subscription management is handled in the tenant app.\",\n managementDestinationHintPublisherLabel:\n \"Advanced subscription management is handled in the publisher app.\",\n managementDestinationHintOwnerLabel:\n \"Advanced subscription management is handled by the app owner.\",\n openManagementDestinationActionLabel: \"Open management\",\n virtualCurrencyLabel: \"Currency\",\n currentCreditsLabel: \"Credits now\",\n creditsRemainingLabel: \"Balance\",\n creditBalanceLabel: \"Credits\",\n addOnUnlocksLabel: \"Add-on unlocks\",\n coverageActiveLabel: \"Still covered\",\n coverageInactiveLabel: \"Not covered\",\n noOverdueRestrictionLabel: \"No active overdue restriction.\",\n reasonGraceCoveredPastDueLabel: \"Coverage remains during grace period\",\n reasonPastDueAfterPeriodEndLabel: \"Current period ended without successful renewal\",\n reasonExpiredAfterBoundaryLabel: \"Expiry boundary reached\",\n refreshStatusActionLabel: \"Refresh status\",\n refreshingStatusActionLabel: \"Refreshing...\",\n cancelSubscriptionActionLabel: \"Cancel subscription\",\n cancellingSubscriptionActionLabel: \"Cancelling...\",\n noPublishedPlansLabel: \"No plans are currently available.\",\n recentTimelineTitle: \"Recent activity\",\n recentTimelineSubtitle:\n \"Latest subscription, balance, purchase, and invoice activity for this app.\",\n historyAuditTitle: \"Detailed history\",\n historyAuditSubtitle:\n \"Recent records grouped by subscriptions, balances, purchases, and invoices.\",\n historyBalanceSummaryTitle: \"Balances now\",\n historyCreditSummaryTitle: \"Credits now\",\n historyBalanceSummarySubtitle:\n \"Latest visible wallet balances grouped by virtual currency for this app.\",\n noHistoryAvailableLabel: \"No monetization history is available for this app yet.\",\n historyGenericLabel: \"History\",\n historyPurchaseIntentsTitle: \"Purchase intents\",\n historyPurchaseIntentLabel: \"Purchase intent\",\n historyTransactionsTitle: \"Transactions\",\n historyTransactionLabel: \"Transaction\",\n historySettlementDetailDisputeWarningNeedsResponse: \"Dispute warning: response needed\",\n historySettlementDetailDisputeWarningUnderReview: \"Dispute warning under review\",\n historySettlementDetailDisputeWarningClosed: \"Dispute warning closed\",\n historySettlementDetailDisputeNeedsResponse: \"Dispute needs response\",\n historySettlementDetailDisputeUnderReview: \"Dispute under review\",\n historySettlementDetailDisputeWon: \"Dispute won\",\n historySettlementDetailDisputeLost: \"Dispute lost\",\n historySubscriptionsTitle: \"Subscriptions\",\n historySubscriptionContractLabel: \"Subscription contract\",\n historyEntitlementsTitle: \"Entitlements\",\n historyEntitlementLabel: \"Entitlement\",\n historyWalletAccountsTitle: \"Wallet accounts\",\n historyWalletAccountLabel: \"Wallet account\",\n historyWalletLedgerTitle: \"Wallet ledger\",\n historyWalletLedgerEntryLabel: \"Wallet ledger entry\",\n historyAccessSnapshotsTitle: \"Access snapshots\",\n historyAccessSnapshotLabel: \"Access snapshot\",\n historyInvoicesTitle: \"Invoices\",\n historyInvoiceLabel: \"Invoice\",\n featureCurrentAccessMissingLabel: \"Current access coverage is not active on this scope.\",\n featureSubscriptionMissingLabel: \"No active subscription is visible for this scope.\",\n featureCreditsMissingLabel: (requiredLabel: string, availableLabel: string) =>\n `This action needs ${requiredLabel}, but only ${availableLabel} are visible right now.`,\n featureBlockedSummary: (title: string) =>\n `${title || \"Feature\"} is blocked on the current scope.`,\n featureReadySummary: (title: string) =>\n `${title || \"Feature\"} can be unlocked from the current plan options.`,\n featureNeedMixedAccessLabel: \"needs mixed access\",\n featureNeedMembershipAndCreditsLabel: (unitLabel: string) =>\n `needs membership + ${unitLabel}`,\n featureNeedMembershipLabel: \"needs membership\",\n featureNeedCreditsLabel: (unitLabel: string) => `needs ${unitLabel}`,\n featureNeedAccessLabel: \"needs access\",\n featureLockedLabel: \"locked\",\n featureGapShortLabel: (amountLabel: string) => `${amountLabel} short`,\n featureCurrentAccessMissingBadge: \"current access missing\",\n featureMembershipNotActiveBadge: \"membership not active\",\n featureCandidateLead: (selectedPackageTitle: string) =>\n `${selectedPackageTitle || \"Selected package\"} is one package candidate for this access gap.`,\n featureCandidateFallbackLead: \"Choose a plan option that covers the current access gap.\",\n featureViewHybridOptionsLabel: \"View hybrid options\",\n featureViewMembershipOptionsLabel: \"View membership options\",\n featureViewCreditOptionsLabel: (unitLabel: string) => `View ${unitLabel} options`,\n featureViewUnlockOptionsLabel: \"View unlock options\",\n featureOpenPaywallLabel: \"Open plans\",\n featureUnlockCheckoutLabel: \"Unlock with hosted checkout\",\n featureStartMembershipCheckoutLabel: \"Start membership checkout\",\n featureBuyCreditsCheckoutLabel: (unitLabel: string) =>\n `Buy ${unitLabel} with hosted checkout`,\n featureStartHybridCheckoutLabel: \"Start hybrid checkout\",\n featureCreatePaymentSessionLabel: \"Create payment session\",\n },\n },\n ro: {\n package: {\n consumedLabel: \"Consumat\",\n currentPlanLabel: \"Plan curent\",\n ownedUnlockLabel: \"Unlock de\u021Binut\",\n addOnWithMembershipLabel: \"Supliment cu abonament\",\n selectedLabel: \"Selectat\",\n defaultLabel: \"Implicit\",\n ownedUnlockActiveLabel: \"Unlock deja activ\",\n currentPlanActiveLabel: \"Plan activ\",\n startingCheckoutLabel: \"Se porne\u0219te checkout-ul...\",\n purchaseAddOnUnlockLabel: \"Cump\u0103r\u0103 suplimentul\",\n continueToCheckoutLabel: \"Continu\u0103 spre checkout\",\n generalUpgradeFitLabel: \"Op\u021Biune flexibil\u0103\",\n generalUpgradeSummary: \"O op\u021Biune general\u0103 de plan pentru aceast\u0103 aplica\u021Bie.\",\n durableUnlockFitLabel: \"Unlock unic\",\n durableUnlockSummary: \"Potrivit c\u00E2nd vrei acces f\u0103r\u0103 un abonament recurent.\",\n recurringMembershipFitLabel: \"Abonament\",\n recurringMembershipSummary:\n \"Potrivit c\u00E2nd aceast\u0103 aplica\u021Bie trebuie s\u0103 r\u0103m\u00E2n\u0103 activ\u0103 prin acoperire recurent\u0103.\",\n creditTopUpFitLabel: \"Top-up sold\",\n hybridUpgradeFitLabel: \"Acces + sold\",\n creditPackFitSummary: (unitLabel: string) =>\n `Potrivit c\u00E2nd func\u021Bia consum\u0103 ${unitLabel} pentru fiecare ac\u021Biune avansat\u0103.`,\n hybridPackFitSummary: (unitLabel: string) =>\n `Combin\u0103 acoperirea accesului cu ${unitLabel} incluse pentru fluxuri mixte.`,\n packageCurrencySignalLabel: (unitLabel: string) => `moned\u0103 ${unitLabel}`,\n billedSignalLabel: (periodLabel: string) => `facturat ${periodLabel}`,\n generalOfferingSummary: \"Planuri disponibile pentru aceast\u0103 aplica\u021Bie.\",\n featurePaywallOfferingSummary:\n \"Afi\u0219at c\u00E2nd aceast\u0103 aplica\u021Bie are nevoie de acces sau sold suplimentar.\",\n defaultPaywallOfferingSummary: \"Selec\u021Bia principal\u0103 de planuri pentru aceast\u0103 aplica\u021Bie.\",\n checkoutOfferingSummary: \"Flux de cump\u0103rare direct pentru aceast\u0103 aplica\u021Bie.\",\n upgradeOfferingSummary: \"Potrivit pentru schimbarea sau \u00EEmbun\u0103t\u0103\u021Birea planului curent.\",\n featureDurableUnlockReason: \"Se potrive\u0219te cu accesul de tip unlock unic.\",\n featureRecurringAccessReason: \"Abonamentul recurent ofer\u0103 \u0219i acces curent pentru acest flux.\",\n featureHybridAccessReason: \"Pachetul hibrid contribuie la acoperirea accesului curent.\",\n featureSubscriptionDirectReason: \"Se potrive\u0219te direct cu cerin\u021Ba de abonament.\",\n featureHybridSubscriptionReason:\n \"Pachetul hibrid poate acoperi \u0219i o parte din forma de abonament.\",\n creditRequirementCoveredLabel: (amountLabel: string) => `Acoper\u0103 cerin\u021Ba de ${amountLabel}.`,\n creditRequirementAddedLabel: (amountLabel: string) => `Adaug\u0103 ${amountLabel} c\u0103tre cerin\u021B\u0103.`,\n hybridCreditsSupportLabel: (unitLabel: string) =>\n `Pachetul hibrid poate ad\u0103uga ${unitLabel} incluse pentru acest flux.`,\n },\n surface: {\n plansTitle: \"Planuri\",\n historyTitle: \"Istoric\",\n plansSubtitle: \"Acces, planuri \u0219i solduri pentru aceast\u0103 aplica\u021Bie\",\n historySubtitle:\n \"Evenimente recente de monetizare, facturi, abonamente \u0219i activitate din portofel\",\n offeringFallbackLabel: \"Ofert\u0103\",\n packageFallbackLabel: \"Pachet\",\n paywallFallbackLabel: \"Planuri\",\n availableLabel: \"Disponibil\",\n unavailableLabel: \"Indisponibil\",\n unknownLabel: \"Necunoscut\",\n yesLabel: \"Da\",\n noLabel: \"Nu\",\n defaultBadgeLabel: \"implicit\",\n choosePackageActionLabel: \"Alege pachetul\",\n noPaywallPackagesLabel: \"Nu exist\u0103 momentan planuri disponibile.\",\n priceUnavailableLabel: \"Pre\u021B indisponibil\",\n plansLabel: \"Planuri\",\n historyLabel: \"Istoric\",\n closeLabel: \"\u00CEnchide\",\n tabsAriaLabel: \"Vizualizare planuri \u0219i istoric\",\n loadingLabel: \"Se \u00EEncarc\u0103 planurile...\",\n subjectRequiredNotice:\n \"Checkout-ul necesit\u0103 o sesiune de catalog asociat\u0103 unui subiect. Porne\u0219te dintr-o sesiune gazd\u0103 autentificat\u0103 pentru a cump\u0103ra planuri.\",\n paymentCompletedNotice: \"Plata a fost finalizat\u0103 \u0219i accesul a fost actualizat.\",\n checkoutCancelledNotice: \"Checkout-ul a fost anulat \u00EEnainte de finalizare.\",\n paymentFailedNotice: \"Plata a e\u0219uat \u00EEnainte ca accesul s\u0103 poat\u0103 fi acordat.\",\n subscriptionRefreshCompletedNotice: \"Starea abonamentului a fost actualizat\u0103.\",\n subscriptionRefreshFailedNotice: \"Starea abonamentului nu a putut fi actualizat\u0103.\",\n subscriptionCancelCompletedNotice: \"Re\u00EEnnoirea abonamentului a fost anulat\u0103.\",\n subscriptionCancelFailedNotice: \"Abonamentul nu a putut fi anulat.\",\n subscriptionCancelConfirmTitle: \"Anuleaz\u0103 abonamentul\",\n subscriptionCancelConfirmMessage: \"Anulezi re\u00EEnnoirea acestui abonament?\",\n subscriptionCancelConfirmLabel: \"Anuleaz\u0103 abonamentul\",\n subscriptionCancelDismissLabel: \"P\u0103streaz\u0103 abonamentul\",\n missingPackageMetadataMessage:\n \"Acest pachet nu are metadatele de cump\u0103rare necesare \u00EEn configura\u021Bia publicat\u0103 a planurilor.\",\n missingIntentMessage: \"Intentul de cump\u0103rare a fost creat f\u0103r\u0103 identificator.\",\n missingPaymentPageMessage: \"Pagina de plat\u0103 nu este disponibil\u0103 pentru acest pachet.\",\n startCheckoutFailedMessage: \"Nu s-a putut porni checkout-ul pentru acest pachet.\",\n loadFailedMessage: \"Planurile nu au putut fi \u00EEnc\u0103rcate.\",\n currentCoverageTitle: \"Acoperire curent\u0103\",\n currentPlanLabel: \"Plan curent\",\n membershipAccessLabel: \"Acces de membru\",\n subscriptionStatusLabel: \"Stare abonament\",\n subscriptionCoverageLabel: \"Acoperire\",\n subscriptionReasonLabel: \"Motiv stare\",\n currentPeriodEndsLabel: \"Perioada curent\u0103 se \u00EEncheie la\",\n renewsAtLabel: \"Se re\u00EEnnoie\u0219te la\",\n expiresAtLabel: \"Expir\u0103 la\",\n overdueSinceLabel: \"Restant din\",\n expiryBoundaryLabel: \"Limit\u0103 expirare\",\n cancelledAtLabel: \"Anulat la\",\n operatorAuthorityLabel: \"Autoritate operator\",\n managementDestinationLabel: \"Administreaz\u0103 \u00EEn\",\n operatorAuthorityGatewayLabel: \"Gateway\",\n operatorAuthorityTenantLabel: \"Tenant\",\n operatorAuthorityPublisherLabel: \"Publisher\",\n operatorAuthorityOwnerLabel: \"Proprietar aplica\u021Bie\",\n managementDestinationGatewayLabel: \"Administrare gateway\",\n managementDestinationTenantLabel: \"Aplica\u021Bia tenantului\",\n managementDestinationPublisherLabel: \"Aplica\u021Bia publisherului\",\n managementDestinationOwnerLabel: \"Proprietarul aplica\u021Biei\",\n managementDestinationHintGatewayLabel:\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn administrarea gateway-ului.\",\n managementDestinationHintTenantLabel:\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia tenantului.\",\n managementDestinationHintPublisherLabel:\n \"Administrarea avansat\u0103 a abonamentului se face \u00EEn aplica\u021Bia publisherului.\",\n managementDestinationHintOwnerLabel:\n \"Administrarea avansat\u0103 a abonamentului este gestionat\u0103 de proprietarul aplica\u021Biei.\",\n openManagementDestinationActionLabel: \"Deschide administrarea\",\n virtualCurrencyLabel: \"Moned\u0103 virtual\u0103\",\n currentCreditsLabel: \"Credite acum\",\n creditsRemainingLabel: \"Sold\",\n creditBalanceLabel: \"Credite\",\n addOnUnlocksLabel: \"Unlock-uri suplimentare\",\n coverageActiveLabel: \"\u00CEnc\u0103 activ\",\n coverageInactiveLabel: \"Neacoperit\",\n noOverdueRestrictionLabel: \"Nu exist\u0103 restric\u021Bii active de \u00EEnt\u00E2rziere.\",\n reasonGraceCoveredPastDueLabel: \"Accesul r\u0103m\u00E2ne activ \u00EEn perioada de gra\u021Bie\",\n reasonPastDueAfterPeriodEndLabel: \"Perioada curent\u0103 s-a \u00EEncheiat f\u0103r\u0103 o re\u00EEnnoire reu\u0219it\u0103\",\n reasonExpiredAfterBoundaryLabel: \"A fost atins\u0103 limita de expirare\",\n refreshStatusActionLabel: \"Actualizeaz\u0103 starea\",\n refreshingStatusActionLabel: \"Se actualizeaz\u0103...\",\n cancelSubscriptionActionLabel: \"Anuleaz\u0103 abonamentul\",\n cancellingSubscriptionActionLabel: \"Se anuleaz\u0103...\",\n noPublishedPlansLabel: \"Nu exist\u0103 planuri disponibile \u00EEn acest moment.\",\n recentTimelineTitle: \"Activitate recent\u0103\",\n recentTimelineSubtitle:\n \"Cele mai recente actualiz\u0103ri pentru abonamente, solduri, cump\u0103r\u0103ri \u0219i facturi pentru aceast\u0103 aplica\u021Bie.\",\n historyAuditTitle: \"Istoric detaliat\",\n historyAuditSubtitle:\n \"\u00CEnregistr\u0103ri recente grupate dup\u0103 abonamente, solduri, cump\u0103r\u0103ri \u0219i facturi.\",\n historyBalanceSummaryTitle: \"Solduri acum\",\n historyCreditSummaryTitle: \"Credite acum\",\n historyBalanceSummarySubtitle:\n \"Cele mai recente solduri vizibile din portofel, grupate dup\u0103 moneda virtual\u0103 pentru aceast\u0103 aplica\u021Bie.\",\n noHistoryAvailableLabel:\n \"Nu exist\u0103 \u00EEnc\u0103 istoric de monetizare disponibil pentru aceast\u0103 aplica\u021Bie.\",\n historyGenericLabel: \"Istoric\",\n historyPurchaseIntentsTitle: \"Inten\u021Bii de cump\u0103rare\",\n historyPurchaseIntentLabel: \"Inten\u021Bie de cump\u0103rare\",\n historyTransactionsTitle: \"Tranzac\u021Bii\",\n historyTransactionLabel: \"Tranzac\u021Bie\",\n historySettlementDetailDisputeWarningNeedsResponse:\n \"Avertisment disput\u0103: este necesar un r\u0103spuns\",\n historySettlementDetailDisputeWarningUnderReview: \"Avertisment disput\u0103 \u00EEn analiz\u0103\",\n historySettlementDetailDisputeWarningClosed: \"Avertisment disput\u0103 \u00EEnchis\",\n historySettlementDetailDisputeNeedsResponse: \"Disput\u0103 ce necesit\u0103 r\u0103spuns\",\n historySettlementDetailDisputeUnderReview: \"Disput\u0103 \u00EEn analiz\u0103\",\n historySettlementDetailDisputeWon: \"Disput\u0103 c\u00E2\u0219tigat\u0103\",\n historySettlementDetailDisputeLost: \"Disput\u0103 pierdut\u0103\",\n historySubscriptionsTitle: \"Abonamente\",\n historySubscriptionContractLabel: \"Contract de abonament\",\n historyEntitlementsTitle: \"Drepturi de acces\",\n historyEntitlementLabel: \"Drept de acces\",\n historyWalletAccountsTitle: \"Conturi de portofel\",\n historyWalletAccountLabel: \"Cont de portofel\",\n historyWalletLedgerTitle: \"Registru portofel\",\n historyWalletLedgerEntryLabel: \"\u00CEnregistrare \u00EEn registrul portofelului\",\n historyAccessSnapshotsTitle: \"Instantanee acces\",\n historyAccessSnapshotLabel: \"Instantaneu acces\",\n historyInvoicesTitle: \"Facturi\",\n historyInvoiceLabel: \"Factur\u0103\",\n featureCurrentAccessMissingLabel: \"Acoperirea de acces curent nu este activ\u0103 pe acest scope.\",\n featureSubscriptionMissingLabel: \"Nu este vizibil niciun abonament activ pentru acest scope.\",\n featureCreditsMissingLabel: (requiredLabel: string, availableLabel: string) =>\n `Aceast\u0103 ac\u021Biune are nevoie de ${requiredLabel}, dar acum sunt vizibile doar ${availableLabel}.`,\n featureBlockedSummary: (title: string) =>\n `${title || \"Func\u021Bia\"} este blocat\u0103 pe scope-ul curent.`,\n featureReadySummary: (title: string) =>\n `${title || \"Func\u021Bia\"} poate fi deblocat\u0103 din op\u021Biunile curente de plan.`,\n featureNeedMixedAccessLabel: \"necesit\u0103 acces mixt\",\n featureNeedMembershipAndCreditsLabel: (unitLabel: string) =>\n `necesit\u0103 abonament + ${unitLabel}`,\n featureNeedMembershipLabel: \"necesit\u0103 abonament\",\n featureNeedCreditsLabel: (unitLabel: string) => `necesit\u0103 ${unitLabel}`,\n featureNeedAccessLabel: \"necesit\u0103 acces\",\n featureLockedLabel: \"blocat\",\n featureGapShortLabel: (amountLabel: string) => `lipse\u0219te ${amountLabel}`,\n featureCurrentAccessMissingBadge: \"lipse\u0219te accesul curent\",\n featureMembershipNotActiveBadge: \"abonamentul nu este activ\",\n featureCandidateLead: (selectedPackageTitle: string) =>\n `${selectedPackageTitle || \"Pachetul selectat\"} este un pachet candidat pentru acest gol de acces.`,\n featureCandidateFallbackLead: \"Alege o op\u021Biune de plan care acoper\u0103 golul curent de acces.\",\n featureViewHybridOptionsLabel: \"Vezi op\u021Biunile hibride\",\n featureViewMembershipOptionsLabel: \"Vezi op\u021Biunile de abonament\",\n featureViewCreditOptionsLabel: (unitLabel: string) => `Vezi op\u021Biunile ${unitLabel}`,\n featureViewUnlockOptionsLabel: \"Vezi op\u021Biunile de unlock\",\n featureOpenPaywallLabel: \"Deschide planurile\",\n featureUnlockCheckoutLabel: \"Deblocheaz\u0103 prin checkout g\u0103zduit\",\n featureStartMembershipCheckoutLabel: \"Porne\u0219te checkout-ul de abonament\",\n featureBuyCreditsCheckoutLabel: (unitLabel: string) =>\n `Cump\u0103r\u0103 ${unitLabel} prin checkout g\u0103zduit`,\n featureStartHybridCheckoutLabel: \"Porne\u0219te checkout-ul hibrid\",\n featureCreatePaymentSessionLabel: \"Creeaz\u0103 sesiunea de plat\u0103\",\n },\n },\n} as const;\n\nexport type XmsCopyLocale = keyof typeof XMS_COPY_CATALOG;\n\nexport function resolveXmsCopyLocale(locale: unknown): XmsCopyLocale {\n return isRomanianLocale(locale) ? \"ro\" : \"en\";\n}\n\nexport function buildXmsPackageCopy(locale: unknown): XmsPackageCopy {\n return XMS_COPY_CATALOG[resolveXmsCopyLocale(locale)].package;\n}\n\nexport function buildXmsSurfaceCopy(input?: { locale?: unknown }): XmsSurfaceCopy {\n return XMS_COPY_CATALOG[resolveXmsCopyLocale(input?.locale)].surface;\n}\n", "import { buildXmsPackageCopy, buildXmsSurfaceCopy } from \"./xmsCopy.js\";\nimport { buildModalShellLayout, buildModalShellTheme } from \"./modalShell.js\";\nexport { buildXmsSurfaceCopy } from \"./xmsCopy.js\";\n\nfunction readString(value: unknown): string {\n return String(value ?? \"\").trim();\n}\n\nfunction readNumber(value: unknown, fallback = 0): number {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : fallback;\n}\n\nfunction readLower(value: unknown): string {\n return readString(value).toLowerCase();\n}\n\nfunction readBoolean(value: unknown, fallback = false): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction readLocalizedText(value: unknown, fallback = \"\"): string {\n if (typeof value === \"string\") {\n return readString(value) || fallback;\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return fallback;\n }\n const record = value as Record<string, unknown>;\n return (\n readString(record.en) ||\n readString(record.ro) ||\n Object.values(record)\n .map((item) => readString(item))\n .find(Boolean) ||\n fallback\n );\n}\n\nfunction readVirtualCurrencyDefinition(value: unknown): Record<string, unknown> | null {\n const record = readRecord(value);\n if (!record) return null;\n const code = readString(record.code);\n const name = readString(record.name);\n if (!code && !name) return null;\n return record;\n}\n\nfunction hasNamedVirtualCurrency(value: unknown): boolean {\n return Boolean(readVirtualCurrencyDefinition(value));\n}\n\nfunction formatVirtualCurrencyLabel(\n value: unknown,\n options?: {\n includeCode?: boolean;\n preferCode?: boolean;\n },\n): string {\n const record = readVirtualCurrencyDefinition(value);\n if (!record) return \"\";\n const code = readString(record.code);\n const name = readString(record.name);\n if (options?.preferCode && code) return code;\n if (options?.includeCode && name && code && readLower(name) !== readLower(code)) {\n return `${name} (${code})`;\n }\n return name || code;\n}\n\nfunction formatVirtualCurrencyAmountLabel(input: {\n amount: unknown;\n virtualCurrency?: unknown;\n fallbackUnit?: string;\n}): string {\n const amount = readString(input.amount);\n if (!amount) return \"\";\n const currencyLabel = formatVirtualCurrencyLabel(input.virtualCurrency);\n if (currencyLabel) return `${amount} ${currencyLabel}`;\n const fallbackUnit = readString(input.fallbackUnit);\n return fallbackUnit ? `${amount} ${fallbackUnit}` : amount;\n}\n\nfunction normalizeVirtualCurrencyDisplayLabel(label: unknown): string {\n const normalized = readString(label);\n if (!normalized) return \"\";\n return normalized.replace(/\\s+\\([^)]+\\)\\s*$/, \"\").trim() || normalized;\n}\n\nfunction readPackageVirtualCurrency(item: unknown): Record<string, unknown> | null {\n const record = readRecord(item);\n return (\n readVirtualCurrencyDefinition(record?.virtualCurrency) ??\n readVirtualCurrencyDefinition(readRecord(record?.productMetadata)?.virtual_currency)\n );\n}\n\nfunction readFeatureCurrencyUnitLabel(input: {\n snapshotSummary?: unknown;\n activePackage?: unknown;\n}): string {\n const snapshotSummary = readRecord(input.snapshotSummary);\n const wallet = readRecord(snapshotSummary?.wallet);\n const walletCurrencyLabel = normalizeVirtualCurrencyDisplayLabel(wallet?.virtualCurrencyLabel);\n if (walletCurrencyLabel) return walletCurrencyLabel;\n const packageCurrencyLabel = normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(readPackageVirtualCurrency(input.activePackage), {\n includeCode: true,\n }),\n );\n return packageCurrencyLabel || \"credits\";\n}\n\nfunction formatNamedUnitAmount(amount: unknown, unitLabel: string): string {\n const normalizedAmount = readString(amount);\n return normalizedAmount ? `${normalizedAmount} ${unitLabel}` : \"\";\n}\n\nfunction escapeHtml(value: unknown): string {\n return String(value ?? \"\")\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"'\", \"&#39;\");\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readColorToken(value: unknown): string {\n const token = readString(value);\n if (!token) return \"\";\n return token;\n}\n\nfunction buildPaywallThemeStyle(options: {\n themeTokens?: unknown;\n compact?: boolean;\n emphasis?: unknown;\n}): string {\n const theme = readRecord(options.themeTokens) ?? {};\n const emphasis = readLower(options.emphasis) || \"default\";\n const compact = options.compact === true;\n const vars = new Map<string, string>();\n const setVar = (name: string, value: unknown) => {\n const token = readColorToken(value);\n if (!token) return;\n vars.set(name, token);\n };\n\n setVar(\"--xapps-paywall-surface\", theme.surface);\n setVar(\"--xapps-paywall-package-surface\", theme.package_surface ?? theme.surface_alt);\n setVar(\"--xapps-paywall-text\", theme.text);\n setVar(\"--xapps-paywall-muted\", theme.muted_text ?? theme.muted);\n setVar(\"--xapps-paywall-border\", theme.border);\n setVar(\"--xapps-paywall-accent-start\", theme.accent_start ?? theme.accent);\n setVar(\"--xapps-paywall-accent-end\", theme.accent_end ?? theme.accent_alt);\n setVar(\"--xapps-paywall-badge-bg\", theme.badge_bg);\n setVar(\"--xapps-paywall-badge-text\", theme.badge_text);\n setVar(\"--xapps-paywall-action-text\", theme.action_text);\n setVar(\"--xapps-paywall-money-bg\", theme.money_bg);\n setVar(\"--xapps-paywall-money-text\", theme.money_text);\n setVar(\"--xapps-paywall-primary-bg\", theme.primary_bg);\n setVar(\"--xapps-paywall-primary-border\", theme.primary_border);\n setVar(\"--xapps-paywall-primary-text\", theme.primary_text);\n setVar(\"--xapps-paywall-selected-bg\", theme.selected_bg);\n setVar(\"--xapps-paywall-selected-border\", theme.selected_border);\n setVar(\"--xapps-paywall-selected-shadow\", theme.selected_shadow);\n setVar(\"--xapps-paywall-default-bg\", theme.default_bg);\n setVar(\"--xapps-paywall-default-border\", theme.default_border);\n setVar(\"--xapps-paywall-default-shadow\", theme.default_shadow);\n setVar(\"--xapps-paywall-signal-bg\", theme.signal_bg);\n setVar(\"--xapps-paywall-signal-text\", theme.signal_text);\n setVar(\"--xapps-paywall-notice-bg\", theme.notice_bg);\n setVar(\"--xapps-paywall-notice-border\", theme.notice_border);\n setVar(\"--xapps-paywall-notice-text\", theme.notice_text);\n setVar(\"--xapps-paywall-success-bg\", theme.success_bg);\n setVar(\"--xapps-paywall-success-border\", theme.success_border);\n setVar(\"--xapps-paywall-success-text\", theme.success_text);\n setVar(\"--xapps-paywall-warning-bg\", theme.warning_bg);\n setVar(\"--xapps-paywall-warning-border\", theme.warning_border);\n setVar(\"--xapps-paywall-warning-text\", theme.warning_text);\n setVar(\"--xapps-paywall-danger-bg\", theme.danger_bg);\n setVar(\"--xapps-paywall-danger-border\", theme.danger_border);\n setVar(\"--xapps-paywall-danger-text\", theme.danger_text);\n\n if (compact) {\n vars.set(\"--xapps-paywall-gap\", \"10px\");\n vars.set(\"--xapps-paywall-padding\", \"14px\");\n vars.set(\"--xapps-paywall-package-padding\", \"10px\");\n }\n\n if (emphasis === \"soft\") {\n vars.set(\"--xapps-paywall-shadow\", \"0 8px 24px rgba(15, 23, 42, 0.06)\");\n } else if (emphasis === \"strong\") {\n vars.set(\"--xapps-paywall-shadow\", \"0 14px 36px rgba(15, 23, 42, 0.14)\");\n vars.set(\"--xapps-paywall-package-shadow\", \"0 8px 24px rgba(15, 23, 42, 0.12)\");\n }\n\n return Array.from(vars.entries())\n .map(([name, value]) => `${name}:${escapeHtml(value)}`)\n .join(\";\");\n}\n\nfunction formatStateLabel(value: unknown, fallback = \"\u2014\"): string {\n const raw = readString(value);\n if (!raw) return fallback;\n return raw.replace(/_/g, \" \");\n}\n\nfunction hasPositiveCredits(accessProjection: Record<string, unknown> | null): boolean {\n return readNumber(accessProjection?.credits_remaining, 0) > 0;\n}\n\nfunction isExhaustedIncludedCreditAccess(input: {\n accessProjection: Record<string, unknown> | null;\n currentSubscription?: Record<string, unknown> | null;\n}): boolean {\n const balanceState = readLower(input.accessProjection?.balance_state);\n const entitlementState = readLower(input.accessProjection?.entitlement_state);\n return (\n !input.currentSubscription &&\n entitlementState === \"active\" &&\n !hasPositiveCredits(input.accessProjection) &&\n (balanceState === \"empty\" || balanceState === \"insufficient\")\n );\n}\n\nfunction hasEffectiveCoverage(input: {\n accessProjection: Record<string, unknown> | null;\n currentSubscription?: Record<string, unknown> | null;\n}): boolean {\n if (isExhaustedIncludedCreditAccess(input)) return false;\n return Boolean(input.accessProjection?.has_current_access);\n}\n\nfunction formatCoverageLabel(input: {\n accessProjection: Record<string, unknown> | null;\n currentSubscription?: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n if (isExhaustedIncludedCreditAccess(input)) {\n return buildXmsPackageCopy(input.locale).consumedLabel;\n }\n if (hasEffectiveCoverage(input)) return copy.coverageActiveLabel;\n return copy.coverageInactiveLabel;\n}\n\nfunction resolveSubscriptionCoverageLabel(input: {\n currentSubscription: Record<string, unknown> | null;\n overduePolicy: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n if (typeof input.overduePolicy?.has_current_access === \"boolean\") {\n return input.overduePolicy.has_current_access\n ? copy.coverageActiveLabel\n : copy.coverageInactiveLabel;\n }\n const status = readLower(input.currentSubscription?.status);\n if (\n status === \"active\" ||\n status === \"trialing\" ||\n status === \"grace\" ||\n status === \"cancelled\"\n ) {\n return copy.coverageActiveLabel;\n }\n if (status === \"past_due\" || status === \"expired\" || status === \"suspended\") {\n return copy.coverageInactiveLabel;\n }\n return \"\";\n}\n\nfunction resolveSubscriptionReasonLabel(input: {\n overduePolicy: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const reason = readLower(input.overduePolicy?.effective_status_reason);\n if (!reason) return \"\";\n if (reason === \"grace_covered_past_due\") return copy.reasonGraceCoveredPastDueLabel;\n if (reason === \"past_due_after_period_end\") return copy.reasonPastDueAfterPeriodEndLabel;\n if (reason === \"expired_after_boundary\") return copy.reasonExpiredAfterBoundaryLabel;\n return formatStateLabel(reason, \"\");\n}\n\nfunction resolveSubscriptionOperatorAuthorityLabel(input: {\n currentSubscription: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const management = readRecord(input.currentSubscription?.subscription_management);\n const ownerScope = readLower(management?.operator_owner_scope);\n if (ownerScope === \"gateway\") return copy.operatorAuthorityGatewayLabel;\n if (ownerScope === \"tenant\") return copy.operatorAuthorityTenantLabel;\n if (ownerScope === \"publisher\") return copy.operatorAuthorityPublisherLabel;\n if (ownerScope === \"owner\") return copy.operatorAuthorityOwnerLabel;\n return \"\";\n}\n\nfunction resolveSubscriptionManagementDestinationLabel(input: {\n currentSubscription: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const management = readRecord(input.currentSubscription?.subscription_management);\n const destination = readRecord(management?.management_destination);\n const kind = readLower(destination?.kind);\n if (kind === \"gateway_admin\") return copy.managementDestinationGatewayLabel;\n if (kind === \"tenant_app\") return copy.managementDestinationTenantLabel;\n if (kind === \"publisher_app\") return copy.managementDestinationPublisherLabel;\n if (kind === \"app_owner\") return copy.managementDestinationOwnerLabel;\n return \"\";\n}\n\nfunction resolveSubscriptionManagementDestinationHint(input: {\n currentSubscription: Record<string, unknown> | null;\n locale?: unknown;\n}): string {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const management = readRecord(input.currentSubscription?.subscription_management);\n const destination = readRecord(management?.management_destination);\n const kind = readLower(destination?.kind);\n if (kind === \"gateway_admin\") return copy.managementDestinationHintGatewayLabel;\n if (kind === \"tenant_app\") return copy.managementDestinationHintTenantLabel;\n if (kind === \"publisher_app\") return copy.managementDestinationHintPublisherLabel;\n if (kind === \"app_owner\") return copy.managementDestinationHintOwnerLabel;\n return \"\";\n}\n\nfunction resolveSubscriptionManagementDestinationHref(input: {\n currentSubscription: Record<string, unknown> | null;\n}): string {\n const management = readRecord(input.currentSubscription?.subscription_management);\n const destination = readRecord(management?.management_destination);\n return readString(destination?.href);\n}\n\nfunction readSubscriptionActionAvailability(input: {\n currentSubscription: Record<string, unknown> | null;\n actionKey: \"refresh_status\" | \"cancel_subscription\";\n fallback: boolean;\n}): boolean {\n const management = readRecord(input.currentSubscription?.subscription_management);\n const subjectActions = readRecord(management?.subject_actions);\n const action = readRecord(subjectActions?.[input.actionKey]);\n return readBoolean(action?.available, input.fallback);\n}\n\nexport function buildXmsSubscriptionLifecycleSummary(input: {\n currentSubscription?: unknown;\n current_subscription?: unknown;\n locale?: unknown;\n}): {\n present: boolean;\n status: string;\n statusLabel: string;\n coverageLabel: string;\n reasonCode: string | null;\n reasonLabel: string;\n renewsAt: string | null;\n currentPeriodEndsAt: string | null;\n expiresAt: string | null;\n cancelledAt: string | null;\n overdueSince: string | null;\n expiryBoundaryAt: string | null;\n canCancel: boolean;\n canRefresh: boolean;\n} {\n function timestampsMatch(left: string | null, right: string | null): boolean {\n if (!left || !right) return false;\n const leftMs = Date.parse(left);\n const rightMs = Date.parse(right);\n if (!Number.isNaN(leftMs) && !Number.isNaN(rightMs)) return leftMs === rightMs;\n return left === right;\n }\n\n const currentSubscription = readRecord(input.currentSubscription ?? input.current_subscription);\n const overduePolicy =\n currentSubscription?.overdue_policy &&\n typeof currentSubscription.overdue_policy === \"object\" &&\n !Array.isArray(currentSubscription.overdue_policy)\n ? (currentSubscription.overdue_policy as Record<string, unknown>)\n : null;\n const status = readLower(currentSubscription?.status);\n const renewsAt = readString(currentSubscription?.renews_at) || null;\n const currentPeriodEndsAt = readString(currentSubscription?.current_period_ends_at) || null;\n const expiresAt = readString(currentSubscription?.expired_at) || null;\n const cancelledAt = readString(currentSubscription?.cancelled_at) || null;\n const overdueSince = readString(overduePolicy?.overdue_since) || null;\n let expiryBoundaryAt = readString(overduePolicy?.expiry_boundary_at) || null;\n\n const normalizedRenewsAt = renewsAt;\n let normalizedCurrentPeriodEndsAt = currentPeriodEndsAt;\n if (\n timestampsMatch(normalizedRenewsAt, normalizedCurrentPeriodEndsAt) ||\n timestampsMatch(expiresAt, normalizedCurrentPeriodEndsAt)\n ) {\n normalizedCurrentPeriodEndsAt = null;\n }\n if (\n timestampsMatch(normalizedRenewsAt, expiryBoundaryAt) ||\n timestampsMatch(normalizedCurrentPeriodEndsAt, expiryBoundaryAt) ||\n timestampsMatch(expiresAt, expiryBoundaryAt)\n ) {\n expiryBoundaryAt = null;\n }\n\n return {\n present: Boolean(currentSubscription),\n status,\n statusLabel: formatStateLabel(currentSubscription?.status, \"\"),\n coverageLabel: resolveSubscriptionCoverageLabel({\n currentSubscription,\n overduePolicy,\n locale: input.locale,\n }),\n reasonCode: readString(overduePolicy?.effective_status_reason) || null,\n reasonLabel: resolveSubscriptionReasonLabel({\n overduePolicy,\n locale: input.locale,\n }),\n renewsAt: normalizedRenewsAt,\n currentPeriodEndsAt: normalizedCurrentPeriodEndsAt,\n expiresAt,\n cancelledAt,\n overdueSince,\n expiryBoundaryAt,\n canCancel:\n Boolean(currentSubscription) &&\n (status === \"active\" || status === \"trialing\" || status === \"grace\" || status === \"past_due\"),\n canRefresh: Boolean(currentSubscription),\n };\n}\n\nexport function hasSubjectMonetizationContext(session: unknown): boolean {\n const record = session && typeof session === \"object\" ? (session as Record<string, unknown>) : {};\n const context =\n record.context && typeof record.context === \"object\" && !Array.isArray(record.context)\n ? (record.context as Record<string, unknown>)\n : {};\n return Boolean(readString(context.subject_id));\n}\n\nexport function hasInstallationMonetizationContext(session: unknown): boolean {\n const record = session && typeof session === \"object\" ? (session as Record<string, unknown>) : {};\n const context =\n record.context && typeof record.context === \"object\" && !Array.isArray(record.context)\n ? (record.context as Record<string, unknown>)\n : {};\n return Boolean(readString(context.installation_id));\n}\n\nexport function getDefaultXappMonetizationScopeKind(\n session: unknown,\n): \"subject\" | \"installation\" | \"realm\" {\n if (hasSubjectMonetizationContext(session)) return \"subject\";\n if (hasInstallationMonetizationContext(session)) return \"installation\";\n return \"realm\";\n}\n\nexport function flattenXappMonetizationCatalog(items: unknown): Array<Record<string, unknown>> {\n const out: Array<Record<string, unknown>> = [];\n for (const offering of Array.isArray(items) ? items : []) {\n const packages = Array.isArray((offering as any)?.packages) ? (offering as any).packages : [];\n for (const pkg of packages) {\n const price = Array.isArray((pkg as any)?.prices) ? (pkg as any).prices[0] || null : null;\n out.push({\n offeringId: readString((offering as any)?.id),\n offeringSlug: readString((offering as any)?.slug),\n offeringTitle: readLocalizedText(\n (offering as any)?.title,\n readString((offering as any)?.slug) || buildXmsSurfaceCopy().offeringFallbackLabel,\n ),\n offeringPlacement: readString((offering as any)?.placement) || null,\n packageId: readString((pkg as any)?.id),\n packageSlug: readString((pkg as any)?.slug),\n packageTitle: readLocalizedText(\n (pkg as any)?.title,\n readString((pkg as any)?.slug) || buildXmsSurfaceCopy().packageFallbackLabel,\n ),\n packageKind: readString((pkg as any)?.package_kind) || \"standard\",\n productId: readString((pkg as any)?.product?.id),\n productSlug: readString((pkg as any)?.product?.slug),\n productFamily: readString((pkg as any)?.product?.product_family),\n virtualCurrency: readVirtualCurrencyDefinition((pkg as any)?.product?.virtual_currency),\n productMetadata:\n (pkg as any)?.product?.metadata && typeof (pkg as any).product.metadata === \"object\"\n ? (pkg as any).product.metadata\n : {},\n priceId: readString((price as any)?.id),\n amount: readString((price as any)?.amount),\n currency: readString((price as any)?.currency),\n billingPeriod: readString((price as any)?.billing_period) || null,\n description:\n readLocalizedText((pkg as any)?.description) ||\n readLocalizedText((pkg as any)?.product?.description),\n metadata:\n (pkg as any)?.metadata && typeof (pkg as any).metadata === \"object\"\n ? (pkg as any).metadata\n : {},\n });\n }\n }\n return out.filter((item) => item.offeringId && item.packageId && item.priceId);\n}\n\nexport function listXappMonetizationPaywalls(items: unknown): Array<Record<string, unknown>> {\n return (Array.isArray(items) ? items : [])\n .filter((item) => item && typeof item === \"object\" && !Array.isArray(item))\n .map((item) => item as Record<string, unknown>);\n}\n\nfunction buildPaywallPlacementCandidates(value: unknown): string[] {\n const raw = readLower(value);\n if (!raw) return [];\n const out = new Set<string>([raw]);\n if (raw === \"paywall\" || raw === \"default_paywall\") {\n out.add(\"paywall\");\n out.add(\"default_paywall\");\n }\n if (raw === \"feature_paywall\" || raw === \"feature_gate\") {\n out.add(\"feature_paywall\");\n out.add(\"feature_gate\");\n }\n if (raw === \"upgrade\" || raw === \"upgrade_paywall\") {\n out.add(\"upgrade\");\n out.add(\"upgrade_paywall\");\n }\n if (raw === \"retention\" || raw === \"retention_paywall\") {\n out.add(\"retention\");\n out.add(\"retention_paywall\");\n }\n if (raw === \"checkout\" || raw === \"checkout_entry\") {\n out.add(\"checkout\");\n out.add(\"checkout_entry\");\n }\n return Array.from(out);\n}\n\nexport function selectXappMonetizationPaywall(input: {\n paywalls: unknown;\n slug?: unknown;\n placement?: unknown;\n}): Record<string, unknown> | null {\n const paywalls = listXappMonetizationPaywalls(input.paywalls);\n const slug = readLower(input.slug);\n const placement = readLower(input.placement);\n if (slug) {\n const matched = paywalls.find((item) => readLower(item.slug) === slug);\n if (matched) return matched;\n }\n if (placement) {\n const candidates = buildPaywallPlacementCandidates(placement);\n const matched = paywalls.find((item) => candidates.includes(readLower(item.placement)));\n if (matched) return matched;\n }\n return paywalls[0] || null;\n}\n\nexport function flattenXappMonetizationPaywallPackages(\n paywall: unknown,\n): Array<Record<string, unknown>> {\n const record =\n paywall && typeof paywall === \"object\" && !Array.isArray(paywall)\n ? (paywall as Record<string, unknown>)\n : {};\n const out: Array<Record<string, unknown>> = [];\n for (const pkg of Array.isArray(record.packages) ? record.packages : []) {\n const packageRecord =\n pkg && typeof pkg === \"object\" && !Array.isArray(pkg) ? (pkg as Record<string, unknown>) : {};\n const price = Array.isArray(packageRecord.prices) ? packageRecord.prices[0] || null : null;\n out.push({\n offeringId: readString(packageRecord.offering_id),\n offeringSlug: readString(packageRecord.offering_slug),\n offeringTitle: readLocalizedText(\n packageRecord.offering_title,\n readString(packageRecord.offering_slug) || buildXmsSurfaceCopy().offeringFallbackLabel,\n ),\n offeringPlacement: readString(packageRecord.offering_placement) || null,\n packageId: readString(packageRecord.id),\n packageSlug: readString(packageRecord.slug),\n packageTitle: readLocalizedText(\n packageRecord.title,\n readLocalizedText(\n (packageRecord.product as Record<string, unknown> | undefined)?.title,\n readString(packageRecord.slug) || buildXmsSurfaceCopy().packageFallbackLabel,\n ),\n ),\n packageKind: readString(packageRecord.package_kind) || \"standard\",\n productId: readString((packageRecord.product as Record<string, unknown> | undefined)?.id),\n productSlug: readString((packageRecord.product as Record<string, unknown> | undefined)?.slug),\n productTitle: readLocalizedText(\n (packageRecord.product as Record<string, unknown> | undefined)?.title,\n readString((packageRecord.product as Record<string, unknown> | undefined)?.slug),\n ),\n productFamily: readString(\n (packageRecord.product as Record<string, unknown> | undefined)?.product_family,\n ),\n virtualCurrency:\n readVirtualCurrencyDefinition(\n (packageRecord.product as Record<string, unknown> | undefined)?.virtual_currency,\n ) ?? null,\n productMetadata:\n (packageRecord.product as Record<string, unknown> | undefined)?.metadata &&\n typeof (packageRecord.product as Record<string, unknown>).metadata === \"object\"\n ? ((packageRecord.product as Record<string, unknown>).metadata as Record<string, unknown>)\n : {},\n priceId: readString((price as Record<string, unknown> | null)?.id),\n amount: readString((price as Record<string, unknown> | null)?.amount),\n currency: readString((price as Record<string, unknown> | null)?.currency),\n billingPeriod: readString((price as Record<string, unknown> | null)?.billing_period) || null,\n purchasePolicy: readProjectedPurchasePolicy(packageRecord.purchase_policy),\n metadata:\n packageRecord.metadata && typeof packageRecord.metadata === \"object\"\n ? (packageRecord.metadata as Record<string, unknown>)\n : {},\n });\n }\n return out.filter((item) => item.offeringId && item.packageId && item.priceId);\n}\n\nfunction formatPlacementLabel(value: unknown, fallback = \"General placement\"): string {\n const raw = readString(value);\n if (!raw) return fallback;\n return raw.replace(/[_-]+/g, \" \");\n}\n\nfunction readPackageCredits(item: Record<string, unknown>): number {\n const metadata =\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {};\n const direct = readNumber((item as any).credits ?? metadata.credits, -1);\n if (direct > 0) return direct;\n const included = readNumber(metadata.included_credits, -1);\n if (included > 0) return included;\n return 0;\n}\n\nexport function buildMonetizationOfferingPresentation(input: unknown): {\n offeringLabel: string;\n placementLabel: string;\n summary: string;\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const surfaceCopy = buildXmsSurfaceCopy({ locale: record.locale });\n const offeringLabel =\n readString(record.offeringTitle) ||\n formatStateLabel(record.offeringSlug, surfaceCopy.offeringFallbackLabel);\n const placementRaw = readLower(record.offeringPlacement);\n const placementLabel = formatPlacementLabel(record.offeringPlacement);\n const copy = buildXmsPackageCopy(record.locale);\n let summary = copy.generalOfferingSummary;\n\n if (placementRaw.includes(\"feature\") && placementRaw.includes(\"paywall\")) {\n summary = copy.featurePaywallOfferingSummary;\n } else if (placementRaw.includes(\"paywall\")) {\n summary = copy.defaultPaywallOfferingSummary;\n } else if (placementRaw.includes(\"checkout\")) {\n summary = copy.checkoutOfferingSummary;\n } else if (placementRaw.includes(\"upgrade\")) {\n summary = copy.upgradeOfferingSummary;\n }\n\n return {\n offeringLabel,\n placementLabel,\n summary,\n };\n}\n\nexport function buildMonetizationPaywallPresentation(input: unknown): {\n paywallLabel: string;\n placementLabel: string;\n summary: string;\n defaultPackageLabel: string;\n packageCountLabel: string;\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const paywallLabel =\n readLocalizedText(\n record.title,\n formatStateLabel(\n record.slug,\n buildXmsSurfaceCopy({ locale: record.locale }).paywallFallbackLabel,\n ),\n ) || buildXmsSurfaceCopy({ locale: record.locale }).paywallFallbackLabel;\n const placementLabel = formatPlacementLabel(record.placement);\n const packages = flattenXappMonetizationPaywallPackages(record);\n const defaultPackageRef = readString(record.default_package_ref);\n const defaultPackage =\n packages.find((item) => readString(item.packageSlug) === defaultPackageRef) ||\n packages[0] ||\n null;\n const summary =\n readLocalizedText(record.description) ||\n (placementLabel === \"General placement\"\n ? \"Presentation surface for monetized package selection.\"\n : `${placementLabel} surface for monetized package selection.`);\n return {\n paywallLabel,\n placementLabel,\n summary,\n defaultPackageLabel: defaultPackage ? readString(defaultPackage.packageTitle) : \"\",\n packageCountLabel: `${packages.length} package${packages.length === 1 ? \"\" : \"s\"}`,\n };\n}\n\nexport function buildMonetizationPaywallRenderModel(input: unknown): {\n paywallLabel: string;\n placementLabel: string;\n summary: string;\n defaultPackageLabel: string;\n packageCountLabel: string;\n badges: string[];\n packages: Array<{\n packageId: string;\n packageSlug: string;\n packageTitle: string;\n productId: string;\n productSlug: string;\n productFamily: string;\n virtualCurrencyCode: string;\n virtualCurrencyName: string;\n virtualCurrencyLabel: string;\n productMetadata: Record<string, unknown>;\n metadata: Record<string, unknown>;\n description: string;\n fitLabel: string;\n moneyLabel: string;\n offeringLabel: string;\n placementLabel: string;\n signals: string[];\n isDefault: boolean;\n }>;\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const presentation = buildMonetizationPaywallPresentation(record);\n const defaultPackageRef = readString(record.default_package_ref);\n const packages = flattenXappMonetizationPaywallPackages(record).map((item) => {\n const packagePresentation = buildMonetizationPackagePresentation(item);\n return {\n packageId: readString(item.packageId),\n packageSlug: readString(item.packageSlug),\n packageTitle: readString(item.packageTitle) || buildXmsSurfaceCopy().packageFallbackLabel,\n productId: readString(item.productId),\n productSlug: readString(item.productSlug),\n productFamily: readString(item.productFamily),\n virtualCurrencyCode: formatVirtualCurrencyLabel(item.virtualCurrency, { preferCode: true }),\n virtualCurrencyName: formatVirtualCurrencyLabel(item.virtualCurrency),\n virtualCurrencyLabel: formatVirtualCurrencyLabel(item.virtualCurrency, { includeCode: true }),\n productMetadata:\n item.productMetadata &&\n typeof item.productMetadata === \"object\" &&\n !Array.isArray(item.productMetadata)\n ? (item.productMetadata as Record<string, unknown>)\n : {},\n metadata:\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {},\n description: readString(item.description) || packagePresentation.summary,\n fitLabel: packagePresentation.fitLabel,\n moneyLabel: packagePresentation.moneyLabel,\n offeringLabel: packagePresentation.offeringLabel,\n placementLabel: packagePresentation.placementLabel,\n signals: packagePresentation.signals,\n isDefault: Boolean(defaultPackageRef) && readString(item.packageSlug) === defaultPackageRef,\n };\n });\n\n const badges = [presentation.placementLabel, presentation.packageCountLabel];\n if (presentation.defaultPackageLabel) {\n badges.push(`default ${presentation.defaultPackageLabel}`);\n }\n\n return {\n ...presentation,\n badges,\n packages,\n };\n}\n\nexport const monetizationPaywallRendererStyles = `\n.xapps-paywall {\n display: grid;\n gap: var(--xapps-paywall-gap, 14px);\n padding: var(--xapps-paywall-padding, 18px);\n border-radius: 18px;\n border: 1px solid var(--xapps-paywall-border, rgba(58, 47, 28, 0.14));\n background: var(--xapps-paywall-surface, rgba(255,255,255,0.92));\n color: var(--xapps-paywall-text, #241b10);\n box-shadow: var(--xapps-paywall-shadow, none);\n}\n.xapps-paywall__head {\n display: grid;\n gap: 8px;\n}\n.xapps-paywall__title {\n margin: 0;\n font: 700 1.15rem/1.15\n var(--xapps-display-font, var(--mx-display-font, var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)));\n}\n.xapps-paywall__summary {\n color: var(--xapps-paywall-muted, #6c5d49);\n font-size: 14px;\n}\n.xapps-paywall__badges {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.xapps-paywall__badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n border-radius: 999px;\n background: var(--xapps-paywall-badge-bg, rgba(15,118,110,0.08));\n color: var(--xapps-paywall-badge-text, #155e75);\n font-size: 12px;\n font-weight: 700;\n}\n.xapps-paywall__packages {\n display: grid;\n gap: 12px;\n}\n.xapps-paywall__package {\n display: grid;\n gap: 10px;\n padding: var(--xapps-paywall-package-padding, 14px);\n border-radius: 16px;\n border: 1px solid var(--xapps-paywall-package-border, rgba(58, 47, 28, 0.12));\n background: var(--xapps-paywall-package-surface, rgba(255,255,255,0.88));\n box-shadow: var(--xapps-paywall-package-shadow, none);\n}\n.xapps-paywall__package.is-default {\n border-color: var(\n --xapps-paywall-default-border,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-paywall-border, transparent))\n );\n box-shadow: var(\n --xapps-paywall-default-shadow,\n inset 0 0 0 1px color-mix(in srgb, var(--xapps-accent, #0f766e) 8%, transparent)\n );\n}\n.xapps-paywall__package.is-selected {\n border-color: var(\n --xapps-paywall-selected-border,\n color-mix(in srgb, var(--xapps-accent-strong, var(--xapps-accent, #155e75)) 32%, var(--xapps-paywall-border, transparent))\n );\n box-shadow: var(\n --xapps-paywall-selected-shadow,\n inset 0 0 0 1px color-mix(in srgb, var(--xapps-accent-strong, var(--xapps-accent, #155e75)) 10%, transparent)\n );\n}\n.xapps-paywall__package-head {\n display: flex;\n gap: 12px;\n align-items: flex-start;\n justify-content: space-between;\n}\n.xapps-paywall__package-title {\n margin: 0;\n font: 700 1rem/1.15\n var(--xapps-display-font, var(--mx-display-font, var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)));\n}\n.xapps-paywall__money {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n padding: 6px 10px;\n border-radius: 999px;\n background: var(--xapps-paywall-money-bg, rgba(58, 47, 28, 0.08));\n color: var(--xapps-paywall-money-text, #3a2f1c);\n font-size: 12px;\n font-weight: 700;\n}\n.xapps-paywall__desc {\n color: var(--xapps-paywall-muted, #6c5d49);\n font-size: 14px;\n}\n.xapps-paywall__signals {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.xapps-paywall__signal {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 9px;\n border-radius: 999px;\n background: var(--xapps-paywall-signal-bg, rgba(58, 47, 28, 0.06));\n color: var(--xapps-paywall-signal-text, #5a4a31);\n font-size: 12px;\n}\n.xapps-paywall__action {\n justify-self: start;\n border: 0;\n border-radius: 999px;\n padding: 10px 14px;\n background: linear-gradient(\n 135deg,\n var(--xapps-paywall-accent-start, #0f766e),\n var(--xapps-paywall-accent-end, #155e75)\n );\n color: var(--xapps-paywall-action-text, #f5fffd);\n font-weight: 700;\n cursor: pointer;\n}\n.xapps-paywall__empty {\n color: var(--xapps-paywall-muted, #6c5d49);\n font-size: 14px;\n}\n`;\n\nexport const monetizationPlansSurfaceStyles = `\n.xapps-xms-plans {\n display: grid;\n gap: 16px;\n color: var(--xapps-text-primary, #0f172a);\n font-family: var(\n --xapps-font-family,\n var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)\n );\n}\n.xapps-xms-plans__header {\n display: grid;\n gap: 6px;\n}\n.xapps-xms-plans__title {\n margin: 0;\n font: 700 1.05rem/1.15\n var(--xapps-display-font, var(--mx-display-font, var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)));\n letter-spacing: -0.01em;\n}\n.xapps-xms-plans__subtitle {\n color: var(--xapps-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.45;\n}\n.xapps-xms-plans__grid {\n display: grid;\n gap: 14px;\n}\n.xapps-xms-plans__card {\n display: grid;\n gap: 12px;\n padding: 16px;\n border-radius: 18px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.24)) 92%, transparent);\n background: linear-gradient(\n 180deg,\n color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 98%, var(--xapps-surface-subtle, #f8fafc)) 0%,\n color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 92%, var(--xapps-surface-subtle, #f8fafc)) 100%\n );\n box-shadow: 0 16px 36px color-mix(in srgb, var(--xapps-text-primary, #0f172a) 8%, transparent);\n}\n.xapps-xms-plans__section-title {\n margin: 0;\n font: 700 0.98rem/1.1\n var(--xapps-display-font, var(--mx-display-font, var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)));\n letter-spacing: -0.01em;\n}\n.xapps-xms-plans__meta {\n display: grid;\n gap: 10px;\n}\n.xapps-xms-plans__surface-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n}\n.xapps-xms-plans__meta-row {\n display: flex;\n justify-content: space-between;\n gap: 12px;\n align-items: flex-start;\n font-size: 13px;\n}\n.xapps-xms-plans__meta-label {\n color: var(--xapps-text-secondary, #64748b);\n flex: 0 0 124px;\n}\n.xapps-xms-plans__meta-value {\n color: var(--xapps-text-primary, #0f172a);\n text-align: right;\n font-weight: 600;\n}\n.xapps-xms-plans__stack {\n display: grid;\n gap: 6px;\n}\n.xapps-xms-plans__notice {\n padding: 10px 12px;\n border-radius: 12px;\n border: 1px solid\n var(\n --xapps-paywall-notice-border,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 18%, var(--xapps-border-color, transparent))\n );\n background: var(\n --xapps-paywall-notice-bg,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 8%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(\n --xapps-paywall-notice-text,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 82%, var(--xapps-text-primary, #0f172a))\n );\n font-size: 13px;\n}\n.xapps-xms-plans__error {\n padding: 10px 12px;\n border-radius: 12px;\n border: 1px solid\n var(\n --xapps-paywall-danger-border,\n color-mix(in srgb, var(--xapps-danger, #dc2626) 18%, var(--xapps-border-color, transparent))\n );\n background: var(\n --xapps-paywall-danger-bg,\n color-mix(in srgb, var(--xapps-danger, #dc2626) 8%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(--xapps-paywall-danger-text, var(--xapps-danger, #b91c1c));\n font-size: 13px;\n}\n.xapps-xms-plans__packages {\n display: grid;\n gap: 12px;\n}\n.xapps-xms-plans__package {\n display: grid;\n gap: 10px;\n padding: 14px;\n border-radius: 16px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.22)) 88%, transparent);\n background: color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 94%, var(--xapps-surface-subtle, #f8fafc));\n}\n.xapps-xms-plans__package.is-selected {\n border-color: var(\n --xapps-paywall-selected-border,\n color-mix(in srgb, var(--xapps-accent, #2563eb) 34%, var(--xapps-border-color, transparent))\n );\n box-shadow: var(\n --xapps-paywall-selected-shadow,\n inset 0 0 0 1px color-mix(in srgb, var(--xapps-accent, #2563eb) 12%, transparent)\n );\n}\n.xapps-xms-plans__package.is-default {\n border-color: var(\n --xapps-paywall-default-border,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-border-color, transparent))\n );\n box-shadow: var(\n --xapps-paywall-default-shadow,\n inset 0 0 0 1px color-mix(in srgb, var(--xapps-accent, #0f766e) 10%, transparent)\n );\n}\n.xapps-xms-plans__package-head {\n display: flex;\n gap: 12px;\n justify-content: space-between;\n align-items: flex-start;\n}\n.xapps-xms-plans__package-title {\n margin: 0;\n font: 700 0.98rem/1.15\n var(--xapps-display-font, var(--mx-display-font, var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)));\n letter-spacing: -0.01em;\n}\n.xapps-xms-plans__package-description {\n margin-top: 4px;\n color: var(--xapps-text-secondary, #64748b);\n font-size: 13px;\n line-height: 1.45;\n}\n.xapps-xms-plans__money {\n display: inline-flex;\n align-items: center;\n white-space: nowrap;\n padding: 6px 10px;\n border-radius: 999px;\n background: var(\n --xapps-paywall-money-bg,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 7%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(\n --xapps-paywall-money-text,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-text-primary, #1e293b))\n );\n font-size: 12px;\n font-weight: 700;\n border: 1px solid\n var(\n --xapps-paywall-primary-border,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 14%, var(--xapps-border-color, transparent))\n );\n}\n.xapps-xms-plans__badges,\n.xapps-xms-plans__signals {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n.xapps-xms-plans__badge,\n.xapps-xms-plans__signal {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 9px;\n border-radius: 999px;\n font-size: 12px;\n}\n.xapps-xms-plans__badge {\n background: var(\n --xapps-paywall-badge-bg,\n color-mix(in srgb, var(--xapps-accent, #2563eb) 8%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(\n --xapps-paywall-badge-text,\n color-mix(in srgb, var(--xapps-accent, #2563eb) 66%, var(--xapps-text-primary, #1d4ed8))\n );\n font-weight: 700;\n}\n.xapps-xms-plans__signal {\n background: var(\n --xapps-paywall-signal-bg,\n color-mix(in srgb, var(--xapps-text-primary, #0f172a) 4%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(\n --xapps-paywall-signal-text,\n color-mix(in srgb, var(--xapps-text-primary, #0f172a) 42%, var(--xapps-text-secondary, #64748b))\n );\n}\n.xapps-xms-plans__action {\n justify-self: start;\n min-height: 40px;\n border: 0;\n border-radius: 12px;\n padding: 10px 14px;\n background: linear-gradient(\n 135deg,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 94%, white),\n color-mix(in srgb, var(--xapps-accent-strong, var(--xapps-accent, #155e75)) 94%, black)\n );\n color: var(--xapps-paywall-action-text, #f8fafc);\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 22px color-mix(in srgb, var(--xapps-accent, #0f766e) 18%, transparent);\n transition:\n transform 0.18s ease,\n box-shadow 0.18s ease,\n filter 0.18s ease;\n}\n.xapps-xms-plans__action:hover,\n.xapps-xms-plans__action:focus-visible {\n color: var(--xapps-paywall-action-text, #f8fafc);\n filter: saturate(1.04) brightness(1.01);\n box-shadow: 0 14px 28px color-mix(in srgb, var(--xapps-accent, #0f766e) 24%, transparent);\n}\n.xapps-xms-plans__action:active {\n transform: translateY(1px);\n}\n.xapps-xms-plans__action[disabled] {\n cursor: not-allowed;\n opacity: 0.6;\n filter: none;\n transform: none;\n box-shadow: none;\n}\n.xapps-xms-plans__surface-action {\n min-height: 38px;\n border-radius: 12px;\n padding: 9px 13px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.24)) 92%, transparent);\n background: color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 96%, var(--xapps-surface-subtle, #f8fafc));\n color: var(--xapps-text-primary, #0f172a);\n font-weight: 700;\n cursor: pointer;\n transition:\n border-color 0.18s ease,\n background-color 0.18s ease,\n color 0.18s ease,\n box-shadow 0.18s ease;\n}\n.xapps-xms-plans__surface-action:hover,\n.xapps-xms-plans__surface-action:focus-visible {\n border-color: var(\n --xapps-paywall-primary-border,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 28%, var(--xapps-border-color, transparent))\n );\n background: var(\n --xapps-paywall-primary-bg,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 7%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(\n --xapps-paywall-primary-text,\n color-mix(in srgb, var(--xapps-accent, #0f766e) 24%, var(--xapps-text-primary, #0f172a))\n );\n}\n.xapps-xms-plans__surface-action[data-variant=\"danger\"] {\n border-color: var(\n --xapps-paywall-danger-border,\n color-mix(in srgb, var(--xapps-danger, #dc2626) 22%, var(--xapps-border-color, transparent))\n );\n color: var(--xapps-paywall-danger-text, var(--xapps-danger, #b91c1c));\n}\n.xapps-xms-plans__surface-action[data-variant=\"danger\"]:hover,\n.xapps-xms-plans__surface-action[data-variant=\"danger\"]:focus-visible {\n border-color: var(\n --xapps-paywall-danger-border,\n color-mix(in srgb, var(--xapps-danger, #dc2626) 34%, var(--xapps-border-color, transparent))\n );\n background: var(\n --xapps-paywall-danger-bg,\n color-mix(in srgb, var(--xapps-danger, #dc2626) 8%, var(--xapps-surface-bg, #ffffff))\n );\n color: var(\n --xapps-paywall-danger-text,\n color-mix(in srgb, var(--xapps-danger, #dc2626) 72%, var(--xapps-text-primary, #991b1b))\n );\n}\n.xapps-xms-plans__surface-action[disabled] {\n cursor: not-allowed;\n opacity: 0.6;\n box-shadow: none;\n}\n.xapps-xms-plans__empty {\n color: var(--xapps-text-secondary, #64748b);\n font-size: 14px;\n}\n.xapps-xms-plans__timeline {\n display: grid;\n gap: 10px;\n}\n.xapps-xms-plans__timeline-item {\n display: grid;\n gap: 5px;\n padding: 12px 14px;\n border-radius: 14px;\n border: 1px solid color-mix(in srgb, var(--xapps-border-color, rgba(148, 163, 184, 0.18)) 86%, transparent);\n background: color-mix(in srgb, var(--xapps-surface-bg, #ffffff) 95%, var(--xapps-surface-subtle, #f8fafc));\n}\n.xapps-xms-plans__timeline-top {\n display: flex;\n align-items: flex-start;\n justify-content: space-between;\n gap: 12px;\n}\n.xapps-xms-plans__timeline-title {\n color: var(--xapps-text-primary, #0f172a);\n font-size: 13px;\n font-weight: 700;\n}\n.xapps-xms-plans__timeline-when {\n color: var(--xapps-text-secondary, #64748b);\n font-size: 12px;\n white-space: nowrap;\n}\n.xapps-xms-plans__timeline-meta {\n color: #64748b;\n font-size: 12px;\n line-height: 1.5;\n}\n.xapps-xms-plans__history-grid {\n display: grid;\n gap: 12px;\n}\n.xapps-xms-plans__history-section {\n display: grid;\n gap: 10px;\n padding: 14px;\n border-radius: 16px;\n border: 1px solid rgba(148, 163, 184, 0.18);\n background: rgba(255,255,255,0.92);\n}\n.xapps-xms-plans__history-head {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 12px;\n}\n.xapps-xms-plans__history-title {\n margin: 0;\n font: 700 0.92rem/1.1\n var(--xapps-display-font, var(--mx-display-font, var(--mx-font-family, \"Inter\", \"Segoe UI\", system-ui, -apple-system, sans-serif)));\n}\n.xapps-xms-plans__history-count {\n color: #64748b;\n font-size: 12px;\n font-weight: 700;\n}\n.xapps-xms-plans__history-list {\n display: grid;\n gap: 9px;\n}\n.xapps-xms-plans__history-item {\n display: grid;\n gap: 4px;\n}\n.xapps-xms-plans__history-item-head {\n display: flex;\n gap: 10px;\n justify-content: space-between;\n align-items: flex-start;\n}\n.xapps-xms-plans__history-item-title {\n color: #0f172a;\n font-size: 13px;\n font-weight: 700;\n}\n.xapps-xms-plans__history-item-status {\n color: #1d4ed8;\n font-size: 12px;\n font-weight: 700;\n text-transform: uppercase;\n letter-spacing: 0.02em;\n}\n.xapps-xms-plans__history-item-meta {\n color: #64748b;\n font-size: 12px;\n line-height: 1.5;\n}\n`;\n\nexport function buildMonetizationPaywallHtml(\n input: unknown,\n options: {\n actionLabel?: unknown;\n selectedPackageId?: unknown;\n showSummary?: boolean;\n showSignals?: boolean;\n showBadges?: boolean;\n interactive?: boolean;\n emptyLabel?: unknown;\n themeTokens?: unknown;\n compact?: boolean;\n emphasis?: \"default\" | \"soft\" | \"strong\" | unknown;\n } = {},\n): string {\n const renderModel = buildMonetizationPaywallRenderModel(input);\n const surfaceCopy = buildXmsSurfaceCopy();\n const actionLabel = readString(options.actionLabel) || surfaceCopy.choosePackageActionLabel;\n const selectedPackageId = readString(options.selectedPackageId);\n const showSummary = options.showSummary !== false;\n const showSignals = options.showSignals !== false;\n const showBadges = options.showBadges !== false;\n const interactive = options.interactive !== false;\n const emptyLabel = readString(options.emptyLabel) || surfaceCopy.noPaywallPackagesLabel;\n const themeStyle = buildPaywallThemeStyle({\n themeTokens: options.themeTokens,\n compact: options.compact === true,\n emphasis: options.emphasis,\n });\n\n const packagesHtml = renderModel.packages.length\n ? renderModel.packages\n .map((item) => {\n const classes = [\n \"xapps-paywall__package\",\n item.isDefault ? \"is-default\" : \"\",\n selectedPackageId && item.packageId === selectedPackageId ? \"is-selected\" : \"\",\n ]\n .filter(Boolean)\n .join(\" \");\n const signalHtml =\n showSignals && item.signals.length\n ? `<div class=\"xapps-paywall__signals\">${item.signals\n .map(\n (signal) => `<span class=\"xapps-paywall__signal\">${escapeHtml(signal)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\";\n const defaultBadge = item.isDefault\n ? `<span class=\"xapps-paywall__badge\">${escapeHtml(surfaceCopy.defaultBadgeLabel)}</span>`\n : \"\";\n const buttonAttrs = interactive\n ? ` type=\"button\" data-package-id=\"${escapeHtml(item.packageId)}\" data-package-slug=\"${escapeHtml(\n item.packageSlug,\n )}\"`\n : ` type=\"button\" disabled`;\n return `\n <div class=\"${classes}\">\n <div class=\"xapps-paywall__package-head\">\n <div>\n <h4 class=\"xapps-paywall__package-title\">${escapeHtml(item.packageTitle)}</h4>\n <div class=\"xapps-paywall__desc\">${escapeHtml(item.description)}</div>\n </div>\n <div class=\"xapps-paywall__money\">${escapeHtml(item.moneyLabel)}</div>\n </div>\n <div class=\"xapps-paywall__badges\">\n <span class=\"xapps-paywall__badge\">${escapeHtml(item.fitLabel)}</span>\n <span class=\"xapps-paywall__badge\">${escapeHtml(item.offeringLabel)}</span>\n ${defaultBadge}\n </div>\n ${signalHtml}\n <button class=\"xapps-paywall__action\"${buttonAttrs}>${escapeHtml(actionLabel)}</button>\n </div>\n `;\n })\n .join(\"\")\n : `<div class=\"xapps-paywall__empty\">${escapeHtml(emptyLabel)}</div>`;\n\n const badgesHtml =\n showBadges && renderModel.badges.length\n ? `<div class=\"xapps-paywall__badges\">${renderModel.badges\n .map((badge) => `<span class=\"xapps-paywall__badge\">${escapeHtml(badge)}</span>`)\n .join(\"\")}</div>`\n : \"\";\n\n return `\n <section class=\"xapps-paywall${options.compact ? \" is-compact\" : \"\"}\"${\n themeStyle ? ` style=\"${themeStyle}\"` : \"\"\n }>\n <div class=\"xapps-paywall__head\">\n <h3 class=\"xapps-paywall__title\">${escapeHtml(renderModel.paywallLabel)}</h3>\n ${\n showSummary\n ? `<div class=\"xapps-paywall__summary\">${escapeHtml(renderModel.summary)}</div>`\n : \"\"\n }\n </div>\n ${badgesHtml}\n <div class=\"xapps-paywall__packages\">${packagesHtml}</div>\n </section>\n `;\n}\n\nexport function renderMonetizationPaywall(\n root: Element,\n input: unknown,\n options: {\n actionLabel?: unknown;\n selectedPackageId?: unknown;\n showSummary?: boolean;\n showSignals?: boolean;\n showBadges?: boolean;\n interactive?: boolean;\n emptyLabel?: unknown;\n themeTokens?: unknown;\n compact?: boolean;\n emphasis?: \"default\" | \"soft\" | \"strong\" | unknown;\n onSelectPackage?: ((input: { packageId: string; packageSlug: string }) => void) | null;\n } = {},\n): { destroy: () => void } {\n root.innerHTML = buildMonetizationPaywallHtml(input, options);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>(\".xapps-paywall__action\"));\n const listeners: Array<() => void> = [];\n const onSelectPackage =\n typeof options.onSelectPackage === \"function\" ? options.onSelectPackage : null;\n\n if (onSelectPackage) {\n for (const button of buttons) {\n const handler = () => {\n onSelectPackage({\n packageId: readString(button.dataset.packageId),\n packageSlug: readString(button.dataset.packageSlug),\n });\n };\n button.addEventListener(\"click\", handler);\n listeners.push(() => button.removeEventListener(\"click\", handler));\n }\n }\n\n return {\n destroy() {\n for (const cleanup of listeners) cleanup();\n root.innerHTML = \"\";\n },\n };\n}\n\nfunction formatPlansDateTime(value: unknown, locale = \"en\"): string {\n const raw = readString(value);\n if (!raw) return \"\";\n const parsed = new Date(raw);\n if (Number.isNaN(parsed.getTime())) return raw;\n try {\n return parsed.toLocaleString(locale || undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n } catch {\n return parsed.toISOString();\n }\n}\n\nfunction readActiveAdditiveEntitlements(items: unknown): Array<Record<string, unknown>> {\n return (Array.isArray(items) ? items : [])\n .map((item) => readRecord(item))\n .filter((item): item is Record<string, unknown> => Boolean(item))\n .filter((item) => hasCurrentOwnedEntitlement(item));\n}\n\nfunction buildMonetizationPackageLabelResolver(\n items: Array<Record<string, unknown>>,\n): (value: unknown) => string {\n const labels = new Map<string, string>();\n for (const item of items) {\n const productMetadata =\n item.productMetadata && typeof item.productMetadata === \"object\"\n ? (item.productMetadata as Record<string, unknown>)\n : {};\n const label =\n readString(item.packageTitle) ||\n readString(item.productTitle) ||\n readString(item.productSlug);\n if (!label) continue;\n for (const candidate of [\n item.packageSlug,\n item.productSlug,\n productMetadata.access_tier,\n item.packageId,\n item.productId,\n ]) {\n const key = readLower(candidate);\n if (key && !labels.has(key)) labels.set(key, label);\n }\n }\n return (value: unknown) => labels.get(readLower(value)) || \"\";\n}\n\nfunction formatResolvedAdditiveEntitlementLabels(\n items: Array<Record<string, unknown>>,\n resolveLabel: (value: unknown) => string,\n): string[] {\n const labels = new Map<string, string>();\n for (const item of items) {\n const label =\n resolveLabel(item.product_slug) ||\n resolveLabel(item.tier) ||\n readString(item.product_slug) ||\n readString(item.tier);\n if (!label) continue;\n const identity =\n readString(item.product_id) || readString(item.product_slug) || readString(item.id) || label;\n if (!labels.has(identity)) labels.set(identity, label);\n }\n return Array.from(labels.values());\n}\n\nfunction buildPlansActionLabel(input: {\n locale?: unknown;\n policy: {\n canPurchase: boolean;\n status: \"available\" | \"current_recurring_plan\" | \"owned_additive_unlock\";\n transitionKind:\n | \"start_recurring\"\n | \"replace_recurring\"\n | \"buy_additive_unlock\"\n | \"buy_credit_pack\"\n | \"activate_hybrid\"\n | \"none\";\n reason: string | null;\n };\n busy: boolean;\n}): string {\n const copy = buildXmsPackageCopy(input.locale);\n if (input.policy.status === \"owned_additive_unlock\") return copy.ownedUnlockActiveLabel;\n if (input.policy.status === \"current_recurring_plan\") return copy.currentPlanActiveLabel;\n if (input.busy) return copy.startingCheckoutLabel;\n if (input.policy.transitionKind === \"buy_additive_unlock\") return copy.purchaseAddOnUnlockLabel;\n return copy.continueToCheckoutLabel;\n}\n\nfunction readHistoryBucket(\n history: Record<string, unknown> | null,\n key: string,\n): { total: number; items: Array<Record<string, unknown>> } {\n const bucketSource = history ? history[key] : undefined;\n const bucket = readRecord(bucketSource);\n const bucketItems = bucket ? bucket.items : undefined;\n const items = (Array.isArray(bucketItems) ? bucketItems : [])\n .map((item) => readRecord(item))\n .filter((item): item is Record<string, unknown> => Boolean(item));\n return {\n total: readNumber(bucket?.total, items.length),\n items,\n };\n}\n\nfunction formatBalanceQuantity(value: number): string {\n if (!Number.isFinite(value)) return \"\";\n const normalized = Math.round(value * 10000) / 10000;\n if (Number.isInteger(normalized)) return String(normalized);\n return normalized.toFixed(4).replace(/\\.?0+$/, \"\");\n}\n\nexport function summarizeVirtualCurrencyBalances(input: unknown): {\n balances: Array<{\n key: string;\n label: string;\n amount: string;\n amountLabel: string;\n accountCount: number;\n hasNamedCurrency: boolean;\n }>;\n totalAccounts: number;\n totalCurrencies: number;\n totalNamedCurrencies: number;\n} {\n const record = readRecord(input) ?? {};\n const history = readRecord(record.history) ?? record;\n const walletAccounts = readHistoryBucket(history, \"wallet_accounts\").items;\n const accessSnapshots = readHistoryBucket(history, \"access_snapshots\").items;\n const aggregates = new Map<\n string,\n {\n label: string;\n amount: number;\n accountCount: number;\n virtualCurrency: unknown;\n fallbackUnit: string;\n }\n >();\n\n const upsertBalance = (inputValue: {\n amount: unknown;\n virtualCurrency?: unknown;\n fallbackUnit?: unknown;\n fallbackKey?: unknown;\n }) => {\n const amount = readNumber(inputValue.amount, Number.NaN);\n if (!Number.isFinite(amount) || Math.abs(amount) < 0.0000001) return;\n const label =\n formatVirtualCurrencyLabel(inputValue.virtualCurrency, {\n includeCode: true,\n }) ||\n readString(inputValue.fallbackUnit) ||\n readString(inputValue.fallbackKey) ||\n \"Balance\";\n const key =\n formatVirtualCurrencyLabel(inputValue.virtualCurrency, {\n preferCode: true,\n }) ||\n readString(inputValue.fallbackKey) ||\n label.toLowerCase();\n const existing = aggregates.get(key);\n if (existing) {\n existing.amount += amount;\n existing.accountCount += 1;\n return;\n }\n aggregates.set(key, {\n label,\n amount,\n accountCount: 1,\n virtualCurrency: inputValue.virtualCurrency ?? null,\n fallbackUnit: readString(inputValue.fallbackUnit),\n });\n };\n\n for (const item of walletAccounts) {\n upsertBalance({\n amount: item.balance_remaining,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: \"credits\",\n fallbackKey: item.product_slug || item.id,\n });\n }\n\n if (aggregates.size === 0 && accessSnapshots.length > 0) {\n for (const item of accessSnapshots) {\n upsertBalance({\n amount: item.credits_remaining,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: \"credits\",\n fallbackKey: item.tier || item.id,\n });\n }\n }\n\n const balances = Array.from(aggregates.entries())\n .map(([key, item]) => {\n const amount = formatBalanceQuantity(item.amount);\n return {\n key,\n label: item.label,\n amount,\n amountLabel:\n formatVirtualCurrencyAmountLabel({\n amount,\n virtualCurrency: item.virtualCurrency,\n fallbackUnit: item.fallbackUnit,\n }) || amount,\n accountCount: item.accountCount,\n hasNamedCurrency: hasNamedVirtualCurrency(item.virtualCurrency),\n };\n })\n .sort((left, right) => {\n const amountDiff = readNumber(right.amount) - readNumber(left.amount);\n if (Math.abs(amountDiff) > 0.0000001) return amountDiff > 0 ? 1 : -1;\n return left.label.localeCompare(right.label);\n });\n\n return {\n balances,\n totalAccounts: walletAccounts.length,\n totalCurrencies: balances.length,\n totalNamedCurrencies: balances.filter((item) => item.hasNamedCurrency).length,\n };\n}\n\nfunction readHistoryTitle(item: Record<string, unknown>, keys: string[], fallback: string): string {\n for (const key of keys) {\n const segments = key.split(\".\");\n let current: unknown = item;\n for (const segment of segments) {\n const record = readRecord(current);\n current = record ? record[segment] : undefined;\n }\n if (key.startsWith(\"virtual_currency.\")) {\n const value = formatVirtualCurrencyLabel(item.virtual_currency ?? current, {\n includeCode: true,\n });\n if (value) return value;\n }\n const value = readString(current);\n if (value) return value;\n }\n return fallback;\n}\n\nfunction readHistoryMeta(item: Record<string, unknown>, keys: string[], locale: string): string[] {\n const out: string[] = [];\n for (const key of keys) {\n const segments = key.split(\".\");\n let current: unknown = item;\n for (const segment of segments) {\n const record = readRecord(current);\n current = record ? record[segment] : undefined;\n }\n const value =\n key === \"settlement_effect_detail\"\n ? formatSettlementEffectDetailLabel(item.settlement_effect, current, locale)\n : key === \"balance_remaining\"\n ? formatVirtualCurrencyAmountLabel({\n amount: current,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: readString(item.currency),\n })\n : key === \"amount\"\n ? formatVirtualCurrencyAmountLabel({\n amount: current,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: readString(item.currency),\n })\n : key === \"credits_remaining\"\n ? formatVirtualCurrencyAmountLabel({\n amount: current,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: \"credits\",\n })\n : key.endsWith(\"_at\")\n ? formatPlansDateTime(current, locale)\n : readString(current);\n if (value) out.push(formatStateLabel(value, value));\n }\n return out;\n}\n\nfunction formatTimelineBucketLabel(value: unknown, locale: string): string {\n const normalized = readLower(value);\n const copy = buildXmsSurfaceCopy({ locale });\n if (!normalized) return copy.historyGenericLabel;\n if (normalized === \"purchase_intents\") return copy.historyPurchaseIntentLabel;\n if (normalized === \"transactions\") return copy.historyTransactionLabel;\n if (normalized === \"subscriptions\") return copy.historySubscriptionContractLabel;\n if (normalized === \"entitlements\") return copy.historyEntitlementLabel;\n if (normalized === \"wallet_ledger\") return copy.historyWalletLedgerTitle;\n if (normalized === \"access_snapshots\") return copy.historyAccessSnapshotLabel;\n if (normalized === \"invoices\") return copy.historyInvoiceLabel;\n return formatStateLabel(normalized, normalized);\n}\n\nfunction formatSettlementEffectDetailLabel(\n effect: unknown,\n detail: unknown,\n locale: string,\n): string | null {\n const rawDetail = readString(detail);\n if (!rawDetail) return null;\n const normalizedEffect = readLower(effect);\n const normalizedDetail = readLower(detail);\n const copy = buildXmsSurfaceCopy({ locale });\n if (normalizedEffect === \"transaction_chargeback\") {\n if (normalizedDetail === \"warning_needs_response\") {\n return copy.historySettlementDetailDisputeWarningNeedsResponse;\n }\n if (normalizedDetail === \"warning_under_review\") {\n return copy.historySettlementDetailDisputeWarningUnderReview;\n }\n if (normalizedDetail === \"warning_closed\") {\n return copy.historySettlementDetailDisputeWarningClosed;\n }\n if (normalizedDetail === \"needs_response\") {\n return copy.historySettlementDetailDisputeNeedsResponse;\n }\n if (normalizedDetail === \"under_review\") {\n return copy.historySettlementDetailDisputeUnderReview;\n }\n if (normalizedDetail === \"won\") {\n return copy.historySettlementDetailDisputeWon;\n }\n if (normalizedDetail === \"lost\") {\n return copy.historySettlementDetailDisputeLost;\n }\n return normalizedDetail.replace(/_/g, \" \");\n }\n return rawDetail;\n}\n\nfunction buildTimelineHtml(input: {\n total: number;\n items: Array<Record<string, unknown>>;\n locale: string;\n}): string {\n if (!input.total) return \"\";\n const items = [...input.items].sort((left, right) => {\n const leftAt = Date.parse(readString(left.occurred_at));\n const rightAt = Date.parse(readString(right.occurred_at));\n if (Number.isFinite(leftAt) && Number.isFinite(rightAt) && leftAt !== rightAt) {\n return rightAt - leftAt;\n }\n return readString(right.id).localeCompare(readString(left.id));\n });\n return `\n <div class=\"xapps-xms-plans__timeline\">\n ${items\n .map((item) => {\n const title =\n readString(item.title) ||\n readString(item.id) ||\n formatTimelineBucketLabel(item.bucket, input.locale);\n const when = formatPlansDateTime(item.occurred_at, input.locale);\n const meta = [\n formatTimelineBucketLabel(item.bucket, input.locale),\n readString(item.status) ? formatStateLabel(item.status, readString(item.status)) : \"\",\n readString(item.settlement_effect)\n ? formatStateLabel(item.settlement_effect, readString(item.settlement_effect))\n : \"\",\n formatSettlementEffectDetailLabel(\n item.settlement_effect,\n item.settlement_effect_detail,\n input.locale,\n ),\n readString(item.scope),\n readString(item.correlation),\n formatVirtualCurrencyAmountLabel({\n amount: item.amount,\n virtualCurrency: item.virtual_currency,\n fallbackUnit: readString(item.currency),\n }),\n readString(item.note),\n ].filter(Boolean);\n return `\n <div class=\"xapps-xms-plans__timeline-item\">\n <div class=\"xapps-xms-plans__timeline-top\">\n <div class=\"xapps-xms-plans__timeline-title\">${escapeHtml(title)}</div>\n ${when ? `<div class=\"xapps-xms-plans__timeline-when\">${escapeHtml(when)}</div>` : \"\"}\n </div>\n ${\n meta.length\n ? `<div class=\"xapps-xms-plans__timeline-meta\">${escapeHtml(meta.join(\" \u2022 \"))}</div>`\n : \"\"\n }\n </div>\n `;\n })\n .join(\"\")}\n </div>\n `;\n}\n\nfunction buildHistorySectionHtml(input: {\n title: string;\n total: number;\n items: Array<Record<string, unknown>>;\n locale: string;\n itemTitleKeys: string[];\n itemFallbackTitle: string;\n itemStatusKeys?: string[];\n itemMetaKeys: string[];\n}): string {\n if (!input.total) return \"\";\n return `\n <section class=\"xapps-xms-plans__history-section\">\n <div class=\"xapps-xms-plans__history-head\">\n <h5 class=\"xapps-xms-plans__history-title\">${escapeHtml(input.title)}</h5>\n <span class=\"xapps-xms-plans__history-count\">${escapeHtml(String(input.total))}</span>\n </div>\n <div class=\"xapps-xms-plans__history-list\">\n ${input.items\n .map((item) => {\n const title = readHistoryTitle(item, input.itemTitleKeys, input.itemFallbackTitle);\n const statusKeys = input.itemStatusKeys || [];\n const status = statusKeys.map((key) => readString(item[key])).find(Boolean);\n const meta = readHistoryMeta(item, input.itemMetaKeys, input.locale);\n return `\n <div class=\"xapps-xms-plans__history-item\">\n <div class=\"xapps-xms-plans__history-item-head\">\n <div class=\"xapps-xms-plans__history-item-title\">${escapeHtml(title)}</div>\n ${\n status\n ? `<div class=\"xapps-xms-plans__history-item-status\">${escapeHtml(\n formatStateLabel(status, status),\n )}</div>`\n : \"\"\n }\n </div>\n ${\n meta.length\n ? `<div class=\"xapps-xms-plans__history-item-meta\">${escapeHtml(\n meta.join(\" \u2022 \"),\n )}</div>`\n : \"\"\n }\n </div>\n `;\n })\n .join(\"\")}\n </div>\n </section>\n `;\n}\n\nfunction buildMonetizationHistorySections(input: {\n history: Record<string, unknown> | null;\n locale: string;\n}): string[] {\n const { history, locale } = input;\n const copy = buildXmsSurfaceCopy({ locale });\n return [\n buildHistorySectionHtml({\n title: copy.historySubscriptionsTitle,\n total: readHistoryBucket(history, \"subscriptions\").total,\n items: readHistoryBucket(history, \"subscriptions\").items,\n locale,\n itemTitleKeys: [\"tier\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historySubscriptionContractLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"billing_period\", \"renews_at\", \"expired_at\", \"cancelled_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyEntitlementsTitle,\n total: readHistoryBucket(history, \"entitlements\").total,\n items: readHistoryBucket(history, \"entitlements\").items,\n locale,\n itemTitleKeys: [\"tier\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyEntitlementLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"source_kind\", \"starts_at\", \"expires_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyWalletAccountsTitle,\n total: readHistoryBucket(history, \"wallet_accounts\").total,\n items: readHistoryBucket(history, \"wallet_accounts\").items,\n locale,\n itemTitleKeys: [\"virtual_currency.code\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyWalletAccountLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"balance_remaining\", \"updated_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyWalletLedgerTitle,\n total: readHistoryBucket(history, \"wallet_ledger\").total,\n items: readHistoryBucket(history, \"wallet_ledger\").items,\n locale,\n itemTitleKeys: [\"event_kind\", \"virtual_currency.code\", \"wallet_product_slug\", \"id\"],\n itemFallbackTitle: copy.historyWalletLedgerEntryLabel,\n itemStatusKeys: [],\n itemMetaKeys: [\"amount\", \"settlement_effect\", \"source_kind\", \"occurred_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyTransactionsTitle,\n total: readHistoryBucket(history, \"transactions\").total,\n items: readHistoryBucket(history, \"transactions\").items,\n locale,\n itemTitleKeys: [\"package_slug\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyTransactionLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\n \"amount\",\n \"currency\",\n \"settlement_effect\",\n \"payment_session_id\",\n \"occurred_at\",\n ],\n }),\n buildHistorySectionHtml({\n title: copy.historyPurchaseIntentsTitle,\n total: readHistoryBucket(history, \"purchase_intents\").total,\n items: readHistoryBucket(history, \"purchase_intents\").items,\n locale,\n itemTitleKeys: [\"package_slug\", \"product_slug\", \"id\"],\n itemFallbackTitle: copy.historyPurchaseIntentLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\"amount\", \"currency\", \"payment_lane\", \"updated_at\"],\n }),\n buildHistorySectionHtml({\n title: copy.historyInvoicesTitle,\n total: readHistoryBucket(history, \"invoices\").total,\n items: readHistoryBucket(history, \"invoices\").items,\n locale,\n itemTitleKeys: [\"invoice_identifier\", \"id\"],\n itemFallbackTitle: copy.historyInvoiceLabel,\n itemStatusKeys: [\"status\"],\n itemMetaKeys: [\n \"settlement_effect\",\n \"settlement_effect_detail\",\n \"provider_key\",\n \"owner_scope\",\n \"created_at\",\n ],\n }),\n buildHistorySectionHtml({\n title: copy.historyAccessSnapshotsTitle,\n total: readHistoryBucket(history, \"access_snapshots\").total,\n items: readHistoryBucket(history, \"access_snapshots\").items,\n locale,\n itemTitleKeys: [\"tier\", \"id\"],\n itemFallbackTitle: copy.historyAccessSnapshotLabel,\n itemStatusKeys: [\"entitlement_state\"],\n itemMetaKeys: [\"balance_state\", \"credits_remaining\", \"updated_at\"],\n }),\n ].filter(Boolean);\n}\n\nfunction buildMonetizationHistoryBalanceSummaryHtml(input: {\n history: Record<string, unknown> | null;\n locale: string;\n}): string {\n const { history, locale } = input;\n const copy = buildXmsSurfaceCopy({ locale });\n const summary = summarizeVirtualCurrencyBalances(history);\n if (!summary.balances.length) return \"\";\n const summaryTitle =\n summary.totalNamedCurrencies > 0\n ? copy.historyBalanceSummaryTitle\n : copy.historyCreditSummaryTitle;\n return `\n <section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(summaryTitle)}</h4>\n <div class=\"xapps-xms-plans__subtitle\">${escapeHtml(copy.historyBalanceSummarySubtitle)}</div>\n <div class=\"xapps-xms-plans__badges\">\n ${summary.balances\n .map(\n (item) => `<span class=\"xapps-xms-plans__badge\">${escapeHtml(item.amountLabel)}</span>`,\n )\n .join(\"\")}\n </div>\n </section>\n `;\n}\n\nexport type XmsSurfaceView = \"plans\" | \"history\";\n\nexport function buildXmsSurfaceShellTheme(input?: { themeTokens?: unknown }): {\n overlayBg: string;\n panelBg: string;\n panelBorder: string;\n panelRadius: string;\n panelShadow: string;\n headerBg: string;\n headerBorder: string;\n titleColor: string;\n subtitleColor: string;\n tabRailBg: string;\n tabRailBorder: string;\n tabActiveBg: string;\n tabActiveText: string;\n tabInactiveText: string;\n closeBg: string;\n closeBorder: string;\n closeText: string;\n bodyBg: string;\n} {\n const shell = buildModalShellTheme(input);\n return {\n overlayBg: shell.overlayBg,\n panelBg: shell.panelBg,\n panelBorder: shell.panelBorder,\n panelRadius: shell.panelRadius,\n panelShadow: shell.panelShadow,\n headerBg: shell.headerBg,\n headerBorder: shell.headerBorder,\n titleColor: shell.titleColor,\n subtitleColor: shell.subtitleColor,\n tabRailBg: \"rgba(226, 232, 240, 0.72)\",\n tabRailBorder: \"1px solid rgba(203, 213, 225, 0.92)\",\n tabActiveBg: shell.panelBg,\n tabActiveText: shell.titleColor,\n tabInactiveText: shell.subtitleColor,\n closeBg: shell.closeBg,\n closeBorder: shell.closeBorder,\n closeText: shell.closeText,\n bodyBg: shell.bodyBg,\n };\n}\n\nexport function buildXmsSurfaceShellLayout(): {\n overlayPadding: string;\n overlayBlur: string;\n panelWidth: string;\n panelMaxWidth: string;\n panelMaxHeight: string;\n panelGap: string;\n headerGap: string;\n headerPadding: string;\n bodyPadding: string;\n bodyMaxHeight: string;\n tabsGap: string;\n tabRailGap: string;\n tabRailPadding: string;\n tabPadding: string;\n tabRadius: string;\n titleFont: string;\n titleLetterSpacing: string;\n subtitleMarginTop: string;\n subtitleFont: string;\n tabFont: string;\n closeButtonSize: string;\n closeButtonRadius: string;\n closeButtonFont: string;\n closeButtonLineHeight: string;\n closeButtonShadow: string;\n} {\n const shell = buildModalShellLayout();\n return {\n overlayPadding: shell.overlayPadding,\n overlayBlur: shell.overlayBlur,\n panelWidth: shell.panelWidth,\n panelMaxWidth: shell.panelMaxWidth,\n panelMaxHeight: shell.panelMaxHeight,\n panelGap: shell.panelGap,\n headerGap: shell.headerGap,\n headerPadding: shell.headerPadding,\n bodyPadding: shell.bodyPadding,\n bodyMaxHeight: shell.bodyMaxHeight,\n tabsGap: \"10px\",\n tabRailGap: \"4px\",\n tabRailPadding: \"4px\",\n tabPadding: \"8px 12px\",\n tabRadius: \"999px\",\n titleFont: shell.titleFont,\n titleLetterSpacing: shell.titleLetterSpacing,\n subtitleMarginTop: shell.subtitleMarginTop,\n subtitleFont: shell.subtitleFont,\n tabFont: \"600 0.75rem system-ui,sans-serif\",\n closeButtonSize: shell.closeButtonSize,\n closeButtonRadius: shell.closeButtonRadius,\n closeButtonFont: shell.closeButtonFont,\n closeButtonLineHeight: shell.closeButtonLineHeight,\n closeButtonShadow: shell.closeButtonShadow,\n };\n}\n\nexport function resolveXmsSurfaceView(\n value: unknown,\n fallback: XmsSurfaceView = \"plans\",\n): XmsSurfaceView {\n const normalized = readLower(value);\n return normalized === \"history\" ? \"history\" : fallback;\n}\n\nexport function buildXmsSurfaceShellModel(input: {\n view?: unknown;\n locale?: unknown;\n plansTitle?: unknown;\n plansSubtitle?: unknown;\n historyTitle?: unknown;\n historySubtitle?: unknown;\n plansLabel?: unknown;\n historyLabel?: unknown;\n closeLabel?: unknown;\n}): {\n view: XmsSurfaceView;\n title: string;\n subtitle: string;\n closeLabel: string;\n tabs: Array<{ key: XmsSurfaceView; label: string; active: boolean }>;\n} {\n const view = resolveXmsSurfaceView(input.view);\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const plansTitle = readString(input.plansTitle) || copy.plansTitle;\n const historyTitle = readString(input.historyTitle) || copy.historyTitle;\n const plansSubtitle = readString(input.plansSubtitle) || copy.plansSubtitle;\n const historySubtitle = readString(input.historySubtitle) || copy.historySubtitle;\n const plansLabel = readString(input.plansLabel) || copy.plansLabel;\n const historyLabel = readString(input.historyLabel) || copy.historyLabel;\n const closeLabel = readString(input.closeLabel) || copy.closeLabel;\n return {\n view,\n title: view === \"history\" ? historyTitle : plansTitle,\n subtitle: view === \"history\" ? historySubtitle : plansSubtitle,\n closeLabel,\n tabs: [\n { key: \"plans\", label: plansLabel, active: view === \"plans\" },\n { key: \"history\", label: historyLabel, active: view === \"history\" },\n ],\n };\n}\n\nexport function buildMonetizationPlansSurfaceHtml(\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n selectedPackageSlug?: unknown;\n busyPackageSlug?: unknown;\n busyAction?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n interactive?: boolean;\n subscriptionInteractive?: boolean;\n showOperatorManagement?: boolean;\n onRefreshSubscription?: (() => void) | null;\n onCancelSubscription?: (() => void) | null;\n } = {},\n): string {\n const record = readRecord(input) ?? {};\n const accessProjection = readRecord(record.accessProjection ?? record.access_projection);\n const currentSubscription = readRecord(record.currentSubscription ?? record.current_subscription);\n const additiveEntitlements = readActiveAdditiveEntitlements(\n record.additiveEntitlements ?? record.additive_entitlements,\n );\n const paywall = readRecord(record.paywall) ?? record;\n const locale = readString(options.locale) || \"en\";\n const renderModel = buildMonetizationPaywallRenderModel(paywall);\n const packageRecords = flattenXappMonetizationPaywallPackages(paywall);\n const resolvePackageLabel = buildMonetizationPackageLabelResolver(packageRecords);\n const packageRecordBySlug = new Map(\n packageRecords.map((item) => [readLower(item.packageSlug), item]),\n );\n const selectedPackageSlug = readLower(options.selectedPackageSlug);\n const busyPackageSlug = readLower(options.busyPackageSlug);\n const busyAction = readLower(options.busyAction);\n const includeStyles = options.includeStyles !== false;\n const showHeader = options.showHeader !== false;\n const packageCopy = buildXmsPackageCopy(locale);\n const surfaceCopy = buildXmsSurfaceCopy({ locale });\n const lifecycle = buildXmsSubscriptionLifecycleSummary({\n currentSubscription,\n locale,\n });\n const lifecycleInteractive =\n typeof options.subscriptionInteractive === \"boolean\"\n ? options.subscriptionInteractive\n : options.interactive !== false;\n const showOperatorManagement = options.showOperatorManagement === true;\n const operatorAuthority = showOperatorManagement\n ? resolveSubscriptionOperatorAuthorityLabel({\n currentSubscription,\n locale,\n })\n : \"\";\n const managementDestination = showOperatorManagement\n ? resolveSubscriptionManagementDestinationLabel({\n currentSubscription,\n locale,\n })\n : \"\";\n const managementDestinationHref = showOperatorManagement\n ? resolveSubscriptionManagementDestinationHref({\n currentSubscription,\n })\n : \"\";\n const managementDestinationHint = showOperatorManagement\n ? resolveSubscriptionManagementDestinationHint({\n currentSubscription,\n locale,\n })\n : \"\";\n const hasRefreshSubscriptionAction =\n lifecycleInteractive &&\n typeof options.onRefreshSubscription === \"function\" &&\n readSubscriptionActionAvailability({\n currentSubscription,\n actionKey: \"refresh_status\",\n fallback: true,\n });\n const hasCancelSubscriptionAction =\n lifecycleInteractive &&\n lifecycle.canCancel &&\n typeof options.onCancelSubscription === \"function\" &&\n readSubscriptionActionAvailability({\n currentSubscription,\n actionKey: \"cancel_subscription\",\n fallback: true,\n });\n const currentTier = readString(currentSubscription?.tier) || readString(accessProjection?.tier);\n const currentTierLabel = resolvePackageLabel(currentTier) || currentTier;\n const accessState = formatCoverageLabel({ accessProjection, currentSubscription, locale });\n const creditsRemaining = readString(accessProjection?.credits_remaining);\n const accessVirtualCurrency = readVirtualCurrencyDefinition(accessProjection?.virtual_currency);\n const hasNamedAccessCurrency = Boolean(accessVirtualCurrency);\n const additiveUnlocks = formatResolvedAdditiveEntitlementLabels(\n additiveEntitlements,\n resolvePackageLabel,\n );\n const accessRows = [\n currentTierLabel ? [surfaceCopy.currentPlanLabel, currentTierLabel] : null,\n accessState ? [surfaceCopy.membershipAccessLabel, accessState] : null,\n lifecycle.statusLabel ? [surfaceCopy.subscriptionStatusLabel, lifecycle.statusLabel] : null,\n lifecycle.coverageLabel\n ? [surfaceCopy.subscriptionCoverageLabel, lifecycle.coverageLabel]\n : null,\n lifecycle.reasonLabel ? [surfaceCopy.subscriptionReasonLabel, lifecycle.reasonLabel] : null,\n lifecycle.overdueSince\n ? [surfaceCopy.overdueSinceLabel, formatPlansDateTime(lifecycle.overdueSince, locale)]\n : null,\n lifecycle.expiryBoundaryAt\n ? [surfaceCopy.expiryBoundaryLabel, formatPlansDateTime(lifecycle.expiryBoundaryAt, locale)]\n : null,\n lifecycle.renewsAt\n ? [surfaceCopy.renewsAtLabel, formatPlansDateTime(lifecycle.renewsAt, locale)]\n : null,\n lifecycle.currentPeriodEndsAt\n ? [\n surfaceCopy.currentPeriodEndsLabel,\n formatPlansDateTime(lifecycle.currentPeriodEndsAt, locale),\n ]\n : null,\n lifecycle.cancelledAt\n ? [surfaceCopy.cancelledAtLabel, formatPlansDateTime(lifecycle.cancelledAt, locale)]\n : null,\n lifecycle.expiresAt\n ? [surfaceCopy.expiresAtLabel, formatPlansDateTime(lifecycle.expiresAt, locale)]\n : null,\n operatorAuthority ? [surfaceCopy.operatorAuthorityLabel, operatorAuthority] : null,\n managementDestination ? [surfaceCopy.managementDestinationLabel, managementDestination] : null,\n accessVirtualCurrency\n ? [\n surfaceCopy.virtualCurrencyLabel,\n formatVirtualCurrencyLabel(accessVirtualCurrency, { includeCode: true }),\n ]\n : null,\n creditsRemaining\n ? [\n hasNamedAccessCurrency\n ? surfaceCopy.creditsRemainingLabel\n : surfaceCopy.creditBalanceLabel,\n formatVirtualCurrencyAmountLabel({\n amount: creditsRemaining,\n virtualCurrency: accessVirtualCurrency,\n fallbackUnit: \"credits\",\n }),\n ]\n : null,\n ].filter((item): item is [string, string] => Boolean(item));\n const lifecycleActionsHtml =\n lifecycle.present && (hasRefreshSubscriptionAction || hasCancelSubscriptionAction)\n ? `<div class=\"xapps-xms-plans__surface-actions\">\n ${\n hasRefreshSubscriptionAction\n ? `<button\n type=\"button\"\n class=\"xapps-xms-plans__surface-action\"\n data-subscription-action=\"refresh\"\n ${busyAction ? \"disabled\" : \"\"}\n >${escapeHtml(\n busyAction === \"refresh\"\n ? surfaceCopy.refreshingStatusActionLabel\n : surfaceCopy.refreshStatusActionLabel,\n )}</button>`\n : \"\"\n }\n ${\n hasCancelSubscriptionAction\n ? `<button\n type=\"button\"\n class=\"xapps-xms-plans__surface-action\"\n data-subscription-action=\"cancel\"\n data-variant=\"danger\"\n ${busyAction ? \"disabled\" : \"\"}\n >${escapeHtml(\n busyAction === \"cancel\"\n ? surfaceCopy.cancellingSubscriptionActionLabel\n : surfaceCopy.cancelSubscriptionActionLabel,\n )}</button>`\n : \"\"\n }\n ${\n managementDestinationHref\n ? `<a\n class=\"xapps-xms-plans__surface-action\"\n href=\"${escapeHtml(managementDestinationHref)}\"\n target=\"_top\"\n rel=\"noopener noreferrer\"\n >${escapeHtml(surfaceCopy.openManagementDestinationActionLabel)}</a>`\n : \"\"\n }\n </div>`\n : managementDestinationHref\n ? `<div class=\"xapps-xms-plans__surface-actions\">\n <a\n class=\"xapps-xms-plans__surface-action\"\n href=\"${escapeHtml(managementDestinationHref)}\"\n target=\"_top\"\n rel=\"noopener noreferrer\"\n >${escapeHtml(surfaceCopy.openManagementDestinationActionLabel)}</a>\n </div>`\n : \"\";\n\n const packagesHtml = renderModel.packages.length\n ? renderModel.packages\n .map((item) => {\n const packageRecord = packageRecordBySlug.get(readLower(item.packageSlug)) ?? item;\n const purchasePolicy = resolveMonetizationPackagePurchasePolicy({\n item: packageRecord,\n currentSubscription,\n additiveEntitlements,\n accessProjection,\n });\n const packageSignals = item.signals.filter(\n (signal) =>\n !(\n purchasePolicy.transitionKind === \"replace_recurring\" &&\n readLower(signal).includes(\"trial\")\n ),\n );\n const badges = [item.fitLabel];\n if (selectedPackageSlug && readLower(item.packageSlug) === selectedPackageSlug) {\n badges.push(packageCopy.selectedLabel);\n }\n if (purchasePolicy.status === \"owned_additive_unlock\") {\n badges.push(packageCopy.ownedUnlockLabel);\n } else if (purchasePolicy.status === \"current_recurring_plan\") {\n badges.push(packageCopy.currentPlanLabel);\n } else if (purchasePolicy.transitionKind === \"buy_additive_unlock\") {\n badges.push(packageCopy.addOnWithMembershipLabel);\n }\n if (item.isDefault) badges.push(packageCopy.defaultLabel);\n const interactive = options.interactive !== false;\n const disabled =\n !interactive ||\n !purchasePolicy.canPurchase ||\n (busyPackageSlug && busyPackageSlug !== readLower(item.packageSlug));\n return `\n <section class=\"xapps-xms-plans__package ${item.isDefault ? \"is-default\" : \"\"} ${\n selectedPackageSlug && readLower(item.packageSlug) === selectedPackageSlug\n ? \"is-selected\"\n : \"\"\n }\">\n <div class=\"xapps-xms-plans__package-head\">\n <div>\n <h4 class=\"xapps-xms-plans__package-title\">${escapeHtml(item.packageTitle)}</h4>\n <div class=\"xapps-xms-plans__package-description\">${escapeHtml(\n item.description,\n )}</div>\n </div>\n <div class=\"xapps-xms-plans__money\">${escapeHtml(item.moneyLabel)}</div>\n </div>\n <div class=\"xapps-xms-plans__badges\">\n ${badges\n .map(\n (badge) => `<span class=\"xapps-xms-plans__badge\">${escapeHtml(badge)}</span>`,\n )\n .join(\"\")}\n </div>\n ${\n packageSignals.length\n ? `<div class=\"xapps-xms-plans__signals\">${packageSignals\n .map(\n (signal) =>\n `<span class=\"xapps-xms-plans__signal\">${escapeHtml(signal)}</span>`,\n )\n .join(\"\")}</div>`\n : \"\"\n }\n <button\n class=\"xapps-xms-plans__action\"\n type=\"button\"\n data-package-id=\"${escapeHtml(item.packageId)}\"\n data-package-slug=\"${escapeHtml(item.packageSlug)}\"\n ${disabled ? \"disabled\" : \"\"}\n >${escapeHtml(\n buildPlansActionLabel({\n locale,\n policy: purchasePolicy,\n busy: busyPackageSlug === readLower(item.packageSlug),\n }),\n )}</button>\n </section>\n `;\n })\n .join(\"\")\n : `<div class=\"xapps-xms-plans__empty\">${escapeHtml(surfaceCopy.noPublishedPlansLabel)}</div>`;\n\n return `\n ${includeStyles ? `<style>${monetizationPlansSurfaceStyles}</style>` : \"\"}\n <section class=\"xapps-xms-plans\">\n ${\n showHeader\n ? `<div class=\"xapps-xms-plans__header\">\n <h3 class=\"xapps-xms-plans__title\">${escapeHtml(\n readString(options.title) || renderModel.paywallLabel || \"Plans\",\n )}</h3>\n ${\n readString(options.subtitle)\n ? `<div class=\"xapps-xms-plans__subtitle\">${escapeHtml(\n readString(options.subtitle),\n )}</div>`\n : \"\"\n }\n </div>`\n : \"\"\n }\n ${readString(options.notice) ? `<div class=\"xapps-xms-plans__notice\">${escapeHtml(readString(options.notice))}</div>` : \"\"}\n ${readString(options.error) ? `<div class=\"xapps-xms-plans__error\">${escapeHtml(readString(options.error))}</div>` : \"\"}\n ${\n accessRows.length || additiveUnlocks.length\n ? `<section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(surfaceCopy.currentCoverageTitle)}</h4>\n <div class=\"xapps-xms-plans__meta\">\n ${accessRows\n .map(\n ([label, value]) => `\n <div class=\"xapps-xms-plans__meta-row\">\n <span class=\"xapps-xms-plans__meta-label\">${escapeHtml(label)}</span>\n <span class=\"xapps-xms-plans__meta-value\">${escapeHtml(value)}</span>\n </div>`,\n )\n .join(\"\")}\n ${\n additiveUnlocks.length\n ? `<div class=\"xapps-xms-plans__meta-row\">\n <span class=\"xapps-xms-plans__meta-label\">${escapeHtml(surfaceCopy.addOnUnlocksLabel)}</span>\n <span class=\"xapps-xms-plans__meta-value\">\n <span class=\"xapps-xms-plans__stack\">${additiveUnlocks\n .map((label) => `<span>${escapeHtml(label)}</span>`)\n .join(\"\")}</span>\n </span>\n </div>`\n : \"\"\n }\n </div>\n ${\n managementDestinationHint\n ? `<div class=\"xapps-xms-plans__notice\">${escapeHtml(managementDestinationHint)}</div>`\n : \"\"\n }\n ${lifecycleActionsHtml}\n </section>`\n : \"\"\n }\n <section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(\n renderModel.paywallLabel || surfaceCopy.plansTitle,\n )}</h4>\n ${\n renderModel.summary\n ? `<div class=\"xapps-xms-plans__subtitle\">${escapeHtml(renderModel.summary)}</div>`\n : \"\"\n }\n <div class=\"xapps-xms-plans__packages\">${packagesHtml}</div>\n </section>\n </section>\n `;\n}\n\nexport function renderMonetizationPlansSurface(\n root: Element,\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n selectedPackageSlug?: unknown;\n busyPackageSlug?: unknown;\n busyAction?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n interactive?: boolean;\n subscriptionInteractive?: boolean;\n showOperatorManagement?: boolean;\n onCheckoutPackage?: ((input: { packageId: string; packageSlug: string }) => void) | null;\n onRefreshSubscription?: (() => void) | null;\n onCancelSubscription?: (() => void) | null;\n } = {},\n): { destroy: () => void } {\n root.innerHTML = buildMonetizationPlansSurfaceHtml(input, options);\n const buttons = Array.from(root.querySelectorAll<HTMLButtonElement>(\".xapps-xms-plans__action\"));\n const refreshButton = root.querySelector<HTMLButtonElement>(\n '[data-subscription-action=\"refresh\"]',\n );\n const cancelButton = root.querySelector<HTMLButtonElement>('[data-subscription-action=\"cancel\"]');\n const listeners: Array<() => void> = [];\n const onCheckoutPackage =\n typeof options.onCheckoutPackage === \"function\" ? options.onCheckoutPackage : null;\n const onRefreshSubscription =\n typeof options.onRefreshSubscription === \"function\" ? options.onRefreshSubscription : null;\n const onCancelSubscription =\n typeof options.onCancelSubscription === \"function\" ? options.onCancelSubscription : null;\n\n if (onCheckoutPackage) {\n for (const button of buttons) {\n if (button.disabled) continue;\n const handler = () => {\n onCheckoutPackage({\n packageId: readString(button.dataset.packageId),\n packageSlug: readString(button.dataset.packageSlug),\n });\n };\n button.addEventListener(\"click\", handler);\n listeners.push(() => button.removeEventListener(\"click\", handler));\n }\n }\n\n if (onRefreshSubscription && refreshButton && !refreshButton.disabled) {\n const handler = () => {\n onRefreshSubscription();\n };\n refreshButton.addEventListener(\"click\", handler);\n listeners.push(() => refreshButton.removeEventListener(\"click\", handler));\n }\n\n if (onCancelSubscription && cancelButton && !cancelButton.disabled) {\n const handler = () => {\n onCancelSubscription();\n };\n cancelButton.addEventListener(\"click\", handler);\n listeners.push(() => cancelButton.removeEventListener(\"click\", handler));\n }\n\n return {\n destroy() {\n for (const cleanup of listeners) cleanup();\n root.innerHTML = \"\";\n },\n };\n}\n\nexport function buildMonetizationHistorySurfaceHtml(\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n } = {},\n): string {\n const record = readRecord(input) ?? {};\n const history = readRecord(record.history) ?? record;\n const locale = readString(options.locale) || \"en\";\n const includeStyles = options.includeStyles !== false;\n const showHeader = options.showHeader !== false;\n const surfaceCopy = buildXmsSurfaceCopy({ locale });\n const historySections = buildMonetizationHistorySections({ history, locale });\n const balanceSummaryHtml = buildMonetizationHistoryBalanceSummaryHtml({ history, locale });\n const timeline = readHistoryBucket(history, \"timeline\");\n const hasHistory = Boolean(timeline.total || historySections.length || balanceSummaryHtml);\n\n return `\n ${includeStyles ? `<style>${monetizationPlansSurfaceStyles}</style>` : \"\"}\n <section class=\"xapps-xms-plans\">\n ${\n showHeader\n ? `<div class=\"xapps-xms-plans__header\">\n <h3 class=\"xapps-xms-plans__title\">${escapeHtml(\n readString(options.title) || surfaceCopy.historyTitle,\n )}</h3>\n ${\n readString(options.subtitle)\n ? `<div class=\"xapps-xms-plans__subtitle\">${escapeHtml(\n readString(options.subtitle),\n )}</div>`\n : \"\"\n }\n </div>`\n : \"\"\n }\n ${readString(options.notice) ? `<div class=\"xapps-xms-plans__notice\">${escapeHtml(readString(options.notice))}</div>` : \"\"}\n ${readString(options.error) ? `<div class=\"xapps-xms-plans__error\">${escapeHtml(readString(options.error))}</div>` : \"\"}\n ${balanceSummaryHtml}\n ${\n timeline.total\n ? `<section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(surfaceCopy.recentTimelineTitle)}</h4>\n <div class=\"xapps-xms-plans__subtitle\">${escapeHtml(surfaceCopy.recentTimelineSubtitle)}</div>\n ${buildTimelineHtml({\n total: timeline.total,\n items: timeline.items,\n locale,\n })}\n </section>`\n : \"\"\n }\n ${\n historySections.length\n ? `<section class=\"xapps-xms-plans__card\">\n <h4 class=\"xapps-xms-plans__section-title\">${escapeHtml(surfaceCopy.historyAuditTitle)}</h4>\n <div class=\"xapps-xms-plans__subtitle\">${escapeHtml(surfaceCopy.historyAuditSubtitle)}</div>\n <div class=\"xapps-xms-plans__history-grid\">${historySections.join(\"\")}</div>\n </section>`\n : \"\"\n }\n ${\n !hasHistory\n ? `<section class=\"xapps-xms-plans__card\">\n <div class=\"xapps-xms-plans__empty\">${escapeHtml(surfaceCopy.noHistoryAvailableLabel)}</div>\n </section>`\n : \"\"\n }\n </section>\n `;\n}\n\nexport function renderMonetizationHistorySurface(\n root: Element,\n input: unknown,\n options: {\n title?: unknown;\n subtitle?: unknown;\n locale?: unknown;\n notice?: unknown;\n error?: unknown;\n showHeader?: boolean;\n includeStyles?: boolean;\n } = {},\n): { destroy: () => void } {\n root.innerHTML = buildMonetizationHistorySurfaceHtml(input, options);\n return {\n destroy() {\n root.innerHTML = \"\";\n },\n };\n}\n\nexport function buildMonetizationPackagePresentation(input: unknown): {\n fitLabel: string;\n summary: string;\n signals: string[];\n moneyLabel: string;\n offeringLabel: string;\n placementLabel: string;\n offeringSummary: string;\n} {\n const item =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const copy = buildXmsPackageCopy(item.locale);\n const packageKind = readString(item.packageKind);\n const packageSlug = readLower(item.packageSlug);\n const metadata =\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {};\n const credits = readPackageCredits(item);\n const virtualCurrency =\n readVirtualCurrencyDefinition(item.virtualCurrency) ??\n readVirtualCurrencyDefinition(\n item.productMetadata && typeof item.productMetadata === \"object\"\n ? (item.productMetadata as Record<string, unknown>).virtual_currency\n : null,\n );\n const moneyLabel = normalizeMoneyLabel(item);\n const offeringPresentation = buildMonetizationOfferingPresentation(item);\n let fitLabel = copy.generalUpgradeFitLabel;\n let summary = copy.generalUpgradeSummary;\n\n if (packageKind === \"one_time_unlock\") {\n fitLabel = copy.durableUnlockFitLabel;\n summary = copy.durableUnlockSummary;\n } else if (packageKind === \"subscription\") {\n fitLabel = copy.recurringMembershipFitLabel;\n summary = copy.recurringMembershipSummary;\n } else if (packageKind === \"credit_pack\") {\n const unitLabel = normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n );\n fitLabel = copy.creditTopUpFitLabel;\n summary = copy.creditPackFitSummary(unitLabel || \"credits\");\n } else if (packageSlug.includes(\"hybrid\")) {\n const unitLabel = normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n );\n fitLabel = copy.hybridUpgradeFitLabel;\n summary = copy.hybridPackFitSummary(unitLabel || \"credits\");\n }\n\n const signals: string[] = [];\n if (readString(metadata.badge)) {\n signals.push(readString(metadata.badge));\n }\n if (credits > 0 && virtualCurrency) {\n signals.push(\n formatVirtualCurrencyAmountLabel({\n amount: String(credits),\n virtualCurrency,\n fallbackUnit: \"credits\",\n }),\n );\n } else if (credits > 0) {\n signals.push(`${credits} credits`);\n } else if (virtualCurrency) {\n signals.push(\n copy.packageCurrencySignalLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n ),\n );\n }\n if (readString(item.billingPeriod)) {\n signals.push(copy.billedSignalLabel(readString(item.billingPeriod)));\n }\n if (offeringPresentation.offeringLabel) {\n signals.push(offeringPresentation.offeringLabel);\n }\n\n return {\n fitLabel,\n summary,\n signals,\n moneyLabel,\n offeringLabel: offeringPresentation.offeringLabel,\n placementLabel: offeringPresentation.placementLabel,\n offeringSummary: offeringPresentation.summary,\n };\n}\n\nexport function resolveXmsModeForPackage(item: unknown): {\n key: string;\n label: string;\n description: string;\n} {\n const record = item && typeof item === \"object\" ? (item as Record<string, unknown>) : {};\n const productFamily = readLower(record.productFamily);\n const packageKind = readLower(record.packageKind);\n\n if (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") {\n return {\n key: \"one_time_purchase\",\n label: \"one_time_purchase\",\n description: \"Durable entitlement/unlock after a single successful purchase.\",\n };\n }\n\n if (productFamily === \"subscription_plan\" || packageKind === \"subscription\") {\n return {\n key: \"subscription\",\n label: \"subscription\",\n description: \"Recurring contract with current subscription and access state.\",\n };\n }\n\n if (productFamily === \"credit_pack\" || packageKind === \"credit_pack\") {\n return {\n key: \"credit_wallet\",\n label: \"credit_wallet\",\n description: \"Wallet top-up flow that issues credits and ledger entries.\",\n };\n }\n\n if (productFamily === \"hybrid_plan\") {\n return {\n key: \"hybrid_composition\",\n label: \"hybrid_composition\",\n description: \"Composition of subscription/access and bundled credit behavior.\",\n };\n }\n\n return {\n key: \"unknown\",\n label: \"unknown\",\n description: \"Package shape is not yet mapped to an explicit XMS mode.\",\n };\n}\n\nfunction collectPackageOwnershipCandidates(item: Record<string, unknown>): string[] {\n const metadata =\n item.metadata && typeof item.metadata === \"object\" && !Array.isArray(item.metadata)\n ? (item.metadata as Record<string, unknown>)\n : {};\n const productMetadata =\n item.productMetadata &&\n typeof item.productMetadata === \"object\" &&\n !Array.isArray(item.productMetadata)\n ? (item.productMetadata as Record<string, unknown>)\n : {};\n return [\n readLower(item.productSlug),\n readLower(item.packageSlug),\n readLower(metadata.tier),\n readLower(metadata.access_tier),\n readLower(productMetadata.tier),\n readLower(productMetadata.access_tier),\n ].filter(Boolean);\n}\n\nfunction collectCurrentSubscriptionCandidates(\n currentSubscription: Record<string, unknown>,\n): string[] {\n const metadata =\n currentSubscription.metadata && typeof currentSubscription.metadata === \"object\"\n ? (currentSubscription.metadata as Record<string, unknown>)\n : currentSubscription.metadata_jsonb && typeof currentSubscription.metadata_jsonb === \"object\"\n ? (currentSubscription.metadata_jsonb as Record<string, unknown>)\n : {};\n return [\n readLower(currentSubscription.product_slug),\n readLower(currentSubscription.tier),\n readLower(metadata.product_slug),\n readLower(metadata.tier),\n readLower(metadata.access_tier),\n ].filter(Boolean);\n}\n\nfunction hasActiveRecurringSubscription(currentSubscription: unknown): boolean {\n const record =\n currentSubscription &&\n typeof currentSubscription === \"object\" &&\n !Array.isArray(currentSubscription)\n ? (currentSubscription as Record<string, unknown>)\n : {};\n const status = readLower(record.status);\n if (!status || status === \"expired\") return false;\n const expiredAt = readString(record.expired_at);\n if (!expiredAt) return true;\n const expiresAtMs = Date.parse(expiredAt);\n return Number.isNaN(expiresAtMs) || expiresAtMs > Date.now();\n}\n\nfunction hasCurrentOwnedEntitlement(entitlement: Record<string, unknown>): boolean {\n const status = readLower(entitlement.status);\n if (status !== \"active\" && status !== \"grace_period\") return false;\n const expiresAt = readString(entitlement.expires_at);\n if (!expiresAt) return true;\n const expiresAtMs = Date.parse(expiresAt);\n return Number.isNaN(expiresAtMs) || expiresAtMs > Date.now();\n}\n\nfunction readProjectedPurchasePolicy(value: unknown): {\n canPurchase: boolean;\n status: \"available\" | \"current_recurring_plan\" | \"owned_additive_unlock\";\n transitionKind:\n | \"start_recurring\"\n | \"replace_recurring\"\n | \"buy_additive_unlock\"\n | \"buy_credit_pack\"\n | \"activate_hybrid\"\n | \"none\";\n reason: string | null;\n} | null {\n const record =\n value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n if (!record) return null;\n const status = readLower(record.status);\n const transitionKind = readLower(record.transition_kind ?? record.transitionKind);\n if (!status || !transitionKind) return null;\n return {\n canPurchase: readBoolean(record.can_purchase ?? record.canPurchase, true),\n status:\n status === \"current_recurring_plan\" || status === \"owned_additive_unlock\"\n ? status\n : \"available\",\n transitionKind:\n transitionKind === \"start_recurring\" ||\n transitionKind === \"replace_recurring\" ||\n transitionKind === \"buy_additive_unlock\" ||\n transitionKind === \"buy_credit_pack\" ||\n transitionKind === \"activate_hybrid\"\n ? transitionKind\n : \"none\",\n reason: readString(record.reason) || null,\n };\n}\n\nexport function resolveMonetizationPackagePurchasePolicy(input: {\n item: unknown;\n currentSubscription?: unknown;\n additiveEntitlements?: unknown;\n accessProjection?: unknown;\n}): {\n canPurchase: boolean;\n status: \"available\" | \"current_recurring_plan\" | \"owned_additive_unlock\";\n transitionKind:\n | \"start_recurring\"\n | \"replace_recurring\"\n | \"buy_additive_unlock\"\n | \"buy_credit_pack\"\n | \"activate_hybrid\"\n | \"none\";\n reason: string | null;\n} {\n const item =\n input.item && typeof input.item === \"object\" ? (input.item as Record<string, unknown>) : {};\n const projectedPolicy = readProjectedPurchasePolicy(item.purchasePolicy ?? item.purchase_policy);\n if (projectedPolicy) return projectedPolicy;\n const currentSubscription =\n input.currentSubscription &&\n typeof input.currentSubscription === \"object\" &&\n !Array.isArray(input.currentSubscription)\n ? (input.currentSubscription as Record<string, unknown>)\n : {};\n const additiveEntitlements = Array.isArray(input.additiveEntitlements)\n ? (input.additiveEntitlements as unknown[])\n : [];\n const productFamily = readLower(item.productFamily);\n const packageKind = readLower(item.packageKind);\n const productId = readLower(item.productId);\n const currentSubscriptionProductId = readLower(currentSubscription.product_id);\n const includedCredits = readPackageCredits(item);\n const ownershipCandidates = new Set(collectPackageOwnershipCandidates(item));\n const currentSubscriptionCandidates = new Set(\n collectCurrentSubscriptionCandidates(currentSubscription),\n );\n const ownedAdditiveUnlock = additiveEntitlements.some((entry) => {\n const entitlement =\n entry && typeof entry === \"object\" && !Array.isArray(entry)\n ? (entry as Record<string, unknown>)\n : {};\n if (!hasCurrentOwnedEntitlement(entitlement)) return false;\n const entitlementProductId = readLower(entitlement.product_id);\n if (productId && entitlementProductId && productId === entitlementProductId) return true;\n const candidateValues = [\n readLower(entitlement.product_slug),\n readLower(entitlement.tier),\n ].filter(Boolean);\n return candidateValues.some((value) => ownershipCandidates.has(value));\n });\n\n if (\n hasActiveRecurringSubscription(currentSubscription) &&\n productId &&\n currentSubscriptionProductId &&\n productId === currentSubscriptionProductId\n ) {\n return {\n canPurchase: false,\n status: \"current_recurring_plan\",\n transitionKind: \"none\",\n reason: \"current_recurring_plan\",\n };\n }\n\n if (\n hasActiveRecurringSubscription(currentSubscription) &&\n Array.from(ownershipCandidates).some((value) => currentSubscriptionCandidates.has(value))\n ) {\n return {\n canPurchase: false,\n status: \"current_recurring_plan\",\n transitionKind: \"none\",\n reason: \"current_recurring_plan\",\n };\n }\n\n const consumableOneTimeUnlock =\n (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") &&\n includedCredits > 0;\n\n if (consumableOneTimeUnlock) {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"buy_additive_unlock\",\n reason: null,\n };\n }\n\n if (\n (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") &&\n ownedAdditiveUnlock\n ) {\n return {\n canPurchase: false,\n status: \"owned_additive_unlock\",\n transitionKind: \"none\",\n reason: \"owned_additive_unlock\",\n };\n }\n\n if (productFamily === \"credit_pack\" || packageKind === \"credit_pack\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"buy_credit_pack\",\n reason: null,\n };\n }\n\n if (productFamily === \"one_time_unlock\" || packageKind === \"one_time_unlock\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"buy_additive_unlock\",\n reason: null,\n };\n }\n\n if (productFamily === \"subscription_plan\" || packageKind === \"subscription\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: hasActiveRecurringSubscription(currentSubscription)\n ? \"replace_recurring\"\n : \"start_recurring\",\n reason: null,\n };\n }\n\n if (productFamily === \"hybrid_plan\") {\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"activate_hybrid\",\n reason: null,\n };\n }\n\n return {\n canPurchase: true,\n status: \"available\",\n transitionKind: \"none\",\n reason: null,\n };\n}\n\nfunction normalizeMoneyLabel(item: Record<string, unknown>) {\n const amount = readString(item.amount);\n const currency = readString(item.currency);\n const billingPeriod = readString(item.billingPeriod);\n if (!amount && !currency) {\n return buildXmsSurfaceCopy({ locale: item.locale }).priceUnavailableLabel;\n }\n return `${amount} ${currency}${billingPeriod ? ` / ${billingPeriod}` : \"\"}`.trim();\n}\n\nfunction packageCredits(item: Record<string, unknown>) {\n return readPackageCredits(item);\n}\n\nfunction scorePackageForFeature(\n feature: Record<string, unknown>,\n item: Record<string, unknown>,\n locale?: unknown,\n) {\n const copy = buildXmsPackageCopy(locale);\n const requirements =\n feature.requirements && typeof feature.requirements === \"object\"\n ? (feature.requirements as Record<string, unknown>)\n : {};\n const packageKind = readString(item.packageKind);\n const packageSlug = readString(item.packageSlug);\n const offeringSlug = readString(item.offeringSlug);\n const credits = packageCredits(item);\n const virtualCurrency = readPackageVirtualCurrency(item);\n const unitLabel =\n normalizeVirtualCurrencyDisplayLabel(\n formatVirtualCurrencyLabel(virtualCurrency, { includeCode: true }),\n ) || \"credits\";\n let score = 0;\n const reasons: string[] = [];\n\n if (requirements.currentAccess) {\n if (packageKind === \"one_time_unlock\") {\n score += 7;\n reasons.push(copy.featureDurableUnlockReason);\n } else if (packageKind === \"subscription\") {\n score += 6;\n reasons.push(copy.featureRecurringAccessReason);\n } else if (packageSlug.includes(\"hybrid\")) {\n score += 5;\n reasons.push(copy.featureHybridAccessReason);\n }\n }\n\n if (requirements.subscription) {\n if (packageKind === \"subscription\") {\n score += 8;\n reasons.push(copy.featureSubscriptionDirectReason);\n } else if (packageSlug.includes(\"hybrid\")) {\n score += 5;\n reasons.push(copy.featureHybridSubscriptionReason);\n }\n }\n\n const requiredCredits = Number(requirements.credits || 0);\n if (requiredCredits) {\n if (credits >= requiredCredits) {\n score += 8;\n reasons.push(\n copy.creditRequirementCoveredLabel(formatNamedUnitAmount(requiredCredits, unitLabel)),\n );\n } else if (credits > 0) {\n score += 4;\n reasons.push(copy.creditRequirementAddedLabel(formatNamedUnitAmount(credits, unitLabel)));\n } else if (packageSlug.includes(\"hybrid\")) {\n score += 3;\n reasons.push(copy.hybridCreditsSupportLabel(unitLabel));\n }\n }\n\n if (packageSlug.includes(\"default_paywall\") || offeringSlug.includes(\"paywall\")) {\n score += 1;\n }\n\n return {\n score,\n reasons,\n credits,\n moneyLabel: normalizeMoneyLabel(item),\n };\n}\n\nexport function buildFeaturePaywall(input: {\n feature: unknown;\n packages: unknown;\n selectedPackage?: unknown;\n locale?: unknown;\n}): {\n activePackage: Record<string, unknown> | null;\n candidatePackages: Array<Record<string, unknown>>;\n recommendedPackages: Array<Record<string, unknown>>;\n rankedPackages: Array<Record<string, unknown>>;\n allPackages: Array<Record<string, unknown>>;\n} {\n const feature =\n input.feature && typeof input.feature === \"object\"\n ? (input.feature as Record<string, unknown>)\n : {};\n const selectedPackage =\n input.selectedPackage && typeof input.selectedPackage === \"object\"\n ? (input.selectedPackage as Record<string, unknown>)\n : null;\n const ranked: Array<Record<string, unknown>> = (\n Array.isArray(input.packages) ? input.packages : []\n )\n .map((item) => {\n const record =\n item && typeof item === \"object\"\n ? (item as Record<string, unknown>)\n : ({} as Record<string, unknown>);\n const scored = scorePackageForFeature(feature, record, input.locale);\n return {\n ...record,\n recommendationScore: scored.score,\n candidateScore: scored.score,\n recommendationReasons: scored.reasons,\n candidateReasons: scored.reasons,\n credits: scored.credits,\n moneyLabel: scored.moneyLabel,\n };\n })\n .sort((left, right) => {\n if (Number(right.recommendationScore) !== Number(left.recommendationScore)) {\n return Number(right.recommendationScore) - Number(left.recommendationScore);\n }\n return readString((left as Record<string, unknown>).packageTitle).localeCompare(\n readString((right as Record<string, unknown>).packageTitle),\n );\n });\n\n const recommended = ranked.filter((item) => Number(item.recommendationScore) > 0);\n const selectedPackageId = readString(selectedPackage?.packageId);\n const activePackage =\n recommended.find(\n (item) => readString((item as Record<string, unknown>).packageId) === selectedPackageId,\n ) ||\n recommended[0] ||\n ranked.find(\n (item) => readString((item as Record<string, unknown>).packageId) === selectedPackageId,\n ) ||\n ranked[0] ||\n null;\n\n return {\n activePackage,\n candidatePackages: recommended.slice(0, 3),\n recommendedPackages: recommended.slice(0, 3),\n rankedPackages: ranked,\n allPackages: ranked,\n };\n}\n\nfunction readFeatureRequirements(feature: Record<string, unknown>) {\n return feature.requirements && typeof feature.requirements === \"object\"\n ? (feature.requirements as Record<string, unknown>)\n : {};\n}\n\nfunction buildFeatureGapBadges(input: {\n requirements: Record<string, unknown>;\n snapshotSummary: {\n accessCoverage?: { available?: boolean | null };\n wallet?: { creditsRemaining?: string | null; virtualCurrencyLabel?: string | null };\n };\n activePackage?: unknown;\n currentSubscriptionStatus?: unknown;\n locale?: unknown;\n}): string[] {\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const badges: string[] = [];\n const creditsRemaining = readNumber(input.snapshotSummary?.wallet?.creditsRemaining);\n const unitLabel = readFeatureCurrencyUnitLabel({\n snapshotSummary: input.snapshotSummary,\n activePackage: input.activePackage,\n });\n if (input.requirements.currentAccess && !input.snapshotSummary?.accessCoverage?.available) {\n badges.push(copy.featureCurrentAccessMissingBadge);\n }\n const hasSubscription = Boolean(readString(input.currentSubscriptionStatus));\n if (input.requirements.subscription && !hasSubscription) {\n badges.push(copy.featureMembershipNotActiveBadge);\n }\n const requiredCredits = readNumber(input.requirements.credits);\n if (requiredCredits > 0 && creditsRemaining < requiredCredits) {\n badges.push(\n copy.featureGapShortLabel(\n formatNamedUnitAmount(requiredCredits - creditsRemaining, unitLabel),\n ),\n );\n }\n return badges;\n}\n\nfunction buildFeatureNeedLabel(\n requirements: Record<string, unknown>,\n unitLabel: string,\n locale?: unknown,\n): string {\n const copy = buildXmsSurfaceCopy({ locale });\n const needsAccess = Boolean(requirements.currentAccess);\n const needsSubscription = Boolean(requirements.subscription);\n const needsCredits = readNumber(requirements.credits) > 0;\n if (needsAccess && needsCredits) return copy.featureNeedMixedAccessLabel;\n if (needsSubscription && needsCredits)\n return copy.featureNeedMembershipAndCreditsLabel(unitLabel);\n if (needsSubscription) return copy.featureNeedMembershipLabel;\n if (needsCredits) return copy.featureNeedCreditsLabel(unitLabel);\n if (needsAccess) return copy.featureNeedAccessLabel;\n return copy.featureLockedLabel;\n}\n\nfunction buildFeaturePaywallOpenLabel(\n requirements: Record<string, unknown>,\n unitLabel: string,\n locale?: unknown,\n): string {\n const copy = buildXmsSurfaceCopy({ locale });\n const needsAccess = Boolean(requirements.currentAccess);\n const needsSubscription = Boolean(requirements.subscription);\n const needsCredits = readNumber(requirements.credits) > 0;\n if (needsAccess && needsCredits) return copy.featureViewHybridOptionsLabel;\n if (needsSubscription && needsCredits) return copy.featureViewMembershipOptionsLabel;\n if (needsSubscription) return copy.featureViewMembershipOptionsLabel;\n if (needsCredits) return copy.featureViewCreditOptionsLabel(unitLabel);\n if (needsAccess) return copy.featureViewUnlockOptionsLabel;\n return copy.featureOpenPaywallLabel;\n}\n\nfunction buildFeatureCheckoutLabel(\n activePackage: Record<string, unknown> | null,\n locale?: unknown,\n): string {\n const copy = buildXmsSurfaceCopy({ locale });\n const packageKind = readString(activePackage?.packageKind);\n if (packageKind === \"one_time_unlock\") return copy.featureUnlockCheckoutLabel;\n if (packageKind === \"subscription\") return copy.featureStartMembershipCheckoutLabel;\n if (packageKind === \"credit_pack\") {\n const unitLabel = readFeatureCurrencyUnitLabel({ activePackage });\n return copy.featureBuyCreditsCheckoutLabel(unitLabel);\n }\n if (readString(activePackage?.packageSlug).includes(\"hybrid\")) {\n return copy.featureStartHybridCheckoutLabel;\n }\n return copy.featureCreatePaymentSessionLabel;\n}\n\nexport function buildFeaturePaywallCopyModel(input: {\n feature: unknown;\n snapshotSummary: unknown;\n currentSubscriptionStatus?: unknown;\n activePackage?: unknown;\n assetMixLabel?: unknown;\n locale?: unknown;\n}): {\n summary: string;\n missingLines: string[];\n candidateLead: string;\n recommendationLead: string;\n ctaLabel: string;\n openPaywallLabel: string;\n activePackageLabel: string;\n statusLabel: string;\n assetMixLabel: string;\n coverageLabel: string;\n subscriptionLabel: string;\n creditsLabel: string;\n gapBadges: string[];\n} {\n const feature =\n input.feature && typeof input.feature === \"object\"\n ? (input.feature as Record<string, unknown>)\n : {};\n const snapshotSummary =\n input.snapshotSummary && typeof input.snapshotSummary === \"object\"\n ? (input.snapshotSummary as Record<string, any>)\n : {};\n const requirements = readFeatureRequirements(feature);\n const creditsRemaining = readNumber(snapshotSummary?.wallet?.creditsRemaining);\n const requiredCredits = readNumber(requirements.credits);\n const hasCurrentAccess = Boolean(snapshotSummary?.accessCoverage?.available);\n const hasSubscription = Boolean(readString(input.currentSubscriptionStatus));\n const activePackage =\n input.activePackage && typeof input.activePackage === \"object\"\n ? (input.activePackage as Record<string, unknown>)\n : null;\n const copy = buildXmsSurfaceCopy({ locale: input.locale });\n const unitLabel = readFeatureCurrencyUnitLabel({\n snapshotSummary,\n activePackage,\n });\n\n const missingLines: string[] = [];\n if (requirements.currentAccess && !hasCurrentAccess) {\n missingLines.push(copy.featureCurrentAccessMissingLabel);\n }\n if (requirements.subscription && !hasSubscription) {\n missingLines.push(copy.featureSubscriptionMissingLabel);\n }\n if (requiredCredits > 0 && creditsRemaining < requiredCredits) {\n missingLines.push(\n copy.featureCreditsMissingLabel(\n formatNamedUnitAmount(requiredCredits, unitLabel),\n formatNamedUnitAmount(creditsRemaining, unitLabel),\n ),\n );\n }\n\n let summary = copy.featureBlockedSummary(readString(feature.title) || \"Feature\");\n if (!missingLines.length) {\n summary = copy.featureReadySummary(readString(feature.title) || \"Feature\");\n } else if (missingLines.length === 1) {\n summary = missingLines[0];\n } else {\n summary = `${missingLines[0]} ${missingLines[1]}`;\n }\n\n const candidateLead = activePackage\n ? copy.featureCandidateLead(readString(activePackage.packageTitle))\n : copy.featureCandidateFallbackLead;\n\n return {\n summary,\n missingLines,\n candidateLead,\n recommendationLead: candidateLead,\n ctaLabel: buildFeatureCheckoutLabel(activePackage, input.locale),\n openPaywallLabel: buildFeaturePaywallOpenLabel(requirements, unitLabel, input.locale),\n activePackageLabel: activePackage ? readString(activePackage.packageTitle) : \"\",\n statusLabel: missingLines.length\n ? buildFeatureNeedLabel(requirements, unitLabel, input.locale)\n : \"ready\",\n assetMixLabel: readString(input.assetMixLabel) || \"unknown\",\n coverageLabel: formatStateLabel(\n snapshotSummary?.accessCoverage?.coverageLabel,\n buildXmsSurfaceCopy({ locale: input.locale }).unavailableLabel,\n ),\n subscriptionLabel: formatStateLabel(input.currentSubscriptionStatus, \"inactive\"),\n creditsLabel: formatNamedUnitAmount(creditsRemaining, unitLabel),\n gapBadges: buildFeatureGapBadges({\n requirements,\n snapshotSummary: snapshotSummary as any,\n activePackage,\n currentSubscriptionStatus: input.currentSubscriptionStatus,\n locale: input.locale,\n }),\n };\n}\n\nexport function summarizeXappMonetizationSnapshot(input: unknown): {\n accessCoverage: {\n available: boolean;\n coverageLabel: string;\n accessStateLabel: string;\n tierLabel: string;\n sourceRefLabel: string;\n };\n currentSubscription: {\n present: boolean;\n statusLabel: string;\n tierLabel: string;\n coverageLabel: string;\n coverageReasonLabel: string;\n renewsAt: string | null;\n expiresAt: string | null;\n paymentSessionIdLabel: string;\n };\n wallet: {\n creditsRemaining: string;\n virtualCurrencyLabel: string;\n balanceStateLabel: string;\n currentAccessLabel: string;\n };\n} {\n const record =\n input && typeof input === \"object\" && !Array.isArray(input)\n ? (input as Record<string, unknown>)\n : {};\n const accessProjection =\n record.access_projection &&\n typeof record.access_projection === \"object\" &&\n !Array.isArray(record.access_projection)\n ? (record.access_projection as Record<string, unknown>)\n : null;\n const currentSubscription =\n record.current_subscription &&\n typeof record.current_subscription === \"object\" &&\n !Array.isArray(record.current_subscription)\n ? (record.current_subscription as Record<string, unknown>)\n : null;\n const lifecycle = buildXmsSubscriptionLifecycleSummary({ currentSubscription });\n\n return {\n accessCoverage: {\n available: hasEffectiveCoverage({ accessProjection, currentSubscription }),\n coverageLabel: formatCoverageLabel({ accessProjection, currentSubscription }),\n accessStateLabel: formatStateLabel(accessProjection?.entitlement_state, \"inactive\"),\n tierLabel: formatStateLabel(accessProjection?.tier),\n sourceRefLabel: formatStateLabel(accessProjection?.source_ref),\n },\n currentSubscription: {\n present: lifecycle.present,\n statusLabel: lifecycle.statusLabel || formatStateLabel(currentSubscription?.status),\n tierLabel: formatStateLabel(currentSubscription?.tier),\n coverageLabel: lifecycle.coverageLabel || buildXmsSurfaceCopy().unknownLabel,\n coverageReasonLabel: lifecycle.reasonLabel || buildXmsSurfaceCopy().noOverdueRestrictionLabel,\n renewsAt: lifecycle.renewsAt,\n expiresAt: lifecycle.expiresAt || lifecycle.currentPeriodEndsAt,\n paymentSessionIdLabel: formatStateLabel(currentSubscription?.payment_session_id),\n },\n wallet: {\n creditsRemaining: readString(accessProjection?.credits_remaining) || \"0\",\n virtualCurrencyLabel: formatVirtualCurrencyLabel(accessProjection?.virtual_currency, {\n includeCode: true,\n }),\n balanceStateLabel: formatStateLabel(accessProjection?.balance_state, \"unknown\"),\n currentAccessLabel: hasEffectiveCoverage({ accessProjection, currentSubscription })\n ? buildXmsSurfaceCopy().yesLabel\n : buildXmsSurfaceCopy().noLabel,\n },\n };\n}\n", "import { summarizeXappMonetizationSnapshot } from \"@xapps-platform/browser-host/xms\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport type { CatalogXappDetail, InstallationInfo } from \"../types\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport { readDefaultWidgetMeta } from \"../utils/xappWorkspace\";\nimport \"../marketplace.css\";\n\ntype MonetizationCard = {\n xappId: string;\n installationId?: string;\n title: string;\n subtitle: string;\n detailHref: { pathname: string; search: string };\n plansHref: { pathname: string; search: string };\n historyHref: { pathname: string; search: string };\n accessLabel: string;\n tierLabel: string;\n sourceLabel: string;\n subscriptionStatus: string;\n subscriptionCoverage: string;\n renewsAt: string;\n virtualCurrencyLabel: string;\n balanceTitle: string;\n creditsRemaining: string;\n balanceState: string;\n hasSubscription: boolean;\n hasNamedCurrency: boolean;\n hasBalance: boolean;\n};\n\nfunction formatVirtualCurrencyLabel(input: unknown, options?: { includeCode?: boolean }): string {\n const record = asRecord(input);\n const code = readString(record.code);\n const name = readString(record.name);\n if (name && code && options?.includeCode) return `${name} (${code})`;\n return name || code || \"\";\n}\n\nfunction formatVirtualCurrencyAmount(value: unknown, virtualCurrency: unknown): string {\n const amount = readString(value);\n if (!amount) return \"\";\n const currencyLabel = formatVirtualCurrencyLabel(virtualCurrency);\n return currencyLabel ? `${amount} ${currencyLabel}` : amount;\n}\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction isMonetizationCandidate(detail: CatalogXappDetail | null | undefined): boolean {\n const record = asRecord(detail);\n const operational = asRecord(record.operational_surfaces);\n if (asRecord(operational.monetization).enabled === true) return true;\n const manifest = asRecord(record.manifest);\n if (manifest.monetization && typeof manifest.monetization === \"object\") return true;\n return (\n Array.isArray(manifest.payment_guard_definitions) &&\n manifest.payment_guard_definitions.length > 0\n );\n}\n\nfunction buildXappRoute(input: {\n xappId: string;\n token: string;\n isEmbedded: boolean;\n installationId?: string;\n}): { pathname: string; search: string } {\n const params = new URLSearchParams();\n if (input.token) params.set(\"token\", input.token);\n if (input.installationId) params.set(\"installationId\", input.installationId);\n const suffix = params.toString();\n return {\n pathname: input.isEmbedded\n ? `/xapps/${encodeURIComponent(input.xappId)}`\n : `/marketplace/xapps/${encodeURIComponent(input.xappId)}`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nfunction buildPlansRoute(input: {\n xappId: string;\n token: string;\n isEmbedded: boolean;\n installationId?: string;\n view?: \"plans\" | \"history\";\n}): { pathname: string; search: string } {\n const params = new URLSearchParams();\n if (input.token) params.set(\"token\", input.token);\n if (input.installationId) params.set(\"installationId\", input.installationId);\n if (input.view === \"history\") params.set(\"view\", \"history\");\n const suffix = params.toString();\n return {\n pathname: input.isEmbedded\n ? `/xapps/${encodeURIComponent(input.xappId)}/plans`\n : `/marketplace/xapps/${encodeURIComponent(input.xappId)}/plans`,\n search: suffix ? `?${suffix}` : \"\",\n };\n}\n\nexport function MonetizationPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const loc = useLocation();\n const query = useQuery();\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const showPast = query.get(\"showPast\") === \"1\";\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n const xappInstallationId =\n installationIdFilter || host.getInstallationsByXappId?.()?.[xappIdFilter]?.installationId || \"\";\n const subjectResolutionPending = env?.subjectResolved === false;\n const [items, setItems] = useState<MonetizationCard[]>([]);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n const [xappDefaultWidgetId, setXappDefaultWidgetId] = useState(\"\");\n const [xappDefaultWidgetName, setXappDefaultWidgetName] = useState(\"\");\n const [xappDefaultToolName, setXappDefaultToolName] = useState(\"\");\n const [xappOpenAppStrategy, setXappOpenAppStrategy] = useState<\"direct_widget\" | \"choose_widget\">(\n \"direct_widget\",\n );\n const visibilityRefreshRef = useRef<number>(0);\n const handleWorkspaceOpenApp =\n !isEmbedded &&\n xappOpenAppStrategy === \"direct_widget\" &&\n xappInstallationId &&\n xappDefaultWidgetId\n ? () => {\n host.openWidget({\n installationId: xappInstallationId,\n widgetId: xappDefaultWidgetId,\n xappId: xappIdFilter,\n xappTitle: xappTitle || xappIdFilter,\n widgetName: xappDefaultWidgetName,\n toolName: xappDefaultToolName || undefined,\n });\n }\n : undefined;\n\n const overview = useMemo(\n () => ({\n apps: items.length,\n subscriptions: items.filter((item) => item.hasSubscription).length,\n namedCurrencies: items.filter((item) => item.hasNamedCurrency).length,\n balances: items.filter((item) => item.hasBalance).length,\n }),\n [items],\n );\n\n const refresh = useCallback(async () => {\n if (!client.getMyXappMonetization) {\n setError(\n t(\n \"activity.unavailable_monetization_title\",\n undefined,\n \"Plans and balances are unavailable in this host.\",\n ),\n );\n setItems([]);\n setBusy(false);\n return;\n }\n if (!host.subjectId && subjectResolutionPending) {\n setError(null);\n setItems([]);\n setBusy(true);\n return;\n }\n\n if (!host.subjectId) {\n setError(\"Subject required\");\n setItems([]);\n setBusy(false);\n return;\n }\n\n const installations = host.getInstallationsByXappId();\n const entries: InstallationInfo[] = Object.values(installations || {});\n const overviewResponse =\n !xappIdFilter && typeof client.listMyMonetizedXapps === \"function\"\n ? await client.listMyMonetizedXapps({\n currentOnly: !showPast,\n })\n : null;\n const overviewItems = Array.isArray(asRecord(asRecord(overviewResponse).overview).items)\n ? (asRecord(asRecord(overviewResponse).overview).items as Array<Record<string, unknown>>)\n : [];\n const candidates = xappIdFilter\n ? [\n {\n xappId: xappIdFilter,\n installationId:\n installationIdFilter ||\n entries.find((item) => item.xappId === xappIdFilter)?.installationId ||\n undefined,\n },\n ]\n : overviewItems.length > 0\n ? overviewItems.map((item) => {\n const xappId = readString(item.xapp_id);\n return {\n xappId,\n installationId:\n entries.find((entry) => entry.xappId === xappId)?.installationId || undefined,\n };\n })\n : entries.map((item) => ({\n xappId: item.xappId,\n installationId: item.installationId,\n }));\n const deduped = Array.from(\n new Map(candidates.map((item) => [item.xappId, item])).values(),\n ).filter((item) => Boolean(item.xappId));\n\n setError(null);\n setBusy(true);\n try {\n const next = await Promise.all(\n deduped.map(async (item): Promise<MonetizationCard | null> => {\n const [detail, state] = await Promise.all([\n client.getCatalogXapp(item.xappId, {\n installationId: item.installationId || null,\n }),\n client.getMyXappMonetization!(item.xappId, {\n installationId: item.installationId || null,\n locale,\n }),\n ]);\n if (!xappIdFilter && !isMonetizationCandidate(detail)) return null;\n const summary = summarizeXappMonetizationSnapshot(state);\n const detailRecord = asRecord(detail);\n const accessProjection = asRecord(asRecord(state).access_projection);\n const virtualCurrencyLabel = formatVirtualCurrencyLabel(\n accessProjection.virtual_currency,\n {\n includeCode: true,\n },\n );\n const creditsRemainingLabel =\n formatVirtualCurrencyAmount(\n accessProjection.credits_remaining,\n accessProjection.virtual_currency,\n ) ||\n summary.wallet.creditsRemaining ||\n \"0\";\n const hasLiveBalance = Boolean(readString(accessProjection.credits_remaining));\n const hasNamedCurrency = Boolean(virtualCurrencyLabel);\n const title =\n resolveMarketplaceText(asRecord(detailRecord.manifest).title as any, locale) ||\n readFirstString(asRecord(detailRecord.xapp).name) ||\n item.xappId;\n const subtitle =\n resolveMarketplaceText(asRecord(detailRecord.manifest).summary as any, locale) ||\n resolveMarketplaceText(asRecord(detailRecord.manifest).description as any, locale) ||\n t(\n \"activity.monetization_card_subtitle\",\n undefined,\n \"Access, plans, and balances for this app.\",\n );\n return {\n xappId: item.xappId,\n installationId: item.installationId,\n title,\n subtitle,\n detailHref: buildXappRoute({\n xappId: item.xappId,\n token,\n isEmbedded,\n installationId: item.installationId,\n }),\n plansHref: buildPlansRoute({\n xappId: item.xappId,\n token,\n isEmbedded,\n installationId: item.installationId,\n }),\n historyHref: buildPlansRoute({\n xappId: item.xappId,\n token,\n isEmbedded,\n installationId: item.installationId,\n view: \"history\",\n }),\n accessLabel:\n summary.accessCoverage.coverageLabel ||\n t(\"activity.monetization_unknown\", undefined, \"Unknown\"),\n tierLabel:\n summary.accessCoverage.tierLabel ||\n t(\"activity.monetization_none\", undefined, \"None\"),\n sourceLabel:\n summary.accessCoverage.sourceRefLabel ||\n t(\"activity.monetization_no_source\", undefined, \"No source\"),\n subscriptionStatus:\n summary.currentSubscription.statusLabel ||\n t(\"activity.monetization_no_subscription\", undefined, \"No subscription\"),\n subscriptionCoverage:\n summary.currentSubscription.present && summary.currentSubscription.coverageLabel\n ? summary.currentSubscription.coverageLabel\n : t(\n \"activity.monetization_no_recurring_coverage\",\n undefined,\n \"No recurring coverage\",\n ),\n renewsAt:\n summary.currentSubscription.renewsAt ||\n t(\"activity.monetization_not_scheduled\", undefined, \"Not scheduled\"),\n virtualCurrencyLabel,\n balanceTitle: hasNamedCurrency\n ? t(\"activity.monetization_credits_label\", undefined, \"Balance\")\n : t(\"xapp.credit_balance_label\", undefined, \"Credits\"),\n creditsRemaining: creditsRemainingLabel,\n balanceState:\n summary.wallet.balanceStateLabel ||\n t(\"activity.monetization_balance_unknown\", undefined, \"unknown\"),\n hasSubscription: summary.currentSubscription.present,\n hasNamedCurrency,\n hasBalance: Boolean(hasLiveBalance || creditsRemainingLabel),\n };\n }),\n );\n setItems(next.filter((item): item is MonetizationCard => Boolean(item)));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n setItems([]);\n } finally {\n setBusy(false);\n }\n }, [\n client,\n host,\n installationIdFilter,\n isEmbedded,\n locale,\n showPast,\n subjectResolutionPending,\n t,\n token,\n xappIdFilter,\n ]);\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"monetization\",\n params: {\n xappId: xappIdFilter || null,\n installationId: installationIdFilter || null,\n },\n });\n }, [host, installationIdFilter, refresh, xappIdFilter]);\n\n useEffect(() => {\n function handleVisibilityRefresh() {\n if (typeof document === \"undefined\" || document.visibilityState !== \"visible\") return;\n const now = Date.now();\n if (now - visibilityRefreshRef.current < 1500) return;\n visibilityRefreshRef.current = now;\n void refresh();\n }\n document.addEventListener(\"visibilitychange\", handleVisibilityRefresh);\n return () => {\n document.removeEventListener(\"visibilitychange\", handleVisibilityRefresh);\n };\n }, [refresh]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter), {\n installationId: installationIdFilter || null,\n });\n if (!alive) return;\n const detail = asRecord(res);\n const manifest = asRecord(detail.manifest);\n const xapp = asRecord(detail.xapp);\n const widgetMeta = readDefaultWidgetMeta(\n detail,\n locale,\n t(\"common.widget\", undefined, \"Widget\"),\n );\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n setXappDefaultWidgetId(widgetMeta?.widgetId || \"\");\n setXappDefaultWidgetName(widgetMeta?.widgetName || \"\");\n setXappDefaultToolName(widgetMeta?.toolName || \"\");\n setXappOpenAppStrategy(\n widgetMeta && widgetMeta.widgetCount > 1 ? \"choose_widget\" : \"direct_widget\",\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, installationIdFilter, locale, xappIdFilter]);\n\n const clearHref = buildMarketplaceHref(loc.pathname, \"monetization\", { token });\n const togglePastHref = !xappIdFilter\n ? buildMarketplaceHref(loc.pathname, \"monetization\", {\n token,\n showPast: !showPast ? \"1\" : undefined,\n })\n : null;\n\n const xappLink = xappIdFilter\n ? (buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(String(xappIdFilter))}`, {\n token,\n installationId: installationIdFilter,\n }) as any)\n : null;\n\n return (\n <div className={`mx-catalog-container mx-monetization-page ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={buildMarketplaceHref(loc.pathname, \"\", { token }) as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.monetization_title\", undefined, \"Monetization\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.monetization_title\", undefined, \"Monetization\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {togglePastHref && (\n <Link to={togglePastHref as any} className=\"mx-btn mx-btn-ghost\">\n {showPast\n ? t(\"activity.monetization_show_current_only\", undefined, \"Show current only\")\n : t(\"activity.monetization_show_past\", undefined, \"Show past apps\")}\n </Link>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {xappIdFilter ? (\n <XappWorkspaceNav\n xappId={xappIdFilter}\n xappTitle={xappTitle || xappIdFilter}\n isEmbedded={isEmbedded}\n token={token}\n installationId={xappInstallationId || undefined}\n active=\"billing\"\n billingActive=\"monetization\"\n openWidgetId={xappDefaultWidgetId}\n openWidgetName={xappDefaultWidgetName}\n openToolName={xappDefaultToolName}\n openAppStrategy={xappOpenAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n ) : (\n <MarketplaceActivityTabs\n active=\"monetization\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n )}\n\n {error === \"Subject required\" || error === \"Session token required\" ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter ? (\n <div className=\"mx-table-container mx-subtle-note-card\">\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {t(\n \"activity.showing_monetization_for_prefix\",\n undefined,\n \"Showing plans and balances for\",\n )}{\" \"}\n <span className=\"mx-subtle-note-strong\">{xappIdFilter}</span>\n </div>\n </div>\n ) : (\n <div className=\"mx-table-container mx-subtle-note-card\">\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {showPast\n ? t(\n \"activity.monetization_overview_hint_with_past\",\n undefined,\n \"Review current and past plans, subscriptions, and balances across this subject's apps.\",\n )\n : t(\n \"activity.monetization_overview_hint\",\n undefined,\n \"Review current plans, subscriptions, and balances across this subject's apps.\",\n )}\n </div>\n </div>\n )}\n\n <section className=\"mx-table-container mx-monetization-summary-card\">\n <div className=\"mx-monetization-card-body\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.monetization_title\", undefined, \"Monetization\")}\n </div>\n <div className=\"mx-record-panel-id\">\n {t(\"activity.monetization_summary_title\", undefined, \"Plans and balances\")}\n </div>\n <div className=\"mx-record-panel-subtitle\">\n {t(\n \"activity.monetization_summary_subtitle\",\n undefined,\n \"Review active plans, subscriptions, and balances before opening app details or history.\",\n )}\n </div>\n </div>\n </div>\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_apps\", undefined, \"Apps\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.apps}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_subscriptions\", undefined, \"Subscriptions\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.subscriptions}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_balances\", undefined, \"Balances\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.balances}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_summary_currencies\", undefined, \"Named currencies\")}\n </div>\n <div className=\"mx-record-value is-strong\">{overview.namedCurrencies}</div>\n </div>\n </div>\n </div>\n </section>\n\n {busy ? (\n <div className=\"mx-table-container\">\n <div className=\"mx-loading-center mx-loading-table\">\n {t(\n \"activity.loading_monetization\",\n undefined,\n \"Loading plans, balances, and recent activity...\",\n )}\n </div>\n </div>\n ) : null}\n\n {!busy && !error && items.length === 0 ? (\n <div className=\"mx-table-container\">\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u25CE</div>\n <div className=\"mx-empty-catalog-title\">\n {showPast\n ? t(\n \"activity.no_monetization_history\",\n undefined,\n \"No plan or balance history was found for this subject.\",\n )\n : t(\n \"activity.no_monetization_current\",\n undefined,\n \"No current plans or balances were found for this subject.\",\n )}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {showPast\n ? t(\n \"activity.monetization_overview_hint_with_past\",\n undefined,\n \"Review current and past plans, subscriptions, and balances across this subject's apps.\",\n )\n : t(\n \"activity.monetization_overview_hint\",\n undefined,\n \"Review current plans, subscriptions, and balances across this subject's apps.\",\n )}\n </div>\n </div>\n </div>\n ) : null}\n\n {!busy && items.length > 0 ? (\n <div className=\"mx-record-panel-stack\">\n {items.map((item) => (\n <section key={item.xappId} className=\"mx-table-container mx-monetization-activity-card\">\n <div className=\"mx-monetization-card-body\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.monetization\", undefined, \"Monetization\")}\n </div>\n <div className=\"mx-record-panel-id\">{item.title}</div>\n <div className=\"mx-record-panel-subtitle\">{item.subtitle}</div>\n <div className=\"mx-monetization-card-badges\">\n <span className=\"mx-badge mx-badge-warning\">{item.accessLabel}</span>\n <span\n className={`mx-badge ${\n item.hasSubscription ? \"mx-badge-success\" : \"mx-badge-warning\"\n }`}\n >\n {item.subscriptionStatus}\n </span>\n <span className=\"mx-tag\">\n {item.virtualCurrencyLabel ||\n t(\"xapp.credit_balance_label\", undefined, \"Credits\")}\n </span>\n </div>\n </div>\n <div className=\"mx-record-actions mx-record-actions-monetization\">\n <div className=\"mx-action-group\">\n <Link to={item.plansHref as any} className=\"mx-btn mx-btn-primary\">\n {t(\"activity.monetization_open_plans\", undefined, \"View plans\")}\n </Link>\n <Link to={item.historyHref as any} className=\"mx-btn mx-btn-secondary\">\n {t(\"activity.monetization_open_history\", undefined, \"View history\")}\n </Link>\n </div>\n <div className=\"mx-action-group\">\n <Link to={item.detailHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.view_app_details\", undefined, \"View app details\")}\n </Link>\n {!xappIdFilter ? (\n <Link\n to={\n {\n pathname: isEmbedded ? \"/monetization\" : \"/marketplace/monetization\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n qs.set(\"xappId\", item.xappId);\n if (item.installationId)\n qs.set(\"installationId\", item.installationId);\n const suffix = qs.toString();\n return suffix ? `?${suffix}` : \"\";\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-ghost\"\n >\n {t(\"activity.monetization_focus_xapp\", undefined, \"Only this app\")}\n </Link>\n ) : null}\n </div>\n </div>\n </div>\n\n <div className=\"mx-record-grid mx-monetization-card-primary-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_access_label\", undefined, \"Access\")}\n </div>\n <div className=\"mx-record-value is-strong\">{item.accessLabel}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_plan_label\", undefined, \"Plan\")}\n </div>\n <div className=\"mx-record-value is-strong\">{item.tierLabel}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_subscription_label\", undefined, \"Subscription\")}\n </div>\n <div className=\"mx-record-value\">{item.subscriptionStatus}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{item.balanceTitle}</div>\n <div className=\"mx-record-value is-strong\">{item.creditsRemaining}</div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">\n {t(\"activity.monetization_renews_at\", undefined, \"Renews at\")}\n </div>\n <div className=\"mx-record-value\">{item.renewsAt}</div>\n </div>\n </div>\n\n <div className=\"mx-monetization-card-secondary\">\n {item.hasNamedCurrency ? (\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"xapp.virtual_currency_label\", undefined, \"Currency\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">\n {item.virtualCurrencyLabel}\n </span>\n </div>\n ) : null}\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"activity.monetization_coverage_label\", undefined, \"Renewal state\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">\n {item.subscriptionCoverage}\n </span>\n </div>\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"activity.monetization_balance_state\", undefined, \"Balance status\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">\n {item.balanceState}\n </span>\n </div>\n <div className=\"mx-monetization-card-secondary-row\">\n <span className=\"mx-monetization-card-secondary-label\">\n {t(\"activity.monetization_source_label\", undefined, \"Origin\")}\n </span>\n <span className=\"mx-monetization-card-secondary-value\">{item.sourceLabel}</span>\n </div>\n </div>\n </div>\n </section>\n ))}\n </div>\n ) : null}\n </div>\n );\n}\n\nexport default MonetizationPage;\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport { readDefaultWidgetMeta } from \"../utils/xappWorkspace\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status, unread }: { status: string; unread: boolean }) {\n const { t } = useMarketplaceI18n();\n if (unread) {\n return (\n <span className=\"mx-badge mx-badge-warning\">{t(\"status.unread\", undefined, \"Unread\")}</span>\n );\n }\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className = normalized === \"COMPLETED\" ? \"mx-badge-success\" : \"mx-badge-danger\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype NotificationRecord = Record<string, unknown>;\n\nexport function NotificationsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const loc = useLocation();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedNotificationId = query.get(\"notificationId\") ?? \"\";\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n const [items, setItems] = useState<NotificationRecord[]>([]);\n const [focusedNotification, setFocusedNotification] = useState<NotificationRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [unreadCount, setUnreadCount] = useState(0);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n const [xappDefaultWidgetId, setXappDefaultWidgetId] = useState(\"\");\n const [xappDefaultWidgetName, setXappDefaultWidgetName] = useState(\"\");\n const [xappDefaultToolName, setXappDefaultToolName] = useState(\"\");\n const [xappOpenAppStrategy, setXappOpenAppStrategy] = useState<\"direct_widget\" | \"choose_widget\">(\n \"direct_widget\",\n );\n const xappInstallationId =\n installationIdFilter || host.getInstallationsByXappId?.()?.[xappIdFilter]?.installationId || \"\";\n const handleWorkspaceOpenApp =\n !isEmbedded &&\n xappOpenAppStrategy === \"direct_widget\" &&\n xappInstallationId &&\n xappDefaultWidgetId\n ? () => {\n host.openWidget({\n installationId: xappInstallationId,\n widgetId: xappDefaultWidgetId,\n xappId: xappIdFilter,\n xappTitle: xappTitle || xappIdFilter,\n widgetName: xappDefaultWidgetName,\n toolName: xappDefaultToolName || undefined,\n });\n }\n : undefined;\n async function refresh() {\n if (!client.listMyNotifications) {\n setError(\n t(\n \"activity.unavailable_notifications_title\",\n undefined,\n \"Notifications are unavailable in this host.\",\n ),\n );\n setItems([]);\n setUnreadCount(0);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyNotifications({\n notificationId: focusedNotificationId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n async function markRead(notificationId: string) {\n if (!client.markMyNotificationRead) return;\n try {\n const res = await client.markMyNotificationRead(notificationId);\n setItems((current) =>\n current.map((item) =>\n readString(item.id) === notificationId\n ? {\n ...item,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : item,\n ),\n );\n setFocusedNotification((current) =>\n current && readString(current.id) === notificationId\n ? {\n ...current,\n unread: false,\n read_at: new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n async function markAllRead() {\n if (!client.markAllMyNotificationsRead) return;\n try {\n const res = await client.markAllMyNotificationsRead();\n setItems((current) =>\n current.map((item) => ({\n ...item,\n unread: false,\n read_at: readString(item.read_at) || new Date().toISOString(),\n })),\n );\n setFocusedNotification((current) =>\n current\n ? {\n ...current,\n unread: false,\n read_at: readString(current.read_at) || new Date().toISOString(),\n }\n : current,\n );\n setUnreadCount(Number(res?.unread_count || 0));\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"notifications\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedNotificationId) {\n setFocusedNotification(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.listMyNotifications?.({\n notificationId: focusedNotificationId,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 1,\n });\n if (cancelled) return;\n const item = Array.isArray(res?.items) ? asRecord(res.items[0]) : null;\n setFocusedNotification(item);\n } catch (e) {\n if (cancelled) return;\n setFocusedNotification(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedNotificationId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n const widgetMeta = readDefaultWidgetMeta(\n res,\n locale,\n t(\"common.widget\", undefined, \"Widget\"),\n );\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n setXappDefaultWidgetId(widgetMeta?.widgetId || \"\");\n setXappDefaultWidgetName(widgetMeta?.widgetName || \"\");\n setXappDefaultToolName(widgetMeta?.toolName || \"\");\n setXappOpenAppStrategy(\n widgetMeta && widgetMeta.widgetCount > 1 ? \"choose_widget\" : \"direct_widget\",\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? (buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(String(xappIdFilter))}`, {\n token,\n }) as any)\n : null;\n\n const clearHref = buildMarketplaceHref(loc.pathname, \"notifications\", { token });\n const listHref = buildMarketplaceHref(loc.pathname, \"notifications\", {\n token,\n xappId: xappIdFilter,\n installationId: installationIdFilter,\n });\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={buildMarketplaceHref(loc.pathname, \"\", { token }) as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.notifications_title\", undefined, \"Notifications\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <div>\n <h1 className=\"mx-title\">\n {t(\"activity.notifications_title\", undefined, \"Notifications\")}\n </h1>\n {unreadCount > 0 ? (\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {t(\n \"activity.unread_count\",\n {\n count: unreadCount,\n suffix: unreadCount === 1 ? \"\" : \"s\",\n suffix2: unreadCount === 1 ? \"\" : \"e\",\n },\n `${unreadCount} unread item${unreadCount === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n ) : null}\n </div>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {client.markAllMyNotificationsRead && unreadCount > 0 && (\n <button className=\"mx-btn mx-btn-outline\" onClick={() => void markAllRead()}>\n {t(\"activity.mark_all_read\", undefined, \"Mark all read\")}\n </button>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {xappIdFilter ? (\n <XappWorkspaceNav\n xappId={xappIdFilter}\n xappTitle={xappTitle || xappIdFilter}\n isEmbedded={isEmbedded}\n token={token}\n installationId={xappInstallationId || undefined}\n active=\"notifications\"\n openWidgetId={xappDefaultWidgetId}\n openWidgetName={xappDefaultWidgetName}\n openToolName={xappDefaultToolName}\n openAppStrategy={xappOpenAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n ) : (\n <MarketplaceActivityTabs\n active=\"notifications\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n )}\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\n \"activity.showing_notifications_for_prefix\",\n undefined,\n \"Showing notification activity for\",\n )}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedNotificationId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.notification_detail\", undefined, \"Notification Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedNotificationId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_notification_list\", undefined, \"Back to notification list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedNotification ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge\n status={readString(focusedNotification.status)}\n unread={Boolean(focusedNotification.unread)}\n />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.trigger\", undefined, \"Trigger\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.trigger, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.channel\", undefined, \"Channel\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedNotification.channel, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.received\", undefined, \"Received\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedNotification.created_at) || \"\u2014\"}\n </div>\n </div>\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">{t(\"common.message\", undefined, \"Message\")}</div>\n <div className=\"mx-record-value\">\n {readFirstString(focusedNotification.message, \"\u2014\")}\n </div>\n </div>\n {(readString(focusedNotification.request_id) ||\n readString(focusedNotification.payment_session_id) ||\n readString(focusedNotification.reason)) && (\n <div className=\"mx-record-pill-row\">\n {readString(focusedNotification.request_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.request\", undefined, \"Request\")}:{\" \"}\n {readString(focusedNotification.request_id)}\n </span>\n ) : null}\n {readString(focusedNotification.payment_session_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.payment\", undefined, \"Payment\")}:{\" \"}\n {readString(focusedNotification.payment_session_id)}\n </span>\n ) : null}\n {readString(focusedNotification.reason) ? (\n <span className=\"mx-badge mx-badge-outline\">\n {t(\"common.reason\", undefined, \"Reason\")}:{\" \"}\n {readString(focusedNotification.reason)}\n </span>\n ) : null}\n </div>\n )}\n {Boolean(focusedNotification.unread) && client.markMyNotificationRead ? (\n <div className=\"mx-record-actions\">\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(focusedNotification.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\n \"activity.loading_notification_detail\",\n undefined,\n \"Loading notification details...\",\n )}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.trigger\", undefined, \"Trigger\")}</th>\n <th scope=\"col\">{t(\"common.channel\", undefined, \"Channel\")}</th>\n <th scope=\"col\">{t(\"common.message\", undefined, \"Message\")}</th>\n <th scope=\"col\">{t(\"common.received\", undefined, \"Received\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td colSpan={6} className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}>\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_notifications\", undefined, \"Loading notifications...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_notifications\", undefined, \"No notification activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.id, index)}>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} unread={Boolean(item.unread)} />\n </td>\n <td data-label={t(\"common.trigger\", undefined, \"Trigger\")}>\n {readFirstString(item.trigger, \"\u2014\")}\n </td>\n <td data-label={t(\"common.channel\", undefined, \"Channel\")}>\n {readFirstString(item.channel, \"\u2014\")}\n </td>\n <td data-label={t(\"common.message\", undefined, \"Message\")}>\n {readFirstString(item.message, \"\u2014\")}\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.received\", undefined, \"Received\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/notifications\" : \"/marketplace/notifications\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.id) qs.set(\"notificationId\", String(item.id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {Boolean(item.unread) && client.markMyNotificationRead ? (\n <button\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n onClick={() => void markRead(readString(item.id))}\n >\n {t(\"activity.mark_read\", undefined, \"Mark read\")}\n </button>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport { readDefaultWidgetMeta } from \"../utils/xappWorkspace\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction StatusBadge({ status }: { status: string }) {\n const { t } = useMarketplaceI18n();\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className =\n normalized === \"COMPLETED\"\n ? \"mx-badge-success\"\n : normalized === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return (\n <span className={`mx-badge ${className}`}>\n {normalized || t(\"status.read\", undefined, \"Read\")}\n </span>\n );\n}\n\ntype PaymentSessionRecord = Record<string, unknown>;\n\nexport function PaymentsPage() {\n const { client, host } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const loc = useLocation();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const installationIdFilter = query.get(\"installationId\") ?? \"\";\n const focusedPaymentSessionId = query.get(\"paymentSessionId\") ?? \"\";\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n const [items, setItems] = useState<PaymentSessionRecord[]>([]);\n const [focusedSession, setFocusedSession] = useState<PaymentSessionRecord | null>(null);\n const [focusedError, setFocusedError] = useState<string | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState(\"\");\n const [xappDefaultWidgetId, setXappDefaultWidgetId] = useState(\"\");\n const [xappDefaultWidgetName, setXappDefaultWidgetName] = useState(\"\");\n const [xappDefaultToolName, setXappDefaultToolName] = useState(\"\");\n const [xappOpenAppStrategy, setXappOpenAppStrategy] = useState<\"direct_widget\" | \"choose_widget\">(\n \"direct_widget\",\n );\n const xappInstallationId =\n installationIdFilter || host.getInstallationsByXappId?.()?.[xappIdFilter]?.installationId || \"\";\n const handleWorkspaceOpenApp =\n !isEmbedded &&\n xappOpenAppStrategy === \"direct_widget\" &&\n xappInstallationId &&\n xappDefaultWidgetId\n ? () => {\n host.openWidget({\n installationId: xappInstallationId,\n widgetId: xappDefaultWidgetId,\n xappId: xappIdFilter,\n xappTitle: xappTitle || xappIdFilter,\n widgetName: xappDefaultWidgetName,\n toolName: xappDefaultToolName || undefined,\n });\n }\n : undefined;\n async function refresh() {\n if (!client.listMyPaymentSessions) {\n setError(\n t(\n \"activity.unavailable_payments_title\",\n undefined,\n \"Payments are unavailable in this host.\",\n ),\n );\n setItems([]);\n setBusy(false);\n return;\n }\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyPaymentSessions({\n paymentSessionId: focusedPaymentSessionId || undefined,\n xappId: xappIdFilter || undefined,\n installationId: installationIdFilter || undefined,\n limit: 50,\n });\n setItems(Array.isArray(res?.items) ? res.items.map((item) => asRecord(item)) : []);\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"payments\",\n params: { xappId: xappIdFilter || null },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [focusedPaymentSessionId, installationIdFilter, xappIdFilter]);\n\n useEffect(() => {\n if (!focusedPaymentSessionId || !client.getMyPaymentSession) {\n setFocusedSession(null);\n setFocusedError(null);\n return;\n }\n let cancelled = false;\n setFocusedError(null);\n void (async () => {\n try {\n const res = await client.getMyPaymentSession!(focusedPaymentSessionId);\n if (cancelled) return;\n const session = asRecord(asRecord(res).session);\n setFocusedSession(Object.keys(session).length > 0 ? session : null);\n } catch (e) {\n if (cancelled) return;\n setFocusedSession(null);\n setFocusedError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, focusedPaymentSessionId]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n return;\n }\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n if (!alive) return;\n const manifest = asRecord(res?.manifest);\n const xapp = asRecord(res?.xapp);\n const widgetMeta = readDefaultWidgetMeta(\n res,\n locale,\n t(\"common.widget\", undefined, \"Widget\"),\n );\n setXappTitle(\n resolveMarketplaceText(manifest.title as any, locale) || readFirstString(xapp.name),\n );\n setXappDefaultWidgetId(widgetMeta?.widgetId || \"\");\n setXappDefaultWidgetName(widgetMeta?.widgetName || \"\");\n setXappDefaultToolName(widgetMeta?.toolName || \"\");\n setXappOpenAppStrategy(\n widgetMeta && widgetMeta.widgetCount > 1 ? \"choose_widget\" : \"direct_widget\",\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? (buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(String(xappIdFilter))}`, {\n token,\n }) as any)\n : null;\n\n const clearHref = buildMarketplaceHref(loc.pathname, \"payments\", { token });\n const listHref = buildMarketplaceHref(loc.pathname, \"payments\", {\n token,\n xappId: xappIdFilter,\n installationId: installationIdFilter,\n });\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={buildMarketplaceHref(loc.pathname, \"\", { token }) as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n {xappLink && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappLink}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.payments_title\", undefined, \"Payments\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.payments_title\", undefined, \"Payments\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {xappIdFilter ? (\n <XappWorkspaceNav\n xappId={xappIdFilter}\n xappTitle={xappTitle || xappIdFilter}\n isEmbedded={isEmbedded}\n token={token}\n installationId={xappInstallationId || undefined}\n active=\"billing\"\n billingActive=\"payments\"\n openWidgetId={xappDefaultWidgetId}\n openWidgetName={xappDefaultWidgetName}\n openToolName={xappDefaultToolName}\n openAppStrategy={xappOpenAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n ) : (\n <MarketplaceActivityTabs\n active=\"payments\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n installationId={installationIdFilter || undefined}\n />\n )}\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_payments_for_prefix\", undefined, \"Showing payment activity for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || xappIdFilter}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || xappIdFilter}</span>\n )}\n </div>\n )}\n\n {focusedPaymentSessionId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">\n {t(\"activity.payment_detail\", undefined, \"Payment Detail\")}\n </div>\n <div className=\"mx-record-panel-id\">{focusedPaymentSessionId}</div>\n </div>\n <Link to={listHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"activity.back_to_payment_list\", undefined, \"Back to payment list\")}\n </Link>\n </div>\n {focusedError ? (\n <div className=\"mx-alert mx-alert-error mx-alert-panel\">{focusedError}</div>\n ) : focusedSession ? (\n <div className=\"mx-record-grid\">\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.status\", undefined, \"Status\")}</div>\n <div className=\"mx-record-value\">\n <StatusBadge status={readString(focusedSession.status)} />\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.amount\", undefined, \"Amount\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.amount, \"\u2014\")}{\" \"}\n {readString(focusedSession.currency)}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.tool\", undefined, \"Tool\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.tool_name, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.provider\", undefined, \"Provider\")}</div>\n <div className=\"mx-record-value is-strong\">\n {readFirstString(focusedSession.provider_key, focusedSession.issuer, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.request\", undefined, \"Request\")}</div>\n <div className=\"mx-record-value is-mono\">\n {readFirstString(focusedSession.request_id, \"\u2014\")}\n </div>\n </div>\n <div className=\"mx-record-field\">\n <div className=\"mx-record-label\">{t(\"common.created\", undefined, \"Created\")}</div>\n <div className=\"mx-record-value\">\n {formatDateTime(focusedSession.created_at) || \"\u2014\"}\n </div>\n </div>\n {Array.isArray(focusedSession.invoices) && focusedSession.invoices.length > 0 && (\n <div className=\"mx-record-field is-span-full\">\n <div className=\"mx-record-label\">\n {t(\"activity.invoices_title\", undefined, \"Invoices\")}\n </div>\n <div className=\"mx-record-pill-row\">\n {focusedSession.invoices.map((invoice, index) => {\n const invoiceRecord = asRecord(invoice);\n return (\n <span\n key={readFirstString(invoiceRecord.id, index)}\n className=\"mx-badge mx-badge-outline\"\n >\n {readFirstString(\n invoiceRecord.invoice_identifier,\n invoiceRecord.id,\n t(\"common.invoice\", undefined, \"Invoice\"),\n )}\n </span>\n );\n })}\n </div>\n </div>\n )}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payment_detail\", undefined, \"Loading payment details...\")}\n </span>\n </div>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n {!xappIdFilter && <th scope=\"col\">{t(\"common.xapp\", undefined, \"Xapp\")}</th>}\n <th scope=\"col\">{t(\"common.session\", undefined, \"Session\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n <th scope=\"col\">{t(\"common.amount\", undefined, \"Amount\")}</th>\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n <th scope=\"col\">{t(\"common.action\", undefined, \"Action\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={xappIdFilter ? 6 : 7}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_payments\", undefined, \"Loading payments...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_payments\", undefined, \"No payment activity found.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((item, index) => (\n <tr key={readFirstString(item.payment_session_id, item.id, index)}>\n {!xappIdFilter && (\n <td data-label={t(\"common.xapp\", undefined, \"Xapp\")}>\n {readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}\n </td>\n )}\n <td\n className=\"mx-cell-mono\"\n data-label={t(\"common.session\", undefined, \"Session\")}\n >\n {readFirstString(item.payment_session_id, \"\u2014\")}\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n {readFirstString(item.tool_name, \"\u2014\")}\n </td>\n <td className=\"mx-cell-bold\" data-label={t(\"common.amount\", undefined, \"Amount\")}>\n {readString(item.amount)} {readString(item.currency)}\n </td>\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(item.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label={t(\"common.action\", undefined, \"Action\")}>\n <div className=\"mx-action-group\">\n <Link\n to={\n {\n pathname: isEmbedded ? \"/payments\" : \"/marketplace/payments\",\n search: (() => {\n const qs = new URLSearchParams();\n if (token) qs.set(\"token\", token);\n if (xappIdFilter || item.xapp_id)\n qs.set(\"xappId\", xappIdFilter || String(item.xapp_id));\n if (installationIdFilter || item.installation_id) {\n qs.set(\n \"installationId\",\n installationIdFilter || String(item.installation_id),\n );\n }\n if (item.payment_session_id)\n qs.set(\"paymentSessionId\", String(item.payment_session_id));\n return `?${qs.toString()}`;\n })(),\n } as any\n }\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n >\n {t(\"common.details\", undefined, \"Details\")}\n </Link>\n {item.resume_url ? (\n <a\n href={String(item.resume_url)}\n className=\"mx-btn mx-btn-outline mx-btn-sm\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {t(\"activity.resume_payment\", undefined, \"Resume\")}\n </a>\n ) : null}\n </div>\n </td>\n </tr>\n ))\n )}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { SchemaOutputView } from \"../components/SchemaOutputView\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport {\n resolvePaymentLockStateFromGuardSummary,\n type PaymentReconcileState,\n} from \"../utils/paymentLock\";\nimport { describeGuardCurrentAccess } from \"../utils/guardMonetization\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { shouldHideMarketplaceVersions } from \"../utils/installationPolicy\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { buildOperationalSurfaceHref } from \"../utils/operationalSurfaces\";\nimport {\n asRecord,\n formatDateTime,\n parseDateValue,\n readFirstString,\n readString,\n} from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction navigateToExternalOrHost(url: string): void {\n const next = String(url || \"\").trim();\n if (!next || typeof window === \"undefined\") return;\n try {\n if (window.parent && window.parent !== window) {\n window.parent.postMessage({ type: \"XAPPS_UI_NAVIGATE\", data: { path: next } }, \"*\");\n return;\n }\n } catch {\n // fall through to top-level navigation\n }\n window.location.href = next;\n}\n\nexport function RequestDetailPage() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { id } = useParams();\n const token = useQueryToken();\n const query = useQuery();\n const loc = useLocation();\n const navigate = useNavigate();\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n\n const tokenSearch = buildTokenSearch(token, loc.search);\n\n const [data, setData] = useState<unknown>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [reconcileBusy, setReconcileBusy] = useState(false);\n const [reconcileError, setReconcileError] = useState<string | null>(null);\n const [reconcileState, setReconcileState] = useState<PaymentReconcileState>(\"none\");\n const dataRecord = asRecord(data);\n const requestRecord = asRecord(dataRecord.request);\n const toolRecord = asRecord(dataRecord.tool);\n const manifestRecord = asRecord(dataRecord.manifest);\n const requestPayment = asRecord(requestRecord.payment);\n const requestPaymentSummary = asRecord(requestRecord.payment_summary);\n const status = readFirstString(requestRecord.status) || undefined;\n const isTerminal = status === \"COMPLETED\" || status === \"FAILED\";\n const effectiveXappId = readFirstString(requestRecord.xapp_id, xappIdFilter);\n const effectiveXappTitle =\n resolveMarketplaceText(manifestRecord.title as any, locale) ||\n readFirstString(requestRecord.xapp_name);\n const requestInstallationId = readFirstString(requestRecord.installation_id) || \"\";\n const widgets = Array.isArray(dataRecord.widgets) ? dataRecord.widgets.map(asRecord) : [];\n const defaultWidget = widgets.find((widget) => widget.default === true) || widgets[0] || null;\n const defaultWidgetId = readFirstString(defaultWidget?.id) || \"\";\n const defaultWidgetName =\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n readFirstString(defaultWidget?.widget_name) ||\n readFirstString(defaultWidget?.name) ||\n t(\"common.widget\", undefined, \"Widget\");\n const defaultWidgetToolName =\n readFirstString(defaultWidget?.bind_tool_name, requestRecord.tool_name) || \"\";\n const openAppStrategy =\n widgets.length > 1 ? \"choose_widget\" : defaultWidgetId ? \"direct_widget\" : \"choose_widget\";\n const hideVersions = shouldHideMarketplaceVersions({\n installationPolicy: env?.installationPolicy ?? host.installationPolicy ?? null,\n installationPolicyResolved: env?.installationPolicyResolved,\n subjectId: host.subjectId,\n });\n const xappCrumbLabel = effectiveXappTitle || effectiveXappId;\n const isEmbedded = typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n const handleWorkspaceOpenApp =\n !isEmbedded && openAppStrategy === \"direct_widget\" && requestInstallationId && defaultWidgetId\n ? () => {\n host.openWidget({\n installationId: requestInstallationId,\n widgetId: defaultWidgetId,\n xappId: effectiveXappId,\n xappTitle: effectiveXappTitle,\n widgetName: defaultWidgetName,\n toolName: defaultWidgetToolName || undefined,\n });\n }\n : undefined;\n\n const marketplaceTo = buildMarketplaceHref(loc.pathname, \"\", { token });\n\n const xappTo = effectiveXappId\n ? (buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(effectiveXappId)}`, {\n token,\n }) as any)\n : null;\n\n const backToRequests = buildMarketplaceHref(loc.pathname, \"requests\", {\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n ...(readHostReturnUrl(loc.search)\n ? { xapps_host_return_url: readHostReturnUrl(loc.search) }\n : {}),\n });\n\n async function refreshOnce() {\n if (!id) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getMyRequest(String(id));\n setData(res);\n if (\n !resolvePaymentLockStateFromGuardSummary(\n asRecord(asRecord(res).request).guard_summary ?? null,\n {\n requestStatus: readFirstString(asRecord(asRecord(res).request).status),\n paymentStatus: readFirstString(asRecord(asRecord(res).request).payment_status),\n t: (key, fallback) => t(key, undefined, fallback),\n },\n ).isLocked\n ) {\n setReconcileState(\"confirmed_paid\");\n }\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n if (!id) return;\n let alive = true;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n host.notifyNavigation?.({\n path: typeof window !== \"undefined\" ? window.location.pathname : \"\",\n page: \"request-detail\",\n params: { id },\n });\n\n void refreshOnce();\n\n timer = setInterval(async () => {\n try {\n const res = await client.getMyRequest(String(id));\n if (!alive) return;\n setData(res);\n const s = asRecord(asRecord(res).request).status;\n if (s === \"COMPLETED\" || s === \"FAILED\") {\n if (timer) clearInterval(timer);\n }\n } catch {\n // ignore background polling errors\n }\n }, 1500);\n\n return () => {\n alive = false;\n if (timer) clearInterval(timer);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const title =\n resolveMarketplaceText(toolRecord.title as any, locale) ||\n readFirstString(requestRecord.tool_name) ||\n t(\"activity.request_detail_title\", undefined, \"Request Details\");\n const artifacts = Array.isArray(dataRecord.artifacts) ? dataRecord.artifacts : [];\n\n function attachArtifactLinks(value: unknown, arts: unknown[]): unknown {\n if (typeof value === \"string\") {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === value);\n if (readString(match?.url)) {\n return {\n filename: readFirstString(match?.filename, value),\n url: readString(match?.url),\n mimeType: readString(match?.mime_type) || undefined,\n };\n }\n }\n if (Array.isArray(value)) {\n return value.map((item) => attachArtifactLinks(item, arts));\n }\n if (!value || typeof value !== \"object\") {\n return value;\n }\n const record = asRecord(value);\n const filename = readString(record.filename) || null;\n if (filename && !readString(record.url)) {\n const match = arts.map(asRecord).find((a) => readString(a.filename) === filename);\n if (readString(match?.url)) {\n return {\n ...record,\n url: readString(match?.url),\n mimeType: record.mimeType ?? match?.mime_type,\n };\n }\n }\n const next: Record<string, unknown> = {};\n for (const [key, val] of Object.entries(record)) {\n next[key] = attachArtifactLinks(val, arts);\n }\n return next;\n }\n\n if (env?.requestsEnabled === false) {\n const backToX = {\n pathname: isEmbedded ? \"/\" : \"/marketplace\",\n search: token ? `?token=${encodeURIComponent(token)}` : \"\",\n };\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToX as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n const responsePayload = useMemo(\n () => attachArtifactLinks(dataRecord.response ?? null, artifacts),\n [dataRecord, artifacts],\n );\n\n const outputSchema = useMemo(() => {\n const schema = toolRecord.output_schema;\n return schema && typeof schema === \"object\" ? asRecord(schema) : null;\n }, [toolRecord]);\n const requestPaymentLock = useMemo(\n () =>\n resolvePaymentLockStateFromGuardSummary(requestRecord.guard_summary ?? null, {\n requestStatus: readFirstString(requestRecord.status),\n paymentStatus: readFirstString(requestRecord.payment_status),\n reconcileState,\n t: (key, fallback) => t(key, undefined, fallback),\n }),\n [requestRecord.guard_summary, reconcileState, t],\n );\n const isPaymentPending =\n String(status || \"\")\n .trim()\n .toUpperCase() === \"PAYMENT_PENDING\";\n const showPaymentWaitState = requestPaymentLock.isLocked || isPaymentPending;\n const requestGuardCurrentAccess = describeGuardCurrentAccess(\n requestRecord.guard_summary ?? null,\n {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\"),\n },\n );\n const eventPaymentSessionId = useMemo(() => {\n const events = Array.isArray(dataRecord.events) ? dataRecord.events : [];\n for (let index = events.length - 1; index >= 0; index -= 1) {\n const candidate = readPaymentSessionIdFromUnknown(getEventPayload(events[index]));\n if (candidate) return candidate;\n }\n return \"\";\n }, [dataRecord.events]);\n const effectivePaymentSessionId =\n readFirstString(\n requestPaymentLock.paymentSessionId,\n requestRecord.payment_session_id,\n requestRecord.paymentSessionId,\n requestPayment.payment_session_id,\n requestPayment.paymentSessionId,\n requestPaymentSummary.payment_session_id,\n requestPaymentSummary.paymentSessionId,\n eventPaymentSessionId,\n ) || \"\";\n const directPaymentUrl =\n readFirstString(\n requestRecord.payment_resume_url,\n requestRecord.paymentResumeUrl,\n requestPayment.resume_url,\n requestPayment.resumeUrl,\n requestPaymentSummary.payment_resume_url,\n requestPaymentSummary.paymentResumeUrl,\n requestPaymentLock.actionUrl,\n ) || \"\";\n const paymentSurfaceHref = (() => {\n if (!effectivePaymentSessionId) return \"\";\n const installationId = readFirstString(requestRecord.installation_id) || undefined;\n if (effectiveXappId) {\n return buildOperationalSurfaceHref({\n surface: \"payments\",\n xappId: effectiveXappId,\n installationId,\n paymentSessionId: effectivePaymentSessionId,\n token: token || undefined,\n isEmbedded,\n currentPathname: loc.pathname,\n });\n }\n const params = new URLSearchParams({\n paymentSessionId: effectivePaymentSessionId,\n ...(installationId ? { installationId } : {}),\n ...(token ? { token } : {}),\n });\n return `${isEmbedded ? \"/payments\" : \"/marketplace/payments\"}?${params.toString()}`;\n })();\n\n function getEventPayload(ev: unknown): unknown | null {\n const eventRecord = asRecord(ev);\n if (!Object.keys(eventRecord).length) return null;\n const keys = [\"data\", \"payload\", \"details\", \"detail\", \"meta\", \"extra\", \"context\"];\n for (const k of keys) {\n const v = eventRecord[k];\n if (v !== undefined) return v;\n }\n const err = asRecord(eventRecord.error);\n if (Object.keys(err).length) {\n if (err.details) return err.details;\n if (err.data) return err.data;\n if (err.meta) return err.meta;\n }\n return null;\n }\n\n function readPaymentSessionIdFromUnknown(value: unknown): string {\n const record = asRecord(value);\n const direct = readFirstString(\n record.payment_session_id,\n record.paymentSessionId,\n asRecord(record.action).payment_session_id,\n asRecord(record.action).paymentSessionId,\n asRecord(record.guard).payment_session_id,\n asRecord(asRecord(record.guard).action).payment_session_id,\n asRecord(asRecord(record.guard).action).paymentSessionId,\n );\n if (direct) return direct;\n const url = readFirstString(\n record.url,\n record.payment_url,\n record.paymentUrl,\n asRecord(record.action).url,\n asRecord(asRecord(record.guard).action).url,\n );\n if (!url) return \"\";\n try {\n const parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : \"http://localhost\",\n );\n return (\n readFirstString(\n parsed.searchParams.get(\"payment_session_id\"),\n parsed.searchParams.get(\"paymentSessionId\"),\n ) || \"\"\n );\n } catch {\n return \"\";\n }\n }\n\n function extractGuardSummary(payload: unknown): {\n trigger: string;\n outcome: string;\n guardSlug: string;\n reason: string;\n actionKind: string;\n actionUrl: string;\n actionMessage: string;\n } | null {\n const p = asRecord(payload);\n const guard = asRecord(p.guard);\n const topAction = asRecord(p.action);\n const guardAction = asRecord(guard.action);\n const action = Object.keys(topAction).length > 0 ? topAction : guardAction;\n\n const trigger =\n readString(p.trigger) || readString(p.guardTrigger) || readString(p.guard_trigger);\n const outcome =\n readString(p.outcome) || readString(p.guardOutcome) || readString(p.guard_outcome);\n const guardSlug = readString(guard.slug) || readString(p.guardSlug) || readString(p.guard_slug);\n const reason =\n readString(guard.reason) ||\n readString(p.reason) ||\n readString(p.guardReason) ||\n readString(p.guard_reason);\n const actionKind = readString(action.kind);\n const actionUrl = readString(action.url);\n const actionMessage = readString(action.message);\n\n if (!trigger && !outcome && !guardSlug && !reason && !actionKind) return null;\n return { trigger, outcome, guardSlug, reason, actionKind, actionUrl, actionMessage };\n }\n\n function renderGuardActionLabel(summary: ReturnType<typeof extractGuardSummary>): string {\n if (!summary) return \"\";\n const suffix = summary.actionUrl ? ` (${summary.actionUrl})` : \"\";\n if (summary.actionKind === \"upgrade_subscription\") {\n return t(\n \"activity.guard_action_upgrade_subscription\",\n { suffix },\n \"Upgrade subscription{suffix}\",\n );\n }\n if (summary.actionKind === \"complete_payment\") {\n return t(\"activity.guard_action_complete_payment\", { suffix }, \"Complete payment{suffix}\");\n }\n if (summary.actionKind === \"step_up_auth\") {\n return t(\n \"activity.guard_action_step_up_authentication\",\n { suffix },\n \"Complete step-up authentication{suffix}\",\n );\n }\n if (summary.actionKind === \"confirm_action\") {\n return summary.actionMessage\n ? t(\n \"activity.guard_action_confirm_action_message\",\n { message: summary.actionMessage },\n \"Confirm action ({message})\",\n )\n : t(\"activity.guard_action_confirm_action\", undefined, \"Confirm action\");\n }\n return summary.actionKind\n ? t(\"activity.guard_action_custom\", { kind: summary.actionKind }, \"Action: {kind}\")\n : \"\";\n }\n\n function relativeTime(dateValue: unknown): string {\n try {\n const parsed = parseDateValue(dateValue);\n if (!parsed) return \"\";\n const now = Date.now();\n const then = parsed.getTime();\n if (Number.isNaN(then)) return \"\";\n const diff = now - then;\n if (diff < 0) return t(\"common.just_now\", undefined, \"just now\");\n const seconds = Math.floor(diff / 1000);\n if (seconds < 10) return t(\"common.just_now\", undefined, \"just now\");\n if (seconds < 60) return t(\"common.seconds_ago\", { value: seconds }, \"{value}s ago\");\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return t(\"common.minutes_ago\", { value: minutes }, \"{value}m ago\");\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return t(\"common.hours_ago\", { value: hours }, \"{value}h ago\");\n const days = Math.floor(hours / 24);\n return t(\"common.days_ago\", { value: days }, \"{value}d ago\");\n } catch {\n return \"\";\n }\n }\n\n const [expandedPayloads, setExpandedPayloads] = useState<Record<number, boolean>>({});\n const [timelineOpen, setTimelineOpen] = useState(false);\n\n function togglePayload(idx: number) {\n setExpandedPayloads((prev) => ({ ...prev, [idx]: !prev[idx] }));\n }\n\n function renderEventPayload(ev: unknown, idx: number) {\n const raw = getEventPayload(ev);\n if (raw == null) return null;\n const enriched = attachArtifactLinks(raw, artifacts);\n const isOpen = expandedPayloads[idx] ?? false;\n return (\n <>\n <button\n className={`mx-event-payload-toggle ${isOpen ? \"is-open\" : \"\"}`}\n onClick={() => togglePayload(idx)}\n type=\"button\"\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n {isOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"activity.show_details\", undefined, \"Show details\")}\n </button>\n {isOpen && (\n <div className=\"mx-event-payload-body\">\n <SchemaOutputView schema={null} value={enriched} />\n </div>\n )}\n </>\n );\n }\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n async function continuePayment() {\n if (client.reconcileMyRequestPayment && isPaymentPending) {\n setReconcileError(null);\n setReconcileState(\"confirming_payment\");\n setReconcileBusy(true);\n try {\n const hostReturnUrl = readHostReturnUrl(loc.search);\n const currentReturnUrl = String(\n hostReturnUrl || (typeof window !== \"undefined\" ? window.location.href : \"\") || \"\",\n ).trim();\n const res = await client.reconcileMyRequestPayment({\n requestId: String(id),\n paymentSessionId: isPaymentPending ? undefined : effectivePaymentSessionId || undefined,\n returnUrl: currentReturnUrl || undefined,\n cancelUrl: currentReturnUrl || undefined,\n });\n setReconcileState(res?.finality_state || \"none\");\n const redirectUrl = String(res?.redirect_url || \"\").trim();\n if (redirectUrl) {\n navigateToExternalOrHost(redirectUrl);\n return;\n }\n await refreshOnce();\n return;\n } catch (e) {\n setReconcileError(readFirstString(asRecord(e).message) || String(e));\n setReconcileState(\"failed\");\n return;\n } finally {\n setReconcileBusy(false);\n }\n }\n\n if (directPaymentUrl) {\n navigateToExternalOrHost(directPaymentUrl);\n return;\n }\n if (paymentSurfaceHref) {\n void navigate(paymentSurfaceHref);\n }\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {env?.singleXappMode && !env?.embedMode && (\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n )}\n {xappTo && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !env?.embedMode)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappTo}>{xappCrumbLabel}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToRequests as any}>\n {t(\"activity.requests_title\", undefined, \"Requests\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span className=\"mx-cell-mono\">{id?.slice(0, 8)}</span>\n </div>\n\n <div className=\"mx-detail-topbar\">\n <div className=\"mx-detail-topbar-left\">\n <Link to={backToRequests as any} relative=\"path\" className=\"mx-btn mx-btn-ghost\">\n \u2190 {t(\"activity.back_to_requests\", undefined, \"Back to Requests\")}\n </Link>\n <div className=\"mx-detail-topbar-title\">\n {xappCrumbLabel || t(\"activity.request_detail_title\", undefined, \"Request Details\")}\n </div>\n </div>\n <div className=\"mx-detail-topbar-right\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refreshOnce()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </div>\n\n {effectiveXappId ? (\n <XappWorkspaceNav\n xappId={effectiveXappId}\n xappTitle={effectiveXappTitle || effectiveXappId}\n isEmbedded={isEmbedded}\n token={token}\n installationId={requestInstallationId || undefined}\n active=\"requests\"\n openWidgetId={defaultWidgetId || undefined}\n openWidgetName={defaultWidgetName || undefined}\n openToolName={defaultWidgetToolName || undefined}\n openAppStrategy={openAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n ) : null}\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {busy && !data ? (\n <div className=\"mx-request-detail-skeleton\">\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-meta-grid\">\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n </div>\n </div>\n <div className=\"mx-request-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ) : (\n <div className=\"mx-detail-grid\">\n <div className=\"mx-detail-main\">\n <section className=\"mx-table-container mx-request-section\">\n <div className=\"mx-request-section-head\">\n <div>\n <h2 className=\"mx-title mx-request-section-title\">{title}</h2>\n <div className=\"mx-request-meta-row\">\n <span>{effectiveXappTitle || \"\u2014\"}</span>\n {!hideVersions && readString(requestRecord.xapp_version) && (\n <>\n <span>\u00B7</span>\n <span>v{readString(requestRecord.xapp_version)}</span>\n </>\n )}\n </div>\n </div>\n <StatusBadge status={status ?? \"\"} />\n </div>\n\n <div className=\"mx-request-meta-grid\">\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.request_id\", undefined, \"Request ID\")}\n </span>\n <code className=\"mx-request-code\">{id}</code>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.tool\", undefined, \"Tool\")}</span>\n <span className=\"mx-meta-value\">\n {title || readFirstString(requestRecord.tool_name) || \"\u2014\"}\n </span>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.created\", undefined, \"Created\")}</span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.created_at) || \"\u2014\"}\n </span>\n </div>\n {readString(requestRecord.completed_at) && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"common.completed\", undefined, \"Completed\")}\n </span>\n <span className=\"mx-meta-value\">\n {formatDateTime(requestRecord.completed_at) || \"\u2014\"}\n </span>\n </div>\n )}\n </div>\n </section>\n\n <section className=\"mx-table-container mx-request-section\">\n <h3 className=\"mx-section-title mx-section-title-md\">\n {t(\"activity.response_title\", undefined, \"Response\")}\n </h3>\n {showPaymentWaitState ? (\n <div className=\"mx-payment-lock-banner\">\n <div className=\"mx-payment-lock-title\">\n {isPaymentPending\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : t(\"activity.payment_required\", undefined, \"Payment Required\")}\n </div>\n <div className=\"mx-payment-lock-message\">\n {requestPaymentLock.isLocked\n ? requestPaymentLock.message\n : t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n {requestGuardCurrentAccess ? (\n <div className=\"mx-payment-lock-message\">\n {t(\n \"activity.current_access_detail\",\n { value: requestGuardCurrentAccess },\n \"Current access: {value}\",\n )}\n </div>\n ) : null}\n <div className=\"mx-payment-lock-actions\">\n {isPaymentPending ||\n effectivePaymentSessionId ||\n directPaymentUrl ||\n paymentSurfaceHref ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n onClick={() => void continuePayment()}\n disabled={reconcileBusy}\n >\n {t(\"activity.complete_payment\", undefined, \"Complete Payment\")}\n </button>\n ) : null}\n <button className=\"mx-btn mx-btn-secondary\" onClick={() => void refreshOnce()}>\n {t(\"activity.refresh_status\", undefined, \"Refresh Status\")}\n </button>\n </div>\n {reconcileError ? (\n <div className=\"mx-payment-lock-error\">{reconcileError}</div>\n ) : null}\n </div>\n ) : null}\n {!isTerminal ? (\n showPaymentWaitState ? (\n <div className=\"mx-waiting-state\">\n {t(\n \"activity.waiting_for_payment\",\n undefined,\n \"Waiting for payment confirmation\u2026\",\n )}\n </div>\n ) : (\n <div className=\"mx-waiting-state\">\n {t(\"activity.waiting_for_response\", undefined, \"Waiting for response\u2026\")}\n </div>\n )\n ) : (\n <SchemaOutputView schema={outputSchema} value={responsePayload} />\n )}\n </section>\n\n {Array.isArray(dataRecord.events) &&\n dataRecord.events.length > 0 &&\n (() => {\n const evts = dataRecord.events;\n const classifyEvent = (ev: unknown) => {\n const t = readString(asRecord(ev).type).toLowerCase();\n if (t.includes(\"fail\") || t.includes(\"error\") || t.includes(\"exception\"))\n return \"error\";\n if (t.includes(\"warn\") || t.includes(\"retry\")) return \"warn\";\n if (t.includes(\"complet\") || t.includes(\"success\") || t.includes(\"done\"))\n return \"success\";\n return \"default\";\n };\n const errorCount = evts.filter((e) => classifyEvent(e) === \"error\").length;\n const successCount = evts.filter((e) => classifyEvent(e) === \"success\").length;\n const firstTs = parseDateValue(asRecord(evts[0]).created_at);\n const lastTs = parseDateValue(asRecord(evts[evts.length - 1]).created_at);\n let durationLabel = \"\";\n if (firstTs && lastTs) {\n const ms = Math.abs(lastTs.getTime() - firstTs.getTime());\n if (ms < 1000) {\n durationLabel = t(\"activity.timeline_duration_ms\", { value: ms }, \"{value}ms\");\n } else if (ms < 60_000) {\n durationLabel = t(\n \"activity.timeline_duration_seconds\",\n { value: (ms / 1000).toFixed(1) },\n \"{value}s\",\n );\n } else {\n durationLabel = t(\n \"activity.timeline_duration_minutes\",\n { value: (ms / 60_000).toFixed(1) },\n \"{value}m\",\n );\n }\n }\n return (\n <section className=\"mx-table-container mx-request-section\">\n <button\n type=\"button\"\n className=\"mx-timeline-toggle\"\n onClick={() => setTimelineOpen((v) => !v)}\n aria-expanded={timelineOpen}\n >\n <svg\n className={`mx-timeline-chevron ${timelineOpen ? \"is-open\" : \"\"}`}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n <div className=\"mx-timeline-toggle-content\">\n <div className=\"mx-timeline-toggle-top\">\n <h3 className=\"mx-section-title mx-section-title-md mx-section-title-tight\">\n {t(\"activity.execution_timeline\", undefined, \"Execution Timeline\")}\n </h3>\n <span className=\"mx-timeline-count\">\n {evts.length === 1\n ? t(\n \"activity.timeline_count_one\",\n { count: evts.length },\n \"{count} event\",\n )\n : t(\n \"activity.timeline_count_other\",\n { count: evts.length },\n \"{count} events\",\n )}\n </span>\n </div>\n {!timelineOpen && (\n <div className=\"mx-timeline-summary\">\n <div className=\"mx-timeline-dots\">\n {evts.map((ev, i: number) => (\n <span\n key={i}\n className={`mx-timeline-mini-dot mx-timeline-mini-dot-${classifyEvent(ev)}`}\n />\n ))}\n </div>\n <div className=\"mx-timeline-summary-stats\">\n {errorCount > 0 && (\n <span className=\"mx-timeline-stat mx-timeline-stat-error\">\n {errorCount === 1\n ? t(\n \"activity.timeline_error_count_one\",\n { count: errorCount },\n \"{count} error\",\n )\n : t(\n \"activity.timeline_error_count_other\",\n { count: errorCount },\n \"{count} errors\",\n )}\n </span>\n )}\n {durationLabel && (\n <span className=\"mx-timeline-stat mx-timeline-stat-duration\">\n {durationLabel}\n </span>\n )}\n </div>\n </div>\n )}\n </div>\n </button>\n {timelineOpen && (\n <ol className=\"mx-timeline\">\n {dataRecord.events.map((ev, idx: number) => {\n const eventRecord = asRecord(ev);\n const typeText =\n readFirstString(eventRecord.type) ||\n t(\"activity.event_fallback\", undefined, \"event\");\n const lower = typeText.toLowerCase();\n const isErr =\n lower.includes(\"fail\") ||\n lower.includes(\"error\") ||\n lower.includes(\"exception\");\n const isWarn = lower.includes(\"warn\") || lower.includes(\"retry\");\n const isComplete =\n lower.includes(\"complet\") ||\n lower.includes(\"success\") ||\n lower.includes(\"done\");\n\n const dotClass = isErr\n ? \"mx-timeline-dot-error\"\n : isWarn\n ? \"mx-timeline-dot-warn\"\n : isComplete\n ? \"mx-timeline-dot-success\"\n : \"mx-timeline-dot-default\";\n\n const progress =\n typeof eventRecord.progress === \"number\" ? eventRecord.progress : null;\n const guardSummary =\n extractGuardSummary(ev) ??\n extractGuardSummary(getEventPayload(ev)) ??\n extractGuardSummary(eventRecord.payload);\n const guardActionLabel = renderGuardActionLabel(guardSummary);\n const guardMonetizationSource =\n getEventPayload(ev) ?? eventRecord.payload ?? ev;\n const guardCurrentAccess = describeGuardCurrentAccess(\n guardMonetizationSource,\n {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\n \"xapp.subscription_coverage_inactive\",\n undefined,\n \"Not covered\",\n ),\n },\n );\n\n return (\n <li\n key={readFirstString(eventRecord.id) || String(idx)}\n className=\"mx-timeline-item\"\n >\n <div className={`mx-timeline-dot ${dotClass}`}>\n {isErr ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n ) : isComplete ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <polyline points=\"20 6 9 17 4 12\" />\n </svg>\n ) : isWarn ? (\n <svg\n className=\"mx-timeline-dot-icon\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n >\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"13\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n ) : null}\n </div>\n <div\n className={`mx-event-card ${isErr ? \"mx-event-card-error\" : isWarn ? \"mx-event-card-warn\" : \"\"}`}\n >\n <div className=\"mx-event-head\">\n <div\n className={`mx-event-type ${isErr ? \"mx-event-type-error\" : isWarn ? \"mx-event-type-warn\" : \"\"}`}\n >\n {typeText}\n {readString(eventRecord.code) && (\n <span className=\"mx-event-code\">\n {readString(eventRecord.code)}\n </span>\n )}\n </div>\n <div className=\"mx-event-time\">\n <div className=\"mx-event-date\">\n {formatDateTime(eventRecord.created_at)}\n </div>\n {parseDateValue(eventRecord.created_at) && (\n <div className=\"mx-event-relative\">\n {relativeTime(eventRecord.created_at)}\n </div>\n )}\n </div>\n </div>\n\n {readString(eventRecord.message) && (\n <div className=\"mx-event-message\">\n {readString(eventRecord.message)}\n </div>\n )}\n\n {guardSummary && (\n <div className=\"mx-event-guard\">\n <div className=\"mx-event-guard-badges\">\n {guardSummary.guardSlug && (\n <span className=\"mx-badge\">\n {t(\n \"activity.guard_badge\",\n { value: guardSummary.guardSlug },\n \"guard: {value}\",\n )}\n </span>\n )}\n {guardSummary.trigger && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.trigger_badge\",\n { value: guardSummary.trigger },\n \"trigger: {value}\",\n )}\n </span>\n )}\n {guardSummary.outcome && (\n <span className=\"mx-badge mx-badge-success\">\n {t(\n \"activity.outcome_badge\",\n { value: guardSummary.outcome },\n \"outcome: {value}\",\n )}\n </span>\n )}\n {guardCurrentAccess && (\n <span className=\"mx-badge mx-badge-warning\">\n {t(\n \"activity.current_access_badge\",\n { value: guardCurrentAccess },\n \"access: {value}\",\n )}\n </span>\n )}\n </div>\n {(guardSummary.reason || guardActionLabel) && (\n <div className=\"mx-event-guard-detail\">\n {guardSummary.reason\n ? t(\n \"activity.reason_detail\",\n { value: guardSummary.reason },\n \"reason={value}\",\n )\n : \"\"}\n {guardSummary.reason && guardActionLabel ? \" \u00B7 \" : \"\"}\n {guardActionLabel}\n </div>\n )}\n </div>\n )}\n\n {progress != null && (\n <div className=\"mx-event-progress-track\">\n <div\n className={`mx-event-progress-bar ${isErr ? \"mx-event-progress-error\" : \"mx-event-progress-default\"}`}\n style={{\n width: `${Math.max(0, Math.min(100, progress <= 1 ? progress * 100 : progress))}%`,\n }}\n />\n </div>\n )}\n\n {renderEventPayload(ev, idx)}\n </div>\n </li>\n );\n })}\n </ol>\n )}\n </section>\n );\n })()}\n </div>\n\n <aside className=\"mx-detail-sidebar\">\n {artifacts.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.artifacts_title\", undefined, \"Artifacts\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {artifacts.map((a) => {\n const artifact = asRecord(a);\n return (\n <a\n key={readFirstString(artifact.id, artifact.url, artifact.filename)}\n href={readFirstString(artifact.url) || \"#\"}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-sidebar-artifact-link\"\n >\n {readFirstString(artifact.filename) ||\n t(\"activity.download_artifact\", undefined, \"Download Artifact\")}\n </a>\n );\n })}\n </div>\n </div>\n )}\n\n {readString(requestRecord.installation_id) &&\n Array.isArray(dataRecord.widgets) &&\n dataRecord.widgets.length > 0 && (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.related_widgets_title\", undefined, \"Related Widgets\")}\n </h3>\n <div className=\"mx-sidebar-stack\">\n {(Array.isArray(dataRecord.widgets) ? dataRecord.widgets : []).map((w) => {\n const widget = asRecord(w);\n return (\n <button\n key={readFirstString(widget.id)}\n className=\"mx-btn mx-btn-primary mx-btn-sidebar\"\n onClick={() => {\n const installationId = readFirstString(requestRecord.installation_id);\n const widgetId = readFirstString(widget.id);\n const widgetName =\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\");\n if (!installationId || !widgetId) return;\n\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n\n host.openWidget({\n installationId,\n widgetId,\n xappId: readString(requestRecord.xapp_id),\n xappTitle: effectiveXappTitle,\n widgetName,\n toolName: readString(requestRecord.tool_name),\n });\n }}\n >\n {t(\n \"activity.open_widget\",\n {\n widget:\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n },\n `Open ${\n resolveMarketplaceText(widget.title as any, locale) ||\n readFirstString(widget.widget_name) ||\n t(\"common.widget\", undefined, \"Widget\")\n }`,\n )}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"activity.help_title\", undefined, \"Help\")}\n </h3>\n <p className=\"mx-sidebar-help-text\">\n {t(\n \"activity.help_request\",\n undefined,\n \"Need help with this request? Contact your administrator with the Request ID above.\",\n )}\n </p>\n <Link to={backToRequests as any} className=\"mx-btn mx-btn-outline mx-btn-sidebar\">\n {t(\"activity.back_to_requests\", undefined, \"Back to Requests\")}\n </Link>\n </div>\n </aside>\n </div>\n )}\n </div>\n );\n}\n", "import React from \"react\";\n\ntype JsonSchema = Record<string, unknown> | null;\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction isPrimitive(value: unknown) {\n return value == null || [\"string\", \"number\", \"boolean\"].includes(typeof value);\n}\n\nfunction asArtifactLink(\n value: unknown,\n): { filename?: string; url: string; mimeType?: string } | null {\n const record = asRecord(value);\n if (typeof record.url === \"string\") {\n return {\n filename: typeof record.filename === \"string\" ? record.filename : undefined,\n url: record.url,\n mimeType: typeof record.mimeType === \"string\" ? record.mimeType : undefined,\n };\n }\n return null;\n}\n\nfunction Field({ label, children }: { label: string; children: React.ReactNode }) {\n return (\n <div style={{ display: \"grid\", gap: 6, padding: \"8px 0\", borderBottom: \"1px solid #f3f4f6\" }}>\n <div style={{ fontSize: 12, color: \"#6b7280\" }}>{label}</div>\n <div>{children}</div>\n </div>\n );\n}\n\nfunction renderValue(schema: JsonSchema | undefined, value: unknown): React.ReactNode {\n const artifact = asArtifactLink(value);\n if (artifact) {\n return (\n <a href={artifact.url} target=\"_blank\" rel=\"noreferrer\">\n {artifact.filename ?? artifact.url}\n </a>\n );\n }\n\n if (isPrimitive(value)) {\n return (\n <code style={{ fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\" }}>\n {String(value)}\n </code>\n );\n }\n\n if (Array.isArray(value)) {\n const itemSchema = asRecord(schema?.items);\n return (\n <div style={{ display: \"grid\", gap: 8 }}>\n {value.map((v, idx) => (\n <div key={idx} style={{ padding: 10, border: \"1px solid #e5e7eb\", borderRadius: 10 }}>\n {renderValue(itemSchema, v)}\n </div>\n ))}\n </div>\n );\n }\n\n // object\n const props = asRecord(schema?.properties);\n const valueRecord = asRecord(value);\n const keys = Object.keys(props).length ? Object.keys(props) : Object.keys(valueRecord);\n return (\n <div>\n {keys.map((k) => (\n <Field key={k} label={asRecord(props[k]).title ? String(asRecord(props[k]).title) : k}>\n {renderValue(asRecord(props[k]), valueRecord[k])}\n </Field>\n ))}\n </div>\n );\n}\n\nexport function SchemaOutputView({ schema, value }: { schema: JsonSchema; value: unknown }) {\n if (!schema) {\n return (\n <pre\n style={{\n margin: 0,\n overflow: \"auto\",\n background: \"#f8fafc\",\n padding: 12,\n borderRadius: 12,\n }}\n >\n {JSON.stringify(value, null, 2)}\n </pre>\n );\n }\n\n return <div>{renderValue(schema, value)}</div>;\n}\n", "export type PaymentReconcileState =\n | \"none\"\n | \"confirming_payment\"\n | \"still_pending\"\n | \"confirmed_paid\"\n | \"failed\";\n\nexport type PaymentLockResolution = {\n isLocked: boolean;\n reason: string;\n actionKind: string;\n actionUrl: string;\n ctaLabel: string;\n message: string;\n paymentSessionId: string | null;\n paymentAttemptState: string;\n reconcileState: PaymentReconcileState;\n monetizationState: Record<string, unknown> | null;\n};\n\ntype PaymentLockTranslate = (key: string, fallback: string) => string;\ntype PaymentLockOptions = {\n reconcileState?: PaymentReconcileState | null;\n requestStatus?: string | null;\n paymentStatus?: string | null;\n t?: PaymentLockTranslate;\n};\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction resolveAction(summary: Record<string, unknown>): Record<string, unknown> {\n const topAction = asRecord(summary.action);\n if (Object.keys(topAction).length > 0) return topAction;\n const details = asRecord(summary.details);\n const detailsAction = asRecord(details.action);\n if (Object.keys(detailsAction).length > 0) return detailsAction;\n const guard = asRecord(summary.guard);\n const guardAction = asRecord(guard.action);\n if (Object.keys(guardAction).length > 0) return guardAction;\n return {};\n}\n\nfunction normalizeActionKind(raw: string): string {\n return readString(raw).toLowerCase();\n}\n\nfunction resolveText(t: PaymentLockTranslate | undefined, key: string, fallback: string): string {\n return typeof t === \"function\" ? t(key, fallback) : fallback;\n}\n\nfunction isSettledPaymentStatus(value: unknown): boolean {\n const normalized = readString(value).toLowerCase();\n return (\n normalized === \"paid\" ||\n normalized === \"settled\" ||\n normalized === \"succeeded\" ||\n normalized === \"completed\"\n );\n}\n\nfunction resolveCtaLabel(actionKind: string, t?: PaymentLockTranslate): string {\n if (actionKind === \"complete_payment\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n if (actionKind === \"payment_required\") {\n return resolveText(t, \"payment_lock.complete_payment\", \"Complete Payment\");\n }\n return resolveText(t, \"payment_lock.continue\", \"Continue\");\n}\n\nfunction resolveLockMessage(\n reason: string,\n paymentAttemptState: string,\n reconcileState: PaymentReconcileState,\n t?: PaymentLockTranslate,\n): string {\n if (reconcileState === \"confirming_payment\") {\n return resolveText(\n t,\n \"payment_lock.confirming_payment_finality\",\n \"Confirming payment finality with provider.\",\n );\n }\n if (reconcileState === \"still_pending\") {\n return resolveText(\n t,\n \"payment_lock.pending_retry_confirm\",\n \"Payment is still pending at provider. Retry confirm in a few seconds.\",\n );\n }\n if (reconcileState === \"confirmed_paid\") {\n return resolveText(\n t,\n \"payment_lock.confirmed_refresh\",\n \"Payment is confirmed. Refresh to continue.\",\n );\n }\n if (reconcileState === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.not_settled_new_attempt\",\n \"Payment is not settled. Complete a new payment attempt.\",\n );\n }\n const attempt = readString(paymentAttemptState).toLowerCase();\n if (attempt === \"requires_action\") {\n return resolveText(\n t,\n \"payment_lock.requires_additional_action\",\n \"Payment requires additional action. Complete payment to continue.\",\n );\n }\n if (attempt === \"failed\") {\n return resolveText(\n t,\n \"payment_lock.attempt_failed\",\n \"Last payment attempt failed. Complete payment to continue.\",\n );\n }\n if (attempt === \"replayed\") {\n return resolveText(\n t,\n \"payment_lock.evidence_used\",\n \"Payment evidence was already used. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_receipt_already_used\") {\n return resolveText(\n t,\n \"payment_lock.evidence_consumed\",\n \"Payment evidence was already consumed. Start a new payment attempt.\",\n );\n }\n if (reason === \"payment_evidence_missing\" || reason === \"payment_required\") {\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n }\n return resolveText(\n t,\n \"payment_lock.required_before_request\",\n \"Payment is required before this request can proceed.\",\n );\n}\n\nexport function resolvePaymentLockStateFromGuardSummary(\n summaryInput: unknown,\n options?: PaymentLockOptions,\n): PaymentLockResolution {\n const summary = asRecord(summaryInput);\n const action = resolveAction(summary);\n const actionKind = normalizeActionKind(String(action.kind ?? summary.reason ?? \"\"));\n const actionUrl = readString(action.url);\n const reason = readString(summary.reason).toLowerCase();\n const monetizationState = asRecord(summary.monetization_state);\n const paymentSessionId =\n readString(monetizationState.payment_session_id) || readString(action.payment_session_id);\n const paymentAttemptState = readString(monetizationState.payment_attempt_state).toLowerCase();\n const reconcileState = ((): PaymentReconcileState => {\n const candidate = readString(options?.reconcileState).toLowerCase();\n if (\n candidate === \"confirming_payment\" ||\n candidate === \"still_pending\" ||\n candidate === \"confirmed_paid\" ||\n candidate === \"failed\"\n ) {\n return candidate;\n }\n return \"none\";\n })();\n const isPaymentKind = actionKind === \"complete_payment\" || actionKind === \"payment_required\";\n const isPaymentReason =\n reason === \"payment_required\" ||\n reason === \"payment_evidence_missing\" ||\n reason === \"payment_receipt_already_used\";\n const requestStatus = readString(options?.requestStatus).toUpperCase();\n const paymentSettled = isSettledPaymentStatus(options?.paymentStatus);\n const isHeldForPayment = requestStatus === \"PAYMENT_PENDING\";\n const isResolvedPastHold = paymentSettled && requestStatus !== \"\" && !isHeldForPayment;\n const isLocked = !isResolvedPastHold && (isPaymentKind || isPaymentReason);\n\n return {\n isLocked,\n reason,\n actionKind,\n actionUrl,\n ctaLabel: resolveCtaLabel(actionKind, options?.t),\n message: resolveLockMessage(reason, paymentAttemptState, reconcileState, options?.t),\n paymentSessionId: paymentSessionId || null,\n paymentAttemptState: paymentAttemptState || \"unknown\",\n reconcileState,\n monetizationState: Object.keys(monetizationState).length > 0 ? monetizationState : null,\n };\n}\n", "function asRecord(value: unknown): Record<string, unknown> {\n return value && typeof value === \"object\" ? (value as Record<string, unknown>) : {};\n}\n\nexport function readGuardMonetizationState(input: unknown): Record<string, unknown> | null {\n const root = asRecord(input);\n const details = asRecord(root.details);\n const guard = asRecord(root.guard);\n const guardDetails = asRecord(guard.details);\n const candidates = [\n asRecord(root.monetization_state),\n asRecord(details.monetization_state),\n asRecord(guardDetails.monetization_state),\n ];\n for (const candidate of candidates) {\n if (Object.keys(candidate).length > 0) return candidate;\n }\n return null;\n}\n\nexport function readGuardHasCurrentAccess(input: unknown): boolean | null {\n const value = readGuardMonetizationState(input)?.has_current_access;\n return typeof value === \"boolean\" ? value : null;\n}\n\nexport function describeGuardCurrentAccess(\n input: unknown,\n labels: { available: string; unavailable: string },\n): string {\n const hasCurrentAccess = readGuardHasCurrentAccess(input);\n if (hasCurrentAccess === null) return \"\";\n return hasCurrentAccess ? labels.available : labels.unavailable;\n}\n", "import type {\n CatalogXappDetail,\n MarketplaceClient,\n MarketplaceEnv,\n OperationalSurfacePlacement,\n OperationalSurfacesDescriptor,\n} from \"../types\";\nimport { buildMarketplaceHref } from \"./marketplaceRouting\";\n\nexport type OperationalSurfaceKey = keyof OperationalSurfacesDescriptor;\n\nfunction readPathEmbedded(): boolean {\n return typeof window !== \"undefined\" && window.location.pathname.startsWith(\"/embed\");\n}\n\nexport function getOperationalSurfaces(\n detail: CatalogXappDetail | null | undefined,\n): OperationalSurfacesDescriptor | null {\n const value = detail?.operational_surfaces;\n if (!value || typeof value !== \"object\") return null;\n return value;\n}\n\nfunction readOperationalSurfaceMode(input: {\n env?: MarketplaceEnv;\n isEmbedded: boolean;\n}): \"contract\" | \"testing_all\" {\n const policy = input.env?.operationalSurfacesVisibility;\n return input.isEmbedded ? (policy?.embed ?? \"contract\") : (policy?.portal ?? \"contract\");\n}\n\nexport function isOperationalSurfaceVisible(\n detail: CatalogXappDetail | null | undefined,\n surface: OperationalSurfaceKey,\n options?: { isEmbedded?: boolean },\n): boolean {\n const surfaces = getOperationalSurfaces(detail);\n const descriptor = surfaces?.[surface];\n if (!descriptor?.enabled) return false;\n const isEmbedded = options?.isEmbedded ?? readPathEmbedded();\n return isEmbedded ? descriptor.visibility.embed : descriptor.visibility.portal;\n}\n\nexport function surfaceClientAvailable(\n client: MarketplaceClient,\n surface: OperationalSurfaceKey,\n): boolean {\n if (surface === \"requests\") return typeof client.listMyRequests === \"function\";\n if (surface === \"monetization\") return typeof client.getMyXappMonetization === \"function\";\n if (surface === \"payments\") return typeof client.listMyPaymentSessions === \"function\";\n if (surface === \"invoices\") return typeof client.listMyInvoices === \"function\";\n if (surface === \"notifications\") return typeof client.listMyNotifications === \"function\";\n return false;\n}\n\nexport function buildOperationalSurfaceHref(input: {\n surface: OperationalSurfaceKey;\n xappId: string;\n installationId?: string;\n requestId?: string;\n paymentSessionId?: string;\n invoiceId?: string;\n notificationId?: string;\n token?: string;\n isEmbedded?: boolean;\n currentPathname?: string;\n}): string {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const detailSegment =\n input.surface === \"requests\" && input.requestId\n ? `/${encodeURIComponent(input.requestId)}`\n : \"\";\n const currentPathname =\n input.currentPathname ||\n (typeof window !== \"undefined\" && window.location.pathname && window.location.pathname !== \"/\"\n ? window.location.pathname\n : isEmbedded\n ? \"/embed/catalog\"\n : \"/marketplace\");\n const href = buildMarketplaceHref(currentPathname, `${input.surface}${detailSegment}`, {\n xappId: input.xappId,\n installationId: input.installationId,\n paymentSessionId: input.paymentSessionId,\n invoiceId: input.invoiceId,\n notificationId: input.notificationId,\n token: input.token,\n });\n return `${href.pathname}${href.search}`;\n}\n\nexport function getVisibleOperationalSurfaces(input: {\n detail: CatalogXappDetail | null | undefined;\n client: MarketplaceClient;\n env?: MarketplaceEnv;\n isEmbedded?: boolean;\n}): OperationalSurfaceKey[] {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const mode = readOperationalSurfaceMode({\n env: input.env,\n isEmbedded,\n });\n const allSurfaces = [\n \"requests\",\n \"monetization\",\n \"payments\",\n \"invoices\",\n \"notifications\",\n ] as OperationalSurfaceKey[];\n if (mode === \"testing_all\") {\n return allSurfaces.filter((surface) => {\n if (surface === \"requests\" && input.env?.requestsEnabled === false) return false;\n return surfaceClientAvailable(input.client, surface);\n });\n }\n const surfaces = getOperationalSurfaces(input.detail);\n if (!surfaces) return [];\n return allSurfaces.filter(\n (surface) =>\n surfaceClientAvailable(input.client, surface) &&\n isOperationalSurfaceVisible(input.detail, surface, { isEmbedded }),\n );\n}\n\nexport function getOperationalSurfaceLabel(surface: OperationalSurfaceKey): string {\n if (surface === \"requests\") return \"Requests\";\n if (surface === \"monetization\") return \"Monetization\";\n if (surface === \"payments\") return \"Payments\";\n if (surface === \"invoices\") return \"Invoices\";\n return \"Notifications\";\n}\n\nexport function resolveOperationalSurfacePlacement(input: {\n env?: MarketplaceEnv;\n surface: OperationalSurfaceKey;\n isEmbedded?: boolean;\n}): OperationalSurfacePlacement {\n const isEmbedded = input.isEmbedded ?? readPathEmbedded();\n const policy = input.env?.operationalSurfacePlacement;\n const scopePolicy = isEmbedded ? policy?.embed : policy?.portal;\n const bySurface = scopePolicy?.bySurface?.[input.surface];\n if (bySurface) return bySurface;\n return scopePolicy?.default ?? \"in_router\";\n}\n\nexport async function discoverOperationalSurfaceData(input: {\n client: MarketplaceClient;\n xappId: string;\n installationId?: string | null;\n}): Promise<OperationalSurfaceKey[]> {\n const xappId = String(input.xappId || \"\").trim();\n const installationId = String(input.installationId || \"\").trim();\n if (!xappId) return [];\n\n const queryBase = {\n xappId,\n ...(installationId ? { installationId } : {}),\n };\n\n const checks = await Promise.all([\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.getMyXappMonetization !== \"function\") return null;\n try {\n const res = await input.client.getMyXappMonetization(xappId, {\n installationId: installationId || null,\n });\n const paywalls = Array.isArray((res as any)?.paywalls) ? (res as any).paywalls : [];\n const accessProjection =\n res && typeof res === \"object\" ? ((res as any).access_projection ?? null) : null;\n const currentSubscription =\n res && typeof res === \"object\" ? ((res as any).current_subscription ?? null) : null;\n return paywalls.length > 0 || accessProjection || currentSubscription\n ? \"monetization\"\n : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyPaymentSessions !== \"function\") return null;\n try {\n const res = await input.client.listMyPaymentSessions({\n ...queryBase,\n limit: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"payments\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyInvoices !== \"function\") return null;\n try {\n const res = await input.client.listMyInvoices({\n ...queryBase,\n page: 1,\n pageSize: 1,\n });\n return Array.isArray(res?.items) && res.items.length > 0 ? \"invoices\" : null;\n } catch {\n return null;\n }\n })(),\n (async (): Promise<OperationalSurfaceKey | null> => {\n if (typeof input.client.listMyNotifications !== \"function\") return null;\n try {\n const res = await input.client.listMyNotifications({\n ...queryBase,\n limit: 1,\n });\n return (Array.isArray(res?.items) && res.items.length > 0) ||\n Number(res?.unread_count || 0) > 0\n ? \"notifications\"\n : null;\n } catch {\n return null;\n }\n })(),\n ]);\n\n return checks.filter((surface): surface is OperationalSurfaceKey => Boolean(surface));\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplaceActivityTabs } from \"../components/MarketplaceActivityTabs\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport { shouldHideMarketplaceVersions } from \"../utils/installationPolicy\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, formatDateTime, readFirstString, readString } from \"../utils/readers\";\nimport { describeGuardCurrentAccess } from \"../utils/guardMonetization\";\nimport { readDefaultWidgetMeta } from \"../utils/xappWorkspace\";\nimport \"../marketplace.css\";\n\ntype RequestListPagination = {\n total: number;\n page: number;\n pageSize: number;\n totalPages: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQuery(): URLSearchParams {\n const loc = useLocation();\n return useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n}\n\nfunction renderGuardActionHint(summary: Record<string, unknown>): string {\n const action = asRecord(summary.action);\n const kind = readString(action.kind);\n if (kind === \"upgrade_subscription\") return \"Upgrade subscription\";\n if (kind === \"complete_payment\") return \"Complete payment\";\n if (kind === \"step_up_auth\") return \"Complete step-up authentication\";\n if (kind === \"confirm_action\") {\n const msg = readString(action.message);\n return msg ? `Confirm action (${msg})` : \"Confirm action\";\n }\n return kind ? `Action: ${kind}` : \"\";\n}\n\nexport function RequestsPage() {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const token = useQueryToken();\n const loc = useLocation();\n const query = useQuery();\n\n const xappIdFilter = query.get(\"xappId\") ?? \"\";\n const pageParam = Math.max(1, parseInt(query.get(\"page\") ?? \"1\", 10) || 1);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const [items, setItems] = useState<unknown[]>([]);\n const [pagination, setPagination] = useState<RequestListPagination | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n const [xappDefaultWidgetId, setXappDefaultWidgetId] = useState(\"\");\n const [xappDefaultWidgetName, setXappDefaultWidgetName] = useState(\"\");\n const [xappDefaultToolName, setXappDefaultToolName] = useState(\"\");\n const [xappOpenAppStrategy, setXappOpenAppStrategy] = useState<\"direct_widget\" | \"choose_widget\">(\n \"direct_widget\",\n );\n const hideVersions = shouldHideMarketplaceVersions({\n installationPolicy: env?.installationPolicy ?? host.installationPolicy ?? null,\n installationPolicyResolved: env?.installationPolicyResolved,\n subjectId: host.subjectId,\n });\n const xappInstallationId =\n host.getInstallationsByXappId?.()?.[xappIdFilter]?.installationId || \"\";\n const handleWorkspaceOpenApp =\n !isEmbedded &&\n xappOpenAppStrategy === \"direct_widget\" &&\n xappInstallationId &&\n xappDefaultWidgetId\n ? () => {\n host.openWidget({\n installationId: xappInstallationId,\n widgetId: xappDefaultWidgetId,\n xappId: xappIdFilter,\n xappTitle: xappTitle || xappIdFilter,\n widgetName: xappDefaultWidgetName,\n toolName: xappDefaultToolName || undefined,\n });\n }\n : undefined;\n\n async function refresh(page: number = 1) {\n setError(null);\n setBusy(true);\n try {\n const res = await client.listMyRequests({\n xappId: xappIdFilter || undefined,\n page,\n pageSize: 20,\n });\n setItems(Array.isArray(res.items) ? res.items : []);\n setPagination(\n res.pagination\n ? {\n total: Number(res.pagination.total || 0),\n page: Number(res.pagination.page || 1),\n pageSize: Number(res.pagination.pageSize || 20),\n totalPages: Number(res.pagination.totalPages || 1),\n }\n : null,\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh(pageParam);\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"requests\",\n params: { xappId: xappIdFilter },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [xappIdFilter, pageParam]);\n\n useEffect(() => {\n if (!xappIdFilter) {\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n return;\n }\n\n let alive = true;\n void (async () => {\n try {\n const res = await client.getCatalogXapp(String(xappIdFilter));\n const detail = asRecord(res);\n const name =\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name);\n const widgetMeta = readDefaultWidgetMeta(\n detail,\n locale,\n t(\"common.widget\", undefined, \"Widget\"),\n );\n if (!alive) return;\n setXappTitle(name);\n setXappDefaultWidgetId(widgetMeta?.widgetId || \"\");\n setXappDefaultWidgetName(widgetMeta?.widgetName || \"\");\n setXappDefaultToolName(widgetMeta?.toolName || \"\");\n setXappOpenAppStrategy(\n widgetMeta && widgetMeta.widgetCount > 1 ? \"choose_widget\" : \"direct_widget\",\n );\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n setXappDefaultWidgetId(\"\");\n setXappDefaultWidgetName(\"\");\n setXappDefaultToolName(\"\");\n setXappOpenAppStrategy(\"direct_widget\");\n }\n })();\n\n return () => {\n alive = false;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [locale, xappIdFilter]);\n\n const xappLink = xappIdFilter\n ? (buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(String(xappIdFilter))}`, {\n token,\n }) as any)\n : null;\n\n const backToContext =\n xappIdFilter && xappLink ? xappLink : buildMarketplaceHref(loc.pathname, \"\", { token });\n\n const emptyState = error === \"Subject required\" || error === \"Session token required\";\n\n const clearHref = buildMarketplaceHref(loc.pathname, \"requests\", { token });\n\n function StatusBadge({ status }: { status: string }) {\n const s = String(status || \"\");\n const normalized = s.trim().toUpperCase();\n const className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n const label =\n normalized === \"PAYMENT_PENDING\"\n ? t(\"activity.payment_pending\", undefined, \"Payment Pending\")\n : s || \"\u2014\";\n return <span className={`mx-badge ${className}`}>{label}</span>;\n }\n\n if (env?.requestsEnabled === false) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-table-container mx-unavailable\">\n <h2 className=\"mx-title mx-unavailable-title\">\n {t(\"activity.unavailable_requests_title\", undefined, \"Requests are unavailable\")}\n </h2>\n <p className=\"mx-unavailable-desc\">\n {t(\n \"activity.unavailable_requests_desc\",\n undefined,\n \"This public catalog does not support viewing personal requests.\",\n )}\n </p>\n <Link to={backToContext as any} className=\"mx-btn mx-btn-primary\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n </div>\n </div>\n );\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && (\n <Link to={buildMarketplaceHref(loc.pathname, \"\", { token }) as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {env?.singleXappMode && !isEmbedded && (\n <Link to={buildMarketplaceHref(loc.pathname, \"\", { token }) as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n )}\n {xappIdFilter && xappLink && (\n <>\n {(!env?.singleXappMode || (env?.singleXappMode && !isEmbedded)) && (\n <span className=\"mx-breadcrumb-sep\">/</span>\n )}\n <Link to={xappLink as any}>{xappTitle || xappIdFilter}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"activity.requests_title\", undefined, \"Requests\")}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{t(\"activity.requests_title\", undefined, \"Requests\")}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"activity\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {xappIdFilter ? (\n <XappWorkspaceNav\n xappId={xappIdFilter}\n xappTitle={xappTitle || xappIdFilter}\n isEmbedded={isEmbedded}\n token={token}\n installationId={xappInstallationId || undefined}\n active=\"requests\"\n openWidgetId={xappDefaultWidgetId}\n openWidgetName={xappDefaultWidgetName}\n openToolName={xappDefaultToolName}\n openAppStrategy={xappOpenAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n ) : (\n <MarketplaceActivityTabs\n active=\"requests\"\n isEmbedded={isEmbedded}\n token={token}\n xappId={xappIdFilter || undefined}\n />\n )}\n\n {emptyState ? (\n <div className=\"mx-table-container mx-alert mx-alert-info\">\n <div className=\"mx-alert-subject-title\">\n {t(\"activity.subject_required_title\", undefined, \"Subject required\")}\n </div>\n <div className=\"mx-alert-subject-desc\">\n {t(\n \"activity.subject_required_desc\",\n undefined,\n \"This host session is not associated with a user. Ask your host to create a catalog session with a subjectId.\",\n )}{\" \"}\n <code>subjectId</code>.\n </div>\n </div>\n ) : error ? (\n <div className=\"mx-table-container mx-alert mx-alert-error\">{error}</div>\n ) : null}\n\n {xappIdFilter && (\n <div className=\"mx-subtle-note\">\n {t(\"activity.showing_requests_for_prefix\", undefined, \"Showing requests for\")}{\" \"}\n {xappLink ? (\n <Link to={xappLink} className=\"mx-subtle-note-link\">\n {xappTitle || String(xappIdFilter)}\n </Link>\n ) : (\n <span className=\"mx-subtle-note-strong\">{xappTitle || String(xappIdFilter)}</span>\n )}\n </div>\n )}\n\n <div className=\"mx-table-container\">\n <table className=\"mx-table\" data-responsive=\"cards\">\n <thead>\n <tr>\n <th scope=\"col\">{t(\"common.id\", undefined, \"ID\")}</th>\n <th scope=\"col\">{t(\"common.tool\", undefined, \"Tool\")}</th>\n {!hideVersions && <th scope=\"col\">{t(\"common.version\", undefined, \"Version\")}</th>}\n <th scope=\"col\">{t(\"common.status\", undefined, \"Status\")}</th>\n <th scope=\"col\">{t(\"common.created\", undefined, \"Created\")}</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={5}\n data-label={t(\"common.status\", undefined, \"Status\")}\n className={busy ? \"mx-table-loading-cell\" : \"mx-table-empty-cell\"}\n >\n {busy ? (\n <div className=\"mx-loading-center mx-loading-table\">\n <div className=\"mx-spinner\" />\n <span>\n {t(\"activity.loading_requests\", undefined, \"Loading requests...\")}\n </span>\n </div>\n ) : (\n t(\"activity.no_requests\", undefined, \"No requests yet.\")\n )}\n </td>\n </tr>\n ) : (\n items.map((r) => {\n const request = asRecord(r);\n const manifest = asRecord(request.manifest);\n const href = {\n pathname: `./${encodeURIComponent(readFirstString(request.id))}`,\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n }).toString()}`,\n };\n\n const tags: string[] = Array.isArray(manifest.tags)\n ? manifest.tags\n .filter((t) => typeof t === \"string\" && t.trim())\n .map((t) => String(t).trim())\n : [];\n const guardSummary = asRecord(request.guard_summary);\n const guardSlug =\n readString(guardSummary.slug) || readString(guardSummary.guardSlug);\n const guardReason = readString(guardSummary.reason);\n const guardOutcome = readString(guardSummary.outcome);\n const guardActionHint = renderGuardActionHint(guardSummary);\n const guardAccessHint = describeGuardCurrentAccess(guardSummary, {\n available: t(\"common.available\", undefined, \"Available\"),\n unavailable: t(\"xapp.subscription_coverage_inactive\", undefined, \"Not covered\"),\n });\n const hasGuardInfo =\n Boolean(guardSlug) ||\n Boolean(guardReason) ||\n Boolean(guardActionHint) ||\n Boolean(guardAccessHint);\n\n return (\n <tr key={readFirstString(request.id)}>\n <td className=\"mx-cell-id\" data-label={t(\"common.id\", undefined, \"ID\")}>\n <Link to={href as any}>{readFirstString(request.id).slice(0, 8)}...</Link>\n </td>\n <td data-label={t(\"common.tool\", undefined, \"Tool\")}>\n <div className=\"mx-cell-bold\">\n {resolveMarketplaceText(request.tool_title as any, locale) ||\n readFirstString(request.tool_name) ||\n \"\u2014\"}\n </div>\n {tags.length > 0 && (\n <div className=\"mx-card-tags mx-card-tags-inline\">\n {tags.slice(0, 3).map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n )}\n {hasGuardInfo && (\n <div className=\"mx-guard-summary\">\n <div>\n {guardSlug ? `guard=${guardSlug}` : \"\"}\n {guardSlug && guardOutcome ? \" \u00B7 \" : \"\"}\n {guardOutcome ? `outcome=${guardOutcome}` : \"\"}\n {(guardSlug || guardOutcome) && guardReason ? \" \u00B7 \" : \"\"}\n {guardReason ? `reason=${guardReason}` : \"\"}\n </div>\n {guardActionHint && <div>{guardActionHint}</div>}\n {guardAccessHint && (\n <div>\n {t(\n \"activity.current_access_detail\",\n { value: guardAccessHint },\n \"Current access: {value}\",\n )}\n </div>\n )}\n </div>\n )}\n </td>\n {!hideVersions && (\n <td\n className=\"mx-cell-muted\"\n data-label={t(\"common.version\", undefined, \"Version\")}\n >\n {readString(request.xapp_version)\n ? `v${readString(request.xapp_version)}`\n : \"\u2014\"}\n </td>\n )}\n <td data-label={t(\"common.status\", undefined, \"Status\")}>\n <StatusBadge status={readString(request.status)} />\n </td>\n <td\n className=\"mx-cell-date\"\n data-label={t(\"common.created\", undefined, \"Created\")}\n >\n {formatDateTime(request.created_at) || \"\u2014\"}\n </td>\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n </div>\n\n {pagination && pagination.totalPages > 1 && (\n <div className=\"mx-pagination\">\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.max(1, pageParam - 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam <= 1 || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.previous\", undefined, \"Previous\")}\n </Link>\n <span className=\"mx-pagination-info\">\n {t(\n \"activity.page_of\",\n { page: pagination.page, totalPages: pagination.totalPages },\n `Page ${pagination.page} of ${pagination.totalPages}`,\n )}\n </span>\n <Link\n to={\n {\n pathname: \".\",\n search: `?${new URLSearchParams({\n ...(xappIdFilter ? { xappId: xappIdFilter } : {}),\n ...(token ? { token } : {}),\n page: String(Math.min(pagination.totalPages, pageParam + 1)),\n }).toString()}`,\n } as any\n }\n className={`mx-btn mx-btn-outline ${pageParam >= pagination.totalPages || busy ? \"is-disabled\" : \"\"}`}\n >\n {t(\"common.next\", undefined, \"Next\")}\n </Link>\n </div>\n )}\n </div>\n );\n}\n", "import { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport type { TranslateFunction } from \"@xapps-platform/platform-i18n\";\nimport {\n buildXmsSubscriptionLifecycleSummary,\n buildMonetizationHistorySurfaceHtml,\n buildMonetizationPaywallRenderModel,\n flattenXappMonetizationPaywallPackages,\n listXappMonetizationPaywalls,\n resolveMonetizationPackagePurchasePolicy,\n selectXappMonetizationPaywall,\n summarizeVirtualCurrencyBalances,\n} from \"@xapps-platform/browser-host/xms\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport {\n hasMarketplaceCatalogMonetization,\n resolveMarketplaceDefaultAccessState,\n} from \"../utils/monetizationAccess\";\nimport { shouldHideMarketplaceVersions } from \"../utils/installationPolicy\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport type {\n CatalogXappDetail,\n MarketplaceMonetizationAccessProjection,\n MarketplaceXappMonetizationState,\n} from \"../types\";\nimport \"../marketplace.css\";\n\ntype GuardInfo = {\n slug: string;\n label?: string;\n trigger: string;\n headless: boolean;\n blocking: boolean;\n order: number | null;\n policyKind: string;\n};\n\ntype UsageCreditToolSummary = {\n tool_name: string;\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n};\n\ntype UsageCreditSummary = {\n available_count: number;\n available_session_backed_count: number;\n available_ledger_only_count: number;\n reserved_count: number;\n reserved_active_count: number;\n reserved_stale_count: number;\n consumed_count: number;\n updated_at: string | null;\n by_tool: UsageCreditToolSummary[];\n};\n\ntype MonetizationPaywallRenderModel = ReturnType<typeof buildMonetizationPaywallRenderModel>;\ntype MonetizationPaywallRenderPackage = MonetizationPaywallRenderModel[\"packages\"][number];\ntype MonetizationPaywallPackageRecord = ReturnType<\n typeof flattenXappMonetizationPaywallPackages\n>[number];\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction useQueryAction(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"action\") ?? \"\";\n}\n\nfunction useQueryToolName(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"toolName\") ?? qs.get(\"tool_name\") ?? \"\";\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction readBoolean(value: unknown, fallback: boolean): boolean {\n return typeof value === \"boolean\" ? value : fallback;\n}\n\nfunction readNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction buildMonetizationCheckoutReturnUrl(input: {\n currentHref: string;\n intentId: string;\n packageSlug?: string | null;\n}): string {\n const url = new URL(input.currentHref, window.location.href);\n url.searchParams.set(\"focus\", \"plans\");\n url.searchParams.set(\"xapps_monetization_intent_id\", input.intentId);\n if (input.packageSlug) {\n url.searchParams.set(\"paywallPackage\", input.packageSlug);\n }\n return url.toString();\n}\n\nfunction buildHostedPaymentPageUrl(input: {\n currentHref: string;\n apiBaseUrl?: string | null;\n}): string {\n const apiBaseUrl = String(input.apiBaseUrl || \"\").trim();\n if (apiBaseUrl) {\n try {\n const apiUrl = new URL(apiBaseUrl, window.location.href);\n return `${apiUrl.origin}/v1/gateway-payment.html`;\n } catch {\n // fall through\n }\n }\n const url = new URL(input.currentHref, window.location.href);\n return `${url.origin}/v1/gateway-payment.html`;\n}\n\nfunction normalizeHostedCheckoutUrl(input: {\n paymentPageUrl: string;\n apiBaseUrl?: string | null;\n}): string {\n const raw = String(input.paymentPageUrl || \"\").trim();\n if (!raw) return \"\";\n try {\n const apiBaseUrl = String(input.apiBaseUrl || \"\").trim();\n if (apiBaseUrl) {\n return new URL(raw, apiBaseUrl).toString();\n }\n } catch {\n // fall through\n }\n try {\n return new URL(raw, window.location.href).toString();\n } catch {\n return raw;\n }\n}\n\nfunction navigateToHostedCheckout(url: string): void {\n const target = String(url || \"\").trim();\n if (!target) return;\n try {\n const opened = window.open(target, \"_top\");\n if (opened) return;\n } catch {\n // Fall through to direct location assignment attempts below.\n }\n try {\n if (typeof window !== \"undefined\" && window.top && window.top !== window) {\n window.top.location.assign(target);\n return;\n }\n } catch {\n // Cross-window access can fail; fall through to same-window navigation.\n }\n window.location.assign(target);\n}\n\nfunction stripMonetizationCheckoutReturnParams(search: string): string {\n const next = new URLSearchParams(search);\n const keysToDelete: string[] = [];\n for (const key of next.keys()) {\n if (key.startsWith(\"xapps_payment_\")) keysToDelete.push(key);\n }\n keysToDelete.push(\"xapps_monetization_intent_id\");\n for (const key of keysToDelete) next.delete(key);\n const rendered = next.toString();\n return rendered ? `?${rendered}` : \"\";\n}\n\nfunction formatDateTime(value: unknown, locale: string): string {\n const raw = readString(value);\n if (!raw) return \"\";\n const parsed = new Date(raw);\n if (Number.isNaN(parsed.getTime())) return raw;\n try {\n return parsed.toLocaleString(locale || undefined, {\n year: \"numeric\",\n month: \"short\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n });\n } catch {\n return parsed.toISOString();\n }\n}\n\nfunction readVirtualCurrencyDefinition(value: unknown): Record<string, unknown> | null {\n const record = asRecord(value);\n if (!record) return null;\n const code = readString(record.code);\n const name = readString(record.name);\n if (!code && !name) return null;\n return record;\n}\n\nfunction formatVirtualCurrencyLabel(\n value: unknown,\n options?: {\n includeCode?: boolean;\n },\n): string {\n const record = readVirtualCurrencyDefinition(value);\n if (!record) return \"\";\n const code = readString(record.code);\n const name = readString(record.name);\n if (options?.includeCode && name && code && name.toLowerCase() !== code.toLowerCase()) {\n return `${name} (${code})`;\n }\n return name || code;\n}\n\nfunction formatVirtualCurrencyAmount(value: unknown, virtualCurrency: unknown): string {\n const amount = readString(value);\n if (!amount) return \"\";\n const currencyLabel = formatVirtualCurrencyLabel(virtualCurrency);\n return currencyLabel ? `${amount} ${currencyLabel}` : amount;\n}\n\nfunction normalizeUsageCreditSummary(value: unknown): UsageCreditSummary | null {\n const summary = asRecord(value);\n if (!summary) return null;\n const availableCount = readNumber(summary.available_count) ?? 0;\n const availableSessionBackedCount = readNumber(summary.available_session_backed_count) ?? 0;\n const availableLedgerOnlyCount = readNumber(summary.available_ledger_only_count) ?? 0;\n const reservedCount = readNumber(summary.reserved_count) ?? 0;\n const reservedActiveCount = readNumber(summary.reserved_active_count) ?? reservedCount;\n const reservedStaleCount = readNumber(summary.reserved_stale_count) ?? 0;\n const consumedCount = readNumber(summary.consumed_count) ?? 0;\n const byToolRaw = Array.isArray(summary.by_tool) ? summary.by_tool : [];\n const byTool = byToolRaw\n .map((entry): UsageCreditToolSummary | null => {\n const record = asRecord(entry);\n if (!record) return null;\n const toolName = readString(record.tool_name);\n if (!toolName) return null;\n return {\n tool_name: toolName,\n available_count: readNumber(record.available_count) ?? 0,\n available_session_backed_count: readNumber(record.available_session_backed_count) ?? 0,\n available_ledger_only_count: readNumber(record.available_ledger_only_count) ?? 0,\n reserved_count: readNumber(record.reserved_count) ?? 0,\n reserved_active_count:\n readNumber(record.reserved_active_count) ?? readNumber(record.reserved_count) ?? 0,\n reserved_stale_count: readNumber(record.reserved_stale_count) ?? 0,\n consumed_count: readNumber(record.consumed_count) ?? 0,\n };\n })\n .filter((entry): entry is UsageCreditToolSummary => Boolean(entry))\n .filter(\n (entry) =>\n entry.available_count > 0 ||\n entry.available_ledger_only_count > 0 ||\n entry.reserved_active_count > 0 ||\n entry.reserved_stale_count > 0,\n );\n if (\n availableCount <= 0 &&\n availableLedgerOnlyCount <= 0 &&\n reservedCount <= 0 &&\n consumedCount <= 0 &&\n byTool.length === 0\n ) {\n return null;\n }\n return {\n available_count: availableCount,\n available_session_backed_count: availableSessionBackedCount,\n available_ledger_only_count: availableLedgerOnlyCount,\n reserved_count: reservedCount,\n reserved_active_count: reservedActiveCount,\n reserved_stale_count: reservedStaleCount,\n consumed_count: consumedCount,\n updated_at: readString(summary.updated_at) || null,\n by_tool: byTool,\n };\n}\n\nfunction normalizeGuardPolicyKind(policy: unknown): string {\n if (policy === \"all\" || policy === \"any\") return policy;\n const policyObj = asRecord(policy);\n const mode = readString(policyObj?.mode);\n return mode === \"any\" ? \"any\" : \"all\";\n}\n\nfunction defaultBlockingForTrigger(trigger: string): boolean {\n return !trigger.startsWith(\"after:\");\n}\n\nfunction humanizeSlug(slug: string): string {\n return String(slug || \"\")\n .trim()\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\nfunction buildMonetizationHookSummaryItems(manifest: Record<string, unknown> | null): GuardInfo[] {\n const monetization = asRecord(manifest?.monetization);\n const hooks = asRecord(monetization?.hooks);\n const afterPaymentCompleted = asRecord(\n hooks?.after_payment_completed ?? hooks?.afterPaymentCompleted,\n );\n if (!afterPaymentCompleted || readBoolean(afterPaymentCompleted.enabled, true) === false) {\n return [];\n }\n\n const baseItems: GuardInfo[] = [];\n const defaultInvoiceRef = readString(\n afterPaymentCompleted.invoice_ref ?? afterPaymentCompleted.invoiceRef,\n );\n baseItems.push({\n slug: \"xms_after_payment_completed\",\n label: defaultInvoiceRef ? `Payment completed \u00B7 ${defaultInvoiceRef}` : \"Payment completed\",\n trigger: \"after:payment_completed\",\n headless: true,\n blocking: false,\n order: null,\n policyKind: \"all\",\n });\n\n const byPaymentGuardRef = asRecord(\n afterPaymentCompleted.by_payment_guard_ref ?? afterPaymentCompleted.byPaymentGuardRef,\n );\n for (const [paymentGuardRef, rawValue] of Object.entries(byPaymentGuardRef ?? {})) {\n const config = asRecord(rawValue);\n if (!config || readBoolean(config.enabled, true) === false) continue;\n const invoiceRef = readString(config.invoice_ref ?? config.invoiceRef);\n baseItems.push({\n slug: `xms_after_payment_completed_${paymentGuardRef}`,\n label: invoiceRef\n ? `Payment completed \u00B7 ${paymentGuardRef} \u00B7 ${invoiceRef}`\n : `Payment completed \u00B7 ${paymentGuardRef}`,\n trigger: \"after:payment_completed\",\n headless: true,\n blocking: false,\n order: null,\n policyKind: \"all\",\n });\n }\n\n return baseItems;\n}\n\nfunction humanizeTrigger(trigger: string, translate: TranslateFunction): string {\n const normalized = String(trigger || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"before:tool_run\") {\n return translate(\"xapp.trigger_before_tool_run\", undefined, \"Before running this app\");\n }\n if (normalized === \"after:tool_run\") {\n return translate(\"xapp.trigger_after_tool_run\", undefined, \"After this app finishes\");\n }\n if (normalized === \"before:widget_open\") {\n return translate(\"xapp.trigger_before_widget_open\", undefined, \"Before opening this app\");\n }\n if (normalized === \"after:widget_open\") {\n return translate(\"xapp.trigger_after_widget_open\", undefined, \"After opening this app\");\n }\n if (!normalized) return translate(\"xapp.trigger_default\", undefined, \"App stage\");\n return humanizeSlug(normalized.replace(/:/g, \" \"));\n}\n\nfunction describeGuardChain(policyKind: string, translate: TranslateFunction): string {\n return policyKind === \"any\"\n ? translate(\"xapp.policy_any\", undefined, \"Any one satisfies\")\n : translate(\"xapp.policy_all\", undefined, \"All steps apply\");\n}\n\nexport default function XappDetailPage() {\n return <XappDetailPageContent />;\n}\n\nexport { XappDetailPage };\n\nexport function XappPlansPage() {\n return <XappDetailPageContent renderMode=\"plans_only\" />;\n}\n\nfunction XappDetailPageContent(props?: { renderMode?: \"full\" | \"plans_only\" }) {\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const { xappId } = useParams();\n const loc = useLocation();\n const token = useQueryToken();\n const action = useQueryAction();\n const queryToolName = useQueryToolName();\n const routeQuery = useMemo(() => new URLSearchParams(loc.search), [loc.search]);\n const routeSource = String(routeQuery.get(\"from\") || \"\")\n .trim()\n .toLowerCase();\n const focusedSection = String(routeQuery.get(\"focus\") || \"\")\n .trim()\n .toLowerCase();\n const requestedPaywallSlug = String(routeQuery.get(\"paywall\") || \"\")\n .trim()\n .toLowerCase();\n const selectedPaywallPackageSlug = String(routeQuery.get(\"paywallPackage\") || \"\")\n .trim()\n .toLowerCase();\n const paymentReturnStatus = String(routeQuery.get(\"xapps_payment_status\") || \"\")\n .trim()\n .toLowerCase();\n const routeView = String(routeQuery.get(\"view\") || \"\")\n .trim()\n .toLowerCase();\n const paymentReturnSessionId = String(routeQuery.get(\"xapps_payment_session_id\") || \"\").trim();\n const paymentReturnIntentId = String(routeQuery.get(\"xapps_monetization_intent_id\") || \"\").trim();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const autoOpenedWidgetKeyRef = useRef<string>(\"\");\n const plansSectionRef = useRef<HTMLDivElement | null>(null);\n const widgetSectionRef = useRef<HTMLElement | null>(null);\n const visibilityRefreshRef = useRef<number>(0);\n\n const canMutate = host.canMutate ? host.canMutate() : true;\n const renderMode = props?.renderMode === \"plans_only\" ? \"plans_only\" : \"full\";\n const plansOnlyMode = renderMode === \"plans_only\";\n const widgetHostedPlansMode = plansOnlyMode && routeSource === \"widget\";\n const addAppLabel =\n env?.copy?.addAppLabel || t(\"xapp.add_to_workspace\", undefined, \"Add to workspace\");\n const removeAppLabel =\n env?.copy?.removeAppLabel ||\n t(\"xapp.remove_from_workspace\", undefined, \"Remove from workspace\");\n const updateAppLabel = env?.copy?.updateAppLabel || t(\"xapp.update_app\", undefined, \"Update app\");\n const openAppLabel = env?.copy?.openAppLabel || t(\"xapp.open_app\", undefined, \"Open app\");\n const hasSubject = Boolean(host.subjectId);\n const installationPolicyResolved = env?.installationPolicyResolved !== false;\n const mutationControlsReady = installationPolicyResolved || !hasSubject || !canMutate;\n const installationPolicy = env?.installationPolicy ?? host.installationPolicy ?? null;\n const hideVersions = shouldHideMarketplaceVersions({\n installationPolicy,\n installationPolicyResolved,\n subjectId: host.subjectId,\n });\n\n const [data, setData] = useState<Record<string, unknown> | null>(null);\n const [monetization, setMonetization] = useState<MarketplaceXappMonetizationState | null>(null);\n const [monetizationHistory, setMonetizationHistory] = useState<Record<string, unknown> | null>(\n null,\n );\n const [error, setError] = useState<string | null>(null);\n const [busy, setBusy] = useState(true);\n\n const [termsOpen, setTermsOpen] = useState(false);\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [termsAction, setTermsAction] = useState<\"none\" | \"install\" | \"update\">(\"none\");\n const [termsWidgetId, setTermsWidgetId] = useState<string | null>(null);\n const [termsWidgetName, setTermsWidgetName] = useState<string | null>(null);\n const [removeConfirmOpen, setRemoveConfirmOpen] = useState(false);\n const [guardSummaryOpen, setGuardSummaryOpen] = useState(false);\n const [checkoutBusyPackageSlug, setCheckoutBusyPackageSlug] = useState(\"\");\n const [checkoutError, setCheckoutError] = useState<string | null>(null);\n const [checkoutNotice, setCheckoutNotice] = useState<string | null>(null);\n const [subscriptionActionBusy, setSubscriptionActionBusy] = useState<\"\" | \"cancel\" | \"refresh\">(\n \"\",\n );\n const [subscriptionActionError, setSubscriptionActionError] = useState<string | null>(null);\n const [cancelSubscriptionConfirmOpen, setCancelSubscriptionConfirmOpen] = useState(false);\n const checkoutFinalizeKeyRef = useRef<string>(\"\");\n\n const installationsByXappId = hasSubject ? host.getInstallationsByXappId() : {};\n const routeInstallationId = String(routeQuery.get(\"installationId\") || \"\").trim();\n const routePreviewAt = String(\n routeQuery.get(\"previewAt\") || routeQuery.get(\"preview_at\") || \"\",\n ).trim();\n const installation =\n xappId && installationsByXappId[String(xappId)]\n ? installationsByXappId[String(xappId)]\n : xappId && routeInstallationId\n ? {\n installationId: routeInstallationId,\n xappId: String(xappId),\n }\n : null;\n const updateAvailable = Boolean(installation?.updateAvailable);\n const autoAvailableMode =\n mutationControlsReady &&\n installationPolicy?.mode === \"auto_available\" &&\n Boolean(hasSubject) &&\n canMutate;\n const autoUpdateMode =\n mutationControlsReady &&\n installationPolicy?.update_mode === \"auto_update_compatible\" &&\n Boolean(hasSubject) &&\n canMutate;\n const widgetsEnabled =\n Boolean(hasSubject) &&\n (Boolean(installation) || autoAvailableMode) &&\n (!updateAvailable || autoUpdateMode);\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const singleXappMode = env?.singleXappMode;\n const lifecyclePreviewEnabled = env?.devMode === true;\n const routeSurfaceView = routeView === \"history\" ? \"history\" : \"plans\";\n\n const refresh = useCallback(async () => {\n if (!xappId) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getCatalogXapp(String(xappId), {\n installationId: installation?.installationId ?? null,\n });\n setData(asRecord(res));\n } catch (e) {\n setError(readString(asRecord(e)?.message) || String(e));\n } finally {\n setBusy(false);\n }\n }, [client, installation?.installationId, xappId]);\n\n const refreshMonetization = useCallback(async () => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId || !host.subjectId || typeof client.getMyXappMonetization !== \"function\") {\n setMonetization(null);\n return;\n }\n try {\n const next = await client.getMyXappMonetization(currentXappId, {\n installationId: installation?.installationId ?? null,\n locale,\n previewAt: lifecyclePreviewEnabled ? routePreviewAt || null : null,\n });\n setMonetization(next);\n } catch {\n setMonetization(null);\n }\n }, [\n client,\n host.subjectId,\n installation?.installationId,\n lifecyclePreviewEnabled,\n locale,\n routePreviewAt,\n xappId,\n ]);\n\n const refreshMonetizationHistory = useCallback(async () => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (\n !currentXappId ||\n !host.subjectId ||\n typeof client.getMyXappMonetizationHistory !== \"function\"\n ) {\n setMonetizationHistory(null);\n return;\n }\n try {\n const next = await client.getMyXappMonetizationHistory(currentXappId, {\n installationId: installation?.installationId ?? null,\n limit: 12,\n });\n setMonetizationHistory(asRecord(next));\n } catch {\n setMonetizationHistory(null);\n }\n }, [client, host.subjectId, installation?.installationId, xappId]);\n\n useEffect(() => {\n void refresh();\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"xapp-detail\",\n params: { xappId },\n });\n // Intentionally avoid depending on the whole host object here.\n // The host changes when installations refresh, and re-running this effect\n // would re-trigger the page fetch and make the plans/paywall redraw.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [refresh, xappId]);\n\n useEffect(() => {\n void refreshMonetization();\n }, [refreshMonetization]);\n\n useEffect(() => {\n void refreshMonetizationHistory();\n }, [refreshMonetizationHistory]);\n\n useEffect(() => {\n function handleVisibilityRefresh() {\n if (typeof document === \"undefined\" || document.visibilityState !== \"visible\") return;\n const now = Date.now();\n if (now - visibilityRefreshRef.current < 1500) return;\n visibilityRefreshRef.current = now;\n void refresh();\n void refreshMonetization();\n void refreshMonetizationHistory();\n }\n document.addEventListener(\"visibilitychange\", handleVisibilityRefresh);\n return () => {\n document.removeEventListener(\"visibilitychange\", handleVisibilityRefresh);\n };\n }, [refresh, refreshMonetization, refreshMonetizationHistory]);\n\n const manifest = asRecord(data?.manifest);\n const xappRecord = asRecord(data?.xapp);\n const versionRecord = asRecord(data?.version);\n const publisherRecord = asRecord(xappRecord?.publisher);\n const title =\n resolveMarketplaceText(manifest?.title as any, locale) ||\n resolveMarketplaceText(xappRecord?.name as any, locale) ||\n readString(xappRecord?.name) ||\n t(\"xapp.kicker_default\", undefined, \"Xapp\");\n const description =\n resolveMarketplaceText(manifest?.description as any, locale) ||\n resolveMarketplaceText(xappRecord?.description as any, locale) ||\n readString(xappRecord?.description) ||\n \"\";\n const imageUrl = readString(manifest?.image) || \"https://picsum.photos/seed/xapps-detail/840/360\";\n\n const widgets: Record<string, unknown>[] = Array.isArray(data?.widgets)\n ? data.widgets.filter((widget): widget is Record<string, unknown> => Boolean(asRecord(widget)))\n : [];\n const defaultWidget = useMemo(() => {\n const def = widgets.find((w) => readBoolean(w.default, false));\n return def || widgets[0] || null;\n }, [widgets]);\n const requestedWidget = useMemo(() => {\n const desiredToolName = readString(queryToolName);\n if (!desiredToolName) return defaultWidget;\n return (\n widgets.find((widget) => readString(widget.bind_tool_name) === desiredToolName) ||\n defaultWidget\n );\n }, [defaultWidget, queryToolName, widgets]);\n const defaultWidgetId = readString(defaultWidget?.id);\n const defaultWidgetName =\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n readString(defaultWidget?.widget_name) ||\n readString(defaultWidget?.name) ||\n \"\";\n const defaultWidgetToolName = readString(defaultWidget?.bind_tool_name);\n const openAppStrategy = widgets.length > 1 ? \"choose_widget\" : \"direct_widget\";\n const handleWorkspaceOpenApp =\n openAppStrategy === \"direct_widget\" && defaultWidgetId\n ? () => {\n launchWidgetForSubject(\n defaultWidgetId,\n defaultWidgetName,\n defaultWidgetToolName || undefined,\n );\n }\n : undefined;\n\n const backTo = buildMarketplaceHref(loc.pathname, \"\", { token });\n const marketplaceRootHref = buildMarketplaceHref(loc.pathname, \"\", { token });\n const detailHref = buildMarketplaceHref(\n loc.pathname,\n `xapps/${encodeURIComponent(String(xappId ?? \"\"))}`,\n {\n token,\n installationId: installation?.installationId,\n },\n );\n\n const terms = asRecord(manifest?.terms);\n const termsTitle =\n resolveMarketplaceText(terms?.title as any, locale) ||\n t(\"xapp.terms_title\", undefined, \"Terms & Conditions\");\n const termsText = resolveMarketplaceText(terms?.text as any, locale) || readString(terms?.text);\n const termsUrl = readString(terms?.url);\n const hasTermsContent = Boolean(termsText || termsUrl);\n const requiresTerms = Boolean(terms || action === \"install\" || action === \"update\");\n\n function requestInstallForWidget(\n widgetId: string | null,\n widgetName: string | null = null,\n acceptedTerms = false,\n openAfterInstall = false,\n ) {\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: widgetId,\n xappTitle: String(title),\n widgetName,\n openAfterInstall,\n subjectId: host.subjectId ?? null,\n ...(acceptedTerms ? { termsAccepted: true } : {}),\n });\n }\n\n function requestUpdateForWidget(widgetId: string | null, acceptedTerms = false) {\n if (!installation?.installationId || !host.requestUpdate) return;\n const activeWidget =\n widgetId && Array.isArray(widgets)\n ? widgets.find((entry) => readString(entry.id) === widgetId) || null\n : null;\n host.requestUpdate({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n widgetId,\n xappTitle: String(title),\n widgetName:\n resolveMarketplaceText(activeWidget?.title as any, locale) ||\n readString(activeWidget?.name) ||\n null,\n ...(acceptedTerms ? { termsAccepted: true } : {}),\n });\n }\n\n function openInstalledWidget(widgetId: string, widgetName: string, toolName?: string) {\n if (!installation) return;\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(widgetId)}`,\n search: tokenSearch,\n });\n return;\n }\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName,\n toolName,\n });\n }\n\n function launchWidgetForSubject(widgetId: string, widgetName: string, toolName?: string) {\n if (!hasSubject || !widgetId) return;\n if (!installation) {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsWidgetId(widgetId);\n setTermsWidgetName(widgetName);\n setTermsOpen(true);\n return;\n }\n requestInstallForWidget(widgetId, widgetName, false, true);\n return;\n }\n if (updateAvailable) {\n if (autoUpdateMode && host.requestUpdate) {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsWidgetId(widgetId);\n setTermsWidgetName(widgetName);\n setTermsOpen(true);\n return;\n }\n requestUpdateForWidget(widgetId);\n }\n return;\n }\n openInstalledWidget(widgetId, widgetName, toolName);\n }\n\n useEffect(() => {\n if (action === \"install\") {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsWidgetId(readString(defaultWidget?.id) || null);\n setTermsWidgetName(resolveMarketplaceText(defaultWidget?.title as any, locale) || null);\n setTermsOpen(true);\n return;\n }\n if (action === \"update\" && installation) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n setTermsOpen(true);\n }\n }, [action, defaultWidget, installation, locale]);\n\n useEffect(() => {\n if (action !== \"open-widget\") return;\n if (env?.embedMode) return;\n if (!requestedWidget || !widgetsEnabled) return;\n\n const widget = requestedWidget;\n const widgetId = readString(widget?.id);\n if (!widgetId) return;\n\n const key = [\n String(xappId ?? \"\"),\n installation?.installationId || \"auto\",\n widgetId,\n readString(queryToolName),\n ].join(\":\");\n if (autoOpenedWidgetKeyRef.current === key) return;\n autoOpenedWidgetKeyRef.current = key;\n\n launchWidgetForSubject(\n widgetId,\n resolveMarketplaceText(widget?.title as any, locale) ||\n readString(widget?.widget_name) ||\n readString(widget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n readString(widget?.bind_tool_name),\n );\n }, [\n action,\n env?.embedMode,\n installation,\n launchWidgetForSubject,\n locale,\n queryToolName,\n requestedWidget,\n widgetsEnabled,\n xappId,\n ]);\n\n const publisherSlug = readString(publisherRecord?.slug);\n const publisherName = readString(publisherRecord?.name) || publisherSlug;\n const publisherTo = publisherSlug\n ? buildMarketplaceHref(loc.pathname, `publishers/${encodeURIComponent(publisherSlug)}`, {\n token,\n })\n : null;\n const guardSummary = useMemo(() => {\n const guardsRaw = Array.isArray(manifest?.guards) ? manifest.guards : [];\n const policyMap = asRecord(manifest?.guards_policy) ?? {};\n const guardItems: GuardInfo[] = guardsRaw\n .map((raw): GuardInfo | null => {\n const guard = asRecord(raw);\n if (!guard) return null;\n const trigger = readString(guard.trigger);\n const slug = readString(guard.slug);\n if (!trigger || !slug) return null;\n const policyKind = normalizeGuardPolicyKind(policyMap[trigger]);\n return {\n slug,\n trigger,\n headless: readBoolean(guard.headless, true),\n blocking: readBoolean(guard.blocking, defaultBlockingForTrigger(trigger)),\n order: readNumber(guard.order),\n policyKind,\n };\n })\n .filter((item): item is GuardInfo => Boolean(item));\n const items: GuardInfo[] = [...guardItems, ...buildMonetizationHookSummaryItems(manifest)].sort(\n (a, b) => {\n const orderA = a.order ?? Number.MAX_SAFE_INTEGER;\n const orderB = b.order ?? Number.MAX_SAFE_INTEGER;\n if (orderA !== orderB) return orderA - orderB;\n if (a.trigger !== b.trigger) return a.trigger.localeCompare(b.trigger);\n return a.slug.localeCompare(b.slug);\n },\n );\n const byTrigger = new Map<string, GuardInfo[]>();\n for (const item of items) {\n const existing = byTrigger.get(item.trigger) ?? [];\n existing.push(item);\n byTrigger.set(item.trigger, existing);\n }\n return { items, byTrigger };\n }, [manifest]);\n const usageCreditSummary = useMemo(\n () => normalizeUsageCreditSummary(data?.usage_credit_summary),\n [data?.usage_credit_summary],\n );\n const monetizationAccessProjection =\n (monetization?.access_projection as\n | MarketplaceMonetizationAccessProjection\n | null\n | undefined) ?? null;\n const monetizationPaywalls = useMemo(\n () => listXappMonetizationPaywalls(monetization?.paywalls),\n [monetization?.paywalls],\n );\n const selectedPaywall = useMemo(\n () =>\n monetizationPaywalls.find(\n (item) => readString(asRecord(item)?.slug).trim().toLowerCase() === requestedPaywallSlug,\n ) ||\n selectXappMonetizationPaywall({\n paywalls: monetizationPaywalls,\n placement: \"default_paywall\",\n }) ||\n selectXappMonetizationPaywall({\n paywalls: monetizationPaywalls,\n placement: \"paywall\",\n }) ||\n monetizationPaywalls[0] ||\n null,\n [monetizationPaywalls, requestedPaywallSlug],\n );\n const selectedPaywallRenderModel = useMemo(\n () => (selectedPaywall ? buildMonetizationPaywallRenderModel(selectedPaywall) : null),\n [selectedPaywall],\n );\n const selectedPaywallPackageRecords = useMemo(\n (): MonetizationPaywallPackageRecord[] =>\n selectedPaywall ? flattenXappMonetizationPaywallPackages(selectedPaywall) : [],\n [selectedPaywall],\n );\n const resolvePaywallPackageLabel = useMemo(() => {\n const labels = new Map<string, string>();\n for (const item of selectedPaywallPackageRecords) {\n const productMetadata =\n item.productMetadata && typeof item.productMetadata === \"object\"\n ? (item.productMetadata as Record<string, unknown>)\n : {};\n const label =\n readString(item.packageTitle) ||\n readString(item.productTitle) ||\n readString(item.productSlug);\n if (!label) continue;\n for (const candidate of [\n item.packageSlug,\n item.productSlug,\n productMetadata.access_tier,\n item.packageId,\n item.productId,\n ]) {\n const key = readString(candidate).trim().toLowerCase();\n if (key && !labels.has(key)) labels.set(key, label);\n }\n }\n return (value: unknown) => labels.get(readString(value).trim().toLowerCase()) || \"\";\n }, [selectedPaywallPackageRecords]);\n\n useEffect(() => {\n if (focusedSection !== \"plans\" || !plansSectionRef.current) return;\n if (typeof plansSectionRef.current.scrollIntoView === \"function\") {\n plansSectionRef.current.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }, [focusedSection]);\n\n useEffect(() => {\n if (\n (focusedSection !== \"views\" && focusedSection !== \"open-app\") ||\n !widgetSectionRef.current\n ) {\n return;\n }\n if (typeof widgetSectionRef.current.scrollIntoView === \"function\") {\n widgetSectionRef.current.scrollIntoView({ behavior: \"smooth\", block: \"start\" });\n }\n }, [focusedSection]);\n\n useEffect(() => {\n const currentXappId = String(xappId ?? \"\").trim();\n if (!currentXappId || !paymentReturnIntentId || !paymentReturnStatus) return;\n\n const handledKey = [\n currentXappId,\n paymentReturnIntentId,\n paymentReturnSessionId,\n paymentReturnStatus,\n ].join(\":\");\n if (checkoutFinalizeKeyRef.current === handledKey) return;\n checkoutFinalizeKeyRef.current = handledKey;\n\n const clearReturnParams = () => {\n const nextSearch = stripMonetizationCheckoutReturnParams(loc.search);\n void navigate(\n {\n pathname: loc.pathname,\n search: nextSearch,\n },\n { replace: true },\n );\n };\n\n if (paymentReturnStatus === \"cancelled\" || paymentReturnStatus === \"canceled\") {\n setCheckoutError(null);\n setCheckoutNotice(\n t(\"xapp.checkout_cancelled\", undefined, \"Checkout was cancelled before completion.\"),\n );\n clearReturnParams();\n return;\n }\n\n if (paymentReturnStatus === \"failed\") {\n setCheckoutNotice(null);\n setCheckoutError(\n t(\"xapp.checkout_failed\", undefined, \"Payment failed before access could be issued.\"),\n );\n clearReturnParams();\n return;\n }\n\n if (\n paymentReturnStatus !== \"paid\" ||\n typeof client.finalizeMyXappPurchasePaymentSession !== \"function\"\n ) {\n return;\n }\n\n let cancelled = false;\n setCheckoutNotice(\n t(\"xapp.checkout_finalizing\", undefined, \"Finalizing payment and refreshing access...\"),\n );\n setCheckoutError(null);\n\n void (async () => {\n try {\n await client.finalizeMyXappPurchasePaymentSession!({\n xappId: currentXappId,\n intentId: paymentReturnIntentId,\n });\n if (typeof client.getMyXappMonetization === \"function\") {\n const next = await client.getMyXappMonetization(currentXappId, {\n installationId: installation?.installationId ?? null,\n locale,\n previewAt: lifecyclePreviewEnabled ? routePreviewAt || null : null,\n });\n if (!cancelled) setMonetization(next);\n }\n if (!cancelled) {\n setCheckoutNotice(\n t(\"xapp.checkout_finalized\", undefined, \"Payment completed and access was refreshed.\"),\n );\n clearReturnParams();\n }\n } catch (error) {\n if (cancelled) return;\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\n \"xapp.checkout_finalize_failed\",\n undefined,\n \"Payment returned, but access refresh did not complete yet.\",\n );\n setCheckoutNotice(null);\n setCheckoutError(message);\n }\n })();\n\n return () => {\n cancelled = true;\n };\n }, [\n client,\n installation?.installationId,\n locale,\n loc.pathname,\n loc.search,\n navigate,\n paymentReturnIntentId,\n paymentReturnSessionId,\n paymentReturnStatus,\n lifecyclePreviewEnabled,\n routePreviewAt,\n t,\n xappId,\n ]);\n\n async function refreshSubscriptionLifecycle() {\n const currentXappId = String(xappId ?? \"\").trim();\n const contractId = readString(monetizationSubscription?.id);\n if (\n !currentXappId ||\n !contractId ||\n typeof client.refreshMyXappSubscriptionContractState !== \"function\"\n ) {\n return;\n }\n setSubscriptionActionBusy(\"refresh\");\n setSubscriptionActionError(null);\n try {\n await client.refreshMyXappSubscriptionContractState({\n xappId: currentXappId,\n contractId,\n });\n await refreshMonetization();\n await refreshMonetizationHistory();\n } catch (error) {\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\"xapp.subscription_refresh_failed\", undefined, \"Unable to refresh subscription state.\");\n setSubscriptionActionError(message);\n } finally {\n setSubscriptionActionBusy(\"\");\n }\n }\n\n async function cancelSubscriptionLifecycle() {\n const currentXappId = String(xappId ?? \"\").trim();\n const contractId = readString(monetizationSubscription?.id);\n if (\n !currentXappId ||\n !contractId ||\n typeof client.cancelMyXappSubscriptionContract !== \"function\"\n ) {\n return;\n }\n setSubscriptionActionBusy(\"cancel\");\n setSubscriptionActionError(null);\n try {\n await client.cancelMyXappSubscriptionContract({\n xappId: currentXappId,\n contractId,\n });\n await refreshMonetization();\n await refreshMonetizationHistory();\n setCancelSubscriptionConfirmOpen(false);\n } catch (error) {\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\"xapp.subscription_cancel_failed\", undefined, \"Unable to cancel this subscription.\");\n setSubscriptionActionError(message);\n } finally {\n setSubscriptionActionBusy(\"\");\n }\n }\n\n async function finalizeCurrentUserCheckoutIntent(currentXappId: string, intentId: string) {\n if (typeof client.finalizeMyXappPurchasePaymentSession !== \"function\") {\n throw new Error(\n t(\n \"xapp.checkout_finalize_unavailable\",\n undefined,\n \"Access refresh is not available for this checkout flow.\",\n ),\n );\n }\n setCheckoutNotice(\n t(\"xapp.checkout_finalizing\", undefined, \"Finalizing payment and refreshing access...\"),\n );\n setCheckoutError(null);\n await client.finalizeMyXappPurchasePaymentSession({\n xappId: currentXappId,\n intentId,\n });\n if (typeof client.getMyXappMonetization === \"function\") {\n const next = await client.getMyXappMonetization(currentXappId, {\n installationId: installation?.installationId ?? null,\n locale,\n previewAt: lifecyclePreviewEnabled ? routePreviewAt || null : null,\n });\n setMonetization(next);\n }\n setCheckoutNotice(\n t(\"xapp.checkout_finalized\", undefined, \"Payment completed and access was refreshed.\"),\n );\n }\n\n async function startPackageCheckout(packageSlug: string) {\n const normalizedSlug = packageSlug.trim().toLowerCase();\n if (\n !xappId ||\n typeof client.prepareMyXappPurchaseIntent !== \"function\" ||\n typeof client.createMyXappPurchasePaymentSession !== \"function\" ||\n !normalizedSlug\n ) {\n return;\n }\n if (!hasSubject || !canMutate) {\n setCheckoutError(\n t(\n \"xapp.checkout_session_required\",\n undefined,\n \"Checkout requires a subject-bound catalog session. Start from a signed host session to purchase plans.\",\n ),\n );\n return;\n }\n\n const pkg = selectedPaywallPackageRecords.find(\n (item: MonetizationPaywallPackageRecord) =>\n readString(item.packageSlug).trim().toLowerCase() === normalizedSlug,\n );\n if (pkg) {\n const purchasePolicy = getPackagePurchasePolicy(pkg);\n if (!purchasePolicy.canPurchase) {\n setCheckoutError(\n purchasePolicy.status === \"owned_additive_unlock\"\n ? t(\n \"xapp.checkout_owned_unlock_blocked\",\n undefined,\n \"This add-on unlock is already owned for the current monetization scope.\",\n )\n : t(\n \"xapp.checkout_current_plan_blocked\",\n undefined,\n \"This plan is already active for the current monetization scope.\",\n ),\n );\n return;\n }\n }\n const offeringId = readString(pkg?.offeringId);\n const packageId = readString(pkg?.packageId);\n const priceId = readString(pkg?.priceId);\n if (!offeringId || !packageId || !priceId) {\n setCheckoutError(\n t(\n \"xapp.checkout_package_missing\",\n undefined,\n \"This package is missing purchase metadata in the published paywall.\",\n ),\n );\n return;\n }\n\n setCheckoutBusyPackageSlug(normalizedSlug);\n setCheckoutError(null);\n setCheckoutNotice(null);\n try {\n const prepared = await client.prepareMyXappPurchaseIntent({\n xappId: String(xappId),\n offeringId,\n packageId,\n priceId,\n installationId: installation?.installationId ?? null,\n });\n const returnUrl = buildMonetizationCheckoutReturnUrl({\n currentHref: window.location.href,\n intentId: String(prepared.prepared_intent.purchase_intent_id || \"\"),\n packageSlug: normalizedSlug,\n });\n const payment = await client.createMyXappPurchasePaymentSession({\n xappId: String(xappId),\n intentId: String(prepared.prepared_intent.purchase_intent_id || \"\"),\n pageUrl: buildHostedPaymentPageUrl({\n currentHref: window.location.href,\n apiBaseUrl: env?.apiBaseUrl || null,\n }),\n returnUrl,\n cancelUrl: returnUrl,\n xappsResume: returnUrl,\n locale,\n });\n const paymentPageUrl = normalizeHostedCheckoutUrl({\n paymentPageUrl: readString(payment.payment_page_url),\n apiBaseUrl: env?.apiBaseUrl || null,\n });\n const paymentStatus = readString(payment.payment_session?.status).trim().toLowerCase();\n if (!paymentPageUrl && (paymentStatus === \"paid\" || paymentStatus === \"completed\")) {\n await finalizeCurrentUserCheckoutIntent(\n String(xappId),\n String(prepared.prepared_intent.purchase_intent_id || \"\"),\n );\n return;\n }\n if (!paymentPageUrl) {\n throw new Error(\n t(\n \"xapp.checkout_page_missing\",\n undefined,\n \"Payment page is not available for this package.\",\n ),\n );\n }\n navigateToHostedCheckout(paymentPageUrl);\n } catch (error) {\n const message =\n readString(asRecord(error)?.message) ||\n (error instanceof Error ? error.message : \"\") ||\n t(\"xapp.checkout_start_failed\", undefined, \"Unable to start checkout for this package.\");\n setCheckoutError(message);\n } finally {\n setCheckoutBusyPackageSlug(\"\");\n }\n }\n\n const hasCatalogMonetization = hasMarketplaceCatalogMonetization(manifest);\n const monetizationAccess = asRecord(monetization?.access_projection);\n const monetizationSubscription = asRecord(monetization?.current_subscription);\n const additiveEntitlements = Array.isArray(monetization?.additive_entitlements)\n ? (monetization.additive_entitlements\n .map((item) => asRecord(item))\n .filter((item) => (item ? Object.keys(item).length > 0 : false)) as Array<\n Record<string, unknown>\n >)\n : [];\n const activeAdditiveEntitlements = additiveEntitlements.filter((item) => {\n const status = readString(item.status).trim().toLowerCase();\n return status === \"active\" || status === \"grace_period\";\n });\n const additiveUnlockLabels = activeAdditiveEntitlements\n .map(\n (item) =>\n resolvePaywallPackageLabel(item.tier) ||\n resolvePaywallPackageLabel(item.product_slug) ||\n readString(item.tier) ||\n readString(item.product_slug),\n )\n .filter(Boolean)\n .reduce<string[]>((labels, label) => {\n if (!labels.includes(label)) labels.push(label);\n return labels;\n }, []);\n const subscriptionLifecycle = buildXmsSubscriptionLifecycleSummary({\n currentSubscription: monetizationSubscription,\n locale,\n });\n const subscriptionManagement = asRecord(monetizationSubscription?.subscription_management);\n const subscriptionSubjectActions = asRecord(subscriptionManagement?.subject_actions);\n const canRefreshSubscriptionAction = readBoolean(\n asRecord(subscriptionSubjectActions?.refresh_status)?.available,\n true,\n );\n const canCancelSubscriptionAction = readBoolean(\n asRecord(subscriptionSubjectActions?.cancel_subscription)?.available,\n true,\n );\n const currentTier =\n readString(monetizationSubscription?.tier) || readString(monetizationAccess?.tier);\n const currentTierLabel = resolvePaywallPackageLabel(currentTier) || currentTier;\n const balanceState = readString(monetizationAccess?.balance_state);\n const subscriptionStatus = subscriptionLifecycle.statusLabel;\n const subscriptionCoverage = subscriptionLifecycle.coverageLabel;\n const subscriptionReason = subscriptionLifecycle.reasonLabel;\n const overdueSince = formatDateTime(subscriptionLifecycle.overdueSince, locale);\n const expiryBoundaryAt = formatDateTime(subscriptionLifecycle.expiryBoundaryAt, locale);\n const renewsAt = formatDateTime(subscriptionLifecycle.renewsAt, locale);\n const currentPeriodEndsAt = formatDateTime(subscriptionLifecycle.currentPeriodEndsAt, locale);\n const cancelledAt = formatDateTime(subscriptionLifecycle.cancelledAt, locale);\n const expiresAt = formatDateTime(subscriptionLifecycle.expiresAt, locale);\n const lifecyclePreviewAt = lifecyclePreviewEnabled ? formatDateTime(routePreviewAt, locale) : \"\";\n const usageCreditAvailableCount = usageCreditSummary\n ? Math.max(0, usageCreditSummary.available_count)\n : null;\n const creditsRemaining =\n usageCreditAvailableCount != null\n ? String(usageCreditAvailableCount)\n : readString(monetizationAccess?.credits_remaining);\n const accessVirtualCurrencyLabel = formatVirtualCurrencyLabel(\n monetizationAccess?.virtual_currency,\n {\n includeCode: true,\n },\n );\n const creditsRemainingLabel = formatVirtualCurrencyAmount(\n creditsRemaining,\n monetizationAccess?.virtual_currency,\n );\n const hasNamedAccessCurrency = Boolean(accessVirtualCurrencyLabel);\n const currentCreditBalanceLabel = hasNamedAccessCurrency\n ? t(\"xapp.credits_remaining_label\", undefined, \"Balance\")\n : t(\"xapp.credit_balance_label\", undefined, \"Credits\");\n const accessState = resolveMarketplaceDefaultAccessState({\n projection: monetizationAccessProjection,\n hasCatalogMonetization,\n availableLabel: t(\"xapp.access_state_available\", undefined, \"available\"),\n });\n const hasMonetizationState = Boolean(\n currentTierLabel ||\n accessState ||\n subscriptionStatus ||\n subscriptionCoverage ||\n subscriptionReason ||\n overdueSince ||\n expiryBoundaryAt ||\n renewsAt ||\n currentPeriodEndsAt ||\n cancelledAt ||\n expiresAt ||\n lifecyclePreviewAt ||\n accessVirtualCurrencyLabel ||\n creditsRemaining ||\n additiveUnlockLabels.length > 0,\n );\n const manifestScreenshots = Array.isArray(manifest?.screenshots)\n ? manifest.screenshots.map((shot) => readString(shot)).filter(Boolean)\n : [];\n const manifestTags = Array.isArray(manifest?.tags)\n ? manifest.tags.map((tag) => readString(tag)).filter(Boolean)\n : [];\n\n function getPackagePurchasePolicy(item: Record<string, unknown>) {\n return resolveMonetizationPackagePurchasePolicy({\n item,\n currentSubscription: monetizationSubscription,\n additiveEntitlements: activeAdditiveEntitlements,\n accessProjection: monetizationAccessProjection,\n });\n }\n const currentAccessCard = hasMonetizationState ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.current_access_title\", undefined, \"Current access\")}\n </h3>\n {currentTierLabel ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.current_plan_label\", undefined, \"Current plan\")}\n </span>\n <span className=\"mx-meta-value\">{currentTierLabel}</span>\n </div>\n ) : null}\n {accessState ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.access_state_label\", undefined, \"Access state\")}\n </span>\n <span className=\"mx-meta-value\">{accessState}</span>\n </div>\n ) : null}\n {subscriptionStatus ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_status_label\", undefined, \"Subscription state\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionStatus}</span>\n </div>\n ) : null}\n {subscriptionCoverage ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_coverage_label\", undefined, \"Coverage\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionCoverage}</span>\n </div>\n ) : null}\n {subscriptionReason ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_reason_label\", undefined, \"Status reason\")}\n </span>\n <span className=\"mx-meta-value\">{subscriptionReason}</span>\n </div>\n ) : null}\n {overdueSince ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_overdue_since_label\", undefined, \"Overdue since\")}\n </span>\n <span className=\"mx-meta-value\">{overdueSince}</span>\n </div>\n ) : null}\n {expiryBoundaryAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.subscription_expiry_boundary_label\", undefined, \"Expiry boundary\")}\n </span>\n <span className=\"mx-meta-value\">{expiryBoundaryAt}</span>\n </div>\n ) : null}\n {renewsAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.renews_at_label\", undefined, \"Renews at\")}</span>\n <span className=\"mx-meta-value\">{renewsAt}</span>\n </div>\n ) : null}\n {currentPeriodEndsAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.current_period_ends_label\", undefined, \"Current period ends\")}\n </span>\n <span className=\"mx-meta-value\">{currentPeriodEndsAt}</span>\n </div>\n ) : null}\n {cancelledAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.cancelled_at_label\", undefined, \"Cancelled at\")}\n </span>\n <span className=\"mx-meta-value\">{cancelledAt}</span>\n </div>\n ) : null}\n {expiresAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.expires_at_label\", undefined, \"Expires at\")}\n </span>\n <span className=\"mx-meta-value\">{expiresAt}</span>\n </div>\n ) : null}\n {lifecyclePreviewAt ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.lifecycle_preview_at_label\", undefined, \"Preview as of\")}\n </span>\n <span className=\"mx-meta-value\">{lifecyclePreviewAt}</span>\n </div>\n ) : null}\n {accessVirtualCurrencyLabel ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.virtual_currency_label\", undefined, \"Currency\")}\n </span>\n <span className=\"mx-meta-value\">{accessVirtualCurrencyLabel}</span>\n </div>\n ) : null}\n {creditsRemaining ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{currentCreditBalanceLabel}</span>\n <span className=\"mx-meta-value\">{creditsRemainingLabel || creditsRemaining}</span>\n </div>\n ) : null}\n {additiveUnlockLabels.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.add_on_unlocks_label\", undefined, \"Add-on unlocks\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n {additiveUnlockLabels.map((label, index) => (\n <div key={`${label}:${index}`}>{label}</div>\n ))}\n </div>\n </div>\n ) : null}\n {lifecyclePreviewAt ? (\n <div className=\"mx-subtle-note\">\n {t(\n \"xapp.lifecycle_preview_hint\",\n undefined,\n \"Subscription state is being previewed for the selected time.\",\n )}\n </div>\n ) : null}\n {subscriptionActionError ? (\n <div className=\"mx-subtle-note\">{subscriptionActionError}</div>\n ) : null}\n {monetizationSubscription?.id &&\n ((canRefreshSubscriptionAction &&\n typeof client.refreshMyXappSubscriptionContractState === \"function\") ||\n (canCancelSubscriptionAction &&\n subscriptionLifecycle.canCancel &&\n typeof client.cancelMyXappSubscriptionContract === \"function\")) ? (\n <div className=\"mx-detail-actions\">\n {canRefreshSubscriptionAction &&\n typeof client.refreshMyXappSubscriptionContractState === \"function\" ? (\n <button\n className=\"mx-btn mx-btn-secondary\"\n disabled={subscriptionActionBusy !== \"\"}\n onClick={() => {\n void refreshSubscriptionLifecycle();\n }}\n >\n {subscriptionActionBusy === \"refresh\"\n ? t(\"xapp.subscription_refreshing\", undefined, \"Refreshing...\")\n : t(\"xapp.subscription_refresh_action\", undefined, \"Refresh status\")}\n </button>\n ) : null}\n {canCancelSubscriptionAction &&\n subscriptionLifecycle.canCancel &&\n typeof client.cancelMyXappSubscriptionContract === \"function\" ? (\n <button\n className=\"mx-btn mx-btn-outline\"\n data-variant=\"danger\"\n disabled={subscriptionActionBusy !== \"\"}\n onClick={() => setCancelSubscriptionConfirmOpen(true)}\n >\n {subscriptionActionBusy === \"cancel\"\n ? t(\"xapp.subscription_cancelling\", undefined, \"Cancelling...\")\n : t(\"xapp.subscription_cancel_action\", undefined, \"Cancel subscription\")}\n </button>\n ) : null}\n </div>\n ) : null}\n </div>\n ) : null;\n const plansCard = selectedPaywallRenderModel ? (\n <div className=\"mx-sidebar-card\" ref={plansSectionRef}>\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </h3>\n <div className=\"mx-paywall-card-head\">\n <div className=\"mx-paywall-card-kicker\">\n {t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </div>\n <div className=\"mx-paywall-card-title\">{selectedPaywallRenderModel.paywallLabel}</div>\n {selectedPaywallRenderModel.summary ? (\n <div className=\"mx-paywall-card-summary\">{selectedPaywallRenderModel.summary}</div>\n ) : null}\n </div>\n {selectedPaywallRenderModel.badges.length > 0 ? (\n <div className=\"mx-paywall-card-badges\">\n {selectedPaywallRenderModel.badges.map((badge: string) => (\n <span key={badge} className=\"mx-paywall-card-badge\">\n {badge}\n </span>\n ))}\n </div>\n ) : null}\n <div className=\"mx-paywall-card-packages\">\n {selectedPaywallRenderModel.packages.map(\n (item: MonetizationPaywallRenderPackage, index) => {\n const normalizedPackageSlug = item.packageSlug.trim().toLowerCase();\n const purchasePolicy = getPackagePurchasePolicy(item);\n const packageSignals = item.signals.filter(\n (signal: string) =>\n !(\n purchasePolicy.transitionKind === \"replace_recurring\" &&\n signal.toLowerCase().includes(\"trial\")\n ),\n );\n const isCurrentPackage = purchasePolicy.status === \"current_recurring_plan\";\n const isOwnedAdditive = purchasePolicy.status === \"owned_additive_unlock\";\n const isAdditiveCompanion =\n purchasePolicy.transitionKind === \"buy_additive_unlock\" &&\n subscriptionStatus === \"active\";\n const packageActionNote = isOwnedAdditive\n ? t(\n \"xapp.owned_unlock_note\",\n undefined,\n \"This add-on is already included in the current access.\",\n )\n : isCurrentPackage\n ? t(\n \"xapp.current_plan_note\",\n undefined,\n \"This plan is already active for this app.\",\n )\n : t(\n \"xapp.checkout_hint\",\n undefined,\n \"Checkout opens in a secure hosted payment page managed by the platform.\",\n );\n return (\n <div\n key={`${item.packageId || item.packageSlug || normalizedPackageSlug}:${index}`}\n className={`mx-paywall-card-package ${item.isDefault ? \"is-default\" : \"\"} ${\n selectedPaywallPackageSlug && normalizedPackageSlug === selectedPaywallPackageSlug\n ? \"is-selected\"\n : \"\"\n }`}\n >\n <div className=\"mx-paywall-card-package-head\">\n <div>\n <div className=\"mx-paywall-card-package-title\">{item.packageTitle}</div>\n {item.description ? (\n <div className=\"mx-paywall-card-package-description\">{item.description}</div>\n ) : null}\n </div>\n <div className=\"mx-paywall-card-money\">{item.moneyLabel}</div>\n </div>\n <div className=\"mx-paywall-card-package-meta\">\n <span className=\"mx-paywall-card-package-fit\">{item.fitLabel}</span>\n {selectedPaywallPackageSlug &&\n normalizedPackageSlug === selectedPaywallPackageSlug ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.selected_label\", undefined, \"Selected\")}\n </span>\n ) : null}\n {isOwnedAdditive ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.owned_unlock_label\", undefined, \"Owned unlock\")}\n </span>\n ) : null}\n {isCurrentPackage && !isOwnedAdditive ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.current_plan_label\", undefined, \"Current plan\")}\n </span>\n ) : null}\n {isAdditiveCompanion ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.additive_unlock_label\", undefined, \"Add-on with membership\")}\n </span>\n ) : null}\n {item.isDefault ? (\n <span className=\"mx-paywall-card-package-default\">\n {t(\"xapp.default_label\", undefined, \"Default\")}\n </span>\n ) : null}\n </div>\n {packageSignals.length > 0 ? (\n <div className=\"mx-paywall-card-signals\">\n {packageSignals.map((signal: string) => (\n <span key={signal} className=\"mx-paywall-card-signal\">\n {signal}\n </span>\n ))}\n </div>\n ) : null}\n {isAdditiveCompanion ? (\n <div className=\"mx-paywall-card-summary\">\n {t(\n \"xapp.additive_unlock_message\",\n undefined,\n \"This one-time unlock is additive. It adds access on top of the active subscription instead of replacing it.\",\n )}\n </div>\n ) : null}\n <div className=\"mx-paywall-card-package-actions\">\n {typeof client.prepareMyXappPurchaseIntent === \"function\" &&\n typeof client.createMyXappPurchasePaymentSession === \"function\" &&\n hasSubject &&\n canMutate ? (\n <button\n className={`mx-btn ${\n purchasePolicy.canPurchase &&\n !checkoutBusyPackageSlug &&\n !isOwnedAdditive &&\n !isCurrentPackage\n ? \"mx-btn-primary\"\n : \"mx-btn-secondary\"\n }`}\n disabled={\n !purchasePolicy.canPurchase ||\n checkoutBusyPackageSlug === normalizedPackageSlug\n }\n onClick={() => void startPackageCheckout(item.packageSlug)}\n >\n {isOwnedAdditive\n ? t(\"xapp.owned_unlock_active\", undefined, \"Owned unlock active\")\n : isCurrentPackage\n ? t(\"xapp.current_plan_active\", undefined, \"Current plan active\")\n : checkoutBusyPackageSlug === normalizedPackageSlug\n ? t(\"xapp.checkout_starting\", undefined, \"Starting checkout...\")\n : isAdditiveCompanion\n ? t(\n \"xapp.additive_unlock_action\",\n undefined,\n \"Purchase add-on unlock\",\n )\n : t(\"xapp.checkout_action\", undefined, \"Start checkout\")}\n </button>\n ) : null}\n <div className=\"mx-paywall-card-package-note\">{packageActionNote}</div>\n </div>\n </div>\n );\n },\n )}\n </div>\n {checkoutNotice ? <div className=\"mx-paywall-card-summary\">{checkoutNotice}</div> : null}\n {checkoutError ? <div className=\"mx-payment-lock-error\">{checkoutError}</div> : null}\n </div>\n ) : null;\n const detailsCard = (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.details_title\", undefined, \"Details\")}\n </h3>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.app_id_label\", undefined, \"App ID\")}</span>\n <code className=\"mx-meta-value mx-meta-code\">{xappId}</code>\n </div>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"common.status\", undefined, \"Status\")}</span>\n <span className=\"mx-meta-value\">\n {installation\n ? t(\"xapp.status_added\", undefined, \"Added\")\n : t(\"xapp.status_available\", undefined, \"Available\")}\n </span>\n </div>\n\n {publisherTo ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.publisher_label\", undefined, \"Publisher\")}</span>\n <Link to={publisherTo as any} className=\"mx-meta-value\">\n {publisherName}\n </Link>\n </div>\n ) : null}\n\n {manifestTags.length > 0 && (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">{t(\"xapp.tags_label\", undefined, \"Tags\")}</span>\n <div className=\"mx-tag-list\">\n {manifestTags.map((tag) => (\n <span key={tag} className=\"mx-tag\">\n {tag}\n </span>\n ))}\n </div>\n </div>\n )}\n\n {requiresTerms && (\n <div className=\"mx-detail-terms-link-wrap\">\n <button\n className=\"mx-btn mx-btn-ghost mx-detail-terms-link\"\n onClick={() => {\n setTermsAction(\"none\");\n setTermsOpen(true);\n }}\n >\n {t(\"xapp.view_terms\", undefined, \"View Terms & Conditions\")} \u2192\n </button>\n </div>\n )}\n </div>\n );\n const historySurfaceHtml = useMemo(\n () =>\n buildMonetizationHistorySurfaceHtml(\n {\n history:\n (asRecord(monetizationHistory)?.history as\n | Record<string, unknown>\n | null\n | undefined) ?? monetizationHistory,\n },\n {\n title: t(\"xapp.history_title\", undefined, \"History\"),\n subtitle: title\n ? t(\n \"xapp.history_route_subtitle\",\n { title },\n `Balances, recent activity, and purchases for ${title}.`,\n )\n : t(\n \"xapp.history_route_subtitle_default\",\n undefined,\n \"Balances, recent activity, and purchases for this app.\",\n ),\n locale,\n showHeader: false,\n },\n ),\n [locale, monetizationHistory, t, title],\n );\n if (plansOnlyMode) {\n return (\n <div\n className={`mx-detail-container mx-detail-container-section-shell ${\n isEmbedded ? \"is-embedded\" : \"\"\n }`}\n >\n {error && <div className=\"mx-detail-error\">{error}</div>}\n {busy && !data ? (\n <div className=\"mx-sidebar-card mx-detail-empty mx-plans-route-empty\" aria-busy=\"true\">\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u25CE</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"xapp.plans_loading_title\", undefined, \"Loading plans\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {t(\n \"xapp.plans_loading_desc\",\n undefined,\n \"Preparing published plans, balances, and current access for this app.\",\n )}\n </div>\n </div>\n </div>\n ) : (\n <div className={`mx-plans-route ${widgetHostedPlansMode ? \"is-widget-hosted\" : \"\"}`}>\n {!widgetHostedPlansMode ? (\n <>\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceRootHref as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={detailHref as any}>{title}</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>\n {routeSurfaceView === \"history\"\n ? t(\"xapp.history_title\", undefined, \"History\")\n : t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </span>\n </div>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {routeSurfaceView === \"history\"\n ? t(\"xapp.history_title\", undefined, \"History\")\n : t(\"xapp.plan_options_title\", undefined, \"Plans\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"xapps\"\n isEmbedded={isEmbedded}\n tokenSearch={token ? `?token=${encodeURIComponent(token)}` : \"\"}\n />\n {!singleXappMode && (\n <Link to={marketplaceRootHref as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.clear_filter\", undefined, \"Clear Filter\")}\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n </>\n ) : null}\n <XappWorkspaceNav\n xappId={String(xappId ?? \"\")}\n xappTitle={title}\n isEmbedded={isEmbedded}\n token={token}\n installationId={installation?.installationId}\n active=\"billing\"\n billingActive=\"plans\"\n openWidgetId={defaultWidgetId}\n openWidgetName={defaultWidgetName}\n openToolName={defaultWidgetToolName}\n openAppStrategy={openAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n <div className=\"mx-plans-route-grid\">\n <div className=\"mx-plans-route-main\">\n {routeSurfaceView === \"history\" ? (\n <div\n className=\"mx-history-route-surface\"\n dangerouslySetInnerHTML={{ __html: historySurfaceHtml }}\n />\n ) : (\n plansCard || (\n <div className=\"mx-sidebar-card mx-detail-empty mx-plans-route-empty\">\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u25CE</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\n \"xapp.no_plans_available\",\n undefined,\n \"No plans are currently available.\",\n )}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {t(\n \"xapp.no_plans_available_desc\",\n undefined,\n \"Published plans will appear here when this app exposes a paywall.\",\n )}\n </div>\n </div>\n </div>\n )\n )}\n </div>\n <aside className=\"mx-detail-sidebar\">\n {currentAccessCard}\n {detailsCard}\n </aside>\n </div>\n </div>\n )}\n </div>\n );\n }\n return (\n <div className={`mx-detail-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-detail-topbar\">\n <div className=\"mx-detail-topbar-left\">\n {!singleXappMode && (\n <Link to={backTo as any} relative=\"path\" className=\"mx-btn mx-btn-ghost\">\n \u2190 {t(\"common.back\", undefined, \"Back\")}\n </Link>\n )}\n <div className=\"mx-detail-topbar-title\">{title}</div>\n </div>\n <div className=\"mx-detail-topbar-right\">\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </div>\n\n <XappWorkspaceNav\n xappId={String(xappId ?? \"\")}\n xappTitle={title}\n isEmbedded={isEmbedded}\n token={token}\n installationId={installation?.installationId}\n active=\"overview\"\n openWidgetId={defaultWidgetId}\n openWidgetName={defaultWidgetName}\n openToolName={defaultWidgetToolName}\n openAppStrategy={openAppStrategy}\n onOpenApp={handleWorkspaceOpenApp}\n />\n\n {error && <div className=\"mx-detail-error\">{error}</div>}\n\n {busy && !data ? (\n <>\n <div className=\"mx-detail-skeleton-header\" aria-busy=\"true\">\n <div className=\"mx-detail-skeleton-icon\" />\n <div className=\"mx-detail-skeleton-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"55%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"45%\" }} />\n </div>\n </div>\n <div className=\"mx-detail-skeleton-grid\">\n <div className=\"mx-detail-skeleton-sections\">\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"30%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"70%\" }} />\n </div>\n <div className=\"mx-detail-skeleton-section\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"40%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"60%\" }} />\n </div>\n </div>\n <div>\n <div className=\"mx-detail-skeleton-sidebar-card\">\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" style={{ width: \"45%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line\" style={{ width: \"65%\" }} />\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </>\n ) : (\n <>\n <header className=\"mx-detail-header\">\n <img src={imageUrl} alt={title} className=\"mx-detail-icon\" />\n <div className=\"mx-detail-info\">\n <div className=\"mx-detail-kicker\">\n {publisherName\n ? t(\n \"xapp.kicker_publisher\",\n { publisher: publisherName },\n `Publisher: ${publisherName}`,\n )\n : t(\"xapp.kicker_default\", undefined, \"Xapp\")}\n </div>\n <h1 className=\"mx-detail-title\">{title}</h1>\n {description ? <p className=\"mx-detail-subtitle\">{description}</p> : null}\n <div className=\"mx-detail-meta-row\">\n <div className=\"mx-card-slug\">{xappId}</div>\n {!hideVersions && readString(versionRecord?.version) && (\n <div className=\"mx-card-version mx-detail-version-pill\">\n v{readString(versionRecord?.version)}\n </div>\n )}\n {updateAvailable ? (\n <div className=\"mx-detail-update-pill\">\n {t(\"xapp.update_available\", undefined, \"Update available\")}\n </div>\n ) : null}\n </div>\n </div>\n <div className=\"mx-detail-actions\">\n {canMutate && mutationControlsReady ? (\n <>\n {installation &&\n updateAvailable &&\n host.requestUpdate &&\n installationPolicy?.update_mode !== \"auto_update_compatible\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n setTermsOpen(true);\n return;\n }\n if (!installation.installationId) return;\n requestUpdateForWidget(null);\n }}\n >\n {updateAppLabel}\n </button>\n ) : null}\n\n {!installation ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={busy}\n onClick={() => {\n if (requiresTerms) {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsWidgetId(readString(defaultWidget?.id) || null);\n setTermsWidgetName(\n resolveMarketplaceText(defaultWidget?.title as any, locale) || null,\n );\n setTermsOpen(true);\n return;\n }\n requestInstallForWidget(\n readString(defaultWidget?.id) || null,\n resolveMarketplaceText(defaultWidget?.title as any, locale) || null,\n false,\n autoAvailableMode,\n );\n }}\n >\n {autoAvailableMode ? openAppLabel : addAppLabel}\n </button>\n ) : !autoAvailableMode ? (\n <button\n className=\"mx-btn mx-btn-outline\"\n data-variant=\"danger\"\n disabled={busy || !installation.installationId}\n onClick={() => {\n if (!installation.installationId) return;\n setRemoveConfirmOpen(true);\n }}\n >\n {removeAppLabel}\n </button>\n ) : null}\n </>\n ) : null}\n </div>\n </header>\n\n <div className=\"mx-detail-grid\">\n <main className=\"mx-detail-main\">\n <section className=\"mx-detail-section mx-detail-section-about\">\n <h2 className=\"mx-section-title\">{t(\"xapp.about_title\", undefined, \"About\")}</h2>\n <div className=\"mx-detail-desc\">{description}</div>\n </section>\n\n <section\n className=\"mx-detail-section mx-detail-section-widgets\"\n ref={widgetSectionRef}\n >\n <h2 className=\"mx-section-title\">\n {t(\"xapp.available_views_title\", undefined, \"Available Views\")}\n </h2>\n {!widgetsEnabled ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {!installation\n ? autoAvailableMode\n ? t(\n \"xapp.open_to_access_views\",\n undefined,\n \"Open this app to start and install it automatically for your workspace.\",\n )\n : t(\n \"xapp.add_to_access_views\",\n undefined,\n \"Add this app to your workspace to access its available views.\",\n )\n : updateAvailable\n ? autoUpdateMode\n ? t(\n \"xapp.update_to_access_views_auto\",\n undefined,\n \"Open a view to update the app automatically for your workspace.\",\n )\n : t(\n \"xapp.update_to_access_views\",\n undefined,\n \"An update is available. Please update the app to access its available views.\",\n )\n : !hasSubject\n ? t(\n \"xapp.load_as_user_to_access\",\n undefined,\n \"Load the catalog as a user to access this app.\",\n )\n : null}\n </div>\n ) : widgets.length === 0 ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {t(\n \"xapp.no_views_available\",\n undefined,\n \"No app views are currently available.\",\n )}\n </div>\n ) : (\n <div className=\"mx-detail-widget-list\">\n {widgets.map((w, idx) => {\n const name =\n resolveMarketplaceText(w.title as any, locale) ||\n readString(w.widget_name) ||\n readString(w.name) ||\n readString(w.id) ||\n t(\"common.widget\", undefined, \"Widget\");\n const disabled = !widgetsEnabled;\n const isDefault =\n readBoolean(w.default, false) ||\n (idx === 0 && !widgets.some((ww) => readBoolean(ww.default, false)));\n const widgetType = String(w.type || \"\").toLowerCase();\n return (\n <button\n key={String(w.id)}\n disabled={disabled}\n className={`mx-detail-widget-card ${disabled ? \"is-disabled\" : \"\"} ${isDefault ? \"is-default\" : \"\"}`}\n onClick={() => {\n if (!widgetsEnabled) return;\n const widgetId = readString(w.id);\n if (!widgetId) return;\n launchWidgetForSubject(widgetId, name, readString(w.bind_tool_name));\n }}\n >\n <div className=\"mx-detail-widget-icon\">\n {widgetType === \"read\" ? (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" />\n </svg>\n ) : (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\" ry=\"2\" />\n <line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\" />\n <line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\" />\n </svg>\n )}\n </div>\n <div className=\"mx-detail-widget-body\">\n <div className=\"mx-detail-widget-name\">{name}</div>\n {readString(w.bind_tool_name) && (\n <div className=\"mx-detail-widget-tool\">\n {readString(w.bind_tool_name)}\n </div>\n )}\n <div className=\"mx-detail-widget-badges\">\n {isDefault && (\n <span className=\"mx-detail-widget-badge is-primary\">\n {t(\"xapp.widget_primary\", undefined, \"Primary\")}\n </span>\n )}\n {widgetType && (\n <span className=\"mx-detail-widget-badge\">{widgetType}</span>\n )}\n </div>\n </div>\n <div className=\"mx-detail-widget-action\">\n <span className=\"mx-detail-widget-action-label\">\n {t(\"xapp.widget_open\", undefined, \"Open\")}\n </span>\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\" />\n <polyline points=\"12 5 19 12 12 19\" />\n </svg>\n </div>\n </button>\n );\n })}\n </div>\n )}\n </section>\n\n {plansCard ? (\n <section className=\"mx-detail-section mx-detail-section-plans\">{plansCard}</section>\n ) : null}\n\n <section className=\"mx-detail-section mx-detail-section-guards\">\n <div className=\"mx-detail-guard-header\">\n <h2 className=\"mx-section-title mx-section-title-tight\">\n {t(\"xapp.how_app_runs\", undefined, \"How This App Runs\")}\n </h2>\n <button\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n onClick={() => setGuardSummaryOpen((v) => !v)}\n >\n {guardSummaryOpen\n ? t(\"activity.hide_details\", undefined, \"Hide details\")\n : t(\"xapp.view_details\", undefined, \"View details\")}\n </button>\n </div>\n {!guardSummaryOpen ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n {guardSummary.items.length === 0 ? (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <path\n d=\"M10 2l7 4v4c0 4.42-2.98 8.28-7 9.5C5.98 18.28 3 14.42 3 10V6l7-4z\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M7 10l2 2 4-4\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-summary-text\">\n {guardSummary.items.length === 0\n ? t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )\n : t(\n \"xapp.guard_summary\",\n {\n itemCount: guardSummary.items.length,\n itemSuffix: guardSummary.items.length === 1 ? \"\" : \"s\",\n stageCount: guardSummary.byTrigger.size,\n stageSuffix: guardSummary.byTrigger.size === 1 ? \"\" : \"s\",\n },\n `This app includes ${guardSummary.items.length} run check${guardSummary.items.length === 1 ? \"\" : \"s\"} across ${guardSummary.byTrigger.size} stage${guardSummary.byTrigger.size === 1 ? \"\" : \"s\"}. Open details to review access, payment, or follow-up steps.`,\n )}\n </div>\n </div>\n ) : guardSummary.items.length === 0 ? (\n <div className=\"mx-sidebar-card mx-guard-summary-card\">\n <div className=\"mx-guard-summary-icon\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\n <circle cx=\"10\" cy=\"10\" r=\"9\" stroke=\"#94a3b8\" strokeWidth=\"1.5\" />\n <path\n d=\"M6 10l3 3 5-5\"\n stroke=\"#94a3b8\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n </div>\n <div className=\"mx-guard-summary-text\">\n {t(\n \"xapp.no_run_requirements\",\n undefined,\n \"This app has no extra run requirements configured.\",\n )}\n </div>\n </div>\n ) : (\n <div className=\"mx-guard-pipeline\">\n {Array.from(guardSummary.byTrigger.entries()).map(\n ([trigger, items], stageIdx) => (\n <div key={trigger} className=\"mx-guard-stage\">\n <div className=\"mx-guard-stage-header\">\n <div className=\"mx-guard-stage-number\">{stageIdx + 1}</div>\n <div className=\"mx-guard-stage-icon\">\n {trigger.startsWith(\"after:\") ? (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n d=\"M4 8l3 3 5-5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.8\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M6 3.5l6 4.5-6 4.5V3.5z\" fill=\"currentColor\" />\n </svg>\n )}\n </div>\n <div className=\"mx-guard-stage-title\">\n {humanizeTrigger(trigger, t)}\n </div>\n <div className=\"mx-guard-stage-policy\">\n {describeGuardChain(items[0]?.policyKind || \"all\", t)}\n </div>\n </div>\n <div className=\"mx-guard-stage-body\">\n {items.map((guard, guardIdx) => (\n <div\n key={`${trigger}-${guard.slug}`}\n className={`mx-guard-row ${guard.blocking ? \"mx-guard-row--required\" : \"mx-guard-row--info\"}`}\n >\n <div className=\"mx-guard-row-left\">\n {guard.order !== null ? (\n <span className=\"mx-guard-row-order\">{guard.order}</span>\n ) : (\n <span className=\"mx-guard-row-order\">{guardIdx + 1}</span>\n )}\n <span\n className=\"mx-guard-row-name\"\n title={guard.label || guard.slug}\n >\n {guard.label ? guard.label : humanizeSlug(guard.slug)}\n </span>\n </div>\n <div className=\"mx-guard-row-right\">\n <span\n className={`mx-guard-indicator ${guard.headless ? \"mx-guard-indicator--auto\" : \"mx-guard-indicator--user\"}`}\n >\n {guard.headless ? (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"7\"\n r=\"6\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M4.5 7l2 2 3.5-3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ) : (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n <circle\n cx=\"7\"\n cy=\"4.5\"\n r=\"2.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n />\n <path\n d=\"M2 12c0-2.76 2.24-5 5-5s5 2.24 5 5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.4\"\n strokeLinecap=\"round\"\n />\n </svg>\n )}\n <span>\n {guard.headless\n ? t(\"xapp.auto\", undefined, \"Auto\")\n : t(\"xapp.user_step\", undefined, \"User step\")}\n </span>\n </span>\n <span\n className={`mx-guard-severity ${guard.blocking ? \"mx-guard-severity--required\" : \"mx-guard-severity--optional\"}`}\n >\n {guard.blocking\n ? t(\"xapp.required\", undefined, \"Required\")\n : t(\"xapp.info\", undefined, \"Info\")}\n </span>\n </div>\n </div>\n ))}\n </div>\n </div>\n ),\n )}\n </div>\n )}\n </section>\n\n {manifestScreenshots.length > 0 && (\n <section className=\"mx-detail-section mx-detail-section-screenshots\">\n <h2 className=\"mx-section-title\">\n {t(\"xapp.screenshots_title\", undefined, \"Screenshots\")}\n </h2>\n <div className=\"mx-screenshots\">\n {manifestScreenshots.map((s, i) => (\n <img\n key={i}\n src={s}\n alt={t(\"xapp.screenshot_alt\", { index: i + 1 }, `Screenshot ${i + 1}`)}\n className=\"mx-screenshot\"\n />\n ))}\n </div>\n </section>\n )}\n </main>\n\n <aside className=\"mx-detail-sidebar\">\n {currentAccessCard}\n\n {detailsCard}\n\n {usageCreditSummary ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">\n {t(\"xapp.usage_credits_title\", undefined, \"Usage Credits\")}\n </h3>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.available_label\", undefined, \"Available\")}\n </span>\n <span className=\"mx-meta-value\">\n {t(\n \"xapp.ready_to_use\",\n { count: usageCreditSummary.available_count },\n `${usageCreditSummary.available_count} ready to use`,\n )}\n </span>\n </div>\n {usageCreditSummary.available_session_backed_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.source_label\", undefined, \"Source\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.linked_payment_sessions\",\n { count: usageCreditSummary.available_session_backed_count },\n `${usageCreditSummary.available_session_backed_count} linked to visible payment sessions`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.reserved_active_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.in_flight_label\", undefined, \"In flight\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_active_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.reserved_stale_count > 0 ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.needs_review_label\", undefined, \"Needs review\")}\n </span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.reserved_stale_count}\n </span>\n </div>\n ) : null}\n {usageCreditSummary.available_ledger_only_count > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.invalid_label\", undefined, \"Invalid\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {t(\n \"xapp.invalid_credits\",\n { count: usageCreditSummary.available_ledger_only_count },\n `${usageCreditSummary.available_ledger_only_count} orphan ledger rows are not usable credits`,\n )}\n </div>\n </div>\n </div>\n ) : null}\n {usageCreditSummary.by_tool.length > 0 ? (\n <div className=\"mx-meta-item mx-meta-item-top\">\n <span className=\"mx-meta-label\">\n {t(\"xapp.by_tool_label\", undefined, \"By tool\")}\n </span>\n <div className=\"mx-meta-value mx-meta-stack-md\">\n {usageCreditSummary.by_tool.map((tool) => (\n <div key={tool.tool_name}>\n <strong>{tool.available_count}</strong>{\" \"}\n {t(\"xapp.for_label\", undefined, \"for\")} <code>{tool.tool_name}</code>\n {tool.available_ledger_only_count > 0\n ? ` \u00B7 ${t(\n \"xapp.invalid_short\",\n { count: tool.available_ledger_only_count },\n `${tool.available_ledger_only_count} invalid`,\n )}`\n : \"\"}\n {tool.reserved_active_count > 0\n ? ` \u00B7 ${t(\n \"xapp.in_flight_short\",\n { count: tool.reserved_active_count },\n `${tool.reserved_active_count} in flight`,\n )}`\n : \"\"}\n {tool.reserved_stale_count > 0\n ? ` \u00B7 ${t(\n \"xapp.stale_short\",\n { count: tool.reserved_stale_count },\n `${tool.reserved_stale_count} stale`,\n )}`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {defaultWidget && hasSubject && (installation || autoAvailableMode) && (\n <button\n className=\"mx-btn mx-btn-primary mx-detail-primary-cta\"\n onClick={() => {\n const widgetId = readString(defaultWidget.id);\n if (!widgetId) return;\n launchWidgetForSubject(\n widgetId,\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n readString(defaultWidget?.widget_name) ||\n readString(defaultWidget?.name) ||\n t(\"common.widget\", undefined, \"Widget\"),\n readString(defaultWidget?.bind_tool_name),\n );\n }}\n >\n {openAppLabel}\n </button>\n )}\n </aside>\n </div>\n\n {termsOpen && (\n <div className=\"mx-detail-modal-backdrop\" onClick={() => setTermsOpen(false)}>\n <div className=\"mx-sidebar-card mx-detail-modal\" onClick={(e) => e.stopPropagation()}>\n <div className=\"mx-detail-modal-head\">\n <h2 className=\"mx-section-title mx-section-title-tight\">{termsTitle}</h2>\n <button\n onClick={() => setTermsOpen(false)}\n className=\"mx-btn mx-btn-ghost\"\n aria-label={t(\"xapp.close_terms_dialog\", undefined, \"Close terms dialog\")}\n >\n \u00D7\n </button>\n </div>\n\n <div className=\"mx-detail-modal-body\">\n {termsText && (\n <div className=\"mx-detail-desc mx-detail-modal-copy\">{termsText}</div>\n )}\n {termsUrl && (\n <a\n href={termsUrl}\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"mx-btn mx-btn-outline mx-detail-modal-link\"\n >\n {t(\"xapp.view_full_document\", undefined, \"View Full Document\")}\n </a>\n )}\n\n {(termsAction === \"install\" || termsAction === \"update\") && (\n <label className=\"mx-detail-terms-accept\">\n <input\n type=\"checkbox\"\n checked={termsAccepted}\n onChange={(e) => setTermsAccepted(e.target.checked)}\n className=\"mx-detail-terms-checkbox\"\n />\n <span className=\"mx-detail-terms-copy\">\n {t(\n \"xapp.accept_terms\",\n undefined,\n \"I have read and accept the terms and conditions.\",\n )}\n </span>\n </label>\n )}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button\n className=\"mx-btn mx-btn-outline\"\n onClick={() => {\n setTermsOpen(false);\n setTermsAction(\"none\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n }}\n >\n {t(\"common.cancel\", undefined, \"Cancel\")}\n </button>\n {termsAction === \"install\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted}\n onClick={() => {\n requestInstallForWidget(\n termsWidgetId ?? readString(defaultWidget?.id) ?? null,\n termsWidgetName ||\n resolveMarketplaceText(defaultWidget?.title as any, locale) ||\n null,\n true,\n autoAvailableMode,\n );\n setTermsOpen(false);\n setTermsAction(\"none\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n }}\n >\n {t(\"xapp.accept_add_app\", undefined, \"Accept & Add app\")}\n </button>\n ) : termsAction === \"update\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted || !installation}\n onClick={() => {\n if (!installation) return;\n requestUpdateForWidget(termsWidgetId, true);\n setTermsOpen(false);\n setTermsAction(\"none\");\n setTermsWidgetId(null);\n setTermsWidgetName(null);\n }}\n >\n {t(\"xapp.accept_update\", undefined, \"Accept & Update\")}\n </button>\n ) : null}\n </div>\n </div>\n </div>\n )}\n\n <ConfirmActionModal\n open={cancelSubscriptionConfirmOpen}\n title={t(\"xapp.subscription_cancel_title\", undefined, \"Cancel subscription?\")}\n description={t(\n \"xapp.subscription_cancel_description\",\n undefined,\n \"The subscription will stop renewing. Current access remains available until the current period ends.\",\n )}\n confirmLabel={t(\"xapp.subscription_cancel_action\", undefined, \"Cancel subscription\")}\n onCancel={() => setCancelSubscriptionConfirmOpen(false)}\n onConfirm={() => {\n void cancelSubscriptionLifecycle();\n }}\n />\n\n <ConfirmActionModal\n open={removeConfirmOpen}\n title={t(\"catalog.remove_app_title\", undefined, \"Remove app?\")}\n description={t(\n \"catalog.remove_app_description\",\n { title },\n `Remove ${title} from your current workspace? You can add it again later.`,\n )}\n confirmLabel={removeAppLabel}\n onCancel={() => setRemoveConfirmOpen(false)}\n onConfirm={() => {\n if (!host.requestUninstall || !installation?.installationId) return;\n host.requestUninstall({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\n setRemoveConfirmOpen(false);\n }}\n />\n </>\n )}\n </div>\n );\n}\n", "import type { MarketplaceMonetizationAccessProjection } from \"../types\";\nimport { readString } from \"./readers\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as Record<string, unknown>;\n}\n\nfunction readCurrentAccessFlag(value: unknown): boolean {\n return typeof value === \"boolean\" ? value : false;\n}\n\nexport function hasMarketplaceCatalogMonetization(manifest: unknown): boolean {\n const manifestRecord = asRecord(manifest);\n const monetization = asRecord(manifestRecord?.monetization);\n if (!monetization) return false;\n return [\"products\", \"offerings\", \"packages\", \"prices\"].some((key) => {\n const items = monetization[key];\n return Array.isArray(items) && items.length > 0;\n });\n}\n\nexport function hasMarketplaceCurrentAccess(\n projection: MarketplaceMonetizationAccessProjection | null | undefined,\n): boolean {\n if (!projection) return false;\n if (readCurrentAccessFlag(projection.has_current_access)) return true;\n\n const entitlementState = readString(projection.entitlement_state);\n const balanceState = readString(projection.balance_state);\n return (\n entitlementState === \"active\" ||\n entitlementState === \"grace_period\" ||\n balanceState === \"sufficient\"\n );\n}\n\nexport function resolveMarketplaceAccessState(input: {\n projection: MarketplaceMonetizationAccessProjection | null | undefined;\n hasCatalogMonetization?: boolean;\n availableLabel: string;\n}): string | null {\n const entitlementState = readString(input.projection?.entitlement_state);\n if (entitlementState && entitlementState !== \"inactive\") return entitlementState;\n return hasMarketplaceCurrentAccess(input.projection)\n ? input.availableLabel\n : entitlementState || null;\n}\n\nexport function resolveMarketplaceDefaultAccessState(input: {\n projection: MarketplaceMonetizationAccessProjection | null | undefined;\n hasCatalogMonetization?: boolean;\n availableLabel: string;\n}): string | null {\n const resolved = resolveMarketplaceAccessState(input);\n if (resolved && resolved !== \"inactive\") return resolved;\n if (input.projection && input.hasCatalogMonetization === false) {\n return input.availableLabel;\n }\n return resolved;\n}\n", "import { useEffect, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport type { TranslationParams } from \"@xapps-platform/platform-i18n\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { XappWorkspaceNav } from \"../components/XappWorkspaceNav\";\nimport type { CatalogXappDetail } from \"../types\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, normalizeExpandStage, readFirstString, readString } from \"../utils/readers\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getOperationalSurfaceLabel,\n getVisibleOperationalSurfaces,\n resolveOperationalSurfacePlacement,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport \"../marketplace.css\";\n\ntype ExpandStage = \"inline\" | \"focus\" | \"fullscreen\";\n\ntype NestedPendingExpand = {\n sourceWindow: Window | null;\n timeoutId: number;\n cleanupId: number | null;\n settled: boolean;\n onLateResult: ((value: Record<string, unknown>) => void) | null;\n resolve: (value: Record<string, unknown> | null) => void;\n};\n\ntype SessionExpiredUi = {\n title: string;\n message: string;\n};\n\ntype WidgetThemePayload = {\n primary?: string;\n primaryDark?: string;\n bg?: string;\n bgSubtle?: string;\n card?: string;\n border?: string;\n text?: string;\n muted?: string;\n shadowSm?: string;\n shadow?: string;\n shadowLg?: string;\n radiusSm?: string;\n radiusMd?: string;\n radius?: string;\n radiusLg?: string;\n fontFamily?: string;\n displayFont?: string;\n tokens?: Record<string, string>;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nfunction readPaymentEvidenceParams(search: string): URLSearchParams {\n const out = new URLSearchParams();\n const qs = new URLSearchParams(String(search || \"\"));\n for (const [k, v] of qs.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n if (Array.from(out.keys()).length > 0) return out;\n const hostReturnUrl = readHostReturnUrl(search);\n if (!hostReturnUrl) return out;\n try {\n const host = new URL(hostReturnUrl);\n for (const [k, v] of host.searchParams.entries()) {\n if (k.startsWith(\"xapps_payment_\")) out.set(k, v);\n }\n } catch {\n // ignore malformed host return URL\n }\n return out;\n}\n\nfunction toSessionExpiredUi(\n input: unknown,\n t: (key: string, params?: TranslationParams, fallback?: string) => string,\n): SessionExpiredUi {\n const data = asRecord(input);\n const reason = readString(data.reason).toLowerCase();\n const message = readFirstString(data.message);\n\n if (reason === \"logout\") {\n return {\n title: t(\"widget.session_ended_title\", undefined, \"Session ended\"),\n message:\n message ||\n t(\n \"widget.session_ended_message\",\n undefined,\n \"Your session ended. Go back and open the widget again.\",\n ),\n };\n }\n\n if (reason === \"token_refresh_failed\") {\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_refresh_failed\",\n undefined,\n \"This widget session expired and could not be renewed. Open it again to continue.\",\n ),\n };\n }\n\n return {\n title: t(\"widget.session_expired_title\", undefined, \"Widget session expired\"),\n message:\n message ||\n t(\n \"widget.session_expired_default\",\n undefined,\n \"This widget session ended. Go back and open it again to continue.\",\n ),\n };\n}\n\nfunction readThemeCssValue(names: string[], fallback = \"\"): string {\n if (typeof window === \"undefined\" || typeof document === \"undefined\") return fallback;\n const nodes = [document.documentElement, document.body].filter((node): node is HTMLElement =>\n Boolean(node),\n );\n for (const node of nodes) {\n const styles = window.getComputedStyle(node);\n for (const name of names) {\n const value = styles.getPropertyValue(name).trim();\n if (value) return value;\n }\n }\n return fallback;\n}\n\nfunction buildWidgetThemeFromDocument(\n hostTheme: Record<string, unknown> | null | undefined,\n): WidgetThemePayload | null {\n const hostThemePayload =\n hostTheme && typeof hostTheme === \"object\" ? (hostTheme as WidgetThemePayload) : null;\n const theme: WidgetThemePayload = {\n primary: readThemeCssValue([\"--cx-primary\", \"--xapps-accent\", \"--mx-primary\"]),\n primaryDark: readThemeCssValue([\n \"--cx-primary-dark\",\n \"--xapps-accent-strong\",\n \"--mx-primary-hover\",\n ]),\n bg: readThemeCssValue([\"--cx-bg\", \"--mx-bg\"]),\n bgSubtle: readThemeCssValue([\"--cx-bg-subtle\", \"--xapps-surface-subtle\", \"--mx-bg-subtle\"]),\n card: readThemeCssValue([\"--cx-card\", \"--xapps-surface-bg\", \"--mx-card-bg\"]),\n border: readThemeCssValue([\"--cx-border\", \"--xapps-border-color\", \"--mx-border\"]),\n text: readThemeCssValue([\"--cx-text\", \"--xapps-text-primary\", \"--mx-text-main\"]),\n muted: readThemeCssValue([\"--cx-muted\", \"--xapps-text-secondary\", \"--mx-text-muted\"]),\n shadowSm: readThemeCssValue([\"--cx-shadow-sm\", \"--mx-shadow-sm\"]),\n shadow: readThemeCssValue([\"--cx-shadow\", \"--mx-shadow\"]),\n shadowLg: readThemeCssValue([\"--cx-shadow-lg\", \"--mx-shadow-lg\"]),\n radiusSm: readThemeCssValue([\"--cx-radius-sm\", \"--mx-radius-sm\"]),\n radiusMd: readThemeCssValue([\"--cx-radius-md\", \"--mx-radius-md\"]),\n radius: readThemeCssValue([\"--cx-radius\", \"--mx-radius-md\"]),\n radiusLg: readThemeCssValue([\"--cx-radius-lg\", \"--mx-radius-lg\"]),\n fontFamily: readThemeCssValue([\"--xapps-font-family\", \"--mx-font-family\"]),\n displayFont: readThemeCssValue([\"--xapps-display-font\", \"--mx-display-font\"]),\n tokens: {\n \"--xapps-accent\": readThemeCssValue([\"--xapps-accent\", \"--cx-primary\", \"--mx-primary\"]),\n \"--xapps-accent-strong\": readThemeCssValue([\n \"--xapps-accent-strong\",\n \"--cx-primary-dark\",\n \"--mx-primary-hover\",\n ]),\n \"--xapps-surface-bg\": readThemeCssValue([\"--xapps-surface-bg\", \"--cx-card\", \"--mx-card-bg\"]),\n \"--xapps-surface-subtle\": readThemeCssValue([\n \"--xapps-surface-subtle\",\n \"--cx-bg-subtle\",\n \"--mx-bg-subtle\",\n ]),\n \"--xapps-border-color\": readThemeCssValue([\n \"--xapps-border-color\",\n \"--cx-border\",\n \"--mx-border\",\n ]),\n \"--xapps-text-primary\": readThemeCssValue([\n \"--xapps-text-primary\",\n \"--cx-text\",\n \"--mx-text-main\",\n ]),\n \"--xapps-text-secondary\": readThemeCssValue([\n \"--xapps-text-secondary\",\n \"--cx-muted\",\n \"--mx-text-muted\",\n ]),\n },\n };\n const seededTokens = Object.fromEntries(\n Object.entries(theme.tokens || {}).filter(\n ([, value]) => typeof value === \"string\" && value.trim().length > 0,\n ),\n ) as Record<string, string>;\n const hostTokens =\n hostThemePayload?.tokens && typeof hostThemePayload.tokens === \"object\"\n ? hostThemePayload.tokens\n : undefined;\n const mergedTokens =\n Object.keys(seededTokens).length > 0 || hostTokens\n ? {\n ...(hostTokens || {}),\n ...seededTokens,\n }\n : undefined;\n const merged: WidgetThemePayload = {\n ...(hostThemePayload || {}),\n ...Object.fromEntries(\n Object.entries(theme).filter(([key, value]) => {\n if (key === \"tokens\") return false;\n if (value == null) return false;\n if (typeof value === \"string\") return value.trim().length > 0;\n if (typeof value === \"object\") return true;\n return false;\n }),\n ),\n ...(mergedTokens ? { tokens: mergedTokens } : {}),\n };\n if (\n !merged.primary &&\n !merged.primaryDark &&\n !merged.bg &&\n !merged.bgSubtle &&\n !merged.card &&\n !merged.border &&\n !merged.text &&\n !merged.muted\n ) {\n return hostThemePayload;\n }\n return merged;\n}\n\nfunction encodeWidgetThemeForQuery(theme: WidgetThemePayload | null | undefined): string {\n if (!theme || typeof theme !== \"object\") return \"\";\n try {\n return JSON.stringify(theme);\n } catch {\n return \"\";\n }\n}\n\nexport function WidgetView() {\n const { client, host, env } = useMarketplace();\n const { t, locale } = useMarketplaceI18n();\n const { installationId, widgetId } = useParams();\n const token = useQueryToken();\n const iframeRef = useRef<HTMLIFrameElement>(null);\n const shellRef = useRef<HTMLDivElement>(null);\n const nestedExpandSeqRef = useRef(0);\n const nestedExpandPendingRef = useRef<Map<string, NestedPendingExpand>>(new Map());\n const [xappTitle, setXappTitle] = useState<string>(\"\");\n const [xappId, setXappId] = useState<string>(\"\");\n const [xappDetail, setXappDetail] = useState<CatalogXappDetail | null>(null);\n const [discoveredOperationalSurfaces, setDiscoveredOperationalSurfaces] = useState<\n OperationalSurfaceKey[]\n >([]);\n const [widgetToken, setWidgetToken] = useState<string>(\"\");\n const [widgetSessionContext, setWidgetSessionContext] = useState<{\n clientId: string;\n installationId: string;\n xappId: string;\n subjectId: string | null;\n requestId?: string | null;\n resultPresentation?: \"runtime_default\" | \"inline\" | \"publisher_managed\";\n locale?: string | null;\n } | null>(null);\n const [error, setError] = useState<string | null>(null);\n const [sessionExpired, setSessionExpired] = useState<SessionExpiredUi | null>(null);\n const [hostNestedExpandStage, setHostNestedExpandStage] = useState<ExpandStage>(\"inline\");\n\n const loc = useLocation();\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n\n const marketplaceTo = buildMarketplaceHref(loc.pathname, \"\", { token });\n\n const postCurrentWidgetContext = () => {\n const payload = buildWidgetBridgeContext();\n if (!payload) return;\n try {\n iframeRef.current?.contentWindow?.postMessage(payload, \"*\");\n } catch {}\n };\n\n const xappTo = xappId\n ? buildMarketplaceHref(loc.pathname, `xapps/${encodeURIComponent(xappId)}`, { token })\n : null;\n const visibleOperationalSurfaces = getVisibleOperationalSurfaces({\n detail: xappDetail,\n client,\n env,\n isEmbedded,\n });\n const linkedOperationalSurfaces = Array.from(\n new Set([...visibleOperationalSurfaces, ...discoveredOperationalSurfaces]),\n );\n\n const onBackToPortal = () => {\n host.notifyNavigation?.({\n path: \"/\",\n page: \"portal-home\",\n });\n };\n\n useEffect(() => {\n if (!installationId) return;\n let alive = true;\n void (async () => {\n try {\n const installs = host.getInstallationsByXappId();\n const inst = Object.values(installs || {}).find(\n (i) => i && String(i.installationId) === String(installationId),\n );\n if (inst && inst.xappId) {\n if (!alive) return;\n setXappId(inst.xappId);\n const res = await client.getCatalogXapp(inst.xappId, {\n installationId: String(installationId || \"\").trim() || null,\n });\n if (!alive) return;\n setXappDetail(res);\n const detail = asRecord(res);\n setXappTitle(\n resolveMarketplaceText(asRecord(detail.manifest).title as any, locale) ||\n readFirstString(asRecord(detail.xapp).name) ||\n \"App\",\n );\n }\n } catch {}\n })();\n return () => {\n alive = false;\n };\n }, [installationId, client, host, locale]);\n\n useEffect(() => {\n if (!xappId) {\n setDiscoveredOperationalSurfaces([]);\n return;\n }\n let cancelled = false;\n void (async () => {\n const discovered = await discoverOperationalSurfaceData({\n client,\n xappId,\n installationId,\n });\n if (!cancelled) {\n setDiscoveredOperationalSurfaces(discovered);\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [client, installationId, xappId]);\n\n useEffect(() => {\n if (!installationId || !widgetId || !host.notifyNavigation) return;\n host.notifyNavigation({\n path: window.location.pathname,\n page: \"widget-view\",\n params: { installationId, widgetId },\n });\n }, [installationId, widgetId, host]);\n\n useEffect(() => {\n if (!installationId || !widgetId) return;\n let alive = true;\n void (async () => {\n try {\n const widgetTokenResponse = await client.getWidgetToken(installationId, widgetId);\n const resolvedWidgetId = readString(asRecord(widgetTokenResponse).widgetId);\n if (resolvedWidgetId && resolvedWidgetId !== widgetId) {\n navigate(\n buildMarketplaceHref(\n loc.pathname,\n `widget/${encodeURIComponent(installationId)}/${encodeURIComponent(resolvedWidgetId)}`,\n { token },\n ),\n { replace: true },\n );\n return;\n }\n const { token: wToken, context } = widgetTokenResponse;\n if (!alive) return;\n setSessionExpired(null);\n setWidgetToken(wToken);\n setWidgetSessionContext(context ?? null);\n } catch (e) {\n if (!alive) return;\n setWidgetSessionContext(null);\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n alive = false;\n };\n }, [installationId, widgetId, client, isEmbedded, navigate, tokenSearch]);\n\n async function remintWidgetSession() {\n if (!installationId || !widgetId) {\n throw new Error(\"Missing installationId/widgetId for widget refresh\");\n }\n const refreshed = await client.getWidgetToken(installationId, widgetId);\n const nextToken = String(refreshed?.token || \"\").trim();\n if (!nextToken) {\n throw new Error(\"Widget refresh did not return a token\");\n }\n setSessionExpired(null);\n setWidgetToken(nextToken);\n setWidgetSessionContext(refreshed?.context ?? null);\n return {\n token: nextToken,\n expires_in:\n Number.isFinite(Number(refreshed?.expires_in)) && Number(refreshed?.expires_in) > 0\n ? Number(refreshed?.expires_in)\n : undefined,\n };\n }\n\n function buildWidgetBridgeContext() {\n const context = widgetSessionContext;\n if (!context || !widgetToken) return null;\n const matchingWidget = Array.isArray(xappDetail?.widgets)\n ? xappDetail.widgets.find((item) => String(item?.id || \"\") === String(widgetId || \"\"))\n : null;\n return {\n type: \"XAPPS_WIDGET_CONTEXT\" as const,\n token: widgetToken,\n baseUrl: window.location.origin,\n hostOrigin: window.location.origin,\n installationId: context.installationId || String(installationId || \"\"),\n clientId: context.clientId,\n xappId: context.xappId || xappId,\n subjectId: context.subjectId,\n publisherUserId: null,\n email: null,\n bindToolName:\n readFirstString(\n asRecord(matchingWidget).bind_tool_name,\n asRecord(matchingWidget).bindToolName,\n ) || null,\n theme: buildWidgetThemeFromDocument(\n host.theme && typeof host.theme === \"object\"\n ? (host.theme as Record<string, unknown>)\n : null,\n ),\n locale: context.locale || env?.locale || host.locale || null,\n };\n }\n\n useEffect(() => {\n return () => {\n for (const [, pending] of nestedExpandPendingRef.current) {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n pending.resolve(null);\n }\n nestedExpandPendingRef.current.clear();\n };\n }, []);\n\n useEffect(() => {\n const shell = shellRef.current;\n const rootEl = shell?.parentElement ?? null;\n const htmlEl = document.documentElement;\n const bodyEl = document.body;\n const expanded = env?.embedMode && hostNestedExpandStage !== \"inline\";\n\n if (!expanded) return;\n\n const prev = {\n htmlStyle: htmlEl.getAttribute(\"style\"),\n bodyStyle: bodyEl.getAttribute(\"style\"),\n rootStyle: rootEl?.getAttribute(\"style\") ?? null,\n };\n\n htmlEl.style.height = \"100%\";\n bodyEl.style.height = \"100%\";\n bodyEl.style.overflow = \"hidden\";\n bodyEl.style.margin = \"0\";\n if (rootEl) {\n rootEl.style.height = \"100%\";\n rootEl.style.display = \"flex\";\n rootEl.style.flexDirection = \"column\";\n rootEl.style.minHeight = \"0\";\n }\n\n return () => {\n if (prev.htmlStyle == null) htmlEl.removeAttribute(\"style\");\n else htmlEl.setAttribute(\"style\", prev.htmlStyle);\n if (prev.bodyStyle == null) bodyEl.removeAttribute(\"style\");\n else bodyEl.setAttribute(\"style\", prev.bodyStyle);\n if (rootEl) {\n if (prev.rootStyle == null) rootEl.removeAttribute(\"style\");\n else rootEl.setAttribute(\"style\", prev.rootStyle);\n }\n };\n }, [env?.embedMode, hostNestedExpandStage]);\n\n useEffect(() => {\n if (!env?.embedMode) return;\n const handler = (e: MessageEvent) => {\n if (e.source !== window.parent) return;\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (msgType !== \"XAPPS_UI_EXPAND_RESULT\") return;\n const data = asRecord(msg.data);\n const hostManaged = data.hostManaged === true;\n const expanded = data.expanded === true;\n const stage = normalizeExpandStage(data.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [env?.embedMode]);\n\n useEffect(() => {\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n const sourceIsParent = e.source === window.parent;\n const sourceIsSameOrigin = e.origin === window.location.origin;\n if (!sourceIsParent && !sourceIsSameOrigin) return;\n\n if (msgType === \"XAPPS_UI_NESTED_EXPAND_RESULT\" && sourceIsParent) {\n const data = asRecord(msg.data);\n const requestId = readString(data.requestId);\n if (!requestId) return;\n const pending = nestedExpandPendingRef.current.get(requestId);\n if (!pending) return;\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n if (pending.settled) {\n nestedExpandPendingRef.current.delete(requestId);\n pending.onLateResult?.(msg);\n return;\n }\n pending.settled = true;\n nestedExpandPendingRef.current.delete(requestId);\n pending.resolve(msg);\n return;\n }\n\n try {\n iframeRef.current?.contentWindow?.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, []);\n\n useEffect(() => {\n if (!widgetToken) return;\n\n const postExpandResultToWidget = (\n target: Window | null,\n result:\n | { ok: true; data: Record<string, unknown> }\n | { ok: false; error: { message: string; code?: string } },\n ) => {\n if (!target || typeof target.postMessage !== \"function\") return;\n try {\n target.postMessage(\n {\n type: \"XAPPS_UI_EXPAND_RESULT\",\n ...result,\n },\n \"*\",\n );\n } catch {}\n };\n\n const requestNestedHostExpand = async (\n sourceWindow: Window | null,\n input: Record<string, unknown>,\n onLateResult: ((value: Record<string, unknown>) => void) | null = null,\n ): Promise<Record<string, unknown> | null> => {\n if (!env?.embedMode || window.parent === window) return null;\n const requestId = `mx-nested-expand-${Date.now()}-${++nestedExpandSeqRef.current}`;\n const payload = {\n requestId,\n source: \"marketplace-widget-host\",\n installationId: installationId ? String(installationId) : \"\",\n widgetId: widgetId ? String(widgetId) : \"\",\n expanded: Boolean(input.expanded),\n stage: normalizeExpandStage(input.stage, Boolean(input.expanded)),\n mode: input.mode === \"expand\" || input.mode === \"collapse\" ? String(input.mode) : undefined,\n path: window.location.pathname,\n };\n\n const response = await new Promise<Record<string, unknown> | null>((resolve) => {\n const pending: NestedPendingExpand = {\n sourceWindow,\n timeoutId: 0,\n cleanupId: null,\n settled: false,\n onLateResult,\n resolve,\n };\n pending.timeoutId = window.setTimeout(() => {\n pending.settled = true;\n pending.cleanupId = window.setTimeout(() => {\n nestedExpandPendingRef.current.delete(requestId);\n }, 4000);\n resolve(null);\n }, 1200);\n nestedExpandPendingRef.current.set(requestId, pending);\n try {\n window.parent.postMessage(\n {\n type: \"XAPPS_UI_NESTED_EXPAND_REQUEST\",\n data: payload,\n },\n \"*\",\n );\n } catch {\n window.clearTimeout(pending.timeoutId);\n if (pending.cleanupId) window.clearTimeout(pending.cleanupId);\n nestedExpandPendingRef.current.delete(requestId);\n resolve(null);\n }\n });\n\n return response;\n };\n\n const handler = (e: MessageEvent) => {\n const msg = asRecord(e.data);\n const msgType = readString(msg.type);\n if (!msgType.startsWith(\"XAPPS_\")) return;\n\n // Security check: only allow same-origin if it's from the catalog itself\n // or from the widget iframe (which we can't easily check origin of here\n // without extra plumbing, but we trust the type prefix).\n\n // Handle UI actions from the widget by forwarding them to the real host.\n // In embedMode, window.parent is the Host integration that frames the catalog.\n if (\n msgType === \"XAPPS_UI_EXPAND_REQUEST\" &&\n env?.embedMode &&\n e.source === iframeRef.current?.contentWindow\n ) {\n const data = asRecord(msg.data);\n void (async () => {\n const requestedExpanded = data.expanded === true;\n const requestedStage = normalizeExpandStage(data.stage, requestedExpanded);\n const applyNestedExpandResult = (nestedResp: Record<string, unknown> | null): boolean => {\n if (\n !nestedResp ||\n nestedResp.type !== \"XAPPS_UI_NESTED_EXPAND_RESULT\" ||\n nestedResp.ok !== true ||\n !nestedResp.data ||\n typeof nestedResp.data !== \"object\"\n ) {\n return false;\n }\n const nestedData = nestedResp.data as Record<string, unknown>;\n const hostManaged = nestedData.hostManaged === true;\n const expanded = nestedData.expanded === true;\n const stage = normalizeExpandStage(nestedData.stage, expanded);\n setHostNestedExpandStage(hostManaged && expanded ? stage : \"inline\");\n postExpandResultToWidget(e.source as Window | null, {\n ok: true,\n data: {\n hostManaged,\n expanded: hostManaged && expanded,\n stage: hostManaged ? stage : \"inline\",\n ...(nestedData.nativeFullscreen === true ? { nativeFullscreen: true } : {}),\n },\n });\n return true;\n };\n // Optimistic UI reduction so the marketplace shell yields immediately while the\n // outer host processes nested expansion. We reconcile on ack or fallback.\n setHostNestedExpandStage(requestedExpanded ? requestedStage : \"inline\");\n const nestedResp = await requestNestedHostExpand(\n e.source as Window | null,\n data,\n (lateResp) => {\n if (applyNestedExpandResult(lateResp)) return;\n setHostNestedExpandStage(\"inline\");\n },\n );\n if (applyNestedExpandResult(nestedResp)) {\n return;\n }\n\n setHostNestedExpandStage(\"inline\");\n })();\n return;\n }\n\n if (msgType === \"XAPPS_UI_CONFIRM_REQUEST\") {\n if (!env?.embedMode) {\n const data = asRecord(msg.data);\n const requestId = msg.id;\n const prompt = String(\n data.message ||\n t(\n \"widget.confirm_continue_prompt\",\n undefined,\n \"This action requires confirmation. Continue?\",\n ),\n );\n const confirmed = typeof window.confirm === \"function\" ? window.confirm(prompt) : false;\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_UI_CONFIRM_RESULT\",\n id: requestId,\n ok: true,\n data: { confirmed },\n },\n \"*\",\n );\n } catch {}\n return;\n }\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (\n msgType === \"XAPPS_TOKEN_REFRESH_REQUEST\" &&\n e.source === iframeRef.current?.contentWindow\n ) {\n void (async () => {\n try {\n const refreshed = await remintWidgetSession();\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_TOKEN_REFRESH\",\n id: readString(msg.id) || undefined,\n data: {\n token: refreshed.token,\n ...(typeof refreshed.expires_in === \"number\"\n ? { expires_in: refreshed.expires_in }\n : {}),\n },\n },\n \"*\",\n );\n } catch {}\n } catch (refreshError) {\n const sessionExpiredUi = toSessionExpiredUi(\n {\n reason: \"token_refresh_failed\",\n message:\n readFirstString(asRecord(refreshError).message) ||\n \"Widget session refresh failed\",\n },\n t,\n );\n setSessionExpired(sessionExpiredUi);\n setWidgetToken(\"\");\n try {\n (e.source as Window | null)?.postMessage(\n {\n type: \"XAPPS_SESSION_EXPIRED\",\n id: readString(msg.id) || undefined,\n data: {\n reason: \"token_refresh_failed\",\n channel: \"host\",\n recoverable: false,\n message: sessionExpiredUi.message,\n },\n },\n \"*\",\n );\n } catch {}\n }\n })();\n return;\n }\n\n if (\n (msgType === \"XAPPS_WIDGET_CONTEXT_REQUEST\" || msgType === \"XAPPS_WIDGET_READY\") &&\n e.source === iframeRef.current?.contentWindow\n ) {\n try {\n const payload = buildWidgetBridgeContext();\n (e.source as Window | null)?.postMessage(\n payload || {\n type: \"XAPPS_WIDGET_CONTEXT\",\n locale: env?.locale || null,\n },\n \"*\",\n );\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_SESSION_EXPIRED\") {\n setSessionExpired(toSessionExpiredUi(msg.data, t));\n setWidgetToken(\"\");\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_WIDGET\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const targetInstId = readFirstString(data.installationId, installationId);\n const targetWidgetId = readFirstString(data.widgetId);\n\n if (targetWidgetId && env?.embedMode) {\n navigate({\n ...buildMarketplaceHref(\n loc.pathname,\n `widget/${encodeURIComponent(targetInstId)}/${encodeURIComponent(targetWidgetId)}`,\n { token },\n ),\n });\n return;\n }\n\n // If not in embed mode or no target widget, forward to host\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n if (msgType === \"XAPPS_OPEN_OPERATIONAL_SURFACE\") {\n if (e.source === window) return;\n\n const data = asRecord(msg.data);\n const surface = readString(data.surface).toLowerCase();\n const placement =\n data.placement === \"in_router\" ||\n data.placement === \"side_panel\" ||\n data.placement === \"full_page\"\n ? data.placement\n : resolveOperationalSurfacePlacement({\n env,\n surface: surface as OperationalSurfaceKey,\n isEmbedded,\n });\n\n if (\n env?.embedMode &&\n xappId &&\n [\"requests\", \"monetization\", \"payments\", \"invoices\", \"notifications\"].includes(surface) &&\n placement === \"in_router\"\n ) {\n navigate(\n buildOperationalSurfaceHref({\n surface: surface as OperationalSurfaceKey,\n xappId,\n installationId: String(data.installationId || installationId || \"\"),\n requestId: String(data.requestId || \"\"),\n paymentSessionId: String(data.paymentSessionId || \"\"),\n invoiceId: String(data.invoiceId || \"\"),\n notificationId: String(data.notificationId || \"\"),\n token: token || undefined,\n isEmbedded,\n currentPathname: loc.pathname,\n }),\n );\n return;\n }\n\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n return;\n }\n\n // Forward all other XAPPS_* messages to host integration.\n // If it came from our own window (proxied from host), don't send it back to parent.\n if (e.source === window) return;\n try {\n window.parent.postMessage(msg, \"*\");\n } catch {}\n };\n\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [\n widgetToken,\n widgetSessionContext,\n installationId,\n widgetId,\n xappDetail,\n host,\n xappId,\n env?.embedMode,\n env?.locale,\n navigate,\n isEmbedded,\n tokenSearch,\n token,\n xappId,\n t,\n ]);\n\n useEffect(() => {\n if (!widgetToken || !env?.locale) return;\n try {\n iframeRef.current?.contentWindow?.postMessage(\n {\n type: \"XAPPS_LOCALE_CHANGED\",\n locale: env.locale,\n },\n \"*\",\n );\n } catch {}\n }, [env?.locale, widgetToken]);\n\n useEffect(() => {\n if (!widgetToken) return;\n postCurrentWidgetContext();\n }, [\n widgetToken,\n widgetSessionContext,\n installationId,\n widgetId,\n xappDetail,\n xappId,\n host.theme,\n host.locale,\n env?.locale,\n ]);\n\n const widgetUrl = (() => {\n if (!widgetToken) return \"\";\n const params = new URLSearchParams({ token: widgetToken });\n const hostReturnUrl = readHostReturnUrl(loc.search);\n if (hostReturnUrl) params.set(\"xapps_host_return_url\", hostReturnUrl);\n if (env?.embedMode && hostNestedExpandStage !== \"inline\") {\n params.set(\"xapps_host_overlay\", \"1\");\n } else {\n params.delete(\"xapps_host_overlay\");\n }\n const paymentParams = readPaymentEvidenceParams(loc.search);\n for (const [k, v] of paymentParams.entries()) {\n params.set(k, v);\n }\n const seededTheme = encodeWidgetThemeForQuery(\n buildWidgetThemeFromDocument(\n host.theme && typeof host.theme === \"object\"\n ? (host.theme as Record<string, unknown>)\n : null,\n ),\n );\n if (seededTheme) {\n params.set(\"xapps_theme\", seededTheme);\n }\n return `/embed/widgets/${widgetId}?${params.toString()}`;\n })();\n\n if (error) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.error\", undefined, \"Error\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">\n {t(\"widget.unable_to_load\", undefined, \"Unable to load widget\")}\n </div>\n <div className=\"mx-widget-error-desc\">{error}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n {xappTo && (\n <Link to={xappTo as any} className=\"mx-btn mx-btn-ghost\">\n {t(\"common.view_app_details\", undefined, \"View app details\")}\n </Link>\n )}\n </div>\n </div>\n </div>\n );\n }\n\n if (sessionExpired) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.session\", undefined, \"Session\")}</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">{sessionExpired.title}</div>\n <div className=\"mx-widget-error-desc\">{sessionExpired.message}</div>\n <div className=\"mx-widget-error-actions\">\n <Link to={marketplaceTo as any} className=\"mx-btn mx-btn-outline\">\n {t(\"common.back_to_marketplace\", undefined, \"Back to Marketplace\")}\n </Link>\n <button className=\"mx-btn mx-btn-ghost\" onClick={onBackToPortal}>\n {t(\"common.back_to_portal\", undefined, \"Back to Portal\")}\n </button>\n </div>\n </div>\n </div>\n );\n }\n\n if (!widgetToken) {\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{xappTitle || t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n <div className=\"mx-widget-loading\">\n <div className=\"mx-spinner mx-spinner-lg\" />\n <div className=\"mx-widget-loading-title\">\n {t(\n \"widget.preparing\",\n {\n title: xappTitle || t(\"common.widget\", undefined, \"Widget\"),\n },\n \"Preparing {title}...\",\n )}\n </div>\n <div className=\"mx-widget-loading-sub\">\n {t(\n \"widget.secure_session_setup\",\n undefined,\n \"Setting up a secure session for this app.\",\n )}\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={shellRef}\n className={`mx-catalog-container mx-widget-view-shell ${isEmbedded ? \"is-embedded\" : \"\"} ${\n env?.embedMode && hostNestedExpandStage !== \"inline\" ? \"is-host-expanded\" : \"\"\n }`}\n data-expand-stage={env?.embedMode ? hostNestedExpandStage : \"inline\"}\n >\n {env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb mx-breadcrumb-top\">\n <button className=\"mx-breadcrumb-link-btn\" onClick={onBackToPortal}>\n {t(\"common.portal\", undefined, \"Portal\")}\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>\n {t(\"common.marketplace\", undefined, \"Marketplace\")}\n </Link>\n </>\n )}\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n {!env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceTo as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || t(\"common.app\", undefined, \"App\")}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{t(\"common.widget\", undefined, \"Widget\")}</span>\n </div>\n )}\n\n {xappId ? (\n <XappWorkspaceNav\n xappId={xappId}\n xappTitle={xappTitle || xappId}\n isEmbedded={isEmbedded}\n token={token}\n installationId={installationId}\n active=\"open_app\"\n openWidgetId={widgetId}\n openWidgetName={t(\"common.widget\", undefined, \"Widget\")}\n />\n ) : null}\n\n <div\n className=\"mx-widget-view-content\"\n style={{ flex: 1, display: \"flex\", flexDirection: \"column\", minHeight: 0 }}\n >\n <iframe\n ref={iframeRef}\n src={widgetUrl}\n onLoad={() => {\n window.setTimeout(() => {\n postCurrentWidgetContext();\n }, 0);\n }}\n allow=\"publickey-credentials-get; publickey-credentials-create\"\n style={{\n width: \"100%\",\n height: \"100%\",\n minHeight: hostNestedExpandStage === \"inline\" ? \"600px\" : \"0\",\n border: \"none\",\n borderRadius: \"var(--mx-radius)\",\n background: \"var(--mx-bg-card)\",\n }}\n title=\"Widget\"\n />\n </div>\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { asRecord, readFirstString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\ntype PublisherItem = {\n slug: string;\n name: string;\n xappCount: number;\n};\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nconst AVATAR_COLORS = [\n \"#2563eb\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#059669\",\n \"#d97706\",\n \"#dc2626\",\n \"#db2777\",\n \"#4f46e5\",\n \"#0d9488\",\n \"#ea580c\",\n];\n\nfunction avatarColor(slug: string): string {\n let hash = 0;\n for (let i = 0; i < slug.length; i++) {\n hash = slug.charCodeAt(i) + ((hash << 5) - hash);\n }\n return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nexport function PublishersPage() {\n const { client, env } = useMarketplace();\n const { t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const [q, setQ] = useState(\"\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<PublisherItem[]>([]);\n\n async function loadPublishers() {\n const res = await client.listCatalogXapps();\n const list = Array.isArray(res?.items) ? res.items : [];\n const grouped = new Map<string, PublisherItem>();\n for (const x of list) {\n const status = String(x.status || \"active\").toLowerCase();\n if (status !== \"active\") continue;\n const slug = String(x.publisher?.slug || \"\").trim();\n if (!slug) continue;\n const current = grouped.get(slug);\n if (current) {\n current.xappCount += 1;\n } else {\n grouped.set(slug, {\n slug,\n name: String(x.publisher?.name || slug),\n xappCount: 1,\n });\n }\n }\n setItems(Array.from(grouped.values()).sort((a, b) => a.name.localeCompare(b.name)));\n }\n\n useEffect(() => {\n void (async () => {\n setBusy(true);\n setError(null);\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }, [client]);\n\n const filtered = useMemo(() => {\n let list = items;\n if (env?.publishers && env.publishers.length > 0) {\n const allowed = new Set(env.publishers.map((v) => String(v)));\n list = list.filter((i) => allowed.has(i.slug));\n }\n const query = q.trim().toLowerCase();\n if (!query) return list;\n return list.filter((i) => {\n const hay = `${i.name} ${i.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, env?.publishers, q]);\n\n const totalXapps = useMemo(() => {\n return filtered.reduce((acc, p) => acc + p.xappCount, 0);\n }, [filtered]);\n\n const ordered = useMemo(() => {\n return [...filtered].sort((a, b) => {\n if (b.xappCount !== a.xappCount) return b.xappCount - a.xappCount;\n return a.name.localeCompare(b.name);\n });\n }, [filtered]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">\n {env?.title ?? t(\"common.marketplace\", undefined, \"Marketplace\")}\n </h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => {\n setBusy(true);\n void (async () => {\n try {\n await loadPublishers();\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n })();\n }}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_publishers_placeholder\",\n undefined,\n \"Search by name or slug...\",\n )}\n aria-label={t(\"publisher.search_publishers\", undefined, \"Search publishers\")}\n />\n </div>\n <div className=\"mx-stats-grid\">\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.publishers_count\", undefined, \"Publishers\")}\n </div>\n <div className=\"mx-stat-value\">{ordered.length}</div>\n </div>\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">\n {t(\"publisher.catalog_xapps\", undefined, \"Catalog xApps\")}\n </div>\n <div className=\"mx-stat-value\">{totalXapps}</div>\n </div>\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-publisher-row\">\n <div className=\"mx-skeleton-line mx-skeleton-avatar\" />\n <div className=\"mx-skeleton-publisher-info\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {t(\n \"publisher.results_count\",\n { count: ordered.length, suffix: ordered.length === 1 ? \"\" : \"s\" },\n `${ordered.length} publisher${ordered.length === 1 ? \"\" : \"s\"}`,\n )}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {ordered.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\n <svg\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\" />\n <circle cx=\"9\" cy=\"7\" r=\"4\" />\n <path d=\"M23 21v-2a4 4 0 0 0-3-3.87\" />\n <path d=\"M16 3.13a4 4 0 0 1 0 7.75\" />\n </svg>\n </div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_publishers_found\", undefined, \"No publishers found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_default\",\n undefined,\n \"No publishers are available in the catalog right now.\",\n )}\n </div>\n </div>\n ) : (\n ordered.map((p) => {\n const detailTo = isEmbedded\n ? `/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`\n : `/marketplace/publishers/${encodeURIComponent(p.slug)}${tokenSearch}`;\n return (\n <div key={p.slug} className=\"mx-card\">\n <div className=\"mx-publisher-card-body\">\n <div\n className=\"mx-publisher-avatar\"\n style={{ background: avatarColor(p.slug) }}\n >\n {(p.name || p.slug).charAt(0)}\n </div>\n <div className=\"mx-publisher-card-info\">\n <div className=\"mx-publisher-card-slug\">{p.slug}</div>\n <h3 className=\"mx-publisher-card-name\">\n <Link to={detailTo}>{p.name}</Link>\n </h3>\n <div className=\"mx-publisher-card-count\">\n {p.xappCount} xapp{p.xappCount === 1 ? \"\" : \"s\"} in catalog\n </div>\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"publisher.view_publisher\", undefined, \"View publisher\")}\n </Link>\n <Link to={detailTo} className=\"mx-btn mx-btn-outline mx-btn-sm\">\n Browse xapps\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation, useParams } from \"react-router-dom\";\nimport { resolveMarketplaceText, useMarketplaceI18n } from \"../i18n\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { MarketplacePrimaryNav } from \"../components/MarketplacePrimaryNav\";\nimport type { CatalogXapp } from \"../types\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport { shouldHideMarketplaceVersions } from \"../utils/installationPolicy\";\nimport { buildMarketplaceHref } from \"../utils/marketplaceRouting\";\nimport { asRecord, readFirstString, readString } from \"../utils/readers\";\nimport \"../marketplace.css\";\n\nfunction useQueryToken(): string {\n const loc = useLocation();\n const qs = new URLSearchParams(loc.search);\n return qs.get(\"token\") ?? \"\";\n}\n\nexport function PublisherDetailPage() {\n const { publisherSlug = \"\" } = useParams();\n const { client, host, env } = useMarketplace();\n const { locale, t } = useMarketplaceI18n();\n const loc = useLocation();\n const token = useQueryToken();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n\n const [busy, setBusy] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [items, setItems] = useState<CatalogXapp[]>([]);\n const [q, setQ] = useState(\"\");\n\n const installationsByXappId = host.getInstallationsByXappId();\n const hideVersions = shouldHideMarketplaceVersions({\n installationPolicy: env?.installationPolicy ?? host.installationPolicy ?? null,\n installationPolicyResolved: env?.installationPolicyResolved,\n subjectId: host.subjectId,\n });\n\n async function refresh() {\n if (!publisherSlug) return;\n setBusy(true);\n setError(null);\n try {\n const catalogRes = await client.listCatalogXapps();\n const list = Array.isArray(catalogRes?.items) ? catalogRes.items : [];\n setItems(\n list.filter((x) => {\n const slug = String(x.publisher?.slug || \"\").trim();\n const status = String(x.status || \"active\").toLowerCase();\n return slug === String(publisherSlug) && status === \"active\";\n }),\n );\n } catch (e) {\n setError(readFirstString(asRecord(e).message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [publisherSlug]);\n\n const publisherName = useMemo(() => {\n return String(items[0]?.publisher?.name || \"\").trim() || String(publisherSlug);\n }, [items, publisherSlug]);\n\n const backToPublishers = buildMarketplaceHref(loc.pathname, \"publishers\", {\n token,\n });\n const backToXapps = buildMarketplaceHref(loc.pathname, \"\", { token });\n\n const filteredItems = useMemo(() => {\n const query = q.trim().toLowerCase();\n if (!query) return items;\n return items.filter((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n resolveMarketplaceText(x.name as any, locale) ||\n readFirstString(x.name);\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n resolveMarketplaceText(x.description as any, locale) ||\n readFirstString(x.description);\n const hay = `${title} ${desc} ${x.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, locale, q]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={backToXapps as any}>{t(\"common.marketplace\", undefined, \"Marketplace\")}</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToPublishers as any}>\n {t(\"publisher.publishers_title\", undefined, \"Publishers\")}\n </Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{publisherName}</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{publisherName}</h1>\n <div className=\"mx-header-actions\">\n <MarketplacePrimaryNav\n active=\"publishers\"\n isEmbedded={isEmbedded}\n tokenSearch={tokenSearch}\n />\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title={t(\"common.refresh\", undefined, \"Refresh\")}\n >\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <path d=\"M23 4v6h-6M1 20v-6h6M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\" />\n </svg>\n </button>\n </div>\n </header>\n\n {error && <div className=\"mx-alert mx-alert-error\">{error}</div>}\n\n <div className=\"mx-search-filters\">\n <div className=\"mx-filters-inner\">\n <div className=\"mx-input-group mx-input-group-grow\">\n <label className=\"mx-label\">\n {t(\"publisher.search_xapps\", undefined, \"Search xapps\")}\n </label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder={t(\n \"publisher.search_xapps_placeholder\",\n undefined,\n \"Search by title, slug, description...\",\n )}\n aria-label={t(\n \"publisher.search_xapps_aria\",\n undefined,\n \"Search this publisher's xapps\",\n )}\n />\n </div>\n </div>\n </div>\n\n {busy && items.length === 0 ? (\n <div className=\"mx-grid\" aria-busy=\"true\">\n {Array.from({ length: 4 }).map((_, i) => (\n <div key={i} className=\"mx-skeleton-card\">\n <div className=\"mx-skeleton-card-image\" />\n <div className=\"mx-skeleton-card-content\">\n <div className=\"mx-skeleton-line mx-skeleton-line-sm\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-title\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-full\" />\n <div className=\"mx-skeleton-line mx-skeleton-line-short\" />\n </div>\n </div>\n ))}\n </div>\n ) : (\n <>\n {!busy && (\n <div className=\"mx-results-bar\">\n <div className=\"mx-results-count\">\n {filteredItems.length === items.length\n ? `${filteredItems.length} xapp${filteredItems.length === 1 ? \"\" : \"s\"}`\n : `${filteredItems.length} of ${items.length} xapp${items.length === 1 ? \"\" : \"s\"}`}\n </div>\n </div>\n )}\n <div className=\"mx-grid\">\n {filteredItems.length === 0 && !busy ? (\n <div className=\"mx-empty-catalog\">\n <div className=\"mx-empty-catalog-icon\">\u2315</div>\n <div className=\"mx-empty-catalog-title\">\n {t(\"publisher.no_xapps_found\", undefined, \"No xapps found\")}\n </div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? t(\n \"publisher.empty_xapps_filtered\",\n undefined,\n \"Try adjusting your search to find what you're looking for.\",\n )\n : t(\n \"publisher.empty_xapps_default\",\n { publisher: publisherName },\n `${publisherName} has no active xapps in the catalog right now.`,\n )}\n </div>\n </div>\n ) : (\n filteredItems.map((x) => {\n const manifest = asRecord(x.manifest);\n const title =\n resolveMarketplaceText(manifest.title as any, locale) ||\n resolveMarketplaceText(x.name as any, locale) ||\n readFirstString(x.name, x.slug, \"App\");\n const desc =\n resolveMarketplaceText(manifest.description as any, locale) ||\n resolveMarketplaceText(x.description as any, locale) ||\n readFirstString(x.description);\n const image =\n readString(manifest.image) || \"https://picsum.photos/seed/\" + x.slug + \"/560/320\";\n const tags = Array.isArray(manifest.tags)\n ? manifest.tags\n .map((tag) => readString(tag))\n .filter(Boolean)\n .slice(0, 3)\n : [];\n const inst = installationsByXappId[String(x.id)];\n const installed = Boolean(inst);\n const detailTo = {\n ...buildMarketplaceHref(\n loc.pathname,\n `xapps/${encodeURIComponent(String(x.id))}`,\n token ? { token } : {},\n ),\n };\n return (\n <div key={x.id} className=\"mx-card\">\n <Link to={detailTo} className=\"mx-card-image-wrap\">\n <img src={image} alt={title} className=\"mx-card-image\" />\n </Link>\n <div className=\"mx-card-content\">\n <div className=\"mx-card-head\">\n <div className=\"mx-card-meta\">\n <div className=\"mx-card-publisher\">\n {t(\"common.by\", undefined, \"by\")} {publisherName}\n </div>\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n {t(\"common.added\", undefined, \"Added\")}\n </span>\n )}\n {!hideVersions && x.latest_version?.version && (\n <div className=\"mx-card-version\">v{x.latest_version.version}</div>\n )}\n </div>\n </div>\n <h3 className=\"mx-card-title\">\n <Link to={detailTo} className=\"mx-card-title-link\">\n {title}\n </Link>\n </h3>\n </div>\n <p className=\"mx-card-desc\">{desc}</p>\n <div className=\"mx-card-tags\">\n {tags.map((t) => (\n <span key={t} className=\"mx-tag mx-tag-compact\">\n {t}\n </span>\n ))}\n </div>\n </div>\n <div className=\"mx-card-footer\">\n <Link\n to={detailTo}\n className=\"mx-btn mx-btn-ghost mx-btn-sm mx-card-footer-link\"\n >\n {t(\"catalog.view_details\", undefined, \"View details\")}\n </Link>\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n </div>\n );\n}\n", "import type { MarketplaceClient } from \"./types\";\n\ntype JsonFetcher = <T>(path: string) => Promise<T>;\ntype JsonPoster = <T>(path: string, body?: Record<string, unknown>) => Promise<T>;\n\ntype HttpMarketplaceClientRouteConfig = {\n catalogListPath: string;\n catalogXappBasePath: string;\n myXappsBasePath: string;\n myMonetizedXappsPath: string;\n myRequestsPath: string;\n myPaymentSessionsPath: string;\n myInvoicesPath: string;\n myNotificationsPath: string;\n widgetTokenPath?: string;\n supportsSubjectIdQuery?: boolean;\n};\n\nexport type HttpMarketplaceClientOptions = {\n getJson: JsonFetcher;\n postJson: JsonPoster;\n routes: HttpMarketplaceClientRouteConfig;\n defaultLocale?: string | null | (() => string | null | undefined);\n getWidgetToken?: MarketplaceClient[\"getWidgetToken\"];\n};\n\nfunction readString(value: unknown): string {\n return typeof value === \"string\" ? value.trim() : \"\";\n}\n\nfunction encodeSegment(value: string): string {\n return encodeURIComponent(String(value || \"\").trim());\n}\n\nfunction appendQuery(\n path: string,\n query: Record<string, string | number | boolean | null | undefined>,\n): string {\n const params = new URLSearchParams();\n for (const [key, rawValue] of Object.entries(query)) {\n if (rawValue === null || rawValue === undefined) continue;\n const value =\n typeof rawValue === \"string\"\n ? rawValue.trim()\n : typeof rawValue === \"number\" || typeof rawValue === \"boolean\"\n ? String(rawValue)\n : \"\";\n if (!value) continue;\n params.set(key, value);\n }\n const suffix = params.toString();\n if (!suffix) return path;\n return path.includes(\"?\") ? `${path}&${suffix}` : `${path}?${suffix}`;\n}\n\nfunction resolveDefaultLocale(input: HttpMarketplaceClientOptions[\"defaultLocale\"]): string | null {\n if (typeof input === \"function\") {\n return readString(input()) || null;\n }\n return readString(input) || null;\n}\n\nexport function createHttpMarketplaceClient(\n options: HttpMarketplaceClientOptions,\n): MarketplaceClient {\n const { getJson, postJson, routes } = options;\n const supportsSubjectIdQuery = routes.supportsSubjectIdQuery === true;\n const addSubjectId = (subjectId: unknown) =>\n supportsSubjectIdQuery ? { subjectId: readString(subjectId) || undefined } : {};\n\n return {\n async listCatalogXapps() {\n return getJson(routes.catalogListPath);\n },\n async getCatalogXapp(xappId: string, input) {\n return getJson(\n appendQuery(`${routes.catalogXappBasePath}/${encodeSegment(xappId)}`, {\n installationId: readString(input?.installationId) || undefined,\n }),\n );\n },\n async getMyXappMonetization(xappId: string, input) {\n const locale = readString(input?.locale) || resolveDefaultLocale(options.defaultLocale);\n return getJson(\n appendQuery(`${routes.myXappsBasePath}/${encodeSegment(xappId)}/monetization`, {\n ...addSubjectId(input?.subjectId),\n installationId: readString(input?.installationId) || undefined,\n locale: locale || undefined,\n previewAt: readString(input?.previewAt) || undefined,\n }),\n );\n },\n async cancelMyXappSubscriptionContract(input) {\n return postJson(\n appendQuery(\n `${routes.myXappsBasePath}/${encodeSegment(input.xappId)}/monetization/subscription-contracts/${encodeSegment(input.contractId)}/cancel`,\n {\n ...addSubjectId(input?.subjectId),\n installationId: readString(input?.installationId) || undefined,\n },\n ),\n {},\n );\n },\n async refreshMyXappSubscriptionContractState(input) {\n return postJson(\n appendQuery(\n `${routes.myXappsBasePath}/${encodeSegment(input.xappId)}/monetization/subscription-contracts/${encodeSegment(input.contractId)}/refresh-state`,\n {\n ...addSubjectId(input?.subjectId),\n installationId: readString(input?.installationId) || undefined,\n },\n ),\n {},\n );\n },\n async getMyXappMonetizationHistory(xappId: string, input) {\n return getJson(\n appendQuery(`${routes.myXappsBasePath}/${encodeSegment(xappId)}/monetization/history`, {\n ...addSubjectId(input?.subjectId),\n installationId: readString(input?.installationId) || undefined,\n limit:\n typeof input?.limit === \"number\" && Number.isFinite(input.limit) && input.limit > 0\n ? input.limit\n : undefined,\n }),\n );\n },\n async listMyMonetizedXapps(input) {\n return getJson(\n appendQuery(routes.myMonetizedXappsPath, {\n ...addSubjectId(input?.subjectId),\n currentOnly:\n typeof input?.currentOnly === \"boolean\" ? String(input.currentOnly) : undefined,\n }),\n );\n },\n async prepareMyXappPurchaseIntent(input) {\n return postJson(\n `${routes.myXappsBasePath}/${encodeSegment(input.xappId)}/monetization/purchase-intents/prepare`,\n {\n offering_id: input.offeringId,\n package_id: input.packageId,\n price_id: input.priceId,\n ...(supportsSubjectIdQuery && readString(input.subjectId)\n ? { subject_id: readString(input.subjectId) }\n : {}),\n ...(readString(input.installationId)\n ? { installation_id: readString(input.installationId) }\n : {}),\n },\n );\n },\n async createMyXappPurchasePaymentSession(input) {\n return postJson(\n `${routes.myXappsBasePath}/${encodeSegment(input.xappId)}/monetization/purchase-intents/${encodeSegment(input.intentId)}/payment-session`,\n {\n return_url: input.returnUrl,\n ...(readString(input.cancelUrl) ? { cancel_url: readString(input.cancelUrl) } : {}),\n ...(readString(input.pageUrl) ? { page_url: readString(input.pageUrl) } : {}),\n ...(readString(input.xappsResume) ? { xapps_resume: readString(input.xappsResume) } : {}),\n ...(readString(input.locale) ? { locale: readString(input.locale) } : {}),\n },\n );\n },\n async finalizeMyXappPurchasePaymentSession(input) {\n return postJson(\n `${routes.myXappsBasePath}/${encodeSegment(input.xappId)}/monetization/purchase-intents/${encodeSegment(input.intentId)}/payment-session/finalize`,\n {},\n );\n },\n async listMyRequests(input) {\n return getJson(\n appendQuery(routes.myRequestsPath, {\n xappId: readString(input?.xappId) || undefined,\n toolName: readString(input?.toolName) || undefined,\n page:\n typeof input?.page === \"number\" && Number.isFinite(input.page) ? input.page : undefined,\n pageSize:\n typeof input?.pageSize === \"number\" && Number.isFinite(input.pageSize)\n ? input.pageSize\n : undefined,\n }),\n );\n },\n async getMyRequest(id: string) {\n return getJson(`${routes.myRequestsPath}/${encodeSegment(id)}`);\n },\n async reconcileMyRequestPayment(input) {\n return postJson(\n `${routes.myRequestsPath}/${encodeSegment(input.requestId)}/payment/reconcile`,\n {\n ...(readString(input.paymentSessionId)\n ? { payment_session_id: readString(input.paymentSessionId) }\n : {}),\n ...(readString(input.returnUrl) ? { return_url: readString(input.returnUrl) } : {}),\n ...(readString(input.cancelUrl) ? { cancel_url: readString(input.cancelUrl) } : {}),\n ...(readString(input.xappsResume) ? { xapps_resume: readString(input.xappsResume) } : {}),\n },\n );\n },\n async listMyPaymentSessions(input) {\n return getJson(\n appendQuery(routes.myPaymentSessionsPath, {\n paymentSessionId: readString(input?.paymentSessionId) || undefined,\n xappId: readString(input?.xappId) || undefined,\n installationId: readString(input?.installationId) || undefined,\n toolName: readString(input?.toolName) || undefined,\n status: readString(input?.status) || undefined,\n issuer: readString(input?.issuer) || undefined,\n createdFrom: readString(input?.createdFrom) || undefined,\n createdTo: readString(input?.createdTo) || undefined,\n limit:\n typeof input?.limit === \"number\" && Number.isFinite(input.limit)\n ? input.limit\n : undefined,\n }),\n );\n },\n async getMyPaymentSession(id: string) {\n return getJson(`${routes.myPaymentSessionsPath}/${encodeSegment(id)}`);\n },\n async listMyInvoices(input) {\n return getJson(\n appendQuery(routes.myInvoicesPath, {\n requestId: readString(input?.requestId) || undefined,\n paymentSessionId: readString(input?.paymentSessionId) || undefined,\n xappId: readString(input?.xappId) || undefined,\n installationId: readString(input?.installationId) || undefined,\n status: readString(input?.status) || undefined,\n ownerScope: readString(input?.ownerScope) || undefined,\n search: readString(input?.search) || undefined,\n createdFrom: readString(input?.createdFrom) || undefined,\n createdTo: readString(input?.createdTo) || undefined,\n page:\n typeof input?.page === \"number\" && Number.isFinite(input.page) ? input.page : undefined,\n pageSize:\n typeof input?.pageSize === \"number\" && Number.isFinite(input.pageSize)\n ? input.pageSize\n : undefined,\n }),\n );\n },\n async getMyInvoiceHistory(id: string) {\n return getJson(`${routes.myInvoicesPath}/${encodeSegment(id)}/history`);\n },\n async listMyNotifications(input) {\n return getJson(\n appendQuery(routes.myNotificationsPath, {\n notificationId: readString(input?.notificationId) || undefined,\n status: readString(input?.status) || undefined,\n trigger: readString(input?.trigger) || undefined,\n xappId: readString(input?.xappId) || undefined,\n installationId: readString(input?.installationId) || undefined,\n unread: typeof input?.unread === \"boolean\" ? String(input.unread) : undefined,\n limit:\n typeof input?.limit === \"number\" && Number.isFinite(input.limit)\n ? input.limit\n : undefined,\n }),\n );\n },\n async markMyNotificationRead(notificationId: string) {\n return postJson(`${routes.myNotificationsPath}/${encodeSegment(notificationId)}/read`, {});\n },\n async markAllMyNotificationsRead() {\n return postJson(`${routes.myNotificationsPath}/read-all`, {});\n },\n async getWidgetToken(installationId: string, widgetId: string) {\n if (typeof options.getWidgetToken === \"function\") {\n return options.getWidgetToken(installationId, widgetId);\n }\n if (!routes.widgetTokenPath) {\n throw new Error(\"Widget token path is not configured\");\n }\n return getJson(\n appendQuery(routes.widgetTokenPath, {\n installationId,\n widgetId,\n }),\n );\n },\n };\n}\n"],
5
+ "mappings": "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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA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",
6
+ "names": ["createContext", "useContext", "value", "jsx", "jsx", "createContext", "useContext", "useEffect", "useMemo", "Link", "useLocation", "useEffect", "jsx", "useEffect", "jsx", "jsxs", "Fragment", "jsx", "jsxs", "useLocation", "useMemo", "t", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Link", "useLocation", "jsx", "useLocation", "Link", "useEffect", "Link", "useLocation", "useNavigate", "jsx", "jsxs", "Link", "useNavigate", "useLocation", "useEffect", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useMemo", "useState", "useEffect", "Link", "readString", "readString", "readLower", "readBoolean", "readString", "readLower", "readLower", "readString", "readLower", "readString", "readString", "readString", "value", "readLower", "readString", "readString", "readLower", "readLower", "readString", "readBoolean", "readString", "useEffect", "useMemo", "useRef", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "formatVirtualCurrencyLabel", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useRef", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "StatusBadge", "useState", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "jsx", "jsxs", "asRecord", "asRecord", "readString", "asRecord", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useNavigate", "useState", "useEffect", "Link", "StatusBadge", "status", "t", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useEffect", "StatusBadge", "Link", "t", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Link", "useLocation", "useNavigate", "useParams", "asRecord", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "asRecord", "readString", "readBoolean", "readNumber", "formatDateTime", "readVirtualCurrencyDefinition", "formatVirtualCurrencyLabel", "formatVirtualCurrencyAmount", "jsx", "useParams", "useLocation", "useQueryToken", "useMemo", "useNavigate", "useRef", "useState", "useCallback", "asRecord", "readString", "useEffect", "readBoolean", "readNumber", "error", "formatDateTime", "formatVirtualCurrencyLabel", "formatVirtualCurrencyAmount", "jsxs", "Link", "Fragment", "useEffect", "useRef", "useState", "Link", "useLocation", "useNavigate", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useRef", "useState", "useNavigate", "useEffect", "nestedResp", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useState", "useEffect", "useMemo", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useParams", "useState", "useEffect", "useMemo", "Link", "t", "jsx", "jsxs", "readString"]
7
7
  }