@waaskey/react 0.1.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/LICENSE +21 -0
- package/README.md +94 -0
- package/dist/index.cjs +733 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +258 -0
- package/dist/index.d.ts +258 -0
- package/dist/index.js +703 -0
- package/dist/index.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/context.ts","../src/theme.ts","../src/theme-context.ts","../src/provider.ts","../src/hooks.ts","../src/use-login.ts","../src/use-qr-code.ts","../src/connect-modal.ts","../src/wallet-widget.ts","../src/sign-prompt.ts","../src/fund-widget.ts"],"names":["createContext","useContext","useState","useCallback","useEffect","h","useMemo","useRef","reject"],"mappings":"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","file":"index.js","sourcesContent":["import { createContext } from 'react';\nimport type { Waaskey } from '@waaskey/sdk';\n\n/** React context holding the configured {@link Waaskey} client. Provided by {@link WaaskeyProvider}. */\nexport const WaaskeyContext = createContext<Waaskey | null>(null);\n","/**\n * Design tokens for the Waaskey widget kit (#17). One source for colours, radius and\n * typography so every component (ConnectModal, WalletWidget, SignPrompt, FundWidget) and the\n * React Native package share the same theme. White-label by passing a partial `theme` to the\n * provider; light/dark are both first-class.\n */\nexport interface WaasTheme {\n /** Primary action / brand colour. */\n accent: string;\n /** Foreground on the accent (button text). */\n accentForeground: string;\n /** Surface/background. */\n background: string;\n /** Primary text. */\n foreground: string;\n /** Secondary/subtle text. */\n muted: string;\n /** Borders / dividers. */\n border: string;\n /** Error text. */\n danger: string;\n /** Corner radius (CSS length on web). */\n radius: string;\n /** Base font family. */\n fontFamily: string;\n}\n\nexport const lightTheme: WaasTheme = {\n accent: '#6366f1',\n accentForeground: '#ffffff',\n background: '#ffffff',\n foreground: '#0a0d14',\n muted: '#6b7280',\n border: '#e5e7eb',\n danger: '#dc2626',\n radius: '12px',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n};\n\nexport const darkTheme: WaasTheme = {\n accent: '#818cf8',\n accentForeground: '#0a0d14',\n background: '#0f1117',\n foreground: '#f3f4f6',\n muted: '#9ca3af',\n border: '#272b36',\n danger: '#f87171',\n radius: '12px',\n fontFamily: 'system-ui, -apple-system, Segoe UI, Roboto, sans-serif',\n};\n\nexport const defaultTheme = lightTheme;\n\n/** Merge a partial override onto a base theme (white-label). */\nexport function resolveTheme(override?: Partial<WaasTheme>, base: WaasTheme = defaultTheme): WaasTheme {\n return override ? { ...base, ...override } : base;\n}\n","import { createContext, useContext } from 'react';\nimport { defaultTheme } from './theme';\nimport type { WaasTheme } from './theme';\n\n/** Theme made available by {@link WaaskeyProvider} / `WaasProvider`. Defaults to the light theme. */\nexport const ThemeContext = createContext<WaasTheme>(defaultTheme);\n\n/** The active {@link WaasTheme} from context (falls back to the default light theme). */\nexport function useTheme(): WaasTheme {\n return useContext(ThemeContext);\n}\n","import { Waaskey } from '@waaskey/sdk';\nimport { createElement, useMemo } from 'react';\nimport { WaaskeyContext } from './context';\nimport { resolveTheme } from './theme';\nimport { ThemeContext } from './theme-context';\nimport type { WaasTheme } from './theme';\nimport type { WaaskeyOptions } from '@waaskey/sdk';\nimport type { ReactElement, ReactNode } from 'react';\n\n/** Provide either a ready {@link Waaskey} client or the options to construct one, plus an optional theme. */\nexport type WaaskeyProviderProps = ({ client: Waaskey } | { options: WaaskeyOptions }) & {\n /** Partial theme override (white-label) merged onto the default light theme. */\n theme?: Partial<WaasTheme>;\n children?: ReactNode;\n};\n\n/**\n * Makes a {@link Waaskey} client (and the kit {@link WaasTheme}) available to the hooks and\n * components (`useWaaskey`/`useWaas`, `useTheme`, `<ConnectModal>`, `<WalletWidget>`, …).\n * Pass a `client` you built, or `options` to construct one (memoized). SSR-safe (no browser\n * APIs at construction). Written with `createElement` so the package needs no JSX build step.\n */\nexport function WaaskeyProvider(props: WaaskeyProviderProps): ReactElement {\n // Discriminate by prop shape (not instanceof) so a custom/stub client also works.\n const source = 'client' in props ? props.client : props.options;\n const client = useMemo(() => ('client' in props ? props.client : new Waaskey(props.options)), [source]);\n const theme = useMemo(() => resolveTheme(props.theme), [props.theme]);\n return createElement(WaaskeyContext.Provider, { value: client }, createElement(ThemeContext.Provider, { value: theme }, props.children));\n}\n\n/** Ergonomic alias of {@link WaaskeyProvider} — the documented kit entry point (`<WaasProvider>`). */\nexport const WaasProvider = WaaskeyProvider;\nexport type WaasProviderProps = WaaskeyProviderProps;\n","import { useCallback, useContext, useEffect, useState } from 'react';\nimport { WaaskeyContext } from './context';\nimport { useTheme } from './theme-context';\nimport type { WaasTheme } from './theme';\nimport type { Balance, Chain, CreateWalletOptions, CreateWalletParams, SendParams, SendResult, Signature, Waaskey, Wallet } from '@waaskey/sdk';\n\n/** Loading/error/data triple for an async read — render all three states. */\nexport interface AsyncState<T> {\n data?: T;\n error?: Error;\n loading: boolean;\n}\n\n/** The {@link Waaskey} client from context. Throws if used outside {@link WaaskeyProvider}. */\nexport function useWaaskey(): Waaskey {\n const client = useContext(WaaskeyContext);\n if (!client) throw new Error('useWaaskey must be used within a <WaaskeyProvider>.');\n return client;\n}\n\n/**\n * The unified kit surface (#12): the {@link Waaskey} client + active theme, plus the `auth`\n * resource for convenience. Sugar over `useWaaskey()` + `useTheme()` for the Privy-style DX.\n */\nexport function useWaas(): { client: Waaskey; theme: WaasTheme; auth: Waaskey['auth'] } {\n const client = useWaaskey();\n const theme = useTheme();\n return { client, theme, auth: client.auth };\n}\n\n/** Imperatively create a wallet (non-custodial keygen). Returns the action + its async state. */\nexport function useCreateWallet(): {\n create: (params: CreateWalletParams, options?: CreateWalletOptions) => Promise<Wallet>;\n wallet?: Wallet;\n error?: Error;\n isPending: boolean;\n} {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Wallet>>({ loading: false });\n\n const create = useCallback(\n async (params: CreateWalletParams, options?: CreateWalletOptions): Promise<Wallet> => {\n setState({ loading: true });\n try {\n const wallet = await waaskey.wallets.create(params, options);\n setState({ loading: false, data: wallet });\n return wallet;\n } catch (error) {\n setState({ loading: false, error: error as Error });\n throw error;\n }\n },\n [waaskey],\n );\n\n return { create, wallet: state.data, error: state.error, isPending: state.loading };\n}\n\n/** Load a wallet by id (re-fetches when `id` changes); exposes `refresh`. */\nexport function useWallet(id: string | undefined): AsyncState<Wallet> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Wallet>>({ loading: Boolean(id) });\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!id) return;\n setState({ loading: true });\n try {\n setState({ loading: false, data: await waaskey.wallets.get(id) });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, id]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n\n/** Read an address's native balance on a chain, client-side (no backend); exposes `refresh`. */\nexport function useBalance(chain: Chain | undefined, address: string | undefined): AsyncState<Balance> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Balance>>({ loading: Boolean(chain && address) });\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!chain || !address) return;\n setState({ loading: true });\n try {\n setState({ loading: false, data: await waaskey.balances.getBalance(chain, address) });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, chain, address]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n\n/** Read an address's native balance across several chains at once; exposes `refresh`. */\nexport function useBalances(chains: Chain[], address: string | undefined): AsyncState<Balance[]> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Balance[]>>({ loading: Boolean(address && chains.length) });\n // Stable dependency so the effect doesn't re-run on every render's new array identity.\n const key = chains.join(',');\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!address || !key) return;\n setState({ loading: true });\n try {\n const data = await Promise.all(key.split(',').map((chain) => waaskey.balances.getBalance(chain as Chain, address)));\n setState({ loading: false, data });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, key, address]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n\n/** Status of a {@link useSend} action. */\nexport type SendStatus = 'idle' | 'pending' | 'sent' | 'error';\n\n/**\n * Imperatively send a transaction from a wallet, exposing an optimistic status\n * (`idle → pending → sent | error`) the UI renders. The platform co-signs (MPC) and returns\n * the **signed raw tx** (`result.signedTx`) — WaaS never broadcasts; the client submits it\n * (e.g. `waaskey.broadcast(result.signedTx, { rpcUrl })` or your own node).\n */\nexport function useSend(walletId: string | undefined): {\n send: (params: SendParams) => Promise<SendResult>;\n status: SendStatus;\n result?: SendResult;\n error?: Error;\n reset: () => void;\n} {\n const waaskey = useWaaskey();\n const [status, setStatus] = useState<SendStatus>('idle');\n const [result, setResult] = useState<SendResult>();\n const [error, setError] = useState<Error>();\n\n const send = useCallback(\n async (params: SendParams): Promise<SendResult> => {\n if (!walletId) throw new Error('useSend: no wallet id.');\n setStatus('pending');\n setError(undefined);\n try {\n const wallet = await waaskey.wallets.get(walletId);\n const res = await wallet.send(params);\n setResult(res);\n setStatus('sent');\n return res;\n } catch (e) {\n setError(e as Error);\n setStatus('error');\n throw e;\n }\n },\n [waaskey, walletId],\n );\n\n const reset = useCallback((): void => {\n setStatus('idle');\n setResult(undefined);\n setError(undefined);\n }, []);\n\n return { send, status, result, error, reset };\n}\n\n/** Load a wallet's signing activity (newest first) — raw signs and send/sweep signed txs; exposes `refresh`. */\nexport function useSignatures(walletId: string | undefined): AsyncState<Signature[]> & { refresh: () => Promise<void> } {\n const waaskey = useWaaskey();\n const [state, setState] = useState<AsyncState<Signature[]>>({ loading: Boolean(walletId) });\n\n const refresh = useCallback(async (): Promise<void> => {\n if (!walletId) return;\n setState({ loading: true });\n try {\n const wallet = await waaskey.wallets.get(walletId);\n const page = await wallet.signatures();\n setState({ loading: false, data: page.items });\n } catch (error) {\n setState({ loading: false, error: error as Error });\n }\n }, [waaskey, walletId]);\n\n useEffect(() => {\n void refresh();\n }, [refresh]);\n\n return { ...state, refresh };\n}\n","import { useCallback, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport type { EmbeddedSession } from '@waaskey/sdk';\n\n/** Step of the email-OTP login flow. */\nexport type LoginStep = 'email' | 'code' | 'done';\n\nexport interface UseLogin {\n step: LoginStep;\n /** The email entered at the first step. */\n email: string;\n /** The session once login completes. */\n session?: EmbeddedSession;\n loading: boolean;\n error?: Error;\n /** Send a one-time code to `email` (→ `code` step). */\n start: (email: string) => Promise<void>;\n /** Verify the code (→ `done` step on success). */\n verify: (code: string) => Promise<void>;\n /** Back to the email step (clears error). */\n reset: () => void;\n}\n\n/**\n * Headless email-OTP login (#6/#13): drives `waaskey.auth.email.start` → `.verify`,\n * tracking `step`/`loading`/`error` so a UI (e.g. `<ConnectModal>`) — or a custom one —\n * can render all states. The established session is also held on `waaskey.auth`.\n */\nexport function useLogin(): UseLogin {\n const waaskey = useWaaskey();\n const [step, setStep] = useState<LoginStep>('email');\n const [email, setEmail] = useState('');\n const [session, setSession] = useState<EmbeddedSession>();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<Error>();\n\n const start = useCallback(\n async (e: string): Promise<void> => {\n setLoading(true);\n setError(undefined);\n try {\n await waaskey.auth.email.start(e);\n setEmail(e);\n setStep('code');\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n },\n [waaskey],\n );\n\n const verify = useCallback(\n async (code: string): Promise<void> => {\n setLoading(true);\n setError(undefined);\n try {\n const s = await waaskey.auth.email.verify(email, code);\n setSession(s);\n setStep('done');\n } catch (err) {\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n },\n [waaskey, email],\n );\n\n const reset = useCallback((): void => {\n setStep('email');\n setError(undefined);\n }, []);\n\n return { step, email, session, loading, error, start, verify, reset };\n}\n","import { useEffect, useState } from 'react';\n\n/**\n * Render `text` to a QR-code data URL using `qrcode` (an optional peer dependency, lazy-loaded).\n * Returns `undefined` until ready, or when `qrcode` isn't installed — callers should always also\n * show the raw text (address) so receive works without the dependency.\n */\nexport function useQrCode(text: string | undefined): string | undefined {\n const [dataUrl, setDataUrl] = useState<string>();\n\n useEffect(() => {\n let cancelled = false;\n setDataUrl(undefined);\n if (!text) return;\n void (async () => {\n try {\n const qr = await import('qrcode');\n const url = await qr.toDataURL(text, { margin: 1, width: 192 });\n if (!cancelled) setDataUrl(url);\n } catch {\n // qrcode not installed (optional) or encoding failed — caller falls back to the address text.\n }\n })();\n return () => {\n cancelled = true;\n };\n }, [text]);\n\n return dataUrl;\n}\n","import { createElement as h, useEffect, useRef, useState } from 'react';\nimport { useTheme } from './theme-context';\nimport { useLogin } from './use-login';\nimport type { WaasTheme } from './theme';\nimport type { EmbeddedSession } from '@waaskey/sdk';\nimport type { CSSProperties, FormEvent, ReactElement } from 'react';\n\n/** Per-instance theme override for {@link ConnectModal} (merged onto the provider theme). */\nexport type ConnectModalTheme = Partial<WaasTheme>;\n\nexport interface ConnectModalProps {\n /** Whether the modal is shown. */\n open: boolean;\n /** Close requested (backdrop / ✕ / after connect). */\n onClose: () => void;\n /** Called with the session once login completes. */\n onConnect?: (session: EmbeddedSession) => void;\n /** Heading copy. */\n title?: string;\n theme?: ConnectModalTheme;\n}\n\n/**\n * Drop-in email-OTP login modal (#13). Runs `useLogin` (→ `waaskey.auth`), rendering the\n * email → code → done steps with loading/error states; calls `onConnect` with the session.\n * Themeable via inline tokens, accessible (labelled dialog, focus, Esc to close); written\n * with `createElement` so the package needs no JSX build step.\n */\nexport function ConnectModal({ open, onClose, onConnect, title = 'Sign in', theme }: ConnectModalProps): ReactElement | null {\n const base = useTheme();\n const t = { ...base, ...theme };\n const { step, email, session, loading, error, start, verify, reset } = useLogin();\n const [emailInput, setEmailInput] = useState('');\n const [codeInput, setCodeInput] = useState('');\n const firstFieldRef = useRef<HTMLInputElement>(null);\n\n // Surface the session once, then let the host close.\n useEffect(() => {\n if (step === 'done' && session) onConnect?.(session);\n }, [step, session, onConnect]);\n\n // Esc closes; focus the active field when the step changes.\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent): void => {\n if (e.key === 'Escape') onClose();\n };\n document.addEventListener('keydown', onKey);\n firstFieldRef.current?.focus();\n return () => document.removeEventListener('keydown', onKey);\n }, [open, step, onClose]);\n\n if (!open) return null;\n\n const overlay: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.4)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 };\n const card: CSSProperties = {\n background: t.background,\n color: t.foreground,\n borderRadius: t.radius,\n padding: 24,\n width: 360,\n maxWidth: '90vw',\n boxShadow: '0 10px 40px rgba(0,0,0,0.2)',\n };\n const input: CSSProperties = { width: '100%', boxSizing: 'border-box', padding: '10px 12px', border: `1px solid ${t.border}`, borderRadius: '8px', fontSize: 14, marginTop: 8 };\n const button: CSSProperties = {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: '8px',\n fontSize: 14,\n fontWeight: 600,\n marginTop: 12,\n cursor: loading ? 'default' : 'pointer',\n opacity: loading ? 0.6 : 1,\n };\n const link: CSSProperties = { background: 'none', border: 'none', color: t.muted, fontSize: 13, marginTop: 12, cursor: 'pointer' };\n const errText: CSSProperties = { color: t.danger, fontSize: 13, marginTop: 8 };\n\n const onSubmitEmail = (e: FormEvent): void => {\n e.preventDefault();\n if (emailInput.trim()) void start(emailInput.trim());\n };\n const onSubmitCode = (e: FormEvent): void => {\n e.preventDefault();\n if (codeInput.trim()) void verify(codeInput.trim());\n };\n\n const close = (): void => {\n onClose();\n };\n\n let body: ReactElement;\n if (step === 'email') {\n body = h(\n 'form',\n { onSubmit: onSubmitEmail, key: 'email' },\n h('label', { style: { fontSize: 13, color: t.muted }, htmlFor: 'waaskey-email' }, 'Email'),\n h('input', {\n id: 'waaskey-email',\n ref: firstFieldRef,\n style: input,\n type: 'email',\n placeholder: 'you@example.com',\n value: emailInput,\n onChange: (e: { target: HTMLInputElement }) => setEmailInput(e.target.value),\n disabled: loading,\n }),\n error ? h('div', { style: errText, role: 'alert' }, error.message) : null,\n h('button', { style: button, type: 'submit', disabled: loading }, loading ? 'Sending…' : 'Send code'),\n );\n } else if (step === 'code') {\n body = h(\n 'form',\n { onSubmit: onSubmitCode, key: 'code' },\n h('div', { style: { fontSize: 13, color: t.muted } }, `Enter the code sent to ${email}`),\n h('input', {\n id: 'waaskey-code',\n ref: firstFieldRef,\n style: input,\n inputMode: 'numeric',\n placeholder: '123456',\n value: codeInput,\n onChange: (e: { target: HTMLInputElement }) => setCodeInput(e.target.value),\n disabled: loading,\n }),\n error ? h('div', { style: errText, role: 'alert' }, error.message) : null,\n h('button', { style: button, type: 'submit', disabled: loading }, loading ? 'Verifying…' : 'Verify'),\n h(\n 'button',\n {\n style: link,\n type: 'button',\n onClick: () => {\n setCodeInput('');\n reset();\n },\n },\n '← Use a different email',\n ),\n );\n } else {\n body = h(\n 'div',\n { key: 'done', style: { textAlign: 'center', padding: '12px 0' } },\n h('div', { style: { fontSize: 15, fontWeight: 600 } }, 'Connected'),\n h('button', { style: button, type: 'button', onClick: close }, 'Continue'),\n );\n }\n\n return h(\n 'div',\n { style: overlay, onClick: close },\n h(\n 'div',\n { style: card, role: 'dialog', 'aria-modal': true, 'aria-label': title, onClick: (e: { stopPropagation: () => void }) => e.stopPropagation() },\n h(\n 'div',\n { style: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', marginBottom: 8 } },\n h('strong', { style: { fontSize: 16 } }, title),\n h('button', { style: { ...link, marginTop: 0 }, type: 'button', 'aria-label': 'Close', onClick: close }, '✕'),\n ),\n body,\n ),\n );\n}\n","import { createElement as h, useMemo, useState } from 'react';\nimport { useBalances, useSend, useSignatures, useWallet } from './hooks';\nimport { useTheme } from './theme-context';\nimport { useQrCode } from './use-qr-code';\nimport type { WaasTheme } from './theme';\nimport type { Balance, Chain, SendResult, Signature } from '@waaskey/sdk';\nimport type { CSSProperties, FormEvent, ReactElement } from 'react';\n\n/** Per-instance theme override for {@link WalletWidget} (merged onto the provider theme). */\nexport type WalletWidgetTheme = Partial<WaasTheme>;\n\nexport interface WalletWidgetProps {\n /** Waaskey wallet id to render. */\n walletId: string;\n /** Chains to show native balances for (e.g. `['ethereum', 'base']`). */\n chains: Chain[];\n /** Backend chain id the Send tab submits to (e.g. `'evm:11155111'`). Defaults to `'evm:1'`. */\n sendChainId?: string;\n /** Decimals used to parse the human send amount into base units. Defaults to 18 (EVM native). */\n sendDecimals?: number;\n /** Called after a successful send. */\n onSent?: (result: SendResult) => void;\n theme?: WalletWidgetTheme;\n}\n\ntype Tab = 'assets' | 'receive' | 'send' | 'activity';\n\n/**\n * Drop-in embedded-wallet panel (#14): balances/assets, receive (address + QR), send\n * (amount + address with optimistic pending/sent/failed states), and activity (tx history).\n * Built on the headless hooks (`useBalances`/`useSend`/`useSignatures`) — use those directly\n * for a custom UI. `createElement`-only, so the package needs no JSX build step.\n */\nexport function WalletWidget({ walletId, chains, sendChainId = 'evm:1', sendDecimals = 18, onSent, theme }: WalletWidgetProps): ReactElement {\n const base = useTheme();\n const t = { ...base, ...theme };\n const [tab, setTab] = useState<Tab>('assets');\n const wallet = useWallet(walletId);\n const address = wallet.data?.address;\n\n const s = useMemo(() => styles(t), [t]);\n\n const tabs: Array<[Tab, string]> = [\n ['assets', 'Assets'],\n ['receive', 'Receive'],\n ['send', 'Send'],\n ['activity', 'Activity'],\n ];\n\n return h(\n 'div',\n { style: s.card, 'data-testid': 'waaskey-wallet-widget' },\n h(\n 'div',\n { style: s.tabbar },\n ...tabs.map(([id, label]) => h('button', { key: id, type: 'button', onClick: () => setTab(id), style: { ...s.tab, ...(tab === id ? s.tabActive : {}) } }, label)),\n ),\n h(\n 'div',\n { style: s.body },\n tab === 'assets' && h(AssetsTab, { chains, address, loading: wallet.loading, s }),\n tab === 'receive' && h(ReceiveTab, { address, s }),\n tab === 'send' && h(SendTab, { walletId, sendChainId, sendDecimals, onSent, s }),\n tab === 'activity' && h(ActivityTab, { walletId, s }),\n ),\n );\n}\n\nfunction AssetsTab({ chains, address, loading, s }: { chains: Chain[]; address?: string; loading: boolean; s: Styles }): ReactElement {\n const { data, error, loading: balLoading } = useBalances(chains, address);\n if (loading || balLoading) return h('div', { style: s.muted }, 'Loading balances…');\n if (error) return h('div', { style: s.error, role: 'alert' }, error.message);\n if (!data || data.length === 0) return h('div', { style: s.empty }, 'No assets yet.');\n return h(\n 'ul',\n { style: s.list },\n ...data.map((b: Balance, i) =>\n h('li', { key: chains[i] ?? i, style: s.row }, h('span', { style: { fontWeight: 600 } }, chains[i] ?? ''), h('span', {}, `${b.formatted} ${b.symbol ?? ''}`.trim())),\n ),\n );\n}\n\nfunction ReceiveTab({ address, s }: { address?: string; s: Styles }): ReactElement {\n const qr = useQrCode(address);\n if (!address) return h('div', { style: s.muted }, 'Address not available yet.');\n return h(\n 'div',\n { style: { textAlign: 'center' } },\n qr ? h('img', { src: qr, alt: 'Wallet address QR', width: 192, height: 192, style: { borderRadius: 8 } }) : null,\n h('div', { style: { ...s.muted, marginTop: 12, wordBreak: 'break-all', fontFamily: 'monospace' } }, address),\n h('button', { type: 'button', style: s.secondaryButton, onClick: () => void navigator.clipboard?.writeText(address) }, 'Copy address'),\n );\n}\n\nfunction SendTab({\n walletId,\n sendChainId,\n sendDecimals,\n onSent,\n s,\n}: {\n walletId: string;\n sendChainId: string;\n sendDecimals: number;\n onSent?: (r: SendResult) => void;\n s: Styles;\n}): ReactElement {\n const { send, status, result, error, reset } = useSend(walletId);\n const [to, setTo] = useState('');\n const [amount, setAmount] = useState('');\n\n const onSubmit = (e: FormEvent): void => {\n e.preventDefault();\n if (!to.trim() || !amount.trim()) return;\n void send({ chainId: sendChainId, to: to.trim(), value: parseUnits(amount.trim(), sendDecimals) }).then((r) => onSent?.(r));\n };\n\n if (status === 'sent' && result) {\n // WaaS signs; the integrator broadcasts result.signedTx from its own node. txHash is an offline id.\n return h(\n 'div',\n { style: { textAlign: 'center' } },\n h('div', { style: { fontWeight: 600, marginBottom: 8 } }, 'Signed ✓'),\n h('div', { style: { ...s.muted, wordBreak: 'break-all', fontFamily: 'monospace' } }, result.txHash),\n h('button', { type: 'button', style: s.secondaryButton, onClick: reset }, 'Send another'),\n );\n }\n\n const pending = status === 'pending';\n return h(\n 'form',\n { onSubmit },\n h('label', { style: s.label, htmlFor: 'waaskey-send-to' }, 'Recipient'),\n h('input', { id: 'waaskey-send-to', style: s.input, placeholder: '0x…', value: to, onChange: (e: { target: HTMLInputElement }) => setTo(e.target.value), disabled: pending }),\n h('label', { style: { ...s.label, marginTop: 12 }, htmlFor: 'waaskey-send-amount' }, 'Amount'),\n h('input', {\n id: 'waaskey-send-amount',\n style: s.input,\n inputMode: 'decimal',\n placeholder: '0.0',\n value: amount,\n onChange: (e: { target: HTMLInputElement }) => setAmount(e.target.value),\n disabled: pending,\n }),\n status === 'error' && error ? h('div', { style: { ...s.error, marginTop: 8 }, role: 'alert' }, error.message) : null,\n h('button', { type: 'submit', style: s.button, disabled: pending }, pending ? 'Sending…' : 'Send'),\n );\n}\n\nfunction ActivityTab({ walletId, s }: { walletId: string; s: Styles }): ReactElement {\n const { data, error, loading } = useSignatures(walletId);\n if (loading) return h('div', { style: s.muted }, 'Loading activity…');\n if (error) return h('div', { style: s.error, role: 'alert' }, error.message);\n if (!data || data.length === 0) return h('div', { style: s.empty }, 'No signing activity yet.');\n return h(\n 'ul',\n { style: s.list },\n ...data.map((sig: Signature) =>\n h(\n 'li',\n { key: sig.id, style: s.row },\n h('span', { style: { fontFamily: 'monospace' } }, shorten(sig.txHash ?? sig.to ?? sig.digest ?? sig.kind)),\n h('span', { style: { ...s.badge, ...statusStyle(sig.status) } }, sig.status ?? sig.kind),\n ),\n ),\n );\n}\n\n/** Parse a human decimal amount into base units (no float — string math). */\nfunction parseUnits(value: string, decimals: number): string {\n const [whole, frac = ''] = value.split('.');\n const fracPadded = (frac + '0'.repeat(decimals)).slice(0, decimals);\n const combined = `${whole}${fracPadded}`.replace(/^0+(?=\\d)/, '');\n return combined === '' ? '0' : combined;\n}\n\nfunction shorten(v: string): string {\n return v.length > 14 ? `${v.slice(0, 8)}…${v.slice(-4)}` : v;\n}\n\nfunction statusStyle(status: Signature['status']): CSSProperties {\n if (status === 'signed') return { background: '#dcfce7', color: '#166534' }; // signed = terminal success (client broadcasts)\n if (status === 'failed') return { background: '#fee2e2', color: '#991b1b' };\n return { background: '#fef9c3', color: '#854d0e' }; // pending / raw sign (no status)\n}\n\ninterface Styles {\n card: CSSProperties;\n tabbar: CSSProperties;\n tab: CSSProperties;\n tabActive: CSSProperties;\n body: CSSProperties;\n list: CSSProperties;\n row: CSSProperties;\n label: CSSProperties;\n input: CSSProperties;\n button: CSSProperties;\n secondaryButton: CSSProperties;\n muted: CSSProperties;\n empty: CSSProperties;\n error: CSSProperties;\n badge: CSSProperties;\n}\n\nfunction styles(t: WaasTheme): Styles {\n return {\n card: {\n background: t.background,\n color: t.foreground,\n border: `1px solid ${t.border}`,\n borderRadius: t.radius,\n width: 340,\n maxWidth: '90vw',\n overflow: 'hidden',\n fontSize: 14,\n fontFamily: t.fontFamily,\n },\n tabbar: { display: 'flex', borderBottom: `1px solid ${t.border}` },\n tab: { flex: 1, padding: '10px 8px', background: 'none', border: 'none', color: t.muted, cursor: 'pointer', fontSize: 13 },\n tabActive: { color: t.accent, fontWeight: 600, boxShadow: `inset 0 -2px 0 ${t.accent}` },\n body: { padding: 16, minHeight: 160 },\n list: { listStyle: 'none', margin: 0, padding: 0 },\n row: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', padding: '8px 0', borderBottom: `1px solid ${t.border}` },\n label: { display: 'block', fontSize: 13, color: t.muted },\n input: { width: '100%', boxSizing: 'border-box', padding: '10px 12px', border: `1px solid ${t.border}`, borderRadius: 8, fontSize: 14, marginTop: 6 },\n button: {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n marginTop: 16,\n cursor: 'pointer',\n },\n secondaryButton: { padding: '8px 14px', background: 'none', color: t.accent, border: `1px solid ${t.accent}`, borderRadius: 8, fontSize: 13, marginTop: 12, cursor: 'pointer' },\n muted: { color: t.muted },\n empty: { color: t.muted, textAlign: 'center', padding: '24px 0' },\n error: { color: t.danger, fontSize: 13 },\n badge: { fontSize: 12, padding: '2px 8px', borderRadius: 999 },\n };\n}\n","import { createElement as h, useCallback, useRef, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useTheme } from './theme-context';\nimport type { SendParams, SendResult } from '@waaskey/sdk';\nimport type { CSSProperties, ReactElement } from 'react';\n\n/** A signature/approval request the app raises for the user to confirm. */\nexport type SignRequest = { kind: 'sign'; walletId: string; digest: string; title?: string } | { kind: 'send'; walletId: string; tx: SendParams; title?: string };\n\n/** What a confirmed request resolves to — a signature hex (`sign`) or the broadcast result (`send`). */\nexport type SignOutcome = string | SendResult;\n\ntype Status = 'idle' | 'pending' | 'error';\ninterface Deferred {\n resolve: (outcome: SignOutcome) => void;\n reject: (reason: Error) => void;\n}\n\n/**\n * Promise-based signing/approval prompt (#15) — the Privy \"confirm transaction\" modal.\n *\n * `requestSignature(req)` opens the prompt and resolves when the user approves (after the MPC\n * sign/broadcast completes), or rejects when they cancel. Render the returned `prompt` element\n * once near the app root. The approval drives the real action over the relay; an error is\n * recoverable (retry/cancel), never an indefinite spinner.\n */\nexport function useSignPrompt(): { requestSignature: (req: SignRequest) => Promise<SignOutcome>; prompt: ReactElement | null } {\n const waaskey = useWaaskey();\n const [req, setReq] = useState<SignRequest>();\n const [status, setStatus] = useState<Status>('idle');\n const [error, setError] = useState<Error>();\n const deferred = useRef<Deferred | undefined>(undefined);\n\n const requestSignature = useCallback((next: SignRequest): Promise<SignOutcome> => {\n setReq(next);\n setStatus('idle');\n setError(undefined);\n return new Promise<SignOutcome>((resolve, reject) => {\n deferred.current = { resolve, reject };\n });\n }, []);\n\n const close = useCallback((): void => {\n setReq(undefined);\n setStatus('idle');\n setError(undefined);\n deferred.current = undefined;\n }, []);\n\n const approve = useCallback(async (): Promise<void> => {\n if (!req || !deferred.current) return;\n setStatus('pending');\n setError(undefined);\n try {\n const wallet = await waaskey.wallets.get(req.walletId);\n const outcome: SignOutcome = req.kind === 'sign' ? await wallet.sign(req.digest) : await wallet.send(req.tx);\n deferred.current.resolve(outcome);\n close();\n } catch (e) {\n // Recoverable: keep the prompt open so the user can retry or cancel.\n setError(e as Error);\n setStatus('error');\n }\n }, [req, waaskey, close]);\n\n const reject = useCallback((): void => {\n deferred.current?.reject(new Error('Signature request rejected by user'));\n close();\n }, [close]);\n\n const prompt = req ? h(SignPrompt, { request: req, status, error, onApprove: () => void approve(), onReject: reject }) : null;\n return { requestSignature, prompt };\n}\n\nexport interface SignPromptProps {\n request: SignRequest;\n status: 'idle' | 'pending' | 'error';\n error?: Error;\n onApprove: () => void;\n onReject: () => void;\n}\n\n/** The approval modal UI (used by {@link useSignPrompt}; exported for fully custom wiring). */\nexport function SignPrompt({ request, status, error, onApprove, onReject }: SignPromptProps): ReactElement {\n const t = useTheme();\n const pending = status === 'pending';\n\n const overlay: CSSProperties = { position: 'fixed', inset: 0, background: 'rgba(0,0,0,0.4)', display: 'flex', alignItems: 'center', justifyContent: 'center', zIndex: 1000 };\n const card: CSSProperties = {\n background: t.background,\n color: t.foreground,\n borderRadius: t.radius,\n padding: 24,\n width: 360,\n maxWidth: '90vw',\n fontFamily: t.fontFamily,\n boxShadow: '0 10px 40px rgba(0,0,0,0.2)',\n };\n const rowStyle: CSSProperties = { display: 'flex', justifyContent: 'space-between', gap: 12, padding: '6px 0', borderBottom: `1px solid ${t.border}`, fontSize: 14 };\n const key: CSSProperties = { color: t.muted };\n const val: CSSProperties = { fontFamily: 'monospace', wordBreak: 'break-all', textAlign: 'right' };\n const primary: CSSProperties = {\n flex: 1,\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n cursor: 'pointer',\n };\n const secondary: CSSProperties = {\n flex: 1,\n padding: '10px 12px',\n background: 'none',\n color: t.muted,\n border: `1px solid ${t.border}`,\n borderRadius: 8,\n fontSize: 14,\n cursor: 'pointer',\n };\n\n const rows: Array<[string, string]> =\n request.kind === 'send'\n ? [\n ['Network', request.tx.chainId],\n ['To', request.tx.to],\n ['Amount', request.tx.value ?? '0'],\n ]\n : [['Message digest', request.digest]];\n\n return h(\n 'div',\n { style: overlay, role: 'dialog', 'aria-modal': true, 'aria-label': request.title ?? 'Confirm' },\n h(\n 'div',\n { style: card },\n h('strong', { style: { fontSize: 16 } }, request.title ?? (request.kind === 'send' ? 'Confirm transaction' : 'Confirm signature')),\n h('div', { style: { marginTop: 12 } }, ...rows.map(([k, v]) => h('div', { key: k, style: rowStyle }, h('span', { style: key }, k), h('span', { style: val }, v)))),\n error ? h('div', { style: { color: t.danger, fontSize: 13, marginTop: 12 }, role: 'alert' }, error.message) : null,\n h(\n 'div',\n { style: { display: 'flex', gap: 12, marginTop: 20 } },\n h('button', { type: 'button', style: secondary, onClick: onReject, disabled: pending }, 'Reject'),\n h('button', { type: 'button', style: primary, onClick: onApprove, disabled: pending }, pending ? 'Confirming…' : status === 'error' ? 'Retry' : 'Approve'),\n ),\n ),\n );\n}\n","import { createElement as h, useCallback, useState } from 'react';\nimport { useWaaskey } from './hooks';\nimport { useTheme } from './theme-context';\nimport type { CSSProperties, ReactElement } from 'react';\n\nexport interface FundWidgetProps {\n /** Wallet address the purchased crypto is delivered to. */\n walletAddress: string;\n /** Chain id, e.g. `evm:1`. */\n chainId: string;\n /** Crypto to buy. Defaults to `ETH`. */\n cryptoCurrency?: string;\n /** Fiat to pay with. */\n fiatCurrency?: string;\n /** Pre-fill the fiat amount. */\n fiatAmount?: number;\n /** Button copy. */\n label?: string;\n /** Called after the user returns from the on-ramp — a good place to refresh the balance. */\n onComplete?: () => void;\n}\n\ntype Status = 'idle' | 'loading' | 'open' | 'error';\n\n/**\n * Drop-in funding widget (#16) — buy crypto into the embedded wallet via a provider on-ramp\n * (Transak, …). Fetches a provider widget URL from the API and opens it; on return the user\n * confirms, firing `onComplete` so the host can refresh the balance. Themeable; the underlying\n * `waaskey.onramp.widgetUrl(...)` works on web + React Native (only the open step is platform UI).\n */\nexport function FundWidget({ walletAddress, chainId, cryptoCurrency = 'ETH', fiatCurrency, fiatAmount, label = 'Add funds', onComplete }: FundWidgetProps): ReactElement {\n const waaskey = useWaaskey();\n const t = useTheme();\n const [status, setStatus] = useState<Status>('idle');\n const [error, setError] = useState<Error>();\n const [provider, setProvider] = useState<string>();\n\n const launch = useCallback(async (): Promise<void> => {\n setStatus('loading');\n setError(undefined);\n try {\n const { url, provider: p } = await waaskey.onramp.widgetUrl({ walletAddress, cryptoCurrency, chainId, fiatCurrency, fiatAmount });\n setProvider(p);\n window.open(url, '_blank', 'noopener,noreferrer');\n setStatus('open');\n } catch (e) {\n setError(e as Error);\n setStatus('error');\n }\n }, [waaskey, walletAddress, cryptoCurrency, chainId, fiatCurrency, fiatAmount]);\n\n const done = useCallback((): void => {\n setStatus('idle');\n onComplete?.();\n }, [onComplete]);\n\n const button: CSSProperties = {\n width: '100%',\n padding: '10px 12px',\n background: t.accent,\n color: t.accentForeground,\n border: 'none',\n borderRadius: 8,\n fontSize: 14,\n fontWeight: 600,\n cursor: status === 'loading' ? 'default' : 'pointer',\n opacity: status === 'loading' ? 0.6 : 1,\n fontFamily: t.fontFamily,\n };\n const secondary: CSSProperties = { ...button, background: 'none', color: t.accent, border: `1px solid ${t.accent}`, marginTop: 10 };\n\n if (status === 'open') {\n return h(\n 'div',\n { style: { fontFamily: t.fontFamily, color: t.foreground, textAlign: 'center' } },\n h('div', { style: { fontSize: 14 } }, `Complete your purchase in the ${provider ?? 'provider'} window.`),\n h('button', { type: 'button', style: secondary, onClick: done }, \"I've finished\"),\n );\n }\n\n return h(\n 'div',\n { style: { fontFamily: t.fontFamily } },\n h('button', { type: 'button', style: button, onClick: () => void launch(), disabled: status === 'loading' }, status === 'loading' ? 'Opening…' : label),\n status === 'error' && error ? h('div', { style: { color: t.danger, fontSize: 13, marginTop: 8 }, role: 'alert' }, error.message) : null,\n );\n}\n"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@waaskey/react",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "React hooks + provider for the WAASKey SDK — non-custodial MPC wallets.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Waaskey",
|
|
7
|
+
"homepage": "https://waaskey.com",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/Next-Vector/waas-sdk.git",
|
|
11
|
+
"directory": "packages/react"
|
|
12
|
+
},
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/Next-Vector/waas-sdk/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"waaskey",
|
|
18
|
+
"react",
|
|
19
|
+
"hooks",
|
|
20
|
+
"wallet",
|
|
21
|
+
"mpc",
|
|
22
|
+
"non-custodial",
|
|
23
|
+
"embedded-wallet"
|
|
24
|
+
],
|
|
25
|
+
"type": "module",
|
|
26
|
+
"main": "./dist/index.cjs",
|
|
27
|
+
"module": "./dist/index.js",
|
|
28
|
+
"types": "./dist/index.d.ts",
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
32
|
+
"import": "./dist/index.js",
|
|
33
|
+
"require": "./dist/index.cjs"
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"files": [
|
|
37
|
+
"dist",
|
|
38
|
+
"README.md",
|
|
39
|
+
"LICENSE"
|
|
40
|
+
],
|
|
41
|
+
"sideEffects": false,
|
|
42
|
+
"engines": {
|
|
43
|
+
"node": ">=22"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"peerDependencies": {
|
|
49
|
+
"react": ">=18",
|
|
50
|
+
"qrcode": "^1.5.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependenciesMeta": {
|
|
53
|
+
"qrcode": {
|
|
54
|
+
"optional": true
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"@waaskey/sdk": "0.1.0"
|
|
59
|
+
},
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@testing-library/react": "^16.1.0",
|
|
62
|
+
"@types/node": "^26.1.1",
|
|
63
|
+
"@types/qrcode": "^1.5.6",
|
|
64
|
+
"@types/react": "^19.0.0",
|
|
65
|
+
"jsdom": "^29.1.1",
|
|
66
|
+
"qrcode": "^1.5.4",
|
|
67
|
+
"react": "^19.0.0",
|
|
68
|
+
"react-dom": "^19.0.0",
|
|
69
|
+
"tsup": "^8.5.1",
|
|
70
|
+
"typescript": "^6.0.3",
|
|
71
|
+
"vitest": "^4.1.10"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "tsup",
|
|
75
|
+
"start": "tsup --watch",
|
|
76
|
+
"types": "tsc --noEmit",
|
|
77
|
+
"test:unit": "vitest run"
|
|
78
|
+
}
|
|
79
|
+
}
|