@xapps-platform/marketplace-ui 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -0
- package/dist/MarketplaceApp.d.ts +2 -0
- package/dist/MarketplaceApp.d.ts.map +1 -0
- package/dist/MarketplaceContext.d.ts +15 -0
- package/dist/MarketplaceContext.d.ts.map +1 -0
- package/dist/components/ConfirmActionModal.d.ts +10 -0
- package/dist/components/ConfirmActionModal.d.ts.map +1 -0
- package/dist/components/MarketplaceActivityTabs.d.ts +11 -0
- package/dist/components/MarketplaceActivityTabs.d.ts.map +1 -0
- package/dist/components/MarketplacePrimaryNav.d.ts +8 -0
- package/dist/components/MarketplacePrimaryNav.d.ts.map +1 -0
- package/dist/components/SchemaOutputView.d.ts +7 -0
- package/dist/components/SchemaOutputView.d.ts.map +1 -0
- package/dist/index.css +3365 -0
- package/dist/index.css.map +7 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5002 -0
- package/dist/index.js.map +7 -0
- package/dist/marketplace.css +3972 -0
- package/dist/pages/CatalogPage.d.ts +3 -0
- package/dist/pages/CatalogPage.d.ts.map +1 -0
- package/dist/pages/InvoicesPage.d.ts +3 -0
- package/dist/pages/InvoicesPage.d.ts.map +1 -0
- package/dist/pages/NotificationsPage.d.ts +3 -0
- package/dist/pages/NotificationsPage.d.ts.map +1 -0
- package/dist/pages/PaymentsPage.d.ts +3 -0
- package/dist/pages/PaymentsPage.d.ts.map +1 -0
- package/dist/pages/PublisherDetailPage.d.ts +3 -0
- package/dist/pages/PublisherDetailPage.d.ts.map +1 -0
- package/dist/pages/PublishersPage.d.ts +3 -0
- package/dist/pages/PublishersPage.d.ts.map +1 -0
- package/dist/pages/RequestDetailPage.breadcrumbs.test.d.ts +2 -0
- package/dist/pages/RequestDetailPage.breadcrumbs.test.d.ts.map +1 -0
- package/dist/pages/RequestDetailPage.d.ts +3 -0
- package/dist/pages/RequestDetailPage.d.ts.map +1 -0
- package/dist/pages/RequestsPage.d.ts +3 -0
- package/dist/pages/RequestsPage.d.ts.map +1 -0
- package/dist/pages/WidgetView.d.ts +3 -0
- package/dist/pages/WidgetView.d.ts.map +1 -0
- package/dist/pages/XappDetailPage.d.ts +3 -0
- package/dist/pages/XappDetailPage.d.ts.map +1 -0
- package/dist/pages/XappDetailPage.requestsLink.test.d.ts +2 -0
- package/dist/pages/XappDetailPage.requestsLink.test.d.ts.map +1 -0
- package/dist/types.d.ts +294 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils/embedSearch.d.ts +3 -0
- package/dist/utils/embedSearch.d.ts.map +1 -0
- package/dist/utils/operationalSurfaces.d.ts +36 -0
- package/dist/utils/operationalSurfaces.d.ts.map +1 -0
- package/dist/utils/operationalSurfaces.requestsHref.test.d.ts +2 -0
- package/dist/utils/operationalSurfaces.requestsHref.test.d.ts.map +1 -0
- package/dist/utils/operationalSurfaces.test.d.ts +2 -0
- package/dist/utils/operationalSurfaces.test.d.ts.map +1 -0
- package/dist/utils/paymentLock.d.ts +17 -0
- package/dist/utils/paymentLock.d.ts.map +1 -0
- package/dist/utils/readers.d.ts +8 -0
- package/dist/utils/readers.d.ts.map +1 -0
- package/dist/utils/readers.test.d.ts +2 -0
- package/dist/utils/readers.test.d.ts.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/MarketplaceContext.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", "../src/pages/NotificationsPage.tsx", "../src/pages/PaymentsPage.tsx", "../src/pages/RequestDetailPage.tsx", "../src/components/SchemaOutputView.tsx", "../src/utils/paymentLock.ts", "../src/pages/RequestsPage.tsx", "../src/pages/XappDetailPage.tsx", "../src/utils/operationalSurfaces.ts", "../src/pages/WidgetView.tsx", "../src/pages/PublishersPage.tsx", "../src/pages/PublisherDetailPage.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { createContext, useContext } from \"react\";\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\nexport function MarketplaceProvider(props: {\n client: MarketplaceClient;\n host: MarketplaceHostAdapter;\n env?: MarketplaceEnv;\n children: React.ReactNode;\n}) {\n return (\n <Ctx.Provider value={{ client: props.client, host: props.host, env: props.env }}>\n {props.children}\n </Ctx.Provider>\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 { Route, Routes } from \"react-router-dom\";\nimport { CatalogPage } from \"./pages/CatalogPage\";\nimport { InvoicesPage } from \"./pages/InvoicesPage\";\nimport { NotificationsPage } from \"./pages/NotificationsPage\";\nimport { PaymentsPage } from \"./pages/PaymentsPage\";\nimport { RequestDetailPage } from \"./pages/RequestDetailPage\";\nimport { RequestsPage } from \"./pages/RequestsPage\";\nimport { XappDetailPage } 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=\"requests\" element={<RequestsPage />} />\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 { 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 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 canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel = env?.copy?.addAppLabel || \"Add app\";\n const removeAppLabel = env?.copy?.removeAppLabel || \"Remove app\";\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 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 hay =\n `${x.manifest?.title ?? x.name} ${x.manifest?.description ?? x.description ?? \"\"} ${x.slug}`.toLowerCase();\n return hay.includes(qq);\n });\n }, [items, installationsByXappId, installedOnly, q, selectedTag, env?.tags, env?.publishers]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">{env?.title ?? \"Marketplace\"}</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=\"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\">Search</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder=\"Search by name, description...\"\n aria-label=\"Search apps\"\n />\n </div>\n\n <div className=\"mx-input-group\">\n <label className=\"mx-label\">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=\"Filter by tag\"\n >\n <option value=\"\">All Tags</option>\n {allTags.map((t) => (\n <option key={t} value={t}>\n {t}\n </option>\n ))}\n </select>\n </div>\n\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\">Added only</span>\n </label>\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 ? `${filtered.length} app${filtered.length === 1 ? \"\" : \"s\"}`\n : `${filtered.length} of ${items.length} app${items.length === 1 ? \"\" : \"s\"}`}\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\">No apps found</div>\n <div className=\"mx-empty-catalog-desc\">\n {installedOnly && items.length > 0\n ? \"No apps are installed for the current subject yet. Turn off Added only to browse the full catalog.\"\n : q || selectedTag || installedOnly\n ? \"Try adjusting your search or filters to find what you're looking for.\"\n : \"No apps are available in the catalog right now.\"}\n </div>\n </div>\n ) : (\n filtered.map((x: CatalogXapp) => {\n const manifest = asRecord(x.manifest);\n const title = readFirstString(manifest.title, x.name, x.slug) || \"App\";\n const desc = readFirstString(manifest.description, 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 defaultWidgetId = getDefaultWidgetId(x);\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 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\">Catalog app</div>\n )}\n <div className=\"mx-card-badges\">\n {installed && (\n <span className=\"mx-card-installed-badge\">\n <span className=\"mx-card-installed-badge-dot\" />\n 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 View details\n </Link>\n {canMutate &&\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 subjectId: host.subjectId ?? null,\n });\n }}\n >\n {addAppLabel}\n </button>\n ) : (\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 ))}\n </div>\n </div>\n );\n })\n )}\n </div>\n </>\n )}\n <ConfirmActionModal\n open={Boolean(pendingRemoval)}\n title=\"Remove app?\"\n description={\n pendingRemoval\n ? `Remove ${pendingRemoval.title} from your current workspace? You can add it again later.`\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\";\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 {\n open,\n title,\n description,\n confirmLabel = \"Confirm\",\n cancelLabel = \"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 onClick={onCancel} className=\"mx-btn mx-btn-ghost\" aria-label=\"Close dialog\">\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\";\n\ntype MarketplacePrimaryNavProps = {\n active: \"xapps\" | \"publishers\" | \"activity\";\n isEmbedded: boolean;\n tokenSearch: string;\n};\n\nexport function MarketplacePrimaryNav(props: MarketplacePrimaryNavProps) {\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 className=\"mx-nav-switch\" aria-label=\"Marketplace navigation\">\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 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 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 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 { 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 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 <span className={`mx-badge ${className}`}>{normalized || \"\u2014\"}</span>;\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 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(\"Invoices are unavailable in this host.\");\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(readFirstString(manifest.title, xapp.name));\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, 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\"}>Marketplace</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>Invoices</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">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 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=\"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\">Subject required</div>\n <div className=\"mx-alert-subject-desc\">\n This host session is not associated with a user. Ask your host to create a catalog\n session with a <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 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\">Invoice Detail</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 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\">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\">Provider</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\">Payment Session</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\">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 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 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 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\">Lifecycle History</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>{readFirstString(event.action, event.type, \"Event\")}</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>Loading invoice details...</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\">Xapp</th>}\n <th scope=\"col\">Invoice</th>\n <th scope=\"col\">Status</th>\n <th scope=\"col\">Provider</th>\n <th scope=\"col\">Created</th>\n <th scope=\"col\">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>Loading invoices...</span>\n </div>\n ) : (\n \"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=\"Xapp\">{readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}</td>\n )}\n <td data-label=\"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 Payment: {readString(item.payment_session_id)}\n </div>\n )}\n </td>\n <td data-label=\"Status\">\n <StatusBadge status={readFirstString(item.status, item.lifecycle_status)} />\n </td>\n <td data-label=\"Provider\">{readFirstString(item.provider_key, \"\u2014\")}</td>\n <td className=\"mx-cell-date\" data-label=\"Created\">\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label=\"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 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 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 Previous\n </button>\n <span className=\"mx-pagination-info\">\n Page <strong>{pagination.page}</strong> of <strong>{pagination.totalPages}</strong>\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 Next\n </button>\n </div>\n )}\n </div>\n );\n}\n", "import { Link } from \"react-router-dom\";\n\ntype ActivityTabKey = \"requests\" | \"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 tabs: Array<{ key: ActivityTabKey; label: string }> = [\n { key: \"requests\", label: \"Requests\" },\n { key: \"payments\", label: \"Payments\" },\n { key: \"invoices\", label: \"Invoices\" },\n { key: \"notifications\", label: \"Notifications\" },\n ];\n\n return (\n <nav className=\"mx-activity-tabs\" aria-label=\"Activity navigation\">\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", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\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 if (unread) return <span className=\"mx-badge mx-badge-warning\">Unread</span>;\n const normalized = String(status || \"\")\n .trim()\n .toUpperCase();\n const className = normalized === \"COMPLETED\" ? \"mx-badge-success\" : \"mx-badge-danger\";\n return <span className={`mx-badge ${className}`}>{normalized || \"Read\"}</span>;\n}\n\ntype NotificationRecord = Record<string, unknown>;\n\nexport function NotificationsPage() {\n const { client, host } = useMarketplace();\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(\"Notifications are unavailable in this host.\");\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(readFirstString(manifest.title, xapp.name));\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, 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\"}>Marketplace</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>Notifications</span>\n </div>\n\n <header className=\"mx-header\">\n <div>\n <h1 className=\"mx-title\">Notifications</h1>\n <div className=\"mx-subtle-note mx-subtle-note-compact\">\n {unreadCount} unread item{unreadCount === 1 ? \"\" : \"s\"}\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 Mark all read\n </button>\n )}\n {xappIdFilter && (\n <Link to={clearHref as any} className=\"mx-btn mx-btn-ghost\">\n Clear Filter\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title=\"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\">Subject required</div>\n <div className=\"mx-alert-subject-desc\">\n This host session is not associated with a user. Ask your host to create a catalog\n session with a <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 Showing notification 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 {focusedNotificationId && (\n <div className=\"mx-record-panel\">\n <div className=\"mx-record-panel-head\">\n <div>\n <div className=\"mx-record-panel-kicker\">Notification Detail</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 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\">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\">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\">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\">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\">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 Request: {readString(focusedNotification.request_id)}\n </span>\n ) : null}\n {readString(focusedNotification.payment_session_id) ? (\n <span className=\"mx-badge mx-badge-outline\">\n Payment: {readString(focusedNotification.payment_session_id)}\n </span>\n ) : null}\n {readString(focusedNotification.reason) ? (\n <span className=\"mx-badge mx-badge-outline\">\n Reason: {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 Mark read\n </button>\n </div>\n ) : null}\n </div>\n ) : (\n <div className=\"mx-record-loading\">\n <div className=\"mx-spinner\" />\n <span>Loading notification details...</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\">Status</th>\n <th scope=\"col\">Trigger</th>\n <th scope=\"col\">Channel</th>\n <th scope=\"col\">Message</th>\n <th scope=\"col\">Received</th>\n <th scope=\"col\">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>Loading notifications...</span>\n </div>\n ) : (\n \"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=\"Status\">\n <StatusBadge status={readString(item.status)} unread={Boolean(item.unread)} />\n </td>\n <td data-label=\"Trigger\">{readFirstString(item.trigger, \"\u2014\")}</td>\n <td data-label=\"Channel\">{readFirstString(item.channel, \"\u2014\")}</td>\n <td data-label=\"Message\">{readFirstString(item.message, \"\u2014\")}</td>\n <td className=\"mx-cell-date\" data-label=\"Received\">\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label=\"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 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 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 { 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 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 <span className={`mx-badge ${className}`}>{normalized || \"\u2014\"}</span>;\n}\n\ntype PaymentSessionRecord = Record<string, unknown>;\n\nexport function PaymentsPage() {\n const { client, host } = useMarketplace();\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(\"Payments are unavailable in this host.\");\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(readFirstString(manifest.title, xapp.name));\n } catch {\n if (!alive) return;\n setXappTitle(\"\");\n }\n })();\n return () => {\n alive = false;\n };\n }, [client, 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\"}>Marketplace</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>Payments</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">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 Clear Filter\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title=\"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\">Subject required</div>\n <div className=\"mx-alert-subject-desc\">\n This host session is not associated with a user. Ask your host to create a catalog\n session with a <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 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\">Payment Detail</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 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\">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\">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\">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\">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\">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\">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\">Invoices</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 \"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>Loading payment details...</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\">Xapp</th>}\n <th scope=\"col\">Session</th>\n <th scope=\"col\">Tool</th>\n <th scope=\"col\">Amount</th>\n <th scope=\"col\">Status</th>\n <th scope=\"col\">Created</th>\n <th scope=\"col\">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>Loading payments...</span>\n </div>\n ) : (\n \"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=\"Xapp\">{readFirstString(item.xapp_name, item.xapp_id, \"\u2014\")}</td>\n )}\n <td className=\"mx-cell-mono\" data-label=\"Session\">\n {readFirstString(item.payment_session_id, \"\u2014\")}\n </td>\n <td data-label=\"Tool\">{readFirstString(item.tool_name, \"\u2014\")}</td>\n <td className=\"mx-cell-bold\" data-label=\"Amount\">\n {readString(item.amount)} {readString(item.currency)}\n </td>\n <td data-label=\"Status\">\n <StatusBadge status={readString(item.status)} />\n </td>\n <td className=\"mx-cell-date\" data-label=\"Created\">\n {formatDateTime(item.created_at) || \"\u2014\"}\n </td>\n <td data-label=\"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 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 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 { useMarketplace } from \"../MarketplaceContext\";\nimport { SchemaOutputView } from \"../components/SchemaOutputView\";\nimport {\n resolvePaymentLockStateFromGuardSummary,\n type PaymentReconcileState,\n} from \"../utils/paymentLock\";\nimport { buildTokenSearch, readHostReturnUrl } from \"../utils/embedSearch\";\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\nexport function RequestDetailPage() {\n const { client, host, env } = useMarketplace();\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 status = readFirstString(requestRecord.status) || undefined;\n const isTerminal = status === \"COMPLETED\" || status === \"FAILED\";\n const effectiveXappId = readFirstString(requestRecord.xapp_id, xappIdFilter);\n const effectiveXappTitle = 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 ).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 async function reconcilePaymentFinality() {\n if (!id || reconcileBusy || !client.reconcileMyRequestPayment) return;\n setReconcileError(null);\n setReconcileState(\"confirming_payment\");\n setReconcileBusy(true);\n try {\n const res = await client.reconcileMyRequestPayment({\n requestId: String(id),\n paymentSessionId: requestPaymentLock.paymentSessionId,\n });\n setReconcileState(res?.finality_state || \"none\");\n const redirectUrl = String(res?.redirect_url || \"\").trim();\n if (redirectUrl) {\n window.location.href = redirectUrl;\n return;\n }\n await refreshOnce();\n } catch (e) {\n setReconcileError(readFirstString(asRecord(e).message) || String(e));\n setReconcileState(\"failed\");\n } finally {\n setReconcileBusy(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 = readFirstString(toolRecord.title, requestRecord.tool_name) || \"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\">Requests are unavailable</h2>\n <p className=\"mx-unavailable-desc\">\n This public catalog does not support viewing personal requests.\n </p>\n <Link to={backToX as any} className=\"mx-btn mx-btn-primary\">\n \u2190 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 reconcileState,\n }),\n [requestRecord.guard_summary, reconcileState],\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 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 if (summary.actionKind === \"upgrade_subscription\") {\n return `Upgrade subscription${summary.actionUrl ? ` (${summary.actionUrl})` : \"\"}`;\n }\n if (summary.actionKind === \"complete_payment\") {\n return `Complete payment${summary.actionUrl ? ` (${summary.actionUrl})` : \"\"}`;\n }\n if (summary.actionKind === \"step_up_auth\") {\n return `Complete step-up authentication${summary.actionUrl ? ` (${summary.actionUrl})` : \"\"}`;\n }\n if (summary.actionKind === \"confirm_action\") {\n return summary.actionMessage ? `Confirm action (${summary.actionMessage})` : \"Confirm action\";\n }\n return summary.actionKind ? `Action: ${summary.actionKind}` : \"\";\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 \"just now\";\n const seconds = Math.floor(diff / 1000);\n if (seconds < 10) return \"just now\";\n if (seconds < 60) return `${seconds}s ago`;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 60) return `${minutes}m ago`;\n const hours = Math.floor(minutes / 60);\n if (hours < 24) return `${hours}h ago`;\n const days = Math.floor(hours / 24);\n return `${days}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 ? \"Hide details\" : \"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 className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return <span className={`mx-badge ${className}`}>{s || \"\u2014\"}</span>;\n }\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n {!env?.singleXappMode && <Link to={marketplaceTo as any}>Marketplace</Link>}\n {env?.singleXappMode && !env?.embedMode && (\n <Link to={marketplaceTo as any}>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}>Requests</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\">Request Details</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=\"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\">Subject required</div>\n <div className=\"mx-alert-subject-desc\">\n This host session is not associated with a user. Ask your host to create a catalog\n session with a <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>{readString(requestRecord.xapp_name)}</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\">Request ID</span>\n <code className=\"mx-request-code\">{id}</code>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">Tool</span>\n <span className=\"mx-meta-value\">\n {readFirstString(requestRecord.tool_name) || \"\u2014\"}\n </span>\n </div>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">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\">Completed</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\">Response</h3>\n {requestPaymentLock.isLocked && requestPaymentLock.actionUrl ? (\n <div className=\"mx-payment-lock-banner\">\n <div className=\"mx-payment-lock-title\">Payment Required</div>\n <div className=\"mx-payment-lock-message\">{requestPaymentLock.message}</div>\n <div className=\"mx-payment-lock-actions\">\n <button\n className=\"mx-btn mx-btn-primary\"\n onClick={() => {\n window.location.href = requestPaymentLock.actionUrl;\n }}\n >\n {requestPaymentLock.ctaLabel || \"Complete Payment\"}\n </button>\n {client.reconcileMyRequestPayment && requestPaymentLock.paymentSessionId ? (\n <button\n className=\"mx-btn mx-btn-secondary\"\n onClick={() => void reconcilePaymentFinality()}\n disabled={\n reconcileBusy || requestPaymentLock.reconcileState === \"confirmed_paid\"\n }\n >\n {reconcileBusy ? \"Confirming...\" : \"Confirm Payment\"}\n </button>\n ) : null}\n <button className=\"mx-btn mx-btn-secondary\" onClick={() => void refreshOnce()}>\n 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 <div className=\"mx-waiting-state\">Waiting for response\u2026</div>\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) durationLabel = `${ms}ms`;\n else if (ms < 60_000) durationLabel = `${(ms / 1000).toFixed(1)}s`;\n else durationLabel = `${(ms / 60_000).toFixed(1)}m`;\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 Execution Timeline\n </h3>\n <span className=\"mx-timeline-count\">\n {evts.length} event{evts.length === 1 ? \"\" : \"s\"}\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} err\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 = readFirstString(eventRecord.type) || \"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\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 guard: {guardSummary.guardSlug}\n </span>\n )}\n {guardSummary.trigger && (\n <span className=\"mx-badge mx-badge-warning\">\n trigger: {guardSummary.trigger}\n </span>\n )}\n {guardSummary.outcome && (\n <span className=\"mx-badge mx-badge-success\">\n outcome: {guardSummary.outcome}\n </span>\n )}\n </div>\n {(guardSummary.reason || guardActionLabel) && (\n <div className=\"mx-event-guard-detail\">\n {guardSummary.reason ? `reason=${guardSummary.reason}` : \"\"}\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\">Artifacts</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) || \"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\">Related Widgets</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 readFirstString(widget.title, widget.widget_name) || \"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: readString(requestRecord.xapp_name),\n widgetName,\n toolName: readString(requestRecord.tool_name),\n });\n }}\n >\n Open {readFirstString(widget.title, widget.widget_name) || \"Widget\"}\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\">Help</h3>\n <p className=\"mx-sidebar-help-text\">\n Need help with this request? Contact your administrator with the Request ID above.\n </p>\n <Link to={backToRequests as any} className=\"mx-btn mx-btn-outline mx-btn-sidebar\">\n 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\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 resolveCtaLabel(actionKind: string): string {\n if (actionKind === \"complete_payment\") return \"Complete Payment\";\n if (actionKind === \"payment_required\") return \"Complete Payment\";\n return \"Continue\";\n}\n\nfunction resolveLockMessage(\n reason: string,\n paymentAttemptState: string,\n reconcileState: PaymentReconcileState,\n): string {\n if (reconcileState === \"confirming_payment\") {\n return \"Confirming payment finality with provider.\";\n }\n if (reconcileState === \"still_pending\") {\n return \"Payment is still pending at provider. Retry confirm in a few seconds.\";\n }\n if (reconcileState === \"confirmed_paid\") {\n return \"Payment is confirmed. Refresh to continue.\";\n }\n if (reconcileState === \"failed\") {\n return \"Payment is not settled. Complete a new payment attempt.\";\n }\n const attempt = readString(paymentAttemptState).toLowerCase();\n if (attempt === \"requires_action\") {\n return \"Payment requires additional action. Complete payment to continue.\";\n }\n if (attempt === \"failed\") {\n return \"Last payment attempt failed. Complete payment to continue.\";\n }\n if (attempt === \"replayed\") {\n return \"Payment evidence was already used. Start a new payment attempt.\";\n }\n if (reason === \"payment_receipt_already_used\") {\n return \"Payment evidence was already consumed. Start a new payment attempt.\";\n }\n if (reason === \"payment_evidence_missing\" || reason === \"payment_required\") {\n return \"Payment is required before this request can proceed.\";\n }\n return \"Payment is required before this request can proceed.\";\n}\n\nexport function resolvePaymentLockStateFromGuardSummary(\n summaryInput: unknown,\n options?: { reconcileState?: PaymentReconcileState | null },\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 isLocked = isPaymentKind || isPaymentReason;\n\n return {\n isLocked,\n reason,\n actionKind,\n actionUrl,\n ctaLabel: resolveCtaLabel(actionKind),\n message: resolveLockMessage(reason, paymentAttemptState, reconcileState),\n paymentSessionId: paymentSessionId || null,\n paymentAttemptState: paymentAttemptState || \"unknown\",\n reconcileState,\n monetizationState: Object.keys(monetizationState).length > 0 ? monetizationState : null,\n };\n}\n", "import { useEffect, useMemo, useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\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\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 const url = readString(action.url);\n if (kind === \"upgrade_subscription\") return `Upgrade subscription${url ? ` (${url})` : \"\"}`;\n if (kind === \"complete_payment\") return `Complete payment${url ? ` (${url})` : \"\"}`;\n if (kind === \"step_up_auth\") return `Complete step-up authentication${url ? ` (${url})` : \"\"}`;\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 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 = readFirstString(asRecord(detail.xapp).name, asRecord(detail.manifest).title);\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 }, [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 className =\n s === \"COMPLETED\"\n ? \"mx-badge-success\"\n : s === \"FAILED\"\n ? \"mx-badge-danger\"\n : \"mx-badge-warning\";\n return <span className={`mx-badge ${className}`}>{s || \"\u2014\"}</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\">Requests are unavailable</h2>\n <p className=\"mx-unavailable-desc\">\n This public catalog does not support viewing personal requests.\n </p>\n <Link to={backToContext as any} className=\"mx-btn mx-btn-primary\">\n \u2190 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 && <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>Marketplace</Link>}\n {env?.singleXappMode && !isEmbedded && (\n <Link to={isEmbedded ? \"/\" : \"/marketplace\"}>Marketplace</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>Requests</span>\n </div>\n\n <header className=\"mx-header\">\n <h1 className=\"mx-title\">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 Clear Filter\n </Link>\n )}\n <button\n className={`mx-btn-icon ${busy ? \"is-spinning\" : \"\"}`}\n onClick={() => void refresh()}\n disabled={busy}\n title=\"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\">Subject required</div>\n <div className=\"mx-alert-subject-desc\">\n This host session is not associated with a user. Ask your host to create a catalog\n session with a <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 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\">ID</th>\n <th scope=\"col\">Tool</th>\n <th scope=\"col\">Version</th>\n <th scope=\"col\">Status</th>\n <th scope=\"col\">Created</th>\n </tr>\n </thead>\n <tbody>\n {items.length === 0 ? (\n <tr>\n <td\n colSpan={5}\n data-label=\"State\"\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>Loading requests...</span>\n </div>\n ) : (\n \"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 hasGuardInfo =\n Boolean(guardSlug) || Boolean(guardReason) || Boolean(guardActionHint);\n\n return (\n <tr key={readFirstString(request.id)}>\n <td className=\"mx-cell-id\" data-label=\"ID\">\n <Link to={href as any}>{readFirstString(request.id).slice(0, 8)}...</Link>\n </td>\n <td data-label=\"Tool\">\n <div className=\"mx-cell-bold\">\n {readFirstString(request.tool_name) || \"\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 </div>\n )}\n </td>\n <td className=\"mx-cell-muted\" data-label=\"Version\">\n {readString(request.xapp_version)\n ? `v${readString(request.xapp_version)}`\n : \"\u2014\"}\n </td>\n <td data-label=\"Status\">\n <StatusBadge status={readString(request.status)} />\n </td>\n <td className=\"mx-cell-date\" data-label=\"Created\">\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 Previous\n </Link>\n <span className=\"mx-pagination-info\">\n Page <strong>{pagination.page}</strong> of <strong>{pagination.totalPages}</strong>\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 Next\n </Link>\n </div>\n )}\n </div>\n );\n}\n", "import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\nimport { useMarketplace } from \"../MarketplaceContext\";\nimport { ConfirmActionModal } from \"../components/ConfirmActionModal\";\nimport { buildTokenSearch } from \"../utils/embedSearch\";\nimport {\n buildOperationalSurfaceHref,\n discoverOperationalSurfaceData,\n getOperationalSurfaceLabel,\n getVisibleOperationalSurfaces,\n type OperationalSurfaceKey,\n} from \"../utils/operationalSurfaces\";\nimport type { CatalogXappDetail } from \"../types\";\nimport \"../marketplace.css\";\n\ntype GuardInfo = {\n slug: 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\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 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 humanizeTrigger(trigger: string): string {\n const normalized = String(trigger || \"\")\n .trim()\n .toLowerCase();\n if (normalized === \"before:tool_run\") return \"Before running this app\";\n if (normalized === \"after:tool_run\") return \"After this app finishes\";\n if (normalized === \"before:widget_open\") return \"Before opening this app\";\n if (normalized === \"after:widget_open\") return \"After opening this app\";\n if (!normalized) return \"App stage\";\n return humanizeSlug(normalized.replace(/:/g, \" \"));\n}\n\nfunction describeGuardChain(policyKind: string): string {\n return policyKind === \"any\"\n ? \"Any listed step can satisfy this stage.\"\n : \"All listed steps apply at this stage.\";\n}\n\nexport function XappDetailPage() {\n const { client, host, env } = useMarketplace();\n const { xappId } = useParams();\n const loc = useLocation();\n const token = useQueryToken();\n const action = useQueryAction();\n const queryToolName = useQueryToolName();\n const tokenSearch = buildTokenSearch(token, loc.search);\n const navigate = useNavigate();\n const autoOpenedWidgetKeyRef = useRef<string>(\"\");\n\n const canMutate = host.canMutate ? host.canMutate() : true;\n const addAppLabel = env?.copy?.addAppLabel || \"Add to workspace\";\n const removeAppLabel = env?.copy?.removeAppLabel || \"Remove from workspace\";\n const updateAppLabel = env?.copy?.updateAppLabel || \"Update app\";\n const openAppLabel = env?.copy?.openAppLabel || \"Open app\";\n\n const [data, setData] = useState<Record<string, unknown> | null>(null);\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 [removeConfirmOpen, setRemoveConfirmOpen] = useState(false);\n const [guardSummaryOpen, setGuardSummaryOpen] = useState(false);\n\n const hasSubject = Boolean(host.subjectId);\n const installationsByXappId = hasSubject ? host.getInstallationsByXappId() : {};\n const installation = xappId ? installationsByXappId[String(xappId)] : null;\n const updateAvailable = Boolean(installation?.updateAvailable);\n const widgetsEnabled = Boolean(installation) && !updateAvailable && hasSubject;\n\n const isEmbedded = window.location.pathname.startsWith(\"/embed\");\n const singleXappMode = env?.singleXappMode;\n\n async function refresh() {\n if (!xappId) return;\n setError(null);\n setBusy(true);\n try {\n const res = await client.getCatalogXapp(String(xappId));\n setData(asRecord(res));\n } catch (e) {\n setError(readString(asRecord(e)?.message) || String(e));\n } finally {\n setBusy(false);\n }\n }\n\n useEffect(() => {\n void refresh();\n host.refreshInstallations();\n host.notifyNavigation?.({\n path: window.location.pathname,\n page: \"xapp-detail\",\n params: { xappId },\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [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 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 = readString(manifest?.title) || readString(xappRecord?.name) || \"Xapp\";\n const description =\n readString(manifest?.description) || readString(xappRecord?.description) || \"\";\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\n const terms = asRecord(manifest?.terms);\n const termsTitle = readString(terms?.title) || \"Terms & Conditions\";\n const termsText = 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 useEffect(() => {\n if (action === \"install\") {\n setTermsAccepted(false);\n setTermsAction(\"install\");\n setTermsOpen(true);\n return;\n }\n if (action === \"update\" && installation) {\n setTermsAccepted(false);\n setTermsAction(\"update\");\n setTermsOpen(true);\n }\n }, [action, installation]);\n\n useEffect(() => {\n if (action !== \"open-widget\") return;\n if (env?.embedMode) return;\n if (!installation || !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,\n widgetId,\n readString(queryToolName),\n ].join(\":\");\n if (autoOpenedWidgetKeyRef.current === key) return;\n autoOpenedWidgetKeyRef.current = key;\n\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName:\n readString(widget?.title) ||\n readString(widget?.widget_name) ||\n readString(widget?.name) ||\n \"Widget\",\n toolName: readString(widget?.bind_tool_name),\n });\n }, [\n action,\n env?.embedMode,\n host,\n installation,\n queryToolName,\n requestedWidget,\n title,\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 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 items: 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 .sort((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 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 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 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 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=\"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 ? `Publisher: ${publisherName}` : \"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\">Update available</div>\n ) : null}\n </div>\n </div>\n <div className=\"mx-detail-actions\">\n {canMutate ? (\n <>\n {installation && updateAvailable && host.requestUpdate ? (\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 setTermsOpen(true);\n return;\n }\n if (!installation.installationId) return;\n host.requestUpdate?.({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n });\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 setTermsOpen(true);\n return;\n }\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: readString(defaultWidget?.id) || null,\n subjectId: host.subjectId ?? null,\n });\n }}\n >\n {addAppLabel}\n </button>\n ) : (\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 )}\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\">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\">Available Views</h2>\n {!widgetsEnabled ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n {!installation\n ? \"Add this app to your workspace to access its available views.\"\n : updateAvailable\n ? \"An update is available. Please update the app to access its available views.\"\n : !hasSubject\n ? \"Load the catalog as a user to access this app.\"\n : null}\n </div>\n ) : widgets.length === 0 ? (\n <div className=\"mx-sidebar-card mx-detail-empty\">\n No app views are currently available.\n </div>\n ) : (\n <div className=\"mx-detail-widget-list\">\n {widgets.map((w, idx) => {\n const name =\n readString(w.title) ||\n readString(w.widget_name) ||\n readString(w.name) ||\n readString(w.id) ||\n \"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 (!installation || !widgetsEnabled) return;\n const widgetId = readString(w.id);\n if (!widgetId) return;\n\n if (env?.embedMode && installation) {\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\n host.openWidget({\n installationId: installation.installationId,\n widgetId,\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName: name,\n toolName: readString(w.bind_tool_name),\n });\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\">Primary</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\">Open</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\">How This App Runs</h2>\n <button\n className=\"mx-btn mx-btn-ghost mx-btn-sm\"\n onClick={() => setGuardSummaryOpen((v) => !v)}\n >\n {guardSummaryOpen ? \"Hide details\" : \"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 ? \"This app has no extra run requirements configured.\"\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 </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 This app has no extra run requirements configured.\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\">{humanizeTrigger(trigger)}</div>\n <div className=\"mx-guard-stage-policy\">\n {items[0]?.policyKind === \"any\"\n ? \"Any one satisfies\"\n : \"All steps apply\"}\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 className=\"mx-guard-row-name\" title={guard.slug}>\n {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>{guard.headless ? \"Auto\" : \"User step\"}</span>\n </span>\n <span\n className={`mx-guard-severity ${guard.blocking ? \"mx-guard-severity--required\" : \"mx-guard-severity--optional\"}`}\n >\n {guard.blocking ? \"Required\" : \"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\">Screenshots</h2>\n <div className=\"mx-screenshots\">\n {manifestScreenshots.map((s, i) => (\n <img key={i} src={s} alt={`Screenshot ${i + 1}`} className=\"mx-screenshot\" />\n ))}\n </div>\n </section>\n )}\n </main>\n\n <aside className=\"mx-detail-sidebar\">\n {usageCreditSummary ? (\n <div className=\"mx-sidebar-card\">\n <h3 className=\"mx-section-title mx-detail-sidebar-title\">Usage Credits</h3>\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">Available</span>\n <span className=\"mx-meta-value\">\n {usageCreditSummary.available_count} ready to use\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\">Source</span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {usageCreditSummary.available_session_backed_count} linked to visible\n payment sessions\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\">In flight</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\">Needs review</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\">Invalid</span>\n <div className=\"mx-meta-value mx-meta-stack-sm\">\n <div>\n {usageCreditSummary.available_ledger_only_count} orphan ledger rows are\n not usable credits\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\">By tool</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> for{\" \"}\n <code>{tool.tool_name}</code>\n {tool.available_ledger_only_count > 0\n ? ` \u00B7 ${tool.available_ledger_only_count} invalid`\n : \"\"}\n {tool.reserved_active_count > 0\n ? ` \u00B7 ${tool.reserved_active_count} in flight`\n : \"\"}\n {tool.reserved_stale_count > 0\n ? ` \u00B7 ${tool.reserved_stale_count} stale`\n : \"\"}\n </div>\n ))}\n </div>\n </div>\n ) : null}\n </div>\n ) : null}\n\n {installation && defaultWidget && hasSubject && (\n <button\n className=\"mx-btn mx-btn-primary mx-detail-primary-cta\"\n onClick={() => {\n if (env?.embedMode) {\n navigate({\n pathname: isEmbedded\n ? `/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(String(defaultWidget.id))}`\n : `/marketplace/widget/${encodeURIComponent(installation.installationId)}/${encodeURIComponent(String(defaultWidget.id))}`,\n search: tokenSearch,\n });\n return;\n }\n host.openWidget({\n installationId: installation.installationId,\n widgetId: readString(defaultWidget.id),\n xappId: String(xappId ?? \"\"),\n xappTitle: String(title),\n widgetName:\n readString(defaultWidget?.title) ||\n readString(defaultWidget?.widget_name) ||\n readString(defaultWidget?.name) ||\n \"Widget\",\n toolName: 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\">Activity</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\">Requests</span>\n <span className=\"mx-activity-link-arrow\">\u2192</span>\n </Link>\n )}\n {secondarySurfaceLinks.map((surface: OperationalSurfaceKey) => {\n const iconClass =\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 === \"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 {getOperationalSurfaceLabel(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\">Details</h3>\n\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">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\">Status</span>\n <span className=\"mx-meta-value\">{installation ? \"Added\" : \"Available\"}</span>\n </div>\n\n {publisherTo ? (\n <div className=\"mx-meta-item\">\n <span className=\"mx-meta-label\">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\">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 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=\"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 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 I have read and accept the terms and conditions.\n </span>\n </label>\n )}\n </div>\n\n <div className=\"mx-detail-modal-actions\">\n <button className=\"mx-btn mx-btn-outline\" onClick={() => setTermsOpen(false)}>\n Cancel\n </button>\n {termsAction === \"install\" ? (\n <button\n className=\"mx-btn mx-btn-primary\"\n disabled={!termsAccepted}\n onClick={() => {\n host.requestInstall({\n xappId: String(xappId ?? \"\"),\n defaultWidgetId: readString(defaultWidget?.id) || null,\n subjectId: host.subjectId ?? null,\n termsAccepted: true,\n });\n setTermsOpen(false);\n setTermsAction(\"none\");\n }}\n >\n 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 host.requestUpdate?.({\n installationId: installation.installationId,\n xappId: String(xappId ?? \"\"),\n termsAccepted: true,\n });\n setTermsOpen(false);\n setTermsAction(\"none\");\n }}\n >\n Accept & Update\n </button>\n ) : null}\n </div>\n </div>\n </div>\n )}\n\n <ConfirmActionModal\n open={removeConfirmOpen}\n title=\"Remove app?\"\n description={`Remove ${title} from your current workspace? You can add it again later.`}\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 {\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 === \"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 \"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 === \"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.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, useRef, useState } from \"react\";\nimport { Link, useLocation, useNavigate, useParams } from \"react-router-dom\";\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\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\nexport function WidgetView() {\n const { client, host, env } = useMarketplace();\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 [error, setError] = useState<string | 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 if (!alive) return;\n setXappDetail(res);\n const detail = asRecord(res);\n setXappTitle(\n readFirstString(asRecord(detail.manifest).title, asRecord(detail.xapp).name) || \"App\",\n );\n }\n } catch {}\n })();\n return () => {\n alive = false;\n };\n }, [installationId, client, host]);\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 { token: wToken } = await client.getWidgetToken(installationId, widgetId);\n if (!alive) return;\n setWidgetToken(wToken);\n } catch (e) {\n if (!alive) return;\n setError(readFirstString(asRecord(e).message) || String(e));\n }\n })();\n return () => {\n alive = false;\n };\n }, [installationId, widgetId, client]);\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(data.message || \"This action requires confirmation. Continue?\");\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 (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\", \"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 installationId,\n widgetId,\n env?.embedMode,\n navigate,\n isEmbedded,\n tokenSearch,\n token,\n xappId,\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 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 Portal\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>Marketplace</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>Error</span>\n </div>\n <div className=\"mx-widget-error\">\n <div className=\"mx-widget-error-title\">Unable to load widget</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 Back to Marketplace\n </Link>\n {xappTo && (\n <Link to={xappTo as any} className=\"mx-btn mx-btn-ghost\">\n View app details\n </Link>\n )}\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 Portal\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>Marketplace</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>{xappTitle || \"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\">Preparing {xappTitle || \"widget\"}...</div>\n <div className=\"mx-widget-loading-sub\">Setting up a secure session for this app.</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 Portal\n </button>\n {!env?.singleXappMode && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={marketplaceTo as any}>Marketplace</Link>\n </>\n )}\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || \"App\"}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>Widget</span>\n </div>\n )}\n {!env?.embedMode && hostNestedExpandStage === \"inline\" && (\n <div className=\"mx-breadcrumb\">\n <Link to={marketplaceTo as any}>Marketplace</Link>\n {xappTo && (\n <>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={xappTo as any}>{xappTitle || \"App\"}</Link>\n </>\n )}\n <span className=\"mx-breadcrumb-sep\">/</span>\n <span>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 { 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 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\">{env?.title ?? \"Marketplace\"}</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=\"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\">Search publishers</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder=\"Search by name or slug...\"\n aria-label=\"Search publishers\"\n />\n </div>\n <div className=\"mx-stats-grid\">\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">Publishers</div>\n <div className=\"mx-stat-value\">{ordered.length}</div>\n </div>\n <div className=\"mx-stat-card\">\n <div className=\"mx-stat-label\">Catalog xApps</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 {ordered.length} publisher{ordered.length === 1 ? \"\" : \"s\"}\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\">No publishers found</div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? \"Try adjusting your search to find what you're looking for.\"\n : \"No publishers are available in the catalog right now.\"}\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 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 { 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 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 = readFirstString(manifest.title, x.name);\n const desc = readFirstString(manifest.description, x.description);\n const hay = `${title} ${desc} ${x.slug}`.toLowerCase();\n return hay.includes(query);\n });\n }, [items, q]);\n\n return (\n <div className={`mx-catalog-container ${isEmbedded ? \"is-embedded\" : \"\"}`}>\n <div className=\"mx-breadcrumb\">\n <Link to={backToXapps}>Marketplace</Link>\n <span className=\"mx-breadcrumb-sep\">/</span>\n <Link to={backToPublishers}>Publishers</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=\"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\">Search xapps</label>\n <input\n className=\"mx-input\"\n value={q}\n onChange={(e) => setQ(e.target.value)}\n placeholder=\"Search by title, slug, description...\"\n aria-label=\"Search this publisher's xapps\"\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\">No xapps found</div>\n <div className=\"mx-empty-catalog-desc\">\n {q\n ? \"Try adjusting your search to find what you're looking for.\"\n : `${publisherName} has no active xapps in the catalog right now.`}\n </div>\n </div>\n ) : (\n filteredItems.map((x) => {\n const manifest = asRecord(x.manifest);\n const title = readFirstString(manifest.title, x.name, x.slug, \"App\");\n const desc = readFirstString(manifest.description, 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\">by {publisherName}</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 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 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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",
|
|
6
|
+
"names": ["useEffect", "Link", "jsx", "jsx", "jsxs", "jsx", "jsxs", "useEffect", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "Link", "jsx", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "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", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useNavigate", "useState", "useEffect", "Link", "StatusBadge", "status", "useEffect", "useMemo", "useState", "Link", "useLocation", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "useQuery", "useMemo", "useState", "useEffect", "StatusBadge", "Link", "useEffect", "useMemo", "useState", "Link", "useLocation", "useNavigate", "useParams", "Fragment", "jsx", "jsxs", "useQueryToken", "useLocation", "asRecord", "readString", "useParams", "useLocation", "useQueryToken", "useNavigate", "useState", "asRecord", "readString", "useEffect", "useMemo", "jsxs", "jsx", "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", "jsx", "jsxs"]
|
|
7
|
+
}
|