@yeying-community/web3-bs 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dapp.d.ts +1 -0
- package/dist/web3-bs.esm.js +47 -2
- package/dist/web3-bs.esm.js.map +1 -1
- package/dist/web3-bs.umd.js +47 -2
- package/dist/web3-bs.umd.js.map +1 -1
- package/package.json +1 -1
package/dist/dapp.d.ts
CHANGED
package/dist/web3-bs.esm.js
CHANGED
|
@@ -1113,6 +1113,7 @@ function createWebDavClient(options) {
|
|
|
1113
1113
|
|
|
1114
1114
|
const tokenCache = new Map();
|
|
1115
1115
|
const TOKEN_SKEW_MS = 5000;
|
|
1116
|
+
const DEFAULT_APP_ACTION = 'write';
|
|
1116
1117
|
function normalizeAppDir(path) {
|
|
1117
1118
|
const trimmed = path.trim();
|
|
1118
1119
|
if (!trimmed)
|
|
@@ -1124,6 +1125,42 @@ function normalizeAppDir(path) {
|
|
|
1124
1125
|
function sanitizeAppId(appId) {
|
|
1125
1126
|
return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');
|
|
1126
1127
|
}
|
|
1128
|
+
function normalizeAction(action) {
|
|
1129
|
+
const trimmed = (action || '').trim();
|
|
1130
|
+
return trimmed ? trimmed : null;
|
|
1131
|
+
}
|
|
1132
|
+
function buildAppCapability(options) {
|
|
1133
|
+
if (!options.appId)
|
|
1134
|
+
return null;
|
|
1135
|
+
const action = normalizeAction(options.appAction) || DEFAULT_APP_ACTION;
|
|
1136
|
+
return {
|
|
1137
|
+
resource: `app:${sanitizeAppId(options.appId)}`,
|
|
1138
|
+
action,
|
|
1139
|
+
};
|
|
1140
|
+
}
|
|
1141
|
+
function hasAppCapability(caps) {
|
|
1142
|
+
return (caps || []).some(cap => typeof cap?.resource === 'string' && cap.resource.startsWith('app:'));
|
|
1143
|
+
}
|
|
1144
|
+
function dedupeCapabilities(caps) {
|
|
1145
|
+
const seen = new Set();
|
|
1146
|
+
return (caps || []).filter(cap => {
|
|
1147
|
+
if (!cap || !cap.resource || !cap.action)
|
|
1148
|
+
return false;
|
|
1149
|
+
const key = `${cap.resource}|${cap.action}`;
|
|
1150
|
+
if (seen.has(key))
|
|
1151
|
+
return false;
|
|
1152
|
+
seen.add(key);
|
|
1153
|
+
return true;
|
|
1154
|
+
});
|
|
1155
|
+
}
|
|
1156
|
+
function ensureAppCapability(caps, options) {
|
|
1157
|
+
const appCap = buildAppCapability(options);
|
|
1158
|
+
if (!appCap)
|
|
1159
|
+
return caps || [];
|
|
1160
|
+
if (hasAppCapability(caps || []))
|
|
1161
|
+
return caps || [];
|
|
1162
|
+
return dedupeCapabilities([...(caps || []), appCap]);
|
|
1163
|
+
}
|
|
1127
1164
|
function resolveAppDir(options) {
|
|
1128
1165
|
if (options.appDir) {
|
|
1129
1166
|
return normalizeAppDir(options.appDir);
|
|
@@ -1139,6 +1176,14 @@ function buildCapsKey(caps) {
|
|
|
1139
1176
|
function buildTokenCacheKey(issuer, audience, caps) {
|
|
1140
1177
|
return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;
|
|
1141
1178
|
}
|
|
1179
|
+
function resolveWebdavCaps(options) {
|
|
1180
|
+
const baseCaps = options.capabilities || options.root?.cap || [];
|
|
1181
|
+
return ensureAppCapability(baseCaps, options);
|
|
1182
|
+
}
|
|
1183
|
+
function resolveInvocationCaps(options, fallbackCaps) {
|
|
1184
|
+
const caps = options.invocationCapabilities || fallbackCaps;
|
|
1185
|
+
return ensureAppCapability(caps, options);
|
|
1186
|
+
}
|
|
1142
1187
|
function isTokenValid(entry, nowMs) {
|
|
1143
1188
|
if (!entry.exp)
|
|
1144
1189
|
return false;
|
|
@@ -1210,7 +1255,7 @@ async function getCachedInvocationToken(options) {
|
|
|
1210
1255
|
return token;
|
|
1211
1256
|
}
|
|
1212
1257
|
async function initWebDavStorage(options) {
|
|
1213
|
-
const caps = options
|
|
1258
|
+
const caps = resolveWebdavCaps(options);
|
|
1214
1259
|
if (!caps || caps.length === 0) {
|
|
1215
1260
|
throw new Error('Missing UCAN capabilities for WebDAV');
|
|
1216
1261
|
}
|
|
@@ -1240,7 +1285,7 @@ async function initWebDavStorage(options) {
|
|
|
1240
1285
|
expiresInMs: options.rootExpiresInMs,
|
|
1241
1286
|
});
|
|
1242
1287
|
}
|
|
1243
|
-
const invocationCaps = options
|
|
1288
|
+
const invocationCaps = resolveInvocationCaps(options, caps);
|
|
1244
1289
|
const token = await getCachedInvocationToken({
|
|
1245
1290
|
issuer: session,
|
|
1246
1291
|
audience: options.audience,
|
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/storage/webdav.ts","../src/dapp.ts"],"sourcesContent":["import {\n Eip1193Provider,\n Eip6963ProviderDetail,\n ProviderDiscoveryOptions,\n ProviderInfo,\n RequestAccountsOptions,\n AccountSelection,\n PreferredAccountOptions,\n WatchAccountsOptions,\n AccountsChangedHandler,\n} from './types';\n\nconst YEYING_RDNS = 'io.github.yeying';\nconst DEFAULT_TIMEOUT = 1000;\nconst DEFAULT_ACCOUNT_STORAGE_KEY = 'yeying:last_account';\n\nfunction getWindowEthereum(): Eip1193Provider | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { ethereum?: Eip1193Provider }).ethereum || null;\n}\n\nfunction readStoredAccount(storageKey: string): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n return null;\n }\n}\n\nfunction writeStoredAccount(storageKey: string, account: string | null): void {\n if (typeof localStorage === 'undefined') return;\n try {\n if (account) {\n localStorage.setItem(storageKey, account);\n } else {\n localStorage.removeItem(storageKey);\n }\n } catch {\n // ignore storage errors\n }\n}\n\nfunction selectPreferredAccount(\n accounts: string[],\n stored: string | null,\n preferStored: boolean\n): string | null {\n if (preferStored && stored && accounts.includes(stored)) {\n return stored;\n }\n return accounts[0] || null;\n}\n\nexport function isYeYingProvider(provider?: Eip1193Provider | null, info?: ProviderInfo): boolean {\n if (!provider) return false;\n if (provider.isYeYing) return true;\n const name = (info?.name || '').toLowerCase();\n const rdns = (info?.rdns || '').toLowerCase();\n return rdns === YEYING_RDNS || name.includes('yeying');\n}\n\nfunction selectBestProvider(\n candidates: Eip6963ProviderDetail[],\n preferYeYing: boolean\n): Eip1193Provider | null {\n if (candidates.length === 0) return null;\n if (preferYeYing) {\n const yeying = candidates.find(c => isYeYingProvider(c.provider, c.info));\n if (yeying) return yeying.provider;\n }\n return candidates[0].provider;\n}\n\nexport async function getProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider | null> {\n const preferYeYing = options.preferYeYing !== false;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT;\n const windowProvider = getWindowEthereum();\n\n if (preferYeYing && isYeYingProvider(windowProvider)) {\n return windowProvider;\n }\n\n if (typeof window === 'undefined') {\n return windowProvider;\n }\n\n const discovered: Eip6963ProviderDetail[] = [];\n let resolved = false;\n\n return await new Promise(resolve => {\n const cleanup = () => {\n window.removeEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.removeEventListener('ethereum#initialized', onEthereumInitialized as EventListener);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const safeResolve = (provider: Eip1193Provider | null) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n resolve(provider);\n };\n\n const onAnnounce = (event: Event) => {\n const detail = (event as CustomEvent<Eip6963ProviderDetail>).detail;\n if (!detail?.provider) return;\n discovered.push(detail);\n\n if (preferYeYing && isYeYingProvider(detail.provider, detail.info)) {\n safeResolve(detail.provider);\n }\n };\n\n const onEthereumInitialized = () => {\n const injected = getWindowEthereum();\n if (preferYeYing && isYeYingProvider(injected)) {\n safeResolve(injected);\n }\n };\n\n window.addEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.addEventListener('ethereum#initialized', onEthereumInitialized as EventListener, { once: true });\n\n const timeoutId = setTimeout(() => {\n if (resolved) return;\n const best =\n selectBestProvider(discovered, preferYeYing) ||\n windowProvider ||\n getWindowEthereum();\n safeResolve(best || null);\n }, timeoutMs);\n\n try {\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n } catch {\n // Ignore if browser doesn't support CustomEvent target\n }\n\n if (!preferYeYing && windowProvider) {\n safeResolve(windowProvider);\n }\n });\n}\n\nexport async function requireProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider> {\n const provider = await getProvider(options);\n if (!provider) {\n throw new Error('No injected wallet provider found');\n }\n return provider;\n}\n\nexport async function requestAccounts(\n options: RequestAccountsOptions = {}\n): Promise<string[]> {\n const provider = options.provider || (await requireProvider());\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getAccounts(provider?: Eip1193Provider): Promise<string[]> {\n const p = provider || (await requireProvider());\n const accounts = (await p.request({ method: 'eth_accounts' })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getChainId(provider?: Eip1193Provider): Promise<string | null> {\n const p = provider || (await requireProvider());\n const chainId = (await p.request({ method: 'eth_chainId' })) as string;\n return typeof chainId === 'string' ? chainId : null;\n}\n\nexport async function getPreferredAccount(\n options: PreferredAccountOptions = {}\n): Promise<AccountSelection> {\n const provider = options.provider || (await requireProvider());\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n let accounts = await getAccounts(provider);\n if (accounts.length === 0 && options.autoConnect) {\n accounts = await requestAccounts({ provider });\n }\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n return { account, accounts };\n}\n\nexport function watchAccounts(\n provider: Eip1193Provider,\n handler: AccountsChangedHandler,\n options: WatchAccountsOptions = {}\n): () => void {\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n return onAccountsChanged(provider, (accounts) => {\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n handler({ account, accounts });\n });\n}\n\nexport async function getBalance(\n provider?: Eip1193Provider,\n address?: string,\n blockTag: string = 'latest'\n): Promise<string> {\n const p = provider || (await requireProvider());\n let target = address;\n if (!target) {\n const accounts = await getAccounts(p);\n target = accounts[0];\n }\n if (!target) {\n throw new Error('No account available for balance');\n }\n\n const balance = (await p.request({\n method: 'eth_getBalance',\n params: [target, blockTag],\n })) as string;\n if (typeof balance !== 'string') {\n throw new Error('Invalid balance response');\n }\n return balance;\n}\n\nexport function onAccountsChanged(\n provider: Eip1193Provider,\n handler: (accounts: string[]) => void\n): () => void {\n provider.on?.('accountsChanged', handler);\n return () => provider.removeListener?.('accountsChanged', handler);\n}\n\nexport function onChainChanged(\n provider: Eip1193Provider,\n handler: (chainId: string) => void\n): () => void {\n provider.on?.('chainChanged', handler);\n return () => provider.removeListener?.('chainChanged', handler);\n}\n","import { getAccounts, requireProvider } from './provider';\nimport {\n AuthBaseOptions,\n AuthFetchOptions,\n AuthTokenResult,\n Eip1193Provider,\n LoginWithChallengeOptions,\n LogoutOptions,\n RefreshAccessTokenOptions,\n SignMessageOptions,\n} from './types';\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const trimmed = path.replace(/^\\/+/, '');\n return `${normalizeBaseUrl(baseUrl)}/${trimmed}`;\n}\n\nconst DEFAULT_TOKEN_KEY = 'authToken';\nlet cachedAccessToken: string | null = null;\nlet refreshInFlight: Promise<AuthTokenResult> | null = null;\n\nfunction resolveTokenKey(options?: AuthBaseOptions): string {\n return options?.tokenStorageKey || DEFAULT_TOKEN_KEY;\n}\n\nfunction shouldStoreToken(options?: AuthBaseOptions): boolean {\n return options?.storeToken !== false;\n}\n\nfunction resolveFetcher(options?: AuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: AuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction readStoredToken(options?: AuthBaseOptions): string | null {\n if (!shouldStoreToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistToken(token: string | null, options?: AuthBaseOptions): void {\n cachedAccessToken = token;\n if (!shouldStoreToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nexport function getAccessToken(options?: AuthBaseOptions): string | null {\n if (cachedAccessToken) return cachedAccessToken;\n const stored = readStoredToken(options);\n if (stored) {\n cachedAccessToken = stored;\n }\n return stored;\n}\n\nexport function setAccessToken(token: string | null, options?: AuthBaseOptions): void {\n persistToken(token, options);\n}\n\nexport function clearAccessToken(options?: AuthBaseOptions): void {\n cachedAccessToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n localStorage.removeItem(key);\n}\n\nasync function resolveAddress(\n provider: Eip1193Provider,\n address?: string\n): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) {\n throw new Error('No account available');\n }\n return accounts[0];\n}\n\nfunction extractChallenge(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.challenge;\n if (typeof value === 'string') return value;\n }\n const direct = data.challenge || data.result;\n if (typeof direct === 'string') return direct;\n if (direct && typeof direct === 'object') {\n const nested = (direct as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nfunction extractToken(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.token;\n if (typeof value === 'string') return value;\n }\n const direct = data.token || data.result;\n if (typeof direct === 'string') return direct;\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyToken = body.token;\n if (typeof bodyToken === 'string') return bodyToken;\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).token;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nexport async function signMessage(options: SignMessageOptions): Promise<string> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const method = options.method || 'personal_sign';\n\n const params =\n method === 'eth_sign'\n ? [address, options.message]\n : [options.message, address];\n\n const signature = await provider.request({\n method,\n params,\n });\n\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n\n return signature;\n}\n\nexport async function loginWithChallenge(\n options: LoginWithChallengeOptions = {}\n): Promise<{\n token: string;\n address: string;\n signature: string;\n challenge: string;\n response: unknown;\n}> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const challengeUrl = joinUrl(baseUrl, options.challengePath || 'challenge');\n const verifyUrl = joinUrl(baseUrl, options.verifyPath || 'verify');\n\n const challengeBody = {\n address,\n };\n\n const challengeRes = await fetcher(challengeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(challengeBody),\n });\n\n if (!challengeRes.ok) {\n const text = await challengeRes.text();\n throw new Error(`Challenge request failed: ${challengeRes.status} ${text}`);\n }\n\n const challengePayload = await challengeRes.json();\n const challenge = extractChallenge(challengePayload);\n if (!challenge) {\n throw new Error('Challenge response missing challenge');\n }\n\n const signature = await signMessage({\n provider,\n address,\n message: challenge,\n method: options.signMethod || 'personal_sign',\n });\n\n const verifyBody = {\n address,\n signature,\n };\n\n const verifyRes = await fetcher(verifyUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(verifyBody),\n });\n\n if (!verifyRes.ok) {\n const text = await verifyRes.text();\n throw new Error(`Verify request failed: ${verifyRes.status} ${text}`);\n }\n\n const verifyPayload = await verifyRes.json();\n const token = extractToken(verifyPayload);\n if (!token) {\n throw new Error('Verify response missing token');\n }\n\n persistToken(token, options);\n\n return {\n token,\n address,\n signature,\n challenge,\n response: verifyPayload,\n };\n}\n\nexport async function refreshAccessToken(\n options: RefreshAccessTokenOptions = {}\n): Promise<AuthTokenResult> {\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n const task = (async () => {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const refreshUrl = joinUrl(baseUrl, options.refreshPath || 'refresh');\n\n const refreshRes = await fetcher(refreshUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!refreshRes.ok) {\n const text = await refreshRes.text();\n throw new Error(`Refresh request failed: ${refreshRes.status} ${text}`);\n }\n\n const refreshPayload = await refreshRes.json();\n const token = extractToken(refreshPayload);\n if (!token) {\n throw new Error('Refresh response missing token');\n }\n\n persistToken(token, options);\n\n return { token, response: refreshPayload };\n })();\n\n refreshInFlight = task;\n try {\n return await task;\n } finally {\n refreshInFlight = null;\n }\n}\n\nexport async function logout(options: LogoutOptions = {}): Promise<{ response: unknown }> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const logoutUrl = joinUrl(baseUrl, options.logoutPath || 'logout');\n\n const logoutRes = await fetcher(logoutUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!logoutRes.ok) {\n const text = await logoutRes.text();\n throw new Error(`Logout request failed: ${logoutRes.status} ${text}`);\n }\n\n let payload: unknown = null;\n try {\n payload = await logoutRes.json();\n } catch {\n payload = null;\n }\n\n clearAccessToken(options);\n\n return { response: payload };\n}\n\nexport async function authFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const retryOnUnauthorized = options.retryOnUnauthorized !== false;\n\n const performRequest = async (tokenOverride?: string | null): Promise<Response> => {\n const headers = new Headers(init.headers || {});\n const token = tokenOverride ?? options.accessToken ?? getAccessToken(options);\n if (token && !headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n return fetcher(input, {\n ...init,\n headers,\n credentials,\n });\n };\n\n const initialRes = await performRequest();\n if (initialRes.status !== 401 || !retryOnUnauthorized) {\n return initialRes;\n }\n\n try {\n const refreshed = await refreshAccessToken(options);\n return await performRequest(refreshed.token);\n } catch {\n return initialRes;\n }\n}\n","import { getAccounts, getChainId, getProvider, requireProvider } from './provider';\nimport { Eip1193Provider } from './types';\n\nexport type UcanCapability = {\n resource: string;\n action: string;\n};\n\nexport type UcanRootProof = {\n type: 'siwe';\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n siwe: {\n message: string;\n signature: string;\n };\n};\n\nexport type UcanProof = UcanRootProof | string;\n\nexport type UcanTokenPayload = {\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n prf: UcanProof[];\n};\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n signer?: (signingInput: string, payload: UcanTokenPayload) => Promise<string>;\n privateKey?: CryptoKey;\n};\n\nexport type CreateUcanSessionOptions = {\n id?: string;\n expiresInMs?: number;\n forceNew?: boolean;\n provider?: Eip1193Provider;\n};\n\nexport type CreateRootUcanOptions = {\n provider?: Eip1193Provider;\n address?: string;\n session?: UcanSessionKey;\n sessionId?: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n domain?: string;\n uri?: string;\n chainId?: string;\n statement?: string;\n nonce?: string;\n notBeforeMs?: number;\n};\n\nexport type CreateUcanTokenOptions = {\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n audience: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n notBeforeMs?: number;\n proofs?: UcanProof[];\n};\n\nexport type UcanFetchOptions = {\n ucan?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n proofs?: UcanProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n};\n\nconst DEFAULT_SESSION_ID = 'default';\nconst DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;\nconst DEFAULT_UCAN_TTL = 5 * 60 * 1000;\nconst DB_NAME = 'yeying-web3';\nconst DB_STORE = 'ucan-sessions';\n\nconst textEncoder = new TextEncoder();\n\nfunction toBase64Url(data: Uint8Array | ArrayBuffer): string {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction encodeJson(value: unknown): string {\n return toBase64Url(textEncoder.encode(JSON.stringify(value)));\n}\n\nfunction randomNonce(bytes = 16): string {\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return Array.from(buffer)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction normalizeExpiry(exp: number | undefined, fallbackMs: number): number {\n if (typeof exp === 'number' && !Number.isNaN(exp)) return exp;\n return Date.now() + fallbackMs;\n}\n\n\nfunction openDb(): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(DB_STORE)) {\n db.createObjectStore(DB_STORE, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function readSessionRecord(id: string): Promise<UcanSessionRecord | null> {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readonly');\n const store = tx.objectStore(DB_STORE);\n const request = store.get(id);\n request.onsuccess = () => resolve((request.result as UcanSessionRecord) || null);\n request.onerror = () => reject(request.error);\n });\n } catch {\n return null;\n }\n}\n\nasync function writeSessionRecord(record: UcanSessionRecord): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.put(record);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nasync function deleteSessionRecord(id: string): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.delete(id);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nexport async function getUcanSession(\n id: string = DEFAULT_SESSION_ID,\n provider?: Eip1193Provider\n): Promise<UcanSessionKey | null> {\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!walletProvider) return null;\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return null;\n }\n}\n\nasync function requestWalletUcanSession(\n provider: Eip1193Provider,\n options: CreateUcanSessionOptions\n): Promise<UcanSessionKey> {\n const sessionId = options.id || DEFAULT_SESSION_ID;\n const result = (await provider.request({\n method: 'yeying_ucan_session',\n params: [\n {\n sessionId,\n expiresInMs: options.expiresInMs,\n forceNew: options.forceNew,\n },\n ],\n })) as {\n id?: string;\n did?: string;\n createdAt?: number;\n expiresAt?: number | null;\n };\n\n if (!result || typeof result.did !== 'string') {\n throw new Error('Invalid wallet UCAN session response');\n }\n\n const createdAt = typeof result.createdAt === 'number' ? result.createdAt : Date.now();\n const expiresAt = typeof result.expiresAt === 'number' ? result.expiresAt : null;\n const existing = await readSessionRecord(sessionId);\n const nextRecord: UcanSessionRecord = {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n root: existing?.root,\n };\n if (nextRecord.root && nextRecord.root.aud && nextRecord.root.aud !== nextRecord.did) {\n nextRecord.root = undefined;\n }\n await writeSessionRecord(nextRecord);\n\n return {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n signer: async (signingInput: string, payload: UcanTokenPayload) => {\n const signatureResult = (await provider.request({\n method: 'yeying_ucan_sign',\n params: [\n {\n sessionId,\n signingInput,\n payload,\n },\n ],\n })) as { signature?: string } | string;\n\n if (typeof signatureResult === 'string') {\n return signatureResult;\n }\n if (signatureResult && typeof signatureResult.signature === 'string') {\n return signatureResult.signature;\n }\n throw new Error('Invalid wallet UCAN signature response');\n },\n };\n}\n\nexport async function createUcanSession(\n options: CreateUcanSessionOptions = {}\n): Promise<UcanSessionKey> {\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!provider) {\n throw new Error('No wallet provider for UCAN session');\n }\n return await requestWalletUcanSession(provider, options);\n}\n\nexport async function clearUcanSession(id: string = DEFAULT_SESSION_ID): Promise<void> {\n await deleteSessionRecord(id);\n}\n\nexport async function storeUcanRoot(\n root: UcanRootProof,\n id: string = DEFAULT_SESSION_ID\n): Promise<void> {\n const record = await readSessionRecord(id);\n const createdAt = record?.createdAt ?? Date.now();\n const expiresAt = record?.expiresAt ?? null;\n const did = record?.did || root.aud;\n const nextRecord: UcanSessionRecord = {\n id,\n did,\n createdAt,\n expiresAt,\n root,\n };\n await writeSessionRecord(nextRecord);\n}\n\nexport async function getStoredUcanRoot(id: string = DEFAULT_SESSION_ID): Promise<UcanRootProof | null> {\n const record = await readSessionRecord(id);\n return record?.root || null;\n}\n\nfunction capsEqual(a: UcanCapability[] | undefined, b: UcanCapability[] | undefined): boolean {\n return JSON.stringify(a || []) === JSON.stringify(b || []);\n}\n\nfunction isRootExpired(root: UcanRootProof, nowMs: number): boolean {\n return Boolean(root.exp && nowMs > root.exp);\n}\n\nexport async function getOrCreateUcanRoot(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const nowMs = Date.now();\n const stored = await getStoredUcanRoot(session.id);\n if (\n stored &&\n (!stored.aud || stored.aud === session.did) &&\n capsEqual(stored.cap, options.capabilities) &&\n !isRootExpired(stored, nowMs)\n ) {\n return stored;\n }\n\n return await createRootUcan({ ...options, provider, session });\n}\n\nfunction buildUcanStatement(payload: Record<string, unknown>): string {\n return `UCAN-AUTH ${JSON.stringify(payload)}`;\n}\n\nfunction buildSiweMessage(params: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: string;\n nonce: string;\n issuedAt: string;\n expirationTime?: string;\n}): string {\n const lines = [\n `${params.domain} wants you to sign in with your Ethereum account:`,\n params.address,\n '',\n params.statement,\n '',\n `URI: ${params.uri}`,\n 'Version: 1',\n `Chain ID: ${params.chainId}`,\n `Nonce: ${params.nonce}`,\n `Issued At: ${params.issuedAt}`,\n ];\n if (params.expirationTime) {\n lines.push(`Expiration Time: ${params.expirationTime}`);\n }\n return lines.join('\\n');\n}\n\nasync function resolveAddress(provider: Eip1193Provider, address?: string): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) throw new Error('No account available');\n return accounts[0];\n}\n\nasync function signWithProvider(\n provider: Eip1193Provider,\n address: string,\n message: string\n): Promise<string> {\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, address],\n });\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n return signature;\n}\n\nexport async function createRootUcan(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const address = await resolveAddress(provider, options.address);\n const chainId = options.chainId || (await getChainId(provider)) || '1';\n const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : '127.0.0.1');\n const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://127.0.0.1');\n const nonce = options.nonce || randomNonce(8);\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const nbf = options.notBeforeMs;\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: options.capabilities,\n exp,\n };\n if (nbf) statementPayload.nbf = nbf;\n\n const statement = options.statement || buildUcanStatement(statementPayload);\n const issuedAt = new Date().toISOString();\n const expirationTime = new Date(exp).toISOString();\n const message = buildSiweMessage({\n domain,\n address,\n statement,\n uri,\n chainId,\n nonce,\n issuedAt,\n expirationTime,\n });\n\n const signature = await signWithProvider(provider, address, message);\n\n const root: UcanRootProof = {\n type: 'siwe',\n iss: `did:pkh:eth:${address.toLowerCase()}`,\n aud: session.did,\n cap: options.capabilities,\n exp,\n nbf,\n siwe: {\n message,\n signature,\n },\n };\n\n await storeUcanRoot(root, session.id);\n\n return root;\n}\n\nasync function signUcanPayload(payload: UcanTokenPayload, session: UcanSessionKey): Promise<string> {\n const header = { alg: 'EdDSA', typ: 'UCAN' };\n const headerB64 = encodeJson(header);\n const payloadB64 = encodeJson(payload);\n const signingInput = `${headerB64}.${payloadB64}`;\n let signatureB64: string;\n\n if (session.signer) {\n signatureB64 = await session.signer(signingInput, payload);\n } else {\n if (!session.privateKey) {\n throw new Error('Missing UCAN session key');\n }\n const data = textEncoder.encode(signingInput);\n const signature = await crypto.subtle.sign('Ed25519', session.privateKey, data);\n signatureB64 = toBase64Url(signature);\n }\n return `${headerB64}.${payloadB64}.${signatureB64}`;\n}\n\nasync function resolveProofs(\n options: CreateUcanTokenOptions,\n issuer?: UcanSessionKey\n): Promise<UcanProof[]> {\n if (options.proofs && options.proofs.length > 0) return options.proofs;\n const stored = await getStoredUcanRoot(options.sessionId || DEFAULT_SESSION_ID);\n if (!stored) {\n throw new Error('Missing UCAN proof chain');\n }\n if (issuer?.did && stored.aud && stored.aud !== issuer.did) {\n throw new Error('UCAN root audience mismatch');\n }\n return [stored];\n}\n\nexport async function createDelegationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function createInvocationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function authUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: UcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = options.fetcher || fetch;\n let token = options.ucan;\n if (!token) {\n if (!options.audience || !options.capabilities) {\n throw new Error('Missing UCAN audience or capabilities');\n }\n token = await createInvocationUcan({\n issuer: options.issuer,\n sessionId: options.sessionId,\n provider: options.provider,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n proofs: options.proofs,\n });\n }\n\n const headers = new Headers(init.headers || {});\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetcher(input, {\n ...init,\n headers,\n });\n}\n","export type WebDavAuth =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string };\n\nexport type WebDavClientOptions = {\n baseUrl: string;\n prefix?: string;\n auth?: WebDavAuth;\n token?: string;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type WebDavRequestOptions = {\n headers?: Record<string, string>;\n auth?: WebDavAuth;\n token?: string;\n depth?: number | 'infinity';\n overwrite?: boolean;\n contentType?: string;\n signal?: AbortSignal;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix || prefix === '/') return '';\n let next = prefix.startsWith('/') ? prefix : `/${prefix}`;\n next = next.replace(/\\/+$/, '');\n return next;\n}\n\nfunction normalizePath(path: string): string {\n if (!path || path === '/') return '/';\n const next = path.startsWith('/') ? path : `/${path}`;\n return encodeURI(next);\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const base = normalizeBaseUrl(baseUrl);\n const suffix = path.startsWith('/') ? path : `/${path}`;\n return `${base}${suffix}`;\n}\n\nfunction resolveAuthHeader(auth?: WebDavAuth, token?: string): string | null {\n if (auth?.type === 'bearer') {\n return `Bearer ${auth.token}`;\n }\n if (auth?.type === 'basic') {\n const raw = `${auth.username}:${auth.password}`;\n return `Basic ${btoa(raw)}`;\n }\n if (token) {\n return `Bearer ${token}`;\n }\n return null;\n}\n\nexport class WebDavClient {\n private baseUrl: string;\n private prefix: string;\n private auth?: WebDavAuth;\n private token?: string;\n private fetcher: typeof fetch;\n private credentials?: RequestCredentials;\n\n constructor(options: WebDavClientOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.prefix = normalizePrefix(options.prefix);\n this.auth = options.auth;\n this.token = options.token;\n this.fetcher = options.fetcher || ((input, init) => fetch(input, init));\n this.credentials = options.credentials;\n }\n\n setToken(token: string | null) {\n this.token = token || undefined;\n }\n\n setAuth(auth?: WebDavAuth) {\n this.auth = auth;\n }\n\n private buildUrl(path: string): string {\n const webdavPath = `${this.prefix}${normalizePath(path)}`;\n return `${this.baseUrl}${webdavPath}`;\n }\n\n private buildHeaders(options?: WebDavRequestOptions): Headers {\n const headers = new Headers(options?.headers || {});\n const authHeader = resolveAuthHeader(options?.auth || this.auth, options?.token || this.token);\n if (authHeader) {\n headers.set('Authorization', authHeader);\n }\n if (options?.depth !== undefined) {\n headers.set('Depth', String(options.depth));\n }\n if (typeof options?.overwrite === 'boolean') {\n headers.set('Overwrite', options.overwrite ? 'T' : 'F');\n }\n if (options?.contentType) {\n headers.set('Content-Type', options.contentType);\n }\n return headers;\n }\n\n async request(\n method: string,\n path: string,\n body?: BodyInit | null,\n options: WebDavRequestOptions = {}\n ): Promise<Response> {\n const response = await this.fetcher(this.buildUrl(path), {\n method,\n headers: this.buildHeaders(options),\n body: body ?? undefined,\n credentials: this.credentials,\n signal: options.signal,\n } as RequestInit);\n\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${path} failed: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n async listDirectory(path: string = '/', depth: number | 'infinity' = 1): Promise<string> {\n const res = await this.request('PROPFIND', path, null, { depth });\n return await res.text();\n }\n\n async download(path: string): Promise<Response> {\n return await this.request('GET', path);\n }\n\n async downloadText(path: string): Promise<string> {\n const res = await this.download(path);\n return await res.text();\n }\n\n async downloadArrayBuffer(path: string): Promise<ArrayBuffer> {\n const res = await this.download(path);\n return await res.arrayBuffer();\n }\n\n async upload(path: string, content: BodyInit, contentType?: string): Promise<Response> {\n return await this.request('PUT', path, content, { contentType });\n }\n\n async createDirectory(path: string): Promise<Response> {\n return await this.request('MKCOL', path);\n }\n\n async ensureDirectory(path: string): Promise<void> {\n if (!path || path === '/') return;\n const segments = path.split('/').filter(Boolean);\n if (segments.length === 0) return;\n\n let current = '';\n for (const segment of segments) {\n current = `${current}/${segment}`;\n const res = await this.fetcher(this.buildUrl(current), {\n method: 'MKCOL',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n } as RequestInit);\n\n if (res.ok) continue;\n if (res.status === 405) continue;\n throw new Error(`WebDAV MKCOL ${current} failed: ${res.status} ${res.statusText}`);\n }\n }\n\n async remove(path: string): Promise<Response> {\n return await this.request('DELETE', path);\n }\n\n async move(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('MOVE', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async copy(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('COPY', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async getQuota(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/quota'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV quota failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async listRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/list'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle list failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async recoverRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/recover'), {\n method: 'POST',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle recover failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async deleteRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/permanent'), {\n method: 'DELETE',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle delete failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async clearRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/clear'), {\n method: 'DELETE',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle clear failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n}\n\nexport function createWebDavClient(options: WebDavClientOptions): WebDavClient {\n return new WebDavClient(options);\n}\n","import { requireProvider } from './auth/provider';\nimport { loginWithChallenge } from './auth/siwe';\nimport {\n createInvocationUcan,\n createUcanSession,\n getOrCreateUcanRoot,\n UcanCapability,\n UcanRootProof,\n UcanSessionKey,\n UcanTokenPayload,\n} from './auth/ucan';\nimport { Eip1193Provider, LoginWithChallengeOptions } from './auth/types';\nimport { createWebDavClient, WebDavClient } from './storage/webdav';\n\ntype CachedUcanToken = {\n token: string;\n exp: number;\n nbf?: number;\n};\n\nconst tokenCache = new Map<string, CachedUcanToken>();\nconst TOKEN_SKEW_MS = 5000;\n\nexport type InitWebDavStorageOptions = {\n baseUrl: string;\n audience: string;\n prefix?: string;\n appDir?: string;\n appId?: string;\n ensureAppDir?: boolean;\n capabilities?: UcanCapability[];\n invocationCapabilities?: UcanCapability[];\n provider?: Eip1193Provider;\n sessionId?: string;\n session?: UcanSessionKey;\n root?: UcanRootProof;\n rootExpiresInMs?: number;\n invocationExpiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type InitWebDavStorageResult = {\n client: WebDavClient;\n token: string;\n appDir?: string;\n session: UcanSessionKey;\n root: UcanRootProof;\n};\n\nexport type InitDappSessionOptions = {\n provider?: Eip1193Provider;\n address?: string;\n appAuth?: LoginWithChallengeOptions;\n webdav?: InitWebDavStorageOptions;\n};\n\nexport type InitDappSessionResult = {\n provider: Eip1193Provider;\n address?: string;\n appLogin?: Awaited<ReturnType<typeof loginWithChallenge>>;\n ucanSession?: UcanSessionKey;\n ucanRoot?: UcanRootProof;\n webdavClient?: WebDavClient;\n webdavToken?: string;\n webdavAppDir?: string;\n};\n\nfunction normalizeAppDir(path: string): string {\n const trimmed = path.trim();\n if (!trimmed) return '/';\n let next = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n next = next.replace(/\\/+$/, '');\n return next || '/';\n}\n\nfunction sanitizeAppId(appId: string): string {\n return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');\n}\n\nfunction resolveAppDir(options: InitWebDavStorageOptions): string | undefined {\n if (options.appDir) {\n return normalizeAppDir(options.appDir);\n }\n if (options.appId) {\n return normalizeAppDir(`/apps/${sanitizeAppId(options.appId)}`);\n }\n return undefined;\n}\n\nfunction buildCapsKey(caps: UcanCapability[]): string {\n return JSON.stringify(caps || []);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction isTokenValid(entry: CachedUcanToken, nowMs: number): boolean {\n if (!entry.exp) return false;\n if (entry.nbf && nowMs < entry.nbf) return false;\n return entry.exp - TOKEN_SKEW_MS > nowMs;\n}\n\nfunction decodeBase64Url(input: string): string | null {\n if (!input) return null;\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');\n try {\n if (typeof atob === 'function') {\n return atob(padded);\n }\n } catch {\n // ignore\n }\n try {\n const nodeBuffer = (globalThis as {\n Buffer?: { from: (input: string, encoding: string) => { toString: (encoding: string) => string } };\n }).Buffer;\n if (nodeBuffer) {\n return nodeBuffer.from(padded, 'base64').toString('utf8');\n }\n } catch {\n return null;\n }\n return null;\n}\n\nfunction decodeUcanPayload(token: string): UcanTokenPayload | null {\n const parts = token.split('.');\n if (parts.length < 2) return null;\n const decoded = decodeBase64Url(parts[1]);\n if (!decoded) return null;\n try {\n return JSON.parse(decoded) as UcanTokenPayload;\n } catch {\n return null;\n }\n}\n\nasync function getCachedInvocationToken(options: {\n issuer: UcanSessionKey;\n audience: string;\n capabilities: UcanCapability[];\n proofs: UcanRootProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n}): Promise<string> {\n const cacheKey = buildTokenCacheKey(options.issuer, options.audience, options.capabilities);\n const cached = tokenCache.get(cacheKey);\n const nowMs = Date.now();\n if (cached && isTokenValid(cached, nowMs)) {\n return cached.token;\n }\n\n const token = await createInvocationUcan({\n issuer: options.issuer,\n audience: options.audience,\n capabilities: options.capabilities,\n proofs: options.proofs,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const payload = decodeUcanPayload(token);\n if (payload && typeof payload.exp === 'number') {\n tokenCache.set(cacheKey, {\n token,\n exp: payload.exp,\n nbf: payload.nbf,\n });\n }\n\n return token;\n}\n\nexport async function initWebDavStorage(\n options: InitWebDavStorageOptions\n): Promise<InitWebDavStorageResult> {\n const caps = options.capabilities || options.root?.cap;\n if (!caps || caps.length === 0) {\n throw new Error('Missing UCAN capabilities for WebDAV');\n }\n\n const needsProvider = !options.session || !options.root;\n const provider =\n options.provider || (needsProvider ? await requireProvider() : undefined);\n\n const session =\n options.session ||\n (await createUcanSession({\n id: options.sessionId,\n provider,\n }));\n\n const nowMs = Date.now();\n let root = options.root;\n if (root && root.aud && root.aud !== session.did) {\n root = undefined;\n }\n if (root && buildCapsKey(root.cap) !== buildCapsKey(caps)) {\n root = undefined;\n }\n if (root && root.exp && nowMs > root.exp) {\n root = undefined;\n }\n\n if (!root) {\n root = await getOrCreateUcanRoot({\n provider: provider || (await requireProvider()),\n session,\n capabilities: caps,\n expiresInMs: options.rootExpiresInMs,\n });\n }\n\n const invocationCaps = options.invocationCapabilities || caps;\n\n const token = await getCachedInvocationToken({\n issuer: session,\n audience: options.audience,\n capabilities: invocationCaps,\n proofs: [root],\n expiresInMs: options.invocationExpiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const client = createWebDavClient({\n baseUrl: options.baseUrl,\n prefix: options.prefix,\n token,\n fetcher: options.fetcher,\n credentials: options.credentials,\n });\n\n const appDir = resolveAppDir(options);\n if (appDir && options.ensureAppDir !== false) {\n await client.ensureDirectory(appDir);\n }\n\n return {\n client,\n token,\n appDir,\n session,\n root,\n };\n}\n\nexport async function initDappSession(\n options: InitDappSessionOptions\n): Promise<InitDappSessionResult> {\n if (!options.appAuth && !options.webdav) {\n throw new Error('No init options provided');\n }\n\n const provider =\n options.provider ||\n options.appAuth?.provider ||\n options.webdav?.provider ||\n (await requireProvider());\n\n const result: InitDappSessionResult = {\n provider,\n address: options.address,\n };\n\n if (options.appAuth) {\n const appLogin = await loginWithChallenge({\n ...options.appAuth,\n provider: options.appAuth.provider || provider,\n address: options.appAuth.address || options.address,\n });\n result.appLogin = appLogin;\n result.address = appLogin.address;\n }\n\n if (options.webdav) {\n const webdav = await initWebDavStorage({\n ...options.webdav,\n provider: options.webdav.provider || provider,\n });\n result.ucanSession = webdav.session;\n result.ucanRoot = webdav.root;\n result.webdavClient = webdav.client;\n result.webdavToken = webdav.token;\n result.webdavAppDir = webdav.appDir;\n }\n\n return result;\n}\n"],"names":["normalizeBaseUrl","joinUrl","resolveAddress"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web3-bs.esm.js","sources":["../src/auth/provider.ts","../src/auth/siwe.ts","../src/auth/ucan.ts","../src/storage/webdav.ts","../src/dapp.ts"],"sourcesContent":["import {\n Eip1193Provider,\n Eip6963ProviderDetail,\n ProviderDiscoveryOptions,\n ProviderInfo,\n RequestAccountsOptions,\n AccountSelection,\n PreferredAccountOptions,\n WatchAccountsOptions,\n AccountsChangedHandler,\n} from './types';\n\nconst YEYING_RDNS = 'io.github.yeying';\nconst DEFAULT_TIMEOUT = 1000;\nconst DEFAULT_ACCOUNT_STORAGE_KEY = 'yeying:last_account';\n\nfunction getWindowEthereum(): Eip1193Provider | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { ethereum?: Eip1193Provider }).ethereum || null;\n}\n\nfunction readStoredAccount(storageKey: string): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n return null;\n }\n}\n\nfunction writeStoredAccount(storageKey: string, account: string | null): void {\n if (typeof localStorage === 'undefined') return;\n try {\n if (account) {\n localStorage.setItem(storageKey, account);\n } else {\n localStorage.removeItem(storageKey);\n }\n } catch {\n // ignore storage errors\n }\n}\n\nfunction selectPreferredAccount(\n accounts: string[],\n stored: string | null,\n preferStored: boolean\n): string | null {\n if (preferStored && stored && accounts.includes(stored)) {\n return stored;\n }\n return accounts[0] || null;\n}\n\nexport function isYeYingProvider(provider?: Eip1193Provider | null, info?: ProviderInfo): boolean {\n if (!provider) return false;\n if (provider.isYeYing) return true;\n const name = (info?.name || '').toLowerCase();\n const rdns = (info?.rdns || '').toLowerCase();\n return rdns === YEYING_RDNS || name.includes('yeying');\n}\n\nfunction selectBestProvider(\n candidates: Eip6963ProviderDetail[],\n preferYeYing: boolean\n): Eip1193Provider | null {\n if (candidates.length === 0) return null;\n if (preferYeYing) {\n const yeying = candidates.find(c => isYeYingProvider(c.provider, c.info));\n if (yeying) return yeying.provider;\n }\n return candidates[0].provider;\n}\n\nexport async function getProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider | null> {\n const preferYeYing = options.preferYeYing !== false;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT;\n const windowProvider = getWindowEthereum();\n\n if (preferYeYing && isYeYingProvider(windowProvider)) {\n return windowProvider;\n }\n\n if (typeof window === 'undefined') {\n return windowProvider;\n }\n\n const discovered: Eip6963ProviderDetail[] = [];\n let resolved = false;\n\n return await new Promise(resolve => {\n const cleanup = () => {\n window.removeEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.removeEventListener('ethereum#initialized', onEthereumInitialized as EventListener);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const safeResolve = (provider: Eip1193Provider | null) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n resolve(provider);\n };\n\n const onAnnounce = (event: Event) => {\n const detail = (event as CustomEvent<Eip6963ProviderDetail>).detail;\n if (!detail?.provider) return;\n discovered.push(detail);\n\n if (preferYeYing && isYeYingProvider(detail.provider, detail.info)) {\n safeResolve(detail.provider);\n }\n };\n\n const onEthereumInitialized = () => {\n const injected = getWindowEthereum();\n if (preferYeYing && isYeYingProvider(injected)) {\n safeResolve(injected);\n }\n };\n\n window.addEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.addEventListener('ethereum#initialized', onEthereumInitialized as EventListener, { once: true });\n\n const timeoutId = setTimeout(() => {\n if (resolved) return;\n const best =\n selectBestProvider(discovered, preferYeYing) ||\n windowProvider ||\n getWindowEthereum();\n safeResolve(best || null);\n }, timeoutMs);\n\n try {\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n } catch {\n // Ignore if browser doesn't support CustomEvent target\n }\n\n if (!preferYeYing && windowProvider) {\n safeResolve(windowProvider);\n }\n });\n}\n\nexport async function requireProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider> {\n const provider = await getProvider(options);\n if (!provider) {\n throw new Error('No injected wallet provider found');\n }\n return provider;\n}\n\nexport async function requestAccounts(\n options: RequestAccountsOptions = {}\n): Promise<string[]> {\n const provider = options.provider || (await requireProvider());\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getAccounts(provider?: Eip1193Provider): Promise<string[]> {\n const p = provider || (await requireProvider());\n const accounts = (await p.request({ method: 'eth_accounts' })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getChainId(provider?: Eip1193Provider): Promise<string | null> {\n const p = provider || (await requireProvider());\n const chainId = (await p.request({ method: 'eth_chainId' })) as string;\n return typeof chainId === 'string' ? chainId : null;\n}\n\nexport async function getPreferredAccount(\n options: PreferredAccountOptions = {}\n): Promise<AccountSelection> {\n const provider = options.provider || (await requireProvider());\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n let accounts = await getAccounts(provider);\n if (accounts.length === 0 && options.autoConnect) {\n accounts = await requestAccounts({ provider });\n }\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n return { account, accounts };\n}\n\nexport function watchAccounts(\n provider: Eip1193Provider,\n handler: AccountsChangedHandler,\n options: WatchAccountsOptions = {}\n): () => void {\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n return onAccountsChanged(provider, (accounts) => {\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n handler({ account, accounts });\n });\n}\n\nexport async function getBalance(\n provider?: Eip1193Provider,\n address?: string,\n blockTag: string = 'latest'\n): Promise<string> {\n const p = provider || (await requireProvider());\n let target = address;\n if (!target) {\n const accounts = await getAccounts(p);\n target = accounts[0];\n }\n if (!target) {\n throw new Error('No account available for balance');\n }\n\n const balance = (await p.request({\n method: 'eth_getBalance',\n params: [target, blockTag],\n })) as string;\n if (typeof balance !== 'string') {\n throw new Error('Invalid balance response');\n }\n return balance;\n}\n\nexport function onAccountsChanged(\n provider: Eip1193Provider,\n handler: (accounts: string[]) => void\n): () => void {\n provider.on?.('accountsChanged', handler);\n return () => provider.removeListener?.('accountsChanged', handler);\n}\n\nexport function onChainChanged(\n provider: Eip1193Provider,\n handler: (chainId: string) => void\n): () => void {\n provider.on?.('chainChanged', handler);\n return () => provider.removeListener?.('chainChanged', handler);\n}\n","import { getAccounts, requireProvider } from './provider';\nimport {\n AuthBaseOptions,\n AuthFetchOptions,\n AuthTokenResult,\n Eip1193Provider,\n LoginWithChallengeOptions,\n LogoutOptions,\n RefreshAccessTokenOptions,\n SignMessageOptions,\n} from './types';\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const trimmed = path.replace(/^\\/+/, '');\n return `${normalizeBaseUrl(baseUrl)}/${trimmed}`;\n}\n\nconst DEFAULT_TOKEN_KEY = 'authToken';\nlet cachedAccessToken: string | null = null;\nlet refreshInFlight: Promise<AuthTokenResult> | null = null;\n\nfunction resolveTokenKey(options?: AuthBaseOptions): string {\n return options?.tokenStorageKey || DEFAULT_TOKEN_KEY;\n}\n\nfunction shouldStoreToken(options?: AuthBaseOptions): boolean {\n return options?.storeToken !== false;\n}\n\nfunction resolveFetcher(options?: AuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: AuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction readStoredToken(options?: AuthBaseOptions): string | null {\n if (!shouldStoreToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistToken(token: string | null, options?: AuthBaseOptions): void {\n cachedAccessToken = token;\n if (!shouldStoreToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nexport function getAccessToken(options?: AuthBaseOptions): string | null {\n if (cachedAccessToken) return cachedAccessToken;\n const stored = readStoredToken(options);\n if (stored) {\n cachedAccessToken = stored;\n }\n return stored;\n}\n\nexport function setAccessToken(token: string | null, options?: AuthBaseOptions): void {\n persistToken(token, options);\n}\n\nexport function clearAccessToken(options?: AuthBaseOptions): void {\n cachedAccessToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n localStorage.removeItem(key);\n}\n\nasync function resolveAddress(\n provider: Eip1193Provider,\n address?: string\n): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) {\n throw new Error('No account available');\n }\n return accounts[0];\n}\n\nfunction extractChallenge(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.challenge;\n if (typeof value === 'string') return value;\n }\n const direct = data.challenge || data.result;\n if (typeof direct === 'string') return direct;\n if (direct && typeof direct === 'object') {\n const nested = (direct as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nfunction extractToken(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.token;\n if (typeof value === 'string') return value;\n }\n const direct = data.token || data.result;\n if (typeof direct === 'string') return direct;\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyToken = body.token;\n if (typeof bodyToken === 'string') return bodyToken;\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).token;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nexport async function signMessage(options: SignMessageOptions): Promise<string> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const method = options.method || 'personal_sign';\n\n const params =\n method === 'eth_sign'\n ? [address, options.message]\n : [options.message, address];\n\n const signature = await provider.request({\n method,\n params,\n });\n\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n\n return signature;\n}\n\nexport async function loginWithChallenge(\n options: LoginWithChallengeOptions = {}\n): Promise<{\n token: string;\n address: string;\n signature: string;\n challenge: string;\n response: unknown;\n}> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const challengeUrl = joinUrl(baseUrl, options.challengePath || 'challenge');\n const verifyUrl = joinUrl(baseUrl, options.verifyPath || 'verify');\n\n const challengeBody = {\n address,\n };\n\n const challengeRes = await fetcher(challengeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(challengeBody),\n });\n\n if (!challengeRes.ok) {\n const text = await challengeRes.text();\n throw new Error(`Challenge request failed: ${challengeRes.status} ${text}`);\n }\n\n const challengePayload = await challengeRes.json();\n const challenge = extractChallenge(challengePayload);\n if (!challenge) {\n throw new Error('Challenge response missing challenge');\n }\n\n const signature = await signMessage({\n provider,\n address,\n message: challenge,\n method: options.signMethod || 'personal_sign',\n });\n\n const verifyBody = {\n address,\n signature,\n };\n\n const verifyRes = await fetcher(verifyUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(verifyBody),\n });\n\n if (!verifyRes.ok) {\n const text = await verifyRes.text();\n throw new Error(`Verify request failed: ${verifyRes.status} ${text}`);\n }\n\n const verifyPayload = await verifyRes.json();\n const token = extractToken(verifyPayload);\n if (!token) {\n throw new Error('Verify response missing token');\n }\n\n persistToken(token, options);\n\n return {\n token,\n address,\n signature,\n challenge,\n response: verifyPayload,\n };\n}\n\nexport async function refreshAccessToken(\n options: RefreshAccessTokenOptions = {}\n): Promise<AuthTokenResult> {\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n const task = (async () => {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const refreshUrl = joinUrl(baseUrl, options.refreshPath || 'refresh');\n\n const refreshRes = await fetcher(refreshUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!refreshRes.ok) {\n const text = await refreshRes.text();\n throw new Error(`Refresh request failed: ${refreshRes.status} ${text}`);\n }\n\n const refreshPayload = await refreshRes.json();\n const token = extractToken(refreshPayload);\n if (!token) {\n throw new Error('Refresh response missing token');\n }\n\n persistToken(token, options);\n\n return { token, response: refreshPayload };\n })();\n\n refreshInFlight = task;\n try {\n return await task;\n } finally {\n refreshInFlight = null;\n }\n}\n\nexport async function logout(options: LogoutOptions = {}): Promise<{ response: unknown }> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const logoutUrl = joinUrl(baseUrl, options.logoutPath || 'logout');\n\n const logoutRes = await fetcher(logoutUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!logoutRes.ok) {\n const text = await logoutRes.text();\n throw new Error(`Logout request failed: ${logoutRes.status} ${text}`);\n }\n\n let payload: unknown = null;\n try {\n payload = await logoutRes.json();\n } catch {\n payload = null;\n }\n\n clearAccessToken(options);\n\n return { response: payload };\n}\n\nexport async function authFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const retryOnUnauthorized = options.retryOnUnauthorized !== false;\n\n const performRequest = async (tokenOverride?: string | null): Promise<Response> => {\n const headers = new Headers(init.headers || {});\n const token = tokenOverride ?? options.accessToken ?? getAccessToken(options);\n if (token && !headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n return fetcher(input, {\n ...init,\n headers,\n credentials,\n });\n };\n\n const initialRes = await performRequest();\n if (initialRes.status !== 401 || !retryOnUnauthorized) {\n return initialRes;\n }\n\n try {\n const refreshed = await refreshAccessToken(options);\n return await performRequest(refreshed.token);\n } catch {\n return initialRes;\n }\n}\n","import { getAccounts, getChainId, getProvider, requireProvider } from './provider';\nimport { Eip1193Provider } from './types';\n\nexport type UcanCapability = {\n resource: string;\n action: string;\n};\n\nexport type UcanRootProof = {\n type: 'siwe';\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n siwe: {\n message: string;\n signature: string;\n };\n};\n\nexport type UcanProof = UcanRootProof | string;\n\nexport type UcanTokenPayload = {\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n prf: UcanProof[];\n};\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n signer?: (signingInput: string, payload: UcanTokenPayload) => Promise<string>;\n privateKey?: CryptoKey;\n};\n\nexport type CreateUcanSessionOptions = {\n id?: string;\n expiresInMs?: number;\n forceNew?: boolean;\n provider?: Eip1193Provider;\n};\n\nexport type CreateRootUcanOptions = {\n provider?: Eip1193Provider;\n address?: string;\n session?: UcanSessionKey;\n sessionId?: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n domain?: string;\n uri?: string;\n chainId?: string;\n statement?: string;\n nonce?: string;\n notBeforeMs?: number;\n};\n\nexport type CreateUcanTokenOptions = {\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n audience: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n notBeforeMs?: number;\n proofs?: UcanProof[];\n};\n\nexport type UcanFetchOptions = {\n ucan?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n proofs?: UcanProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n};\n\nconst DEFAULT_SESSION_ID = 'default';\nconst DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;\nconst DEFAULT_UCAN_TTL = 5 * 60 * 1000;\nconst DB_NAME = 'yeying-web3';\nconst DB_STORE = 'ucan-sessions';\n\nconst textEncoder = new TextEncoder();\n\nfunction toBase64Url(data: Uint8Array | ArrayBuffer): string {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction encodeJson(value: unknown): string {\n return toBase64Url(textEncoder.encode(JSON.stringify(value)));\n}\n\nfunction randomNonce(bytes = 16): string {\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return Array.from(buffer)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction normalizeExpiry(exp: number | undefined, fallbackMs: number): number {\n if (typeof exp === 'number' && !Number.isNaN(exp)) return exp;\n return Date.now() + fallbackMs;\n}\n\n\nfunction openDb(): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(DB_STORE)) {\n db.createObjectStore(DB_STORE, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function readSessionRecord(id: string): Promise<UcanSessionRecord | null> {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readonly');\n const store = tx.objectStore(DB_STORE);\n const request = store.get(id);\n request.onsuccess = () => resolve((request.result as UcanSessionRecord) || null);\n request.onerror = () => reject(request.error);\n });\n } catch {\n return null;\n }\n}\n\nasync function writeSessionRecord(record: UcanSessionRecord): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.put(record);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nasync function deleteSessionRecord(id: string): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.delete(id);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nexport async function getUcanSession(\n id: string = DEFAULT_SESSION_ID,\n provider?: Eip1193Provider\n): Promise<UcanSessionKey | null> {\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!walletProvider) return null;\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return null;\n }\n}\n\nasync function requestWalletUcanSession(\n provider: Eip1193Provider,\n options: CreateUcanSessionOptions\n): Promise<UcanSessionKey> {\n const sessionId = options.id || DEFAULT_SESSION_ID;\n const result = (await provider.request({\n method: 'yeying_ucan_session',\n params: [\n {\n sessionId,\n expiresInMs: options.expiresInMs,\n forceNew: options.forceNew,\n },\n ],\n })) as {\n id?: string;\n did?: string;\n createdAt?: number;\n expiresAt?: number | null;\n };\n\n if (!result || typeof result.did !== 'string') {\n throw new Error('Invalid wallet UCAN session response');\n }\n\n const createdAt = typeof result.createdAt === 'number' ? result.createdAt : Date.now();\n const expiresAt = typeof result.expiresAt === 'number' ? result.expiresAt : null;\n const existing = await readSessionRecord(sessionId);\n const nextRecord: UcanSessionRecord = {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n root: existing?.root,\n };\n if (nextRecord.root && nextRecord.root.aud && nextRecord.root.aud !== nextRecord.did) {\n nextRecord.root = undefined;\n }\n await writeSessionRecord(nextRecord);\n\n return {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n signer: async (signingInput: string, payload: UcanTokenPayload) => {\n const signatureResult = (await provider.request({\n method: 'yeying_ucan_sign',\n params: [\n {\n sessionId,\n signingInput,\n payload,\n },\n ],\n })) as { signature?: string } | string;\n\n if (typeof signatureResult === 'string') {\n return signatureResult;\n }\n if (signatureResult && typeof signatureResult.signature === 'string') {\n return signatureResult.signature;\n }\n throw new Error('Invalid wallet UCAN signature response');\n },\n };\n}\n\nexport async function createUcanSession(\n options: CreateUcanSessionOptions = {}\n): Promise<UcanSessionKey> {\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!provider) {\n throw new Error('No wallet provider for UCAN session');\n }\n return await requestWalletUcanSession(provider, options);\n}\n\nexport async function clearUcanSession(id: string = DEFAULT_SESSION_ID): Promise<void> {\n await deleteSessionRecord(id);\n}\n\nexport async function storeUcanRoot(\n root: UcanRootProof,\n id: string = DEFAULT_SESSION_ID\n): Promise<void> {\n const record = await readSessionRecord(id);\n const createdAt = record?.createdAt ?? Date.now();\n const expiresAt = record?.expiresAt ?? null;\n const did = record?.did || root.aud;\n const nextRecord: UcanSessionRecord = {\n id,\n did,\n createdAt,\n expiresAt,\n root,\n };\n await writeSessionRecord(nextRecord);\n}\n\nexport async function getStoredUcanRoot(id: string = DEFAULT_SESSION_ID): Promise<UcanRootProof | null> {\n const record = await readSessionRecord(id);\n return record?.root || null;\n}\n\nfunction capsEqual(a: UcanCapability[] | undefined, b: UcanCapability[] | undefined): boolean {\n return JSON.stringify(a || []) === JSON.stringify(b || []);\n}\n\nfunction isRootExpired(root: UcanRootProof, nowMs: number): boolean {\n return Boolean(root.exp && nowMs > root.exp);\n}\n\nexport async function getOrCreateUcanRoot(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const nowMs = Date.now();\n const stored = await getStoredUcanRoot(session.id);\n if (\n stored &&\n (!stored.aud || stored.aud === session.did) &&\n capsEqual(stored.cap, options.capabilities) &&\n !isRootExpired(stored, nowMs)\n ) {\n return stored;\n }\n\n return await createRootUcan({ ...options, provider, session });\n}\n\nfunction buildUcanStatement(payload: Record<string, unknown>): string {\n return `UCAN-AUTH ${JSON.stringify(payload)}`;\n}\n\nfunction buildSiweMessage(params: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: string;\n nonce: string;\n issuedAt: string;\n expirationTime?: string;\n}): string {\n const lines = [\n `${params.domain} wants you to sign in with your Ethereum account:`,\n params.address,\n '',\n params.statement,\n '',\n `URI: ${params.uri}`,\n 'Version: 1',\n `Chain ID: ${params.chainId}`,\n `Nonce: ${params.nonce}`,\n `Issued At: ${params.issuedAt}`,\n ];\n if (params.expirationTime) {\n lines.push(`Expiration Time: ${params.expirationTime}`);\n }\n return lines.join('\\n');\n}\n\nasync function resolveAddress(provider: Eip1193Provider, address?: string): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) throw new Error('No account available');\n return accounts[0];\n}\n\nasync function signWithProvider(\n provider: Eip1193Provider,\n address: string,\n message: string\n): Promise<string> {\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, address],\n });\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n return signature;\n}\n\nexport async function createRootUcan(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const address = await resolveAddress(provider, options.address);\n const chainId = options.chainId || (await getChainId(provider)) || '1';\n const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : '127.0.0.1');\n const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://127.0.0.1');\n const nonce = options.nonce || randomNonce(8);\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const nbf = options.notBeforeMs;\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: options.capabilities,\n exp,\n };\n if (nbf) statementPayload.nbf = nbf;\n\n const statement = options.statement || buildUcanStatement(statementPayload);\n const issuedAt = new Date().toISOString();\n const expirationTime = new Date(exp).toISOString();\n const message = buildSiweMessage({\n domain,\n address,\n statement,\n uri,\n chainId,\n nonce,\n issuedAt,\n expirationTime,\n });\n\n const signature = await signWithProvider(provider, address, message);\n\n const root: UcanRootProof = {\n type: 'siwe',\n iss: `did:pkh:eth:${address.toLowerCase()}`,\n aud: session.did,\n cap: options.capabilities,\n exp,\n nbf,\n siwe: {\n message,\n signature,\n },\n };\n\n await storeUcanRoot(root, session.id);\n\n return root;\n}\n\nasync function signUcanPayload(payload: UcanTokenPayload, session: UcanSessionKey): Promise<string> {\n const header = { alg: 'EdDSA', typ: 'UCAN' };\n const headerB64 = encodeJson(header);\n const payloadB64 = encodeJson(payload);\n const signingInput = `${headerB64}.${payloadB64}`;\n let signatureB64: string;\n\n if (session.signer) {\n signatureB64 = await session.signer(signingInput, payload);\n } else {\n if (!session.privateKey) {\n throw new Error('Missing UCAN session key');\n }\n const data = textEncoder.encode(signingInput);\n const signature = await crypto.subtle.sign('Ed25519', session.privateKey, data);\n signatureB64 = toBase64Url(signature);\n }\n return `${headerB64}.${payloadB64}.${signatureB64}`;\n}\n\nasync function resolveProofs(\n options: CreateUcanTokenOptions,\n issuer?: UcanSessionKey\n): Promise<UcanProof[]> {\n if (options.proofs && options.proofs.length > 0) return options.proofs;\n const stored = await getStoredUcanRoot(options.sessionId || DEFAULT_SESSION_ID);\n if (!stored) {\n throw new Error('Missing UCAN proof chain');\n }\n if (issuer?.did && stored.aud && stored.aud !== issuer.did) {\n throw new Error('UCAN root audience mismatch');\n }\n return [stored];\n}\n\nexport async function createDelegationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function createInvocationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function authUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: UcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = options.fetcher || fetch;\n let token = options.ucan;\n if (!token) {\n if (!options.audience || !options.capabilities) {\n throw new Error('Missing UCAN audience or capabilities');\n }\n token = await createInvocationUcan({\n issuer: options.issuer,\n sessionId: options.sessionId,\n provider: options.provider,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n proofs: options.proofs,\n });\n }\n\n const headers = new Headers(init.headers || {});\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetcher(input, {\n ...init,\n headers,\n });\n}\n","export type WebDavAuth =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string };\n\nexport type WebDavClientOptions = {\n baseUrl: string;\n prefix?: string;\n auth?: WebDavAuth;\n token?: string;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type WebDavRequestOptions = {\n headers?: Record<string, string>;\n auth?: WebDavAuth;\n token?: string;\n depth?: number | 'infinity';\n overwrite?: boolean;\n contentType?: string;\n signal?: AbortSignal;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix || prefix === '/') return '';\n let next = prefix.startsWith('/') ? prefix : `/${prefix}`;\n next = next.replace(/\\/+$/, '');\n return next;\n}\n\nfunction normalizePath(path: string): string {\n if (!path || path === '/') return '/';\n const next = path.startsWith('/') ? path : `/${path}`;\n return encodeURI(next);\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const base = normalizeBaseUrl(baseUrl);\n const suffix = path.startsWith('/') ? path : `/${path}`;\n return `${base}${suffix}`;\n}\n\nfunction resolveAuthHeader(auth?: WebDavAuth, token?: string): string | null {\n if (auth?.type === 'bearer') {\n return `Bearer ${auth.token}`;\n }\n if (auth?.type === 'basic') {\n const raw = `${auth.username}:${auth.password}`;\n return `Basic ${btoa(raw)}`;\n }\n if (token) {\n return `Bearer ${token}`;\n }\n return null;\n}\n\nexport class WebDavClient {\n private baseUrl: string;\n private prefix: string;\n private auth?: WebDavAuth;\n private token?: string;\n private fetcher: typeof fetch;\n private credentials?: RequestCredentials;\n\n constructor(options: WebDavClientOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.prefix = normalizePrefix(options.prefix);\n this.auth = options.auth;\n this.token = options.token;\n this.fetcher = options.fetcher || ((input, init) => fetch(input, init));\n this.credentials = options.credentials;\n }\n\n setToken(token: string | null) {\n this.token = token || undefined;\n }\n\n setAuth(auth?: WebDavAuth) {\n this.auth = auth;\n }\n\n private buildUrl(path: string): string {\n const webdavPath = `${this.prefix}${normalizePath(path)}`;\n return `${this.baseUrl}${webdavPath}`;\n }\n\n private buildHeaders(options?: WebDavRequestOptions): Headers {\n const headers = new Headers(options?.headers || {});\n const authHeader = resolveAuthHeader(options?.auth || this.auth, options?.token || this.token);\n if (authHeader) {\n headers.set('Authorization', authHeader);\n }\n if (options?.depth !== undefined) {\n headers.set('Depth', String(options.depth));\n }\n if (typeof options?.overwrite === 'boolean') {\n headers.set('Overwrite', options.overwrite ? 'T' : 'F');\n }\n if (options?.contentType) {\n headers.set('Content-Type', options.contentType);\n }\n return headers;\n }\n\n async request(\n method: string,\n path: string,\n body?: BodyInit | null,\n options: WebDavRequestOptions = {}\n ): Promise<Response> {\n const response = await this.fetcher(this.buildUrl(path), {\n method,\n headers: this.buildHeaders(options),\n body: body ?? undefined,\n credentials: this.credentials,\n signal: options.signal,\n } as RequestInit);\n\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${path} failed: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n async listDirectory(path: string = '/', depth: number | 'infinity' = 1): Promise<string> {\n const res = await this.request('PROPFIND', path, null, { depth });\n return await res.text();\n }\n\n async download(path: string): Promise<Response> {\n return await this.request('GET', path);\n }\n\n async downloadText(path: string): Promise<string> {\n const res = await this.download(path);\n return await res.text();\n }\n\n async downloadArrayBuffer(path: string): Promise<ArrayBuffer> {\n const res = await this.download(path);\n return await res.arrayBuffer();\n }\n\n async upload(path: string, content: BodyInit, contentType?: string): Promise<Response> {\n return await this.request('PUT', path, content, { contentType });\n }\n\n async createDirectory(path: string): Promise<Response> {\n return await this.request('MKCOL', path);\n }\n\n async ensureDirectory(path: string): Promise<void> {\n if (!path || path === '/') return;\n const segments = path.split('/').filter(Boolean);\n if (segments.length === 0) return;\n\n let current = '';\n for (const segment of segments) {\n current = `${current}/${segment}`;\n const res = await this.fetcher(this.buildUrl(current), {\n method: 'MKCOL',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n } as RequestInit);\n\n if (res.ok) continue;\n if (res.status === 405) continue;\n throw new Error(`WebDAV MKCOL ${current} failed: ${res.status} ${res.statusText}`);\n }\n }\n\n async remove(path: string): Promise<Response> {\n return await this.request('DELETE', path);\n }\n\n async move(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('MOVE', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async copy(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('COPY', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async getQuota(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/quota'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV quota failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async listRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/list'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle list failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async recoverRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/recover'), {\n method: 'POST',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle recover failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async deleteRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/permanent'), {\n method: 'DELETE',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle delete failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async clearRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/clear'), {\n method: 'DELETE',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle clear failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n}\n\nexport function createWebDavClient(options: WebDavClientOptions): WebDavClient {\n return new WebDavClient(options);\n}\n","import { requireProvider } from './auth/provider';\nimport { loginWithChallenge } from './auth/siwe';\nimport {\n createInvocationUcan,\n createUcanSession,\n getOrCreateUcanRoot,\n UcanCapability,\n UcanRootProof,\n UcanSessionKey,\n UcanTokenPayload,\n} from './auth/ucan';\nimport { Eip1193Provider, LoginWithChallengeOptions } from './auth/types';\nimport { createWebDavClient, WebDavClient } from './storage/webdav';\n\ntype CachedUcanToken = {\n token: string;\n exp: number;\n nbf?: number;\n};\n\nconst tokenCache = new Map<string, CachedUcanToken>();\nconst TOKEN_SKEW_MS = 5000;\nconst DEFAULT_APP_ACTION = 'write';\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\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 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 return {\n resource: `app:${sanitizeAppId(options.appId)}`,\n action,\n };\n}\n\nfunction hasAppCapability(caps: UcanCapability[]): boolean {\n return (caps || []).some(cap => typeof cap?.resource === 'string' && cap.resource.startsWith('app:'));\n}\n\nfunction dedupeCapabilities(caps: UcanCapability[]): UcanCapability[] {\n const seen = new Set<string>();\n return (caps || []).filter(cap => {\n if (!cap || !cap.resource || !cap.action) return false;\n const key = `${cap.resource}|${cap.action}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\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 return JSON.stringify(caps || []);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction 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","resolveAddress"],"mappings":"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"}
|
package/dist/web3-bs.umd.js
CHANGED
|
@@ -1119,6 +1119,7 @@
|
|
|
1119
1119
|
|
|
1120
1120
|
const tokenCache = new Map();
|
|
1121
1121
|
const TOKEN_SKEW_MS = 5000;
|
|
1122
|
+
const DEFAULT_APP_ACTION = 'write';
|
|
1122
1123
|
function normalizeAppDir(path) {
|
|
1123
1124
|
const trimmed = path.trim();
|
|
1124
1125
|
if (!trimmed)
|
|
@@ -1130,6 +1131,42 @@
|
|
|
1130
1131
|
function sanitizeAppId(appId) {
|
|
1131
1132
|
return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');
|
|
1132
1133
|
}
|
|
1134
|
+
function normalizeAction(action) {
|
|
1135
|
+
const trimmed = (action || '').trim();
|
|
1136
|
+
return trimmed ? trimmed : null;
|
|
1137
|
+
}
|
|
1138
|
+
function buildAppCapability(options) {
|
|
1139
|
+
if (!options.appId)
|
|
1140
|
+
return null;
|
|
1141
|
+
const action = normalizeAction(options.appAction) || DEFAULT_APP_ACTION;
|
|
1142
|
+
return {
|
|
1143
|
+
resource: `app:${sanitizeAppId(options.appId)}`,
|
|
1144
|
+
action,
|
|
1145
|
+
};
|
|
1146
|
+
}
|
|
1147
|
+
function hasAppCapability(caps) {
|
|
1148
|
+
return (caps || []).some(cap => typeof cap?.resource === 'string' && cap.resource.startsWith('app:'));
|
|
1149
|
+
}
|
|
1150
|
+
function dedupeCapabilities(caps) {
|
|
1151
|
+
const seen = new Set();
|
|
1152
|
+
return (caps || []).filter(cap => {
|
|
1153
|
+
if (!cap || !cap.resource || !cap.action)
|
|
1154
|
+
return false;
|
|
1155
|
+
const key = `${cap.resource}|${cap.action}`;
|
|
1156
|
+
if (seen.has(key))
|
|
1157
|
+
return false;
|
|
1158
|
+
seen.add(key);
|
|
1159
|
+
return true;
|
|
1160
|
+
});
|
|
1161
|
+
}
|
|
1162
|
+
function ensureAppCapability(caps, options) {
|
|
1163
|
+
const appCap = buildAppCapability(options);
|
|
1164
|
+
if (!appCap)
|
|
1165
|
+
return caps || [];
|
|
1166
|
+
if (hasAppCapability(caps || []))
|
|
1167
|
+
return caps || [];
|
|
1168
|
+
return dedupeCapabilities([...(caps || []), appCap]);
|
|
1169
|
+
}
|
|
1133
1170
|
function resolveAppDir(options) {
|
|
1134
1171
|
if (options.appDir) {
|
|
1135
1172
|
return normalizeAppDir(options.appDir);
|
|
@@ -1145,6 +1182,14 @@
|
|
|
1145
1182
|
function buildTokenCacheKey(issuer, audience, caps) {
|
|
1146
1183
|
return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;
|
|
1147
1184
|
}
|
|
1185
|
+
function resolveWebdavCaps(options) {
|
|
1186
|
+
const baseCaps = options.capabilities || options.root?.cap || [];
|
|
1187
|
+
return ensureAppCapability(baseCaps, options);
|
|
1188
|
+
}
|
|
1189
|
+
function resolveInvocationCaps(options, fallbackCaps) {
|
|
1190
|
+
const caps = options.invocationCapabilities || fallbackCaps;
|
|
1191
|
+
return ensureAppCapability(caps, options);
|
|
1192
|
+
}
|
|
1148
1193
|
function isTokenValid(entry, nowMs) {
|
|
1149
1194
|
if (!entry.exp)
|
|
1150
1195
|
return false;
|
|
@@ -1216,7 +1261,7 @@
|
|
|
1216
1261
|
return token;
|
|
1217
1262
|
}
|
|
1218
1263
|
async function initWebDavStorage(options) {
|
|
1219
|
-
const caps = options
|
|
1264
|
+
const caps = resolveWebdavCaps(options);
|
|
1220
1265
|
if (!caps || caps.length === 0) {
|
|
1221
1266
|
throw new Error('Missing UCAN capabilities for WebDAV');
|
|
1222
1267
|
}
|
|
@@ -1246,7 +1291,7 @@
|
|
|
1246
1291
|
expiresInMs: options.rootExpiresInMs,
|
|
1247
1292
|
});
|
|
1248
1293
|
}
|
|
1249
|
-
const invocationCaps = options
|
|
1294
|
+
const invocationCaps = resolveInvocationCaps(options, caps);
|
|
1250
1295
|
const token = await getCachedInvocationToken({
|
|
1251
1296
|
issuer: session,
|
|
1252
1297
|
audience: options.audience,
|
package/dist/web3-bs.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web3-bs.umd.js","sources":["../src/auth/provider.ts","../src/auth/siwe.ts","../src/auth/ucan.ts","../src/storage/webdav.ts","../src/dapp.ts"],"sourcesContent":["import {\n Eip1193Provider,\n Eip6963ProviderDetail,\n ProviderDiscoveryOptions,\n ProviderInfo,\n RequestAccountsOptions,\n AccountSelection,\n PreferredAccountOptions,\n WatchAccountsOptions,\n AccountsChangedHandler,\n} from './types';\n\nconst YEYING_RDNS = 'io.github.yeying';\nconst DEFAULT_TIMEOUT = 1000;\nconst DEFAULT_ACCOUNT_STORAGE_KEY = 'yeying:last_account';\n\nfunction getWindowEthereum(): Eip1193Provider | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { ethereum?: Eip1193Provider }).ethereum || null;\n}\n\nfunction readStoredAccount(storageKey: string): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n return null;\n }\n}\n\nfunction writeStoredAccount(storageKey: string, account: string | null): void {\n if (typeof localStorage === 'undefined') return;\n try {\n if (account) {\n localStorage.setItem(storageKey, account);\n } else {\n localStorage.removeItem(storageKey);\n }\n } catch {\n // ignore storage errors\n }\n}\n\nfunction selectPreferredAccount(\n accounts: string[],\n stored: string | null,\n preferStored: boolean\n): string | null {\n if (preferStored && stored && accounts.includes(stored)) {\n return stored;\n }\n return accounts[0] || null;\n}\n\nexport function isYeYingProvider(provider?: Eip1193Provider | null, info?: ProviderInfo): boolean {\n if (!provider) return false;\n if (provider.isYeYing) return true;\n const name = (info?.name || '').toLowerCase();\n const rdns = (info?.rdns || '').toLowerCase();\n return rdns === YEYING_RDNS || name.includes('yeying');\n}\n\nfunction selectBestProvider(\n candidates: Eip6963ProviderDetail[],\n preferYeYing: boolean\n): Eip1193Provider | null {\n if (candidates.length === 0) return null;\n if (preferYeYing) {\n const yeying = candidates.find(c => isYeYingProvider(c.provider, c.info));\n if (yeying) return yeying.provider;\n }\n return candidates[0].provider;\n}\n\nexport async function getProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider | null> {\n const preferYeYing = options.preferYeYing !== false;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT;\n const windowProvider = getWindowEthereum();\n\n if (preferYeYing && isYeYingProvider(windowProvider)) {\n return windowProvider;\n }\n\n if (typeof window === 'undefined') {\n return windowProvider;\n }\n\n const discovered: Eip6963ProviderDetail[] = [];\n let resolved = false;\n\n return await new Promise(resolve => {\n const cleanup = () => {\n window.removeEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.removeEventListener('ethereum#initialized', onEthereumInitialized as EventListener);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const safeResolve = (provider: Eip1193Provider | null) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n resolve(provider);\n };\n\n const onAnnounce = (event: Event) => {\n const detail = (event as CustomEvent<Eip6963ProviderDetail>).detail;\n if (!detail?.provider) return;\n discovered.push(detail);\n\n if (preferYeYing && isYeYingProvider(detail.provider, detail.info)) {\n safeResolve(detail.provider);\n }\n };\n\n const onEthereumInitialized = () => {\n const injected = getWindowEthereum();\n if (preferYeYing && isYeYingProvider(injected)) {\n safeResolve(injected);\n }\n };\n\n window.addEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.addEventListener('ethereum#initialized', onEthereumInitialized as EventListener, { once: true });\n\n const timeoutId = setTimeout(() => {\n if (resolved) return;\n const best =\n selectBestProvider(discovered, preferYeYing) ||\n windowProvider ||\n getWindowEthereum();\n safeResolve(best || null);\n }, timeoutMs);\n\n try {\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n } catch {\n // Ignore if browser doesn't support CustomEvent target\n }\n\n if (!preferYeYing && windowProvider) {\n safeResolve(windowProvider);\n }\n });\n}\n\nexport async function requireProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider> {\n const provider = await getProvider(options);\n if (!provider) {\n throw new Error('No injected wallet provider found');\n }\n return provider;\n}\n\nexport async function requestAccounts(\n options: RequestAccountsOptions = {}\n): Promise<string[]> {\n const provider = options.provider || (await requireProvider());\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getAccounts(provider?: Eip1193Provider): Promise<string[]> {\n const p = provider || (await requireProvider());\n const accounts = (await p.request({ method: 'eth_accounts' })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getChainId(provider?: Eip1193Provider): Promise<string | null> {\n const p = provider || (await requireProvider());\n const chainId = (await p.request({ method: 'eth_chainId' })) as string;\n return typeof chainId === 'string' ? chainId : null;\n}\n\nexport async function getPreferredAccount(\n options: PreferredAccountOptions = {}\n): Promise<AccountSelection> {\n const provider = options.provider || (await requireProvider());\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n let accounts = await getAccounts(provider);\n if (accounts.length === 0 && options.autoConnect) {\n accounts = await requestAccounts({ provider });\n }\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n return { account, accounts };\n}\n\nexport function watchAccounts(\n provider: Eip1193Provider,\n handler: AccountsChangedHandler,\n options: WatchAccountsOptions = {}\n): () => void {\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n return onAccountsChanged(provider, (accounts) => {\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n handler({ account, accounts });\n });\n}\n\nexport async function getBalance(\n provider?: Eip1193Provider,\n address?: string,\n blockTag: string = 'latest'\n): Promise<string> {\n const p = provider || (await requireProvider());\n let target = address;\n if (!target) {\n const accounts = await getAccounts(p);\n target = accounts[0];\n }\n if (!target) {\n throw new Error('No account available for balance');\n }\n\n const balance = (await p.request({\n method: 'eth_getBalance',\n params: [target, blockTag],\n })) as string;\n if (typeof balance !== 'string') {\n throw new Error('Invalid balance response');\n }\n return balance;\n}\n\nexport function onAccountsChanged(\n provider: Eip1193Provider,\n handler: (accounts: string[]) => void\n): () => void {\n provider.on?.('accountsChanged', handler);\n return () => provider.removeListener?.('accountsChanged', handler);\n}\n\nexport function onChainChanged(\n provider: Eip1193Provider,\n handler: (chainId: string) => void\n): () => void {\n provider.on?.('chainChanged', handler);\n return () => provider.removeListener?.('chainChanged', handler);\n}\n","import { getAccounts, requireProvider } from './provider';\nimport {\n AuthBaseOptions,\n AuthFetchOptions,\n AuthTokenResult,\n Eip1193Provider,\n LoginWithChallengeOptions,\n LogoutOptions,\n RefreshAccessTokenOptions,\n SignMessageOptions,\n} from './types';\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const trimmed = path.replace(/^\\/+/, '');\n return `${normalizeBaseUrl(baseUrl)}/${trimmed}`;\n}\n\nconst DEFAULT_TOKEN_KEY = 'authToken';\nlet cachedAccessToken: string | null = null;\nlet refreshInFlight: Promise<AuthTokenResult> | null = null;\n\nfunction resolveTokenKey(options?: AuthBaseOptions): string {\n return options?.tokenStorageKey || DEFAULT_TOKEN_KEY;\n}\n\nfunction shouldStoreToken(options?: AuthBaseOptions): boolean {\n return options?.storeToken !== false;\n}\n\nfunction resolveFetcher(options?: AuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: AuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction readStoredToken(options?: AuthBaseOptions): string | null {\n if (!shouldStoreToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistToken(token: string | null, options?: AuthBaseOptions): void {\n cachedAccessToken = token;\n if (!shouldStoreToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nexport function getAccessToken(options?: AuthBaseOptions): string | null {\n if (cachedAccessToken) return cachedAccessToken;\n const stored = readStoredToken(options);\n if (stored) {\n cachedAccessToken = stored;\n }\n return stored;\n}\n\nexport function setAccessToken(token: string | null, options?: AuthBaseOptions): void {\n persistToken(token, options);\n}\n\nexport function clearAccessToken(options?: AuthBaseOptions): void {\n cachedAccessToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n localStorage.removeItem(key);\n}\n\nasync function resolveAddress(\n provider: Eip1193Provider,\n address?: string\n): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) {\n throw new Error('No account available');\n }\n return accounts[0];\n}\n\nfunction extractChallenge(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.challenge;\n if (typeof value === 'string') return value;\n }\n const direct = data.challenge || data.result;\n if (typeof direct === 'string') return direct;\n if (direct && typeof direct === 'object') {\n const nested = (direct as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nfunction extractToken(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.token;\n if (typeof value === 'string') return value;\n }\n const direct = data.token || data.result;\n if (typeof direct === 'string') return direct;\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyToken = body.token;\n if (typeof bodyToken === 'string') return bodyToken;\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).token;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nexport async function signMessage(options: SignMessageOptions): Promise<string> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const method = options.method || 'personal_sign';\n\n const params =\n method === 'eth_sign'\n ? [address, options.message]\n : [options.message, address];\n\n const signature = await provider.request({\n method,\n params,\n });\n\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n\n return signature;\n}\n\nexport async function loginWithChallenge(\n options: LoginWithChallengeOptions = {}\n): Promise<{\n token: string;\n address: string;\n signature: string;\n challenge: string;\n response: unknown;\n}> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const challengeUrl = joinUrl(baseUrl, options.challengePath || 'challenge');\n const verifyUrl = joinUrl(baseUrl, options.verifyPath || 'verify');\n\n const challengeBody = {\n address,\n };\n\n const challengeRes = await fetcher(challengeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(challengeBody),\n });\n\n if (!challengeRes.ok) {\n const text = await challengeRes.text();\n throw new Error(`Challenge request failed: ${challengeRes.status} ${text}`);\n }\n\n const challengePayload = await challengeRes.json();\n const challenge = extractChallenge(challengePayload);\n if (!challenge) {\n throw new Error('Challenge response missing challenge');\n }\n\n const signature = await signMessage({\n provider,\n address,\n message: challenge,\n method: options.signMethod || 'personal_sign',\n });\n\n const verifyBody = {\n address,\n signature,\n };\n\n const verifyRes = await fetcher(verifyUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(verifyBody),\n });\n\n if (!verifyRes.ok) {\n const text = await verifyRes.text();\n throw new Error(`Verify request failed: ${verifyRes.status} ${text}`);\n }\n\n const verifyPayload = await verifyRes.json();\n const token = extractToken(verifyPayload);\n if (!token) {\n throw new Error('Verify response missing token');\n }\n\n persistToken(token, options);\n\n return {\n token,\n address,\n signature,\n challenge,\n response: verifyPayload,\n };\n}\n\nexport async function refreshAccessToken(\n options: RefreshAccessTokenOptions = {}\n): Promise<AuthTokenResult> {\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n const task = (async () => {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const refreshUrl = joinUrl(baseUrl, options.refreshPath || 'refresh');\n\n const refreshRes = await fetcher(refreshUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!refreshRes.ok) {\n const text = await refreshRes.text();\n throw new Error(`Refresh request failed: ${refreshRes.status} ${text}`);\n }\n\n const refreshPayload = await refreshRes.json();\n const token = extractToken(refreshPayload);\n if (!token) {\n throw new Error('Refresh response missing token');\n }\n\n persistToken(token, options);\n\n return { token, response: refreshPayload };\n })();\n\n refreshInFlight = task;\n try {\n return await task;\n } finally {\n refreshInFlight = null;\n }\n}\n\nexport async function logout(options: LogoutOptions = {}): Promise<{ response: unknown }> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const logoutUrl = joinUrl(baseUrl, options.logoutPath || 'logout');\n\n const logoutRes = await fetcher(logoutUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!logoutRes.ok) {\n const text = await logoutRes.text();\n throw new Error(`Logout request failed: ${logoutRes.status} ${text}`);\n }\n\n let payload: unknown = null;\n try {\n payload = await logoutRes.json();\n } catch {\n payload = null;\n }\n\n clearAccessToken(options);\n\n return { response: payload };\n}\n\nexport async function authFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const retryOnUnauthorized = options.retryOnUnauthorized !== false;\n\n const performRequest = async (tokenOverride?: string | null): Promise<Response> => {\n const headers = new Headers(init.headers || {});\n const token = tokenOverride ?? options.accessToken ?? getAccessToken(options);\n if (token && !headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n return fetcher(input, {\n ...init,\n headers,\n credentials,\n });\n };\n\n const initialRes = await performRequest();\n if (initialRes.status !== 401 || !retryOnUnauthorized) {\n return initialRes;\n }\n\n try {\n const refreshed = await refreshAccessToken(options);\n return await performRequest(refreshed.token);\n } catch {\n return initialRes;\n }\n}\n","import { getAccounts, getChainId, getProvider, requireProvider } from './provider';\nimport { Eip1193Provider } from './types';\n\nexport type UcanCapability = {\n resource: string;\n action: string;\n};\n\nexport type UcanRootProof = {\n type: 'siwe';\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n siwe: {\n message: string;\n signature: string;\n };\n};\n\nexport type UcanProof = UcanRootProof | string;\n\nexport type UcanTokenPayload = {\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n prf: UcanProof[];\n};\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n signer?: (signingInput: string, payload: UcanTokenPayload) => Promise<string>;\n privateKey?: CryptoKey;\n};\n\nexport type CreateUcanSessionOptions = {\n id?: string;\n expiresInMs?: number;\n forceNew?: boolean;\n provider?: Eip1193Provider;\n};\n\nexport type CreateRootUcanOptions = {\n provider?: Eip1193Provider;\n address?: string;\n session?: UcanSessionKey;\n sessionId?: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n domain?: string;\n uri?: string;\n chainId?: string;\n statement?: string;\n nonce?: string;\n notBeforeMs?: number;\n};\n\nexport type CreateUcanTokenOptions = {\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n audience: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n notBeforeMs?: number;\n proofs?: UcanProof[];\n};\n\nexport type UcanFetchOptions = {\n ucan?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n proofs?: UcanProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n};\n\nconst DEFAULT_SESSION_ID = 'default';\nconst DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;\nconst DEFAULT_UCAN_TTL = 5 * 60 * 1000;\nconst DB_NAME = 'yeying-web3';\nconst DB_STORE = 'ucan-sessions';\n\nconst textEncoder = new TextEncoder();\n\nfunction toBase64Url(data: Uint8Array | ArrayBuffer): string {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction encodeJson(value: unknown): string {\n return toBase64Url(textEncoder.encode(JSON.stringify(value)));\n}\n\nfunction randomNonce(bytes = 16): string {\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return Array.from(buffer)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction normalizeExpiry(exp: number | undefined, fallbackMs: number): number {\n if (typeof exp === 'number' && !Number.isNaN(exp)) return exp;\n return Date.now() + fallbackMs;\n}\n\n\nfunction openDb(): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(DB_STORE)) {\n db.createObjectStore(DB_STORE, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function readSessionRecord(id: string): Promise<UcanSessionRecord | null> {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readonly');\n const store = tx.objectStore(DB_STORE);\n const request = store.get(id);\n request.onsuccess = () => resolve((request.result as UcanSessionRecord) || null);\n request.onerror = () => reject(request.error);\n });\n } catch {\n return null;\n }\n}\n\nasync function writeSessionRecord(record: UcanSessionRecord): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.put(record);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nasync function deleteSessionRecord(id: string): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.delete(id);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nexport async function getUcanSession(\n id: string = DEFAULT_SESSION_ID,\n provider?: Eip1193Provider\n): Promise<UcanSessionKey | null> {\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!walletProvider) return null;\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return null;\n }\n}\n\nasync function requestWalletUcanSession(\n provider: Eip1193Provider,\n options: CreateUcanSessionOptions\n): Promise<UcanSessionKey> {\n const sessionId = options.id || DEFAULT_SESSION_ID;\n const result = (await provider.request({\n method: 'yeying_ucan_session',\n params: [\n {\n sessionId,\n expiresInMs: options.expiresInMs,\n forceNew: options.forceNew,\n },\n ],\n })) as {\n id?: string;\n did?: string;\n createdAt?: number;\n expiresAt?: number | null;\n };\n\n if (!result || typeof result.did !== 'string') {\n throw new Error('Invalid wallet UCAN session response');\n }\n\n const createdAt = typeof result.createdAt === 'number' ? result.createdAt : Date.now();\n const expiresAt = typeof result.expiresAt === 'number' ? result.expiresAt : null;\n const existing = await readSessionRecord(sessionId);\n const nextRecord: UcanSessionRecord = {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n root: existing?.root,\n };\n if (nextRecord.root && nextRecord.root.aud && nextRecord.root.aud !== nextRecord.did) {\n nextRecord.root = undefined;\n }\n await writeSessionRecord(nextRecord);\n\n return {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n signer: async (signingInput: string, payload: UcanTokenPayload) => {\n const signatureResult = (await provider.request({\n method: 'yeying_ucan_sign',\n params: [\n {\n sessionId,\n signingInput,\n payload,\n },\n ],\n })) as { signature?: string } | string;\n\n if (typeof signatureResult === 'string') {\n return signatureResult;\n }\n if (signatureResult && typeof signatureResult.signature === 'string') {\n return signatureResult.signature;\n }\n throw new Error('Invalid wallet UCAN signature response');\n },\n };\n}\n\nexport async function createUcanSession(\n options: CreateUcanSessionOptions = {}\n): Promise<UcanSessionKey> {\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!provider) {\n throw new Error('No wallet provider for UCAN session');\n }\n return await requestWalletUcanSession(provider, options);\n}\n\nexport async function clearUcanSession(id: string = DEFAULT_SESSION_ID): Promise<void> {\n await deleteSessionRecord(id);\n}\n\nexport async function storeUcanRoot(\n root: UcanRootProof,\n id: string = DEFAULT_SESSION_ID\n): Promise<void> {\n const record = await readSessionRecord(id);\n const createdAt = record?.createdAt ?? Date.now();\n const expiresAt = record?.expiresAt ?? null;\n const did = record?.did || root.aud;\n const nextRecord: UcanSessionRecord = {\n id,\n did,\n createdAt,\n expiresAt,\n root,\n };\n await writeSessionRecord(nextRecord);\n}\n\nexport async function getStoredUcanRoot(id: string = DEFAULT_SESSION_ID): Promise<UcanRootProof | null> {\n const record = await readSessionRecord(id);\n return record?.root || null;\n}\n\nfunction capsEqual(a: UcanCapability[] | undefined, b: UcanCapability[] | undefined): boolean {\n return JSON.stringify(a || []) === JSON.stringify(b || []);\n}\n\nfunction isRootExpired(root: UcanRootProof, nowMs: number): boolean {\n return Boolean(root.exp && nowMs > root.exp);\n}\n\nexport async function getOrCreateUcanRoot(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const nowMs = Date.now();\n const stored = await getStoredUcanRoot(session.id);\n if (\n stored &&\n (!stored.aud || stored.aud === session.did) &&\n capsEqual(stored.cap, options.capabilities) &&\n !isRootExpired(stored, nowMs)\n ) {\n return stored;\n }\n\n return await createRootUcan({ ...options, provider, session });\n}\n\nfunction buildUcanStatement(payload: Record<string, unknown>): string {\n return `UCAN-AUTH ${JSON.stringify(payload)}`;\n}\n\nfunction buildSiweMessage(params: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: string;\n nonce: string;\n issuedAt: string;\n expirationTime?: string;\n}): string {\n const lines = [\n `${params.domain} wants you to sign in with your Ethereum account:`,\n params.address,\n '',\n params.statement,\n '',\n `URI: ${params.uri}`,\n 'Version: 1',\n `Chain ID: ${params.chainId}`,\n `Nonce: ${params.nonce}`,\n `Issued At: ${params.issuedAt}`,\n ];\n if (params.expirationTime) {\n lines.push(`Expiration Time: ${params.expirationTime}`);\n }\n return lines.join('\\n');\n}\n\nasync function resolveAddress(provider: Eip1193Provider, address?: string): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) throw new Error('No account available');\n return accounts[0];\n}\n\nasync function signWithProvider(\n provider: Eip1193Provider,\n address: string,\n message: string\n): Promise<string> {\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, address],\n });\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n return signature;\n}\n\nexport async function createRootUcan(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const address = await resolveAddress(provider, options.address);\n const chainId = options.chainId || (await getChainId(provider)) || '1';\n const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : '127.0.0.1');\n const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://127.0.0.1');\n const nonce = options.nonce || randomNonce(8);\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const nbf = options.notBeforeMs;\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: options.capabilities,\n exp,\n };\n if (nbf) statementPayload.nbf = nbf;\n\n const statement = options.statement || buildUcanStatement(statementPayload);\n const issuedAt = new Date().toISOString();\n const expirationTime = new Date(exp).toISOString();\n const message = buildSiweMessage({\n domain,\n address,\n statement,\n uri,\n chainId,\n nonce,\n issuedAt,\n expirationTime,\n });\n\n const signature = await signWithProvider(provider, address, message);\n\n const root: UcanRootProof = {\n type: 'siwe',\n iss: `did:pkh:eth:${address.toLowerCase()}`,\n aud: session.did,\n cap: options.capabilities,\n exp,\n nbf,\n siwe: {\n message,\n signature,\n },\n };\n\n await storeUcanRoot(root, session.id);\n\n return root;\n}\n\nasync function signUcanPayload(payload: UcanTokenPayload, session: UcanSessionKey): Promise<string> {\n const header = { alg: 'EdDSA', typ: 'UCAN' };\n const headerB64 = encodeJson(header);\n const payloadB64 = encodeJson(payload);\n const signingInput = `${headerB64}.${payloadB64}`;\n let signatureB64: string;\n\n if (session.signer) {\n signatureB64 = await session.signer(signingInput, payload);\n } else {\n if (!session.privateKey) {\n throw new Error('Missing UCAN session key');\n }\n const data = textEncoder.encode(signingInput);\n const signature = await crypto.subtle.sign('Ed25519', session.privateKey, data);\n signatureB64 = toBase64Url(signature);\n }\n return `${headerB64}.${payloadB64}.${signatureB64}`;\n}\n\nasync function resolveProofs(\n options: CreateUcanTokenOptions,\n issuer?: UcanSessionKey\n): Promise<UcanProof[]> {\n if (options.proofs && options.proofs.length > 0) return options.proofs;\n const stored = await getStoredUcanRoot(options.sessionId || DEFAULT_SESSION_ID);\n if (!stored) {\n throw new Error('Missing UCAN proof chain');\n }\n if (issuer?.did && stored.aud && stored.aud !== issuer.did) {\n throw new Error('UCAN root audience mismatch');\n }\n return [stored];\n}\n\nexport async function createDelegationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function createInvocationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function authUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: UcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = options.fetcher || fetch;\n let token = options.ucan;\n if (!token) {\n if (!options.audience || !options.capabilities) {\n throw new Error('Missing UCAN audience or capabilities');\n }\n token = await createInvocationUcan({\n issuer: options.issuer,\n sessionId: options.sessionId,\n provider: options.provider,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n proofs: options.proofs,\n });\n }\n\n const headers = new Headers(init.headers || {});\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetcher(input, {\n ...init,\n headers,\n });\n}\n","export type WebDavAuth =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string };\n\nexport type WebDavClientOptions = {\n baseUrl: string;\n prefix?: string;\n auth?: WebDavAuth;\n token?: string;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type WebDavRequestOptions = {\n headers?: Record<string, string>;\n auth?: WebDavAuth;\n token?: string;\n depth?: number | 'infinity';\n overwrite?: boolean;\n contentType?: string;\n signal?: AbortSignal;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix || prefix === '/') return '';\n let next = prefix.startsWith('/') ? prefix : `/${prefix}`;\n next = next.replace(/\\/+$/, '');\n return next;\n}\n\nfunction normalizePath(path: string): string {\n if (!path || path === '/') return '/';\n const next = path.startsWith('/') ? path : `/${path}`;\n return encodeURI(next);\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const base = normalizeBaseUrl(baseUrl);\n const suffix = path.startsWith('/') ? path : `/${path}`;\n return `${base}${suffix}`;\n}\n\nfunction resolveAuthHeader(auth?: WebDavAuth, token?: string): string | null {\n if (auth?.type === 'bearer') {\n return `Bearer ${auth.token}`;\n }\n if (auth?.type === 'basic') {\n const raw = `${auth.username}:${auth.password}`;\n return `Basic ${btoa(raw)}`;\n }\n if (token) {\n return `Bearer ${token}`;\n }\n return null;\n}\n\nexport class WebDavClient {\n private baseUrl: string;\n private prefix: string;\n private auth?: WebDavAuth;\n private token?: string;\n private fetcher: typeof fetch;\n private credentials?: RequestCredentials;\n\n constructor(options: WebDavClientOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.prefix = normalizePrefix(options.prefix);\n this.auth = options.auth;\n this.token = options.token;\n this.fetcher = options.fetcher || ((input, init) => fetch(input, init));\n this.credentials = options.credentials;\n }\n\n setToken(token: string | null) {\n this.token = token || undefined;\n }\n\n setAuth(auth?: WebDavAuth) {\n this.auth = auth;\n }\n\n private buildUrl(path: string): string {\n const webdavPath = `${this.prefix}${normalizePath(path)}`;\n return `${this.baseUrl}${webdavPath}`;\n }\n\n private buildHeaders(options?: WebDavRequestOptions): Headers {\n const headers = new Headers(options?.headers || {});\n const authHeader = resolveAuthHeader(options?.auth || this.auth, options?.token || this.token);\n if (authHeader) {\n headers.set('Authorization', authHeader);\n }\n if (options?.depth !== undefined) {\n headers.set('Depth', String(options.depth));\n }\n if (typeof options?.overwrite === 'boolean') {\n headers.set('Overwrite', options.overwrite ? 'T' : 'F');\n }\n if (options?.contentType) {\n headers.set('Content-Type', options.contentType);\n }\n return headers;\n }\n\n async request(\n method: string,\n path: string,\n body?: BodyInit | null,\n options: WebDavRequestOptions = {}\n ): Promise<Response> {\n const response = await this.fetcher(this.buildUrl(path), {\n method,\n headers: this.buildHeaders(options),\n body: body ?? undefined,\n credentials: this.credentials,\n signal: options.signal,\n } as RequestInit);\n\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${path} failed: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n async listDirectory(path: string = '/', depth: number | 'infinity' = 1): Promise<string> {\n const res = await this.request('PROPFIND', path, null, { depth });\n return await res.text();\n }\n\n async download(path: string): Promise<Response> {\n return await this.request('GET', path);\n }\n\n async downloadText(path: string): Promise<string> {\n const res = await this.download(path);\n return await res.text();\n }\n\n async downloadArrayBuffer(path: string): Promise<ArrayBuffer> {\n const res = await this.download(path);\n return await res.arrayBuffer();\n }\n\n async upload(path: string, content: BodyInit, contentType?: string): Promise<Response> {\n return await this.request('PUT', path, content, { contentType });\n }\n\n async createDirectory(path: string): Promise<Response> {\n return await this.request('MKCOL', path);\n }\n\n async ensureDirectory(path: string): Promise<void> {\n if (!path || path === '/') return;\n const segments = path.split('/').filter(Boolean);\n if (segments.length === 0) return;\n\n let current = '';\n for (const segment of segments) {\n current = `${current}/${segment}`;\n const res = await this.fetcher(this.buildUrl(current), {\n method: 'MKCOL',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n } as RequestInit);\n\n if (res.ok) continue;\n if (res.status === 405) continue;\n throw new Error(`WebDAV MKCOL ${current} failed: ${res.status} ${res.statusText}`);\n }\n }\n\n async remove(path: string): Promise<Response> {\n return await this.request('DELETE', path);\n }\n\n async move(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('MOVE', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async copy(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('COPY', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async getQuota(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/quota'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV quota failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async listRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/list'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle list failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async recoverRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/recover'), {\n method: 'POST',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle recover failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async deleteRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/permanent'), {\n method: 'DELETE',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle delete failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async clearRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/clear'), {\n method: 'DELETE',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle clear failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n}\n\nexport function createWebDavClient(options: WebDavClientOptions): WebDavClient {\n return new WebDavClient(options);\n}\n","import { requireProvider } from './auth/provider';\nimport { loginWithChallenge } from './auth/siwe';\nimport {\n createInvocationUcan,\n createUcanSession,\n getOrCreateUcanRoot,\n UcanCapability,\n UcanRootProof,\n UcanSessionKey,\n UcanTokenPayload,\n} from './auth/ucan';\nimport { Eip1193Provider, LoginWithChallengeOptions } from './auth/types';\nimport { createWebDavClient, WebDavClient } from './storage/webdav';\n\ntype CachedUcanToken = {\n token: string;\n exp: number;\n nbf?: number;\n};\n\nconst tokenCache = new Map<string, CachedUcanToken>();\nconst TOKEN_SKEW_MS = 5000;\n\nexport type InitWebDavStorageOptions = {\n baseUrl: string;\n audience: string;\n prefix?: string;\n appDir?: string;\n appId?: string;\n ensureAppDir?: boolean;\n capabilities?: UcanCapability[];\n invocationCapabilities?: UcanCapability[];\n provider?: Eip1193Provider;\n sessionId?: string;\n session?: UcanSessionKey;\n root?: UcanRootProof;\n rootExpiresInMs?: number;\n invocationExpiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type InitWebDavStorageResult = {\n client: WebDavClient;\n token: string;\n appDir?: string;\n session: UcanSessionKey;\n root: UcanRootProof;\n};\n\nexport type InitDappSessionOptions = {\n provider?: Eip1193Provider;\n address?: string;\n appAuth?: LoginWithChallengeOptions;\n webdav?: InitWebDavStorageOptions;\n};\n\nexport type InitDappSessionResult = {\n provider: Eip1193Provider;\n address?: string;\n appLogin?: Awaited<ReturnType<typeof loginWithChallenge>>;\n ucanSession?: UcanSessionKey;\n ucanRoot?: UcanRootProof;\n webdavClient?: WebDavClient;\n webdavToken?: string;\n webdavAppDir?: string;\n};\n\nfunction normalizeAppDir(path: string): string {\n const trimmed = path.trim();\n if (!trimmed) return '/';\n let next = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n next = next.replace(/\\/+$/, '');\n return next || '/';\n}\n\nfunction sanitizeAppId(appId: string): string {\n return appId.trim().replace(/[^a-zA-Z0-9._-]/g, '-');\n}\n\nfunction resolveAppDir(options: InitWebDavStorageOptions): string | undefined {\n if (options.appDir) {\n return normalizeAppDir(options.appDir);\n }\n if (options.appId) {\n return normalizeAppDir(`/apps/${sanitizeAppId(options.appId)}`);\n }\n return undefined;\n}\n\nfunction buildCapsKey(caps: UcanCapability[]): string {\n return JSON.stringify(caps || []);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction isTokenValid(entry: CachedUcanToken, nowMs: number): boolean {\n if (!entry.exp) return false;\n if (entry.nbf && nowMs < entry.nbf) return false;\n return entry.exp - TOKEN_SKEW_MS > nowMs;\n}\n\nfunction decodeBase64Url(input: string): string | null {\n if (!input) return null;\n const base64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, '=');\n try {\n if (typeof atob === 'function') {\n return atob(padded);\n }\n } catch {\n // ignore\n }\n try {\n const nodeBuffer = (globalThis as {\n Buffer?: { from: (input: string, encoding: string) => { toString: (encoding: string) => string } };\n }).Buffer;\n if (nodeBuffer) {\n return nodeBuffer.from(padded, 'base64').toString('utf8');\n }\n } catch {\n return null;\n }\n return null;\n}\n\nfunction decodeUcanPayload(token: string): UcanTokenPayload | null {\n const parts = token.split('.');\n if (parts.length < 2) return null;\n const decoded = decodeBase64Url(parts[1]);\n if (!decoded) return null;\n try {\n return JSON.parse(decoded) as UcanTokenPayload;\n } catch {\n return null;\n }\n}\n\nasync function getCachedInvocationToken(options: {\n issuer: UcanSessionKey;\n audience: string;\n capabilities: UcanCapability[];\n proofs: UcanRootProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n}): Promise<string> {\n const cacheKey = buildTokenCacheKey(options.issuer, options.audience, options.capabilities);\n const cached = tokenCache.get(cacheKey);\n const nowMs = Date.now();\n if (cached && isTokenValid(cached, nowMs)) {\n return cached.token;\n }\n\n const token = await createInvocationUcan({\n issuer: options.issuer,\n audience: options.audience,\n capabilities: options.capabilities,\n proofs: options.proofs,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const payload = decodeUcanPayload(token);\n if (payload && typeof payload.exp === 'number') {\n tokenCache.set(cacheKey, {\n token,\n exp: payload.exp,\n nbf: payload.nbf,\n });\n }\n\n return token;\n}\n\nexport async function initWebDavStorage(\n options: InitWebDavStorageOptions\n): Promise<InitWebDavStorageResult> {\n const caps = options.capabilities || options.root?.cap;\n if (!caps || caps.length === 0) {\n throw new Error('Missing UCAN capabilities for WebDAV');\n }\n\n const needsProvider = !options.session || !options.root;\n const provider =\n options.provider || (needsProvider ? await requireProvider() : undefined);\n\n const session =\n options.session ||\n (await createUcanSession({\n id: options.sessionId,\n provider,\n }));\n\n const nowMs = Date.now();\n let root = options.root;\n if (root && root.aud && root.aud !== session.did) {\n root = undefined;\n }\n if (root && buildCapsKey(root.cap) !== buildCapsKey(caps)) {\n root = undefined;\n }\n if (root && root.exp && nowMs > root.exp) {\n root = undefined;\n }\n\n if (!root) {\n root = await getOrCreateUcanRoot({\n provider: provider || (await requireProvider()),\n session,\n capabilities: caps,\n expiresInMs: options.rootExpiresInMs,\n });\n }\n\n const invocationCaps = options.invocationCapabilities || caps;\n\n const token = await getCachedInvocationToken({\n issuer: session,\n audience: options.audience,\n capabilities: invocationCaps,\n proofs: [root],\n expiresInMs: options.invocationExpiresInMs,\n notBeforeMs: options.notBeforeMs,\n });\n\n const client = createWebDavClient({\n baseUrl: options.baseUrl,\n prefix: options.prefix,\n token,\n fetcher: options.fetcher,\n credentials: options.credentials,\n });\n\n const appDir = resolveAppDir(options);\n if (appDir && options.ensureAppDir !== false) {\n await client.ensureDirectory(appDir);\n }\n\n return {\n client,\n token,\n appDir,\n session,\n root,\n };\n}\n\nexport async function initDappSession(\n options: InitDappSessionOptions\n): Promise<InitDappSessionResult> {\n if (!options.appAuth && !options.webdav) {\n throw new Error('No init options provided');\n }\n\n const provider =\n options.provider ||\n options.appAuth?.provider ||\n options.webdav?.provider ||\n (await requireProvider());\n\n const result: InitDappSessionResult = {\n provider,\n address: options.address,\n };\n\n if (options.appAuth) {\n const appLogin = await loginWithChallenge({\n ...options.appAuth,\n provider: options.appAuth.provider || provider,\n address: options.appAuth.address || options.address,\n });\n result.appLogin = appLogin;\n result.address = appLogin.address;\n }\n\n if (options.webdav) {\n const webdav = await initWebDavStorage({\n ...options.webdav,\n provider: options.webdav.provider || provider,\n });\n result.ucanSession = webdav.session;\n result.ucanRoot = webdav.root;\n result.webdavClient = webdav.client;\n result.webdavToken = webdav.token;\n result.webdavAppDir = webdav.appDir;\n }\n\n return result;\n}\n"],"names":["normalizeBaseUrl","joinUrl","resolveAddress"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"web3-bs.umd.js","sources":["../src/auth/provider.ts","../src/auth/siwe.ts","../src/auth/ucan.ts","../src/storage/webdav.ts","../src/dapp.ts"],"sourcesContent":["import {\n Eip1193Provider,\n Eip6963ProviderDetail,\n ProviderDiscoveryOptions,\n ProviderInfo,\n RequestAccountsOptions,\n AccountSelection,\n PreferredAccountOptions,\n WatchAccountsOptions,\n AccountsChangedHandler,\n} from './types';\n\nconst YEYING_RDNS = 'io.github.yeying';\nconst DEFAULT_TIMEOUT = 1000;\nconst DEFAULT_ACCOUNT_STORAGE_KEY = 'yeying:last_account';\n\nfunction getWindowEthereum(): Eip1193Provider | null {\n if (typeof window === 'undefined') return null;\n return (window as unknown as { ethereum?: Eip1193Provider }).ethereum || null;\n}\n\nfunction readStoredAccount(storageKey: string): string | null {\n if (typeof localStorage === 'undefined') return null;\n try {\n return localStorage.getItem(storageKey);\n } catch {\n return null;\n }\n}\n\nfunction writeStoredAccount(storageKey: string, account: string | null): void {\n if (typeof localStorage === 'undefined') return;\n try {\n if (account) {\n localStorage.setItem(storageKey, account);\n } else {\n localStorage.removeItem(storageKey);\n }\n } catch {\n // ignore storage errors\n }\n}\n\nfunction selectPreferredAccount(\n accounts: string[],\n stored: string | null,\n preferStored: boolean\n): string | null {\n if (preferStored && stored && accounts.includes(stored)) {\n return stored;\n }\n return accounts[0] || null;\n}\n\nexport function isYeYingProvider(provider?: Eip1193Provider | null, info?: ProviderInfo): boolean {\n if (!provider) return false;\n if (provider.isYeYing) return true;\n const name = (info?.name || '').toLowerCase();\n const rdns = (info?.rdns || '').toLowerCase();\n return rdns === YEYING_RDNS || name.includes('yeying');\n}\n\nfunction selectBestProvider(\n candidates: Eip6963ProviderDetail[],\n preferYeYing: boolean\n): Eip1193Provider | null {\n if (candidates.length === 0) return null;\n if (preferYeYing) {\n const yeying = candidates.find(c => isYeYingProvider(c.provider, c.info));\n if (yeying) return yeying.provider;\n }\n return candidates[0].provider;\n}\n\nexport async function getProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider | null> {\n const preferYeYing = options.preferYeYing !== false;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT;\n const windowProvider = getWindowEthereum();\n\n if (preferYeYing && isYeYingProvider(windowProvider)) {\n return windowProvider;\n }\n\n if (typeof window === 'undefined') {\n return windowProvider;\n }\n\n const discovered: Eip6963ProviderDetail[] = [];\n let resolved = false;\n\n return await new Promise(resolve => {\n const cleanup = () => {\n window.removeEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.removeEventListener('ethereum#initialized', onEthereumInitialized as EventListener);\n if (timeoutId) clearTimeout(timeoutId);\n };\n\n const safeResolve = (provider: Eip1193Provider | null) => {\n if (resolved) return;\n resolved = true;\n cleanup();\n resolve(provider);\n };\n\n const onAnnounce = (event: Event) => {\n const detail = (event as CustomEvent<Eip6963ProviderDetail>).detail;\n if (!detail?.provider) return;\n discovered.push(detail);\n\n if (preferYeYing && isYeYingProvider(detail.provider, detail.info)) {\n safeResolve(detail.provider);\n }\n };\n\n const onEthereumInitialized = () => {\n const injected = getWindowEthereum();\n if (preferYeYing && isYeYingProvider(injected)) {\n safeResolve(injected);\n }\n };\n\n window.addEventListener('eip6963:announceProvider', onAnnounce as EventListener);\n window.addEventListener('ethereum#initialized', onEthereumInitialized as EventListener, { once: true });\n\n const timeoutId = setTimeout(() => {\n if (resolved) return;\n const best =\n selectBestProvider(discovered, preferYeYing) ||\n windowProvider ||\n getWindowEthereum();\n safeResolve(best || null);\n }, timeoutMs);\n\n try {\n window.dispatchEvent(new Event('eip6963:requestProvider'));\n } catch {\n // Ignore if browser doesn't support CustomEvent target\n }\n\n if (!preferYeYing && windowProvider) {\n safeResolve(windowProvider);\n }\n });\n}\n\nexport async function requireProvider(\n options: ProviderDiscoveryOptions = {}\n): Promise<Eip1193Provider> {\n const provider = await getProvider(options);\n if (!provider) {\n throw new Error('No injected wallet provider found');\n }\n return provider;\n}\n\nexport async function requestAccounts(\n options: RequestAccountsOptions = {}\n): Promise<string[]> {\n const provider = options.provider || (await requireProvider());\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getAccounts(provider?: Eip1193Provider): Promise<string[]> {\n const p = provider || (await requireProvider());\n const accounts = (await p.request({ method: 'eth_accounts' })) as string[];\n return Array.isArray(accounts) ? accounts : [];\n}\n\nexport async function getChainId(provider?: Eip1193Provider): Promise<string | null> {\n const p = provider || (await requireProvider());\n const chainId = (await p.request({ method: 'eth_chainId' })) as string;\n return typeof chainId === 'string' ? chainId : null;\n}\n\nexport async function getPreferredAccount(\n options: PreferredAccountOptions = {}\n): Promise<AccountSelection> {\n const provider = options.provider || (await requireProvider());\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n let accounts = await getAccounts(provider);\n if (accounts.length === 0 && options.autoConnect) {\n accounts = await requestAccounts({ provider });\n }\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n return { account, accounts };\n}\n\nexport function watchAccounts(\n provider: Eip1193Provider,\n handler: AccountsChangedHandler,\n options: WatchAccountsOptions = {}\n): () => void {\n const storageKey = options.storageKey || DEFAULT_ACCOUNT_STORAGE_KEY;\n const preferStored = options.preferStored !== false;\n return onAccountsChanged(provider, (accounts) => {\n const stored = readStoredAccount(storageKey);\n const account = selectPreferredAccount(accounts, stored, preferStored);\n writeStoredAccount(storageKey, account);\n handler({ account, accounts });\n });\n}\n\nexport async function getBalance(\n provider?: Eip1193Provider,\n address?: string,\n blockTag: string = 'latest'\n): Promise<string> {\n const p = provider || (await requireProvider());\n let target = address;\n if (!target) {\n const accounts = await getAccounts(p);\n target = accounts[0];\n }\n if (!target) {\n throw new Error('No account available for balance');\n }\n\n const balance = (await p.request({\n method: 'eth_getBalance',\n params: [target, blockTag],\n })) as string;\n if (typeof balance !== 'string') {\n throw new Error('Invalid balance response');\n }\n return balance;\n}\n\nexport function onAccountsChanged(\n provider: Eip1193Provider,\n handler: (accounts: string[]) => void\n): () => void {\n provider.on?.('accountsChanged', handler);\n return () => provider.removeListener?.('accountsChanged', handler);\n}\n\nexport function onChainChanged(\n provider: Eip1193Provider,\n handler: (chainId: string) => void\n): () => void {\n provider.on?.('chainChanged', handler);\n return () => provider.removeListener?.('chainChanged', handler);\n}\n","import { getAccounts, requireProvider } from './provider';\nimport {\n AuthBaseOptions,\n AuthFetchOptions,\n AuthTokenResult,\n Eip1193Provider,\n LoginWithChallengeOptions,\n LogoutOptions,\n RefreshAccessTokenOptions,\n SignMessageOptions,\n} from './types';\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const trimmed = path.replace(/^\\/+/, '');\n return `${normalizeBaseUrl(baseUrl)}/${trimmed}`;\n}\n\nconst DEFAULT_TOKEN_KEY = 'authToken';\nlet cachedAccessToken: string | null = null;\nlet refreshInFlight: Promise<AuthTokenResult> | null = null;\n\nfunction resolveTokenKey(options?: AuthBaseOptions): string {\n return options?.tokenStorageKey || DEFAULT_TOKEN_KEY;\n}\n\nfunction shouldStoreToken(options?: AuthBaseOptions): boolean {\n return options?.storeToken !== false;\n}\n\nfunction resolveFetcher(options?: AuthBaseOptions): typeof fetch {\n return options?.fetcher || fetch;\n}\n\nfunction resolveCredentials(options?: AuthBaseOptions): RequestCredentials {\n return options?.credentials ?? 'include';\n}\n\nfunction readStoredToken(options?: AuthBaseOptions): string | null {\n if (!shouldStoreToken(options)) return null;\n if (typeof localStorage === 'undefined') return null;\n const key = resolveTokenKey(options);\n return localStorage.getItem(key);\n}\n\nfunction persistToken(token: string | null, options?: AuthBaseOptions): void {\n cachedAccessToken = token;\n if (!shouldStoreToken(options)) return;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n if (!token) {\n localStorage.removeItem(key);\n } else {\n localStorage.setItem(key, token);\n }\n}\n\nexport function getAccessToken(options?: AuthBaseOptions): string | null {\n if (cachedAccessToken) return cachedAccessToken;\n const stored = readStoredToken(options);\n if (stored) {\n cachedAccessToken = stored;\n }\n return stored;\n}\n\nexport function setAccessToken(token: string | null, options?: AuthBaseOptions): void {\n persistToken(token, options);\n}\n\nexport function clearAccessToken(options?: AuthBaseOptions): void {\n cachedAccessToken = null;\n if (typeof localStorage === 'undefined') return;\n const key = resolveTokenKey(options);\n localStorage.removeItem(key);\n}\n\nasync function resolveAddress(\n provider: Eip1193Provider,\n address?: string\n): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) {\n throw new Error('No account available');\n }\n return accounts[0];\n}\n\nfunction extractChallenge(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.challenge;\n if (typeof value === 'string') return value;\n }\n const direct = data.challenge || data.result;\n if (typeof direct === 'string') return direct;\n if (direct && typeof direct === 'object') {\n const nested = (direct as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).challenge;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nfunction extractToken(payload: unknown): string | null {\n if (!payload || typeof payload !== 'object') return null;\n const data = payload as Record<string, unknown>;\n const envelope = data.data as Record<string, unknown> | undefined;\n if (envelope) {\n const value = envelope.token;\n if (typeof value === 'string') return value;\n }\n const direct = data.token || data.result;\n if (typeof direct === 'string') return direct;\n const body = data.body as Record<string, unknown> | undefined;\n if (body) {\n const bodyToken = body.token;\n if (typeof bodyToken === 'string') return bodyToken;\n const bodyResult = body.result;\n if (typeof bodyResult === 'string') return bodyResult;\n if (bodyResult && typeof bodyResult === 'object') {\n const nested = (bodyResult as Record<string, unknown>).token;\n if (typeof nested === 'string') return nested;\n }\n }\n return null;\n}\n\nexport async function signMessage(options: SignMessageOptions): Promise<string> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const method = options.method || 'personal_sign';\n\n const params =\n method === 'eth_sign'\n ? [address, options.message]\n : [options.message, address];\n\n const signature = await provider.request({\n method,\n params,\n });\n\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n\n return signature;\n}\n\nexport async function loginWithChallenge(\n options: LoginWithChallengeOptions = {}\n): Promise<{\n token: string;\n address: string;\n signature: string;\n challenge: string;\n response: unknown;\n}> {\n const provider = options.provider || (await requireProvider());\n const address = await resolveAddress(provider, options.address);\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const challengeUrl = joinUrl(baseUrl, options.challengePath || 'challenge');\n const verifyUrl = joinUrl(baseUrl, options.verifyPath || 'verify');\n\n const challengeBody = {\n address,\n };\n\n const challengeRes = await fetcher(challengeUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(challengeBody),\n });\n\n if (!challengeRes.ok) {\n const text = await challengeRes.text();\n throw new Error(`Challenge request failed: ${challengeRes.status} ${text}`);\n }\n\n const challengePayload = await challengeRes.json();\n const challenge = extractChallenge(challengePayload);\n if (!challenge) {\n throw new Error('Challenge response missing challenge');\n }\n\n const signature = await signMessage({\n provider,\n address,\n message: challenge,\n method: options.signMethod || 'personal_sign',\n });\n\n const verifyBody = {\n address,\n signature,\n };\n\n const verifyRes = await fetcher(verifyUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n },\n credentials,\n body: JSON.stringify(verifyBody),\n });\n\n if (!verifyRes.ok) {\n const text = await verifyRes.text();\n throw new Error(`Verify request failed: ${verifyRes.status} ${text}`);\n }\n\n const verifyPayload = await verifyRes.json();\n const token = extractToken(verifyPayload);\n if (!token) {\n throw new Error('Verify response missing token');\n }\n\n persistToken(token, options);\n\n return {\n token,\n address,\n signature,\n challenge,\n response: verifyPayload,\n };\n}\n\nexport async function refreshAccessToken(\n options: RefreshAccessTokenOptions = {}\n): Promise<AuthTokenResult> {\n if (refreshInFlight) {\n return refreshInFlight;\n }\n\n const task = (async () => {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const refreshUrl = joinUrl(baseUrl, options.refreshPath || 'refresh');\n\n const refreshRes = await fetcher(refreshUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!refreshRes.ok) {\n const text = await refreshRes.text();\n throw new Error(`Refresh request failed: ${refreshRes.status} ${text}`);\n }\n\n const refreshPayload = await refreshRes.json();\n const token = extractToken(refreshPayload);\n if (!token) {\n throw new Error('Refresh response missing token');\n }\n\n persistToken(token, options);\n\n return { token, response: refreshPayload };\n })();\n\n refreshInFlight = task;\n try {\n return await task;\n } finally {\n refreshInFlight = null;\n }\n}\n\nexport async function logout(options: LogoutOptions = {}): Promise<{ response: unknown }> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const baseUrl = options.baseUrl || '/api/v1/public/auth';\n const logoutUrl = joinUrl(baseUrl, options.logoutPath || 'logout');\n\n const logoutRes = await fetcher(logoutUrl, {\n method: 'POST',\n headers: {\n accept: 'application/json',\n },\n credentials,\n });\n\n if (!logoutRes.ok) {\n const text = await logoutRes.text();\n throw new Error(`Logout request failed: ${logoutRes.status} ${text}`);\n }\n\n let payload: unknown = null;\n try {\n payload = await logoutRes.json();\n } catch {\n payload = null;\n }\n\n clearAccessToken(options);\n\n return { response: payload };\n}\n\nexport async function authFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: AuthFetchOptions = {}\n): Promise<Response> {\n const fetcher = resolveFetcher(options);\n const credentials = resolveCredentials(options);\n const retryOnUnauthorized = options.retryOnUnauthorized !== false;\n\n const performRequest = async (tokenOverride?: string | null): Promise<Response> => {\n const headers = new Headers(init.headers || {});\n const token = tokenOverride ?? options.accessToken ?? getAccessToken(options);\n if (token && !headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${token}`);\n }\n\n return fetcher(input, {\n ...init,\n headers,\n credentials,\n });\n };\n\n const initialRes = await performRequest();\n if (initialRes.status !== 401 || !retryOnUnauthorized) {\n return initialRes;\n }\n\n try {\n const refreshed = await refreshAccessToken(options);\n return await performRequest(refreshed.token);\n } catch {\n return initialRes;\n }\n}\n","import { getAccounts, getChainId, getProvider, requireProvider } from './provider';\nimport { Eip1193Provider } from './types';\n\nexport type UcanCapability = {\n resource: string;\n action: string;\n};\n\nexport type UcanRootProof = {\n type: 'siwe';\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n siwe: {\n message: string;\n signature: string;\n };\n};\n\nexport type UcanProof = UcanRootProof | string;\n\nexport type UcanTokenPayload = {\n iss: string;\n aud: string;\n cap: UcanCapability[];\n exp: number;\n nbf?: number;\n prf: UcanProof[];\n};\n\nexport type UcanSessionRecord = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n root?: UcanRootProof;\n};\n\nexport type UcanSessionKey = {\n id: string;\n did: string;\n createdAt: number;\n expiresAt: number | null;\n signer?: (signingInput: string, payload: UcanTokenPayload) => Promise<string>;\n privateKey?: CryptoKey;\n};\n\nexport type CreateUcanSessionOptions = {\n id?: string;\n expiresInMs?: number;\n forceNew?: boolean;\n provider?: Eip1193Provider;\n};\n\nexport type CreateRootUcanOptions = {\n provider?: Eip1193Provider;\n address?: string;\n session?: UcanSessionKey;\n sessionId?: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n domain?: string;\n uri?: string;\n chainId?: string;\n statement?: string;\n nonce?: string;\n notBeforeMs?: number;\n};\n\nexport type CreateUcanTokenOptions = {\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n audience: string;\n capabilities: UcanCapability[];\n expiresInMs?: number;\n notBeforeMs?: number;\n proofs?: UcanProof[];\n};\n\nexport type UcanFetchOptions = {\n ucan?: string;\n audience?: string;\n capabilities?: UcanCapability[];\n issuer?: UcanSessionKey;\n sessionId?: string;\n provider?: Eip1193Provider;\n proofs?: UcanProof[];\n expiresInMs?: number;\n notBeforeMs?: number;\n fetcher?: typeof fetch;\n};\n\nconst DEFAULT_SESSION_ID = 'default';\nconst DEFAULT_SESSION_TTL = 24 * 60 * 60 * 1000;\nconst DEFAULT_UCAN_TTL = 5 * 60 * 1000;\nconst DB_NAME = 'yeying-web3';\nconst DB_STORE = 'ucan-sessions';\n\nconst textEncoder = new TextEncoder();\n\nfunction toBase64Url(data: Uint8Array | ArrayBuffer): string {\n const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);\n let binary = '';\n for (let i = 0; i < bytes.length; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\nfunction encodeJson(value: unknown): string {\n return toBase64Url(textEncoder.encode(JSON.stringify(value)));\n}\n\nfunction randomNonce(bytes = 16): string {\n const buffer = new Uint8Array(bytes);\n crypto.getRandomValues(buffer);\n return Array.from(buffer)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction normalizeExpiry(exp: number | undefined, fallbackMs: number): number {\n if (typeof exp === 'number' && !Number.isNaN(exp)) return exp;\n return Date.now() + fallbackMs;\n}\n\n\nfunction openDb(): Promise<IDBDatabase> {\n if (typeof indexedDB === 'undefined') {\n return Promise.reject(new Error('IndexedDB not available'));\n }\n return new Promise((resolve, reject) => {\n const request = indexedDB.open(DB_NAME, 1);\n request.onupgradeneeded = () => {\n const db = request.result;\n if (!db.objectStoreNames.contains(DB_STORE)) {\n db.createObjectStore(DB_STORE, { keyPath: 'id' });\n }\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n}\n\nasync function readSessionRecord(id: string): Promise<UcanSessionRecord | null> {\n try {\n const db = await openDb();\n return await new Promise((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readonly');\n const store = tx.objectStore(DB_STORE);\n const request = store.get(id);\n request.onsuccess = () => resolve((request.result as UcanSessionRecord) || null);\n request.onerror = () => reject(request.error);\n });\n } catch {\n return null;\n }\n}\n\nasync function writeSessionRecord(record: UcanSessionRecord): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.put(record);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nasync function deleteSessionRecord(id: string): Promise<void> {\n try {\n const db = await openDb();\n await new Promise<void>((resolve, reject) => {\n const tx = db.transaction(DB_STORE, 'readwrite');\n const store = tx.objectStore(DB_STORE);\n const request = store.delete(id);\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error);\n });\n } catch {\n // ignore storage failures\n }\n}\n\nexport async function getUcanSession(\n id: string = DEFAULT_SESSION_ID,\n provider?: Eip1193Provider\n): Promise<UcanSessionKey | null> {\n const walletProvider = provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!walletProvider) return null;\n try {\n return await requestWalletUcanSession(walletProvider, { id });\n } catch {\n return null;\n }\n}\n\nasync function requestWalletUcanSession(\n provider: Eip1193Provider,\n options: CreateUcanSessionOptions\n): Promise<UcanSessionKey> {\n const sessionId = options.id || DEFAULT_SESSION_ID;\n const result = (await provider.request({\n method: 'yeying_ucan_session',\n params: [\n {\n sessionId,\n expiresInMs: options.expiresInMs,\n forceNew: options.forceNew,\n },\n ],\n })) as {\n id?: string;\n did?: string;\n createdAt?: number;\n expiresAt?: number | null;\n };\n\n if (!result || typeof result.did !== 'string') {\n throw new Error('Invalid wallet UCAN session response');\n }\n\n const createdAt = typeof result.createdAt === 'number' ? result.createdAt : Date.now();\n const expiresAt = typeof result.expiresAt === 'number' ? result.expiresAt : null;\n const existing = await readSessionRecord(sessionId);\n const nextRecord: UcanSessionRecord = {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n root: existing?.root,\n };\n if (nextRecord.root && nextRecord.root.aud && nextRecord.root.aud !== nextRecord.did) {\n nextRecord.root = undefined;\n }\n await writeSessionRecord(nextRecord);\n\n return {\n id: result.id || sessionId,\n did: result.did,\n createdAt,\n expiresAt,\n signer: async (signingInput: string, payload: UcanTokenPayload) => {\n const signatureResult = (await provider.request({\n method: 'yeying_ucan_sign',\n params: [\n {\n sessionId,\n signingInput,\n payload,\n },\n ],\n })) as { signature?: string } | string;\n\n if (typeof signatureResult === 'string') {\n return signatureResult;\n }\n if (signatureResult && typeof signatureResult.signature === 'string') {\n return signatureResult.signature;\n }\n throw new Error('Invalid wallet UCAN signature response');\n },\n };\n}\n\nexport async function createUcanSession(\n options: CreateUcanSessionOptions = {}\n): Promise<UcanSessionKey> {\n const provider = options.provider || (typeof window !== 'undefined'\n ? await getProvider({ preferYeYing: true })\n : null);\n if (!provider) {\n throw new Error('No wallet provider for UCAN session');\n }\n return await requestWalletUcanSession(provider, options);\n}\n\nexport async function clearUcanSession(id: string = DEFAULT_SESSION_ID): Promise<void> {\n await deleteSessionRecord(id);\n}\n\nexport async function storeUcanRoot(\n root: UcanRootProof,\n id: string = DEFAULT_SESSION_ID\n): Promise<void> {\n const record = await readSessionRecord(id);\n const createdAt = record?.createdAt ?? Date.now();\n const expiresAt = record?.expiresAt ?? null;\n const did = record?.did || root.aud;\n const nextRecord: UcanSessionRecord = {\n id,\n did,\n createdAt,\n expiresAt,\n root,\n };\n await writeSessionRecord(nextRecord);\n}\n\nexport async function getStoredUcanRoot(id: string = DEFAULT_SESSION_ID): Promise<UcanRootProof | null> {\n const record = await readSessionRecord(id);\n return record?.root || null;\n}\n\nfunction capsEqual(a: UcanCapability[] | undefined, b: UcanCapability[] | undefined): boolean {\n return JSON.stringify(a || []) === JSON.stringify(b || []);\n}\n\nfunction isRootExpired(root: UcanRootProof, nowMs: number): boolean {\n return Boolean(root.exp && nowMs > root.exp);\n}\n\nexport async function getOrCreateUcanRoot(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const nowMs = Date.now();\n const stored = await getStoredUcanRoot(session.id);\n if (\n stored &&\n (!stored.aud || stored.aud === session.did) &&\n capsEqual(stored.cap, options.capabilities) &&\n !isRootExpired(stored, nowMs)\n ) {\n return stored;\n }\n\n return await createRootUcan({ ...options, provider, session });\n}\n\nfunction buildUcanStatement(payload: Record<string, unknown>): string {\n return `UCAN-AUTH ${JSON.stringify(payload)}`;\n}\n\nfunction buildSiweMessage(params: {\n domain: string;\n address: string;\n statement: string;\n uri: string;\n chainId: string;\n nonce: string;\n issuedAt: string;\n expirationTime?: string;\n}): string {\n const lines = [\n `${params.domain} wants you to sign in with your Ethereum account:`,\n params.address,\n '',\n params.statement,\n '',\n `URI: ${params.uri}`,\n 'Version: 1',\n `Chain ID: ${params.chainId}`,\n `Nonce: ${params.nonce}`,\n `Issued At: ${params.issuedAt}`,\n ];\n if (params.expirationTime) {\n lines.push(`Expiration Time: ${params.expirationTime}`);\n }\n return lines.join('\\n');\n}\n\nasync function resolveAddress(provider: Eip1193Provider, address?: string): Promise<string> {\n if (address) return address;\n let accounts = await getAccounts(provider);\n if (!accounts[0]) {\n const requested = (await provider.request({\n method: 'eth_requestAccounts',\n })) as string[];\n if (Array.isArray(requested)) {\n accounts = requested;\n }\n }\n if (!accounts[0]) throw new Error('No account available');\n return accounts[0];\n}\n\nasync function signWithProvider(\n provider: Eip1193Provider,\n address: string,\n message: string\n): Promise<string> {\n const signature = await provider.request({\n method: 'personal_sign',\n params: [message, address],\n });\n if (typeof signature !== 'string') {\n throw new Error('Invalid signature response');\n }\n return signature;\n}\n\nexport async function createRootUcan(options: CreateRootUcanOptions): Promise<UcanRootProof> {\n const provider = options.provider || (await requireProvider());\n const session = options.session || (await createUcanSession({ id: options.sessionId, provider }));\n const address = await resolveAddress(provider, options.address);\n const chainId = options.chainId || (await getChainId(provider)) || '1';\n const domain = options.domain || (typeof window !== 'undefined' ? window.location.host : '127.0.0.1');\n const uri = options.uri || (typeof window !== 'undefined' ? window.location.origin : 'http://127.0.0.1');\n const nonce = options.nonce || randomNonce(8);\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_SESSION_TTL);\n const nbf = options.notBeforeMs;\n\n const statementPayload: Record<string, unknown> = {\n aud: session.did,\n cap: options.capabilities,\n exp,\n };\n if (nbf) statementPayload.nbf = nbf;\n\n const statement = options.statement || buildUcanStatement(statementPayload);\n const issuedAt = new Date().toISOString();\n const expirationTime = new Date(exp).toISOString();\n const message = buildSiweMessage({\n domain,\n address,\n statement,\n uri,\n chainId,\n nonce,\n issuedAt,\n expirationTime,\n });\n\n const signature = await signWithProvider(provider, address, message);\n\n const root: UcanRootProof = {\n type: 'siwe',\n iss: `did:pkh:eth:${address.toLowerCase()}`,\n aud: session.did,\n cap: options.capabilities,\n exp,\n nbf,\n siwe: {\n message,\n signature,\n },\n };\n\n await storeUcanRoot(root, session.id);\n\n return root;\n}\n\nasync function signUcanPayload(payload: UcanTokenPayload, session: UcanSessionKey): Promise<string> {\n const header = { alg: 'EdDSA', typ: 'UCAN' };\n const headerB64 = encodeJson(header);\n const payloadB64 = encodeJson(payload);\n const signingInput = `${headerB64}.${payloadB64}`;\n let signatureB64: string;\n\n if (session.signer) {\n signatureB64 = await session.signer(signingInput, payload);\n } else {\n if (!session.privateKey) {\n throw new Error('Missing UCAN session key');\n }\n const data = textEncoder.encode(signingInput);\n const signature = await crypto.subtle.sign('Ed25519', session.privateKey, data);\n signatureB64 = toBase64Url(signature);\n }\n return `${headerB64}.${payloadB64}.${signatureB64}`;\n}\n\nasync function resolveProofs(\n options: CreateUcanTokenOptions,\n issuer?: UcanSessionKey\n): Promise<UcanProof[]> {\n if (options.proofs && options.proofs.length > 0) return options.proofs;\n const stored = await getStoredUcanRoot(options.sessionId || DEFAULT_SESSION_ID);\n if (!stored) {\n throw new Error('Missing UCAN proof chain');\n }\n if (issuer?.did && stored.aud && stored.aud !== issuer.did) {\n throw new Error('UCAN root audience mismatch');\n }\n return [stored];\n}\n\nexport async function createDelegationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function createInvocationUcan(options: CreateUcanTokenOptions): Promise<string> {\n const issuer = options.issuer || (await createUcanSession({\n id: options.sessionId,\n provider: options.provider,\n }));\n if (!issuer) throw new Error('Missing UCAN session key');\n const exp = normalizeExpiry(undefined, options.expiresInMs ?? DEFAULT_UCAN_TTL);\n const payload: UcanTokenPayload = {\n iss: issuer.did,\n aud: options.audience,\n cap: options.capabilities,\n exp,\n nbf: options.notBeforeMs,\n prf: await resolveProofs(options, issuer),\n };\n return await signUcanPayload(payload, issuer);\n}\n\nexport async function authUcanFetch(\n input: RequestInfo | URL,\n init: RequestInit = {},\n options: UcanFetchOptions = {}\n): Promise<Response> {\n const fetcher = options.fetcher || fetch;\n let token = options.ucan;\n if (!token) {\n if (!options.audience || !options.capabilities) {\n throw new Error('Missing UCAN audience or capabilities');\n }\n token = await createInvocationUcan({\n issuer: options.issuer,\n sessionId: options.sessionId,\n provider: options.provider,\n audience: options.audience,\n capabilities: options.capabilities,\n expiresInMs: options.expiresInMs,\n notBeforeMs: options.notBeforeMs,\n proofs: options.proofs,\n });\n }\n\n const headers = new Headers(init.headers || {});\n headers.set('Authorization', `Bearer ${token}`);\n\n return fetcher(input, {\n ...init,\n headers,\n });\n}\n","export type WebDavAuth =\n | { type: 'bearer'; token: string }\n | { type: 'basic'; username: string; password: string };\n\nexport type WebDavClientOptions = {\n baseUrl: string;\n prefix?: string;\n auth?: WebDavAuth;\n token?: string;\n fetcher?: typeof fetch;\n credentials?: RequestCredentials;\n};\n\nexport type WebDavRequestOptions = {\n headers?: Record<string, string>;\n auth?: WebDavAuth;\n token?: string;\n depth?: number | 'infinity';\n overwrite?: boolean;\n contentType?: string;\n signal?: AbortSignal;\n};\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n return baseUrl.replace(/\\/+$/, '');\n}\n\nfunction normalizePrefix(prefix?: string): string {\n if (!prefix || prefix === '/') return '';\n let next = prefix.startsWith('/') ? prefix : `/${prefix}`;\n next = next.replace(/\\/+$/, '');\n return next;\n}\n\nfunction normalizePath(path: string): string {\n if (!path || path === '/') return '/';\n const next = path.startsWith('/') ? path : `/${path}`;\n return encodeURI(next);\n}\n\nfunction joinUrl(baseUrl: string, path: string): string {\n const base = normalizeBaseUrl(baseUrl);\n const suffix = path.startsWith('/') ? path : `/${path}`;\n return `${base}${suffix}`;\n}\n\nfunction resolveAuthHeader(auth?: WebDavAuth, token?: string): string | null {\n if (auth?.type === 'bearer') {\n return `Bearer ${auth.token}`;\n }\n if (auth?.type === 'basic') {\n const raw = `${auth.username}:${auth.password}`;\n return `Basic ${btoa(raw)}`;\n }\n if (token) {\n return `Bearer ${token}`;\n }\n return null;\n}\n\nexport class WebDavClient {\n private baseUrl: string;\n private prefix: string;\n private auth?: WebDavAuth;\n private token?: string;\n private fetcher: typeof fetch;\n private credentials?: RequestCredentials;\n\n constructor(options: WebDavClientOptions) {\n this.baseUrl = normalizeBaseUrl(options.baseUrl);\n this.prefix = normalizePrefix(options.prefix);\n this.auth = options.auth;\n this.token = options.token;\n this.fetcher = options.fetcher || ((input, init) => fetch(input, init));\n this.credentials = options.credentials;\n }\n\n setToken(token: string | null) {\n this.token = token || undefined;\n }\n\n setAuth(auth?: WebDavAuth) {\n this.auth = auth;\n }\n\n private buildUrl(path: string): string {\n const webdavPath = `${this.prefix}${normalizePath(path)}`;\n return `${this.baseUrl}${webdavPath}`;\n }\n\n private buildHeaders(options?: WebDavRequestOptions): Headers {\n const headers = new Headers(options?.headers || {});\n const authHeader = resolveAuthHeader(options?.auth || this.auth, options?.token || this.token);\n if (authHeader) {\n headers.set('Authorization', authHeader);\n }\n if (options?.depth !== undefined) {\n headers.set('Depth', String(options.depth));\n }\n if (typeof options?.overwrite === 'boolean') {\n headers.set('Overwrite', options.overwrite ? 'T' : 'F');\n }\n if (options?.contentType) {\n headers.set('Content-Type', options.contentType);\n }\n return headers;\n }\n\n async request(\n method: string,\n path: string,\n body?: BodyInit | null,\n options: WebDavRequestOptions = {}\n ): Promise<Response> {\n const response = await this.fetcher(this.buildUrl(path), {\n method,\n headers: this.buildHeaders(options),\n body: body ?? undefined,\n credentials: this.credentials,\n signal: options.signal,\n } as RequestInit);\n\n if (!response.ok) {\n throw new Error(`WebDAV ${method} ${path} failed: ${response.status} ${response.statusText}`);\n }\n\n return response;\n }\n\n async listDirectory(path: string = '/', depth: number | 'infinity' = 1): Promise<string> {\n const res = await this.request('PROPFIND', path, null, { depth });\n return await res.text();\n }\n\n async download(path: string): Promise<Response> {\n return await this.request('GET', path);\n }\n\n async downloadText(path: string): Promise<string> {\n const res = await this.download(path);\n return await res.text();\n }\n\n async downloadArrayBuffer(path: string): Promise<ArrayBuffer> {\n const res = await this.download(path);\n return await res.arrayBuffer();\n }\n\n async upload(path: string, content: BodyInit, contentType?: string): Promise<Response> {\n return await this.request('PUT', path, content, { contentType });\n }\n\n async createDirectory(path: string): Promise<Response> {\n return await this.request('MKCOL', path);\n }\n\n async ensureDirectory(path: string): Promise<void> {\n if (!path || path === '/') return;\n const segments = path.split('/').filter(Boolean);\n if (segments.length === 0) return;\n\n let current = '';\n for (const segment of segments) {\n current = `${current}/${segment}`;\n const res = await this.fetcher(this.buildUrl(current), {\n method: 'MKCOL',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n } as RequestInit);\n\n if (res.ok) continue;\n if (res.status === 405) continue;\n throw new Error(`WebDAV MKCOL ${current} failed: ${res.status} ${res.statusText}`);\n }\n }\n\n async remove(path: string): Promise<Response> {\n return await this.request('DELETE', path);\n }\n\n async move(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('MOVE', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async copy(path: string, destination: string, overwrite: boolean = true): Promise<Response> {\n const destinationUrl = destination.startsWith('http')\n ? destination\n : this.buildUrl(destination);\n return await this.request('COPY', path, null, {\n headers: { Destination: destinationUrl },\n overwrite,\n });\n }\n\n async getQuota(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/quota'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV quota failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async listRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/list'), {\n method: 'GET',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle list failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async recoverRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/recover'), {\n method: 'POST',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle recover failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async deleteRecycle(hash: string): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/permanent'), {\n method: 'DELETE',\n headers: this.buildHeaders({ contentType: 'application/json' }),\n body: JSON.stringify({ hash }),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle delete failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n\n async clearRecycle(): Promise<unknown> {\n const res = await this.fetcher(joinUrl(this.baseUrl, '/api/v1/public/webdav/recycle/clear'), {\n method: 'DELETE',\n headers: this.buildHeaders(),\n credentials: this.credentials,\n });\n if (!res.ok) {\n throw new Error(`WebDAV recycle clear failed: ${res.status} ${res.statusText}`);\n }\n return await res.json();\n }\n}\n\nexport function createWebDavClient(options: WebDavClientOptions): WebDavClient {\n return new WebDavClient(options);\n}\n","import { requireProvider } from './auth/provider';\nimport { loginWithChallenge } from './auth/siwe';\nimport {\n createInvocationUcan,\n createUcanSession,\n getOrCreateUcanRoot,\n UcanCapability,\n UcanRootProof,\n UcanSessionKey,\n UcanTokenPayload,\n} from './auth/ucan';\nimport { Eip1193Provider, LoginWithChallengeOptions } from './auth/types';\nimport { createWebDavClient, WebDavClient } from './storage/webdav';\n\ntype CachedUcanToken = {\n token: string;\n exp: number;\n nbf?: number;\n};\n\nconst tokenCache = new Map<string, CachedUcanToken>();\nconst TOKEN_SKEW_MS = 5000;\nconst DEFAULT_APP_ACTION = 'write';\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\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 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 return {\n resource: `app:${sanitizeAppId(options.appId)}`,\n action,\n };\n}\n\nfunction hasAppCapability(caps: UcanCapability[]): boolean {\n return (caps || []).some(cap => typeof cap?.resource === 'string' && cap.resource.startsWith('app:'));\n}\n\nfunction dedupeCapabilities(caps: UcanCapability[]): UcanCapability[] {\n const seen = new Set<string>();\n return (caps || []).filter(cap => {\n if (!cap || !cap.resource || !cap.action) return false;\n const key = `${cap.resource}|${cap.action}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\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 return JSON.stringify(caps || []);\n}\n\nfunction buildTokenCacheKey(issuer: UcanSessionKey, audience: string, caps: UcanCapability[]): string {\n return `${issuer.did}|${audience}|${buildCapsKey(caps)}`;\n}\n\nfunction 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","resolveAddress"],"mappings":"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"}
|