@yeying-community/web3-bs 1.0.3 → 1.0.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"web3-bs.esm.js","sources":["../src/auth/provider.ts","../src/auth/siwe.ts","../src/auth/ucan.ts","../src/storage/webdav.ts","../src/dapp.ts"],"sourcesContent":["import {\n Eip1193Provider,\n Eip6963ProviderDetail,\n ProviderDiscoveryOptions,\n ProviderInfo,\n RequestAccountsOptions,\n} from './types';\n\nconst YEYING_RDNS = 'io.github.yeying';\nconst DEFAULT_TIMEOUT = 1000;\n\nfunction getWindowEthereum(): Eip1193Provider | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { ethereum?: Eip1193Provider }).ethereum || null;\n}\n\nexport function isYeYingProvider(provider?: Eip1193Provider | null, info?: ProviderInfo): boolean {\n if (!provider) return false;\n if (provider.isYeYing) return true;\n const name = (info?.name || '').toLowerCase();\n const rdns = (info?.rdns || '').toLowerCase();\n return rdns === YEYING_RDNS || name.includes('yeying');\n}\n\nfunction selectBestProvider(\n candidates: Eip6963ProviderDetail[],\n preferYeYing: boolean\n): Eip1193Provider | null {\n if (candidates.length === 0) return null;\n if (preferYeYing) {\n const yeying = candidates.find(c => isYeYingProvider(c.provider, c.info));\n if (yeying) return yeying.provider;\n }\n return candidates[0].provider;\n}\n\nexport async function getProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider | null> {\n const preferYeYing = options.preferYeYing !== false;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT;\n const windowProvider = getWindowEthereum();\n\n if (preferYeYing && isYeYingProvider(windowProvider)) {\n return windowProvider;\n }\n\n if (typeof window === 'undefined') {\n return windowProvider;\n }\n\n const discovered: Eip6963ProviderDetail[] = [];\n let resolved = false;\n\n return await new Promise(resolve => {\n const cleanup = () => {\n window.removeEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.removeEventListener('ethereum#initialized', onEthereumInitialized as EventListener);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const safeResolve = (provider: Eip1193Provider | null) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n resolve(provider);\n };\n\n const onAnnounce = (event: Event) => {\n const detail = (event as CustomEvent<Eip6963ProviderDetail>).detail;\n if (!detail?.provider) return;\n discovered.push(detail);\n\n if (preferYeYing && isYeYingProvider(detail.provider, detail.info)) {\n safeResolve(detail.provider);\n }\n };\n\n const onEthereumInitialized = () => {\n const injected = getWindowEthereum();\n if (preferYeYing && isYeYingProvider(injected)) {\n safeResolve(injected);\n }\n };\n\n window.addEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.addEventListener('ethereum#initialized', onEthereumInitialized as EventListener, { once: true });\n\n const timeoutId = setTimeout(() => {\n if (resolved) return;\n const best =\n selectBestProvider(discovered, preferYeYing) ||\n windowProvider ||\n getWindowEthereum();\n safeResolve(best || null);\n }, timeoutMs);\n\n try {\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n } catch {\n // Ignore if browser doesn't support CustomEvent target\n }\n\n if (!preferYeYing && windowProvider) {\n safeResolve(windowProvider);\n }\n });\n}\n\nexport async function requireProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider> {\n const provider = await getProvider(options);\n if (!provider) {\n throw new Error('No injected wallet provider found');\n }\n return provider;\n}\n\nexport async function requestAccounts(\n options: RequestAccountsOptions = {}\n): Promise<string[]> {\n const provider = options.provider || (await requireProvider());\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getAccounts(provider?: Eip1193Provider): Promise<string[]> {\n const p = provider || (await requireProvider());\n const accounts = (await p.request({ method: 'eth_accounts' })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getChainId(provider?: Eip1193Provider): Promise<string | null> {\n const p = provider || (await requireProvider());\n const chainId = (await p.request({ method: 'eth_chainId' })) as string;\n return typeof chainId === 'string' ? chainId : null;\n}\n\nexport async function getBalance(\n provider?: Eip1193Provider,\n address?: string,\n blockTag: string = 'latest'\n): Promise<string> {\n const p = provider || (await requireProvider());\n let target = address;\n if (!target) {\n const accounts = await getAccounts(p);\n target = accounts[0];\n }\n if (!target) {\n throw new Error('No account available for balance');\n }\n\n const balance = (await p.request({\n method: 'eth_getBalance',\n params: [target, blockTag],\n })) as string;\n if (typeof balance !== 'string') {\n throw new Error('Invalid balance response');\n }\n return balance;\n}\n\nexport function onAccountsChanged(\n provider: Eip1193Provider,\n handler: (accounts: string[]) => void\n): () => void {\n provider.on?.('accountsChanged', handler);\n return () => provider.removeListener?.('accountsChanged', handler);\n}\n\nexport function onChainChanged(\n provider: Eip1193Provider,\n handler: (chainId: string) => void\n): () => void {\n provider.on?.('chainChanged', handler);\n return () => provider.removeListener?.('chainChanged', handler);\n}\n","import { getAccounts, requireProvider } from './provider';\nimport {\n AuthBaseOptions,\n AuthFetchOptions,\n AuthTokenResult,\n Eip1193Provider,\n LoginWithChallengeOptions,\n LogoutOptions,\n RefreshAccessTokenOptions,\n SignMessageOptions,\n} from './types';\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const trimmed = path.replace(/^\\/+/, '');\n return `${normalizeBaseUrl(baseUrl)}/${trimmed}`;\n}\n\nconst DEFAULT_TOKEN_KEY = 'authToken';\nlet cachedAccessToken: string | null = null;\nlet refreshInFlight: Promise<AuthTokenResult> | null = null;\n\nfunction resolveTokenKey(options?: AuthBaseOptions): string {\n return options?.tokenStorageKey || DEFAULT_TOKEN_KEY;\n}\n\nfunction shouldStoreToken(options?: AuthBaseOptions): boolean {\n return options?.storeToken !== false;\n}\n\nfunction resolveFetcher(options?: AuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: AuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction readStoredToken(options?: AuthBaseOptions): string | null {\n if (!shouldStoreToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistToken(token: string | null, options?: AuthBaseOptions): void {\n cachedAccessToken = token;\n if (!shouldStoreToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nexport function getAccessToken(options?: AuthBaseOptions): string | null {\n if (cachedAccessToken) return cachedAccessToken;\n const stored = readStoredToken(options);\n if (stored) {\n cachedAccessToken = stored;\n }\n return stored;\n}\n\nexport function setAccessToken(token: string | null, options?: AuthBaseOptions): void {\n persistToken(token, options);\n}\n\nexport function clearAccessToken(options?: AuthBaseOptions): void {\n cachedAccessToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n localStorage.removeItem(key);\n}\n\nasync function resolveAddress(\n provider: Eip1193Provider,\n address?: string\n): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) {\n throw new Error('No account available');\n }\n return accounts[0];\n}\n\nfunction extractChallenge(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.challenge;\n if (typeof value === 'string') return value;\n }\n const direct = data.challenge || data.result;\n if (typeof direct === 'string') return direct;\n if (direct && typeof direct === 'object') {\n const nested = (direct as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nfunction extractToken(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.token;\n if (typeof value === 'string') return value;\n }\n const direct = data.token || data.result;\n if (typeof direct === 'string') return direct;\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyToken = body.token;\n if (typeof bodyToken === 'string') return bodyToken;\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).token;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nexport async function signMessage(options: SignMessageOptions): Promise<string> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const method = options.method || 'personal_sign';\n\n const params =\n method === 'eth_sign'\n ? [address, options.message]\n : [options.message, address];\n\n const signature = await provider.request({\n method,\n params,\n });\n\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n\n return signature;\n}\n\nexport async function loginWithChallenge(\n options: LoginWithChallengeOptions = {}\n): Promise<{\n token: string;\n address: string;\n signature: string;\n challenge: string;\n response: unknown;\n}> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const challengeUrl = joinUrl(baseUrl, options.challengePath || 'challenge');\n const verifyUrl = joinUrl(baseUrl, options.verifyPath || 'verify');\n\n const challengeBody = {\n address,\n };\n\n const challengeRes = await fetcher(challengeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(challengeBody),\n });\n\n if (!challengeRes.ok) {\n const text = await challengeRes.text();\n throw new Error(`Challenge request failed: ${challengeRes.status} ${text}`);\n }\n\n const challengePayload = await challengeRes.json();\n const challenge = extractChallenge(challengePayload);\n if (!challenge) {\n throw new Error('Challenge response missing challenge');\n }\n\n const signature = await signMessage({\n provider,\n address,\n message: challenge,\n method: options.signMethod || 'personal_sign',\n });\n\n const verifyBody = {\n address,\n signature,\n };\n\n const verifyRes = await fetcher(verifyUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(verifyBody),\n });\n\n if (!verifyRes.ok) {\n const text = await verifyRes.text();\n throw new Error(`Verify request failed: ${verifyRes.status} ${text}`);\n }\n\n const verifyPayload = await verifyRes.json();\n const token = extractToken(verifyPayload);\n if (!token) {\n throw new Error('Verify response missing token');\n }\n\n persistToken(token, options);\n\n return {\n token,\n address,\n signature,\n challenge,\n response: verifyPayload,\n };\n}\n\nexport async function refreshAccessToken(\n options: RefreshAccessTokenOptions = {}\n): Promise<AuthTokenResult> {\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n const task = (async () => {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const refreshUrl = joinUrl(baseUrl, options.refreshPath || 'refresh');\n\n const refreshRes = await fetcher(refreshUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!refreshRes.ok) {\n const text = await refreshRes.text();\n throw new Error(`Refresh request failed: ${refreshRes.status} ${text}`);\n }\n\n const refreshPayload = await refreshRes.json();\n const token = extractToken(refreshPayload);\n if (!token) {\n throw new Error('Refresh response missing token');\n }\n\n persistToken(token, options);\n\n return { token, response: refreshPayload };\n })();\n\n refreshInFlight = task;\n try {\n return await task;\n } finally {\n refreshInFlight = null;\n }\n}\n\nexport async function logout(options: LogoutOptions = {}): Promise<{ response: unknown }> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const logoutUrl = joinUrl(baseUrl, options.logoutPath || 'logout');\n\n const logoutRes = await fetcher(logoutUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!logoutRes.ok) {\n const text = await logoutRes.text();\n throw new Error(`Logout request failed: ${logoutRes.status} ${text}`);\n }\n\n let payload: unknown = null;\n try {\n payload = await logoutRes.json();\n } catch {\n payload = null;\n }\n\n clearAccessToken(options);\n\n return { response: payload };\n}\n\nexport async function authFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const retryOnUnauthorized = options.retryOnUnauthorized !== false;\n\n const performRequest = async (tokenOverride?: string | null): Promise<Response> => {\n const headers = new Headers(init.headers || {});\n const token = tokenOverride ?? options.accessToken ?? getAccessToken(options);\n if (token && !headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n return fetcher(input, {\n ...init,\n headers,\n credentials,\n });\n };\n\n const initialRes = await performRequest();\n if (initialRes.status !== 401 || !retryOnUnauthorized) {\n return initialRes;\n }\n\n try {\n const refreshed = await refreshAccessToken(options);\n return await performRequest(refreshed.token);\n } catch {\n return initialRes;\n }\n}\n","import { getAccounts, getChainId, getProvider, requireProvider } from './provider';\nimport { Eip1193Provider } from './types';\n\nexport type UcanCapability = {\n resource: string;\n action: string;\n};\n\nexport type UcanRootProof = {\n type: 'siwe';\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n siwe: {\n message: string;\n signature: string;\n };\n};\n\nexport type UcanProof = UcanRootProof | string;\n\nexport type UcanTokenPayload = {\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n prf: UcanProof[];\n};\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n signer?: (signingInput: string, payload: UcanTokenPayload) => Promise<string>;\n privateKey?: CryptoKey;\n};\n\nexport type CreateUcanSessionOptions = {\n id?: string;\n expiresInMs?: number;\n forceNew?: boolean;\n provider?: Eip1193Provider;\n};\n\nexport type CreateRootUcanOptions = {\n provider?: Eip1193Provider;\n address?: string;\n session?: UcanSessionKey;\n sessionId?: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n domain?: string;\n uri?: string;\n chainId?: string;\n statement?: string;\n nonce?: string;\n notBeforeMs?: number;\n};\n\nexport type CreateUcanTokenOptions = {\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n audience: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n notBeforeMs?: number;\n proofs?: UcanProof[];\n};\n\nexport type UcanFetchOptions = {\n ucan?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n proofs?: UcanProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n};\n\nconst DEFAULT_SESSION_ID = 'default';\nconst DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;\nconst DEFAULT_UCAN_TTL = 5 * 60 * 1000;\nconst DB_NAME = 'yeying-web3';\nconst DB_STORE = 'ucan-sessions';\n\nconst textEncoder = new TextEncoder();\n\nfunction toBase64Url(data: Uint8Array | ArrayBuffer): string {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction encodeJson(value: unknown): string {\n return toBase64Url(textEncoder.encode(JSON.stringify(value)));\n}\n\nfunction randomNonce(bytes = 16): string {\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return Array.from(buffer)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction normalizeExpiry(exp: number | undefined, fallbackMs: number): number {\n if (typeof exp === 'number' && !Number.isNaN(exp)) return exp;\n return Date.now() + fallbackMs;\n}\n\n\nfunction openDb(): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(DB_STORE)) {\n db.createObjectStore(DB_STORE, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function readSessionRecord(id: string): Promise<UcanSessionRecord | null> {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readonly');\n const store = tx.objectStore(DB_STORE);\n const request = store.get(id);\n request.onsuccess = () => resolve((request.result as UcanSessionRecord) || null);\n request.onerror = () => reject(request.error);\n });\n } catch {\n return null;\n }\n}\n\nasync function writeSessionRecord(record: UcanSessionRecord): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.put(record);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nasync function deleteSessionRecord(id: string): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.delete(id);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nexport async function getUcanSession(\n id: string = DEFAULT_SESSION_ID,\n provider?: Eip1193Provider\n): Promise<UcanSessionKey | null> {\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!walletProvider) return null;\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return null;\n }\n}\n\nasync function requestWalletUcanSession(\n provider: Eip1193Provider,\n options: CreateUcanSessionOptions\n): Promise<UcanSessionKey> {\n const sessionId = options.id || DEFAULT_SESSION_ID;\n const result = (await provider.request({\n method: 'yeying_ucan_session',\n params: [\n {\n sessionId,\n expiresInMs: options.expiresInMs,\n forceNew: options.forceNew,\n },\n ],\n })) as {\n id?: string;\n did?: string;\n createdAt?: number;\n expiresAt?: number | null;\n };\n\n if (!result || typeof result.did !== 'string') {\n throw new Error('Invalid wallet UCAN session response');\n }\n\n const createdAt = typeof result.createdAt === 'number' ? result.createdAt : Date.now();\n const expiresAt = typeof result.expiresAt === 'number' ? result.expiresAt : null;\n const existing = await readSessionRecord(sessionId);\n const nextRecord: UcanSessionRecord = {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n root: existing?.root,\n };\n if (nextRecord.root && nextRecord.root.aud && nextRecord.root.aud !== nextRecord.did) {\n nextRecord.root = undefined;\n }\n await writeSessionRecord(nextRecord);\n\n return {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n signer: async (signingInput: string, payload: UcanTokenPayload) => {\n const signatureResult = (await provider.request({\n method: 'yeying_ucan_sign',\n params: [\n {\n sessionId,\n signingInput,\n payload,\n },\n ],\n })) as { signature?: string } | string;\n\n if (typeof signatureResult === 'string') {\n return signatureResult;\n }\n if (signatureResult && typeof signatureResult.signature === 'string') {\n return signatureResult.signature;\n }\n throw new Error('Invalid wallet UCAN signature response');\n },\n };\n}\n\nexport async function createUcanSession(\n options: CreateUcanSessionOptions = {}\n): Promise<UcanSessionKey> {\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!provider) {\n throw new Error('No wallet provider for UCAN session');\n }\n return await requestWalletUcanSession(provider, options);\n}\n\nexport async function clearUcanSession(id: string = DEFAULT_SESSION_ID): Promise<void> {\n await deleteSessionRecord(id);\n}\n\nexport async function storeUcanRoot(\n root: UcanRootProof,\n id: string = DEFAULT_SESSION_ID\n): Promise<void> {\n const record = await readSessionRecord(id);\n const createdAt = record?.createdAt ?? Date.now();\n const expiresAt = record?.expiresAt ?? null;\n const did = record?.did || root.aud;\n const nextRecord: UcanSessionRecord = {\n id,\n did,\n createdAt,\n expiresAt,\n root,\n };\n await writeSessionRecord(nextRecord);\n}\n\nexport async function getStoredUcanRoot(id: string = DEFAULT_SESSION_ID): Promise<UcanRootProof | null> {\n const record = await readSessionRecord(id);\n return record?.root || null;\n}\n\nfunction capsEqual(a: UcanCapability[] | undefined, b: UcanCapability[] | undefined): boolean {\n return JSON.stringify(a || []) === JSON.stringify(b || []);\n}\n\nfunction isRootExpired(root: UcanRootProof, nowMs: number): boolean {\n return Boolean(root.exp && nowMs > root.exp);\n}\n\nexport async function getOrCreateUcanRoot(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const nowMs = Date.now();\n const stored = await getStoredUcanRoot(session.id);\n if (\n stored &&\n (!stored.aud || stored.aud === session.did) &&\n capsEqual(stored.cap, options.capabilities) &&\n !isRootExpired(stored, nowMs)\n ) {\n return stored;\n }\n\n return await createRootUcan({ ...options, provider, session });\n}\n\nfunction buildUcanStatement(payload: Record<string, unknown>): string {\n return `UCAN-AUTH ${JSON.stringify(payload)}`;\n}\n\nfunction buildSiweMessage(params: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: string;\n nonce: string;\n issuedAt: string;\n expirationTime?: string;\n}): string {\n const lines = [\n `${params.domain} wants you to sign in with your Ethereum account:`,\n params.address,\n '',\n params.statement,\n '',\n `URI: ${params.uri}`,\n 'Version: 1',\n `Chain ID: ${params.chainId}`,\n `Nonce: ${params.nonce}`,\n `Issued At: ${params.issuedAt}`,\n ];\n if (params.expirationTime) {\n lines.push(`Expiration Time: ${params.expirationTime}`);\n }\n return lines.join('\\n');\n}\n\nasync function resolveAddress(provider: Eip1193Provider, address?: string): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) throw new Error('No account available');\n return accounts[0];\n}\n\nasync function signWithProvider(\n provider: Eip1193Provider,\n address: string,\n message: string\n): Promise<string> {\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, address],\n });\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n return signature;\n}\n\nexport async function createRootUcan(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const address = await resolveAddress(provider, options.address);\n const chainId = options.chainId || (await getChainId(provider)) || '1';\n const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : 'localhost');\n const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://localhost');\n const nonce = options.nonce || randomNonce(8);\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const nbf = options.notBeforeMs;\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: options.capabilities,\n exp,\n };\n if (nbf) statementPayload.nbf = nbf;\n\n const statement = options.statement || buildUcanStatement(statementPayload);\n const issuedAt = new Date().toISOString();\n const expirationTime = new Date(exp).toISOString();\n const message = buildSiweMessage({\n domain,\n address,\n statement,\n uri,\n chainId,\n nonce,\n issuedAt,\n expirationTime,\n });\n\n const signature = await signWithProvider(provider, address, message);\n\n const root: UcanRootProof = {\n type: 'siwe',\n iss: `did:pkh:eth:${address.toLowerCase()}`,\n aud: session.did,\n cap: options.capabilities,\n exp,\n nbf,\n siwe: {\n message,\n signature,\n },\n };\n\n await storeUcanRoot(root, session.id);\n\n return root;\n}\n\nasync function signUcanPayload(payload: UcanTokenPayload, session: UcanSessionKey): Promise<string> {\n const header = { alg: 'EdDSA', typ: 'UCAN' };\n const headerB64 = encodeJson(header);\n const payloadB64 = encodeJson(payload);\n const signingInput = `${headerB64}.${payloadB64}`;\n let signatureB64: string;\n\n if (session.signer) {\n signatureB64 = await session.signer(signingInput, payload);\n } else {\n if (!session.privateKey) {\n throw new Error('Missing UCAN session key');\n }\n const data = textEncoder.encode(signingInput);\n const signature = await crypto.subtle.sign('Ed25519', session.privateKey, data);\n signatureB64 = toBase64Url(signature);\n }\n return `${headerB64}.${payloadB64}.${signatureB64}`;\n}\n\nasync function resolveProofs(\n options: CreateUcanTokenOptions,\n issuer?: UcanSessionKey\n): Promise<UcanProof[]> {\n if (options.proofs && options.proofs.length > 0) return options.proofs;\n const stored = await getStoredUcanRoot(options.sessionId || DEFAULT_SESSION_ID);\n if (!stored) {\n throw new Error('Missing UCAN proof chain');\n }\n if (issuer?.did && stored.aud && stored.aud !== issuer.did) {\n throw new Error('UCAN root audience mismatch');\n }\n return [stored];\n}\n\nexport async function createDelegationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function createInvocationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function authUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: UcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = options.fetcher || fetch;\n let token = options.ucan;\n if (!token) {\n if (!options.audience || !options.capabilities) {\n throw new Error('Missing UCAN audience or capabilities');\n }\n token = await createInvocationUcan({\n issuer: options.issuer,\n sessionId: options.sessionId,\n provider: options.provider,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n proofs: options.proofs,\n });\n }\n\n const headers = new Headers(init.headers || {});\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetcher(input, {\n ...init,\n headers,\n });\n}\n","export type WebDavAuth =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string };\n\nexport type WebDavClientOptions = {\n baseUrl: string;\n prefix?: string;\n auth?: WebDavAuth;\n token?: string;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type WebDavRequestOptions = {\n headers?: Record<string, string>;\n auth?: WebDavAuth;\n token?: string;\n depth?: number | 'infinity';\n overwrite?: boolean;\n contentType?: string;\n signal?: AbortSignal;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix || prefix === '/') return '';\n let next = prefix.startsWith('/') ? prefix : `/${prefix}`;\n next = next.replace(/\\/+$/, '');\n return next;\n}\n\nfunction normalizePath(path: string): string {\n if (!path || path === '/') return '/';\n const next = path.startsWith('/') ? path : `/${path}`;\n return encodeURI(next);\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const base = normalizeBaseUrl(baseUrl);\n const suffix = path.startsWith('/') ? path : `/${path}`;\n return `${base}${suffix}`;\n}\n\nfunction resolveAuthHeader(auth?: WebDavAuth, token?: string): string | null {\n if (auth?.type === 'bearer') {\n return `Bearer ${auth.token}`;\n }\n if (auth?.type === 'basic') {\n const raw = `${auth.username}:${auth.password}`;\n return `Basic ${btoa(raw)}`;\n }\n if (token) {\n return `Bearer ${token}`;\n }\n return null;\n}\n\nexport class WebDavClient {\n private baseUrl: string;\n private prefix: string;\n private auth?: WebDavAuth;\n private token?: string;\n private fetcher: typeof fetch;\n private credentials?: RequestCredentials;\n\n constructor(options: WebDavClientOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.prefix = normalizePrefix(options.prefix);\n this.auth = options.auth;\n this.token = options.token;\n this.fetcher = options.fetcher || ((input, init) => fetch(input, init));\n this.credentials = options.credentials;\n }\n\n setToken(token: string | null) {\n this.token = token || undefined;\n }\n\n setAuth(auth?: WebDavAuth) {\n this.auth = auth;\n }\n\n private buildUrl(path: string): string {\n const webdavPath = `${this.prefix}${normalizePath(path)}`;\n return `${this.baseUrl}${webdavPath}`;\n }\n\n private buildHeaders(options?: WebDavRequestOptions): Headers {\n const headers = new Headers(options?.headers || {});\n const authHeader = resolveAuthHeader(options?.auth || this.auth, options?.token || this.token);\n if (authHeader) {\n headers.set('Authorization', authHeader);\n }\n if (options?.depth !== undefined) {\n headers.set('Depth', String(options.depth));\n }\n if (typeof options?.overwrite === 'boolean') {\n headers.set('Overwrite', options.overwrite ? 'T' : 'F');\n }\n if (options?.contentType) {\n headers.set('Content-Type', options.contentType);\n }\n return headers;\n }\n\n async request(\n method: string,\n path: string,\n body?: BodyInit | null,\n options: WebDavRequestOptions = {}\n ): Promise<Response> {\n const response = await this.fetcher(this.buildUrl(path), {\n method,\n headers: this.buildHeaders(options),\n body: body ?? undefined,\n credentials: this.credentials,\n signal: options.signal,\n } as RequestInit);\n\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${path} failed: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n async listDirectory(path: string = '/', depth: number | 'infinity' = 1): Promise<string> {\n const res = await this.request('PROPFIND', path, null, { depth });\n return await res.text();\n }\n\n async download(path: string): Promise<Response> {\n return await this.request('GET', path);\n }\n\n async downloadText(path: string): Promise<string> {\n const res = await this.download(path);\n return await res.text();\n }\n\n async downloadArrayBuffer(path: string): Promise<ArrayBuffer> {\n const res = await this.download(path);\n return await res.arrayBuffer();\n }\n\n async upload(path: string, content: BodyInit, contentType?: string): Promise<Response> {\n return await this.request('PUT', path, content, { contentType });\n }\n\n async createDirectory(path: string): Promise<Response> {\n return await this.request('MKCOL', path);\n }\n\n async ensureDirectory(path: string): Promise<void> {\n if (!path || path === '/') return;\n const segments = path.split('/').filter(Boolean);\n if (segments.length === 0) return;\n\n let current = '';\n for (const segment of segments) {\n current = `${current}/${segment}`;\n const res = await this.fetcher(this.buildUrl(current), {\n method: 'MKCOL',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n } as RequestInit);\n\n if (res.ok) continue;\n if (res.status === 405) continue;\n throw new Error(`WebDAV MKCOL ${current} failed: ${res.status} ${res.statusText}`);\n }\n }\n\n async remove(path: string): Promise<Response> {\n return await this.request('DELETE', path);\n }\n\n async move(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('MOVE', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async copy(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('COPY', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async getQuota(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/quota'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV quota failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async listRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/list'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle list failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async recoverRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/recover'), {\n method: 'POST',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle recover failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async deleteRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/permanent'), {\n method: 'DELETE',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle delete failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async clearRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/clear'), {\n method: 'DELETE',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle clear failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n}\n\nexport function createWebDavClient(options: WebDavClientOptions): WebDavClient {\n return new WebDavClient(options);\n}\n","import { requireProvider } from './auth/provider';\nimport { loginWithChallenge } from './auth/siwe';\nimport {\n createInvocationUcan,\n createUcanSession,\n getOrCreateUcanRoot,\n UcanCapability,\n UcanRootProof,\n UcanSessionKey,\n UcanTokenPayload,\n} from './auth/ucan';\nimport { Eip1193Provider, LoginWithChallengeOptions } from './auth/types';\nimport { createWebDavClient, WebDavClient } from './storage/webdav';\n\ntype CachedUcanToken = {\n token: string;\n exp: number;\n nbf?: number;\n};\n\nconst tokenCache = new Map<string, CachedUcanToken>();\nconst TOKEN_SKEW_MS = 5000;\n\nexport type InitWebDavStorageOptions = {\n baseUrl: string;\n audience: string;\n prefix?: string;\n appDir?: string;\n appId?: string;\n ensureAppDir?: boolean;\n capabilities?: UcanCapability[];\n invocationCapabilities?: UcanCapability[];\n provider?: Eip1193Provider;\n sessionId?: string;\n session?: UcanSessionKey;\n root?: UcanRootProof;\n rootExpiresInMs?: number;\n invocationExpiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type InitWebDavStorageResult = {\n client: WebDavClient;\n token: string;\n appDir?: string;\n session: UcanSessionKey;\n root: UcanRootProof;\n};\n\nexport type InitDappSessionOptions = {\n provider?: Eip1193Provider;\n address?: string;\n appAuth?: LoginWithChallengeOptions;\n webdav?: InitWebDavStorageOptions;\n};\n\nexport type InitDappSessionResult = {\n provider: Eip1193Provider;\n address?: string;\n appLogin?: Awaited<ReturnType<typeof loginWithChallenge>>;\n ucanSession?: UcanSessionKey;\n ucanRoot?: UcanRootProof;\n webdavClient?: WebDavClient;\n webdavToken?: string;\n webdavAppDir?: string;\n};\n\nfunction normalizeAppDir(path: string): string {\n const trimmed = path.trim();\n if (!trimmed) return '/';\n let next = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n next = next.replace(/\\/+$/, '');\n return next || '/';\n}\n\nfunction sanitizeAppId(appId: string): string {\n return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');\n}\n\nfunction resolveAppDir(options: InitWebDavStorageOptions): string | undefined {\n if (options.appDir) {\n return normalizeAppDir(options.appDir);\n }\n if (options.appId) {\n return normalizeAppDir(`/apps/${sanitizeAppId(options.appId)}`);\n }\n return undefined;\n}\n\nfunction buildCapsKey(caps: UcanCapability[]): string {\n return JSON.stringify(caps || []);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction isTokenValid(entry: CachedUcanToken, nowMs: number): boolean {\n if (!entry.exp) return false;\n if (entry.nbf && nowMs < entry.nbf) return false;\n return entry.exp - TOKEN_SKEW_MS > nowMs;\n}\n\nfunction decodeBase64Url(input: string): string | null {\n if (!input) return null;\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');\n try {\n if (typeof atob === 'function') {\n return atob(padded);\n }\n } catch {\n // ignore\n }\n try {\n const nodeBuffer = (globalThis as {\n Buffer?: { from: (input: string, encoding: string) => { toString: (encoding: string) => string } };\n }).Buffer;\n if (nodeBuffer) {\n return nodeBuffer.from(padded, 'base64').toString('utf8');\n }\n } catch {\n return null;\n }\n return null;\n}\n\nfunction decodeUcanPayload(token: string): UcanTokenPayload | null {\n const parts = token.split('.');\n if (parts.length < 2) return null;\n const decoded = decodeBase64Url(parts[1]);\n if (!decoded) return null;\n try {\n return JSON.parse(decoded) as UcanTokenPayload;\n } catch {\n return null;\n }\n}\n\nasync function getCachedInvocationToken(options: {\n issuer: UcanSessionKey;\n audience: string;\n capabilities: UcanCapability[];\n proofs: UcanRootProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n}): Promise<string> {\n const cacheKey = buildTokenCacheKey(options.issuer, options.audience, options.capabilities);\n const cached = tokenCache.get(cacheKey);\n const nowMs = Date.now();\n if (cached && isTokenValid(cached, nowMs)) {\n return cached.token;\n }\n\n const token = await createInvocationUcan({\n issuer: options.issuer,\n audience: options.audience,\n capabilities: options.capabilities,\n proofs: options.proofs,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const payload = decodeUcanPayload(token);\n if (payload && typeof payload.exp === 'number') {\n tokenCache.set(cacheKey, {\n token,\n exp: payload.exp,\n nbf: payload.nbf,\n });\n }\n\n return token;\n}\n\nexport async function initWebDavStorage(\n options: InitWebDavStorageOptions\n): Promise<InitWebDavStorageResult> {\n const caps = options.capabilities || options.root?.cap;\n if (!caps || caps.length === 0) {\n throw new Error('Missing UCAN capabilities for WebDAV');\n }\n\n const needsProvider = !options.session || !options.root;\n const provider =\n options.provider || (needsProvider ? await requireProvider() : undefined);\n\n const session =\n options.session ||\n (await createUcanSession({\n id: options.sessionId,\n provider,\n }));\n\n const nowMs = Date.now();\n let root = options.root;\n if (root && root.aud && root.aud !== session.did) {\n root = undefined;\n }\n if (root && buildCapsKey(root.cap) !== buildCapsKey(caps)) {\n root = undefined;\n }\n if (root && root.exp && nowMs > root.exp) {\n root = undefined;\n }\n\n if (!root) {\n root = await getOrCreateUcanRoot({\n provider: provider || (await requireProvider()),\n session,\n capabilities: caps,\n expiresInMs: options.rootExpiresInMs,\n });\n }\n\n const invocationCaps = options.invocationCapabilities || caps;\n\n const token = await getCachedInvocationToken({\n issuer: session,\n audience: options.audience,\n capabilities: invocationCaps,\n proofs: [root],\n expiresInMs: options.invocationExpiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const client = createWebDavClient({\n baseUrl: options.baseUrl,\n prefix: options.prefix,\n token,\n fetcher: options.fetcher,\n credentials: options.credentials,\n });\n\n const appDir = resolveAppDir(options);\n if (appDir && options.ensureAppDir !== false) {\n await client.ensureDirectory(appDir);\n }\n\n return {\n client,\n token,\n appDir,\n session,\n root,\n };\n}\n\nexport async function initDappSession(\n options: InitDappSessionOptions\n): Promise<InitDappSessionResult> {\n if (!options.appAuth && !options.webdav) {\n throw new Error('No init options provided');\n }\n\n const provider =\n options.provider ||\n options.appAuth?.provider ||\n options.webdav?.provider ||\n (await requireProvider());\n\n const result: InitDappSessionResult = {\n provider,\n address: options.address,\n };\n\n if (options.appAuth) {\n const appLogin = await loginWithChallenge({\n ...options.appAuth,\n provider: options.appAuth.provider || provider,\n address: options.appAuth.address || options.address,\n });\n result.appLogin = appLogin;\n result.address = appLogin.address;\n }\n\n if (options.webdav) {\n const webdav = await initWebDavStorage({\n ...options.webdav,\n provider: options.webdav.provider || provider,\n });\n result.ucanSession = webdav.session;\n result.ucanRoot = webdav.root;\n result.webdavClient = webdav.client;\n result.webdavToken = webdav.token;\n result.webdavAppDir = webdav.appDir;\n }\n\n return result;\n}\n"],"names":["normalizeBaseUrl","joinUrl","resolveAddress"],"mappings":"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"}
1
+ {"version":3,"file":"web3-bs.esm.js","sources":["../src/auth/provider.ts","../src/auth/siwe.ts","../src/auth/ucan.ts","../src/storage/webdav.ts","../src/dapp.ts"],"sourcesContent":["import {\n Eip1193Provider,\n Eip6963ProviderDetail,\n ProviderDiscoveryOptions,\n ProviderInfo,\n RequestAccountsOptions,\n AccountSelection,\n PreferredAccountOptions,\n WatchAccountsOptions,\n AccountsChangedHandler,\n} from './types';\n\nconst YEYING_RDNS = 'io.github.yeying';\nconst DEFAULT_TIMEOUT = 1000;\nconst DEFAULT_ACCOUNT_STORAGE_KEY = 'yeying:last_account';\n\nfunction getWindowEthereum(): Eip1193Provider | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { ethereum?: Eip1193Provider }).ethereum || null;\n}\n\nfunction readStoredAccount(storageKey: string): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n return null;\n }\n}\n\nfunction writeStoredAccount(storageKey: string, account: string | null): void {\n if (typeof localStorage === 'undefined') return;\n try {\n if (account) {\n localStorage.setItem(storageKey, account);\n } else {\n localStorage.removeItem(storageKey);\n }\n } catch {\n // ignore storage errors\n }\n}\n\nfunction selectPreferredAccount(\n accounts: string[],\n stored: string | null,\n preferStored: boolean\n): string | null {\n if (preferStored && stored && accounts.includes(stored)) {\n return stored;\n }\n return accounts[0] || null;\n}\n\nexport function isYeYingProvider(provider?: Eip1193Provider | null, info?: ProviderInfo): boolean {\n if (!provider) return false;\n if (provider.isYeYing) return true;\n const name = (info?.name || '').toLowerCase();\n const rdns = (info?.rdns || '').toLowerCase();\n return rdns === YEYING_RDNS || name.includes('yeying');\n}\n\nfunction selectBestProvider(\n candidates: Eip6963ProviderDetail[],\n preferYeYing: boolean\n): Eip1193Provider | null {\n if (candidates.length === 0) return null;\n if (preferYeYing) {\n const yeying = candidates.find(c => isYeYingProvider(c.provider, c.info));\n if (yeying) return yeying.provider;\n }\n return candidates[0].provider;\n}\n\nexport async function getProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider | null> {\n const preferYeYing = options.preferYeYing !== false;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT;\n const windowProvider = getWindowEthereum();\n\n if (preferYeYing && isYeYingProvider(windowProvider)) {\n return windowProvider;\n }\n\n if (typeof window === 'undefined') {\n return windowProvider;\n }\n\n const discovered: Eip6963ProviderDetail[] = [];\n let resolved = false;\n\n return await new Promise(resolve => {\n const cleanup = () => {\n window.removeEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.removeEventListener('ethereum#initialized', onEthereumInitialized as EventListener);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const safeResolve = (provider: Eip1193Provider | null) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n resolve(provider);\n };\n\n const onAnnounce = (event: Event) => {\n const detail = (event as CustomEvent<Eip6963ProviderDetail>).detail;\n if (!detail?.provider) return;\n discovered.push(detail);\n\n if (preferYeYing && isYeYingProvider(detail.provider, detail.info)) {\n safeResolve(detail.provider);\n }\n };\n\n const onEthereumInitialized = () => {\n const injected = getWindowEthereum();\n if (preferYeYing && isYeYingProvider(injected)) {\n safeResolve(injected);\n }\n };\n\n window.addEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.addEventListener('ethereum#initialized', onEthereumInitialized as EventListener, { once: true });\n\n const timeoutId = setTimeout(() => {\n if (resolved) return;\n const best =\n selectBestProvider(discovered, preferYeYing) ||\n windowProvider ||\n getWindowEthereum();\n safeResolve(best || null);\n }, timeoutMs);\n\n try {\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n } catch {\n // Ignore if browser doesn't support CustomEvent target\n }\n\n if (!preferYeYing && windowProvider) {\n safeResolve(windowProvider);\n }\n });\n}\n\nexport async function requireProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider> {\n const provider = await getProvider(options);\n if (!provider) {\n throw new Error('No injected wallet provider found');\n }\n return provider;\n}\n\nexport async function requestAccounts(\n options: RequestAccountsOptions = {}\n): Promise<string[]> {\n const provider = options.provider || (await requireProvider());\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getAccounts(provider?: Eip1193Provider): Promise<string[]> {\n const p = provider || (await requireProvider());\n const accounts = (await p.request({ method: 'eth_accounts' })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getChainId(provider?: Eip1193Provider): Promise<string | null> {\n const p = provider || (await requireProvider());\n const chainId = (await p.request({ method: 'eth_chainId' })) as string;\n return typeof chainId === 'string' ? chainId : null;\n}\n\nexport async function getPreferredAccount(\n options: PreferredAccountOptions = {}\n): Promise<AccountSelection> {\n const provider = options.provider || (await requireProvider());\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n let accounts = await getAccounts(provider);\n if (accounts.length === 0 && options.autoConnect) {\n accounts = await requestAccounts({ provider });\n }\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n return { account, accounts };\n}\n\nexport function watchAccounts(\n provider: Eip1193Provider,\n handler: AccountsChangedHandler,\n options: WatchAccountsOptions = {}\n): () => void {\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n return onAccountsChanged(provider, (accounts) => {\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n handler({ account, accounts });\n });\n}\n\nexport async function getBalance(\n provider?: Eip1193Provider,\n address?: string,\n blockTag: string = 'latest'\n): Promise<string> {\n const p = provider || (await requireProvider());\n let target = address;\n if (!target) {\n const accounts = await getAccounts(p);\n target = accounts[0];\n }\n if (!target) {\n throw new Error('No account available for balance');\n }\n\n const balance = (await p.request({\n method: 'eth_getBalance',\n params: [target, blockTag],\n })) as string;\n if (typeof balance !== 'string') {\n throw new Error('Invalid balance response');\n }\n return balance;\n}\n\nexport function onAccountsChanged(\n provider: Eip1193Provider,\n handler: (accounts: string[]) => void\n): () => void {\n provider.on?.('accountsChanged', handler);\n return () => provider.removeListener?.('accountsChanged', handler);\n}\n\nexport function onChainChanged(\n provider: Eip1193Provider,\n handler: (chainId: string) => void\n): () => void {\n provider.on?.('chainChanged', handler);\n return () => provider.removeListener?.('chainChanged', handler);\n}\n","import { getAccounts, requireProvider } from './provider';\nimport {\n AuthBaseOptions,\n AuthFetchOptions,\n AuthTokenResult,\n Eip1193Provider,\n LoginWithChallengeOptions,\n LogoutOptions,\n RefreshAccessTokenOptions,\n SignMessageOptions,\n} from './types';\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const trimmed = path.replace(/^\\/+/, '');\n return `${normalizeBaseUrl(baseUrl)}/${trimmed}`;\n}\n\nconst DEFAULT_TOKEN_KEY = 'authToken';\nlet cachedAccessToken: string | null = null;\nlet refreshInFlight: Promise<AuthTokenResult> | null = null;\n\nfunction resolveTokenKey(options?: AuthBaseOptions): string {\n return options?.tokenStorageKey || DEFAULT_TOKEN_KEY;\n}\n\nfunction shouldStoreToken(options?: AuthBaseOptions): boolean {\n return options?.storeToken !== false;\n}\n\nfunction resolveFetcher(options?: AuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: AuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction readStoredToken(options?: AuthBaseOptions): string | null {\n if (!shouldStoreToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistToken(token: string | null, options?: AuthBaseOptions): void {\n cachedAccessToken = token;\n if (!shouldStoreToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nexport function getAccessToken(options?: AuthBaseOptions): string | null {\n if (cachedAccessToken) return cachedAccessToken;\n const stored = readStoredToken(options);\n if (stored) {\n cachedAccessToken = stored;\n }\n return stored;\n}\n\nexport function setAccessToken(token: string | null, options?: AuthBaseOptions): void {\n persistToken(token, options);\n}\n\nexport function clearAccessToken(options?: AuthBaseOptions): void {\n cachedAccessToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n localStorage.removeItem(key);\n}\n\nasync function resolveAddress(\n provider: Eip1193Provider,\n address?: string\n): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) {\n throw new Error('No account available');\n }\n return accounts[0];\n}\n\nfunction extractChallenge(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.challenge;\n if (typeof value === 'string') return value;\n }\n const direct = data.challenge || data.result;\n if (typeof direct === 'string') return direct;\n if (direct && typeof direct === 'object') {\n const nested = (direct as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nfunction extractToken(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.token;\n if (typeof value === 'string') return value;\n }\n const direct = data.token || data.result;\n if (typeof direct === 'string') return direct;\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyToken = body.token;\n if (typeof bodyToken === 'string') return bodyToken;\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).token;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nexport async function signMessage(options: SignMessageOptions): Promise<string> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const method = options.method || 'personal_sign';\n\n const params =\n method === 'eth_sign'\n ? [address, options.message]\n : [options.message, address];\n\n const signature = await provider.request({\n method,\n params,\n });\n\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n\n return signature;\n}\n\nexport async function loginWithChallenge(\n options: LoginWithChallengeOptions = {}\n): Promise<{\n token: string;\n address: string;\n signature: string;\n challenge: string;\n response: unknown;\n}> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const challengeUrl = joinUrl(baseUrl, options.challengePath || 'challenge');\n const verifyUrl = joinUrl(baseUrl, options.verifyPath || 'verify');\n\n const challengeBody = {\n address,\n };\n\n const challengeRes = await fetcher(challengeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(challengeBody),\n });\n\n if (!challengeRes.ok) {\n const text = await challengeRes.text();\n throw new Error(`Challenge request failed: ${challengeRes.status} ${text}`);\n }\n\n const challengePayload = await challengeRes.json();\n const challenge = extractChallenge(challengePayload);\n if (!challenge) {\n throw new Error('Challenge response missing challenge');\n }\n\n const signature = await signMessage({\n provider,\n address,\n message: challenge,\n method: options.signMethod || 'personal_sign',\n });\n\n const verifyBody = {\n address,\n signature,\n };\n\n const verifyRes = await fetcher(verifyUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(verifyBody),\n });\n\n if (!verifyRes.ok) {\n const text = await verifyRes.text();\n throw new Error(`Verify request failed: ${verifyRes.status} ${text}`);\n }\n\n const verifyPayload = await verifyRes.json();\n const token = extractToken(verifyPayload);\n if (!token) {\n throw new Error('Verify response missing token');\n }\n\n persistToken(token, options);\n\n return {\n token,\n address,\n signature,\n challenge,\n response: verifyPayload,\n };\n}\n\nexport async function refreshAccessToken(\n options: RefreshAccessTokenOptions = {}\n): Promise<AuthTokenResult> {\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n const task = (async () => {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const refreshUrl = joinUrl(baseUrl, options.refreshPath || 'refresh');\n\n const refreshRes = await fetcher(refreshUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!refreshRes.ok) {\n const text = await refreshRes.text();\n throw new Error(`Refresh request failed: ${refreshRes.status} ${text}`);\n }\n\n const refreshPayload = await refreshRes.json();\n const token = extractToken(refreshPayload);\n if (!token) {\n throw new Error('Refresh response missing token');\n }\n\n persistToken(token, options);\n\n return { token, response: refreshPayload };\n })();\n\n refreshInFlight = task;\n try {\n return await task;\n } finally {\n refreshInFlight = null;\n }\n}\n\nexport async function logout(options: LogoutOptions = {}): Promise<{ response: unknown }> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const logoutUrl = joinUrl(baseUrl, options.logoutPath || 'logout');\n\n const logoutRes = await fetcher(logoutUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!logoutRes.ok) {\n const text = await logoutRes.text();\n throw new Error(`Logout request failed: ${logoutRes.status} ${text}`);\n }\n\n let payload: unknown = null;\n try {\n payload = await logoutRes.json();\n } catch {\n payload = null;\n }\n\n clearAccessToken(options);\n\n return { response: payload };\n}\n\nexport async function authFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const retryOnUnauthorized = options.retryOnUnauthorized !== false;\n\n const performRequest = async (tokenOverride?: string | null): Promise<Response> => {\n const headers = new Headers(init.headers || {});\n const token = tokenOverride ?? options.accessToken ?? getAccessToken(options);\n if (token && !headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n return fetcher(input, {\n ...init,\n headers,\n credentials,\n });\n };\n\n const initialRes = await performRequest();\n if (initialRes.status !== 401 || !retryOnUnauthorized) {\n return initialRes;\n }\n\n try {\n const refreshed = await refreshAccessToken(options);\n return await performRequest(refreshed.token);\n } catch {\n return initialRes;\n }\n}\n","import { getAccounts, getChainId, getProvider, requireProvider } from './provider';\nimport { Eip1193Provider } from './types';\n\nexport type UcanCapability = {\n resource: string;\n action: string;\n};\n\nexport type UcanRootProof = {\n type: 'siwe';\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n siwe: {\n message: string;\n signature: string;\n };\n};\n\nexport type UcanProof = UcanRootProof | string;\n\nexport type UcanTokenPayload = {\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n prf: UcanProof[];\n};\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n signer?: (signingInput: string, payload: UcanTokenPayload) => Promise<string>;\n privateKey?: CryptoKey;\n};\n\nexport type CreateUcanSessionOptions = {\n id?: string;\n expiresInMs?: number;\n forceNew?: boolean;\n provider?: Eip1193Provider;\n};\n\nexport type CreateRootUcanOptions = {\n provider?: Eip1193Provider;\n address?: string;\n session?: UcanSessionKey;\n sessionId?: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n domain?: string;\n uri?: string;\n chainId?: string;\n statement?: string;\n nonce?: string;\n notBeforeMs?: number;\n};\n\nexport type CreateUcanTokenOptions = {\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n audience: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n notBeforeMs?: number;\n proofs?: UcanProof[];\n};\n\nexport type UcanFetchOptions = {\n ucan?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n proofs?: UcanProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n};\n\nconst DEFAULT_SESSION_ID = 'default';\nconst DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;\nconst DEFAULT_UCAN_TTL = 5 * 60 * 1000;\nconst DB_NAME = 'yeying-web3';\nconst DB_STORE = 'ucan-sessions';\n\nconst textEncoder = new TextEncoder();\n\nfunction toBase64Url(data: Uint8Array | ArrayBuffer): string {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction encodeJson(value: unknown): string {\n return toBase64Url(textEncoder.encode(JSON.stringify(value)));\n}\n\nfunction randomNonce(bytes = 16): string {\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return Array.from(buffer)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction normalizeExpiry(exp: number | undefined, fallbackMs: number): number {\n if (typeof exp === 'number' && !Number.isNaN(exp)) return exp;\n return Date.now() + fallbackMs;\n}\n\n\nfunction openDb(): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(DB_STORE)) {\n db.createObjectStore(DB_STORE, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function readSessionRecord(id: string): Promise<UcanSessionRecord | null> {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readonly');\n const store = tx.objectStore(DB_STORE);\n const request = store.get(id);\n request.onsuccess = () => resolve((request.result as UcanSessionRecord) || null);\n request.onerror = () => reject(request.error);\n });\n } catch {\n return null;\n }\n}\n\nasync function writeSessionRecord(record: UcanSessionRecord): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.put(record);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nasync function deleteSessionRecord(id: string): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.delete(id);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nexport async function getUcanSession(\n id: string = DEFAULT_SESSION_ID,\n provider?: Eip1193Provider\n): Promise<UcanSessionKey | null> {\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!walletProvider) return null;\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return null;\n }\n}\n\nasync function requestWalletUcanSession(\n provider: Eip1193Provider,\n options: CreateUcanSessionOptions\n): Promise<UcanSessionKey> {\n const sessionId = options.id || DEFAULT_SESSION_ID;\n const result = (await provider.request({\n method: 'yeying_ucan_session',\n params: [\n {\n sessionId,\n expiresInMs: options.expiresInMs,\n forceNew: options.forceNew,\n },\n ],\n })) as {\n id?: string;\n did?: string;\n createdAt?: number;\n expiresAt?: number | null;\n };\n\n if (!result || typeof result.did !== 'string') {\n throw new Error('Invalid wallet UCAN session response');\n }\n\n const createdAt = typeof result.createdAt === 'number' ? result.createdAt : Date.now();\n const expiresAt = typeof result.expiresAt === 'number' ? result.expiresAt : null;\n const existing = await readSessionRecord(sessionId);\n const nextRecord: UcanSessionRecord = {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n root: existing?.root,\n };\n if (nextRecord.root && nextRecord.root.aud && nextRecord.root.aud !== nextRecord.did) {\n nextRecord.root = undefined;\n }\n await writeSessionRecord(nextRecord);\n\n return {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n signer: async (signingInput: string, payload: UcanTokenPayload) => {\n const signatureResult = (await provider.request({\n method: 'yeying_ucan_sign',\n params: [\n {\n sessionId,\n signingInput,\n payload,\n },\n ],\n })) as { signature?: string } | string;\n\n if (typeof signatureResult === 'string') {\n return signatureResult;\n }\n if (signatureResult && typeof signatureResult.signature === 'string') {\n return signatureResult.signature;\n }\n throw new Error('Invalid wallet UCAN signature response');\n },\n };\n}\n\nexport async function createUcanSession(\n options: CreateUcanSessionOptions = {}\n): Promise<UcanSessionKey> {\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!provider) {\n throw new Error('No wallet provider for UCAN session');\n }\n return await requestWalletUcanSession(provider, options);\n}\n\nexport async function clearUcanSession(id: string = DEFAULT_SESSION_ID): Promise<void> {\n await deleteSessionRecord(id);\n}\n\nexport async function storeUcanRoot(\n root: UcanRootProof,\n id: string = DEFAULT_SESSION_ID\n): Promise<void> {\n const record = await readSessionRecord(id);\n const createdAt = record?.createdAt ?? Date.now();\n const expiresAt = record?.expiresAt ?? null;\n const did = record?.did || root.aud;\n const nextRecord: UcanSessionRecord = {\n id,\n did,\n createdAt,\n expiresAt,\n root,\n };\n await writeSessionRecord(nextRecord);\n}\n\nexport async function getStoredUcanRoot(id: string = DEFAULT_SESSION_ID): Promise<UcanRootProof | null> {\n const record = await readSessionRecord(id);\n return record?.root || null;\n}\n\nfunction capsEqual(a: UcanCapability[] | undefined, b: UcanCapability[] | undefined): boolean {\n return JSON.stringify(a || []) === JSON.stringify(b || []);\n}\n\nfunction isRootExpired(root: UcanRootProof, nowMs: number): boolean {\n return Boolean(root.exp && nowMs > root.exp);\n}\n\nexport async function getOrCreateUcanRoot(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const nowMs = Date.now();\n const stored = await getStoredUcanRoot(session.id);\n if (\n stored &&\n (!stored.aud || stored.aud === session.did) &&\n capsEqual(stored.cap, options.capabilities) &&\n !isRootExpired(stored, nowMs)\n ) {\n return stored;\n }\n\n return await createRootUcan({ ...options, provider, session });\n}\n\nfunction buildUcanStatement(payload: Record<string, unknown>): string {\n return `UCAN-AUTH ${JSON.stringify(payload)}`;\n}\n\nfunction buildSiweMessage(params: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: string;\n nonce: string;\n issuedAt: string;\n expirationTime?: string;\n}): string {\n const lines = [\n `${params.domain} wants you to sign in with your Ethereum account:`,\n params.address,\n '',\n params.statement,\n '',\n `URI: ${params.uri}`,\n 'Version: 1',\n `Chain ID: ${params.chainId}`,\n `Nonce: ${params.nonce}`,\n `Issued At: ${params.issuedAt}`,\n ];\n if (params.expirationTime) {\n lines.push(`Expiration Time: ${params.expirationTime}`);\n }\n return lines.join('\\n');\n}\n\nasync function resolveAddress(provider: Eip1193Provider, address?: string): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) throw new Error('No account available');\n return accounts[0];\n}\n\nasync function signWithProvider(\n provider: Eip1193Provider,\n address: string,\n message: string\n): Promise<string> {\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, address],\n });\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n return signature;\n}\n\nexport async function createRootUcan(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const address = await resolveAddress(provider, options.address);\n const chainId = options.chainId || (await getChainId(provider)) || '1';\n const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : '127.0.0.1');\n const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://127.0.0.1');\n const nonce = options.nonce || randomNonce(8);\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const nbf = options.notBeforeMs;\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: options.capabilities,\n exp,\n };\n if (nbf) statementPayload.nbf = nbf;\n\n const statement = options.statement || buildUcanStatement(statementPayload);\n const issuedAt = new Date().toISOString();\n const expirationTime = new Date(exp).toISOString();\n const message = buildSiweMessage({\n domain,\n address,\n statement,\n uri,\n chainId,\n nonce,\n issuedAt,\n expirationTime,\n });\n\n const signature = await signWithProvider(provider, address, message);\n\n const root: UcanRootProof = {\n type: 'siwe',\n iss: `did:pkh:eth:${address.toLowerCase()}`,\n aud: session.did,\n cap: options.capabilities,\n exp,\n nbf,\n siwe: {\n message,\n signature,\n },\n };\n\n await storeUcanRoot(root, session.id);\n\n return root;\n}\n\nasync function signUcanPayload(payload: UcanTokenPayload, session: UcanSessionKey): Promise<string> {\n const header = { alg: 'EdDSA', typ: 'UCAN' };\n const headerB64 = encodeJson(header);\n const payloadB64 = encodeJson(payload);\n const signingInput = `${headerB64}.${payloadB64}`;\n let signatureB64: string;\n\n if (session.signer) {\n signatureB64 = await session.signer(signingInput, payload);\n } else {\n if (!session.privateKey) {\n throw new Error('Missing UCAN session key');\n }\n const data = textEncoder.encode(signingInput);\n const signature = await crypto.subtle.sign('Ed25519', session.privateKey, data);\n signatureB64 = toBase64Url(signature);\n }\n return `${headerB64}.${payloadB64}.${signatureB64}`;\n}\n\nasync function resolveProofs(\n options: CreateUcanTokenOptions,\n issuer?: UcanSessionKey\n): Promise<UcanProof[]> {\n if (options.proofs && options.proofs.length > 0) return options.proofs;\n const stored = await getStoredUcanRoot(options.sessionId || DEFAULT_SESSION_ID);\n if (!stored) {\n throw new Error('Missing UCAN proof chain');\n }\n if (issuer?.did && stored.aud && stored.aud !== issuer.did) {\n throw new Error('UCAN root audience mismatch');\n }\n return [stored];\n}\n\nexport async function createDelegationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function createInvocationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function authUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: UcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = options.fetcher || fetch;\n let token = options.ucan;\n if (!token) {\n if (!options.audience || !options.capabilities) {\n throw new Error('Missing UCAN audience or capabilities');\n }\n token = await createInvocationUcan({\n issuer: options.issuer,\n sessionId: options.sessionId,\n provider: options.provider,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n proofs: options.proofs,\n });\n }\n\n const headers = new Headers(init.headers || {});\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetcher(input, {\n ...init,\n headers,\n });\n}\n","export type WebDavAuth =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string };\n\nexport type WebDavClientOptions = {\n baseUrl: string;\n prefix?: string;\n auth?: WebDavAuth;\n token?: string;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type WebDavRequestOptions = {\n headers?: Record<string, string>;\n auth?: WebDavAuth;\n token?: string;\n depth?: number | 'infinity';\n overwrite?: boolean;\n contentType?: string;\n signal?: AbortSignal;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix || prefix === '/') return '';\n let next = prefix.startsWith('/') ? prefix : `/${prefix}`;\n next = next.replace(/\\/+$/, '');\n return next;\n}\n\nfunction normalizePath(path: string): string {\n if (!path || path === '/') return '/';\n const next = path.startsWith('/') ? path : `/${path}`;\n return encodeURI(next);\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const base = normalizeBaseUrl(baseUrl);\n const suffix = path.startsWith('/') ? path : `/${path}`;\n return `${base}${suffix}`;\n}\n\nfunction resolveAuthHeader(auth?: WebDavAuth, token?: string): string | null {\n if (auth?.type === 'bearer') {\n return `Bearer ${auth.token}`;\n }\n if (auth?.type === 'basic') {\n const raw = `${auth.username}:${auth.password}`;\n return `Basic ${btoa(raw)}`;\n }\n if (token) {\n return `Bearer ${token}`;\n }\n return null;\n}\n\nexport class WebDavClient {\n private baseUrl: string;\n private prefix: string;\n private auth?: WebDavAuth;\n private token?: string;\n private fetcher: typeof fetch;\n private credentials?: RequestCredentials;\n\n constructor(options: WebDavClientOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.prefix = normalizePrefix(options.prefix);\n this.auth = options.auth;\n this.token = options.token;\n this.fetcher = options.fetcher || ((input, init) => fetch(input, init));\n this.credentials = options.credentials;\n }\n\n setToken(token: string | null) {\n this.token = token || undefined;\n }\n\n setAuth(auth?: WebDavAuth) {\n this.auth = auth;\n }\n\n private buildUrl(path: string): string {\n const webdavPath = `${this.prefix}${normalizePath(path)}`;\n return `${this.baseUrl}${webdavPath}`;\n }\n\n private buildHeaders(options?: WebDavRequestOptions): Headers {\n const headers = new Headers(options?.headers || {});\n const authHeader = resolveAuthHeader(options?.auth || this.auth, options?.token || this.token);\n if (authHeader) {\n headers.set('Authorization', authHeader);\n }\n if (options?.depth !== undefined) {\n headers.set('Depth', String(options.depth));\n }\n if (typeof options?.overwrite === 'boolean') {\n headers.set('Overwrite', options.overwrite ? 'T' : 'F');\n }\n if (options?.contentType) {\n headers.set('Content-Type', options.contentType);\n }\n return headers;\n }\n\n async request(\n method: string,\n path: string,\n body?: BodyInit | null,\n options: WebDavRequestOptions = {}\n ): Promise<Response> {\n const response = await this.fetcher(this.buildUrl(path), {\n method,\n headers: this.buildHeaders(options),\n body: body ?? undefined,\n credentials: this.credentials,\n signal: options.signal,\n } as RequestInit);\n\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${path} failed: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n async listDirectory(path: string = '/', depth: number | 'infinity' = 1): Promise<string> {\n const res = await this.request('PROPFIND', path, null, { depth });\n return await res.text();\n }\n\n async download(path: string): Promise<Response> {\n return await this.request('GET', path);\n }\n\n async downloadText(path: string): Promise<string> {\n const res = await this.download(path);\n return await res.text();\n }\n\n async downloadArrayBuffer(path: string): Promise<ArrayBuffer> {\n const res = await this.download(path);\n return await res.arrayBuffer();\n }\n\n async upload(path: string, content: BodyInit, contentType?: string): Promise<Response> {\n return await this.request('PUT', path, content, { contentType });\n }\n\n async createDirectory(path: string): Promise<Response> {\n return await this.request('MKCOL', path);\n }\n\n async ensureDirectory(path: string): Promise<void> {\n if (!path || path === '/') return;\n const segments = path.split('/').filter(Boolean);\n if (segments.length === 0) return;\n\n let current = '';\n for (const segment of segments) {\n current = `${current}/${segment}`;\n const res = await this.fetcher(this.buildUrl(current), {\n method: 'MKCOL',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n } as RequestInit);\n\n if (res.ok) continue;\n if (res.status === 405) continue;\n throw new Error(`WebDAV MKCOL ${current} failed: ${res.status} ${res.statusText}`);\n }\n }\n\n async remove(path: string): Promise<Response> {\n return await this.request('DELETE', path);\n }\n\n async move(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('MOVE', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async copy(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('COPY', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async getQuota(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/quota'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV quota failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async listRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/list'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle list failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async recoverRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/recover'), {\n method: 'POST',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle recover failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async deleteRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/permanent'), {\n method: 'DELETE',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle delete failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async clearRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/clear'), {\n method: 'DELETE',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle clear failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n}\n\nexport function createWebDavClient(options: WebDavClientOptions): WebDavClient {\n return new WebDavClient(options);\n}\n","import { requireProvider } from './auth/provider';\nimport { loginWithChallenge } from './auth/siwe';\nimport {\n createInvocationUcan,\n createUcanSession,\n getOrCreateUcanRoot,\n UcanCapability,\n UcanRootProof,\n UcanSessionKey,\n UcanTokenPayload,\n} from './auth/ucan';\nimport { Eip1193Provider, LoginWithChallengeOptions } from './auth/types';\nimport { createWebDavClient, WebDavClient } from './storage/webdav';\n\ntype CachedUcanToken = {\n token: string;\n exp: number;\n nbf?: number;\n};\n\nconst tokenCache = new Map<string, CachedUcanToken>();\nconst TOKEN_SKEW_MS = 5000;\n\nexport type InitWebDavStorageOptions = {\n baseUrl: string;\n audience: string;\n prefix?: string;\n appDir?: string;\n appId?: string;\n ensureAppDir?: boolean;\n capabilities?: UcanCapability[];\n invocationCapabilities?: UcanCapability[];\n provider?: Eip1193Provider;\n sessionId?: string;\n session?: UcanSessionKey;\n root?: UcanRootProof;\n rootExpiresInMs?: number;\n invocationExpiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type InitWebDavStorageResult = {\n client: WebDavClient;\n token: string;\n appDir?: string;\n session: UcanSessionKey;\n root: UcanRootProof;\n};\n\nexport type InitDappSessionOptions = {\n provider?: Eip1193Provider;\n address?: string;\n appAuth?: LoginWithChallengeOptions;\n webdav?: InitWebDavStorageOptions;\n};\n\nexport type InitDappSessionResult = {\n provider: Eip1193Provider;\n address?: string;\n appLogin?: Awaited<ReturnType<typeof loginWithChallenge>>;\n ucanSession?: UcanSessionKey;\n ucanRoot?: UcanRootProof;\n webdavClient?: WebDavClient;\n webdavToken?: string;\n webdavAppDir?: string;\n};\n\nfunction normalizeAppDir(path: string): string {\n const trimmed = path.trim();\n if (!trimmed) return '/';\n let next = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n next = next.replace(/\\/+$/, '');\n return next || '/';\n}\n\nfunction sanitizeAppId(appId: string): string {\n return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');\n}\n\nfunction resolveAppDir(options: InitWebDavStorageOptions): string | undefined {\n if (options.appDir) {\n return normalizeAppDir(options.appDir);\n }\n if (options.appId) {\n return normalizeAppDir(`/apps/${sanitizeAppId(options.appId)}`);\n }\n return undefined;\n}\n\nfunction buildCapsKey(caps: UcanCapability[]): string {\n return JSON.stringify(caps || []);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction isTokenValid(entry: CachedUcanToken, nowMs: number): boolean {\n if (!entry.exp) return false;\n if (entry.nbf && nowMs < entry.nbf) return false;\n return entry.exp - TOKEN_SKEW_MS > nowMs;\n}\n\nfunction decodeBase64Url(input: string): string | null {\n if (!input) return null;\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');\n try {\n if (typeof atob === 'function') {\n return atob(padded);\n }\n } catch {\n // ignore\n }\n try {\n const nodeBuffer = (globalThis as {\n Buffer?: { from: (input: string, encoding: string) => { toString: (encoding: string) => string } };\n }).Buffer;\n if (nodeBuffer) {\n return nodeBuffer.from(padded, 'base64').toString('utf8');\n }\n } catch {\n return null;\n }\n return null;\n}\n\nfunction decodeUcanPayload(token: string): UcanTokenPayload | null {\n const parts = token.split('.');\n if (parts.length < 2) return null;\n const decoded = decodeBase64Url(parts[1]);\n if (!decoded) return null;\n try {\n return JSON.parse(decoded) as UcanTokenPayload;\n } catch {\n return null;\n }\n}\n\nasync function getCachedInvocationToken(options: {\n issuer: UcanSessionKey;\n audience: string;\n capabilities: UcanCapability[];\n proofs: UcanRootProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n}): Promise<string> {\n const cacheKey = buildTokenCacheKey(options.issuer, options.audience, options.capabilities);\n const cached = tokenCache.get(cacheKey);\n const nowMs = Date.now();\n if (cached && isTokenValid(cached, nowMs)) {\n return cached.token;\n }\n\n const token = await createInvocationUcan({\n issuer: options.issuer,\n audience: options.audience,\n capabilities: options.capabilities,\n proofs: options.proofs,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const payload = decodeUcanPayload(token);\n if (payload && typeof payload.exp === 'number') {\n tokenCache.set(cacheKey, {\n token,\n exp: payload.exp,\n nbf: payload.nbf,\n });\n }\n\n return token;\n}\n\nexport async function initWebDavStorage(\n options: InitWebDavStorageOptions\n): Promise<InitWebDavStorageResult> {\n const caps = options.capabilities || options.root?.cap;\n if (!caps || caps.length === 0) {\n throw new Error('Missing UCAN capabilities for WebDAV');\n }\n\n const needsProvider = !options.session || !options.root;\n const provider =\n options.provider || (needsProvider ? await requireProvider() : undefined);\n\n const session =\n options.session ||\n (await createUcanSession({\n id: options.sessionId,\n provider,\n }));\n\n const nowMs = Date.now();\n let root = options.root;\n if (root && root.aud && root.aud !== session.did) {\n root = undefined;\n }\n if (root && buildCapsKey(root.cap) !== buildCapsKey(caps)) {\n root = undefined;\n }\n if (root && root.exp && nowMs > root.exp) {\n root = undefined;\n }\n\n if (!root) {\n root = await getOrCreateUcanRoot({\n provider: provider || (await requireProvider()),\n session,\n capabilities: caps,\n expiresInMs: options.rootExpiresInMs,\n });\n }\n\n const invocationCaps = options.invocationCapabilities || caps;\n\n const token = await getCachedInvocationToken({\n issuer: session,\n audience: options.audience,\n capabilities: invocationCaps,\n proofs: [root],\n expiresInMs: options.invocationExpiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const client = createWebDavClient({\n baseUrl: options.baseUrl,\n prefix: options.prefix,\n token,\n fetcher: options.fetcher,\n credentials: options.credentials,\n });\n\n const appDir = resolveAppDir(options);\n if (appDir && options.ensureAppDir !== false) {\n await client.ensureDirectory(appDir);\n }\n\n return {\n client,\n token,\n appDir,\n session,\n root,\n };\n}\n\nexport async function initDappSession(\n options: InitDappSessionOptions\n): Promise<InitDappSessionResult> {\n if (!options.appAuth && !options.webdav) {\n throw new Error('No init options provided');\n }\n\n const provider =\n options.provider ||\n options.appAuth?.provider ||\n options.webdav?.provider ||\n (await requireProvider());\n\n const result: InitDappSessionResult = {\n provider,\n address: options.address,\n };\n\n if (options.appAuth) {\n const appLogin = await loginWithChallenge({\n ...options.appAuth,\n provider: options.appAuth.provider || provider,\n address: options.appAuth.address || options.address,\n });\n result.appLogin = appLogin;\n result.address = appLogin.address;\n }\n\n if (options.webdav) {\n const webdav = await initWebDavStorage({\n ...options.webdav,\n provider: options.webdav.provider || provider,\n });\n result.ucanSession = webdav.session;\n result.ucanRoot = webdav.root;\n result.webdavClient = webdav.client;\n result.webdavToken = webdav.token;\n result.webdavAppDir = webdav.appDir;\n }\n\n return result;\n}\n"],"names":["normalizeBaseUrl","joinUrl","resolveAddress"],"mappings":"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"}
@@ -6,11 +6,43 @@
6
6
 
7
7
  const YEYING_RDNS = 'io.github.yeying';
8
8
  const DEFAULT_TIMEOUT = 1000;
9
+ const DEFAULT_ACCOUNT_STORAGE_KEY = 'yeying:last_account';
9
10
  function getWindowEthereum() {
10
11
  if (typeof window === 'undefined')
11
12
  return null;
12
13
  return window.ethereum || null;
13
14
  }
15
+ function readStoredAccount(storageKey) {
16
+ if (typeof localStorage === 'undefined')
17
+ return null;
18
+ try {
19
+ return localStorage.getItem(storageKey);
20
+ }
21
+ catch {
22
+ return null;
23
+ }
24
+ }
25
+ function writeStoredAccount(storageKey, account) {
26
+ if (typeof localStorage === 'undefined')
27
+ return;
28
+ try {
29
+ if (account) {
30
+ localStorage.setItem(storageKey, account);
31
+ }
32
+ else {
33
+ localStorage.removeItem(storageKey);
34
+ }
35
+ }
36
+ catch {
37
+ // ignore storage errors
38
+ }
39
+ }
40
+ function selectPreferredAccount(accounts, stored, preferStored) {
41
+ if (preferStored && stored && accounts.includes(stored)) {
42
+ return stored;
43
+ }
44
+ return accounts[0] || null;
45
+ }
14
46
  function isYeYingProvider(provider, info) {
15
47
  if (!provider)
16
48
  return false;
@@ -116,6 +148,29 @@
116
148
  const chainId = (await p.request({ method: 'eth_chainId' }));
117
149
  return typeof chainId === 'string' ? chainId : null;
118
150
  }
151
+ async function getPreferredAccount(options = {}) {
152
+ const provider = options.provider || (await requireProvider());
153
+ const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;
154
+ const preferStored = options.preferStored !== false;
155
+ let accounts = await getAccounts(provider);
156
+ if (accounts.length === 0 && options.autoConnect) {
157
+ accounts = await requestAccounts({ provider });
158
+ }
159
+ const stored = readStoredAccount(storageKey);
160
+ const account = selectPreferredAccount(accounts, stored, preferStored);
161
+ writeStoredAccount(storageKey, account);
162
+ return { account, accounts };
163
+ }
164
+ function watchAccounts(provider, handler, options = {}) {
165
+ const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;
166
+ const preferStored = options.preferStored !== false;
167
+ return onAccountsChanged(provider, (accounts) => {
168
+ const stored = readStoredAccount(storageKey);
169
+ const account = selectPreferredAccount(accounts, stored, preferStored);
170
+ writeStoredAccount(storageKey, account);
171
+ handler({ account, accounts });
172
+ });
173
+ }
119
174
  async function getBalance(provider, address, blockTag = 'latest') {
120
175
  const p = provider || (await requireProvider());
121
176
  let target = address;
@@ -714,8 +769,8 @@
714
769
  const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));
715
770
  const address = await resolveAddress(provider, options.address);
716
771
  const chainId = options.chainId || (await getChainId(provider)) || '1';
717
- const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : 'localhost');
718
- const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://localhost');
772
+ const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : '127.0.0.1');
773
+ const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://127.0.0.1');
719
774
  const nonce = options.nonce || randomNonce(8);
720
775
  const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);
721
776
  const nbf = options.notBeforeMs;
@@ -1269,6 +1324,7 @@
1269
1324
  exports.getBalance = getBalance;
1270
1325
  exports.getChainId = getChainId;
1271
1326
  exports.getOrCreateUcanRoot = getOrCreateUcanRoot;
1327
+ exports.getPreferredAccount = getPreferredAccount;
1272
1328
  exports.getProvider = getProvider;
1273
1329
  exports.getStoredUcanRoot = getStoredUcanRoot;
1274
1330
  exports.getUcanSession = getUcanSession;
@@ -1285,6 +1341,7 @@
1285
1341
  exports.setAccessToken = setAccessToken;
1286
1342
  exports.signMessage = signMessage;
1287
1343
  exports.storeUcanRoot = storeUcanRoot;
1344
+ exports.watchAccounts = watchAccounts;
1288
1345
 
1289
1346
  }));
1290
1347
  //# sourceMappingURL=web3-bs.umd.js.map