@goodz-core/sdk 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ui/form-factors.ts","../src/ui/GoodZCardFocus.tsx"],"names":[],"mappings":"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","file":"chunk-K6IFJWLB.js","sourcesContent":["/**\n * Form Factor Standards — self-contained within SDK.\n * Mirrors GoodZ.Core's shared/formFactors.ts but with zero external dependencies.\n */\n\nexport type FormFactorKey =\n | \"trading_card\"\n | \"postcard\"\n | \"postcard_portrait\"\n | \"polaroid\"\n | \"laser_ticket\"\n | \"badge_small\"\n | \"badge_medium\"\n | \"badge_large\"\n | \"acrylic_stand_tall\"\n | \"acrylic_stand_chibi\";\n\nexport interface FormFactorSpec {\n key: FormFactorKey;\n label: string;\n aspectRatio: [number, number];\n isCircle: boolean;\n isTransparent?: boolean;\n}\n\nconst FORM_FACTORS: Record<FormFactorKey, FormFactorSpec> = {\n trading_card: { key: \"trading_card\", label: \"Trading Card\", aspectRatio: [5, 7], isCircle: false },\n postcard: { key: \"postcard\", label: \"Postcard\", aspectRatio: [3, 2], isCircle: false },\n postcard_portrait: { key: \"postcard_portrait\", label: \"Postcard (Portrait)\", aspectRatio: [2, 3], isCircle: false },\n polaroid: { key: \"polaroid\", label: \"Polaroid\", aspectRatio: [3, 4], isCircle: false },\n laser_ticket: { key: \"laser_ticket\", label: \"Laser Ticket\", aspectRatio: [5, 2], isCircle: false },\n badge_small: { key: \"badge_small\", label: \"Badge S\", aspectRatio: [1, 1], isCircle: true },\n badge_medium: { key: \"badge_medium\", label: \"Badge M\", aspectRatio: [1, 1], isCircle: true },\n badge_large: { key: \"badge_large\", label: \"Badge L\", aspectRatio: [1, 1], isCircle: true },\n acrylic_stand_tall: { key: \"acrylic_stand_tall\", label: \"Transparent Card\", aspectRatio: [5, 7], isCircle: false, isTransparent: true },\n acrylic_stand_chibi: { key: \"acrylic_stand_chibi\", label: \"Transparent Card (Chibi)\", aspectRatio: [3, 4], isCircle: false, isTransparent: true },\n};\n\nexport function getFormFactorSpec(key: string): FormFactorSpec | undefined {\n return (FORM_FACTORS as Record<string, FormFactorSpec>)[key];\n}\n\nexport function getAspectRatioCSS(key: string): string {\n const spec = getFormFactorSpec(key);\n if (!spec) return \"5 / 7\";\n return `${spec.aspectRatio[0]} / ${spec.aspectRatio[1]}`;\n}\n\nexport { FORM_FACTORS };\n","/**\n * GoodZCardFocus — \"Tap to Focus, Then Tilt\" interaction pattern.\n *\n * Extracted from GoodZ.Core's CardFocusModal for use in third-party apps.\n * Self-contained: no external dependencies beyond React 18+.\n *\n * Industry best practice (Marvel Snap, Pokemon TCG Pocket):\n * Browse mode: card in page, normal scroll, subtle hover effect\n * Focus mode: tap card → enlarge to center, dark overlay, scroll locked\n * Desktop: mouse position controls tilt\n * Mobile: gyroscope (DeviceOrientation) controls tilt\n * Fallback: touch drag on card controls tilt (delta-based)\n *\n * Exit: click anywhere (overlay or card) / press ESC / close button\n *\n * Material effects by formFactor:\n * - trading_card: holographic gradient + sparkle\n * - postcard: paper texture + subtle shadow\n * - polaroid: white border (thick bottom) + paper texture + slight curl\n * - laser_ticket: intense rainbow holographic + shimmer animation\n * - badge_*: circular clip + metal frame + dome highlight\n * - acrylic_stand_*: bare subject outline (bg-removed PNG), subtle drop shadow only\n *\n * @packageDocumentation\n */\n\nimport {\n useRef,\n useState,\n useEffect,\n useCallback,\n type ReactNode,\n type CSSProperties,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { getAspectRatioCSS, type FormFactorKey } from \"./form-factors\";\n\n// ── Types ──────────────────────────────────────────────────────\n\ntype HoloTier = \"none\" | \"subtle\" | \"holo\" | \"rainbow\";\n\nexport interface GoodZCardFocusProps {\n /** Content to render as the clickable trigger (typically a card thumbnail) */\n children: ReactNode;\n /** URL of the GoodZ image (original artwork or shell image) */\n imageUrl?: string | null;\n /** Display name of the GoodZ */\n cardName?: string;\n /** Rarity tier (e.g., \"R\", \"SR\", \"SSR\", \"UR\") — controls holographic intensity */\n rarity?: string | null;\n /** Form factor key — controls material effect and aspect ratio */\n formFactor?: FormFactorKey | string;\n /** Additional CSS class for the trigger wrapper */\n className?: string;\n /** Disable the focus modal (click-through) */\n disabled?: boolean;\n}\n\n// ── Rarity → Holo Tier ────────────────────────────────────────\n\nfunction getHoloTier(rarity?: string | null): HoloTier {\n if (!rarity) return \"subtle\";\n const r = rarity.toUpperCase();\n if ([\"UR\", \"SECRET\", \"RAINBOW\", \"GOLD\", \"PRISMATIC\"].some((k) => r.includes(k))) return \"rainbow\";\n if ([\"SSR\", \"SR\", \"RARE\", \"HOLO\", \"LEGENDARY\", \"MYTHIC\"].some((k) => r.includes(k))) return \"holo\";\n return \"subtle\";\n}\n\n// ── Holo gradient by tier ─────────────────────────────────────\n\nfunction getHoloGradient(tier: HoloTier, angle: number): string {\n switch (tier) {\n case \"subtle\":\n return `linear-gradient(${angle}deg, transparent 0%, rgba(255,255,255,0.06) 30%, rgba(255,255,255,0.14) 50%, rgba(255,255,255,0.06) 70%, transparent 100%)`;\n case \"holo\":\n return `linear-gradient(${angle}deg, transparent 0%, rgba(120,200,255,0.1) 15%, rgba(255,180,120,0.12) 30%, rgba(180,120,255,0.15) 50%, rgba(120,255,200,0.12) 70%, rgba(255,120,180,0.1) 85%, transparent 100%)`;\n case \"rainbow\":\n return `linear-gradient(${angle}deg, rgba(255,0,0,0.1) 0%, rgba(255,165,0,0.12) 14%, rgba(255,255,0,0.12) 28%, rgba(0,255,0,0.12) 42%, rgba(0,127,255,0.15) 56%, rgba(75,0,130,0.12) 70%, rgba(148,0,211,0.12) 84%, rgba(255,0,0,0.1) 100%)`;\n default:\n return \"none\";\n }\n}\n\n// ── Form factor helpers ───────────────────────────────────────\n\nfunction isBadge(ff?: string): boolean {\n return ff === \"badge_small\" || ff === \"badge_medium\" || ff === \"badge_large\";\n}\nfunction isAcrylic(ff?: string): boolean {\n return ff === \"acrylic_stand_tall\" || ff === \"acrylic_stand_chibi\";\n}\nfunction isPolaroid(ff?: string): boolean { return ff === \"polaroid\"; }\nfunction isLaserTicket(ff?: string): boolean { return ff === \"laser_ticket\"; }\nfunction isPostcard(ff?: string): boolean { return ff === \"postcard\" || ff === \"postcard_portrait\"; }\n\n// ── Mobile detection ─────────────────────────────────────────\n\nfunction isMobileDevice(): boolean {\n return typeof window !== \"undefined\" && (\n \"ontouchstart\" in window ||\n navigator.maxTouchPoints > 0 ||\n /Android|iPhone|iPad|iPod/i.test(navigator.userAgent)\n );\n}\n\n// ── Material-specific style generators ────────────────────────\n\nfunction getBadgeContainerStyle(): CSSProperties {\n return {\n borderRadius: \"50%\",\n overflow: \"hidden\",\n boxShadow: [\n \"0 0 0 4px rgba(180,180,200,0.8)\",\n \"0 0 0 6px rgba(120,120,140,0.6)\",\n \"inset 0 -4px 12px rgba(0,0,0,0.25)\",\n \"inset 0 4px 8px rgba(255,255,255,0.2)\",\n \"0 8px 24px rgba(0,0,0,0.4)\",\n ].join(\", \"),\n };\n}\n\nfunction getBadgeOverlayStyle(tiltX: number, tiltY: number): CSSProperties {\n const px = 50 + tiltY * 2;\n const py = 40 - tiltX * 1.5;\n return {\n background: `radial-gradient(ellipse at ${px}% ${py}%, rgba(255,255,255,0.35) 0%, rgba(255,255,255,0.08) 40%, transparent 70%)`,\n borderRadius: \"50%\",\n mixBlendMode: \"overlay\" as const,\n };\n}\n\nfunction getPolaroidContainerStyle(): CSSProperties {\n return {\n padding: \"10px 10px 40px 10px\",\n backgroundColor: \"#fafaf8\",\n borderRadius: \"2px\",\n boxShadow: [\n \"0 2px 8px rgba(0,0,0,0.15)\",\n \"0 8px 24px rgba(0,0,0,0.1)\",\n \"2px 4px 6px rgba(0,0,0,0.08)\",\n ].join(\", \"),\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.03'/%3E%3C/svg%3E\")`,\n };\n}\n\nfunction getLaserTicketOverlayStyle(angle: number): CSSProperties {\n return {\n background: `linear-gradient(${angle}deg, \n rgba(255,0,0,0.15) 0%, rgba(255,165,0,0.18) 10%, rgba(255,255,0,0.18) 20%, \n rgba(0,255,0,0.18) 30%, rgba(0,200,255,0.2) 40%, rgba(0,100,255,0.2) 50%, \n rgba(75,0,130,0.18) 60%, rgba(148,0,211,0.18) 70%, rgba(255,0,100,0.15) 80%, \n rgba(255,100,0,0.15) 90%, rgba(255,0,0,0.15) 100%)`,\n mixBlendMode: \"color-dodge\" as const,\n animation: \"goodz-laser-shimmer 3s linear infinite\",\n };\n}\n\nfunction getAcrylicContainerStyle(): CSSProperties {\n return {\n borderRadius: \"16px\",\n overflow: \"visible\",\n boxShadow: [\n \"inset 0 0 0 1px rgba(255,255,255,0.12)\",\n \"inset 0 1px 0 0 rgba(255,255,255,0.2)\",\n \"0 4px 8px -2px rgba(0,0,0,0.3)\",\n \"0 12px 24px -4px rgba(0,0,0,0.4)\",\n \"0 25px 50px -12px rgba(0,0,0,0.5)\",\n ].join(\", \"),\n background: \"linear-gradient(180deg, rgba(255,255,255,0.06) 0%, rgba(255,255,255,0.02) 100%)\",\n };\n}\n\nfunction getAcrylicOverlayStyle(tiltX: number, tiltY: number): CSSProperties {\n const px = 50 + tiltY * 1.5;\n const py = 30 - tiltX * 1.5;\n const edgePx = 50 - tiltY * 3;\n const edgePy = 50 + tiltX * 3;\n return {\n background: [\n `radial-gradient(ellipse at ${px}% ${py}%, rgba(255,255,255,0.2) 0%, transparent 50%)`,\n `radial-gradient(ellipse at ${edgePx}% ${edgePy}%, rgba(200,220,255,0.08) 0%, transparent 40%)`,\n `linear-gradient(${(Math.atan2(tiltY, tiltX) * 180 / Math.PI + 360) % 360}deg, transparent 30%, rgba(255,200,200,0.04) 40%, rgba(200,255,200,0.04) 50%, rgba(200,200,255,0.04) 60%, transparent 70%)`,\n ].join(\", \"),\n mixBlendMode: \"screen\" as const,\n borderRadius: \"16px\",\n boxShadow: \"inset 0 0 0 1px rgba(255,255,255,0.08)\",\n };\n}\n\nfunction getPostcardOverlayStyle(): CSSProperties {\n return {\n backgroundImage: `url(\"data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.7' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.04'/%3E%3C/svg%3E\")`,\n mixBlendMode: \"multiply\" as const,\n };\n}\n\n// ── CSS Keyframes (injected once) ─────────────────────────────\n\nconst KEYFRAMES_ID = \"__goodz-card-focus-keyframes__\";\n\nfunction injectKeyframes() {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(KEYFRAMES_ID)) return;\n const style = document.createElement(\"style\");\n style.id = KEYFRAMES_ID;\n style.textContent = `\n @keyframes goodz-focus-shimmer {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(100%); }\n }\n @keyframes goodz-focus-pulse {\n 0%, 100% { opacity: 0.4; }\n 50% { opacity: 1; }\n }\n @keyframes goodz-laser-shimmer {\n 0% { filter: hue-rotate(0deg) brightness(1); }\n 50% { filter: hue-rotate(30deg) brightness(1.1); }\n 100% { filter: hue-rotate(0deg) brightness(1); }\n }\n `;\n document.head.appendChild(style);\n}\n\n// ── Main Component ────────────────────────────────────────────\n\n/**\n * GoodZCardFocus — wraps any content as a clickable trigger that opens\n * a full-screen focus modal with holographic tilt effects.\n *\n * @example\n * ```tsx\n * import { GoodZCardFocus } from \"@goodz-core/sdk/ui\";\n *\n * <GoodZCardFocus\n * imageUrl=\"https://goodzcore.manus.space/api/shell/42.png\"\n * cardName=\"Luna\"\n * rarity=\"SSR\"\n * formFactor=\"trading_card\"\n * >\n * <img src={thumbnailUrl} alt=\"Luna\" />\n * </GoodZCardFocus>\n * ```\n */\nexport function GoodZCardFocus({\n children,\n imageUrl,\n cardName = \"GoodZ\",\n rarity,\n formFactor,\n className = \"\",\n disabled = false,\n}: GoodZCardFocusProps) {\n const [isOpen, setIsOpen] = useState(false);\n const [isClosing, setIsClosing] = useState(false);\n\n const handleOpen = useCallback(() => {\n if (!disabled) {\n setIsClosing(false);\n setIsOpen(true);\n }\n }, [disabled]);\n\n const handleClose = useCallback(() => {\n setIsClosing(true);\n }, []);\n\n const handleExitDone = useCallback(() => {\n setIsOpen(false);\n setIsClosing(false);\n }, []);\n\n return (\n <>\n <div\n className={className || undefined}\n style={{\n cursor: disabled ? \"default\" : \"pointer\",\n transition: \"transform 0.3s\",\n ...(!className ? {} : {}),\n }}\n onClick={handleOpen}\n role=\"button\"\n tabIndex={0}\n onKeyDown={(e) => { if (e.key === \"Enter\" || e.key === \" \") handleOpen(); }}\n aria-label={`View ${cardName} in detail`}\n >\n {children}\n </div>\n\n {isOpen && createPortal(\n <FocusOverlay\n imageUrl={imageUrl}\n cardName={cardName}\n rarity={rarity}\n formFactor={formFactor}\n onClose={handleClose}\n closing={isClosing}\n onExitDone={handleExitDone}\n />,\n document.body,\n )}\n </>\n );\n}\n\n// ── Focus Overlay (the modal) ─────────────────────────────────\n\ninterface FocusOverlayProps {\n imageUrl?: string | null;\n cardName: string;\n rarity?: string | null;\n formFactor?: FormFactorKey | string;\n onClose: () => void;\n closing?: boolean;\n onExitDone?: () => void;\n}\n\nfunction FocusOverlay({ imageUrl, cardName, rarity, formFactor, onClose, closing, onExitDone }: FocusOverlayProps) {\n const overlayRef = useRef<HTMLDivElement>(null);\n const cardRef = useRef<HTMLDivElement>(null);\n const holoRef = useRef<HTMLDivElement>(null);\n const sparkleRef = useRef<HTMLDivElement>(null);\n const materialRef = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [imageLoaded, setImageLoaded] = useState(false);\n const [gyroStatus, setGyroStatus] = useState<\"checking\" | \"available\" | \"unavailable\" | \"needs-permission\">(\"checking\");\n const [useGyro, setUseGyro] = useState(true);\n const [showHint, setShowHint] = useState(true);\n const tier = getHoloTier(rarity);\n const isMobile = useRef(isMobileDevice()).current;\n\n const tiltRef = useRef({ x: 0, y: 0 });\n const targetTiltRef = useRef({ x: 0, y: 0 });\n const gyroListenerRef = useRef<((e: DeviceOrientationEvent) => void) | null>(null);\n const touchStartRef = useRef<{ x: number; y: number } | null>(null);\n const lerpRafRef = useRef<number | null>(null);\n const rafRef = useRef<number | null>(null);\n const entryDoneRef = useRef(false);\n const lerpActiveRef = useRef(false);\n\n const ff = formFactor || \"trading_card\";\n const useBadgeMaterial = isBadge(ff);\n const useAcrylicMaterial = isAcrylic(ff);\n const usePolaroidMaterial = isPolaroid(ff);\n const useLaserMaterial = isLaserTicket(ff);\n const usePostcardMaterial = isPostcard(ff);\n const useDefaultHolo = !useBadgeMaterial && !useAcrylicMaterial && !usePolaroidMaterial && !useLaserMaterial && !usePostcardMaterial;\n\n // Inject keyframes on mount\n useEffect(() => { injectKeyframes(); }, []);\n\n // ── Enter animation + scroll lock ──\n useEffect(() => {\n const scrollY = window.scrollY;\n const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth;\n\n const prevOverflow = document.body.style.overflow;\n const prevPosition = document.body.style.position;\n const prevTop = document.body.style.top;\n const prevWidth = document.body.style.width;\n const prevPaddingRight = document.body.style.paddingRight;\n\n document.body.style.overflow = \"hidden\";\n document.body.style.position = \"fixed\";\n document.body.style.top = `-${scrollY}px`;\n document.body.style.width = \"100%\";\n if (scrollbarWidth > 0) {\n document.body.style.paddingRight = `${scrollbarWidth}px`;\n }\n\n setVisible(true);\n const hintTimer = setTimeout(() => setShowHint(false), 3000);\n\n const entryTimer = setTimeout(() => {\n entryDoneRef.current = true;\n if (cardRef.current) {\n cardRef.current.style.transition = \"none\";\n }\n }, 500);\n\n return () => {\n document.body.style.overflow = prevOverflow;\n document.body.style.position = prevPosition;\n document.body.style.top = prevTop;\n document.body.style.width = prevWidth;\n document.body.style.paddingRight = prevPaddingRight;\n window.scrollTo(0, scrollY);\n clearTimeout(hintTimer);\n clearTimeout(entryTimer);\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n };\n }, []);\n\n // ── Exit animation ──\n useEffect(() => {\n if (!closing) return;\n\n setVisible(false);\n\n if (holoRef.current) {\n holoRef.current.style.transition = \"opacity 0.08s ease\";\n holoRef.current.style.opacity = \"0\";\n }\n if (sparkleRef.current) {\n sparkleRef.current.style.transition = \"opacity 0.08s ease\";\n sparkleRef.current.style.opacity = \"0\";\n }\n if (materialRef.current) {\n materialRef.current.style.transition = \"opacity 0.08s ease\";\n materialRef.current.style.opacity = \"0\";\n }\n\n const cardTimer = setTimeout(() => {\n if (cardRef.current) {\n cardRef.current.style.transition = \"opacity 0.2s ease, transform 0.25s cubic-bezier(.4,0,.2,1)\";\n cardRef.current.style.opacity = \"0\";\n cardRef.current.style.transform = \"perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.85)\";\n }\n }, 80);\n\n const bgTimer = setTimeout(() => {\n if (overlayRef.current) {\n overlayRef.current.style.transition = \"background-color 0.25s ease, backdrop-filter 0.25s ease, -webkit-backdrop-filter 0.25s ease\";\n overlayRef.current.style.backgroundColor = \"rgba(0,0,0,0)\";\n overlayRef.current.style.backdropFilter = \"blur(0px)\";\n (overlayRef.current.style as any).WebkitBackdropFilter = \"blur(0px)\";\n }\n }, 120);\n\n const exitTimer = setTimeout(() => {\n onExitDone?.();\n }, 400);\n return () => {\n clearTimeout(cardTimer);\n clearTimeout(bgTimer);\n clearTimeout(exitTimer);\n };\n }, [closing, onExitDone]);\n\n // ── Block touch scrolling on overlay ──\n useEffect(() => {\n const overlay = overlayRef.current;\n if (!overlay) return;\n const preventScroll = (e: TouchEvent) => {\n const target = e.target as HTMLElement;\n if (target === overlay || target.closest(\"[data-overlay-bg]\")) {\n e.preventDefault();\n }\n };\n overlay.addEventListener(\"touchmove\", preventScroll, { passive: false });\n return () => {\n overlay.removeEventListener(\"touchmove\", preventScroll);\n };\n }, []);\n\n // ── ESC to close ──\n useEffect(() => {\n const handler = (e: KeyboardEvent) => { if (e.key === \"Escape\") onClose(); };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [onClose]);\n\n // ── Update material-specific overlay ──\n const updateMaterialOverlay = useCallback((tiltX: number, tiltY: number) => {\n if (!materialRef.current) return;\n if (useBadgeMaterial) {\n materialRef.current.style.background = getBadgeOverlayStyle(tiltX, tiltY).background as string;\n } else if (useAcrylicMaterial) {\n materialRef.current.style.background = getAcrylicOverlayStyle(tiltX, tiltY).background as string;\n }\n }, [useBadgeMaterial, useAcrylicMaterial]);\n\n // ── Apply tilt — direct style mutation ──\n const applyTilt = useCallback((tiltX: number, tiltY: number) => {\n if (!cardRef.current) return;\n const maxAngle = isMobile ? 14 : 20;\n const rx = Math.max(-maxAngle, Math.min(maxAngle, tiltX));\n const ry = Math.max(-maxAngle, Math.min(maxAngle, tiltY));\n tiltRef.current = { x: rx, y: ry };\n\n cardRef.current.style.transform =\n `perspective(800px) rotateX(${rx}deg) rotateY(${ry}deg)`;\n\n const angle = (Math.atan2(ry, rx) * 180 / Math.PI + 360) % 360;\n if (holoRef.current && (useDefaultHolo || useLaserMaterial)) {\n if (useLaserMaterial) {\n holoRef.current.style.background = getLaserTicketOverlayStyle(angle).background as string;\n } else {\n holoRef.current.style.background = getHoloGradient(tier, angle);\n }\n }\n if (sparkleRef.current && useDefaultHolo) {\n const px = 50 + ry * 2;\n const py = 50 - rx * 2;\n const opacity = tier === \"rainbow\" ? 0.25 : tier === \"holo\" ? 0.18 : 0.1;\n sparkleRef.current.style.background =\n `radial-gradient(circle at ${px}% ${py}%, rgba(255,255,255,${opacity}) 0%, transparent 60%)`;\n }\n updateMaterialOverlay(rx, ry);\n }, [isMobile, tier, useDefaultHolo, useLaserMaterial, updateMaterialOverlay]);\n\n // ── rAF-throttled tilt update ──\n const scheduleTilt = useCallback((tiltX: number, tiltY: number) => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n rafRef.current = requestAnimationFrame(() => {\n applyTilt(tiltX, tiltY);\n rafRef.current = null;\n });\n }, [applyTilt]);\n\n // ── Lerp animation loop ──\n const LERP_FACTOR = 0.08;\n const LERP_THRESHOLD = 0.01;\n\n const startLerpLoop = useCallback(() => {\n if (lerpActiveRef.current) return;\n lerpActiveRef.current = true;\n const loop = () => {\n const cur = tiltRef.current;\n const tgt = targetTiltRef.current;\n const dx = tgt.x - cur.x;\n const dy = tgt.y - cur.y;\n if (Math.abs(dx) < LERP_THRESHOLD && Math.abs(dy) < LERP_THRESHOLD) {\n if (cur.x !== tgt.x || cur.y !== tgt.y) {\n applyTilt(tgt.x, tgt.y);\n }\n lerpActiveRef.current = false;\n lerpRafRef.current = null;\n return;\n }\n const nx = cur.x + dx * LERP_FACTOR;\n const ny = cur.y + dy * LERP_FACTOR;\n applyTilt(nx, ny);\n lerpRafRef.current = requestAnimationFrame(loop);\n };\n lerpRafRef.current = requestAnimationFrame(loop);\n }, [applyTilt]);\n\n useEffect(() => {\n return () => {\n if (lerpRafRef.current) cancelAnimationFrame(lerpRafRef.current);\n };\n }, []);\n\n // ── Reset tilt ──\n const resetTilt = useCallback((_animate = false) => {\n if (rafRef.current) { cancelAnimationFrame(rafRef.current); rafRef.current = null; }\n targetTiltRef.current = { x: 0, y: 0 };\n startLerpLoop();\n }, [startLerpLoop]);\n\n // ── Gyroscope listener ──\n const startGyro = useCallback(() => {\n let baseBeta: number | null = null;\n let baseGamma: number | null = null;\n const sensitivity = 0.7;\n const handler = (e: DeviceOrientationEvent) => {\n if (e.beta === null || e.gamma === null) return;\n if (baseBeta === null) { baseBeta = e.beta; baseGamma = e.gamma; }\n const tiltX = -((e.beta - baseBeta!) * sensitivity);\n const tiltY = ((e.gamma! - (baseGamma ?? 0)) * sensitivity);\n scheduleTilt(tiltX, tiltY);\n };\n window.addEventListener(\"deviceorientation\", handler);\n gyroListenerRef.current = handler;\n setGyroStatus(\"available\");\n setUseGyro(true);\n }, [scheduleTilt]);\n\n // ── Detect & initialize gyroscope ──\n useEffect(() => {\n if (typeof DeviceOrientationEvent === \"undefined\") {\n setGyroStatus(\"unavailable\");\n return;\n }\n if (typeof (DeviceOrientationEvent as any).requestPermission === \"function\") {\n setGyroStatus(\"needs-permission\");\n return;\n }\n let testHandler: ((e: DeviceOrientationEvent) => void) | null = null;\n const testTimeout = setTimeout(() => {\n if (testHandler) window.removeEventListener(\"deviceorientation\", testHandler);\n setGyroStatus(\"unavailable\");\n }, 1500);\n testHandler = (e: DeviceOrientationEvent) => {\n clearTimeout(testTimeout);\n if (testHandler) window.removeEventListener(\"deviceorientation\", testHandler);\n if (e.beta !== null && e.gamma !== null) {\n startGyro();\n } else {\n setGyroStatus(\"unavailable\");\n }\n };\n window.addEventListener(\"deviceorientation\", testHandler);\n return () => {\n clearTimeout(testTimeout);\n if (testHandler) window.removeEventListener(\"deviceorientation\", testHandler);\n if (gyroListenerRef.current) window.removeEventListener(\"deviceorientation\", gyroListenerRef.current);\n };\n }, [startGyro]);\n\n // ── iOS permission request ──\n const requestGyroPermission = useCallback(async () => {\n try {\n const state = await (DeviceOrientationEvent as any).requestPermission();\n if (state === \"granted\") { startGyro(); } else { setGyroStatus(\"unavailable\"); }\n } catch { setGyroStatus(\"unavailable\"); }\n }, [startGyro]);\n\n // ── Desktop: Mouse tracking ──\n const handleMouseMove = useCallback((e: React.MouseEvent) => {\n if (gyroStatus === \"available\" || isMobile) return;\n const rect = cardRef.current?.getBoundingClientRect();\n if (!rect) return;\n const cx = rect.left + rect.width / 2;\n const cy = rect.top + rect.height / 2;\n const tiltY = ((e.clientX - cx) / (rect.width / 2)) * 15;\n const tiltX = -((e.clientY - cy) / (rect.height / 2)) * 15;\n targetTiltRef.current = { x: tiltX, y: tiltY };\n startLerpLoop();\n }, [gyroStatus, isMobile, startLerpLoop]);\n\n const handleMouseLeave = useCallback(() => {\n if (gyroStatus === \"available\" || isMobile) return;\n targetTiltRef.current = { x: 0, y: 0 };\n startLerpLoop();\n }, [gyroStatus, isMobile, startLerpLoop]);\n\n // ── Mobile: Delta-based touch drag ──\n useEffect(() => {\n const card = cardRef.current;\n if (!card || !isMobile || (gyroStatus === \"available\" && useGyro)) return;\n\n const SENSITIVITY = 0.4;\n\n const onTouchStart = (e: TouchEvent) => {\n const touch = e.touches[0];\n touchStartRef.current = { x: touch.clientX, y: touch.clientY };\n };\n\n const onTouchMove = (e: TouchEvent) => {\n if (!touchStartRef.current) return;\n e.preventDefault();\n const touch = e.touches[0];\n const dx = touch.clientX - touchStartRef.current.x;\n const dy = touch.clientY - touchStartRef.current.y;\n const tiltY = dx * SENSITIVITY;\n const tiltX = -(dy * SENSITIVITY);\n scheduleTilt(tiltX, tiltY);\n };\n\n const onTouchEnd = () => {\n touchStartRef.current = null;\n resetTilt(true);\n };\n\n card.addEventListener(\"touchstart\", onTouchStart, { passive: true });\n card.addEventListener(\"touchmove\", onTouchMove, { passive: false });\n card.addEventListener(\"touchend\", onTouchEnd, { passive: true });\n return () => {\n card.removeEventListener(\"touchstart\", onTouchStart);\n card.removeEventListener(\"touchmove\", onTouchMove);\n card.removeEventListener(\"touchend\", onTouchEnd);\n };\n }, [scheduleTilt, gyroStatus, useGyro, isMobile, resetTilt]);\n\n // ── Glare config ──\n const glareOpacity = tier === \"rainbow\" ? 0.4 : tier === \"holo\" ? 0.3 : 0.2;\n\n // ── Toggle gyro/touch mode ──\n const toggleInputMode = useCallback(() => {\n if (gyroStatus !== \"available\") return;\n const next = !useGyro;\n setUseGyro(next);\n if (!next) {\n if (gyroListenerRef.current) {\n window.removeEventListener(\"deviceorientation\", gyroListenerRef.current);\n gyroListenerRef.current = null;\n }\n resetTilt(true);\n } else {\n startGyro();\n }\n }, [gyroStatus, useGyro, resetTilt, startGyro]);\n\n // ── Hint text ──\n const hintText = (gyroStatus === \"available\" && useGyro)\n ? \"\\ud83d\\udcf1 Tilt your phone to rotate the card\"\n : gyroStatus === \"needs-permission\"\n ? \"\\ud83d\\udcf1 Tap the button below to enable gyroscope\"\n : isMobile\n ? \"\\ud83d\\udc46 Touch & drag the card to tilt\"\n : \"\\u2728 Move to tilt the card\";\n\n // ── Card container sizing ──\n const cardWidth = isBadge(ff)\n ? \"min(70vw, 320px)\"\n : isLaserTicket(ff)\n ? \"min(90vw, 500px)\"\n : isPostcard(ff)\n ? \"min(85vw, 460px)\"\n : \"min(80vw, 400px)\";\n\n const imageContainerStyle: CSSProperties = useBadgeMaterial\n ? getBadgeContainerStyle()\n : usePolaroidMaterial\n ? getPolaroidContainerStyle()\n : useAcrylicMaterial\n ? getAcrylicContainerStyle()\n : {\n borderRadius: \"16px\",\n overflow: \"hidden\",\n boxShadow: \"0 25px 50px -12px rgba(0,0,0,0.5)\",\n };\n\n const imageBorderRadius = useBadgeMaterial ? \"50%\" : usePolaroidMaterial ? \"0\" : \"16px\";\n const overlayBorderRadius = useBadgeMaterial ? \"50%\" : usePolaroidMaterial ? \"2px\" : \"16px\";\n\n // ── Inline styles (no Tailwind dependency) ──\n const overlayStyle: CSSProperties = {\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: \"rgba(0,0,0,0.85)\",\n backdropFilter: visible ? \"blur(12px)\" : \"blur(0px)\",\n WebkitBackdropFilter: visible ? \"blur(12px)\" : \"blur(0px)\",\n transition: \"backdrop-filter 0.3s ease, -webkit-backdrop-filter 0.3s ease\",\n touchAction: \"none\",\n overscrollBehavior: \"none\",\n };\n\n const closeButtonStyle: CSSProperties = {\n position: \"absolute\",\n top: \"16px\",\n right: \"16px\",\n width: \"48px\",\n height: \"48px\",\n borderRadius: \"50%\",\n background: \"rgba(255,255,255,0.1)\",\n border: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n zIndex: 10000,\n opacity: closing ? 0 : 1,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.3s ease\",\n pointerEvents: closing ? \"none\" : \"auto\",\n touchAction: \"manipulation\",\n };\n\n const toggleButtonStyle: CSSProperties = {\n position: \"absolute\",\n bottom: \"80px\",\n left: \"50%\",\n transform: \"translateX(-50%)\",\n padding: \"10px 20px\",\n borderRadius: \"9999px\",\n background: \"rgba(255,255,255,0.15)\",\n border: \"none\",\n color: \"white\",\n fontSize: \"14px\",\n fontWeight: 500,\n cursor: \"pointer\",\n zIndex: 10000,\n opacity: closing ? 0 : 1,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.3s ease\",\n pointerEvents: closing ? \"none\" : \"auto\",\n touchAction: \"manipulation\",\n };\n\n return (\n <div\n ref={overlayRef}\n data-overlay-bg\n style={overlayStyle}\n onClick={(e) => {\n const target = e.target as HTMLElement;\n if (target.closest(\"button\") || target.closest(\"a\")) return;\n onClose();\n }}\n onMouseMove={handleMouseMove}\n >\n {/* Card + name */}\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"12px\" }}>\n {/* Loading skeleton */}\n {imageUrl && !imageLoaded && visible && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n pointerEvents: \"none\",\n zIndex: 10,\n }}\n >\n <div\n style={{\n width: cardWidth,\n aspectRatio: getAspectRatioCSS(ff),\n borderRadius: useBadgeMaterial ? \"50%\" : usePolaroidMaterial ? \"4px\" : \"16px\",\n overflow: \"hidden\",\n position: \"relative\",\n ...(usePolaroidMaterial ? { padding: \"10px 10px 40px 10px\", backgroundColor: \"rgba(250,250,248,0.08)\" } : {}),\n }}\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"linear-gradient(135deg, rgba(255,255,255,0.03) 0%, rgba(255,255,255,0.06) 50%, rgba(255,255,255,0.03) 100%)\",\n animation: \"goodz-focus-pulse 2s ease-in-out infinite\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.08) 40%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.08) 60%, transparent 100%)\",\n animation: \"goodz-focus-shimmer 2s ease-in-out infinite\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n borderRadius: \"inherit\",\n border: \"1px solid rgba(255,255,255,0.08)\",\n }}\n />\n </div>\n </div>\n )}\n\n {/* Card container */}\n <div\n ref={cardRef}\n style={{\n position: \"relative\",\n userSelect: \"none\",\n width: cardWidth,\n transform: visible\n ? \"perspective(800px) rotateX(0deg) rotateY(0deg)\"\n : \"perspective(800px) rotateX(0deg) rotateY(0deg) scale(0.8)\",\n opacity: (visible && (!imageUrl || imageLoaded)) ? 1 : 0,\n transition: \"opacity 0.4s cubic-bezier(.16,1,.3,1), transform 0.15s ease-out\",\n transformOrigin: \"center center\",\n transformStyle: \"preserve-3d\",\n willChange: \"transform\",\n touchAction: \"none\",\n }}\n onMouseLeave={handleMouseLeave}\n >\n {/* Card image with material-specific container */}\n <div style={{ ...imageContainerStyle, position: \"relative\" }}>\n {imageUrl ? (\n <>\n {!imageLoaded && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n overflow: \"hidden\",\n borderRadius: usePolaroidMaterial ? \"0\" : imageBorderRadius,\n background: \"linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #1a1a2e 100%)\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.06) 40%, rgba(255,255,255,0.12) 50%, rgba(255,255,255,0.06) 60%, transparent 100%)\",\n animation: \"goodz-focus-shimmer 1.8s ease-in-out infinite\",\n }}\n />\n </div>\n )}\n <img\n src={imageUrl}\n alt={cardName}\n style={{\n width: \"100%\",\n display: \"block\",\n borderRadius: usePolaroidMaterial ? \"0\" : imageBorderRadius,\n aspectRatio: getAspectRatioCSS(ff),\n objectFit: \"cover\" as const,\n opacity: imageLoaded ? 1 : 0,\n transition: \"opacity 0.3s ease\",\n }}\n draggable={false}\n onLoad={() => setImageLoaded(true)}\n />\n </>\n ) : (\n <div\n style={{\n width: \"100%\",\n background: \"#262626\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#737373\",\n aspectRatio: getAspectRatioCSS(ff),\n borderRadius: imageBorderRadius,\n }}\n >\n <svg style={{ width: \"64px\", height: \"64px\" }} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={1.5}\n d=\"M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4\" />\n </svg>\n </div>\n )}\n </div>\n\n {/* Glare overlay */}\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: useBadgeMaterial\n ? `radial-gradient(circle at 50% 30%, rgba(255,255,255,${glareOpacity + 0.1}) 0%, transparent 60%)`\n : `radial-gradient(circle at 50% 30%, rgba(255,255,255,${glareOpacity}) 0%, transparent 70%)`,\n mixBlendMode: \"overlay\",\n borderRadius: overlayBorderRadius,\n ...(usePolaroidMaterial ? { top: \"10px\", left: \"10px\", right: \"10px\", bottom: \"40px\" } : {}),\n }}\n />\n\n {/* Holographic gradient overlay */}\n {(useDefaultHolo || useLaserMaterial) && (\n <div\n ref={holoRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: useLaserMaterial\n ? (getLaserTicketOverlayStyle(125).background as string)\n : getHoloGradient(tier, 125),\n mixBlendMode: useLaserMaterial ? \"color-dodge\" : (tier === \"subtle\" ? \"overlay\" : \"color-dodge\"),\n borderRadius: overlayBorderRadius,\n ...(useLaserMaterial ? { animation: \"goodz-laser-shimmer 3s linear infinite\" } : {}),\n }}\n />\n )}\n\n {/* Sparkle overlay */}\n {useDefaultHolo && (tier === \"holo\" || tier === \"rainbow\") && (\n <div\n ref={sparkleRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n background: \"none\",\n mixBlendMode: \"overlay\",\n borderRadius: overlayBorderRadius,\n }}\n />\n )}\n\n {/* Material-specific overlay */}\n {(useBadgeMaterial || useAcrylicMaterial || usePostcardMaterial) && (\n <div\n ref={materialRef}\n style={{\n position: \"absolute\",\n inset: 0,\n pointerEvents: \"none\",\n ...(useBadgeMaterial ? getBadgeOverlayStyle(0, 0) : {}),\n ...(useAcrylicMaterial ? getAcrylicOverlayStyle(0, 0) : {}),\n ...(usePostcardMaterial ? getPostcardOverlayStyle() : {}),\n borderRadius: overlayBorderRadius,\n }}\n />\n )}\n </div>\n\n {/* Card name */}\n <p\n style={{\n fontSize: \"14px\",\n fontWeight: 600,\n textAlign: \"center\",\n color: \"rgba(255,255,255,0.8)\",\n filter: \"drop-shadow(0 1px 2px rgba(0,0,0,0.5))\",\n pointerEvents: \"none\",\n margin: 0,\n opacity: (visible && !closing) ? 1 : 0,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.5s ease 0.3s\",\n fontFamily: usePolaroidMaterial ? \"'Georgia', serif\" : \"inherit\",\n }}\n >\n {cardName}\n </p>\n </div>\n\n {/* Gyro/Touch toggle button */}\n {(gyroStatus === \"needs-permission\" || gyroStatus === \"available\") && (\n <button\n style={toggleButtonStyle}\n onClick={(e) => {\n if (isMobile) return;\n if (gyroStatus === \"needs-permission\") {\n requestGyroPermission();\n } else {\n toggleInputMode();\n }\n }}\n onTouchEnd={(e) => {\n e.preventDefault();\n e.stopPropagation();\n if (gyroStatus === \"needs-permission\") {\n requestGyroPermission();\n } else {\n toggleInputMode();\n }\n }}\n >\n {gyroStatus === \"needs-permission\"\n ? \"\\ud83d\\udcf1 Enable Gyroscope\"\n : useGyro\n ? \"\\ud83d\\udc46 Switch to Touch\"\n : \"\\ud83d\\udcf1 Switch to Gyroscope\"\n }\n </button>\n )}\n\n {/* Hint text */}\n {showHint && (\n <div\n style={{\n position: \"absolute\",\n bottom: \"32px\",\n left: 0,\n right: 0,\n textAlign: \"center\",\n pointerEvents: \"none\",\n opacity: (visible && !closing) ? 0.7 : 0,\n transition: closing ? \"opacity 0.1s ease\" : \"opacity 0.5s ease 0.5s\",\n }}\n >\n <p style={{ color: \"rgba(255,255,255,0.7)\", fontSize: \"12px\", margin: 0 }}>{hintText}</p>\n <p style={{ color: \"rgba(255,255,255,0.4)\", fontSize: \"10px\", marginTop: \"4px\" }}>Tap anywhere to close</p>\n </div>\n )}\n\n {/* Close button */}\n <button\n style={closeButtonStyle}\n onClick={(e) => {\n if (isMobile) return;\n onClose();\n }}\n onTouchEnd={(e) => {\n e.preventDefault();\n e.stopPropagation();\n onClose();\n }}\n aria-label=\"Close\"\n >\n <svg style={{ width: \"24px\", height: \"24px\", color: \"white\" }} fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n );\n}\n\nexport default GoodZCardFocus;\n"]}
@@ -0,0 +1,56 @@
1
+ import { callMcpTool } from './chunk-4SU7SU7K.js';
2
+
3
+ // src/commerce/index.ts
4
+ function createCommerceNamespace(transport) {
5
+ const tool = (name) => (input) => callMcpTool(transport, name, input);
6
+ return {
7
+ // Shop
8
+ createShop: tool("create_shop"),
9
+ getShopDashboard: tool("get_shop_dashboard"),
10
+ // Product Assembly
11
+ createBatch: tool("create_batch"),
12
+ createGachaPool: tool("create_gacha_pool"),
13
+ // Campaign Lifecycle
14
+ launchCampaign: tool("launch_sales_campaign"),
15
+ activateCampaign: tool("activate_campaign"),
16
+ pauseCampaign: tool("pause_campaign"),
17
+ endCampaign: tool("end_campaign"),
18
+ updateCampaign: tool("update_campaign"),
19
+ getCampaignInfo: tool("get_campaign_info"),
20
+ getCampaignItems: tool("get_campaign_items"),
21
+ // Purchase
22
+ executePurchase: tool("execute_purchase"),
23
+ getMyOrders: tool("get_my_orders"),
24
+ // Wholesale
25
+ publishToWholesale: tool("publish_to_wholesale"),
26
+ browseWholesale: tool("browse_wholesale"),
27
+ procureBatch: tool("procure_batch"),
28
+ // Inventory
29
+ manageInventory: tool("manage_inventory"),
30
+ registerInstances: tool("register_instances"),
31
+ mintToInventory: tool("mint_to_inventory"),
32
+ // Settlement
33
+ getSettlementReport: tool("get_settlement_report"),
34
+ // Discovery
35
+ searchMarketplace: tool("search_marketplace"),
36
+ getShopsByBlueprint: tool("get_shops_by_blueprint"),
37
+ // Physical Redemption
38
+ redeemPhysical: tool("redeem_physical_goodz"),
39
+ // Webhooks
40
+ registerWebhook: tool("register_webhook"),
41
+ listWebhooks: tool("list_webhooks"),
42
+ testWebhook: tool("test_webhook"),
43
+ deleteWebhook: tool("delete_webhook"),
44
+ // OAuth App
45
+ registerApp: tool("register_app"),
46
+ updateApp: tool("update_app"),
47
+ listMyApps: tool("list_my_apps"),
48
+ getAuthUrl: tool("get_auth_url"),
49
+ // Raw escape hatch
50
+ rawTool: (toolName, args) => callMcpTool(transport, toolName, args)
51
+ };
52
+ }
53
+
54
+ export { createCommerceNamespace };
55
+ //# sourceMappingURL=chunk-MUZDYQ67.js.map
56
+ //# sourceMappingURL=chunk-MUZDYQ67.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/commerce/index.ts"],"names":[],"mappings":";;;AAuJO,SAAS,wBAAwB,SAAA,EAA+C;AACrF,EAAA,MAAM,IAAA,GAAO,CAAmC,IAAA,KAC9C,CAAC,UAAc,WAAA,CAAkB,SAAA,EAAW,MAAM,KAAU,CAAA;AAE9D,EAAA,OAAO;AAAA;AAAA,IAEL,UAAA,EAAY,KAA4C,aAAa,CAAA;AAAA,IACrE,gBAAA,EAAkB,KAA2D,oBAAoB,CAAA;AAAA;AAAA,IAGjG,WAAA,EAAa,KAA8C,cAAc,CAAA;AAAA,IACzE,eAAA,EAAiB,KAAsD,mBAAmB,CAAA;AAAA;AAAA,IAG1F,cAAA,EAAgB,KAAoD,uBAAuB,CAAA;AAAA,IAC3F,gBAAA,EAAkB,KAAsD,mBAAmB,CAAA;AAAA,IAC3F,aAAA,EAAe,KAAmD,gBAAgB,CAAA;AAAA,IAClF,WAAA,EAAa,KAAiD,cAAc,CAAA;AAAA,IAC5E,cAAA,EAAgB,KAAoD,iBAAiB,CAAA;AAAA,IACrF,eAAA,EAAiB,KAAwC,mBAAmB,CAAA;AAAA,IAC5E,gBAAA,EAAkB,KAA4D,oBAAoB,CAAA;AAAA;AAAA,IAGlG,eAAA,EAAiB,KAAuD,kBAAkB,CAAA;AAAA,IAC1F,WAAA,EAAa,KAAgD,eAAe,CAAA;AAAA;AAAA,IAG5E,kBAAA,EAAoB,KAA2C,sBAAsB,CAAA;AAAA,IACrF,eAAA,EAAiB,KAA+D,kBAAkB,CAAA;AAAA,IAClG,YAAA,EAAc,KAAqC,eAAe,CAAA;AAAA;AAAA,IAGlE,eAAA,EAAiB,KAAwC,kBAAkB,CAAA;AAAA,IAC3E,iBAAA,EAAmB,KAA0C,oBAAoB,CAAA;AAAA,IACjF,eAAA,EAAiB,KAAwC,mBAAmB,CAAA;AAAA;AAAA,IAG5E,mBAAA,EAAqB,KAA4C,uBAAuB,CAAA;AAAA;AAAA,IAGxF,iBAAA,EAAmB,KAA4C,oBAAoB,CAAA;AAAA,IACnF,mBAAA,EAAqB,KAA8C,wBAAwB,CAAA;AAAA;AAAA,IAG3F,cAAA,EAAgB,KAAuC,uBAAuB,CAAA;AAAA;AAAA,IAG9E,eAAA,EAAiB,KAAoD,kBAAkB,CAAA;AAAA,IACvF,YAAA,EAAc,KAA+C,eAAe,CAAA;AAAA,IAC5E,WAAA,EAAa,KAAoC,cAAc,CAAA;AAAA,IAC/D,aAAA,EAAe,KAAsC,gBAAgB,CAAA;AAAA;AAAA,IAGrE,WAAA,EAAa,KAAoC,cAAc,CAAA;AAAA,IAC/D,SAAA,EAAW,KAAkC,YAAY,CAAA;AAAA,IACzD,UAAA,EAAY,KAAqC,cAAc,CAAA;AAAA,IAC/D,UAAA,EAAY,KAA+C,cAAc,CAAA;AAAA;AAAA,IAGzE,SAAS,CAAU,QAAA,EAAkB,SACnC,WAAA,CAAoC,SAAA,EAAW,UAAU,IAAI;AAAA,GACjE;AACF","file":"chunk-MUZDYQ67.js","sourcesContent":["/**\n * @goodz-core/sdk — Commerce / Shops Namespace\n *\n * Provides typed access to GoodZ.Commerce MCP tools:\n * shop management, batches, gacha pools, campaigns,\n * wholesale, purchases, settlement, and webhooks.\n *\n * @module\n */\n\nimport { callMcpTool } from \"../mcp-transport\";\nimport type { TransportConfig } from \"../mcp-transport\";\nimport type {\n CommerceCreateShopInput,\n CommerceShop,\n CommerceGetShopDashboardInput,\n CommerceShopDashboard,\n CommerceCreateBatchInput,\n CommerceBatch,\n CommerceCreateGachaPoolInput,\n CommerceGachaPool,\n CommerceLaunchCampaignInput,\n CommerceCampaign,\n CommerceActivateCampaignInput,\n CommercePauseCampaignInput,\n CommerceEndCampaignInput,\n CommerceUpdateCampaignInput,\n CommerceGetCampaignInfoInput,\n CommerceGetCampaignItemsInput,\n CommerceCampaignItem,\n CommerceExecutePurchaseInput,\n CommerceDrawResult,\n CommerceGetMyOrdersInput,\n CommerceOrder,\n CommercePublishToWholesaleInput,\n CommerceBrowseWholesaleInput,\n CommerceWholesaleListing,\n CommerceProcureBatchInput,\n CommerceManageInventoryInput,\n CommerceRegisterInstancesInput,\n CommerceMintToInventoryInput,\n CommerceGetSettlementReportInput,\n CommerceSearchMarketplaceInput,\n CommerceGetShopsByBlueprintInput,\n CommerceRedeemPhysicalInput,\n CommerceRegisterWebhookInput,\n CommerceWebhook,\n CommerceTestWebhookInput,\n CommerceDeleteWebhookInput,\n CommerceRegisterAppInput,\n CommerceUpdateAppInput,\n CommerceListMyAppsInput,\n CommerceGetAuthUrlInput,\n} from \"../types-commerce\";\n\n// Re-export all Commerce types\nexport type * from \"../types-commerce\";\n\n// ─── Namespace interface ────────────────────────────────────\n\nexport interface CommerceNamespace {\n // Shop Management\n /** Create a new shop. */\n createShop(input: CommerceCreateShopInput): Promise<CommerceShop>;\n /** Get shop dashboard with stats, revenue, and recent orders. */\n getShopDashboard(input?: CommerceGetShopDashboardInput): Promise<CommerceShopDashboard>;\n\n // Product Assembly\n /** Create a batch (product assembly with tiers). Supports blind_box, ichiban_kuji, direct_sale. */\n createBatch(input: CommerceCreateBatchInput): Promise<CommerceBatch>;\n /** Create a gacha pool with weighted probabilities and optional pity mechanics. */\n createGachaPool(input: CommerceCreateGachaPoolInput): Promise<CommerceGachaPool>;\n\n // Campaign Lifecycle\n /** Launch a sales campaign in draft status. Connect a Batch or Gacha pool to the storefront. */\n launchCampaign(input: CommerceLaunchCampaignInput): Promise<CommerceCampaign>;\n /** Activate a draft/paused campaign — makes it live and purchasable. */\n activateCampaign(input: CommerceActivateCampaignInput): Promise<CommerceCampaign>;\n /** Pause an active campaign. Existing orders unaffected. */\n pauseCampaign(input: CommercePauseCampaignInput): Promise<CommerceCampaign>;\n /** Permanently end a campaign (terminal state). */\n endCampaign(input: CommerceEndCampaignInput): Promise<CommerceCampaign>;\n /** Update campaign configuration (editable fields depend on status). */\n updateCampaign(input: CommerceUpdateCampaignInput): Promise<CommerceCampaign>;\n /** Get detailed campaign info including batch/gacha config and tiers. */\n getCampaignInfo(input: CommerceGetCampaignInfoInput): Promise<any>;\n /** Get unified campaign items list (works for both batch and gacha campaigns). */\n getCampaignItems(input: CommerceGetCampaignItemsInput): Promise<CommerceCampaignItem[]>;\n\n // Purchase / Draw\n /** Execute a purchase or draw. Handles payment, draw mechanics, settlement, and ownership transfer. */\n executePurchase(input: CommerceExecutePurchaseInput): Promise<CommerceDrawResult>;\n /** Get the authenticated user's order history. */\n getMyOrders(input?: CommerceGetMyOrdersInput): Promise<CommerceOrder[]>;\n\n // Wholesale\n /** Publish a batch to the wholesale market for other shopkeepers to procure. */\n publishToWholesale(input: CommercePublishToWholesaleInput): Promise<any>;\n /** Browse available wholesale listings. */\n browseWholesale(input?: CommerceBrowseWholesaleInput): Promise<CommerceWholesaleListing[]>;\n /** Procure goods from the wholesale market. */\n procureBatch(input: CommerceProcureBatchInput): Promise<any>;\n\n // Inventory\n /** View and manage shop inventory (list or sync from Core). */\n manageInventory(input?: CommerceManageInventoryInput): Promise<any>;\n /** Register existing Core instances into shop inventory. */\n registerInstances(input: CommerceRegisterInstancesInput): Promise<any>;\n /** Mint new instances directly into shop inventory. */\n mintToInventory(input: CommerceMintToInventoryInput): Promise<any>;\n\n // Settlement\n /** Get settlement report with revenue breakdown. */\n getSettlementReport(input?: CommerceGetSettlementReportInput): Promise<any>;\n\n // Discovery\n /** Search the marketplace for campaigns. */\n searchMarketplace(input?: CommerceSearchMarketplaceInput): Promise<any[]>;\n /** Find shops selling a specific GoodZ card. */\n getShopsByBlueprint(input: CommerceGetShopsByBlueprintInput): Promise<any[]>;\n\n // Physical Redemption\n /** Request physical redemption for a purchased item. */\n redeemPhysical(input: CommerceRedeemPhysicalInput): Promise<any>;\n\n // Webhooks\n /** Register a webhook URL to receive shop event notifications. */\n registerWebhook(input: CommerceRegisterWebhookInput): Promise<CommerceWebhook>;\n /** List all registered webhook endpoints. */\n listWebhooks(): Promise<CommerceWebhook[]>;\n /** Send a test ping to a webhook endpoint. */\n testWebhook(input: CommerceTestWebhookInput): Promise<any>;\n /** Delete a webhook endpoint. */\n deleteWebhook(input: CommerceDeleteWebhookInput): Promise<any>;\n\n // OAuth App Management\n /** Register a new OAuth application with Commerce scopes. */\n registerApp(input: CommerceRegisterAppInput): Promise<any>;\n /** Update an existing OAuth application. */\n updateApp(input: CommerceUpdateAppInput): Promise<any>;\n /** List all OAuth applications owned by the user. */\n listMyApps(input?: CommerceListMyAppsInput): Promise<any[]>;\n /** Generate an OAuth authorization URL. */\n getAuthUrl(input?: CommerceGetAuthUrlInput): Promise<{ url: string }>;\n\n /** Call a raw MCP tool by name. Escape hatch for tools not yet in the typed API. */\n rawTool<T = any>(toolName: string, args?: Record<string, any>): Promise<T>;\n}\n\n// ─── Factory ────────────────────────────────────────────────\n\nexport function createCommerceNamespace(transport: TransportConfig): CommerceNamespace {\n const tool = <I extends Record<string, any>, O>(name: string) =>\n (input?: I) => callMcpTool<I, O>(transport, name, input as I);\n\n return {\n // Shop\n createShop: tool<CommerceCreateShopInput, CommerceShop>(\"create_shop\"),\n getShopDashboard: tool<CommerceGetShopDashboardInput, CommerceShopDashboard>(\"get_shop_dashboard\"),\n\n // Product Assembly\n createBatch: tool<CommerceCreateBatchInput, CommerceBatch>(\"create_batch\"),\n createGachaPool: tool<CommerceCreateGachaPoolInput, CommerceGachaPool>(\"create_gacha_pool\"),\n\n // Campaign Lifecycle\n launchCampaign: tool<CommerceLaunchCampaignInput, CommerceCampaign>(\"launch_sales_campaign\"),\n activateCampaign: tool<CommerceActivateCampaignInput, CommerceCampaign>(\"activate_campaign\"),\n pauseCampaign: tool<CommercePauseCampaignInput, CommerceCampaign>(\"pause_campaign\"),\n endCampaign: tool<CommerceEndCampaignInput, CommerceCampaign>(\"end_campaign\"),\n updateCampaign: tool<CommerceUpdateCampaignInput, CommerceCampaign>(\"update_campaign\"),\n getCampaignInfo: tool<CommerceGetCampaignInfoInput, any>(\"get_campaign_info\"),\n getCampaignItems: tool<CommerceGetCampaignItemsInput, CommerceCampaignItem[]>(\"get_campaign_items\"),\n\n // Purchase\n executePurchase: tool<CommerceExecutePurchaseInput, CommerceDrawResult>(\"execute_purchase\"),\n getMyOrders: tool<CommerceGetMyOrdersInput, CommerceOrder[]>(\"get_my_orders\"),\n\n // Wholesale\n publishToWholesale: tool<CommercePublishToWholesaleInput, any>(\"publish_to_wholesale\"),\n browseWholesale: tool<CommerceBrowseWholesaleInput, CommerceWholesaleListing[]>(\"browse_wholesale\"),\n procureBatch: tool<CommerceProcureBatchInput, any>(\"procure_batch\"),\n\n // Inventory\n manageInventory: tool<CommerceManageInventoryInput, any>(\"manage_inventory\"),\n registerInstances: tool<CommerceRegisterInstancesInput, any>(\"register_instances\"),\n mintToInventory: tool<CommerceMintToInventoryInput, any>(\"mint_to_inventory\"),\n\n // Settlement\n getSettlementReport: tool<CommerceGetSettlementReportInput, any>(\"get_settlement_report\"),\n\n // Discovery\n searchMarketplace: tool<CommerceSearchMarketplaceInput, any[]>(\"search_marketplace\"),\n getShopsByBlueprint: tool<CommerceGetShopsByBlueprintInput, any[]>(\"get_shops_by_blueprint\"),\n\n // Physical Redemption\n redeemPhysical: tool<CommerceRedeemPhysicalInput, any>(\"redeem_physical_goodz\"),\n\n // Webhooks\n registerWebhook: tool<CommerceRegisterWebhookInput, CommerceWebhook>(\"register_webhook\"),\n listWebhooks: tool<Record<string, never>, CommerceWebhook[]>(\"list_webhooks\"),\n testWebhook: tool<CommerceTestWebhookInput, any>(\"test_webhook\"),\n deleteWebhook: tool<CommerceDeleteWebhookInput, any>(\"delete_webhook\"),\n\n // OAuth App\n registerApp: tool<CommerceRegisterAppInput, any>(\"register_app\"),\n updateApp: tool<CommerceUpdateAppInput, any>(\"update_app\"),\n listMyApps: tool<CommerceListMyAppsInput, any[]>(\"list_my_apps\"),\n getAuthUrl: tool<CommerceGetAuthUrlInput, { url: string }>(\"get_auth_url\"),\n\n // Raw escape hatch\n rawTool: <T = any>(toolName: string, args?: Record<string, any>) =>\n callMcpTool<Record<string, any>, T>(transport, toolName, args),\n };\n}\n"]}
@@ -0,0 +1,37 @@
1
+ import { callMcpTool } from './chunk-4SU7SU7K.js';
2
+
3
+ // src/exchange/index.ts
4
+ function createExchangeNamespace(transport) {
5
+ const tool = (name) => (input) => callMcpTool(transport, name, input);
6
+ return {
7
+ // Marketplace
8
+ browseMarketplace: tool("browse_marketplace"),
9
+ getListingDetail: tool("get_listing_detail"),
10
+ // Listing Management
11
+ createListing: tool("create_listing"),
12
+ cancelListing: tool("cancel_listing"),
13
+ // Purchase & Bidding
14
+ buyListing: tool("buy_listing"),
15
+ placeBid: tool("place_bid"),
16
+ getBids: tool("get_bids"),
17
+ // WTB
18
+ createWtb: tool("create_wtb"),
19
+ fulfillWtb: tool("fulfill_wtb"),
20
+ cancelWtb: tool("cancel_wtb"),
21
+ // P2P Trade
22
+ proposeTrade: tool("propose_trade"),
23
+ respondToTrade: tool("respond_to_trade"),
24
+ // Watchlist
25
+ getWatchlist: tool("get_watchlist"),
26
+ addToWatchlist: tool("add_to_watchlist"),
27
+ removeFromWatchlist: tool("remove_from_watchlist"),
28
+ // Market Data
29
+ getMarketData: tool("get_market_data"),
30
+ // Raw escape hatch
31
+ rawTool: (toolName, args) => callMcpTool(transport, toolName, args)
32
+ };
33
+ }
34
+
35
+ export { createExchangeNamespace };
36
+ //# sourceMappingURL=chunk-OUKZ2PRD.js.map
37
+ //# sourceMappingURL=chunk-OUKZ2PRD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/exchange/index.ts"],"names":[],"mappings":";;;AAqGO,SAAS,wBAAwB,SAAA,EAA+C;AACrF,EAAA,MAAM,IAAA,GAAO,CAAmC,IAAA,KAC9C,CAAC,UAAc,WAAA,CAAkB,SAAA,EAAW,MAAM,KAAU,CAAA;AAE9D,EAAA,OAAO;AAAA;AAAA,IAEL,iBAAA,EAAmB,KAAwD,oBAAoB,CAAA;AAAA,IAC/F,gBAAA,EAAkB,KAAqD,oBAAoB,CAAA;AAAA;AAAA,IAG3F,aAAA,EAAe,KAA8D,gBAAgB,CAAA;AAAA,IAC7F,aAAA,EAAe,KAAsC,gBAAgB,CAAA;AAAA;AAAA,IAGrE,UAAA,EAAY,KAAwD,aAAa,CAAA;AAAA,IACjF,QAAA,EAAU,KAAoD,WAAW,CAAA;AAAA,IACzE,OAAA,EAAS,KAA0C,UAAU,CAAA;AAAA;AAAA,IAG7D,SAAA,EAAW,KAA0C,YAAY,CAAA;AAAA,IACjE,UAAA,EAAY,KAAwD,aAAa,CAAA;AAAA,IACjF,SAAA,EAAW,KAAkC,YAAY,CAAA;AAAA;AAAA,IAGzD,YAAA,EAAc,KAAuD,eAAe,CAAA;AAAA,IACpF,cAAA,EAAgB,KAAgE,kBAAkB,CAAA;AAAA;AAAA,IAGlG,YAAA,EAAc,KAAqD,eAAe,CAAA;AAAA,IAClF,cAAA,EAAgB,KAAyD,kBAAkB,CAAA;AAAA,IAC3F,mBAAA,EAAqB,KAA4C,uBAAuB,CAAA;AAAA;AAAA,IAGxF,aAAA,EAAe,KAAqD,iBAAiB,CAAA;AAAA;AAAA,IAGrF,SAAS,CAAU,QAAA,EAAkB,SACnC,WAAA,CAAoC,SAAA,EAAW,UAAU,IAAI;AAAA,GACjE;AACF","file":"chunk-OUKZ2PRD.js","sourcesContent":["/**\n * @goodz-core/sdk — Exchange Namespace\n *\n * Provides typed access to GoodZ.Exchange MCP tools:\n * marketplace listings, auctions, WTB, P2P trades,\n * watchlist, and market data.\n *\n * All prices are in Z-coin (1 Z-coin = $0.10 USD).\n *\n * @module\n */\n\nimport { callMcpTool } from \"../mcp-transport\";\nimport type { TransportConfig } from \"../mcp-transport\";\nimport type {\n ExchangeBrowseMarketplaceInput,\n ExchangeListing,\n ExchangeGetListingDetailInput,\n ExchangeCreateListingInput,\n ExchangeCreateListingOutput,\n ExchangeCancelListingInput,\n ExchangeBuyListingInput,\n ExchangeBuyListingOutput,\n ExchangePlaceBidInput,\n ExchangePlaceBidOutput,\n ExchangeGetBidsInput,\n ExchangeBid,\n ExchangeCreateWtbInput,\n ExchangeWtb,\n ExchangeFulfillWtbInput,\n ExchangeFulfillWtbOutput,\n ExchangeCancelWtbInput,\n ExchangeProposeTradeInput,\n ExchangeTradeProposal,\n ExchangeRespondToTradeInput,\n ExchangeRespondToTradeOutput,\n ExchangeAddToWatchlistInput,\n ExchangeWatchlistItem,\n ExchangeRemoveFromWatchlistInput,\n ExchangeGetMarketDataInput,\n ExchangeMarketData,\n} from \"../types-exchange\";\n\n// Re-export all Exchange types\nexport type * from \"../types-exchange\";\n\n// ─── Namespace interface ────────────────────────────────────\n\nexport interface ExchangeNamespace {\n // Marketplace\n /** Browse active marketplace listings. */\n browseMarketplace(input?: ExchangeBrowseMarketplaceInput): Promise<ExchangeListing[]>;\n /** Get detailed info about a specific listing. */\n getListingDetail(input: ExchangeGetListingDetailInput): Promise<ExchangeListing>;\n\n // Listing Management\n /** Create a new listing (fixed_price or auction). Core locks the instance atomically. */\n createListing(input: ExchangeCreateListingInput): Promise<ExchangeCreateListingOutput>;\n /** Cancel an active listing. Core unlocks the instance. */\n cancelListing(input: ExchangeCancelListingInput): Promise<any>;\n\n // Purchase & Bidding\n /** Buy a fixed-price listing. Z-coin debit + ownership transfer via Core settlement. */\n buyListing(input: ExchangeBuyListingInput): Promise<ExchangeBuyListingOutput>;\n /** Place a bid on an auction. If bid meets buy-now price, immediate purchase is executed. */\n placeBid(input: ExchangePlaceBidInput): Promise<ExchangePlaceBidOutput>;\n /** Get all bids for an auction listing (highest first). */\n getBids(input: ExchangeGetBidsInput): Promise<ExchangeBid[]>;\n\n // Want-to-Buy\n /** Create a WTB request — announce what you're looking for. */\n createWtb(input: ExchangeCreateWtbInput): Promise<ExchangeWtb>;\n /** Fulfill a WTB request by offering your item. Settlement via Core. */\n fulfillWtb(input: ExchangeFulfillWtbInput): Promise<ExchangeFulfillWtbOutput>;\n /** Cancel your own WTB request. */\n cancelWtb(input: ExchangeCancelWtbInput): Promise<any>;\n\n // P2P Trade\n /** Propose a trade/swap with another user. Optional Z-coin compensation. */\n proposeTrade(input: ExchangeProposeTradeInput): Promise<ExchangeTradeProposal>;\n /** Accept or reject a trade proposal. If accepted, all items transfer via Core. */\n respondToTrade(input: ExchangeRespondToTradeInput): Promise<ExchangeRespondToTradeOutput>;\n\n // Watchlist\n /** Get your watchlist. */\n getWatchlist(): Promise<ExchangeWatchlistItem[]>;\n /** Add a GoodZ or listing to your watchlist. */\n addToWatchlist(input: ExchangeAddToWatchlistInput): Promise<ExchangeWatchlistItem>;\n /** Remove an item from your watchlist. */\n removeFromWatchlist(input: ExchangeRemoveFromWatchlistInput): Promise<any>;\n\n // Market Data\n /** Get market data: price history, floor price, volume, trends. */\n getMarketData(input: ExchangeGetMarketDataInput): Promise<ExchangeMarketData>;\n\n /** Call a raw MCP tool by name. Escape hatch for tools not yet in the typed API. */\n rawTool<T = any>(toolName: string, args?: Record<string, any>): Promise<T>;\n}\n\n// ─── Factory ────────────────────────────────────────────────\n\nexport function createExchangeNamespace(transport: TransportConfig): ExchangeNamespace {\n const tool = <I extends Record<string, any>, O>(name: string) =>\n (input?: I) => callMcpTool<I, O>(transport, name, input as I);\n\n return {\n // Marketplace\n browseMarketplace: tool<ExchangeBrowseMarketplaceInput, ExchangeListing[]>(\"browse_marketplace\"),\n getListingDetail: tool<ExchangeGetListingDetailInput, ExchangeListing>(\"get_listing_detail\"),\n\n // Listing Management\n createListing: tool<ExchangeCreateListingInput, ExchangeCreateListingOutput>(\"create_listing\"),\n cancelListing: tool<ExchangeCancelListingInput, any>(\"cancel_listing\"),\n\n // Purchase & Bidding\n buyListing: tool<ExchangeBuyListingInput, ExchangeBuyListingOutput>(\"buy_listing\"),\n placeBid: tool<ExchangePlaceBidInput, ExchangePlaceBidOutput>(\"place_bid\"),\n getBids: tool<ExchangeGetBidsInput, ExchangeBid[]>(\"get_bids\"),\n\n // WTB\n createWtb: tool<ExchangeCreateWtbInput, ExchangeWtb>(\"create_wtb\"),\n fulfillWtb: tool<ExchangeFulfillWtbInput, ExchangeFulfillWtbOutput>(\"fulfill_wtb\"),\n cancelWtb: tool<ExchangeCancelWtbInput, any>(\"cancel_wtb\"),\n\n // P2P Trade\n proposeTrade: tool<ExchangeProposeTradeInput, ExchangeTradeProposal>(\"propose_trade\"),\n respondToTrade: tool<ExchangeRespondToTradeInput, ExchangeRespondToTradeOutput>(\"respond_to_trade\"),\n\n // Watchlist\n getWatchlist: tool<Record<string, never>, ExchangeWatchlistItem[]>(\"get_watchlist\"),\n addToWatchlist: tool<ExchangeAddToWatchlistInput, ExchangeWatchlistItem>(\"add_to_watchlist\"),\n removeFromWatchlist: tool<ExchangeRemoveFromWatchlistInput, any>(\"remove_from_watchlist\"),\n\n // Market Data\n getMarketData: tool<ExchangeGetMarketDataInput, ExchangeMarketData>(\"get_market_data\"),\n\n // Raw escape hatch\n rawTool: <T = any>(toolName: string, args?: Record<string, any>) =>\n callMcpTool<Record<string, any>, T>(transport, toolName, args),\n };\n}\n"]}