@ergoblockchain/sage-widget 0.2.0 → 0.3.0

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/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/api.ts","../src/react/SageActivityFeed.tsx","../src/react/SagePaymentWidget.tsx"],"names":["apiBase","useState","useRef","useEffect","useMemo","quote","jsxs","rootStyle","headerStyle","jsx","emptyStyle","Fragment","labelStyle","errorStyle"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * Public types for the Sage activity feed and paid chat flow.\n *\n * The source of truth is the API at https://www.ergoblockchain.org/api/sage/activity;\n * this file re-states the schema so consumers don't have to depend on the\n * server-side fetcher.\n */\n\nexport type SageActivityType = \"settlement\" | \"issuance\" | \"transfer\"\n\nexport interface SageActivityEvent {\n /** 64-char hex transaction id. */\n txId: string\n /** Block height at inclusion. */\n blockHeight: number\n /** Block timestamp (ms epoch). */\n timestamp: number\n /** Heuristic classification of the tx. */\n type: SageActivityType\n /** nanoERG flowing into the seller wallet from this tx (sum of outputs). */\n inflowNanoErg: number\n /**\n * For settlements: value of the redeemed Note (= what the buyer paid).\n * For other event types: undefined.\n *\n * Use this — not `inflowNanoErg` — when displaying \"amount paid for a\n * settled query\". `inflowNanoErg` includes change boxes in test setups\n * where the buyer and seller share an address.\n */\n paymentNanoErg?: number\n /** First input box that carries Note-shape registers, if any. */\n noteBoxId?: string\n}\n\nexport interface SageActivityResponse {\n ok: boolean\n network: \"testnet\" | \"mainnet\"\n /** Sage seller wallet address. */\n receiver: string\n /** Total number of txs ever touching the wallet, per the explorer. */\n total: number\n events: SageActivityEvent[]\n error?: string\n}\n\n/**\n * Configuration accepted by every entry point (React component +\n * vanilla mount fn). Defaults below are sensible for the canonical\n * ergoblockchain.org deployment.\n */\nexport interface SageWidgetOptions {\n /**\n * Base URL of the Sage host. Override if you run your own Sage\n * deployment behind a custom domain. Default: ergoblockchain.org.\n */\n apiBase?: string\n /**\n * Number of events to display (max 25). Default: 5.\n */\n limit?: number\n /**\n * Polling interval in ms. Default: 60000 (60s). Set to 0 to disable\n * polling — the widget will fetch once on mount and never refresh.\n */\n refreshMs?: number\n /**\n * Optional callback fired every time a fresh response arrives. Useful\n * for analytics or for triggering host-side animations on new\n * settlements.\n */\n onUpdate?: (response: SageActivityResponse) => void\n /**\n * Optional callback fired on fetch errors. Default: console.warn.\n */\n onError?: (error: unknown) => void\n}\n\nexport type SageChatRole = \"user\" | \"assistant\"\n\nexport interface SageChatMessage {\n role: SageChatRole\n content: string\n}\n\nexport interface SageTenantConfig {\n /** Stable tenant id for analytics, logs, or future multi-tenant routing. */\n id?: string\n /** Human-facing label shown in the default widgets. */\n label?: string\n /** Extra headers attached to Sage API requests. */\n headers?: Record<string, string>\n}\n\nexport interface SageQuote {\n quoteId: string\n taskHash: string\n price: string\n issuedAt?: string\n expiresAt: string\n receiverAddress: string\n reserveBoxId: string\n deadline: `+${number} blocks`\n}\n\nexport type SagePremiumReason =\n | \"explicit_command\"\n | \"code_request\"\n | \"long_answer\"\n | \"deep_research\"\n | \"multi_turn_followup\"\n\nexport interface SageQuoteResponse {\n premium: boolean\n reason?: SagePremiumReason\n rationale?: string\n quote?: SageQuote\n}\n\nexport interface SageVerifyPaymentResponse {\n ok: true\n paymentToken: string\n receiptId: string\n receiptUrl: string\n receiptApiUrl: string\n settlementTxId?: string | null\n accordSettlementId?: string\n receiptStorage?: {\n ok: boolean\n skipped?: boolean\n reason?: string\n path?: string\n aliases?: string[]\n error?: string\n }\n}\n\nexport interface SagePremiumPaymentRequired {\n error: \"premium_payment_required\"\n reason?: SagePremiumReason\n rationale?: string\n}\n\nexport type SageChatTier = \"free\" | \"premium\"\n\nexport type SageChatStreamEvent =\n | { type: \"tier\"; tier: SageChatTier; model?: string }\n | { type: \"delta\"; text: string }\n | { type: \"done\"; stopReason?: string; inputTokens?: number; outputTokens?: number }\n | { type: \"error\"; message: string }\n\nexport interface SageChatStreamResult {\n ok: boolean\n status: number\n text: string\n tier?: SageChatTier\n paymentRequired?: SagePremiumPaymentRequired\n error?: string\n}\n\nexport interface SageReceiptBundle {\n ok: true\n type: \"sage.receipt_bundle.v1\"\n version: \"v1\"\n id: string\n status: \"settled_on_chain\" | \"verified_pending_redemption\"\n completeness: \"full_receipt_bundle\" | \"full\" | \"chain_proof_only\"\n public_receipt_url: string\n api_receipt_url: string\n explorer_url: string | null\n accord?: {\n agreement_hash?: string | null\n verification_receipt_hash?: string | null\n settlement_receipt_hash?: string | null\n agreement_json?: unknown\n verification_receipt_json?: unknown\n settlement_receipt_json?: unknown\n }\n}\n\nexport interface SagePaymentWidgetOptions {\n /**\n * Base URL of the Sage host. Default: ergoblockchain.org.\n */\n apiBase?: string\n /**\n * Optional tenant metadata. Current public Sage ignores tenant routing,\n * but the widget keeps this shape stable for multi-tenant deployments.\n */\n tenant?: SageTenantConfig\n /** Initial chat messages, useful for preloaded context. */\n initialMessages?: SageChatMessage[]\n /** Placeholder text for the default input. */\n placeholder?: string\n /** Widget heading. React also accepts this through component props. */\n title?: string\n /** Optional host-specific payment copy and links. */\n paymentInstructions?: SagePaymentInstructions\n /** Called whenever a message is appended by the widget. */\n onMessage?: (message: SageChatMessage, messages: SageChatMessage[]) => void\n /** Called after Sage returns a premium quote. */\n onQuote?: (quote: SageQuoteResponse) => void\n /** Called after a payment verifies and Sage returns a receipt link. */\n onReceipt?: (receipt: SageVerifyPaymentResponse) => void\n /** Called after the widget fetches the full machine-readable receipt bundle. */\n onReceiptBundle?: (receipt: SageReceiptBundle) => void\n /** Called when the chat stream reports free vs premium tier. */\n onTier?: (tier: SageChatTier) => void\n /** Called when the widget phase changes. */\n onPhase?: (phase: SagePaymentPhase) => void\n /** Called with a compact state snapshot after important widget events. */\n onStatus?: (status: SagePaymentWidgetStatus) => void\n /** Optional callback fired on fetch or stream errors. */\n onError?: (error: unknown) => void\n}\n\nexport type SagePaymentPhase =\n | \"idle\"\n | \"quoting\"\n | \"payment_required\"\n | \"verifying\"\n | \"streaming\"\n | \"error\"\n\nexport interface SagePaymentInstructions {\n /** Short copy displayed above the Note box input. */\n helperText?: string\n /** Optional link to host payment/wallet instructions. */\n walletUrl?: string\n /** Optional custom label for the Note box input. */\n noteBoxLabel?: string\n}\n\nexport interface SagePaymentWidgetStatus {\n phase: SagePaymentPhase\n tier: SageChatTier | null\n quote: SageQuoteResponse[\"quote\"] | null\n receipt: SageVerifyPaymentResponse | null\n receiptBundle: SageReceiptBundle | null\n error: string | null\n /** Latest chat transcript known to the widget. */\n messages: SageChatMessage[]\n /** Question currently tied to the active quote/payment cycle. */\n activeQuestion: string | null\n}\n\nexport const DEFAULT_API_BASE = \"https://www.ergoblockchain.org\"\nexport const DEFAULT_LIMIT = 5\nexport const DEFAULT_REFRESH_MS = 60_000\n","/**\n * Thin client over /api/sage/activity.\n *\n * Pure fetch + shape — no rendering, no DOM. React + vanilla mounts\n * both call into here so the API contract lives in one place.\n */\n\nimport {\n DEFAULT_API_BASE,\n DEFAULT_LIMIT,\n type SageChatMessage,\n type SageChatStreamEvent,\n type SageChatStreamResult,\n type SageQuote,\n type SageQuoteResponse,\n type SageReceiptBundle,\n type SageTenantConfig,\n type SageVerifyPaymentResponse,\n type SageActivityResponse,\n} from \"./types\"\n\nexport interface FetchActivityOptions {\n apiBase?: string\n limit?: number\n signal?: AbortSignal\n}\n\nexport interface SageRequestOptions {\n apiBase?: string\n tenant?: SageTenantConfig\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\nexport interface FetchSageQuoteOptions extends SageRequestOptions {\n question: string\n history?: SageChatMessage[]\n}\n\nexport interface VerifySagePaymentOptions extends SageRequestOptions {\n quote: SageQuote\n question: string\n noteBoxId: string\n}\n\nexport interface StreamSageChatOptions extends SageRequestOptions {\n messages: SageChatMessage[]\n paymentToken?: string\n onEvent?: (event: SageChatStreamEvent) => void\n}\n\nexport async function fetchSageActivity(\n opts: FetchActivityOptions = {},\n): Promise<SageActivityResponse> {\n const base = opts.apiBase ?? DEFAULT_API_BASE\n const limit = Math.min(Math.max(opts.limit ?? DEFAULT_LIMIT, 1), 25)\n const url = `${trimSlash(base)}/api/sage/activity?limit=${limit}`\n const res = await fetch(url, { signal: opts.signal })\n if (!res.ok) {\n throw new Error(`sage activity ${res.status}`)\n }\n return (await res.json()) as SageActivityResponse\n}\n\nexport async function fetchSageQuote(\n opts: FetchSageQuoteOptions,\n): Promise<SageQuoteResponse> {\n const res = await fetch(`${apiBase(opts)}/api/sage/quote`, {\n method: \"POST\",\n headers: jsonHeaders(opts),\n body: JSON.stringify({\n question: opts.question,\n history: opts.history ?? [],\n }),\n signal: opts.signal,\n })\n const body = await parseJson(res)\n if (!res.ok) throw new Error(readError(body, `sage quote ${res.status}`))\n return body as SageQuoteResponse\n}\n\nexport async function verifySagePayment(\n opts: VerifySagePaymentOptions,\n): Promise<SageVerifyPaymentResponse> {\n const res = await fetch(`${apiBase(opts)}/api/sage/verify-payment`, {\n method: \"POST\",\n headers: jsonHeaders(opts),\n body: JSON.stringify({\n quote: opts.quote,\n question: opts.question,\n noteBoxId: opts.noteBoxId,\n }),\n signal: opts.signal,\n })\n const body = await parseJson(res)\n if (!res.ok) throw new Error(readError(body, `sage verify-payment ${res.status}`))\n return body as SageVerifyPaymentResponse\n}\n\nexport async function fetchSageReceipt(\n id: string,\n opts: SageRequestOptions = {},\n): Promise<SageReceiptBundle> {\n const res = await fetch(`${apiBase(opts)}/api/sage/receipt/${encodeURIComponent(id)}`, {\n headers: requestHeaders(opts),\n signal: opts.signal,\n })\n const body = await parseJson(res)\n if (!res.ok) throw new Error(readError(body, `sage receipt ${res.status}`))\n return body as SageReceiptBundle\n}\n\nexport function isFullSageReceiptBundle(value: SageReceiptBundle | null | undefined): boolean {\n return value?.ok === true && value.completeness === \"full_receipt_bundle\"\n}\n\nexport async function streamSageChat(\n opts: StreamSageChatOptions,\n): Promise<SageChatStreamResult> {\n const res = await fetch(`${apiBase(opts)}/api/sage/chat`, {\n method: \"POST\",\n headers: jsonHeaders(opts),\n body: JSON.stringify({\n messages: opts.messages,\n ...(opts.paymentToken ? { paymentToken: opts.paymentToken } : {}),\n }),\n signal: opts.signal,\n })\n\n if (res.status === 402) {\n const body = await parseJson(res)\n return {\n ok: false,\n status: res.status,\n text: \"\",\n paymentRequired: body as SageChatStreamResult[\"paymentRequired\"],\n }\n }\n\n if (!res.ok) {\n const body = await parseJson(res)\n return {\n ok: false,\n status: res.status,\n text: \"\",\n error: readError(body, `sage chat ${res.status}`),\n }\n }\n\n if (!res.body) {\n return { ok: false, status: res.status, text: \"\", error: \"Sage chat stream missing body\" }\n }\n\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buffer = \"\"\n let text = \"\"\n let tier: SageChatStreamResult[\"tier\"]\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const parts = buffer.split(\"\\n\\n\")\n buffer = parts.pop() ?? \"\"\n for (const part of parts) {\n const event = parseSseEvent(part)\n if (!event) continue\n if (event.type === \"delta\") text += event.text\n if (event.type === \"tier\") tier = event.tier\n opts.onEvent?.(event)\n if (event.type === \"error\") {\n return {\n ok: false,\n status: res.status,\n text,\n tier,\n error: event.message,\n }\n }\n }\n }\n\n if (buffer.trim()) {\n const event = parseSseEvent(buffer)\n if (event) {\n if (event.type === \"delta\") text += event.text\n if (event.type === \"tier\") tier = event.tier\n opts.onEvent?.(event)\n if (event.type === \"error\") {\n return {\n ok: false,\n status: res.status,\n text,\n tier,\n error: event.message,\n }\n }\n }\n }\n\n return { ok: true, status: res.status, text, tier }\n}\n\n/** nanoERG → \"0.001\" (trims trailing zeros, max 9 decimals). */\nexport function nanoToErg(nano: number | undefined): string {\n if (!nano || nano <= 0) return \"0\"\n const erg = nano / 1e9\n return erg.toFixed(9).replace(/\\.?0+$/, \"\")\n}\n\n/** Cheap relative-time formatter, ASCII-only, no Intl deps. */\nexport function relativeTime(ms: number, now: number = Date.now()): string {\n const diff = Math.max(0, now - ms)\n const sec = Math.floor(diff / 1000)\n if (sec < 60) return `${sec}s ago`\n const min = Math.floor(sec / 60)\n if (min < 60) return `${min}m ago`\n const hr = Math.floor(min / 60)\n if (hr < 24) return `${hr}h ago`\n const day = Math.floor(hr / 24)\n return `${day}d ago`\n}\n\n/** Receipt URL for a settled tx, given the host base. */\nexport function receiptUrl(txId: string, apiBase: string = DEFAULT_API_BASE): string {\n return `${trimSlash(apiBase)}/r/sage/${txId}`\n}\n\n/** Explorer URL for a tx on the given network. */\nexport function explorerUrl(\n txId: string,\n network: \"testnet\" | \"mainnet\" = \"testnet\",\n): string {\n return network === \"testnet\"\n ? `https://testnet.ergoplatform.com/transactions/${txId}`\n : `https://explorer.ergoplatform.com/transactions/${txId}`\n}\n\nfunction apiBase(opts: SageRequestOptions): string {\n return trimSlash(opts.apiBase ?? DEFAULT_API_BASE)\n}\n\nfunction trimSlash(value: string): string {\n return value.replace(/\\/+$/, \"\")\n}\n\nfunction requestHeaders(opts: SageRequestOptions): Record<string, string> {\n return {\n ...(opts.tenant?.id ? { \"x-sage-tenant-id\": opts.tenant.id } : {}),\n ...(opts.tenant?.headers ?? {}),\n ...(opts.headers ?? {}),\n }\n}\n\nfunction jsonHeaders(opts: SageRequestOptions): Record<string, string> {\n return {\n \"content-type\": \"application/json\",\n ...requestHeaders(opts),\n }\n}\n\nasync function parseJson(res: Response): Promise<unknown> {\n const text = await res.text()\n if (!text) return null\n try {\n return JSON.parse(text)\n } catch {\n return { error: text }\n }\n}\n\nfunction readError(body: unknown, fallback: string): string {\n if (body && typeof body === \"object\" && \"error\" in body) {\n const error = (body as { error?: unknown }).error\n if (typeof error === \"string\") return error\n }\n return fallback\n}\n\nfunction parseSseEvent(raw: string): SageChatStreamEvent | null {\n let eventName = \"message\"\n let data = \"\"\n for (const line of raw.split(\"\\n\")) {\n if (line.startsWith(\"event:\")) eventName = line.slice(\"event:\".length).trim()\n if (line.startsWith(\"data:\")) data += line.slice(\"data:\".length).trim()\n }\n if (!data) return null\n let parsed: Record<string, unknown>\n try {\n parsed = JSON.parse(data) as Record<string, unknown>\n } catch {\n return null\n }\n if (eventName === \"tier\") {\n const tier = parsed.tier === \"premium\" ? \"premium\" : \"free\"\n return {\n type: \"tier\",\n tier,\n ...(typeof parsed.model === \"string\" ? { model: parsed.model } : {}),\n }\n }\n if (eventName === \"delta\" && typeof parsed.text === \"string\") {\n return { type: \"delta\", text: parsed.text }\n }\n if (eventName === \"done\") {\n return {\n type: \"done\",\n ...(typeof parsed.stopReason === \"string\" ? { stopReason: parsed.stopReason } : {}),\n ...(typeof parsed.inputTokens === \"number\" ? { inputTokens: parsed.inputTokens } : {}),\n ...(typeof parsed.outputTokens === \"number\" ? { outputTokens: parsed.outputTokens } : {}),\n }\n }\n if (eventName === \"error\") {\n return {\n type: \"error\",\n message: typeof parsed.message === \"string\" ? parsed.message : \"Sage stream error\",\n }\n }\n return null\n}\n","/**\n * <SageActivityFeed /> — drop-in React component rendering Sage's live\n * on-chain activity (settlements + issuances + transfers) directly,\n * NOT through an iframe. Use this when you want host-CSS-themable,\n * tree-shakeable, accessibility-friendly markup.\n *\n * If you instead want a CSS-isolated drop-in that doesn't care about\n * the host page's style, use the static iframe embed at\n * https://www.ergoblockchain.org/agents.js\n * which mounts an isolated iframe.\n */\n\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\"\nimport {\n explorerUrl,\n fetchSageActivity,\n nanoToErg,\n receiptUrl,\n relativeTime,\n} from \"../api\"\nimport {\n DEFAULT_LIMIT,\n DEFAULT_REFRESH_MS,\n type SageActivityEvent,\n type SageActivityResponse,\n type SageWidgetOptions,\n} from \"../types\"\n\nexport interface SageActivityFeedProps extends SageWidgetOptions {\n /** Class name applied to the root container. */\n className?: string\n /** Inline style applied to the root container. */\n style?: CSSProperties\n /**\n * Render-prop override. If supplied, the component calls this with\n * the current response and renders only what it returns. Use this\n * to bring your own design system instead of the default styling.\n */\n children?: (state: {\n loading: boolean\n response: SageActivityResponse | null\n error: unknown\n }) => React.ReactNode\n}\n\nconst ONE_MIN = 60_000\n\nexport function SageActivityFeed(props: SageActivityFeedProps): JSX.Element {\n const {\n apiBase,\n limit = DEFAULT_LIMIT,\n refreshMs = DEFAULT_REFRESH_MS,\n onUpdate,\n onError,\n className,\n style,\n children,\n } = props\n\n const [response, setResponse] = useState<SageActivityResponse | null>(null)\n const [error, setError] = useState<unknown>(null)\n const [loading, setLoading] = useState(true)\n const [now, setNow] = useState(() => Date.now())\n\n const onUpdateRef = useRef(onUpdate)\n const onErrorRef = useRef(onError)\n useEffect(() => {\n onUpdateRef.current = onUpdate\n }, [onUpdate])\n useEffect(() => {\n onErrorRef.current = onError\n }, [onError])\n\n useEffect(() => {\n let cancelled = false\n const abort = new AbortController()\n\n async function load() {\n try {\n const data = await fetchSageActivity({\n apiBase,\n limit,\n signal: abort.signal,\n })\n if (cancelled) return\n setResponse(data)\n setError(null)\n setLoading(false)\n onUpdateRef.current?.(data)\n } catch (err) {\n if (cancelled || (err as { name?: string }).name === \"AbortError\") return\n setError(err)\n setLoading(false)\n ;(onErrorRef.current ?? console.warn)(err)\n }\n }\n\n load()\n const pollId =\n refreshMs > 0 ? setInterval(load, refreshMs) : undefined\n const tickId = setInterval(() => setNow(Date.now()), ONE_MIN / 4)\n return () => {\n cancelled = true\n abort.abort()\n if (pollId) clearInterval(pollId)\n clearInterval(tickId)\n }\n }, [apiBase, limit, refreshMs])\n\n if (children) {\n return <>{children({ loading, response, error })}</>\n }\n\n return (\n <div className={className} style={{ ...rootStyle, ...style }}>\n <Header network={response?.network ?? \"testnet\"} />\n <List\n loading={loading}\n events={response?.events ?? []}\n network={response?.network ?? \"testnet\"}\n apiBase={apiBase}\n now={now}\n />\n {error ? (\n <div style={errorStyle}>\n Could not reach the activity feed.\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction Header({ network }: { network: \"testnet\" | \"mainnet\" }) {\n return (\n <div style={headerStyle}>\n <span style={dotStyle} />\n <span style={labelStyle}>Live · Ergo {network}</span>\n <a\n href=\"https://www.ergoblockchain.org/agent-economy#sage-activity\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={linkStyle}\n >\n Sage on chain\n </a>\n </div>\n )\n}\n\nfunction List({\n loading,\n events,\n network,\n apiBase,\n now,\n}: {\n loading: boolean\n events: SageActivityEvent[]\n network: \"testnet\" | \"mainnet\"\n apiBase?: string\n now: number\n}) {\n if (loading) return <div style={emptyStyle}>Loading…</div>\n if (events.length === 0)\n return (\n <div style={emptyStyle}>\n No activity yet — be the first to ask Sage a paid query.\n </div>\n )\n return (\n <div>\n {events.map((evt) => (\n <Row key={evt.txId} evt={evt} network={network} apiBase={apiBase} now={now} />\n ))}\n </div>\n )\n}\n\nfunction Row({\n evt,\n network,\n apiBase,\n now,\n}: {\n evt: SageActivityEvent\n network: \"testnet\" | \"mainnet\"\n apiBase?: string\n now: number\n}) {\n const isSettle = evt.type === \"settlement\"\n const href = isSettle ? receiptUrl(evt.txId, apiBase) : explorerUrl(evt.txId, network)\n const amount = isSettle ? evt.paymentNanoErg ?? evt.inflowNanoErg : evt.inflowNanoErg\n const chipStyle = isSettle ? chipSettleStyle : chipIssueStyle\n const chipText = isSettle ? \"Settled\" : evt.type === \"issuance\" ? \"Issued\" : \"Transfer\"\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={rowStyle}\n >\n <span style={chipStyle}>{chipText}</span>\n <span style={metaStyle}>\n <span style={txStyle}>{evt.txId}</span>\n <span style={whenStyle}>\n block {evt.blockHeight.toLocaleString()} · {relativeTime(evt.timestamp, now)}\n </span>\n </span>\n <span style={amountStyle}>\n {nanoToErg(amount)} <span style={amountUnitStyle}>ERG</span>\n </span>\n </a>\n )\n}\n\n// ── Default inline styles (no CSS-in-JS dep, no class collisions on host) ──\n\nconst rootStyle: CSSProperties = {\n background: \"#000\",\n color: \"#e5e7eb\",\n fontFamily:\n \"'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace\",\n padding: \"14px 16px\",\n borderRadius: 14,\n border: \"1px solid rgba(255,255,255,.08)\",\n boxSizing: \"border-box\",\n width: \"100%\",\n fontSize: 14,\n lineHeight: 1.4,\n}\n\nconst headerStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n marginBottom: 10,\n}\n\nconst dotStyle: CSSProperties = {\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: \"#fb923c\",\n flexShrink: 0,\n}\n\nconst labelStyle: CSSProperties = {\n fontSize: 10,\n letterSpacing: \"0.25em\",\n textTransform: \"uppercase\",\n color: \"#fb923c\",\n}\n\nconst linkStyle: CSSProperties = {\n marginLeft: \"auto\",\n fontSize: 13,\n color: \"#fed7aa\",\n textDecoration: \"none\",\n}\n\nconst rowStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 0\",\n borderTop: \"1px solid rgba(255,255,255,.06)\",\n textDecoration: \"none\",\n color: \"inherit\",\n}\n\nconst chipBase: CSSProperties = {\n fontSize: 9,\n letterSpacing: \"0.2em\",\n textTransform: \"uppercase\",\n padding: \"2px 6px\",\n borderRadius: 4,\n flexShrink: 0,\n border: \"1px solid\",\n}\n\nconst chipSettleStyle: CSSProperties = {\n ...chipBase,\n borderColor: \"rgba(251,146,60,.4)\",\n color: \"#fdba74\",\n background: \"rgba(251,146,60,.1)\",\n}\n\nconst chipIssueStyle: CSSProperties = {\n ...chipBase,\n borderColor: \"rgba(245,158,11,.3)\",\n color: \"rgba(252,211,77,.8)\",\n background: \"rgba(245,158,11,.05)\",\n}\n\nconst metaStyle: CSSProperties = {\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n}\n\nconst txStyle: CSSProperties = {\n color: \"#d1d5db\",\n fontSize: 11,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n}\n\nconst whenStyle: CSSProperties = {\n color: \"#6b7280\",\n fontSize: 10,\n marginTop: 1,\n}\n\nconst amountStyle: CSSProperties = {\n color: \"#fed7aa\",\n fontSize: 12,\n flexShrink: 0,\n textAlign: \"right\",\n}\n\nconst amountUnitStyle: CSSProperties = {\n color: \"#6b7280\",\n fontSize: 9,\n textTransform: \"uppercase\",\n marginLeft: 2,\n}\n\nconst emptyStyle: CSSProperties = {\n padding: \"18px 0\",\n textAlign: \"center\",\n color: \"#6b7280\",\n fontSize: 11,\n}\n\nconst errorStyle: CSSProperties = {\n ...emptyStyle,\n color: \"#f87171\",\n}\n","import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FormEvent,\n} from \"react\"\nimport {\n fetchSageReceipt,\n fetchSageQuote,\n streamSageChat,\n verifySagePayment,\n} from \"../api\"\nimport {\n DEFAULT_API_BASE,\n type SageChatMessage,\n type SagePaymentPhase,\n type SagePaymentWidgetOptions,\n type SageQuoteResponse,\n type SageReceiptBundle,\n type SageVerifyPaymentResponse,\n} from \"../types\"\n\nexport interface SagePaymentWidgetProps extends SagePaymentWidgetOptions {\n className?: string\n style?: CSSProperties\n title?: string\n}\n\nexport function SagePaymentWidget(props: SagePaymentWidgetProps): JSX.Element {\n const {\n apiBase = DEFAULT_API_BASE,\n tenant,\n initialMessages = [],\n placeholder = \"Ask Sage about Ergo or agent payments...\",\n paymentInstructions,\n className,\n style,\n title = \"Ask Sage\",\n } = props\n\n const [messages, setMessages] = useState<SageChatMessage[]>(initialMessages)\n const [input, setInput] = useState(\"\")\n const [phase, setPhase] = useState<SagePaymentPhase>(\"idle\")\n const [quoteResponse, setQuoteResponse] = useState<SageQuoteResponse | null>(null)\n const [activeQuestion, setActiveQuestion] = useState(\"\")\n const [noteBoxId, setNoteBoxId] = useState(\"\")\n const [receipt, setReceipt] = useState<SageVerifyPaymentResponse | null>(null)\n const [receiptBundle, setReceiptBundle] = useState<SageReceiptBundle | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [tier, setTier] = useState<\"free\" | \"premium\" | null>(null)\n const mountedRef = useRef(true)\n\n useEffect(() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n }\n }, [])\n\n const busy = phase === \"quoting\" || phase === \"verifying\" || phase === \"streaming\"\n const apiOpts = useMemo(() => ({ apiBase, tenant }), [apiBase, tenant])\n\n async function submit(e: FormEvent) {\n e.preventDefault()\n const question = input.trim()\n if (!question || busy) return\n\n const userMessage: SageChatMessage = { role: \"user\", content: question }\n const nextMessages = [...messages, userMessage]\n setMessages(nextMessages)\n props.onMessage?.(userMessage, nextMessages)\n setInput(\"\")\n setError(null)\n setReceipt(null)\n setReceiptBundle(null)\n setQuoteResponse(null)\n setActiveQuestion(question)\n setNoteBoxId(\"\")\n setTier(null)\n transition(\"quoting\")\n\n try {\n const quote = await fetchSageQuote({\n ...apiOpts,\n question,\n history: messages,\n })\n props.onQuote?.(quote)\n if (quote.premium) {\n if (!quote.quote) throw new Error(\"Sage marked this question premium but did not return a quote.\")\n setQuoteResponse(quote)\n transition(\"payment_required\", { quote: quote.quote })\n return\n }\n await streamAnswer(nextMessages, undefined, question)\n } catch (err) {\n fail(err)\n }\n }\n\n async function verifyAndContinue() {\n const quote = quoteResponse?.quote\n const note = noteBoxId.trim()\n if (!quote || !activeQuestion || !note || busy) return\n setError(null)\n transition(\"verifying\")\n let verified: SageVerifyPaymentResponse\n try {\n verified = await verifySagePayment({\n ...apiOpts,\n quote,\n question: activeQuestion,\n noteBoxId: note,\n })\n } catch (err) {\n transition(\"payment_required\")\n fail(err, false)\n return\n }\n\n if (!mountedRef.current) return\n setReceipt(verified)\n props.onReceipt?.(verified)\n setQuoteResponse(null)\n setNoteBoxId(\"\")\n transition(\"streaming\", { quote: null, receipt: verified })\n try {\n const bundle = await fetchSageReceipt(verified.receiptId, apiOpts)\n if (!mountedRef.current) return\n setReceiptBundle(bundle)\n props.onReceiptBundle?.(bundle)\n emitStatus(\"streaming\", { quote: null, receipt: verified, receiptBundle: bundle })\n } catch (bundleErr) {\n props.onError?.(bundleErr)\n }\n try {\n await streamAnswer(messages, verified.paymentToken, activeQuestion)\n } catch (err) {\n fail(err)\n }\n }\n\n async function streamAnswer(\n baseMessages: SageChatMessage[],\n paymentToken?: string,\n fallbackQuestion?: string,\n ) {\n transition(\"streaming\")\n let text = \"\"\n const placeholderMessage: SageChatMessage = { role: \"assistant\", content: \"\" }\n setMessages([...baseMessages, placeholderMessage])\n\n const result = await streamSageChat({\n ...apiOpts,\n messages: baseMessages,\n paymentToken,\n onEvent(event) {\n if (!mountedRef.current) return\n if (event.type === \"tier\") {\n setTier(event.tier)\n props.onTier?.(event.tier)\n emitStatus(\"streaming\", { tier: event.tier, messages: baseMessages })\n }\n if (event.type === \"delta\") {\n text += event.text\n setMessages([...baseMessages, { role: \"assistant\", content: text }])\n }\n },\n })\n\n if (!result.ok) {\n if (result.paymentRequired) {\n const question = fallbackQuestion ?? lastUserQuestion(baseMessages) ?? activeQuestion\n const quote = await fetchSageQuote({\n ...apiOpts,\n question,\n history: baseMessages.slice(0, -1),\n })\n if (!mountedRef.current) return\n props.onQuote?.(quote)\n setQuoteResponse(quote)\n setActiveQuestion(question)\n transition(\"payment_required\", { quote: quote.quote ?? null })\n return\n }\n throw new Error(result.error ?? \"Sage chat failed.\")\n }\n\n if (!mountedRef.current) return\n if (result.text && result.text !== text) {\n setMessages([...baseMessages, { role: \"assistant\", content: result.text }])\n }\n transition(\"idle\")\n }\n\n function fail(err: unknown, setErrorPhase: boolean = true) {\n const message = err instanceof Error ? err.message : \"Sage request failed.\"\n setError(message)\n if (setErrorPhase) transition(\"error\", { error: message })\n else emitStatus(phase, { error: message })\n props.onError?.(err)\n }\n\n function transition(\n next: SagePaymentPhase,\n overrides: Partial<{\n quote: SageQuoteResponse[\"quote\"] | null\n receipt: SageVerifyPaymentResponse | null\n receiptBundle: SageReceiptBundle | null\n error: string | null\n tier: \"free\" | \"premium\" | null\n messages: SageChatMessage[]\n activeQuestion: string | null\n }> = {},\n ) {\n setPhase(next)\n props.onPhase?.(next)\n emitStatus(next, overrides)\n }\n\n function emitStatus(\n nextPhase: SagePaymentPhase,\n overrides: Partial<{\n quote: SageQuoteResponse[\"quote\"] | null\n receipt: SageVerifyPaymentResponse | null\n receiptBundle: SageReceiptBundle | null\n error: string | null\n tier: \"free\" | \"premium\" | null\n messages: SageChatMessage[]\n activeQuestion: string | null\n }> = {},\n ) {\n const has = (key: keyof typeof overrides) =>\n Object.prototype.hasOwnProperty.call(overrides, key)\n props.onStatus?.({\n phase: nextPhase,\n tier: has(\"tier\") ? overrides.tier ?? null : tier,\n quote: has(\"quote\") ? overrides.quote ?? null : quoteResponse?.quote ?? null,\n receipt: has(\"receipt\") ? overrides.receipt ?? null : receipt,\n receiptBundle: has(\"receiptBundle\") ? overrides.receiptBundle ?? null : receiptBundle,\n error: has(\"error\") ? overrides.error ?? null : error,\n messages: overrides.messages ?? messages,\n activeQuestion: has(\"activeQuestion\") ? overrides.activeQuestion ?? null : activeQuestion || null,\n })\n }\n\n const quote = quoteResponse?.quote\n const showPaymentPanel = quote && !receipt\n\n return (\n <section className={className} style={{ ...rootStyle, ...style }}>\n <header style={headerStyle}>\n <div>\n <div style={eyebrowStyle}>{tenant?.label ?? \"Ergo agent economy\"}</div>\n <h2 style={titleStyle}>{title}</h2>\n </div>\n <span style={badgeStyle}>{tier ? tier.toUpperCase() : \"SAGE\"}</span>\n </header>\n\n <div style={messagesStyle} aria-live=\"polite\">\n {messages.length === 0 ? (\n <div style={emptyStyle}>Free questions answer immediately. Premium questions return an Accord Note quote.</div>\n ) : (\n messages.map((message, index) => (\n <div\n key={`${message.role}-${index}`}\n style={message.role === \"user\" ? userBubbleStyle : assistantBubbleStyle}\n >\n {message.content || (message.role === \"assistant\" && phase === \"streaming\" ? \"Thinking...\" : \"\")}\n </div>\n ))\n )}\n </div>\n\n {showPaymentPanel ? (\n <div style={paymentStyle}>\n <div style={paymentHeaderStyle}>\n <strong>Payment required</strong>\n <span>{quote.price} ERG testnet</span>\n </div>\n <p style={helperStyle}>\n {paymentInstructions?.helperText ??\n \"Issue an Ergo testnet Note for this quote, then paste the created Note box id.\"}\n {paymentInstructions?.walletUrl ? (\n <>\n {\" \"}\n <a href={paymentInstructions.walletUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={inlineLinkStyle}>\n Wallet guide\n </a>\n </>\n ) : null}\n </p>\n <Field label=\"Quote\" value={quote.quoteId} />\n <Field label=\"Receiver\" value={quote.receiverAddress} copy />\n <Field label=\"Reserve box\" value={quote.reserveBoxId} copy />\n <Field label=\"Task hash\" value={quote.taskHash} copy />\n <label style={labelStyle}>\n {paymentInstructions?.noteBoxLabel ?? \"Note box id\"}\n <input\n value={noteBoxId}\n onChange={(e) => setNoteBoxId(e.currentTarget.value)}\n placeholder=\"Paste 64-char Ergo box id\"\n style={inputStyle}\n disabled={busy}\n />\n </label>\n <button\n type=\"button\"\n onClick={verifyAndContinue}\n disabled={!noteBoxId.trim() || busy}\n style={primaryButtonStyle}\n >\n {phase === \"verifying\" ? \"Verifying...\" : \"Verify payment\"}\n </button>\n </div>\n ) : null}\n\n {receipt ? (\n <div style={receiptPanelStyle}>\n <a href={receipt.receiptUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={receiptStyle}>\n Receipt: {shortId(receipt.receiptId)}\n {receiptBundle ? ` · ${receiptBundle.completeness}` : \"\"}\n </a>\n <a href={receipt.receiptApiUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={receiptApiStyle}>\n machine-readable JSON\n </a>\n </div>\n ) : null}\n\n {error ? <div style={errorStyle}>{error}</div> : null}\n\n <form onSubmit={submit} style={formStyle}>\n <input\n value={input}\n onChange={(e) => setInput(e.currentTarget.value)}\n placeholder={placeholder}\n disabled={busy}\n style={inputStyle}\n />\n <button type=\"submit\" disabled={!input.trim() || busy} style={sendButtonStyle}>\n {phase === \"quoting\" ? \"Quoting...\" : phase === \"streaming\" ? \"Streaming...\" : \"Send\"}\n </button>\n </form>\n </section>\n )\n}\n\nfunction Field({ label, value, copy = false }: { label: string; value: string; copy?: boolean }) {\n return (\n <div style={fieldStyle}>\n <span style={fieldLabelStyle}>{label}</span>\n <code style={fieldValueStyle}>{value}</code>\n {copy ? (\n <button type=\"button\" style={copyButtonStyle} onClick={() => copyText(value)}>\n Copy\n </button>\n ) : null}\n </div>\n )\n}\n\nfunction copyText(value: string) {\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n void navigator.clipboard.writeText(value)\n }\n}\n\nfunction shortId(value: string): string {\n return value.length > 18 ? `${value.slice(0, 10)}...${value.slice(-8)}` : value\n}\n\nfunction lastUserQuestion(messages: SageChatMessage[]): string | null {\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const message = messages[i]\n if (message?.role === \"user\" && message.content.trim()) return message.content.trim()\n }\n return null\n}\n\nconst rootStyle: CSSProperties = {\n background: \"#070707\",\n color: \"#f8fafc\",\n border: \"1px solid rgba(255,255,255,.1)\",\n borderRadius: 8,\n padding: 16,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n boxSizing: \"border-box\",\n width: \"100%\",\n maxWidth: 520,\n}\n\nconst headerStyle: CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n gap: 12,\n marginBottom: 12,\n}\n\nconst eyebrowStyle: CSSProperties = {\n color: \"#fb923c\",\n fontSize: 11,\n letterSpacing: \".16em\",\n textTransform: \"uppercase\",\n marginBottom: 4,\n}\n\nconst titleStyle: CSSProperties = {\n fontSize: 18,\n lineHeight: 1.2,\n margin: 0,\n}\n\nconst badgeStyle: CSSProperties = {\n color: \"#0f172a\",\n background: \"#fdba74\",\n borderRadius: 4,\n padding: \"4px 7px\",\n fontSize: 10,\n fontWeight: 800,\n letterSpacing: \".12em\",\n}\n\nconst messagesStyle: CSSProperties = {\n minHeight: 180,\n maxHeight: 360,\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n padding: \"12px 0\",\n}\n\nconst emptyStyle: CSSProperties = {\n color: \"#94a3b8\",\n border: \"1px dashed rgba(148,163,184,.28)\",\n borderRadius: 6,\n padding: 12,\n fontSize: 13,\n}\n\nconst bubbleBase: CSSProperties = {\n borderRadius: 6,\n padding: \"9px 10px\",\n fontSize: 14,\n lineHeight: 1.45,\n whiteSpace: \"pre-wrap\",\n}\n\nconst userBubbleStyle: CSSProperties = {\n ...bubbleBase,\n alignSelf: \"flex-end\",\n maxWidth: \"88%\",\n background: \"#fb923c\",\n color: \"#111827\",\n}\n\nconst assistantBubbleStyle: CSSProperties = {\n ...bubbleBase,\n alignSelf: \"flex-start\",\n maxWidth: \"92%\",\n background: \"rgba(255,255,255,.07)\",\n color: \"#e5e7eb\",\n}\n\nconst paymentStyle: CSSProperties = {\n border: \"1px solid rgba(251,146,60,.35)\",\n background: \"rgba(251,146,60,.08)\",\n borderRadius: 8,\n padding: 12,\n display: \"grid\",\n gap: 8,\n}\n\nconst paymentHeaderStyle: CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n color: \"#fed7aa\",\n fontSize: 13,\n}\n\nconst helperStyle: CSSProperties = {\n color: \"#fdba74\",\n fontSize: 12,\n lineHeight: 1.45,\n margin: 0,\n}\n\nconst inlineLinkStyle: CSSProperties = {\n color: \"#67e8f9\",\n textDecoration: \"none\",\n}\n\nconst labelStyle: CSSProperties = {\n display: \"grid\",\n gap: 6,\n color: \"#cbd5e1\",\n fontSize: 12,\n}\n\nconst fieldStyle: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"minmax(70px, 88px) minmax(0, 1fr) auto\",\n alignItems: \"center\",\n gap: 8,\n fontSize: 12,\n}\n\nconst fieldLabelStyle: CSSProperties = {\n color: \"#94a3b8\",\n}\n\nconst fieldValueStyle: CSSProperties = {\n color: \"#f8fafc\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontSize: 11,\n}\n\nconst copyButtonStyle: CSSProperties = {\n border: \"1px solid rgba(255,255,255,.16)\",\n background: \"rgba(255,255,255,.06)\",\n color: \"#f8fafc\",\n borderRadius: 4,\n padding: \"4px 7px\",\n cursor: \"pointer\",\n}\n\nconst formStyle: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr) auto\",\n gap: 8,\n marginTop: 12,\n}\n\nconst inputStyle: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"1px solid rgba(255,255,255,.16)\",\n background: \"#050505\",\n color: \"#f8fafc\",\n borderRadius: 6,\n padding: \"10px 11px\",\n fontSize: 14,\n}\n\nconst sendButtonStyle: CSSProperties = {\n border: 0,\n background: \"#fb923c\",\n color: \"#111827\",\n borderRadius: 6,\n padding: \"0 14px\",\n fontWeight: 800,\n cursor: \"pointer\",\n}\n\nconst primaryButtonStyle: CSSProperties = {\n ...sendButtonStyle,\n padding: \"10px 12px\",\n}\n\nconst receiptStyle: CSSProperties = {\n display: \"inline-flex\",\n color: \"#67e8f9\",\n fontSize: 13,\n textDecoration: \"none\",\n}\n\nconst receiptPanelStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 10,\n marginTop: 10,\n border: \"1px solid rgba(103,232,249,.22)\",\n background: \"rgba(103,232,249,.07)\",\n borderRadius: 6,\n padding: \"9px 10px\",\n}\n\nconst receiptApiStyle: CSSProperties = {\n color: \"#cbd5e1\",\n fontSize: 12,\n textDecoration: \"none\",\n}\n\nconst errorStyle: CSSProperties = {\n color: \"#fecaca\",\n background: \"rgba(239,68,68,.12)\",\n border: \"1px solid rgba(239,68,68,.25)\",\n borderRadius: 6,\n padding: 10,\n marginTop: 10,\n fontSize: 13,\n}\n"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/api.ts","../src/react/SageActivityFeed.tsx","../src/react/SagePaymentWidget.tsx"],"names":["apiBase","useState","useRef","useEffect","useMemo","quote","jsxs","rootStyle","headerStyle","jsx","emptyStyle","Fragment","labelStyle","errorStyle"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * Public types for the Sage activity feed and paid chat flow.\n *\n * The source of truth is the API at https://www.ergoblockchain.org/api/sage/activity;\n * this file re-states the schema so consumers don't have to depend on the\n * server-side fetcher.\n */\n\nexport type SageActivityType = \"settlement\" | \"issuance\" | \"transfer\"\n\nexport interface SageActivityEvent {\n /** 64-char hex transaction id. */\n txId: string\n /** Block height at inclusion. */\n blockHeight: number\n /** Block timestamp (ms epoch). */\n timestamp: number\n /** Heuristic classification of the tx. */\n type: SageActivityType\n /** nanoERG flowing into the seller wallet from this tx (sum of outputs). */\n inflowNanoErg: number\n /**\n * For settlements: value of the redeemed Note (= what the buyer paid).\n * For other event types: undefined.\n *\n * Use this — not `inflowNanoErg` — when displaying \"amount paid for a\n * settled query\". `inflowNanoErg` includes change boxes in test setups\n * where the buyer and seller share an address.\n */\n paymentNanoErg?: number\n /** First input box that carries Note-shape registers, if any. */\n noteBoxId?: string\n}\n\nexport interface SageActivityResponse {\n ok: boolean\n network: \"testnet\" | \"mainnet\"\n /** Sage seller wallet address. */\n receiver: string\n /** Total number of txs ever touching the wallet, per the explorer. */\n total: number\n events: SageActivityEvent[]\n error?: string\n}\n\n/**\n * Configuration accepted by every entry point (React component +\n * vanilla mount fn). Defaults below are sensible for the canonical\n * ergoblockchain.org deployment.\n */\nexport interface SageWidgetOptions {\n /**\n * Base URL of the Sage host. Override if you run your own Sage\n * deployment behind a custom domain. Default: ergoblockchain.org.\n */\n apiBase?: string\n /**\n * Number of events to display (max 25). Default: 5.\n */\n limit?: number\n /**\n * Polling interval in ms. Default: 60000 (60s). Set to 0 to disable\n * polling — the widget will fetch once on mount and never refresh.\n */\n refreshMs?: number\n /**\n * Optional callback fired every time a fresh response arrives. Useful\n * for analytics or for triggering host-side animations on new\n * settlements.\n */\n onUpdate?: (response: SageActivityResponse) => void\n /**\n * Optional callback fired on fetch errors. Default: console.warn.\n */\n onError?: (error: unknown) => void\n}\n\nexport type SageChatRole = \"user\" | \"assistant\"\n\nexport interface SageChatMessage {\n role: SageChatRole\n content: string\n}\n\nexport interface SageTenantConfig {\n /** Stable tenant id for analytics, logs, or future multi-tenant routing. */\n id?: string\n /** Human-facing label shown in the default widgets. */\n label?: string\n /** Extra headers attached to Sage API requests. */\n headers?: Record<string, string>\n}\n\nexport type SagePaymentNetwork = \"ergo-testnet\" | \"ergo-mainnet\"\n\nexport interface SageQuote {\n quoteId: string\n taskHash: string\n price: string\n issuedAt?: string\n expiresAt: string\n receiverAddress: string\n reserveBoxId: string\n deadline: `+${number} blocks`\n}\n\nexport type SagePremiumReason =\n | \"explicit_command\"\n | \"code_request\"\n | \"long_answer\"\n | \"deep_research\"\n | \"multi_turn_followup\"\n\nexport interface SageQuoteResponse {\n premium: boolean\n reason?: SagePremiumReason\n rationale?: string\n quote?: SageQuote\n}\n\nexport interface SagePaymentIntent {\n type: \"sage.payment_intent.v1\"\n network: SagePaymentNetwork\n createdAt: string\n question: string\n tenant?: Pick<SageTenantConfig, \"id\" | \"label\">\n quote: SageQuote\n amountErg: string\n receiverAddress: string\n reserveBoxId: string\n taskHash: string\n expiresAt: string\n deadline: `+${number} blocks`\n verifyEndpoint: string\n receiptEndpointTemplate: string\n}\n\nexport interface SageWalletLaunchResult {\n ok: boolean\n /** Note box id produced by a host wallet flow. If present, the widget can prefill verification. */\n noteBoxId?: string\n /** Optional transaction id for host telemetry. Sage verifies by Note box id, not by tx id. */\n txId?: string\n error?: string\n}\n\nexport type SageWalletLauncher = (\n intent: SagePaymentIntent,\n) => Promise<SageWalletLaunchResult | void> | SageWalletLaunchResult | void\n\nexport interface SageVerifyPaymentResponse {\n ok: true\n paymentToken: string\n receiptId: string\n receiptUrl: string\n receiptApiUrl: string\n settlementTxId?: string | null\n accordSettlementId?: string\n receiptStorage?: {\n ok: boolean\n skipped?: boolean\n reason?: string\n path?: string\n aliases?: string[]\n error?: string\n }\n}\n\nexport interface SagePremiumPaymentRequired {\n error: \"premium_payment_required\"\n reason?: SagePremiumReason\n rationale?: string\n}\n\nexport type SageChatTier = \"free\" | \"premium\"\n\nexport type SageChatStreamEvent =\n | { type: \"tier\"; tier: SageChatTier; model?: string }\n | { type: \"delta\"; text: string }\n | { type: \"done\"; stopReason?: string; inputTokens?: number; outputTokens?: number }\n | { type: \"error\"; message: string }\n\nexport interface SageChatStreamResult {\n ok: boolean\n status: number\n text: string\n tier?: SageChatTier\n paymentRequired?: SagePremiumPaymentRequired\n error?: string\n}\n\nexport interface SageReceiptBundle {\n ok: true\n type: \"sage.receipt_bundle.v1\"\n version: \"v1\"\n id: string\n status: \"settled_on_chain\" | \"verified_pending_redemption\"\n completeness: \"full_receipt_bundle\" | \"full\" | \"chain_proof_only\"\n public_receipt_url: string\n api_receipt_url: string\n explorer_url: string | null\n accord?: {\n agreement_hash?: string | null\n verification_receipt_hash?: string | null\n settlement_receipt_hash?: string | null\n agreement_json?: unknown\n verification_receipt_json?: unknown\n settlement_receipt_json?: unknown\n }\n}\n\nexport interface SagePaymentWidgetOptions {\n /**\n * Base URL of the Sage host. Default: ergoblockchain.org.\n */\n apiBase?: string\n /**\n * Optional tenant metadata. Current public Sage ignores tenant routing,\n * but the widget keeps this shape stable for multi-tenant deployments.\n */\n tenant?: SageTenantConfig\n /** Initial chat messages, useful for preloaded context. */\n initialMessages?: SageChatMessage[]\n /** Placeholder text for the default input. */\n placeholder?: string\n /** Widget heading. React also accepts this through component props. */\n title?: string\n /** Optional host-specific payment copy and links. */\n paymentInstructions?: SagePaymentInstructions\n /**\n * Optional wallet launcher supplied by the host app. The package does not\n * sign transactions itself; this callback receives a structured intent that\n * your wallet layer can transform into a testnet Note.\n */\n walletLauncher?: SageWalletLauncher\n /**\n * Show the portable payment intent JSON in the default UI. Default: true.\n * Hosts with a fully custom wallet flow can set this to false.\n */\n showPaymentIntent?: boolean\n /**\n * Testnet safety copy for the default widget. Set to false to hide.\n */\n testnetWarning?: string | false\n /** Called whenever a message is appended by the widget. */\n onMessage?: (message: SageChatMessage, messages: SageChatMessage[]) => void\n /** Called after Sage returns a premium quote. */\n onQuote?: (quote: SageQuoteResponse) => void\n /** Called when a structured payment intent is produced for the active quote. */\n onPaymentIntent?: (intent: SagePaymentIntent) => void\n /** Called after a payment verifies and Sage returns a receipt link. */\n onReceipt?: (receipt: SageVerifyPaymentResponse) => void\n /** Called after the widget fetches the full machine-readable receipt bundle. */\n onReceiptBundle?: (receipt: SageReceiptBundle) => void\n /** Called when the chat stream reports free vs premium tier. */\n onTier?: (tier: SageChatTier) => void\n /** Called when the widget phase changes. */\n onPhase?: (phase: SagePaymentPhase) => void\n /** Called with a compact state snapshot after important widget events. */\n onStatus?: (status: SagePaymentWidgetStatus) => void\n /** Optional callback fired on fetch or stream errors. */\n onError?: (error: unknown) => void\n}\n\nexport type SagePaymentPhase =\n | \"idle\"\n | \"quoting\"\n | \"payment_required\"\n | \"verifying\"\n | \"streaming\"\n | \"error\"\n\nexport interface SagePaymentInstructions {\n /** Short copy displayed above the Note box input. */\n helperText?: string\n /** Optional link to host payment/wallet instructions. */\n walletUrl?: string\n /** Custom label for the wallet launcher button. */\n walletLauncherLabel?: string\n /** Optional custom label for the Note box input. */\n noteBoxLabel?: string\n}\n\nexport interface SagePaymentWidgetStatus {\n phase: SagePaymentPhase\n tier: SageChatTier | null\n quote: SageQuoteResponse[\"quote\"] | null\n paymentIntent: SagePaymentIntent | null\n receipt: SageVerifyPaymentResponse | null\n receiptBundle: SageReceiptBundle | null\n error: string | null\n /** Latest chat transcript known to the widget. */\n messages: SageChatMessage[]\n /** Question currently tied to the active quote/payment cycle. */\n activeQuestion: string | null\n}\n\nexport const DEFAULT_API_BASE = \"https://www.ergoblockchain.org\"\nexport const DEFAULT_LIMIT = 5\nexport const DEFAULT_REFRESH_MS = 60_000\n","/**\n * Thin client over /api/sage/activity.\n *\n * Pure fetch + shape — no rendering, no DOM. React + vanilla mounts\n * both call into here so the API contract lives in one place.\n */\n\nimport {\n DEFAULT_API_BASE,\n DEFAULT_LIMIT,\n type SageChatMessage,\n type SageChatStreamEvent,\n type SageChatStreamResult,\n type SagePaymentIntent,\n type SagePaymentNetwork,\n type SageQuote,\n type SageQuoteResponse,\n type SageReceiptBundle,\n type SageTenantConfig,\n type SageVerifyPaymentResponse,\n type SageActivityResponse,\n} from \"./types\"\n\nexport interface FetchActivityOptions {\n apiBase?: string\n limit?: number\n signal?: AbortSignal\n}\n\nexport interface SageRequestOptions {\n apiBase?: string\n tenant?: SageTenantConfig\n headers?: Record<string, string>\n signal?: AbortSignal\n}\n\nexport interface FetchSageQuoteOptions extends SageRequestOptions {\n question: string\n history?: SageChatMessage[]\n}\n\nexport interface VerifySagePaymentOptions extends SageRequestOptions {\n quote: SageQuote\n question: string\n noteBoxId: string\n}\n\nexport interface CreateSagePaymentIntentOptions {\n quote: SageQuote\n question: string\n apiBase?: string\n tenant?: SageTenantConfig\n network?: SagePaymentNetwork\n createdAt?: string\n}\n\nexport interface StreamSageChatOptions extends SageRequestOptions {\n messages: SageChatMessage[]\n paymentToken?: string\n onEvent?: (event: SageChatStreamEvent) => void\n}\n\nexport async function fetchSageActivity(\n opts: FetchActivityOptions = {},\n): Promise<SageActivityResponse> {\n const base = opts.apiBase ?? DEFAULT_API_BASE\n const limit = Math.min(Math.max(opts.limit ?? DEFAULT_LIMIT, 1), 25)\n const url = `${trimSlash(base)}/api/sage/activity?limit=${limit}`\n const res = await fetch(url, { signal: opts.signal })\n if (!res.ok) {\n throw new Error(`sage activity ${res.status}`)\n }\n return (await res.json()) as SageActivityResponse\n}\n\nexport async function fetchSageQuote(\n opts: FetchSageQuoteOptions,\n): Promise<SageQuoteResponse> {\n const res = await fetch(`${apiBase(opts)}/api/sage/quote`, {\n method: \"POST\",\n headers: jsonHeaders(opts),\n body: JSON.stringify({\n question: opts.question,\n history: opts.history ?? [],\n }),\n signal: opts.signal,\n })\n const body = await parseJson(res)\n if (!res.ok) throw new Error(readError(body, `sage quote ${res.status}`))\n return body as SageQuoteResponse\n}\n\nexport async function verifySagePayment(\n opts: VerifySagePaymentOptions,\n): Promise<SageVerifyPaymentResponse> {\n const res = await fetch(`${apiBase(opts)}/api/sage/verify-payment`, {\n method: \"POST\",\n headers: jsonHeaders(opts),\n body: JSON.stringify({\n quote: opts.quote,\n question: opts.question,\n noteBoxId: opts.noteBoxId,\n }),\n signal: opts.signal,\n })\n const body = await parseJson(res)\n if (!res.ok) throw new Error(readError(body, `sage verify-payment ${res.status}`))\n return body as SageVerifyPaymentResponse\n}\n\nexport async function fetchSageReceipt(\n id: string,\n opts: SageRequestOptions = {},\n): Promise<SageReceiptBundle> {\n const res = await fetch(`${apiBase(opts)}/api/sage/receipt/${encodeURIComponent(id)}`, {\n headers: requestHeaders(opts),\n signal: opts.signal,\n })\n const body = await parseJson(res)\n if (!res.ok) throw new Error(readError(body, `sage receipt ${res.status}`))\n return body as SageReceiptBundle\n}\n\nexport function isFullSageReceiptBundle(value: SageReceiptBundle | null | undefined): boolean {\n return value?.ok === true && value.completeness === \"full_receipt_bundle\"\n}\n\nexport function createSagePaymentIntent(\n opts: CreateSagePaymentIntentOptions,\n): SagePaymentIntent {\n const base = trimSlash(opts.apiBase ?? DEFAULT_API_BASE)\n return {\n type: \"sage.payment_intent.v1\",\n network: opts.network ?? \"ergo-testnet\",\n createdAt: opts.createdAt ?? new Date().toISOString(),\n question: opts.question,\n ...(opts.tenant?.id || opts.tenant?.label\n ? { tenant: { id: opts.tenant.id, label: opts.tenant.label } }\n : {}),\n quote: opts.quote,\n amountErg: opts.quote.price,\n receiverAddress: opts.quote.receiverAddress,\n reserveBoxId: opts.quote.reserveBoxId,\n taskHash: opts.quote.taskHash,\n expiresAt: opts.quote.expiresAt,\n deadline: opts.quote.deadline,\n verifyEndpoint: `${base}/api/sage/verify-payment`,\n receiptEndpointTemplate: `${base}/api/sage/receipt/{receiptId}`,\n }\n}\n\nexport function serializeSagePaymentIntent(intent: SagePaymentIntent): string {\n return JSON.stringify(intent, null, 2)\n}\n\nexport async function streamSageChat(\n opts: StreamSageChatOptions,\n): Promise<SageChatStreamResult> {\n const res = await fetch(`${apiBase(opts)}/api/sage/chat`, {\n method: \"POST\",\n headers: jsonHeaders(opts),\n body: JSON.stringify({\n messages: opts.messages,\n ...(opts.paymentToken ? { paymentToken: opts.paymentToken } : {}),\n }),\n signal: opts.signal,\n })\n\n if (res.status === 402) {\n const body = await parseJson(res)\n return {\n ok: false,\n status: res.status,\n text: \"\",\n paymentRequired: body as SageChatStreamResult[\"paymentRequired\"],\n }\n }\n\n if (!res.ok) {\n const body = await parseJson(res)\n return {\n ok: false,\n status: res.status,\n text: \"\",\n error: readError(body, `sage chat ${res.status}`),\n }\n }\n\n if (!res.body) {\n return { ok: false, status: res.status, text: \"\", error: \"Sage chat stream missing body\" }\n }\n\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buffer = \"\"\n let text = \"\"\n let tier: SageChatStreamResult[\"tier\"]\n\n while (true) {\n const { value, done } = await reader.read()\n if (done) break\n buffer += decoder.decode(value, { stream: true })\n const parts = buffer.split(\"\\n\\n\")\n buffer = parts.pop() ?? \"\"\n for (const part of parts) {\n const event = parseSseEvent(part)\n if (!event) continue\n if (event.type === \"delta\") text += event.text\n if (event.type === \"tier\") tier = event.tier\n opts.onEvent?.(event)\n if (event.type === \"error\") {\n return {\n ok: false,\n status: res.status,\n text,\n tier,\n error: event.message,\n }\n }\n }\n }\n\n if (buffer.trim()) {\n const event = parseSseEvent(buffer)\n if (event) {\n if (event.type === \"delta\") text += event.text\n if (event.type === \"tier\") tier = event.tier\n opts.onEvent?.(event)\n if (event.type === \"error\") {\n return {\n ok: false,\n status: res.status,\n text,\n tier,\n error: event.message,\n }\n }\n }\n }\n\n return { ok: true, status: res.status, text, tier }\n}\n\n/** nanoERG → \"0.001\" (trims trailing zeros, max 9 decimals). */\nexport function nanoToErg(nano: number | undefined): string {\n if (!nano || nano <= 0) return \"0\"\n const erg = nano / 1e9\n return erg.toFixed(9).replace(/\\.?0+$/, \"\")\n}\n\n/** Cheap relative-time formatter, ASCII-only, no Intl deps. */\nexport function relativeTime(ms: number, now: number = Date.now()): string {\n const diff = Math.max(0, now - ms)\n const sec = Math.floor(diff / 1000)\n if (sec < 60) return `${sec}s ago`\n const min = Math.floor(sec / 60)\n if (min < 60) return `${min}m ago`\n const hr = Math.floor(min / 60)\n if (hr < 24) return `${hr}h ago`\n const day = Math.floor(hr / 24)\n return `${day}d ago`\n}\n\n/** Receipt URL for a settled tx, given the host base. */\nexport function receiptUrl(txId: string, apiBase: string = DEFAULT_API_BASE): string {\n return `${trimSlash(apiBase)}/r/sage/${txId}`\n}\n\n/** Explorer URL for a tx on the given network. */\nexport function explorerUrl(\n txId: string,\n network: \"testnet\" | \"mainnet\" = \"testnet\",\n): string {\n return network === \"testnet\"\n ? `https://testnet.ergoplatform.com/transactions/${txId}`\n : `https://explorer.ergoplatform.com/transactions/${txId}`\n}\n\nfunction apiBase(opts: SageRequestOptions): string {\n return trimSlash(opts.apiBase ?? DEFAULT_API_BASE)\n}\n\nfunction trimSlash(value: string): string {\n return value.replace(/\\/+$/, \"\")\n}\n\nfunction requestHeaders(opts: SageRequestOptions): Record<string, string> {\n return {\n ...(opts.tenant?.id ? { \"x-sage-tenant-id\": opts.tenant.id } : {}),\n ...(opts.tenant?.headers ?? {}),\n ...(opts.headers ?? {}),\n }\n}\n\nfunction jsonHeaders(opts: SageRequestOptions): Record<string, string> {\n return {\n \"content-type\": \"application/json\",\n ...requestHeaders(opts),\n }\n}\n\nasync function parseJson(res: Response): Promise<unknown> {\n const text = await res.text()\n if (!text) return null\n try {\n return JSON.parse(text)\n } catch {\n return { error: text }\n }\n}\n\nfunction readError(body: unknown, fallback: string): string {\n if (body && typeof body === \"object\" && \"error\" in body) {\n const error = (body as { error?: unknown }).error\n if (typeof error === \"string\") return error\n }\n return fallback\n}\n\nfunction parseSseEvent(raw: string): SageChatStreamEvent | null {\n let eventName = \"message\"\n let data = \"\"\n for (const line of raw.split(\"\\n\")) {\n if (line.startsWith(\"event:\")) eventName = line.slice(\"event:\".length).trim()\n if (line.startsWith(\"data:\")) data += line.slice(\"data:\".length).trim()\n }\n if (!data) return null\n let parsed: Record<string, unknown>\n try {\n parsed = JSON.parse(data) as Record<string, unknown>\n } catch {\n return null\n }\n if (eventName === \"tier\") {\n const tier = parsed.tier === \"premium\" ? \"premium\" : \"free\"\n return {\n type: \"tier\",\n tier,\n ...(typeof parsed.model === \"string\" ? { model: parsed.model } : {}),\n }\n }\n if (eventName === \"delta\" && typeof parsed.text === \"string\") {\n return { type: \"delta\", text: parsed.text }\n }\n if (eventName === \"done\") {\n return {\n type: \"done\",\n ...(typeof parsed.stopReason === \"string\" ? { stopReason: parsed.stopReason } : {}),\n ...(typeof parsed.inputTokens === \"number\" ? { inputTokens: parsed.inputTokens } : {}),\n ...(typeof parsed.outputTokens === \"number\" ? { outputTokens: parsed.outputTokens } : {}),\n }\n }\n if (eventName === \"error\") {\n return {\n type: \"error\",\n message: typeof parsed.message === \"string\" ? parsed.message : \"Sage stream error\",\n }\n }\n return null\n}\n","/**\n * <SageActivityFeed /> — drop-in React component rendering Sage's live\n * on-chain activity (settlements + issuances + transfers) directly,\n * NOT through an iframe. Use this when you want host-CSS-themable,\n * tree-shakeable, accessibility-friendly markup.\n *\n * If you instead want a CSS-isolated drop-in that doesn't care about\n * the host page's style, use the static iframe embed at\n * https://www.ergoblockchain.org/agents.js\n * which mounts an isolated iframe.\n */\n\nimport {\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n} from \"react\"\nimport {\n explorerUrl,\n fetchSageActivity,\n nanoToErg,\n receiptUrl,\n relativeTime,\n} from \"../api\"\nimport {\n DEFAULT_LIMIT,\n DEFAULT_REFRESH_MS,\n type SageActivityEvent,\n type SageActivityResponse,\n type SageWidgetOptions,\n} from \"../types\"\n\nexport interface SageActivityFeedProps extends SageWidgetOptions {\n /** Class name applied to the root container. */\n className?: string\n /** Inline style applied to the root container. */\n style?: CSSProperties\n /**\n * Render-prop override. If supplied, the component calls this with\n * the current response and renders only what it returns. Use this\n * to bring your own design system instead of the default styling.\n */\n children?: (state: {\n loading: boolean\n response: SageActivityResponse | null\n error: unknown\n }) => React.ReactNode\n}\n\nconst ONE_MIN = 60_000\n\nexport function SageActivityFeed(props: SageActivityFeedProps): JSX.Element {\n const {\n apiBase,\n limit = DEFAULT_LIMIT,\n refreshMs = DEFAULT_REFRESH_MS,\n onUpdate,\n onError,\n className,\n style,\n children,\n } = props\n\n const [response, setResponse] = useState<SageActivityResponse | null>(null)\n const [error, setError] = useState<unknown>(null)\n const [loading, setLoading] = useState(true)\n const [now, setNow] = useState(() => Date.now())\n\n const onUpdateRef = useRef(onUpdate)\n const onErrorRef = useRef(onError)\n useEffect(() => {\n onUpdateRef.current = onUpdate\n }, [onUpdate])\n useEffect(() => {\n onErrorRef.current = onError\n }, [onError])\n\n useEffect(() => {\n let cancelled = false\n const abort = new AbortController()\n\n async function load() {\n try {\n const data = await fetchSageActivity({\n apiBase,\n limit,\n signal: abort.signal,\n })\n if (cancelled) return\n setResponse(data)\n setError(null)\n setLoading(false)\n onUpdateRef.current?.(data)\n } catch (err) {\n if (cancelled || (err as { name?: string }).name === \"AbortError\") return\n setError(err)\n setLoading(false)\n ;(onErrorRef.current ?? console.warn)(err)\n }\n }\n\n load()\n const pollId =\n refreshMs > 0 ? setInterval(load, refreshMs) : undefined\n const tickId = setInterval(() => setNow(Date.now()), ONE_MIN / 4)\n return () => {\n cancelled = true\n abort.abort()\n if (pollId) clearInterval(pollId)\n clearInterval(tickId)\n }\n }, [apiBase, limit, refreshMs])\n\n if (children) {\n return <>{children({ loading, response, error })}</>\n }\n\n return (\n <div className={className} style={{ ...rootStyle, ...style }}>\n <Header network={response?.network ?? \"testnet\"} />\n <List\n loading={loading}\n events={response?.events ?? []}\n network={response?.network ?? \"testnet\"}\n apiBase={apiBase}\n now={now}\n />\n {error ? (\n <div style={errorStyle}>\n Could not reach the activity feed.\n </div>\n ) : null}\n </div>\n )\n}\n\nfunction Header({ network }: { network: \"testnet\" | \"mainnet\" }) {\n return (\n <div style={headerStyle}>\n <span style={dotStyle} />\n <span style={labelStyle}>Live · Ergo {network}</span>\n <a\n href=\"https://www.ergoblockchain.org/agent-economy#sage-activity\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={linkStyle}\n >\n Sage on chain\n </a>\n </div>\n )\n}\n\nfunction List({\n loading,\n events,\n network,\n apiBase,\n now,\n}: {\n loading: boolean\n events: SageActivityEvent[]\n network: \"testnet\" | \"mainnet\"\n apiBase?: string\n now: number\n}) {\n if (loading) return <div style={emptyStyle}>Loading…</div>\n if (events.length === 0)\n return (\n <div style={emptyStyle}>\n No activity yet — be the first to ask Sage a paid query.\n </div>\n )\n return (\n <div>\n {events.map((evt) => (\n <Row key={evt.txId} evt={evt} network={network} apiBase={apiBase} now={now} />\n ))}\n </div>\n )\n}\n\nfunction Row({\n evt,\n network,\n apiBase,\n now,\n}: {\n evt: SageActivityEvent\n network: \"testnet\" | \"mainnet\"\n apiBase?: string\n now: number\n}) {\n const isSettle = evt.type === \"settlement\"\n const href = isSettle ? receiptUrl(evt.txId, apiBase) : explorerUrl(evt.txId, network)\n const amount = isSettle ? evt.paymentNanoErg ?? evt.inflowNanoErg : evt.inflowNanoErg\n const chipStyle = isSettle ? chipSettleStyle : chipIssueStyle\n const chipText = isSettle ? \"Settled\" : evt.type === \"issuance\" ? \"Issued\" : \"Transfer\"\n return (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={rowStyle}\n >\n <span style={chipStyle}>{chipText}</span>\n <span style={metaStyle}>\n <span style={txStyle}>{evt.txId}</span>\n <span style={whenStyle}>\n block {evt.blockHeight.toLocaleString()} · {relativeTime(evt.timestamp, now)}\n </span>\n </span>\n <span style={amountStyle}>\n {nanoToErg(amount)} <span style={amountUnitStyle}>ERG</span>\n </span>\n </a>\n )\n}\n\n// ── Default inline styles (no CSS-in-JS dep, no class collisions on host) ──\n\nconst rootStyle: CSSProperties = {\n background: \"#000\",\n color: \"#e5e7eb\",\n fontFamily:\n \"'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,monospace\",\n padding: \"14px 16px\",\n borderRadius: 14,\n border: \"1px solid rgba(255,255,255,.08)\",\n boxSizing: \"border-box\",\n width: \"100%\",\n fontSize: 14,\n lineHeight: 1.4,\n}\n\nconst headerStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n marginBottom: 10,\n}\n\nconst dotStyle: CSSProperties = {\n width: 8,\n height: 8,\n borderRadius: \"50%\",\n background: \"#fb923c\",\n flexShrink: 0,\n}\n\nconst labelStyle: CSSProperties = {\n fontSize: 10,\n letterSpacing: \"0.25em\",\n textTransform: \"uppercase\",\n color: \"#fb923c\",\n}\n\nconst linkStyle: CSSProperties = {\n marginLeft: \"auto\",\n fontSize: 13,\n color: \"#fed7aa\",\n textDecoration: \"none\",\n}\n\nconst rowStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 10,\n padding: \"8px 0\",\n borderTop: \"1px solid rgba(255,255,255,.06)\",\n textDecoration: \"none\",\n color: \"inherit\",\n}\n\nconst chipBase: CSSProperties = {\n fontSize: 9,\n letterSpacing: \"0.2em\",\n textTransform: \"uppercase\",\n padding: \"2px 6px\",\n borderRadius: 4,\n flexShrink: 0,\n border: \"1px solid\",\n}\n\nconst chipSettleStyle: CSSProperties = {\n ...chipBase,\n borderColor: \"rgba(251,146,60,.4)\",\n color: \"#fdba74\",\n background: \"rgba(251,146,60,.1)\",\n}\n\nconst chipIssueStyle: CSSProperties = {\n ...chipBase,\n borderColor: \"rgba(245,158,11,.3)\",\n color: \"rgba(252,211,77,.8)\",\n background: \"rgba(245,158,11,.05)\",\n}\n\nconst metaStyle: CSSProperties = {\n flex: 1,\n minWidth: 0,\n display: \"flex\",\n flexDirection: \"column\",\n}\n\nconst txStyle: CSSProperties = {\n color: \"#d1d5db\",\n fontSize: 11,\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n}\n\nconst whenStyle: CSSProperties = {\n color: \"#6b7280\",\n fontSize: 10,\n marginTop: 1,\n}\n\nconst amountStyle: CSSProperties = {\n color: \"#fed7aa\",\n fontSize: 12,\n flexShrink: 0,\n textAlign: \"right\",\n}\n\nconst amountUnitStyle: CSSProperties = {\n color: \"#6b7280\",\n fontSize: 9,\n textTransform: \"uppercase\",\n marginLeft: 2,\n}\n\nconst emptyStyle: CSSProperties = {\n padding: \"18px 0\",\n textAlign: \"center\",\n color: \"#6b7280\",\n fontSize: 11,\n}\n\nconst errorStyle: CSSProperties = {\n ...emptyStyle,\n color: \"#f87171\",\n}\n","import {\n useEffect,\n useMemo,\n useRef,\n useState,\n type CSSProperties,\n type FormEvent,\n} from \"react\"\nimport {\n createSagePaymentIntent,\n fetchSageReceipt,\n fetchSageQuote,\n serializeSagePaymentIntent,\n streamSageChat,\n verifySagePayment,\n} from \"../api\"\nimport {\n DEFAULT_API_BASE,\n type SageChatMessage,\n type SagePaymentIntent,\n type SagePaymentPhase,\n type SagePaymentWidgetOptions,\n type SageQuoteResponse,\n type SageReceiptBundle,\n type SageVerifyPaymentResponse,\n} from \"../types\"\n\nexport interface SagePaymentWidgetProps extends SagePaymentWidgetOptions {\n className?: string\n style?: CSSProperties\n title?: string\n}\n\nexport function SagePaymentWidget(props: SagePaymentWidgetProps): JSX.Element {\n const {\n apiBase = DEFAULT_API_BASE,\n tenant,\n initialMessages = [],\n placeholder = \"Ask Sage about Ergo or agent payments...\",\n paymentInstructions,\n showPaymentIntent = true,\n testnetWarning = \"Testnet proof flow. The widget never signs funds; connect your own reviewed wallet layer before handling real value.\",\n className,\n style,\n title = \"Ask Sage\",\n } = props\n\n const [messages, setMessages] = useState<SageChatMessage[]>(initialMessages)\n const [input, setInput] = useState(\"\")\n const [phase, setPhase] = useState<SagePaymentPhase>(\"idle\")\n const [quoteResponse, setQuoteResponse] = useState<SageQuoteResponse | null>(null)\n const [paymentIntent, setPaymentIntent] = useState<SagePaymentIntent | null>(null)\n const [activeQuestion, setActiveQuestion] = useState(\"\")\n const [noteBoxId, setNoteBoxId] = useState(\"\")\n const [receipt, setReceipt] = useState<SageVerifyPaymentResponse | null>(null)\n const [receiptBundle, setReceiptBundle] = useState<SageReceiptBundle | null>(null)\n const [error, setError] = useState<string | null>(null)\n const [tier, setTier] = useState<\"free\" | \"premium\" | null>(null)\n const mountedRef = useRef(true)\n\n useEffect(() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n }\n }, [])\n\n const busy = phase === \"quoting\" || phase === \"verifying\" || phase === \"streaming\"\n const apiOpts = useMemo(() => ({ apiBase, tenant }), [apiBase, tenant])\n\n async function submit(e: FormEvent) {\n e.preventDefault()\n const question = input.trim()\n if (!question || busy) return\n\n const userMessage: SageChatMessage = { role: \"user\", content: question }\n const nextMessages = [...messages, userMessage]\n setMessages(nextMessages)\n props.onMessage?.(userMessage, nextMessages)\n setInput(\"\")\n setError(null)\n setReceipt(null)\n setReceiptBundle(null)\n setQuoteResponse(null)\n setPaymentIntent(null)\n setActiveQuestion(question)\n setNoteBoxId(\"\")\n setTier(null)\n transition(\"quoting\")\n\n try {\n const quote = await fetchSageQuote({\n ...apiOpts,\n question,\n history: messages,\n })\n props.onQuote?.(quote)\n if (quote.premium) {\n if (!quote.quote) throw new Error(\"Sage marked this question premium but did not return a quote.\")\n const intent = createSagePaymentIntent({\n ...apiOpts,\n question,\n quote: quote.quote,\n })\n setPaymentIntent(intent)\n setQuoteResponse(quote)\n props.onPaymentIntent?.(intent)\n transition(\"payment_required\", { quote: quote.quote, paymentIntent: intent })\n return\n }\n await streamAnswer(nextMessages, undefined, question)\n } catch (err) {\n fail(err)\n }\n }\n\n async function verifyAndContinue() {\n const quote = quoteResponse?.quote\n const note = noteBoxId.trim()\n if (!quote || !activeQuestion || !note || busy) return\n setError(null)\n transition(\"verifying\")\n let verified: SageVerifyPaymentResponse\n try {\n verified = await verifySagePayment({\n ...apiOpts,\n quote,\n question: activeQuestion,\n noteBoxId: note,\n })\n } catch (err) {\n transition(\"payment_required\")\n fail(err, false)\n return\n }\n\n if (!mountedRef.current) return\n setReceipt(verified)\n props.onReceipt?.(verified)\n setQuoteResponse(null)\n setPaymentIntent(null)\n setNoteBoxId(\"\")\n transition(\"streaming\", { quote: null, paymentIntent: null, receipt: verified })\n try {\n const bundle = await fetchSageReceipt(verified.receiptId, apiOpts)\n if (!mountedRef.current) return\n setReceiptBundle(bundle)\n props.onReceiptBundle?.(bundle)\n emitStatus(\"streaming\", { quote: null, paymentIntent: null, receipt: verified, receiptBundle: bundle })\n } catch (bundleErr) {\n props.onError?.(bundleErr)\n }\n try {\n await streamAnswer(messages, verified.paymentToken, activeQuestion)\n } catch (err) {\n fail(err)\n }\n }\n\n async function streamAnswer(\n baseMessages: SageChatMessage[],\n paymentToken?: string,\n fallbackQuestion?: string,\n ) {\n transition(\"streaming\")\n let text = \"\"\n const placeholderMessage: SageChatMessage = { role: \"assistant\", content: \"\" }\n setMessages([...baseMessages, placeholderMessage])\n\n const result = await streamSageChat({\n ...apiOpts,\n messages: baseMessages,\n paymentToken,\n onEvent(event) {\n if (!mountedRef.current) return\n if (event.type === \"tier\") {\n setTier(event.tier)\n props.onTier?.(event.tier)\n emitStatus(\"streaming\", { tier: event.tier, messages: baseMessages })\n }\n if (event.type === \"delta\") {\n text += event.text\n setMessages([...baseMessages, { role: \"assistant\", content: text }])\n }\n },\n })\n\n if (!result.ok) {\n if (result.paymentRequired) {\n const question = fallbackQuestion ?? lastUserQuestion(baseMessages) ?? activeQuestion\n const quote = await fetchSageQuote({\n ...apiOpts,\n question,\n history: baseMessages.slice(0, -1),\n })\n if (!mountedRef.current) return\n props.onQuote?.(quote)\n setQuoteResponse(quote)\n setActiveQuestion(question)\n const intent = quote.quote\n ? createSagePaymentIntent({ ...apiOpts, question, quote: quote.quote })\n : null\n setPaymentIntent(intent)\n if (intent) props.onPaymentIntent?.(intent)\n transition(\"payment_required\", { quote: quote.quote ?? null, paymentIntent: intent })\n return\n }\n throw new Error(result.error ?? \"Sage chat failed.\")\n }\n\n if (!mountedRef.current) return\n if (result.text && result.text !== text) {\n setMessages([...baseMessages, { role: \"assistant\", content: result.text }])\n }\n transition(\"idle\")\n }\n\n function fail(err: unknown, setErrorPhase: boolean = true) {\n const message = err instanceof Error ? err.message : \"Sage request failed.\"\n setError(message)\n if (setErrorPhase) transition(\"error\", { error: message })\n else emitStatus(phase, { error: message })\n props.onError?.(err)\n }\n\n function transition(\n next: SagePaymentPhase,\n overrides: Partial<{\n quote: SageQuoteResponse[\"quote\"] | null\n paymentIntent: SagePaymentIntent | null\n receipt: SageVerifyPaymentResponse | null\n receiptBundle: SageReceiptBundle | null\n error: string | null\n tier: \"free\" | \"premium\" | null\n messages: SageChatMessage[]\n activeQuestion: string | null\n }> = {},\n ) {\n setPhase(next)\n props.onPhase?.(next)\n emitStatus(next, overrides)\n }\n\n function emitStatus(\n nextPhase: SagePaymentPhase,\n overrides: Partial<{\n quote: SageQuoteResponse[\"quote\"] | null\n paymentIntent: SagePaymentIntent | null\n receipt: SageVerifyPaymentResponse | null\n receiptBundle: SageReceiptBundle | null\n error: string | null\n tier: \"free\" | \"premium\" | null\n messages: SageChatMessage[]\n activeQuestion: string | null\n }> = {},\n ) {\n const has = (key: keyof typeof overrides) =>\n Object.prototype.hasOwnProperty.call(overrides, key)\n props.onStatus?.({\n phase: nextPhase,\n tier: has(\"tier\") ? overrides.tier ?? null : tier,\n quote: has(\"quote\") ? overrides.quote ?? null : quoteResponse?.quote ?? null,\n paymentIntent: has(\"paymentIntent\") ? overrides.paymentIntent ?? null : paymentIntent,\n receipt: has(\"receipt\") ? overrides.receipt ?? null : receipt,\n receiptBundle: has(\"receiptBundle\") ? overrides.receiptBundle ?? null : receiptBundle,\n error: has(\"error\") ? overrides.error ?? null : error,\n messages: overrides.messages ?? messages,\n activeQuestion: has(\"activeQuestion\") ? overrides.activeQuestion ?? null : activeQuestion || null,\n })\n }\n\n const quote = quoteResponse?.quote\n const showPaymentPanel = quote && !receipt\n\n async function copyPaymentIntent() {\n if (!paymentIntent) return\n await copyText(serializeSagePaymentIntent(paymentIntent))\n }\n\n async function launchWallet() {\n if (!paymentIntent || !props.walletLauncher || busy) return\n setError(null)\n try {\n const result = await props.walletLauncher(paymentIntent)\n if (result?.ok === false) {\n throw new Error(result.error ?? \"Wallet flow did not produce a Note.\")\n }\n if (result?.noteBoxId) setNoteBoxId(result.noteBoxId)\n } catch (err) {\n fail(err, false)\n }\n }\n\n return (\n <section className={className} style={{ ...rootStyle, ...style }}>\n <header style={headerStyle}>\n <div>\n <div style={eyebrowStyle}>{tenant?.label ?? \"Ergo agent economy\"}</div>\n <h2 style={titleStyle}>{title}</h2>\n </div>\n <span style={badgeStyle}>{tier ? tier.toUpperCase() : \"SAGE\"}</span>\n </header>\n\n <div style={messagesStyle} aria-live=\"polite\">\n {messages.length === 0 ? (\n <div style={emptyStyle}>Free questions answer immediately. Premium questions return an Accord Note quote.</div>\n ) : (\n messages.map((message, index) => (\n <div\n key={`${message.role}-${index}`}\n style={message.role === \"user\" ? userBubbleStyle : assistantBubbleStyle}\n >\n {message.content || (message.role === \"assistant\" && phase === \"streaming\" ? \"Thinking...\" : \"\")}\n </div>\n ))\n )}\n </div>\n\n {showPaymentPanel ? (\n <div style={paymentStyle}>\n <div style={paymentHeaderStyle}>\n <strong>Payment required</strong>\n <span>{quote.price} ERG testnet</span>\n </div>\n <p style={helperStyle}>\n {paymentInstructions?.helperText ??\n \"Issue an Ergo testnet Note for this quote, then paste the created Note box id.\"}\n {paymentInstructions?.walletUrl ? (\n <>\n {\" \"}\n <a href={paymentInstructions.walletUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={inlineLinkStyle}>\n Wallet guide\n </a>\n </>\n ) : null}\n </p>\n <Field label=\"Quote\" value={quote.quoteId} />\n <Field label=\"Receiver\" value={quote.receiverAddress} copy />\n <Field label=\"Reserve box\" value={quote.reserveBoxId} copy />\n <Field label=\"Task hash\" value={quote.taskHash} copy />\n {testnetWarning ? <div style={warningStyle}>{testnetWarning}</div> : null}\n {showPaymentIntent && paymentIntent ? (\n <div style={intentStyle}>\n <div style={intentHeaderStyle}>\n <strong>Payment intent</strong>\n <button type=\"button\" style={copyButtonStyle} onClick={copyPaymentIntent}>\n Copy JSON\n </button>\n </div>\n <code style={intentCodeStyle}>{serializeSagePaymentIntent(paymentIntent)}</code>\n </div>\n ) : null}\n {props.walletLauncher && paymentIntent ? (\n <button\n type=\"button\"\n onClick={launchWallet}\n disabled={busy}\n style={secondaryButtonStyle}\n >\n {paymentInstructions?.walletLauncherLabel ?? \"Open wallet flow\"}\n </button>\n ) : null}\n <label style={labelStyle}>\n {paymentInstructions?.noteBoxLabel ?? \"Note box id\"}\n <input\n value={noteBoxId}\n onChange={(e) => setNoteBoxId(e.currentTarget.value)}\n placeholder=\"Paste 64-char Ergo box id\"\n style={inputStyle}\n disabled={busy}\n />\n </label>\n <button\n type=\"button\"\n onClick={verifyAndContinue}\n disabled={!noteBoxId.trim() || busy}\n style={primaryButtonStyle}\n >\n {phase === \"verifying\" ? \"Verifying...\" : \"Verify payment\"}\n </button>\n </div>\n ) : null}\n\n {receipt ? (\n <div style={receiptPanelStyle}>\n <a href={receipt.receiptUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={receiptStyle}>\n Receipt: {shortId(receipt.receiptId)}\n {receiptBundle ? ` · ${receiptBundle.completeness}` : \"\"}\n </a>\n <a href={receipt.receiptApiUrl} target=\"_blank\" rel=\"noopener noreferrer\" style={receiptApiStyle}>\n machine-readable JSON\n </a>\n </div>\n ) : null}\n\n {error ? <div style={errorStyle}>{error}</div> : null}\n\n <form onSubmit={submit} style={formStyle}>\n <input\n value={input}\n onChange={(e) => setInput(e.currentTarget.value)}\n placeholder={placeholder}\n disabled={busy}\n style={inputStyle}\n />\n <button type=\"submit\" disabled={!input.trim() || busy} style={sendButtonStyle}>\n {phase === \"quoting\" ? \"Quoting...\" : phase === \"streaming\" ? \"Streaming...\" : \"Send\"}\n </button>\n </form>\n </section>\n )\n}\n\nfunction Field({ label, value, copy = false }: { label: string; value: string; copy?: boolean }) {\n return (\n <div style={fieldStyle}>\n <span style={fieldLabelStyle}>{label}</span>\n <code style={fieldValueStyle}>{value}</code>\n {copy ? (\n <button type=\"button\" style={copyButtonStyle} onClick={() => copyText(value)}>\n Copy\n </button>\n ) : null}\n </div>\n )\n}\n\nasync function copyText(value: string): Promise<void> {\n if (typeof navigator !== \"undefined\" && navigator.clipboard) {\n await navigator.clipboard.writeText(value)\n }\n}\n\nfunction shortId(value: string): string {\n return value.length > 18 ? `${value.slice(0, 10)}...${value.slice(-8)}` : value\n}\n\nfunction lastUserQuestion(messages: SageChatMessage[]): string | null {\n for (let i = messages.length - 1; i >= 0; i -= 1) {\n const message = messages[i]\n if (message?.role === \"user\" && message.content.trim()) return message.content.trim()\n }\n return null\n}\n\nconst rootStyle: CSSProperties = {\n background: \"#070707\",\n color: \"#f8fafc\",\n border: \"1px solid rgba(255,255,255,.1)\",\n borderRadius: 8,\n padding: 16,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace\",\n boxSizing: \"border-box\",\n width: \"100%\",\n maxWidth: 520,\n}\n\nconst headerStyle: CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"flex-start\",\n gap: 12,\n marginBottom: 12,\n}\n\nconst eyebrowStyle: CSSProperties = {\n color: \"#fb923c\",\n fontSize: 11,\n letterSpacing: \".16em\",\n textTransform: \"uppercase\",\n marginBottom: 4,\n}\n\nconst titleStyle: CSSProperties = {\n fontSize: 18,\n lineHeight: 1.2,\n margin: 0,\n}\n\nconst badgeStyle: CSSProperties = {\n color: \"#0f172a\",\n background: \"#fdba74\",\n borderRadius: 4,\n padding: \"4px 7px\",\n fontSize: 10,\n fontWeight: 800,\n letterSpacing: \".12em\",\n}\n\nconst messagesStyle: CSSProperties = {\n minHeight: 180,\n maxHeight: 360,\n overflow: \"auto\",\n display: \"flex\",\n flexDirection: \"column\",\n gap: 8,\n padding: \"12px 0\",\n}\n\nconst emptyStyle: CSSProperties = {\n color: \"#94a3b8\",\n border: \"1px dashed rgba(148,163,184,.28)\",\n borderRadius: 6,\n padding: 12,\n fontSize: 13,\n}\n\nconst bubbleBase: CSSProperties = {\n borderRadius: 6,\n padding: \"9px 10px\",\n fontSize: 14,\n lineHeight: 1.45,\n whiteSpace: \"pre-wrap\",\n}\n\nconst userBubbleStyle: CSSProperties = {\n ...bubbleBase,\n alignSelf: \"flex-end\",\n maxWidth: \"88%\",\n background: \"#fb923c\",\n color: \"#111827\",\n}\n\nconst assistantBubbleStyle: CSSProperties = {\n ...bubbleBase,\n alignSelf: \"flex-start\",\n maxWidth: \"92%\",\n background: \"rgba(255,255,255,.07)\",\n color: \"#e5e7eb\",\n}\n\nconst paymentStyle: CSSProperties = {\n border: \"1px solid rgba(251,146,60,.35)\",\n background: \"rgba(251,146,60,.08)\",\n borderRadius: 8,\n padding: 12,\n display: \"grid\",\n gap: 8,\n}\n\nconst paymentHeaderStyle: CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n color: \"#fed7aa\",\n fontSize: 13,\n}\n\nconst helperStyle: CSSProperties = {\n color: \"#fdba74\",\n fontSize: 12,\n lineHeight: 1.45,\n margin: 0,\n}\n\nconst inlineLinkStyle: CSSProperties = {\n color: \"#67e8f9\",\n textDecoration: \"none\",\n}\n\nconst labelStyle: CSSProperties = {\n display: \"grid\",\n gap: 6,\n color: \"#cbd5e1\",\n fontSize: 12,\n}\n\nconst fieldStyle: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"minmax(70px, 88px) minmax(0, 1fr) auto\",\n alignItems: \"center\",\n gap: 8,\n fontSize: 12,\n}\n\nconst fieldLabelStyle: CSSProperties = {\n color: \"#94a3b8\",\n}\n\nconst fieldValueStyle: CSSProperties = {\n color: \"#f8fafc\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n fontSize: 11,\n}\n\nconst copyButtonStyle: CSSProperties = {\n border: \"1px solid rgba(255,255,255,.16)\",\n background: \"rgba(255,255,255,.06)\",\n color: \"#f8fafc\",\n borderRadius: 4,\n padding: \"4px 7px\",\n cursor: \"pointer\",\n}\n\nconst formStyle: CSSProperties = {\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr) auto\",\n gap: 8,\n marginTop: 12,\n}\n\nconst inputStyle: CSSProperties = {\n width: \"100%\",\n boxSizing: \"border-box\",\n border: \"1px solid rgba(255,255,255,.16)\",\n background: \"#050505\",\n color: \"#f8fafc\",\n borderRadius: 6,\n padding: \"10px 11px\",\n fontSize: 14,\n}\n\nconst sendButtonStyle: CSSProperties = {\n border: 0,\n background: \"#fb923c\",\n color: \"#111827\",\n borderRadius: 6,\n padding: \"0 14px\",\n fontWeight: 800,\n cursor: \"pointer\",\n}\n\nconst primaryButtonStyle: CSSProperties = {\n ...sendButtonStyle,\n padding: \"10px 12px\",\n}\n\nconst secondaryButtonStyle: CSSProperties = {\n border: \"1px solid rgba(103,232,249,.28)\",\n background: \"rgba(103,232,249,.08)\",\n color: \"#cffafe\",\n borderRadius: 6,\n padding: \"10px 12px\",\n fontWeight: 800,\n cursor: \"pointer\",\n}\n\nconst warningStyle: CSSProperties = {\n color: \"#fde68a\",\n background: \"rgba(245,158,11,.1)\",\n border: \"1px solid rgba(245,158,11,.24)\",\n borderRadius: 6,\n padding: \"8px 9px\",\n fontSize: 12,\n lineHeight: 1.45,\n}\n\nconst intentStyle: CSSProperties = {\n border: \"1px solid rgba(255,255,255,.12)\",\n background: \"rgba(255,255,255,.04)\",\n borderRadius: 6,\n padding: 10,\n display: \"grid\",\n gap: 8,\n}\n\nconst intentHeaderStyle: CSSProperties = {\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n gap: 8,\n color: \"#e2e8f0\",\n fontSize: 12,\n}\n\nconst intentCodeStyle: CSSProperties = {\n display: \"block\",\n maxHeight: 130,\n overflow: \"auto\",\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n color: \"#cbd5e1\",\n fontSize: 10,\n lineHeight: 1.45,\n}\n\nconst receiptStyle: CSSProperties = {\n display: \"inline-flex\",\n color: \"#67e8f9\",\n fontSize: 13,\n textDecoration: \"none\",\n}\n\nconst receiptPanelStyle: CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n flexWrap: \"wrap\",\n gap: 10,\n marginTop: 10,\n border: \"1px solid rgba(103,232,249,.22)\",\n background: \"rgba(103,232,249,.07)\",\n borderRadius: 6,\n padding: \"9px 10px\",\n}\n\nconst receiptApiStyle: CSSProperties = {\n color: \"#cbd5e1\",\n fontSize: 12,\n textDecoration: \"none\",\n}\n\nconst errorStyle: CSSProperties = {\n color: \"#fecaca\",\n background: \"rgba(239,68,68,.12)\",\n border: \"1px solid rgba(239,68,68,.25)\",\n borderRadius: 6,\n padding: 10,\n marginTop: 10,\n fontSize: 13,\n}\n"]}
@@ -83,6 +83,7 @@ interface SageTenantConfig {
83
83
  /** Extra headers attached to Sage API requests. */
84
84
  headers?: Record<string, string>;
85
85
  }
86
+ type SagePaymentNetwork = "ergo-testnet" | "ergo-mainnet";
86
87
  interface SageQuote {
87
88
  quoteId: string;
88
89
  taskHash: string;
@@ -100,6 +101,31 @@ interface SageQuoteResponse {
100
101
  rationale?: string;
101
102
  quote?: SageQuote;
102
103
  }
104
+ interface SagePaymentIntent {
105
+ type: "sage.payment_intent.v1";
106
+ network: SagePaymentNetwork;
107
+ createdAt: string;
108
+ question: string;
109
+ tenant?: Pick<SageTenantConfig, "id" | "label">;
110
+ quote: SageQuote;
111
+ amountErg: string;
112
+ receiverAddress: string;
113
+ reserveBoxId: string;
114
+ taskHash: string;
115
+ expiresAt: string;
116
+ deadline: `+${number} blocks`;
117
+ verifyEndpoint: string;
118
+ receiptEndpointTemplate: string;
119
+ }
120
+ interface SageWalletLaunchResult {
121
+ ok: boolean;
122
+ /** Note box id produced by a host wallet flow. If present, the widget can prefill verification. */
123
+ noteBoxId?: string;
124
+ /** Optional transaction id for host telemetry. Sage verifies by Note box id, not by tx id. */
125
+ txId?: string;
126
+ error?: string;
127
+ }
128
+ type SageWalletLauncher = (intent: SagePaymentIntent) => Promise<SageWalletLaunchResult | void> | SageWalletLaunchResult | void;
103
129
  interface SageVerifyPaymentResponse {
104
130
  ok: true;
105
131
  paymentToken: string;
@@ -184,10 +210,27 @@ interface SagePaymentWidgetOptions {
184
210
  title?: string;
185
211
  /** Optional host-specific payment copy and links. */
186
212
  paymentInstructions?: SagePaymentInstructions;
213
+ /**
214
+ * Optional wallet launcher supplied by the host app. The package does not
215
+ * sign transactions itself; this callback receives a structured intent that
216
+ * your wallet layer can transform into a testnet Note.
217
+ */
218
+ walletLauncher?: SageWalletLauncher;
219
+ /**
220
+ * Show the portable payment intent JSON in the default UI. Default: true.
221
+ * Hosts with a fully custom wallet flow can set this to false.
222
+ */
223
+ showPaymentIntent?: boolean;
224
+ /**
225
+ * Testnet safety copy for the default widget. Set to false to hide.
226
+ */
227
+ testnetWarning?: string | false;
187
228
  /** Called whenever a message is appended by the widget. */
188
229
  onMessage?: (message: SageChatMessage, messages: SageChatMessage[]) => void;
189
230
  /** Called after Sage returns a premium quote. */
190
231
  onQuote?: (quote: SageQuoteResponse) => void;
232
+ /** Called when a structured payment intent is produced for the active quote. */
233
+ onPaymentIntent?: (intent: SagePaymentIntent) => void;
191
234
  /** Called after a payment verifies and Sage returns a receipt link. */
192
235
  onReceipt?: (receipt: SageVerifyPaymentResponse) => void;
193
236
  /** Called after the widget fetches the full machine-readable receipt bundle. */
@@ -207,6 +250,8 @@ interface SagePaymentInstructions {
207
250
  helperText?: string;
208
251
  /** Optional link to host payment/wallet instructions. */
209
252
  walletUrl?: string;
253
+ /** Custom label for the wallet launcher button. */
254
+ walletLauncherLabel?: string;
210
255
  /** Optional custom label for the Note box input. */
211
256
  noteBoxLabel?: string;
212
257
  }
@@ -214,6 +259,7 @@ interface SagePaymentWidgetStatus {
214
259
  phase: SagePaymentPhase;
215
260
  tier: SageChatTier | null;
216
261
  quote: SageQuoteResponse["quote"] | null;
262
+ paymentIntent: SagePaymentIntent | null;
217
263
  receipt: SageVerifyPaymentResponse | null;
218
264
  receiptBundle: SageReceiptBundle | null;
219
265
  error: string | null;
@@ -226,4 +272,4 @@ declare const DEFAULT_API_BASE = "https://www.ergoblockchain.org";
226
272
  declare const DEFAULT_LIMIT = 5;
227
273
  declare const DEFAULT_REFRESH_MS = 60000;
228
274
 
229
- export { DEFAULT_API_BASE as D, type SageActivityEvent as S, DEFAULT_LIMIT as a, DEFAULT_REFRESH_MS as b, type SageActivityResponse as c, type SageActivityType as d, type SageChatMessage as e, type SageChatRole as f, type SageChatStreamEvent as g, type SageChatStreamResult as h, type SageChatTier as i, type SagePaymentInstructions as j, type SagePaymentPhase as k, type SagePaymentWidgetOptions as l, type SagePaymentWidgetStatus as m, type SagePremiumPaymentRequired as n, type SagePremiumReason as o, type SageQuote as p, type SageQuoteResponse as q, type SageReceiptBundle as r, type SageTenantConfig as s, type SageVerifyPaymentResponse as t, type SageWidgetOptions as u };
275
+ export { DEFAULT_API_BASE as D, type SageActivityEvent as S, DEFAULT_LIMIT as a, DEFAULT_REFRESH_MS as b, type SageActivityResponse as c, type SageActivityType as d, type SageChatMessage as e, type SageChatRole as f, type SageChatStreamEvent as g, type SageChatStreamResult as h, type SageChatTier as i, type SagePaymentInstructions as j, type SagePaymentIntent as k, type SagePaymentNetwork as l, type SagePaymentPhase as m, type SagePaymentWidgetOptions as n, type SagePaymentWidgetStatus as o, type SagePremiumPaymentRequired as p, type SagePremiumReason as q, type SageQuote as r, type SageQuoteResponse as s, type SageReceiptBundle as t, type SageTenantConfig as u, type SageVerifyPaymentResponse as v, type SageWalletLaunchResult as w, type SageWalletLauncher as x, type SageWidgetOptions as y };
@@ -83,6 +83,7 @@ interface SageTenantConfig {
83
83
  /** Extra headers attached to Sage API requests. */
84
84
  headers?: Record<string, string>;
85
85
  }
86
+ type SagePaymentNetwork = "ergo-testnet" | "ergo-mainnet";
86
87
  interface SageQuote {
87
88
  quoteId: string;
88
89
  taskHash: string;
@@ -100,6 +101,31 @@ interface SageQuoteResponse {
100
101
  rationale?: string;
101
102
  quote?: SageQuote;
102
103
  }
104
+ interface SagePaymentIntent {
105
+ type: "sage.payment_intent.v1";
106
+ network: SagePaymentNetwork;
107
+ createdAt: string;
108
+ question: string;
109
+ tenant?: Pick<SageTenantConfig, "id" | "label">;
110
+ quote: SageQuote;
111
+ amountErg: string;
112
+ receiverAddress: string;
113
+ reserveBoxId: string;
114
+ taskHash: string;
115
+ expiresAt: string;
116
+ deadline: `+${number} blocks`;
117
+ verifyEndpoint: string;
118
+ receiptEndpointTemplate: string;
119
+ }
120
+ interface SageWalletLaunchResult {
121
+ ok: boolean;
122
+ /** Note box id produced by a host wallet flow. If present, the widget can prefill verification. */
123
+ noteBoxId?: string;
124
+ /** Optional transaction id for host telemetry. Sage verifies by Note box id, not by tx id. */
125
+ txId?: string;
126
+ error?: string;
127
+ }
128
+ type SageWalletLauncher = (intent: SagePaymentIntent) => Promise<SageWalletLaunchResult | void> | SageWalletLaunchResult | void;
103
129
  interface SageVerifyPaymentResponse {
104
130
  ok: true;
105
131
  paymentToken: string;
@@ -184,10 +210,27 @@ interface SagePaymentWidgetOptions {
184
210
  title?: string;
185
211
  /** Optional host-specific payment copy and links. */
186
212
  paymentInstructions?: SagePaymentInstructions;
213
+ /**
214
+ * Optional wallet launcher supplied by the host app. The package does not
215
+ * sign transactions itself; this callback receives a structured intent that
216
+ * your wallet layer can transform into a testnet Note.
217
+ */
218
+ walletLauncher?: SageWalletLauncher;
219
+ /**
220
+ * Show the portable payment intent JSON in the default UI. Default: true.
221
+ * Hosts with a fully custom wallet flow can set this to false.
222
+ */
223
+ showPaymentIntent?: boolean;
224
+ /**
225
+ * Testnet safety copy for the default widget. Set to false to hide.
226
+ */
227
+ testnetWarning?: string | false;
187
228
  /** Called whenever a message is appended by the widget. */
188
229
  onMessage?: (message: SageChatMessage, messages: SageChatMessage[]) => void;
189
230
  /** Called after Sage returns a premium quote. */
190
231
  onQuote?: (quote: SageQuoteResponse) => void;
232
+ /** Called when a structured payment intent is produced for the active quote. */
233
+ onPaymentIntent?: (intent: SagePaymentIntent) => void;
191
234
  /** Called after a payment verifies and Sage returns a receipt link. */
192
235
  onReceipt?: (receipt: SageVerifyPaymentResponse) => void;
193
236
  /** Called after the widget fetches the full machine-readable receipt bundle. */
@@ -207,6 +250,8 @@ interface SagePaymentInstructions {
207
250
  helperText?: string;
208
251
  /** Optional link to host payment/wallet instructions. */
209
252
  walletUrl?: string;
253
+ /** Custom label for the wallet launcher button. */
254
+ walletLauncherLabel?: string;
210
255
  /** Optional custom label for the Note box input. */
211
256
  noteBoxLabel?: string;
212
257
  }
@@ -214,6 +259,7 @@ interface SagePaymentWidgetStatus {
214
259
  phase: SagePaymentPhase;
215
260
  tier: SageChatTier | null;
216
261
  quote: SageQuoteResponse["quote"] | null;
262
+ paymentIntent: SagePaymentIntent | null;
217
263
  receipt: SageVerifyPaymentResponse | null;
218
264
  receiptBundle: SageReceiptBundle | null;
219
265
  error: string | null;
@@ -226,4 +272,4 @@ declare const DEFAULT_API_BASE = "https://www.ergoblockchain.org";
226
272
  declare const DEFAULT_LIMIT = 5;
227
273
  declare const DEFAULT_REFRESH_MS = 60000;
228
274
 
229
- export { DEFAULT_API_BASE as D, type SageActivityEvent as S, DEFAULT_LIMIT as a, DEFAULT_REFRESH_MS as b, type SageActivityResponse as c, type SageActivityType as d, type SageChatMessage as e, type SageChatRole as f, type SageChatStreamEvent as g, type SageChatStreamResult as h, type SageChatTier as i, type SagePaymentInstructions as j, type SagePaymentPhase as k, type SagePaymentWidgetOptions as l, type SagePaymentWidgetStatus as m, type SagePremiumPaymentRequired as n, type SagePremiumReason as o, type SageQuote as p, type SageQuoteResponse as q, type SageReceiptBundle as r, type SageTenantConfig as s, type SageVerifyPaymentResponse as t, type SageWidgetOptions as u };
275
+ export { DEFAULT_API_BASE as D, type SageActivityEvent as S, DEFAULT_LIMIT as a, DEFAULT_REFRESH_MS as b, type SageActivityResponse as c, type SageActivityType as d, type SageChatMessage as e, type SageChatRole as f, type SageChatStreamEvent as g, type SageChatStreamResult as h, type SageChatTier as i, type SagePaymentInstructions as j, type SagePaymentIntent as k, type SagePaymentNetwork as l, type SagePaymentPhase as m, type SagePaymentWidgetOptions as n, type SagePaymentWidgetStatus as o, type SagePremiumPaymentRequired as p, type SagePremiumReason as q, type SageQuote as r, type SageQuoteResponse as s, type SageReceiptBundle as t, type SageTenantConfig as u, type SageVerifyPaymentResponse as v, type SageWalletLaunchResult as w, type SageWalletLauncher as x, type SageWidgetOptions as y };