@yeying-community/web3-bs 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -0
- package/dist/storage/webdav.d.ts +39 -0
- package/dist/web3-bs.esm.js +69 -0
- package/dist/web3-bs.esm.js.map +1 -1
- package/dist/web3-bs.umd.js +69 -0
- package/dist/web3-bs.umd.js.map +1 -1
- package/package.json +2 -2
package/dist/web3-bs.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web3-bs.esm.js","sources":["../src/auth/provider.ts","../src/auth/siwe.ts","../src/auth/ucan.ts","../src/auth/central.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 with?: string;\n can?: string;\n resource?: string;\n action?: string;\n nb?: unknown;\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 UcanSessionSource = 'wallet' | 'local';\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n source?: UcanSessionSource;\n privateKeyJwk?: JsonWebKey;\n publicKeyJwk?: JsonWebKey;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n source?: UcanSessionSource;\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';\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nconst DID_KEY_ED25519_MULTICODEC = new Uint8Array([0xed, 0x01]);\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 normalizeActionExpression(raw: string): string {\n const normalized = String(raw || '').trim().toLowerCase().replace(/\\|/g, ',');\n if (!normalized) return '';\n const parts = normalized\n .split(',')\n .map(part => part.trim())\n .filter(Boolean);\n if (!parts.length) return '';\n return Array.from(new Set(parts)).join(',');\n}\n\nexport function getCapabilityResource(cap: UcanCapability | null | undefined): string {\n if (!cap || typeof cap !== 'object') return '';\n const withValue = typeof cap.with === 'string' ? cap.with.trim() : '';\n if (withValue) return withValue;\n return typeof cap.resource === 'string' ? cap.resource.trim() : '';\n}\n\nexport function getCapabilityAction(cap: UcanCapability | null | undefined): string {\n if (!cap || typeof cap !== 'object') return '';\n const canValue = typeof cap.can === 'string' ? cap.can.trim() : '';\n if (canValue) return normalizeActionExpression(canValue);\n const actionValue = typeof cap.action === 'string' ? cap.action.trim() : '';\n return normalizeActionExpression(actionValue);\n}\n\nexport function normalizeUcanCapability(\n cap: UcanCapability | null | undefined,\n options: { includeLegacyAliases?: boolean } = {}\n): UcanCapability | null {\n const includeLegacyAliases = options.includeLegacyAliases !== false;\n const resource = getCapabilityResource(cap);\n const action = getCapabilityAction(cap);\n if (!resource || !action) return null;\n const normalized: UcanCapability = {\n with: resource,\n can: action,\n };\n if (includeLegacyAliases) {\n normalized.resource = resource;\n normalized.action = action;\n }\n if (cap && Object.prototype.hasOwnProperty.call(cap, 'nb')) {\n normalized.nb = cap.nb;\n }\n return normalized;\n}\n\nexport function normalizeUcanCapabilities(\n caps: UcanCapability[] | undefined,\n options: { includeLegacyAliases?: boolean } = {}\n): UcanCapability[] {\n const includeLegacyAliases = options.includeLegacyAliases !== false;\n const seen = new Set<string>();\n const result: UcanCapability[] = [];\n for (const cap of caps || []) {\n const normalized = normalizeUcanCapability(cap, { includeLegacyAliases });\n if (!normalized) continue;\n const key = `${normalized.with}|${normalized.can}`;\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(normalized);\n }\n return result;\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\nfunction isSessionExpired(expiresAt: number | null | undefined, nowMs: number = Date.now()): boolean {\n return typeof expiresAt === 'number' && nowMs >= expiresAt;\n}\n\nfunction encodeBase58(bytes: Uint8Array): string {\n if (bytes.length === 0) return '';\n let value = 0n;\n for (const byte of bytes) {\n value = (value << 8n) + BigInt(byte);\n }\n let encoded = '';\n while (value > 0n) {\n const mod = Number(value % 58n);\n encoded = `${BASE58_ALPHABET[mod]}${encoded}`;\n value /= 58n;\n }\n let leadingZeroCount = 0;\n while (leadingZeroCount < bytes.length && bytes[leadingZeroCount] === 0) {\n leadingZeroCount += 1;\n }\n if (leadingZeroCount > 0) {\n encoded = `${'1'.repeat(leadingZeroCount)}${encoded}`;\n }\n return encoded || '1';\n}\n\nfunction ensureWebCrypto(): Crypto {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error('WebCrypto not available for UCAN session');\n }\n return crypto;\n}\n\nfunction parseSessionId(options: CreateUcanSessionOptions): string {\n return options.id || DEFAULT_SESSION_ID;\n}\n\nfunction isLocalSessionRecord(record: UcanSessionRecord | null): boolean {\n return Boolean(record?.source === 'local' || record?.privateKeyJwk);\n}\n\nasync function buildDidKey(publicKey: CryptoKey): Promise<string> {\n const webCrypto = ensureWebCrypto();\n const raw = new Uint8Array(await webCrypto.subtle.exportKey('raw', publicKey));\n const prefixed = new Uint8Array(DID_KEY_ED25519_MULTICODEC.length + raw.length);\n prefixed.set(DID_KEY_ED25519_MULTICODEC, 0);\n prefixed.set(raw, DID_KEY_ED25519_MULTICODEC.length);\n return `did:key:z${encodeBase58(prefixed)}`;\n}\n\nasync function importLocalPrivateKey(privateKeyJwk: JsonWebKey): Promise<CryptoKey> {\n const webCrypto = ensureWebCrypto();\n return await webCrypto.subtle.importKey('jwk', privateKeyJwk, 'Ed25519', true, ['sign']);\n}\n\nasync function loadLocalSessionFromRecord(\n id: string,\n record: UcanSessionRecord | null\n): Promise<UcanSessionKey | null> {\n if (!record || !isLocalSessionRecord(record) || !record.privateKeyJwk) {\n return null;\n }\n if (isSessionExpired(record.expiresAt)) {\n await deleteSessionRecord(id);\n return null;\n }\n try {\n const privateKey = await importLocalPrivateKey(record.privateKeyJwk);\n return {\n id: record.id || id,\n did: record.did,\n createdAt: record.createdAt,\n expiresAt: record.expiresAt,\n source: 'local',\n privateKey,\n };\n } catch {\n return null;\n }\n}\n\nfunction shouldKeepRootForSession(root: UcanRootProof | undefined, did: string, nowMs: number): boolean {\n if (!root) return false;\n if (root.aud && root.aud !== did) return false;\n if (isRootExpired(root, nowMs)) return false;\n return true;\n}\n\nasync function createLocalSession(\n options: CreateUcanSessionOptions,\n record: UcanSessionRecord | null\n): Promise<UcanSessionKey> {\n const webCrypto = ensureWebCrypto();\n const sessionId = parseSessionId(options);\n if (!options.forceNew) {\n const existing = await loadLocalSessionFromRecord(sessionId, record);\n if (existing) return existing;\n }\n\n const pair = (await webCrypto.subtle.generateKey(\n 'Ed25519',\n true,\n ['sign', 'verify']\n )) as CryptoKeyPair;\n const [privateKeyJwk, publicKeyJwk, did] = await Promise.all([\n webCrypto.subtle.exportKey('jwk', pair.privateKey),\n webCrypto.subtle.exportKey('jwk', pair.publicKey),\n buildDidKey(pair.publicKey),\n ]);\n\n const createdAt = Date.now();\n const expiresAt = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const root = shouldKeepRootForSession(record?.root, did, createdAt) ? record?.root : undefined;\n\n await writeSessionRecord({\n id: sessionId,\n did,\n createdAt,\n expiresAt,\n source: 'local',\n privateKeyJwk,\n publicKeyJwk,\n root,\n });\n\n return {\n id: sessionId,\n did,\n createdAt,\n expiresAt,\n source: 'local',\n privateKey: pair.privateKey,\n };\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 record = await readSessionRecord(id);\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (walletProvider) {\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return await loadLocalSessionFromRecord(id, record);\n }\n }\n return await loadLocalSessionFromRecord(id, record);\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 source: 'wallet',\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 source: 'wallet',\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 sessionId = parseSessionId(options);\n const record = await readSessionRecord(sessionId);\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (provider) {\n try {\n return await requestWalletUcanSession(provider, { ...options, id: sessionId });\n } catch {\n // fallback to local ed25519 session\n }\n }\n return await createLocalSession({ ...options, id: sessionId }, record);\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 ...(record || {}),\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 const left = normalizeUcanCapabilities(a, { includeLegacyAliases: false });\n const right = normalizeUcanCapabilities(b, { includeLegacyAliases: false });\n return JSON.stringify(left) === JSON.stringify(right);\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 normalizedCapabilities = normalizeUcanCapabilities(options.capabilities);\n if (!normalizedCapabilities.length) {\n throw new Error('Missing UCAN capabilities');\n }\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: normalizedCapabilities,\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: normalizedCapabilities,\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 normalizedCapabilities = normalizeUcanCapabilities(options.capabilities);\n if (!normalizedCapabilities.length) {\n throw new Error('Missing UCAN capabilities');\n }\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: normalizedCapabilities,\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 normalizedCapabilities = normalizeUcanCapabilities(options.capabilities);\n if (!normalizedCapabilities.length) {\n throw new Error('Missing UCAN capabilities');\n }\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: normalizedCapabilities,\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","import type { AuthBaseOptions } from './types';\nimport { getAccessToken } from './siwe';\nimport {\n normalizeUcanCapabilities,\n normalizeUcanCapability,\n type UcanCapability,\n} from './ucan';\n\nexport type CentralAuthBaseOptions = AuthBaseOptions & {\n baseUrl?: string;\n issuerPath?: string;\n sessionPath?: string;\n issuePath?: string;\n accessToken?: string | null;\n storeSessionToken?: boolean;\n sessionTokenStorageKey?: string;\n};\n\nexport type CentralIssuerInfo = {\n enabled?: boolean;\n issuerDid?: string;\n defaultAudience?: string;\n defaultCapabilities?: UcanCapability[];\n response: unknown;\n};\n\nexport type CreateCentralSessionOptions = CentralAuthBaseOptions & {\n subject: string;\n sessionTtlMs?: number;\n};\n\nexport type CentralSessionResult = {\n subject: string;\n sessionToken: string;\n expiresAt?: number;\n issuerDid?: string;\n response: unknown;\n};\n\nexport type IssueCentralUcanOptions = CentralAuthBaseOptions & {\n sessionToken?: string | null;\n audience?: string;\n capabilities?: UcanCapability[];\n expiresInMs?: number;\n ttlMs?: number;\n};\n\nexport type CentralUcanIssueResult = {\n ucan: string;\n issuerDid?: string;\n subject?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n exp?: number;\n nbf?: number;\n iat?: number;\n response: unknown;\n};\n\nexport type CreateAndIssueCentralUcanOptions = CentralAuthBaseOptions & {\n subject: string;\n sessionTtlMs?: number;\n audience?: string;\n capabilities?: UcanCapability[];\n expiresInMs?: number;\n ttlMs?: number;\n};\n\nexport type CreateAndIssueCentralUcanResult = {\n session: CentralSessionResult;\n issue: CentralUcanIssueResult;\n};\n\nexport type AuthCentralUcanFetchOptions = CentralAuthBaseOptions & {\n ucan?: string | null;\n sessionToken?: string | null;\n subject?: string;\n sessionTtlMs?: number;\n audience?: string;\n capabilities?: UcanCapability[];\n expiresInMs?: number;\n ttlMs?: number;\n};\n\nconst DEFAULT_BASE_URL = '/api/v1/public/auth/central';\nconst DEFAULT_ISSUER_PATH = 'issuer';\nconst DEFAULT_SESSION_PATH = 'session';\nconst DEFAULT_ISSUE_PATH = 'issue';\nconst DEFAULT_SESSION_TOKEN_KEY = 'centralUcanSessionToken';\n\nlet cachedCentralSessionToken: string | null = null;\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\nfunction resolveBaseUrl(options?: CentralAuthBaseOptions): string {\n return options?.baseUrl || DEFAULT_BASE_URL;\n}\n\nfunction resolveFetcher(options?: CentralAuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: CentralAuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction resolveSessionTokenKey(options?: CentralAuthBaseOptions): string {\n return options?.sessionTokenStorageKey || DEFAULT_SESSION_TOKEN_KEY;\n}\n\nfunction resolveAccessToken(options?: CentralAuthBaseOptions): string | null {\n if (typeof options?.accessToken === 'string') {\n const token = options.accessToken.trim();\n return token || null;\n }\n if (options?.accessToken === null) {\n return null;\n }\n return getAccessToken(options);\n}\n\nfunction shouldStoreSessionToken(options?: CentralAuthBaseOptions): boolean {\n return options?.storeSessionToken !== false;\n}\n\nfunction parseObject(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return {};\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseEnvelopeData(payload: unknown): Record<string, unknown> {\n const root = parseObject(payload);\n if (Object.prototype.hasOwnProperty.call(root, 'data')) {\n return parseObject(root.data);\n }\n return root;\n}\n\nfunction parseStringField(obj: Record<string, unknown>, keys: string[]): string | undefined {\n for (const key of keys) {\n const value = obj[key];\n if (typeof value === 'string') {\n return value;\n }\n }\n return undefined;\n}\n\nfunction parseNumberField(obj: Record<string, unknown>, keys: string[]): number | undefined {\n for (const key of keys) {\n const value = obj[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction parseCapabilitiesField(obj: Record<string, unknown>, keys: string[]): UcanCapability[] | undefined {\n for (const key of keys) {\n const value = obj[key];\n if (!Array.isArray(value)) continue;\n const caps = value\n .filter(item => item && typeof item === 'object')\n .map(item => normalizeUcanCapability(item as UcanCapability))\n .filter((cap): cap is UcanCapability => Boolean(cap));\n return caps;\n }\n return undefined;\n}\n\nfunction parseIssuerDidField(obj: Record<string, unknown>): string | undefined {\n return parseStringField(obj, ['issuerDid', 'issuer', 'did']);\n}\n\nfunction readStoredSessionToken(options?: CentralAuthBaseOptions): string | null {\n if (!shouldStoreSessionToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveSessionTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistSessionToken(token: string | null, options?: CentralAuthBaseOptions): void {\n cachedCentralSessionToken = token;\n if (!shouldStoreSessionToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveSessionTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nasync function parseJsonBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return { raw: text };\n }\n}\n\nexport function getCentralSessionToken(options?: CentralAuthBaseOptions): string | null {\n if (cachedCentralSessionToken) return cachedCentralSessionToken;\n const stored = readStoredSessionToken(options);\n if (stored) {\n cachedCentralSessionToken = stored;\n }\n return stored;\n}\n\nexport function setCentralSessionToken(token: string | null, options?: CentralAuthBaseOptions): void {\n persistSessionToken(token, options);\n}\n\nexport function clearCentralSessionToken(options?: CentralAuthBaseOptions): void {\n cachedCentralSessionToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveSessionTokenKey(options);\n localStorage.removeItem(key);\n}\n\nexport async function getCentralIssuerInfo(\n options: CentralAuthBaseOptions = {}\n): Promise<CentralIssuerInfo> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const url = joinUrl(resolveBaseUrl(options), options.issuerPath || DEFAULT_ISSUER_PATH);\n const token = resolveAccessToken(options);\n const headers = new Headers({\n accept: 'application/json',\n });\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n const response = await fetcher(url, {\n method: 'GET',\n headers,\n credentials,\n });\n const payload = await parseJsonBody(response);\n if (!response.ok) {\n throw new Error(`Central issuer request failed: ${response.status} ${JSON.stringify(payload)}`);\n }\n\n const data = parseEnvelopeData(payload);\n return {\n enabled: typeof data.enabled === 'boolean' ? data.enabled : undefined,\n issuerDid: parseIssuerDidField(data),\n defaultAudience: parseStringField(data, ['defaultAudience']),\n defaultCapabilities: parseCapabilitiesField(data, ['defaultCapabilities']),\n response: payload,\n };\n}\n\nexport async function createCentralSession(\n options: CreateCentralSessionOptions\n): Promise<CentralSessionResult> {\n const subject = String(options?.subject || '').trim();\n if (!subject) {\n throw new Error('Missing subject');\n }\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const accessToken = resolveAccessToken(options);\n const url = joinUrl(resolveBaseUrl(options), options.sessionPath || DEFAULT_SESSION_PATH);\n const headers = new Headers({\n 'Content-Type': 'application/json',\n accept: 'application/json',\n });\n if (accessToken) {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n const response = await fetcher(url, {\n method: 'POST',\n headers,\n credentials,\n body: JSON.stringify({\n subject,\n sessionTtlMs: options.sessionTtlMs,\n }),\n });\n const payload = await parseJsonBody(response);\n if (!response.ok) {\n throw new Error(`Central session request failed: ${response.status} ${JSON.stringify(payload)}`);\n }\n\n const data = parseEnvelopeData(payload);\n const sessionToken = parseStringField(data, ['sessionToken']);\n if (!sessionToken) {\n throw new Error('Central session response missing sessionToken');\n }\n persistSessionToken(sessionToken, options);\n\n return {\n subject: parseStringField(data, ['subject']) || subject,\n sessionToken,\n expiresAt: parseNumberField(data, ['expiresAt']),\n issuerDid: parseIssuerDidField(data),\n response: payload,\n };\n}\n\nexport async function issueCentralUcan(\n options: IssueCentralUcanOptions = {}\n): Promise<CentralUcanIssueResult> {\n const sessionToken = options.sessionToken || getCentralSessionToken(options);\n if (!sessionToken) {\n throw new Error('Missing central session token');\n }\n\n const normalizedCapabilities = options.capabilities\n ? normalizeUcanCapabilities(options.capabilities)\n : undefined;\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const url = joinUrl(resolveBaseUrl(options), options.issuePath || DEFAULT_ISSUE_PATH);\n const response = await fetcher(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n Authorization: `Bearer ${sessionToken}`,\n },\n credentials,\n body: JSON.stringify({\n audience: options.audience,\n capabilities: normalizedCapabilities,\n expiresInMs: options.expiresInMs,\n ttlMs: options.ttlMs,\n }),\n });\n const payload = await parseJsonBody(response);\n if (!response.ok) {\n throw new Error(`Central UCAN issue failed: ${response.status} ${JSON.stringify(payload)}`);\n }\n\n const data = parseEnvelopeData(payload);\n const ucan = parseStringField(data, ['ucan']);\n if (!ucan) {\n throw new Error('Central UCAN response missing ucan');\n }\n\n return {\n ucan,\n issuerDid: parseIssuerDidField(data),\n subject: parseStringField(data, ['subject']),\n audience: parseStringField(data, ['audience']),\n capabilities: parseCapabilitiesField(data, ['capabilities']),\n exp: parseNumberField(data, ['exp', 'expiresAt']),\n nbf: parseNumberField(data, ['nbf', 'notBefore']),\n iat: parseNumberField(data, ['iat', 'issuedAt']),\n response: payload,\n };\n}\n\nexport async function createAndIssueCentralUcan(\n options: CreateAndIssueCentralUcanOptions\n): Promise<CreateAndIssueCentralUcanResult> {\n const session = await createCentralSession({\n ...options,\n subject: options.subject,\n sessionTtlMs: options.sessionTtlMs,\n });\n const issue = await issueCentralUcan({\n ...options,\n sessionToken: session.sessionToken,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n ttlMs: options.ttlMs,\n });\n return { session, issue };\n}\n\nexport async function authCentralUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthCentralUcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n let token = options.ucan || null;\n\n if (!token) {\n let sessionToken = options.sessionToken || getCentralSessionToken(options);\n if (!sessionToken) {\n if (!options.subject) {\n throw new Error('Missing central session token or subject');\n }\n const session = await createCentralSession({\n ...options,\n subject: options.subject,\n sessionTtlMs: options.sessionTtlMs,\n });\n sessionToken = session.sessionToken;\n }\n\n const issued = await issueCentralUcan({\n ...options,\n sessionToken,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n ttlMs: options.ttlMs,\n });\n token = issued.ucan;\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 credentials,\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 getCapabilityAction,\n getCapabilityResource,\n getOrCreateUcanRoot,\n normalizeUcanCapabilities,\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;\nconst DEFAULT_APP_ACTION = 'write';\nconst LOOPBACK_HOST_ALIASES = new Set([\n 'localhost',\n '127.0.0.1',\n '::1',\n '0:0:0:0:0:0:0:1',\n '0.0.0.0',\n]);\n\nexport type InitWebDavStorageOptions = {\n baseUrl: string;\n audience: string;\n prefix?: string;\n appDir?: string;\n appId?: string;\n appAction?: 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\nexport type AppIdLocationLike = {\n host?: string | null;\n hostname?: string | null;\n port?: string | number | null;\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 parseHostPort(rawHost: string): { hostname: string; port: string } {\n const host = rawHost.trim();\n if (!host) return { hostname: '', port: '' };\n\n const bracketMatch = host.match(/^\\[([^\\]]+)\\](?::([0-9]+))?$/);\n if (bracketMatch) {\n return {\n hostname: bracketMatch[1] || '',\n port: bracketMatch[2] || '',\n };\n }\n\n const firstColon = host.indexOf(':');\n const lastColon = host.lastIndexOf(':');\n if (firstColon > -1 && firstColon === lastColon) {\n const hostname = host.slice(0, firstColon).trim();\n const port = host.slice(firstColon + 1).trim();\n if (/^[0-9]+$/.test(port)) {\n return { hostname, port };\n }\n }\n\n return { hostname: host, port: '' };\n}\n\nexport function normalizeAppHostnameForAppId(hostname: string): string {\n const normalized = (hostname || '').trim().toLowerCase();\n if (!normalized) return '';\n const bare = normalized.replace(/^\\[(.*)\\]$/, '$1');\n if (LOOPBACK_HOST_ALIASES.has(normalized) || LOOPBACK_HOST_ALIASES.has(bare)) {\n return 'localhost';\n }\n return bare;\n}\n\nfunction buildSanitizedAppId(hostname: string, port?: string | number | null): string {\n const normalizedHostname = normalizeAppHostnameForAppId(hostname);\n if (!normalizedHostname) return '';\n const normalizedPort =\n port === undefined || port === null ? '' : String(port).trim();\n const host = normalizedPort\n ? `${normalizedHostname}:${normalizedPort}`\n : normalizedHostname;\n return sanitizeAppId(host);\n}\n\nexport function deriveAppIdFromHost(host: string): string {\n const parsed = parseHostPort(host || '');\n return buildSanitizedAppId(parsed.hostname, parsed.port);\n}\n\nexport function deriveAppIdFromLocation(\n locationLike?: AppIdLocationLike\n): string {\n const source =\n locationLike ||\n (typeof window !== 'undefined' ? (window.location as AppIdLocationLike) : undefined);\n if (!source) return '';\n\n const hostname = typeof source.hostname === 'string' ? source.hostname : '';\n const port = source.port;\n if (hostname) {\n const appId = buildSanitizedAppId(hostname, port);\n if (appId) return appId;\n }\n\n if (typeof source.host === 'string') {\n return deriveAppIdFromHost(source.host);\n }\n\n return '';\n}\n\nfunction normalizeAction(action?: string): string | null {\n const trimmed = (action || '').trim();\n return trimmed ? trimmed : null;\n}\n\nfunction buildAppCapability(options: InitWebDavStorageOptions): UcanCapability | null {\n if (!options.appId) return null;\n const action = normalizeAction(options.appAction) || DEFAULT_APP_ACTION;\n const resource = `app:all:${sanitizeAppId(options.appId)}`;\n return {\n with: resource,\n can: action,\n resource,\n action,\n };\n}\n\nfunction hasAppCapability(caps: UcanCapability[]): boolean {\n return (caps || []).some(cap => getCapabilityResource(cap).startsWith('app:'));\n}\n\nfunction dedupeCapabilities(caps: UcanCapability[]): UcanCapability[] {\n return normalizeUcanCapabilities(caps);\n}\n\nfunction ensureAppCapability(caps: UcanCapability[], options: InitWebDavStorageOptions): UcanCapability[] {\n const appCap = buildAppCapability(options);\n if (!appCap) return caps || [];\n if (hasAppCapability(caps || [])) return caps || [];\n return dedupeCapabilities([...(caps || []), appCap]);\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 const canonical = (caps || [])\n .map(cap => ({\n with: getCapabilityResource(cap),\n can: getCapabilityAction(cap),\n }))\n .filter(cap => Boolean(cap.with && cap.can));\n return JSON.stringify(canonical);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction resolveWebdavCaps(options: InitWebDavStorageOptions): UcanCapability[] {\n const baseCaps = options.capabilities || options.root?.cap || [];\n return ensureAppCapability(baseCaps, options);\n}\n\nfunction resolveInvocationCaps(\n options: InitWebDavStorageOptions,\n fallbackCaps: UcanCapability[]\n): UcanCapability[] {\n const caps = options.invocationCapabilities || fallbackCaps;\n return ensureAppCapability(caps, options);\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 = resolveWebdavCaps(options);\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 = resolveInvocationCaps(options, 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","resolveFetcher","resolveCredentials","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/auth/central.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 with?: string;\n can?: string;\n resource?: string;\n action?: string;\n nb?: unknown;\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 UcanSessionSource = 'wallet' | 'local';\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n source?: UcanSessionSource;\n privateKeyJwk?: JsonWebKey;\n publicKeyJwk?: JsonWebKey;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n source?: UcanSessionSource;\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';\nconst BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';\nconst DID_KEY_ED25519_MULTICODEC = new Uint8Array([0xed, 0x01]);\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 normalizeActionExpression(raw: string): string {\n const normalized = String(raw || '').trim().toLowerCase().replace(/\\|/g, ',');\n if (!normalized) return '';\n const parts = normalized\n .split(',')\n .map(part => part.trim())\n .filter(Boolean);\n if (!parts.length) return '';\n return Array.from(new Set(parts)).join(',');\n}\n\nexport function getCapabilityResource(cap: UcanCapability | null | undefined): string {\n if (!cap || typeof cap !== 'object') return '';\n const withValue = typeof cap.with === 'string' ? cap.with.trim() : '';\n if (withValue) return withValue;\n return typeof cap.resource === 'string' ? cap.resource.trim() : '';\n}\n\nexport function getCapabilityAction(cap: UcanCapability | null | undefined): string {\n if (!cap || typeof cap !== 'object') return '';\n const canValue = typeof cap.can === 'string' ? cap.can.trim() : '';\n if (canValue) return normalizeActionExpression(canValue);\n const actionValue = typeof cap.action === 'string' ? cap.action.trim() : '';\n return normalizeActionExpression(actionValue);\n}\n\nexport function normalizeUcanCapability(\n cap: UcanCapability | null | undefined,\n options: { includeLegacyAliases?: boolean } = {}\n): UcanCapability | null {\n const includeLegacyAliases = options.includeLegacyAliases !== false;\n const resource = getCapabilityResource(cap);\n const action = getCapabilityAction(cap);\n if (!resource || !action) return null;\n const normalized: UcanCapability = {\n with: resource,\n can: action,\n };\n if (includeLegacyAliases) {\n normalized.resource = resource;\n normalized.action = action;\n }\n if (cap && Object.prototype.hasOwnProperty.call(cap, 'nb')) {\n normalized.nb = cap.nb;\n }\n return normalized;\n}\n\nexport function normalizeUcanCapabilities(\n caps: UcanCapability[] | undefined,\n options: { includeLegacyAliases?: boolean } = {}\n): UcanCapability[] {\n const includeLegacyAliases = options.includeLegacyAliases !== false;\n const seen = new Set<string>();\n const result: UcanCapability[] = [];\n for (const cap of caps || []) {\n const normalized = normalizeUcanCapability(cap, { includeLegacyAliases });\n if (!normalized) continue;\n const key = `${normalized.with}|${normalized.can}`;\n if (seen.has(key)) continue;\n seen.add(key);\n result.push(normalized);\n }\n return result;\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\nfunction isSessionExpired(expiresAt: number | null | undefined, nowMs: number = Date.now()): boolean {\n return typeof expiresAt === 'number' && nowMs >= expiresAt;\n}\n\nfunction encodeBase58(bytes: Uint8Array): string {\n if (bytes.length === 0) return '';\n let value = 0n;\n for (const byte of bytes) {\n value = (value << 8n) + BigInt(byte);\n }\n let encoded = '';\n while (value > 0n) {\n const mod = Number(value % 58n);\n encoded = `${BASE58_ALPHABET[mod]}${encoded}`;\n value /= 58n;\n }\n let leadingZeroCount = 0;\n while (leadingZeroCount < bytes.length && bytes[leadingZeroCount] === 0) {\n leadingZeroCount += 1;\n }\n if (leadingZeroCount > 0) {\n encoded = `${'1'.repeat(leadingZeroCount)}${encoded}`;\n }\n return encoded || '1';\n}\n\nfunction ensureWebCrypto(): Crypto {\n if (typeof crypto === 'undefined' || !crypto.subtle) {\n throw new Error('WebCrypto not available for UCAN session');\n }\n return crypto;\n}\n\nfunction parseSessionId(options: CreateUcanSessionOptions): string {\n return options.id || DEFAULT_SESSION_ID;\n}\n\nfunction isLocalSessionRecord(record: UcanSessionRecord | null): boolean {\n return Boolean(record?.source === 'local' || record?.privateKeyJwk);\n}\n\nasync function buildDidKey(publicKey: CryptoKey): Promise<string> {\n const webCrypto = ensureWebCrypto();\n const raw = new Uint8Array(await webCrypto.subtle.exportKey('raw', publicKey));\n const prefixed = new Uint8Array(DID_KEY_ED25519_MULTICODEC.length + raw.length);\n prefixed.set(DID_KEY_ED25519_MULTICODEC, 0);\n prefixed.set(raw, DID_KEY_ED25519_MULTICODEC.length);\n return `did:key:z${encodeBase58(prefixed)}`;\n}\n\nasync function importLocalPrivateKey(privateKeyJwk: JsonWebKey): Promise<CryptoKey> {\n const webCrypto = ensureWebCrypto();\n return await webCrypto.subtle.importKey('jwk', privateKeyJwk, 'Ed25519', true, ['sign']);\n}\n\nasync function loadLocalSessionFromRecord(\n id: string,\n record: UcanSessionRecord | null\n): Promise<UcanSessionKey | null> {\n if (!record || !isLocalSessionRecord(record) || !record.privateKeyJwk) {\n return null;\n }\n if (isSessionExpired(record.expiresAt)) {\n await deleteSessionRecord(id);\n return null;\n }\n try {\n const privateKey = await importLocalPrivateKey(record.privateKeyJwk);\n return {\n id: record.id || id,\n did: record.did,\n createdAt: record.createdAt,\n expiresAt: record.expiresAt,\n source: 'local',\n privateKey,\n };\n } catch {\n return null;\n }\n}\n\nfunction shouldKeepRootForSession(root: UcanRootProof | undefined, did: string, nowMs: number): boolean {\n if (!root) return false;\n if (root.aud && root.aud !== did) return false;\n if (isRootExpired(root, nowMs)) return false;\n return true;\n}\n\nasync function createLocalSession(\n options: CreateUcanSessionOptions,\n record: UcanSessionRecord | null\n): Promise<UcanSessionKey> {\n const webCrypto = ensureWebCrypto();\n const sessionId = parseSessionId(options);\n if (!options.forceNew) {\n const existing = await loadLocalSessionFromRecord(sessionId, record);\n if (existing) return existing;\n }\n\n const pair = (await webCrypto.subtle.generateKey(\n 'Ed25519',\n true,\n ['sign', 'verify']\n )) as CryptoKeyPair;\n const [privateKeyJwk, publicKeyJwk, did] = await Promise.all([\n webCrypto.subtle.exportKey('jwk', pair.privateKey),\n webCrypto.subtle.exportKey('jwk', pair.publicKey),\n buildDidKey(pair.publicKey),\n ]);\n\n const createdAt = Date.now();\n const expiresAt = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const root = shouldKeepRootForSession(record?.root, did, createdAt) ? record?.root : undefined;\n\n await writeSessionRecord({\n id: sessionId,\n did,\n createdAt,\n expiresAt,\n source: 'local',\n privateKeyJwk,\n publicKeyJwk,\n root,\n });\n\n return {\n id: sessionId,\n did,\n createdAt,\n expiresAt,\n source: 'local',\n privateKey: pair.privateKey,\n };\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 record = await readSessionRecord(id);\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (walletProvider) {\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return await loadLocalSessionFromRecord(id, record);\n }\n }\n return await loadLocalSessionFromRecord(id, record);\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 source: 'wallet',\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 source: 'wallet',\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 sessionId = parseSessionId(options);\n const record = await readSessionRecord(sessionId);\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (provider) {\n try {\n return await requestWalletUcanSession(provider, { ...options, id: sessionId });\n } catch {\n // fallback to local ed25519 session\n }\n }\n return await createLocalSession({ ...options, id: sessionId }, record);\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 ...(record || {}),\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 const left = normalizeUcanCapabilities(a, { includeLegacyAliases: false });\n const right = normalizeUcanCapabilities(b, { includeLegacyAliases: false });\n return JSON.stringify(left) === JSON.stringify(right);\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 normalizedCapabilities = normalizeUcanCapabilities(options.capabilities);\n if (!normalizedCapabilities.length) {\n throw new Error('Missing UCAN capabilities');\n }\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: normalizedCapabilities,\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: normalizedCapabilities,\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 normalizedCapabilities = normalizeUcanCapabilities(options.capabilities);\n if (!normalizedCapabilities.length) {\n throw new Error('Missing UCAN capabilities');\n }\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: normalizedCapabilities,\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 normalizedCapabilities = normalizeUcanCapabilities(options.capabilities);\n if (!normalizedCapabilities.length) {\n throw new Error('Missing UCAN capabilities');\n }\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: normalizedCapabilities,\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","import type { AuthBaseOptions } from './types';\nimport { getAccessToken } from './siwe';\nimport {\n normalizeUcanCapabilities,\n normalizeUcanCapability,\n type UcanCapability,\n} from './ucan';\n\nexport type CentralAuthBaseOptions = AuthBaseOptions & {\n baseUrl?: string;\n issuerPath?: string;\n sessionPath?: string;\n issuePath?: string;\n accessToken?: string | null;\n storeSessionToken?: boolean;\n sessionTokenStorageKey?: string;\n};\n\nexport type CentralIssuerInfo = {\n enabled?: boolean;\n issuerDid?: string;\n defaultAudience?: string;\n defaultCapabilities?: UcanCapability[];\n response: unknown;\n};\n\nexport type CreateCentralSessionOptions = CentralAuthBaseOptions & {\n subject: string;\n sessionTtlMs?: number;\n};\n\nexport type CentralSessionResult = {\n subject: string;\n sessionToken: string;\n expiresAt?: number;\n issuerDid?: string;\n response: unknown;\n};\n\nexport type IssueCentralUcanOptions = CentralAuthBaseOptions & {\n sessionToken?: string | null;\n audience?: string;\n capabilities?: UcanCapability[];\n expiresInMs?: number;\n ttlMs?: number;\n};\n\nexport type CentralUcanIssueResult = {\n ucan: string;\n issuerDid?: string;\n subject?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n exp?: number;\n nbf?: number;\n iat?: number;\n response: unknown;\n};\n\nexport type CreateAndIssueCentralUcanOptions = CentralAuthBaseOptions & {\n subject: string;\n sessionTtlMs?: number;\n audience?: string;\n capabilities?: UcanCapability[];\n expiresInMs?: number;\n ttlMs?: number;\n};\n\nexport type CreateAndIssueCentralUcanResult = {\n session: CentralSessionResult;\n issue: CentralUcanIssueResult;\n};\n\nexport type AuthCentralUcanFetchOptions = CentralAuthBaseOptions & {\n ucan?: string | null;\n sessionToken?: string | null;\n subject?: string;\n sessionTtlMs?: number;\n audience?: string;\n capabilities?: UcanCapability[];\n expiresInMs?: number;\n ttlMs?: number;\n};\n\nconst DEFAULT_BASE_URL = '/api/v1/public/auth/central';\nconst DEFAULT_ISSUER_PATH = 'issuer';\nconst DEFAULT_SESSION_PATH = 'session';\nconst DEFAULT_ISSUE_PATH = 'issue';\nconst DEFAULT_SESSION_TOKEN_KEY = 'centralUcanSessionToken';\n\nlet cachedCentralSessionToken: string | null = null;\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\nfunction resolveBaseUrl(options?: CentralAuthBaseOptions): string {\n return options?.baseUrl || DEFAULT_BASE_URL;\n}\n\nfunction resolveFetcher(options?: CentralAuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: CentralAuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction resolveSessionTokenKey(options?: CentralAuthBaseOptions): string {\n return options?.sessionTokenStorageKey || DEFAULT_SESSION_TOKEN_KEY;\n}\n\nfunction resolveAccessToken(options?: CentralAuthBaseOptions): string | null {\n if (typeof options?.accessToken === 'string') {\n const token = options.accessToken.trim();\n return token || null;\n }\n if (options?.accessToken === null) {\n return null;\n }\n return getAccessToken(options);\n}\n\nfunction shouldStoreSessionToken(options?: CentralAuthBaseOptions): boolean {\n return options?.storeSessionToken !== false;\n}\n\nfunction parseObject(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) {\n return {};\n }\n return value as Record<string, unknown>;\n}\n\nfunction parseEnvelopeData(payload: unknown): Record<string, unknown> {\n const root = parseObject(payload);\n if (Object.prototype.hasOwnProperty.call(root, 'data')) {\n return parseObject(root.data);\n }\n return root;\n}\n\nfunction parseStringField(obj: Record<string, unknown>, keys: string[]): string | undefined {\n for (const key of keys) {\n const value = obj[key];\n if (typeof value === 'string') {\n return value;\n }\n }\n return undefined;\n}\n\nfunction parseNumberField(obj: Record<string, unknown>, keys: string[]): number | undefined {\n for (const key of keys) {\n const value = obj[key];\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction parseCapabilitiesField(obj: Record<string, unknown>, keys: string[]): UcanCapability[] | undefined {\n for (const key of keys) {\n const value = obj[key];\n if (!Array.isArray(value)) continue;\n const caps = value\n .filter(item => item && typeof item === 'object')\n .map(item => normalizeUcanCapability(item as UcanCapability))\n .filter((cap): cap is UcanCapability => Boolean(cap));\n return caps;\n }\n return undefined;\n}\n\nfunction parseIssuerDidField(obj: Record<string, unknown>): string | undefined {\n return parseStringField(obj, ['issuerDid', 'issuer', 'did']);\n}\n\nfunction readStoredSessionToken(options?: CentralAuthBaseOptions): string | null {\n if (!shouldStoreSessionToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveSessionTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistSessionToken(token: string | null, options?: CentralAuthBaseOptions): void {\n cachedCentralSessionToken = token;\n if (!shouldStoreSessionToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveSessionTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nasync function parseJsonBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) return null;\n try {\n return JSON.parse(text);\n } catch {\n return { raw: text };\n }\n}\n\nexport function getCentralSessionToken(options?: CentralAuthBaseOptions): string | null {\n if (cachedCentralSessionToken) return cachedCentralSessionToken;\n const stored = readStoredSessionToken(options);\n if (stored) {\n cachedCentralSessionToken = stored;\n }\n return stored;\n}\n\nexport function setCentralSessionToken(token: string | null, options?: CentralAuthBaseOptions): void {\n persistSessionToken(token, options);\n}\n\nexport function clearCentralSessionToken(options?: CentralAuthBaseOptions): void {\n cachedCentralSessionToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveSessionTokenKey(options);\n localStorage.removeItem(key);\n}\n\nexport async function getCentralIssuerInfo(\n options: CentralAuthBaseOptions = {}\n): Promise<CentralIssuerInfo> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const url = joinUrl(resolveBaseUrl(options), options.issuerPath || DEFAULT_ISSUER_PATH);\n const token = resolveAccessToken(options);\n const headers = new Headers({\n accept: 'application/json',\n });\n if (token) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n const response = await fetcher(url, {\n method: 'GET',\n headers,\n credentials,\n });\n const payload = await parseJsonBody(response);\n if (!response.ok) {\n throw new Error(`Central issuer request failed: ${response.status} ${JSON.stringify(payload)}`);\n }\n\n const data = parseEnvelopeData(payload);\n return {\n enabled: typeof data.enabled === 'boolean' ? data.enabled : undefined,\n issuerDid: parseIssuerDidField(data),\n defaultAudience: parseStringField(data, ['defaultAudience']),\n defaultCapabilities: parseCapabilitiesField(data, ['defaultCapabilities']),\n response: payload,\n };\n}\n\nexport async function createCentralSession(\n options: CreateCentralSessionOptions\n): Promise<CentralSessionResult> {\n const subject = String(options?.subject || '').trim();\n if (!subject) {\n throw new Error('Missing subject');\n }\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const accessToken = resolveAccessToken(options);\n const url = joinUrl(resolveBaseUrl(options), options.sessionPath || DEFAULT_SESSION_PATH);\n const headers = new Headers({\n 'Content-Type': 'application/json',\n accept: 'application/json',\n });\n if (accessToken) {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n const response = await fetcher(url, {\n method: 'POST',\n headers,\n credentials,\n body: JSON.stringify({\n subject,\n sessionTtlMs: options.sessionTtlMs,\n }),\n });\n const payload = await parseJsonBody(response);\n if (!response.ok) {\n throw new Error(`Central session request failed: ${response.status} ${JSON.stringify(payload)}`);\n }\n\n const data = parseEnvelopeData(payload);\n const sessionToken = parseStringField(data, ['sessionToken']);\n if (!sessionToken) {\n throw new Error('Central session response missing sessionToken');\n }\n persistSessionToken(sessionToken, options);\n\n return {\n subject: parseStringField(data, ['subject']) || subject,\n sessionToken,\n expiresAt: parseNumberField(data, ['expiresAt']),\n issuerDid: parseIssuerDidField(data),\n response: payload,\n };\n}\n\nexport async function issueCentralUcan(\n options: IssueCentralUcanOptions = {}\n): Promise<CentralUcanIssueResult> {\n const sessionToken = options.sessionToken || getCentralSessionToken(options);\n if (!sessionToken) {\n throw new Error('Missing central session token');\n }\n\n const normalizedCapabilities = options.capabilities\n ? normalizeUcanCapabilities(options.capabilities)\n : undefined;\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const url = joinUrl(resolveBaseUrl(options), options.issuePath || DEFAULT_ISSUE_PATH);\n const response = await fetcher(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n Authorization: `Bearer ${sessionToken}`,\n },\n credentials,\n body: JSON.stringify({\n audience: options.audience,\n capabilities: normalizedCapabilities,\n expiresInMs: options.expiresInMs,\n ttlMs: options.ttlMs,\n }),\n });\n const payload = await parseJsonBody(response);\n if (!response.ok) {\n throw new Error(`Central UCAN issue failed: ${response.status} ${JSON.stringify(payload)}`);\n }\n\n const data = parseEnvelopeData(payload);\n const ucan = parseStringField(data, ['ucan']);\n if (!ucan) {\n throw new Error('Central UCAN response missing ucan');\n }\n\n return {\n ucan,\n issuerDid: parseIssuerDidField(data),\n subject: parseStringField(data, ['subject']),\n audience: parseStringField(data, ['audience']),\n capabilities: parseCapabilitiesField(data, ['capabilities']),\n exp: parseNumberField(data, ['exp', 'expiresAt']),\n nbf: parseNumberField(data, ['nbf', 'notBefore']),\n iat: parseNumberField(data, ['iat', 'issuedAt']),\n response: payload,\n };\n}\n\nexport async function createAndIssueCentralUcan(\n options: CreateAndIssueCentralUcanOptions\n): Promise<CreateAndIssueCentralUcanResult> {\n const session = await createCentralSession({\n ...options,\n subject: options.subject,\n sessionTtlMs: options.sessionTtlMs,\n });\n const issue = await issueCentralUcan({\n ...options,\n sessionToken: session.sessionToken,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n ttlMs: options.ttlMs,\n });\n return { session, issue };\n}\n\nexport async function authCentralUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthCentralUcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n let token = options.ucan || null;\n\n if (!token) {\n let sessionToken = options.sessionToken || getCentralSessionToken(options);\n if (!sessionToken) {\n if (!options.subject) {\n throw new Error('Missing central session token or subject');\n }\n const session = await createCentralSession({\n ...options,\n subject: options.subject,\n sessionTtlMs: options.sessionTtlMs,\n });\n sessionToken = session.sessionToken;\n }\n\n const issued = await issueCentralUcan({\n ...options,\n sessionToken,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n ttlMs: options.ttlMs,\n });\n token = issued.ucan;\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 credentials,\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\nexport type WebDavShareExpiresUnit =\n | 'minute'\n | 'hour'\n | 'day'\n | 'week'\n | 'month'\n | 'year';\n\nexport type WebDavShareItem = {\n token: string;\n name: string;\n path: string;\n url: string;\n viewCount: number;\n downloadCount: number;\n expiresAt?: string;\n createdAt?: string;\n};\n\nexport type CreateWebDavShareLinkOptions = {\n path: string;\n expiresIn?: number;\n expiresValue?: number;\n expiresUnit?: WebDavShareExpiresUnit;\n auth?: WebDavAuth;\n token?: string;\n signal?: AbortSignal;\n};\n\nexport type WebDavShareListOptions = {\n auth?: WebDavAuth;\n token?: string;\n signal?: AbortSignal;\n};\n\nexport type WebDavShareRevokeOptions = {\n auth?: WebDavAuth;\n token?: string;\n signal?: AbortSignal;\n};\n\nexport type WebDavShareRevokeResult = {\n message?: string;\n revoked?: boolean;\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 isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\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 private async requestApiJson(\n method: string,\n apiPath: string,\n body?: unknown,\n options?: {\n auth?: WebDavAuth;\n token?: string;\n signal?: AbortSignal;\n }\n ): Promise<unknown> {\n const headers = this.buildHeaders({\n auth: options?.auth,\n token: options?.token,\n contentType: body === undefined ? undefined : 'application/json',\n });\n const response = await this.fetcher(joinUrl(this.baseUrl, apiPath), {\n method,\n headers,\n body: body === undefined ? undefined : JSON.stringify(body),\n credentials: this.credentials,\n signal: options?.signal,\n });\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${apiPath} failed: ${response.status} ${response.statusText}`);\n }\n return await response.json();\n }\n\n getShareAccessUrl(token: string, fileName?: string): string {\n const normalizedToken = encodeURIComponent(String(token || '').trim());\n if (!normalizedToken) {\n throw new Error('Share token is required');\n }\n const encodedFileName = String(fileName || '').trim()\n ? `/${encodeURIComponent(String(fileName || '').trim())}`\n : '';\n return joinUrl(this.baseUrl, `/api/v1/public/share/${normalizedToken}${encodedFileName}`);\n }\n\n async createShareLink(options: CreateWebDavShareLinkOptions): Promise<WebDavShareItem> {\n const normalizedPath = String(options.path || '').trim();\n if (!normalizedPath) {\n throw new Error('Share path is required');\n }\n const payload = await this.requestApiJson(\n 'POST',\n '/api/v1/public/share/create',\n {\n path: normalizedPath,\n expiresIn: options.expiresIn,\n expiresValue: options.expiresValue,\n expiresUnit: options.expiresUnit,\n },\n options\n );\n if (!isRecord(payload)) {\n throw new Error('WebDAV share create response is invalid');\n }\n return payload as unknown as WebDavShareItem;\n }\n\n async listShareLinks(options: WebDavShareListOptions = {}): Promise<WebDavShareItem[]> {\n const payload = await this.requestApiJson('GET', '/api/v1/public/share/list', undefined, options);\n if (!isRecord(payload)) {\n return [];\n }\n const items = payload.items;\n if (!Array.isArray(items)) {\n return [];\n }\n return items.filter(isRecord) as unknown as WebDavShareItem[];\n }\n\n async revokeShareLink(token: string, options: WebDavShareRevokeOptions = {}): Promise<WebDavShareRevokeResult> {\n const normalizedToken = String(token || '').trim();\n if (!normalizedToken) {\n throw new Error('Share token is required');\n }\n const payload = await this.requestApiJson(\n 'POST',\n '/api/v1/public/share/revoke',\n { token: normalizedToken },\n options\n );\n if (!isRecord(payload)) {\n return {};\n }\n return payload as unknown as WebDavShareRevokeResult;\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 getCapabilityAction,\n getCapabilityResource,\n getOrCreateUcanRoot,\n normalizeUcanCapabilities,\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;\nconst DEFAULT_APP_ACTION = 'write';\nconst LOOPBACK_HOST_ALIASES = new Set([\n 'localhost',\n '127.0.0.1',\n '::1',\n '0:0:0:0:0:0:0:1',\n '0.0.0.0',\n]);\n\nexport type InitWebDavStorageOptions = {\n baseUrl: string;\n audience: string;\n prefix?: string;\n appDir?: string;\n appId?: string;\n appAction?: 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\nexport type AppIdLocationLike = {\n host?: string | null;\n hostname?: string | null;\n port?: string | number | null;\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 parseHostPort(rawHost: string): { hostname: string; port: string } {\n const host = rawHost.trim();\n if (!host) return { hostname: '', port: '' };\n\n const bracketMatch = host.match(/^\\[([^\\]]+)\\](?::([0-9]+))?$/);\n if (bracketMatch) {\n return {\n hostname: bracketMatch[1] || '',\n port: bracketMatch[2] || '',\n };\n }\n\n const firstColon = host.indexOf(':');\n const lastColon = host.lastIndexOf(':');\n if (firstColon > -1 && firstColon === lastColon) {\n const hostname = host.slice(0, firstColon).trim();\n const port = host.slice(firstColon + 1).trim();\n if (/^[0-9]+$/.test(port)) {\n return { hostname, port };\n }\n }\n\n return { hostname: host, port: '' };\n}\n\nexport function normalizeAppHostnameForAppId(hostname: string): string {\n const normalized = (hostname || '').trim().toLowerCase();\n if (!normalized) return '';\n const bare = normalized.replace(/^\\[(.*)\\]$/, '$1');\n if (LOOPBACK_HOST_ALIASES.has(normalized) || LOOPBACK_HOST_ALIASES.has(bare)) {\n return 'localhost';\n }\n return bare;\n}\n\nfunction buildSanitizedAppId(hostname: string, port?: string | number | null): string {\n const normalizedHostname = normalizeAppHostnameForAppId(hostname);\n if (!normalizedHostname) return '';\n const normalizedPort =\n port === undefined || port === null ? '' : String(port).trim();\n const host = normalizedPort\n ? `${normalizedHostname}:${normalizedPort}`\n : normalizedHostname;\n return sanitizeAppId(host);\n}\n\nexport function deriveAppIdFromHost(host: string): string {\n const parsed = parseHostPort(host || '');\n return buildSanitizedAppId(parsed.hostname, parsed.port);\n}\n\nexport function deriveAppIdFromLocation(\n locationLike?: AppIdLocationLike\n): string {\n const source =\n locationLike ||\n (typeof window !== 'undefined' ? (window.location as AppIdLocationLike) : undefined);\n if (!source) return '';\n\n const hostname = typeof source.hostname === 'string' ? source.hostname : '';\n const port = source.port;\n if (hostname) {\n const appId = buildSanitizedAppId(hostname, port);\n if (appId) return appId;\n }\n\n if (typeof source.host === 'string') {\n return deriveAppIdFromHost(source.host);\n }\n\n return '';\n}\n\nfunction normalizeAction(action?: string): string | null {\n const trimmed = (action || '').trim();\n return trimmed ? trimmed : null;\n}\n\nfunction buildAppCapability(options: InitWebDavStorageOptions): UcanCapability | null {\n if (!options.appId) return null;\n const action = normalizeAction(options.appAction) || DEFAULT_APP_ACTION;\n const resource = `app:all:${sanitizeAppId(options.appId)}`;\n return {\n with: resource,\n can: action,\n resource,\n action,\n };\n}\n\nfunction hasAppCapability(caps: UcanCapability[]): boolean {\n return (caps || []).some(cap => getCapabilityResource(cap).startsWith('app:'));\n}\n\nfunction dedupeCapabilities(caps: UcanCapability[]): UcanCapability[] {\n return normalizeUcanCapabilities(caps);\n}\n\nfunction ensureAppCapability(caps: UcanCapability[], options: InitWebDavStorageOptions): UcanCapability[] {\n const appCap = buildAppCapability(options);\n if (!appCap) return caps || [];\n if (hasAppCapability(caps || [])) return caps || [];\n return dedupeCapabilities([...(caps || []), appCap]);\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 const canonical = (caps || [])\n .map(cap => ({\n with: getCapabilityResource(cap),\n can: getCapabilityAction(cap),\n }))\n .filter(cap => Boolean(cap.with && cap.can));\n return JSON.stringify(canonical);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction resolveWebdavCaps(options: InitWebDavStorageOptions): UcanCapability[] {\n const baseCaps = options.capabilities || options.root?.cap || [];\n return ensureAppCapability(baseCaps, options);\n}\n\nfunction resolveInvocationCaps(\n options: InitWebDavStorageOptions,\n fallbackCaps: UcanCapability[]\n): UcanCapability[] {\n const caps = options.invocationCapabilities || fallbackCaps;\n return ensureAppCapability(caps, options);\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 = resolveWebdavCaps(options);\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 = resolveInvocationCaps(options, 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","resolveFetcher","resolveCredentials","resolveAddress"],"mappings":"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"}
|