diff --git a/packages/genui/a2ui-playground/lynx-src/a2ui/App.tsx b/packages/genui/a2ui-playground/lynx-src/a2ui/App.tsx index 5a4d6fd7a5..c2f2ae8e42 100644 --- a/packages/genui/a2ui-playground/lynx-src/a2ui/App.tsx +++ b/packages/genui/a2ui-playground/lynx-src/a2ui/App.tsx @@ -120,6 +120,20 @@ function parseJsonLikeString(input: string): unknown { return input; } +function decodeUrlString(input: string): string { + let current = input; + for (let i = 0; i < 3; i++) { + try { + const decoded = decodeURIComponent(current); + if (decoded === current) break; + current = decoded; + } catch { + break; + } + } + return current; +} + function normalizeInitDataLike(raw: unknown): InitData { if (raw === null || raw === undefined) return {}; if (typeof raw !== 'object') return {}; @@ -128,10 +142,14 @@ function normalizeInitDataLike(raw: unknown): InitData { const out: InitData = {}; const messagesUrl = obj.messagesUrl; - if (typeof messagesUrl === 'string') out.messagesUrl = messagesUrl; + if (typeof messagesUrl === 'string') { + out.messagesUrl = decodeUrlString(messagesUrl); + } const actionMocksUrl = obj.actionMocksUrl; - if (typeof actionMocksUrl === 'string') out.actionMocksUrl = actionMocksUrl; + if (typeof actionMocksUrl === 'string') { + out.actionMocksUrl = decodeUrlString(actionMocksUrl); + } const messages = obj.messages; if (messages !== undefined) { diff --git a/packages/genui/a2ui-playground/src/components/PreviewPanel.tsx b/packages/genui/a2ui-playground/src/components/PreviewPanel.tsx index 327f899862..86d1bad03f 100644 --- a/packages/genui/a2ui-playground/src/components/PreviewPanel.tsx +++ b/packages/genui/a2ui-playground/src/components/PreviewPanel.tsx @@ -352,71 +352,6 @@ export function PreviewPanel(props: PreviewPanelProps) { } } setLynxDevUrl(uInline.toString()); - - void (async () => { - try { - const rspeedyOrigin = new URL(rspeedyDevUrl).origin; - const res = await window.fetch(`${rspeedyOrigin}/__a2ui_payload`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ - messages: previewSource.messages, - actionMocks: previewSource.actionMocks, - }), - }); - if (!res.ok) return; - const data = (await res.json()) as { - messagesUrl?: string; - actionMocksUrl?: string; - }; - - if (seq !== buildSeqRef.current) return; - - const messagesUrlAbs = typeof data.messagesUrl === 'string' - ? `${rspeedyOrigin}${data.messagesUrl}` - : undefined; - const actionMocksUrlAbs = typeof data.actionMocksUrl === 'string' - ? `${rspeedyOrigin}${data.actionMocksUrl}` - : undefined; - - if (messagesUrlAbs) { - const buildStoredPayloadRenderUrl = (targetBaseUrl: string) => { - const r = new URL('render.html', targetBaseUrl); - r.searchParams.set('protocol', previewSource.protocol.name); - r.searchParams.set( - 'demoUrl', - previewSource.demoUrl ?? DEFAULT_A2UI_DEMO_URL, - ); - r.searchParams.set('theme', previewSource.theme); - r.searchParams.set('messagesUrl', messagesUrlAbs); - if (actionMocksUrlAbs && previewSource.actionMocks) { - r.searchParams.set('actionMocksUrl', actionMocksUrlAbs); - } - if (speed !== 1) { - r.searchParams.set('speed', String(speed)); - } - return r.toString(); - }; - setRenderUrl(buildStoredPayloadRenderUrl(baseUrl)); - setRenderShareUrl(buildStoredPayloadRenderUrl(shareBaseUrl)); - } - - const u = new URL(rspeedyDevUrl); - if (speed !== 1) u.searchParams.set('speed', String(speed)); - u.searchParams.set('theme', previewSource.theme); - if (messagesUrlAbs) { - u.searchParams.set('messagesUrl', messagesUrlAbs); - } - if (actionMocksUrlAbs && previewSource.actionMocks) { - u.searchParams.set('actionMocksUrl', actionMocksUrlAbs); - } - u.searchParams.delete('messages'); - u.searchParams.delete('actionMocks'); - setLynxDevUrl(u.toString()); - } catch { - // Keep the inline URLs above if shortening is unavailable. - } - })(); return; }