@seedprotocol/arweave 0.5.3 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js.map +1 -1
- package/dist/mediaRef.d.ts +2 -2
- package/dist/mediaRef.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/easAttestationUrl.ts","../src/relationSeedRef.ts","../src/mediaRef.ts","../src/resolveSeedRssImageRelationRef.ts","../src/ArweaveClient/selectReadGateway.ts","../src/ArweaveClient/uploadApiVerification.ts","../src/ArweaveClient/arweaveL1UploadApi.ts","../src/gateway/gatewayState.ts","../src/gateway/resolveSeedGatewayEndpoints.ts","../src/gateway/seedGatewayConfig.ts"],"sourcesContent":["const EAS_ATTESTATION_EXPLORER_HOST = /(^|\\.)easscan\\.(org|xyz)$/i\n\n/**\n * True when `url` points at an EAS attestation explorer HTML page (not fetchable media).\n */\nexport function isEasAttestationExplorerUrl(url: string): boolean {\n const trimmed = url.trim()\n if (!trimmed) return false\n try {\n const parsed = new URL(trimmed)\n if (!EAS_ATTESTATION_EXPLORER_HOST.test(parsed.hostname)) {\n return false\n }\n return /\\/attestation\\/view\\//i.test(parsed.pathname)\n } catch {\n return false\n }\n}\n","/** Same rules as getCorrectId in helpers/index (avoid barrel circular import). */\nfunction parseLocalIdOrUid(localIdOrUid: string): { localId?: string; uid?: string } {\n const id = { localId: undefined as string | undefined, uid: undefined as string | undefined }\n if (!localIdOrUid) return id\n if (localIdOrUid.length === 10) {\n id.localId = localIdOrUid\n }\n if (localIdOrUid.startsWith('0x') && localIdOrUid.length === 66) {\n id.uid = localIdOrUid\n }\n return id\n}\n\nexport function normalizeRelationPropertyValue(value: unknown): string | undefined {\n if (value == null) return undefined\n if (typeof value === 'string') {\n const t = value.trim()\n return t !== '' ? t : undefined\n }\n if (typeof value === 'object' && value !== null) {\n const o = value as { seedLocalId?: string; seedUid?: string }\n if (typeof o.seedLocalId === 'string' && o.seedLocalId.trim() !== '') {\n return o.seedLocalId.trim()\n }\n if (typeof o.seedUid === 'string' && o.seedUid.trim() !== '') {\n return o.seedUid.trim()\n }\n }\n return undefined\n}\n\nconst LOCAL_SEED_REF = /^[a-zA-Z0-9_-]{10,21}$/\n\nexport function resolveSeedIdsFromRefString(s: string): {\n seedLocalId?: string\n seedUid?: string\n} {\n const fromCorrect = parseLocalIdOrUid(s)\n if (fromCorrect.localId || fromCorrect.uid) {\n return { seedLocalId: fromCorrect.localId, seedUid: fromCorrect.uid }\n }\n if (LOCAL_SEED_REF.test(s) && !s.startsWith('0x')) {\n return { seedLocalId: s }\n }\n return {}\n}\n","import { BaseArweaveClient } from './ArweaveClient/BaseArweaveClient.js'\nimport { isEasAttestationExplorerUrl } from './easAttestationUrl.js'\nimport {\n normalizeRelationPropertyValue,\n resolveSeedIdsFromRefString,\n} from './relationSeedRef.js'\n\nexport type FeedFieldRole = 'image' | 'file' | 'html' | 'text'\n\nexport type FeedFieldDescriptor = {\n role: FeedFieldRole\n treatAs?: 'arweaveTx' | 'seedUid' | 'url'\n}\n\nexport type FeedFieldManifest = Record<string, FeedFieldDescriptor>\n\nexport type ClassifyMediaRefOptions = {\n treatAs?: FeedFieldDescriptor['treatAs']\n}\n\nexport type MediaRefClassification =\n | { kind: 'empty' }\n | { kind: 'url'; href: string }\n | { kind: 'nonMediaUrl'; href: string }\n | { kind: 'seedUid'; uid: string }\n | { kind: 'seedLocalId'; localId: string }\n | { kind: 'arweaveTxId'; txId: string }\n | { kind: 'unknown'; raw: string }\n\nexport type ResolveMediaRefResult =\n | { status: 'ready'; href: string; source: 'direct' | 'gateway' | 'localBlob' }\n | { status: 'empty' }\n | {\n status: 'unresolved'\n reason: string\n classification: MediaRefClassification\n }\n\nexport type ResolveMediaRefOptions = ClassifyMediaRefOptions\n\nconst ARWEAVE_TX_ID = /^[a-zA-Z0-9_-]{43}$/\n\nfunction trimOrEmpty(raw: string | undefined | null): string {\n if (raw == null) return ''\n return typeof raw === 'string' ? raw.trim() : String(raw).trim()\n}\n\nfunction coalesceStringField(item: Record<string, unknown>, key: string): string {\n const v = item[key]\n if (v == null) return ''\n if (typeof v === 'string') return v.trim()\n if (typeof v === 'number' || typeof v === 'boolean') return String(v)\n return ''\n}\n\nfunction unwrapRelationString(raw: string): string {\n const t = raw.trim()\n if (!t) return t\n try {\n const parsed = JSON.parse(t) as unknown\n const fromObj = normalizeRelationPropertyValue(parsed)\n if (fromObj) return fromObj\n } catch {\n // not JSON\n }\n return t\n}\n\nexport function classifyMediaRef(\n raw: string,\n options?: ClassifyMediaRefOptions,\n): MediaRefClassification {\n const s = trimOrEmpty(raw)\n if (!s) {\n return { kind: 'empty' }\n }\n\n const treatAs = options?.treatAs\n if (treatAs === 'url') {\n return { kind: 'url', href: s }\n }\n if (treatAs === 'arweaveTx') {\n return { kind: 'arweaveTxId', txId: s }\n }\n if (treatAs === 'seedUid') {\n if (s.startsWith('0x') && s.length === 66) {\n return { kind: 'seedUid', uid: s }\n }\n return { kind: 'unknown', raw: s }\n }\n\n if (\n s.startsWith('http://') ||\n s.startsWith('https://') ||\n s.startsWith('blob:') ||\n s.startsWith('data:')\n ) {\n if (isEasAttestationExplorerUrl(s)) {\n return { kind: 'nonMediaUrl', href: s }\n }\n return { kind: 'url', href: s }\n }\n\n const unwrapped = unwrapRelationString(s)\n const ids = resolveSeedIdsFromRefString(unwrapped)\n if (ids.seedUid) {\n return { kind: 'seedUid', uid: ids.seedUid }\n }\n if (ids.seedLocalId) {\n return { kind: 'seedLocalId', localId: ids.seedLocalId }\n }\n\n if (unwrapped.startsWith('0x') && unwrapped.length === 66) {\n return { kind: 'seedUid', uid: unwrapped }\n }\n\n if (ARWEAVE_TX_ID.test(unwrapped) && !unwrapped.startsWith('0x')) {\n return { kind: 'arweaveTxId', txId: unwrapped }\n }\n\n return { kind: 'unknown', raw: s }\n}\n\nexport type NormalizedMediaField = {\n role: 'image' | 'file'\n raw: string\n classification: MediaRefClassification\n}\n\nexport type NormalizedHtmlField = {\n role: 'html'\n raw: string\n}\n\nexport type NormalizedTextField = {\n role: 'text'\n raw: string\n}\n\nexport type NormalizedFeedFieldValue =\n | NormalizedMediaField\n | NormalizedHtmlField\n | NormalizedTextField\n\nexport function getFeedItemStringField(item: Record<string, unknown>, key: string): string {\n const direct = coalesceStringField(item, key)\n if (direct) return direct\n const snake = key.replace(/[A-Z]/g, (l) => `_${l.toLowerCase()}`)\n if (snake !== key) {\n const alt = coalesceStringField(item, snake)\n if (alt) return alt\n }\n const parts = key.split('_')\n if (parts.length > 1) {\n const camel =\n parts[0] + parts.slice(1).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('')\n const alt2 = coalesceStringField(item, camel)\n if (alt2) return alt2\n }\n return ''\n}\n\nexport function normalizeFeedItemFields(\n item: Record<string, unknown>,\n manifest: FeedFieldManifest,\n): Record<string, NormalizedFeedFieldValue | undefined> {\n const out: Record<string, NormalizedFeedFieldValue | undefined> = {}\n for (const [fieldKey, descriptor] of Object.entries(manifest)) {\n const raw = getFeedItemStringField(item, fieldKey)\n if (!raw) {\n out[fieldKey] = undefined\n continue\n }\n if (descriptor.role === 'html') {\n out[fieldKey] = { role: 'html', raw }\n continue\n }\n if (descriptor.role === 'text') {\n out[fieldKey] = { role: 'text', raw }\n continue\n }\n const classification = classifyMediaRef(raw, { treatAs: descriptor.treatAs })\n out[fieldKey] = {\n role: descriptor.role,\n raw,\n classification,\n }\n }\n return out\n}\n\nexport function getArweaveUrlForTransaction(transactionId: string): string {\n return `${BaseArweaveClient.getBaseUrl()}/${transactionId}`\n}\n","import { BaseArweaveClient } from './ArweaveClient/BaseArweaveClient.js'\nimport { isEasAttestationExplorerUrl } from './easAttestationUrl.js'\nimport { classifyMediaRef } from './mediaRef.js'\n\nexport type SeedRssImageRelationRef = {\n storageTransactionId?: string\n arweaveUrl?: string\n seedUid?: string\n /** Gateway/raw URL suitable for image fetch; never an EAS attestation explorer page. */\n mediaUrl?: string\n}\n\nexport const SEED_RSS_IMAGE_RELATION_FIELD_KEYS = [\n 'featureImage',\n 'feature_image',\n 'image',\n 'images',\n 'coverImage',\n 'cover_image',\n 'thumbnail',\n 'thumbnail_image',\n 'thumbnailImage',\n] as const\n\nfunction trimOrEmpty(value: unknown): string {\n if (value == null) return ''\n if (typeof value === 'string') return value.trim()\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return ''\n}\n\nfunction readObjectStringField(obj: Record<string, unknown>, ...keys: string[]): string {\n for (const key of keys) {\n const direct = trimOrEmpty(obj[key])\n if (direct) return direct\n }\n\n const suffixes = keys.map((key) => key.split(':').pop()!.toLowerCase())\n for (const [rawKey, rawValue] of Object.entries(obj)) {\n const normalizedKey = rawKey.includes(':') ? rawKey.split(':').pop()! : rawKey\n const normalizedLower = normalizedKey.toLowerCase()\n if (suffixes.some((suffix) => normalizedLower === suffix.toLowerCase())) {\n const value = trimOrEmpty(rawValue)\n if (value) return value\n }\n }\n\n return ''\n}\n\nfunction tryGatewayUrlForTxId(txId: string): string | undefined {\n const trimmed = txId.trim()\n if (!trimmed || trimmed.startsWith('0x')) return undefined\n try {\n return `${BaseArweaveClient.getBaseUrl()}/${trimmed}`\n } catch {\n return undefined\n }\n}\n\nfunction resolveMediaUrlFromParts(parts: {\n storageTransactionId?: string\n arweaveUrl?: string\n}): string | undefined {\n const txId = parts.storageTransactionId?.trim()\n if (txId) {\n const fromTx = tryGatewayUrlForTxId(txId)\n if (fromTx) return fromTx\n }\n\n const arweaveUrl = parts.arweaveUrl?.trim()\n if (arweaveUrl && !isEasAttestationExplorerUrl(arweaveUrl)) {\n return arweaveUrl\n }\n\n return undefined\n}\n\nfunction resolveFromString(value: string): SeedRssImageRelationRef | undefined {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n\n if (isEasAttestationExplorerUrl(trimmed)) {\n return undefined\n }\n\n const classification = classifyMediaRef(trimmed)\n switch (classification.kind) {\n case 'url':\n return { mediaUrl: classification.href }\n case 'arweaveTxId': {\n const mediaUrl = tryGatewayUrlForTxId(classification.txId)\n return {\n storageTransactionId: classification.txId,\n ...(mediaUrl ? { mediaUrl } : {}),\n }\n }\n case 'seedUid':\n return { seedUid: classification.uid }\n default: {\n const mediaUrl = tryGatewayUrlForTxId(trimmed)\n if (mediaUrl) {\n return {\n storageTransactionId: trimmed,\n mediaUrl,\n }\n }\n return undefined\n }\n }\n}\n\nfunction resolveFromObject(obj: Record<string, unknown>): SeedRssImageRelationRef | undefined {\n const storageTransactionId = readObjectStringField(\n obj,\n 'storageTransactionId',\n 'storage_transaction_id',\n )\n const arweaveUrl = readObjectStringField(obj, 'arweaveUrl', 'arweave_url')\n const seedUid = readObjectStringField(obj, 'seedUid', 'SeedUid', 'seed_uid')\n const link = readObjectStringField(obj, 'link', 'Link')\n\n const mediaUrl =\n resolveMediaUrlFromParts({ storageTransactionId, arweaveUrl }) ??\n (link && !isEasAttestationExplorerUrl(link) ? link : undefined)\n\n if (!storageTransactionId && !arweaveUrl && !seedUid && !mediaUrl) {\n return undefined\n }\n\n return {\n ...(storageTransactionId ? { storageTransactionId } : {}),\n ...(arweaveUrl && !isEasAttestationExplorerUrl(arweaveUrl) ? { arweaveUrl } : {}),\n ...(seedUid ? { seedUid } : {}),\n ...(mediaUrl ? { mediaUrl } : {}),\n }\n}\n\n/**\n * Resolve a Seed RSS image relation value (plain string or expanded relation object)\n * using field priority: storageTransactionId → arweaveUrl/gateway URL → seedUid.\n * EAS attestation explorer URLs are never returned as media.\n */\nexport function resolveSeedRssImageRelationRef(value: unknown): SeedRssImageRelationRef | undefined {\n if (value == null) return undefined\n\n if (typeof value === 'string') {\n return resolveFromString(value)\n }\n\n if (Array.isArray(value)) {\n for (const entry of value) {\n const resolved = resolveSeedRssImageRelationRef(entry)\n if (resolved?.mediaUrl || resolved?.storageTransactionId || resolved?.seedUid) {\n return resolved\n }\n }\n return undefined\n }\n\n if (typeof value === 'object') {\n return resolveFromObject(value as Record<string, unknown>)\n }\n\n return undefined\n}\n\n/**\n * Read the first configured image-relation field from a parsed RSS item record.\n */\nexport function resolveSeedRssImageRelationFromItem(\n item: Record<string, unknown>,\n fieldKeys: readonly string[] = SEED_RSS_IMAGE_RELATION_FIELD_KEYS,\n): SeedRssImageRelationRef | undefined {\n for (const key of fieldKeys) {\n if (!(key in item)) continue\n const resolved = resolveSeedRssImageRelationRef(item[key])\n if (resolved) return resolved\n }\n return undefined\n}\n","import { BaseArweaveClient } from './BaseArweaveClient.js'\nimport {\n DEFAULT_ARWEAVE_HOST,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\n\nconst READ_GATEWAY_CACHE_TTL_MS = 3 * 60 * 1000\nconst PROBE_TIMEOUT_MS = 5000\n\nlet readGatewayCache: { host: string; expiresAt: number } | null = null\nlet ensureInFlight: Promise<string> | null = null\n\n/** Clears cached read gateway (e.g. after tests or to force a fresh probe). */\nexport function invalidateReadGatewayCache(): void {\n readGatewayCache = null\n ensureInFlight = null\n}\n\n/** Clears probe cache, env override suppression, and preferred host (for tests). */\nexport function resetArweaveReadGatewayForTests(): void {\n invalidateReadGatewayCache()\n BaseArweaveClient.resetReadGatewaySelectionStateForTests()\n if (!BaseArweaveClient.isReadGatewayLocked()) {\n BaseArweaveClient.setPreferredReadGateway(DEFAULT_ARWEAVE_HOST)\n }\n}\n\n/**\n * GET /info with timeout. Treat 2xx + JSON object as healthy.\n */\nexport async function probeGateway(baseUrl: string, signal?: AbortSignal): Promise<boolean> {\n const url = `${baseUrl.replace(/\\/$/, '')}/info`\n let timer: ReturnType<typeof setTimeout> | undefined\n const controller = new AbortController()\n const effectiveSignal = signal ?? controller.signal\n if (!signal) {\n timer = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS)\n }\n try {\n const response = await fetch(url, {\n method: 'GET',\n signal: effectiveSignal,\n headers: { Accept: 'application/json' },\n })\n if (!response.ok) return false\n const text = await response.text()\n if (!text.trim()) return false\n try {\n const json = JSON.parse(text) as unknown\n return typeof json === 'object' && json !== null\n } catch {\n return false\n }\n } catch {\n return false\n } finally {\n if (timer) clearTimeout(timer)\n }\n}\n\nexport async function selectFirstHealthyReadGateway(\n hosts: string[],\n protocol: 'http' | 'https' = 'https',\n signal?: AbortSignal,\n): Promise<string | null> {\n for (const host of hosts) {\n const h = host.trim().replace(/\\/$/, '')\n if (!h) continue\n const baseUrl = `${protocol}://${h}`\n if (await probeGateway(baseUrl, signal)) {\n return h\n }\n }\n return null\n}\n\nfunction buildOrderedHostsForProbe(): string[] {\n return getArweaveReadGatewayHostsForPrimary(BaseArweaveClient.getHost())\n}\n\n/**\n * Probes gateways in order and applies the first healthy host via {@link BaseArweaveClient.applyProbedReadGateway}.\n * No-op when the read gateway is locked ({@link BaseArweaveClient.setHost}).\n * Uses a short TTL cache to avoid probing on every read.\n */\nexport async function ensureReadGatewaySelected(signal?: AbortSignal): Promise<string> {\n if (BaseArweaveClient.isReadGatewayLocked()) {\n return BaseArweaveClient.getHost()\n }\n\n const now = Date.now()\n if (readGatewayCache && now < readGatewayCache.expiresAt) {\n return readGatewayCache.host\n }\n\n if (ensureInFlight) {\n return ensureInFlight\n }\n\n ensureInFlight = (async () => {\n const ordered = buildOrderedHostsForProbe()\n const protocol = BaseArweaveClient.getProtocol()\n const picked = await selectFirstHealthyReadGateway(ordered, protocol, signal)\n\n if (!BaseArweaveClient.isReadGatewayLocked()) {\n if (picked) {\n BaseArweaveClient.applyProbedReadGateway(picked)\n }\n }\n\n readGatewayCache = {\n host: BaseArweaveClient.getHost(),\n expiresAt: Date.now() + READ_GATEWAY_CACHE_TTL_MS,\n }\n return readGatewayCache.host\n })()\n\n try {\n return await ensureInFlight\n } finally {\n ensureInFlight = null\n }\n}\n","import type { TransactionStatus } from '../types/arweave.js'\n\n/**\n * Trim and strip a trailing slash from an upload API base URL.\n */\nexport function normalizeUploadApiBaseUrl(baseUrl: string): string {\n return baseUrl.trim().replace(/\\/+$/, '')\n}\n\n/**\n * URL used to verify that an upload is available via the Seed upload API\n * (`GET` → HTTP 200 when present). Works for L1 transaction ids and ANS-104 data item ids.\n *\n * @param baseUrl - Upload API origin (e.g. from `ARWEAVE_UPLOAD_API_BASE_URL` / `uploadApiBaseUrl`)\n * @param txOrDataItemId - Arweave tx id or bundler data item id\n */\nexport function getUploadApiArweaveDataUrl(baseUrl: string, txOrDataItemId: string): string {\n const base = normalizeUploadApiBaseUrl(baseUrl)\n const id = encodeURIComponent(txOrDataItemId)\n return `${base}/api/upload/arweave/data/${id}`\n}\n\nconst DEFAULT_UPLOAD_STATUS_TIMEOUT_MS = 45_000\n\nexport type GetUploadPipelineTransactionStatusOptions = {\n /** Abort the request after this many ms (upload API hung / unreachable). Default 45s. */\n timeoutMs?: number\n}\n\n/**\n * Presence check against the upload API data route (same semantics as\n * {@link BaseArweaveClient.getTransactionStatus} for gateways: 200 = present, 404 = missing).\n */\nexport async function getUploadPipelineTransactionStatus(\n uploadApiBaseUrl: string,\n txOrDataItemId: string,\n options?: GetUploadPipelineTransactionStatusOptions,\n): Promise<TransactionStatus> {\n const url = getUploadApiArweaveDataUrl(uploadApiBaseUrl, txOrDataItemId)\n const timeoutMs = options?.timeoutMs ?? DEFAULT_UPLOAD_STATUS_TIMEOUT_MS\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const response = await fetch(url, { signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (response.status === 404) {\n return { status: 404, confirmed: null }\n }\n\n if (!response.ok) {\n return { status: response.status, confirmed: null }\n }\n\n if (response.body) {\n await response.body.cancel()\n }\n\n return { status: 200, confirmed: null }\n } catch (err) {\n clearTimeout(timeoutId)\n if (err instanceof Error && err.name === 'AbortError') {\n return { status: 504, confirmed: null }\n }\n return { status: 500, confirmed: null }\n }\n}\n","import {\n getDefaultArweaveReadGatewayHostsOrdered,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\nimport { normalizeUploadApiBaseUrl } from './uploadApiVerification.js'\nimport { probeGateway } from './selectReadGateway.js'\n\n/** Response shape from `GET /api/upload/arweave/status/{dataItemId}`. */\nexport interface ArweaveUploadStatusResponse {\n dataItemId?: string\n phase?: string\n bundleId?: string\n turboStatus?: string\n turboInfo?: string\n winc?: string\n turbo?: {\n status?: string\n bundleId?: string\n info?: string\n winc?: string\n }\n l1?: {\n checked?: boolean\n httpStatus?: number\n confirmed?: boolean\n numberOfConfirmations?: number\n minConfirmationsRequired?: number\n meetsMinConfirmations?: boolean\n }\n}\n\nexport interface ArweaveGatewayTransactionQueryResult {\n /** GraphQL `transaction.id` (often same as data item id for ANS-104 items). */\n transactionId: string | null\n /** L1 bundle transaction id when the item is indexed as bundled. */\n bundledInId: string | null\n blockHeight?: number | null\n blockTimestamp?: number | null\n}\n\nconst GATEWAY_TX_QUERY = `\n query ArweaveGatewayTransaction($id: String!) {\n transaction(id: $id) {\n id\n bundledIn {\n id\n }\n block {\n height\n timestamp\n }\n }\n }\n`\n\nexport function getUploadApiArweaveStatusUrl(baseUrl: string, dataItemId: string): string {\n const base = normalizeUploadApiBaseUrl(baseUrl)\n const id = encodeURIComponent(dataItemId)\n return `${base}/api/upload/arweave/status/${id}`\n}\n\n/**\n * Whether L1 anchoring is complete per upload API status JSON.\n */\nexport function isArweaveL1AnchoringComplete(status: ArweaveUploadStatusResponse): boolean {\n const l1 = status.l1\n if (!l1) return false\n if (l1.meetsMinConfirmations === true) return true\n if (l1.confirmed === true) return true\n return false\n}\n\n/**\n * Fetches JSON from `GET /api/upload/arweave/status/{dataItemId}`.\n * Returns `null` if the response is not OK or body is not JSON.\n */\nexport async function getArweaveUploadStatus(\n uploadApiBaseUrl: string,\n dataItemId: string,\n): Promise<ArweaveUploadStatusResponse | null> {\n const url = getUploadApiArweaveStatusUrl(uploadApiBaseUrl, dataItemId)\n try {\n const response = await fetch(url)\n if (!response.ok) {\n return null\n }\n const body = (await response.json()) as ArweaveUploadStatusResponse\n return body && typeof body === 'object' ? body : null\n } catch {\n return null\n }\n}\n\n/**\n * Queries an Arweave gateway GraphQL API for transaction + bundle info.\n */\nexport async function queryArweaveGatewayTransaction(\n graphqlUrl: string,\n dataItemId: string,\n init?: Pick<RequestInit, 'signal'>,\n): Promise<ArweaveGatewayTransactionQueryResult | null> {\n const url = graphqlUrl.trim()\n if (!url) return null\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: GATEWAY_TX_QUERY,\n variables: { id: dataItemId },\n }),\n signal: init?.signal,\n })\n\n if (!response.ok) {\n return null\n }\n\n const json = (await response.json()) as {\n data?: {\n transaction?: {\n id?: string\n bundledIn?: { id?: string } | null\n block?: { height?: number; timestamp?: number } | null\n } | null\n }\n errors?: unknown\n }\n\n if (json.errors) {\n return null\n }\n\n const tx = json.data?.transaction\n if (!tx) {\n return {\n transactionId: null,\n bundledInId: null,\n blockHeight: null,\n blockTimestamp: null,\n }\n }\n\n return {\n transactionId: typeof tx.id === 'string' ? tx.id : null,\n bundledInId: tx.bundledIn?.id != null ? String(tx.bundledIn.id) : null,\n blockHeight: tx.block?.height ?? null,\n blockTimestamp: tx.block?.timestamp ?? null,\n }\n } catch {\n return null\n }\n}\n\n/**\n * Resolves GraphQL against the first healthy gateway (GET /info probe per host), then runs\n * {@link queryArweaveGatewayTransaction}. Host order: optional `graphqlUrl` hostname first, then\n * {@link getDefaultArweaveReadGatewayHostsOrdered}.\n */\nexport async function queryArweaveGatewayTransactionWithFallback(\n graphqlUrl: string | undefined,\n dataItemId: string,\n init?: Pick<RequestInit, 'signal'>,\n): Promise<ArweaveGatewayTransactionQueryResult | null> {\n const defaults = getDefaultArweaveReadGatewayHostsOrdered()\n const trimmed = graphqlUrl?.trim()\n let protocol: 'http' | 'https' = 'https'\n let preferredHost: string | null = null\n if (trimmed) {\n try {\n const u = new URL(trimmed)\n protocol = u.protocol === 'http:' ? 'http' : 'https'\n preferredHost = u.hostname || null\n } catch {\n preferredHost = null\n }\n }\n\n const ordered =\n preferredHost && preferredHost.length > 0\n ? getArweaveReadGatewayHostsForPrimary(preferredHost)\n : [...defaults]\n\n const signal = init?.signal\n for (const host of ordered) {\n const base = `${protocol}://${host}`\n if (!(await probeGateway(base, signal ?? undefined))) continue\n const gqlUrl = `${protocol}://${host}/graphql`\n const result = await queryArweaveGatewayTransaction(gqlUrl, dataItemId, init)\n if (result !== null) {\n return result\n }\n }\n return null\n}\n","import type { ResolvedSeedGatewayEndpoints } from '../types/gateway.js'\n\nlet resolvedGatewayEndpoints: ResolvedSeedGatewayEndpoints | null = null\n\n/** Last endpoints applied during client init (for read-path helpers). */\nexport function getResolvedSeedGatewayEndpoints(): ResolvedSeedGatewayEndpoints | null {\n return resolvedGatewayEndpoints\n}\n\nexport function setResolvedSeedGatewayEndpoints(\n value: ResolvedSeedGatewayEndpoints | null,\n): void {\n resolvedGatewayEndpoints = value\n}\n","import { probeGateway } from '../ArweaveClient/selectReadGateway.js'\nimport {\n DEFAULT_ARWEAVE_HOST,\n DEFAULT_GATEWAY_SIDECAR_HOST,\n DEFAULT_GATEWAY_SIDECAR_PORT,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\nimport type {\n ResolvedSeedGatewayEndpoints,\n SeedGatewayConfig,\n SeedGatewayTransportMode,\n} from '../types/gateway.js'\n\nconst PROBE_TTL_MS = 3 * 60 * 1000\n\nlet sidecarProbeCache: { healthy: boolean; expiresAt: number } | null = null\nconst proxyProbeCache = new Map<string, { healthy: boolean; expiresAt: number }>()\n\n/** Clears cached sidecar / proxy probes (tests / forced re-probe). */\nexport function invalidateSidecarProbeCache(): void {\n sidecarProbeCache = null\n proxyProbeCache.clear()\n}\n\nfunction parseGatewayHost(input: string | undefined): { host: string; protocol: 'http' | 'https' } {\n const raw = (input ?? DEFAULT_ARWEAVE_HOST).trim()\n if (raw.startsWith('http://')) {\n return { protocol: 'http', host: raw.slice(7).replace(/\\/$/, '') }\n }\n if (raw.startsWith('https://')) {\n return { protocol: 'https', host: raw.slice(8).replace(/\\/$/, '') }\n }\n return { protocol: 'https', host: raw.replace(/\\/$/, '') }\n}\n\nfunction sidecarOrigin(config: SeedGatewayConfig): {\n host: string\n port: number\n baseUrl: string\n} {\n const host = config.hyper?.localSidecarHost?.trim() || DEFAULT_GATEWAY_SIDECAR_HOST\n const port = config.hyper?.localSidecarPort ?? DEFAULT_GATEWAY_SIDECAR_PORT\n const hostWithPort = port === 80 || port === 443 ? host : `${host}:${port}`\n return {\n host: hostWithPort,\n port,\n baseUrl: `http://${host}:${port}`,\n }\n}\n\nfunction browserOrigin(): string | undefined {\n try {\n const g = globalThis as { window?: { location?: { origin?: string } } }\n const origin = g.window?.location?.origin\n return typeof origin === 'string' && origin.length > 0 ? origin.replace(/\\/$/, '') : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Resolve `proxyBaseUrl` to an absolute origin+path (no trailing slash).\n * Relative paths require a browser `window.location.origin` or {@link ResolveSeedGatewayEndpointsOptions.origin}.\n */\nexport function resolveProxyBaseUrl(\n proxyBaseUrl: string,\n options?: { origin?: string },\n): string {\n const raw = proxyBaseUrl.trim()\n if (!raw) {\n throw new Error('proxyBaseUrl is empty')\n }\n if (raw.startsWith('http://') || raw.startsWith('https://')) {\n return raw.replace(/\\/$/, '')\n }\n if (raw.startsWith('/')) {\n const origin = (options?.origin?.trim() || browserOrigin() || '').replace(/\\/$/, '')\n if (!origin) {\n throw new Error(\n `Relative proxyBaseUrl \"${proxyBaseUrl}\" requires a browser origin or resolve options.origin`,\n )\n }\n return `${origin}${raw.replace(/\\/$/, '')}`\n }\n return `https://${raw.replace(/\\/$/, '')}`\n}\n\nasync function probeUrlHealthy(\n baseUrl: string,\n cacheKey: 'sidecar' | string,\n signal?: AbortSignal,\n): Promise<boolean> {\n const now = Date.now()\n if (cacheKey === 'sidecar') {\n if (sidecarProbeCache && now < sidecarProbeCache.expiresAt) {\n return sidecarProbeCache.healthy\n }\n const healthy = await probeGateway(baseUrl, signal)\n sidecarProbeCache = { healthy, expiresAt: now + PROBE_TTL_MS }\n return healthy\n }\n\n const cached = proxyProbeCache.get(cacheKey)\n if (cached && now < cached.expiresAt) {\n return cached.healthy\n }\n const healthy = await probeGateway(baseUrl, signal)\n proxyProbeCache.set(cacheKey, { healthy, expiresAt: now + PROBE_TTL_MS })\n return healthy\n}\n\nfunction buildHttpEndpoints(config: SeedGatewayConfig): ResolvedSeedGatewayEndpoints {\n const { host, protocol } = parseGatewayHost(config.arweaveDomain)\n const baseUrl = `${protocol}://${host}`\n const uploadApiBaseUrl = config.uploadApiBaseUrl?.trim() || baseUrl\n return {\n mode: config.transport ?? 'http-gateway',\n arweaveHost: host,\n arweaveProtocol: protocol,\n arweaveBaseUrl: baseUrl,\n arweaveGraphqlUrl: `${protocol}://${host}/graphql`,\n uploadApiBaseUrl,\n activePath: 'http',\n gatewayHyperKey: config.hyper?.gatewayHyperKey?.trim() || undefined,\n }\n}\n\nfunction buildHyperEndpoints(config: SeedGatewayConfig): ResolvedSeedGatewayEndpoints {\n const sidecar = sidecarOrigin(config)\n const key = config.hyper?.gatewayHyperKey?.trim()\n return {\n mode: 'hyper',\n arweaveHost: sidecar.host,\n arweaveProtocol: 'http',\n arweaveBaseUrl: sidecar.baseUrl,\n arweaveGraphqlUrl: `${sidecar.baseUrl}/graphql`,\n uploadApiBaseUrl: sidecar.baseUrl,\n activePath: 'hyper-sidecar',\n gatewayHyperKey: key || undefined,\n }\n}\n\nfunction buildProxyEndpoints(\n config: SeedGatewayConfig,\n absoluteProxyBaseUrl: string,\n): ResolvedSeedGatewayEndpoints {\n const parsed = new URL(absoluteProxyBaseUrl)\n const protocol: 'http' | 'https' = parsed.protocol === 'http:' ? 'http' : 'https'\n const path = parsed.pathname.replace(/\\/$/, '')\n const hostWithPath = path ? `${parsed.host}${path}` : parsed.host\n const baseUrl = `${protocol}://${hostWithPath}`\n return {\n mode: config.transport ?? 'http-gateway',\n arweaveHost: hostWithPath,\n arweaveProtocol: protocol,\n arweaveBaseUrl: baseUrl,\n arweaveGraphqlUrl: `${baseUrl}/graphql`,\n uploadApiBaseUrl: baseUrl,\n activePath: 'http-proxy',\n gatewayHyperKey: config.hyper?.gatewayHyperKey?.trim() || undefined,\n proxyBaseUrl: absoluteProxyBaseUrl,\n }\n}\n\nexport type ResolveSeedGatewayEndpointsOptions = {\n signal?: AbortSignal\n /** Skip cache and probe sidecar / proxy again. */\n forceSidecarProbe?: boolean\n /**\n * Origin used to resolve relative `proxyBaseUrl` (e.g. `https://app.example.com`).\n * Defaults to `window.location.origin` in browsers.\n */\n origin?: string\n}\n\nasync function tryProxyEndpoints(\n config: SeedGatewayConfig,\n options?: ResolveSeedGatewayEndpointsOptions,\n): Promise<ResolvedSeedGatewayEndpoints | null> {\n const raw = config.proxyBaseUrl?.trim()\n if (!raw) return null\n\n const absolute = resolveProxyBaseUrl(raw, { origin: options?.origin })\n const shouldProbe = config.hyper?.probeSidecar !== false\n if (shouldProbe) {\n const ok = await probeUrlHealthy(absolute, `proxy:${absolute}`, options?.signal)\n if (!ok) return null\n }\n return buildProxyEndpoints(config, absolute)\n}\n\n/**\n * Resolve effective gateway + upload API URLs for the configured transport mode.\n *\n * Preference when a proxy and/or sidecar may apply:\n * configured + healthy `proxyBaseUrl` → local Hyper sidecar → public HTTP gateway.\n */\nexport async function resolveSeedGatewayEndpoints(\n config: SeedGatewayConfig,\n options?: ResolveSeedGatewayEndpointsOptions,\n): Promise<ResolvedSeedGatewayEndpoints> {\n if (options?.forceSidecarProbe) {\n invalidateSidecarProbeCache()\n }\n\n const mode: SeedGatewayTransportMode = config.transport ?? 'http-gateway'\n const shouldProbe = config.hyper?.probeSidecar !== false\n\n if (mode === 'http-gateway') {\n if (config.proxyBaseUrl?.trim()) {\n const absolute = resolveProxyBaseUrl(config.proxyBaseUrl, { origin: options?.origin })\n if (shouldProbe) {\n const ok = await probeUrlHealthy(absolute, `proxy:${absolute}`, options?.signal)\n if (!ok) {\n throw new Error(\n `Gateway HTTP proxy not reachable at ${absolute}. ` +\n 'Ensure your Node route runs createGatewayProxy (or equivalent) and mounts at proxyBaseUrl.',\n )\n }\n }\n return buildProxyEndpoints({ ...config, transport: mode }, absolute)\n }\n return buildHttpEndpoints({ ...config, transport: mode })\n }\n\n if (mode === 'hyper') {\n const proxy = await tryProxyEndpoints({ ...config, transport: mode }, options)\n if (proxy) return proxy\n\n const hyperEndpoints = buildHyperEndpoints({ ...config, transport: mode })\n if (shouldProbe) {\n const ok = await probeUrlHealthy(hyperEndpoints.arweaveBaseUrl, 'sidecar', options?.signal)\n if (!ok) {\n throw new Error(\n `Gateway Hyper sidecar not reachable at ${hyperEndpoints.arweaveBaseUrl}. ` +\n 'Run: seed gateway tunnel connect <operator-z32-key> — or configure gateway.proxyBaseUrl for an app-server proxy.',\n )\n }\n }\n return hyperEndpoints\n }\n\n // hybrid: proxy → sidecar → public HTTP\n const proxy = await tryProxyEndpoints({ ...config, transport: mode }, options)\n if (proxy) return proxy\n\n const sidecar = sidecarOrigin(config)\n if (shouldProbe && (await probeUrlHealthy(sidecar.baseUrl, 'sidecar', options?.signal))) {\n return buildHyperEndpoints({ ...config, transport: 'hyper' })\n }\n\n const http = buildHttpEndpoints({ ...config, transport: 'http-gateway' })\n return {\n ...http,\n mode: 'hybrid',\n activePath: 'hybrid-fallback-http',\n }\n}\n\n/** Build ordered gateway host list for read fallback (sidecar/proxy first when active). */\nexport function getReadGatewayHostsForConfig(\n resolved: ResolvedSeedGatewayEndpoints,\n _defaults?: readonly string[],\n): string[] {\n if (resolved.activePath === 'hyper-sidecar' || resolved.activePath === 'http-proxy') {\n return [resolved.arweaveHost]\n }\n return getArweaveReadGatewayHostsForPrimary(resolved.arweaveHost)\n}\n","import type {\n ClientGatewayContextInput,\n SeedConfigGatewayInput,\n SeedGatewayConfig,\n} from '../types/seedConfig.js'\nimport { DEFAULT_SEED_GATEWAY_HYPER_KEY } from '../constants.js'\n\n/** Merge seed.config gateway fields into {@link SeedGatewayConfig}. */\nexport function seedGatewayConfigFromSeedConfig(\n config: SeedConfigGatewayInput,\n): SeedGatewayConfig {\n const gateway = config.gateway ?? {}\n return {\n transport: gateway.transport,\n arweaveDomain: config.arweaveDomain ?? gateway.arweaveDomain,\n uploadApiBaseUrl: config.uploadApiBaseUrl ?? gateway.uploadApiBaseUrl,\n proxyBaseUrl: gateway.proxyBaseUrl?.trim() || undefined,\n hyper: {\n gatewayHyperKey:\n gateway.hyper?.gatewayHyperKey?.trim() ||\n gateway.gatewayHyperKey?.trim() ||\n DEFAULT_SEED_GATEWAY_HYPER_KEY ||\n undefined,\n localSidecarHost: gateway.hyper?.localSidecarHost ?? gateway.localSidecarHost,\n localSidecarPort: gateway.hyper?.localSidecarPort ?? gateway.localSidecarPort,\n probeSidecar: gateway.hyper?.probeSidecar ?? gateway.probeSidecar,\n },\n }\n}\n\nexport function seedGatewayConfigFromClientContext(\n context: ClientGatewayContextInput,\n): SeedGatewayConfig {\n return {\n transport: context.gatewayTransport,\n arweaveDomain: context.arweaveDomain,\n uploadApiBaseUrl: context.uploadApiBaseUrl,\n proxyBaseUrl: context.gatewayProxyBaseUrl?.trim() || undefined,\n hyper: {\n gatewayHyperKey:\n context.gatewayHyperKey?.trim() || DEFAULT_SEED_GATEWAY_HYPER_KEY || undefined,\n localSidecarHost: context.gatewaySidecarHost,\n localSidecarPort: context.gatewaySidecarPort,\n },\n }\n}\n"],"mappings":";;AAAA,IAAM,KAAgC;AAKtC,SAAgB,EAA4B,GAAsB;CAChE,IAAM,IAAU,EAAI,KAAK;CACzB,IAAI,CAAC,GAAS,OAAO;CACrB,IAAI;EACF,IAAM,IAAS,IAAI,IAAI,CAAO;EAI9B,OAHK,GAA8B,KAAK,EAAO,QAAQ,IAGhD,yBAAyB,KAAK,EAAO,QAAQ,IAF3C;CAGX,QAAQ;EACN,OAAO;CACT;AACF;;;AChBA,SAAS,EAAkB,GAA0D;CACnF,IAAM,IAAK;EAAE,SAAS,KAAA;EAAiC,KAAK,KAAA;CAAgC;CAQ5F,OAPK,KACD,EAAa,WAAW,OAC1B,EAAG,UAAU,IAEX,EAAa,WAAW,IAAI,KAAK,EAAa,WAAW,OAC3D,EAAG,MAAM,IAEJ,KAPmB;AAQ5B;AAEA,SAAgB,EAA+B,GAAoC;CAC7E,SAAS,MACb;MAAI,OAAO,KAAU,UAAU;GAC7B,IAAM,IAAI,EAAM,KAAK;GACrB,OAAO,MAAM,KAAS,KAAA,IAAJ;EACpB;EACA,IAAI,OAAO,KAAU,YAAY,GAAgB;GAC/C,IAAM,IAAI;GACV,IAAI,OAAO,EAAE,eAAgB,YAAY,EAAE,YAAY,KAAK,MAAM,IAChE,OAAO,EAAE,YAAY,KAAK;GAE5B,IAAI,OAAO,EAAE,WAAY,YAAY,EAAE,QAAQ,KAAK,MAAM,IACxD,OAAO,EAAE,QAAQ,KAAK;EAE1B;CATA;AAWF;AAEA,IAAM,KAAiB;AAEvB,SAAgB,EAA4B,GAG1C;CACA,IAAM,IAAc,EAAkB,CAAC;CAOvC,OANI,EAAY,WAAW,EAAY,MAC9B;EAAE,aAAa,EAAY;EAAS,SAAS,EAAY;CAAI,IAElE,GAAe,KAAK,CAAC,KAAK,CAAC,EAAE,WAAW,IAAI,IACvC,EAAE,aAAa,EAAE,IAEnB,CAAC;AACV;;;ACLA,IAAM,KAAgB;AAEtB,SAAS,GAAY,GAAwC;CAE3D,OADI,KAAO,OAAa,KACjB,OAAO,KAAQ,WAAW,EAAI,KAAK,IAAI,OAAO,CAAG,CAAC,CAAC,KAAK;AACjE;AAEA,SAAS,EAAoB,GAA+B,GAAqB;CAC/E,IAAM,IAAI,EAAK;CAIf,OAHI,KAAK,OAAa,KAClB,OAAO,KAAM,WAAiB,EAAE,KAAK,IACrC,OAAO,KAAM,YAAY,OAAO,KAAM,YAAkB,OAAO,CAAC,IAC7D;AACT;AAEA,SAAS,EAAqB,GAAqB;CACjD,IAAM,IAAI,EAAI,KAAK;CACnB,IAAI,CAAC,GAAG,OAAO;CACf,IAAI;EAEF,IAAM,IAAU,EADD,KAAK,MAAM,CACqB,CAAM;EACrD,IAAI,GAAS,OAAO;CACtB,QAAQ,CAER;CACA,OAAO;AACT;AAEA,SAAgB,EACd,GACA,GACwB;CACxB,IAAM,IAAI,GAAY,CAAG;CACzB,IAAI,CAAC,GACH,OAAO,EAAE,MAAM,QAAQ;CAGzB,IAAM,IAAU,GAAS;CACzB,IAAI,MAAY,OACd,OAAO;EAAE,MAAM;EAAO,MAAM;CAAE;CAEhC,IAAI,MAAY,aACd,OAAO;EAAE,MAAM;EAAe,MAAM;CAAE;CAExC,IAAI,MAAY,WAId,OAHI,EAAE,WAAW,IAAI,KAAK,EAAE,WAAW,KAC9B;EAAE,MAAM;EAAW,KAAK;CAAE,IAE5B;EAAE,MAAM;EAAW,KAAK;CAAE;CAGnC,IACE,EAAE,WAAW,SAAS,KACtB,EAAE,WAAW,UAAU,KACvB,EAAE,WAAW,OAAO,KACpB,EAAE,WAAW,OAAO,GAKpB,OAHI,EAA4B,CAAC,IACxB;EAAE,MAAM;EAAe,MAAM;CAAE,IAEjC;EAAE,MAAM;EAAO,MAAM;CAAE;CAGhC,IAAM,IAAY,EAAqB,CAAC,GAClC,IAAM,EAA4B,CAAS;CAgBjD,OAfI,EAAI,UACC;EAAE,MAAM;EAAW,KAAK,EAAI;CAAQ,IAEzC,EAAI,cACC;EAAE,MAAM;EAAe,SAAS,EAAI;CAAY,IAGrD,EAAU,WAAW,IAAI,KAAK,EAAU,WAAW,KAC9C;EAAE,MAAM;EAAW,KAAK;CAAU,IAGvC,GAAc,KAAK,CAAS,KAAK,CAAC,EAAU,WAAW,IAAI,IACtD;EAAE,MAAM;EAAe,MAAM;CAAU,IAGzC;EAAE,MAAM;EAAW,KAAK;CAAE;AACnC;AAuBA,SAAgB,EAAuB,GAA+B,GAAqB;CACzF,IAAM,IAAS,EAAoB,GAAM,CAAG;CAC5C,IAAI,GAAQ,OAAO;CACnB,IAAM,IAAQ,EAAI,QAAQ,WAAW,MAAM,IAAI,EAAE,YAAY,GAAG;CAChE,IAAI,MAAU,GAAK;EACjB,IAAM,IAAM,EAAoB,GAAM,CAAK;EAC3C,IAAI,GAAK,OAAO;CAClB;CACA,IAAM,IAAQ,EAAI,MAAM,GAAG;CAC3B,IAAI,EAAM,SAAS,GAAG;EAGpB,IAAM,IAAO,EAAoB,GAD/B,EAAM,KAAK,EAAM,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAC1C;EAC5C,IAAI,GAAM,OAAO;CACnB;CACA,OAAO;AACT;AAEA,SAAgB,GACd,GACA,GACsD;CACtD,IAAM,IAA4D,CAAC;CACnE,KAAK,IAAM,CAAC,GAAU,MAAe,OAAO,QAAQ,CAAQ,GAAG;EAC7D,IAAM,IAAM,EAAuB,GAAM,CAAQ;EACjD,IAAI,CAAC,GAAK;GACR,EAAI,KAAY,KAAA;GAChB;EACF;EACA,IAAI,EAAW,SAAS,QAAQ;GAC9B,EAAI,KAAY;IAAE,MAAM;IAAQ;GAAI;GACpC;EACF;EACA,IAAI,EAAW,SAAS,QAAQ;GAC9B,EAAI,KAAY;IAAE,MAAM;IAAQ;GAAI;GACpC;EACF;EACA,IAAM,IAAiB,EAAiB,GAAK,EAAE,SAAS,EAAW,QAAQ,CAAC;EAC5E,EAAI,KAAY;GACd,MAAM,EAAW;GACjB;GACA;EACF;CACF;CACA,OAAO;AACT;AAEA,SAAgB,GAA4B,GAA+B;CACzE,OAAO,GAAG,EAAkB,WAAW,EAAE,GAAG;AAC9C;;;ACrLA,IAAa,IAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAAS,EAAY,GAAwB;CAI3C,OAHI,KAAS,OAAa,KACtB,OAAO,KAAU,WAAiB,EAAM,KAAK,IAC7C,OAAO,KAAU,YAAY,OAAO,KAAU,YAAkB,OAAO,CAAK,IACzE;AACT;AAEA,SAAS,EAAsB,GAA8B,GAAG,GAAwB;CACtF,KAAK,IAAM,KAAO,GAAM;EACtB,IAAM,IAAS,EAAY,EAAI,EAAI;EACnC,IAAI,GAAQ,OAAO;CACrB;CAEA,IAAM,IAAW,EAAK,KAAK,MAAQ,EAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAE,YAAY,CAAC;CACtE,KAAK,IAAM,CAAC,GAAQ,MAAa,OAAO,QAAQ,CAAG,GAAG;EAEpD,IAAM,KADgB,EAAO,SAAS,GAAG,IAAI,EAAO,MAAM,GAAG,CAAC,CAAC,IAAI,IAAK,EAAA,CAClC,YAAY;EAClD,IAAI,EAAS,MAAM,MAAW,MAAoB,EAAO,YAAY,CAAC,GAAG;GACvE,IAAM,IAAQ,EAAY,CAAQ;GAClC,IAAI,GAAO,OAAO;EACpB;CACF;CAEA,OAAO;AACT;AAEA,SAAS,EAAqB,GAAkC;CAC9D,IAAM,IAAU,EAAK,KAAK;CACtB,IAAC,KAAW,GAAQ,WAAW,IAAI,GACvC,IAAI;EACF,OAAO,GAAG,EAAkB,WAAW,EAAE,GAAG;CAC9C,QAAQ;EACN;CACF;AACF;AAEA,SAAS,EAAyB,GAGX;CACrB,IAAM,IAAO,EAAM,sBAAsB,KAAK;CAC9C,IAAI,GAAM;EACR,IAAM,IAAS,EAAqB,CAAI;EACxC,IAAI,GAAQ,OAAO;CACrB;CAEA,IAAM,IAAa,EAAM,YAAY,KAAK;CAC1C,IAAI,KAAc,CAAC,EAA4B,CAAU,GACvD,OAAO;AAIX;AAEA,SAAS,GAAkB,GAAoD;CAC7E,IAAM,IAAU,EAAM,KAAK;CAG3B,IAFI,CAAC,KAED,EAA4B,CAAO,GACrC;CAGF,IAAM,IAAiB,EAAiB,CAAO;CAC/C,QAAQ,EAAe,MAAvB;EACE,KAAK,OACH,OAAO,EAAE,UAAU,EAAe,KAAK;EACzC,KAAK,eAAe;GAClB,IAAM,IAAW,EAAqB,EAAe,IAAI;GACzD,OAAO;IACL,sBAAsB,EAAe;IACrC,GAAI,IAAW,EAAE,YAAS,IAAI,CAAC;GACjC;EACF;EACA,KAAK,WACH,OAAO,EAAE,SAAS,EAAe,IAAI;EACvC,SAAS;GACP,IAAM,IAAW,EAAqB,CAAO;GAO7C,OANI,IACK;IACL,sBAAsB;IACtB;GACF,IAEF;EACF;CACF;AACF;AAEA,SAAS,GAAkB,GAAmE;CAC5F,IAAM,IAAuB,EAC3B,GACA,wBACA,wBACF,GACM,IAAa,EAAsB,GAAK,cAAc,aAAa,GACnE,IAAU,EAAsB,GAAK,WAAW,WAAW,UAAU,GACrE,IAAO,EAAsB,GAAK,QAAQ,MAAM,GAEhD,IACJ,EAAyB;EAAE;EAAsB;CAAW,CAAC,MAC5D,KAAQ,CAAC,EAA4B,CAAI,IAAI,IAAO,KAAA;CAEnD,IAAC,KAAyB,KAAe,KAAY,GAIzD,OAAO;EACL,GAAI,IAAuB,EAAE,wBAAqB,IAAI,CAAC;EACvD,GAAI,KAAc,CAAC,EAA4B,CAAU,IAAI,EAAE,cAAW,IAAI,CAAC;EAC/E,GAAI,IAAU,EAAE,WAAQ,IAAI,CAAC;EAC7B,GAAI,IAAW,EAAE,YAAS,IAAI,CAAC;CACjC;AACF;AAOA,SAAgB,EAA+B,GAAqD;CAC9F,SAAS,MAEb;MAAI,OAAO,KAAU,UACnB,OAAO,GAAkB,CAAK;EAGhC,IAAI,MAAM,QAAQ,CAAK,GAAG;GACxB,KAAK,IAAM,KAAS,GAAO;IACzB,IAAM,IAAW,EAA+B,CAAK;IACrD,IAAI,GAAU,YAAY,GAAU,wBAAwB,GAAU,SACpE,OAAO;GAEX;GACA;EACF;EAEA,IAAI,OAAO,KAAU,UACnB,OAAO,GAAkB,CAAgC;CAd3B;AAkBlC;AAKA,SAAgB,GACd,GACA,IAA+B,GACM;CACrC,KAAK,IAAM,KAAO,GAAW;EAC3B,IAAI,EAAE,KAAO,IAAO;EACpB,IAAM,IAAW,EAA+B,EAAK,EAAI;EACzD,IAAI,GAAU,OAAO;CACvB;AAEF;;;AC9KA,IAAM,KAA4B,MAC5B,KAAmB,KAErB,IAA+D,MAC/D,IAAyC;AAG7C,SAAgB,IAAmC;CAEjD,AADA,IAAmB,MACnB,IAAiB;AACnB;AAGA,SAAgB,KAAwC;CAGtD,AAFA,EAA2B,GAC3B,EAAkB,uCAAuC,GACpD,EAAkB,oBAAoB,KACzC,EAAkB,wBAAwB,CAAoB;AAElE;AAKA,eAAsB,EAAa,GAAiB,GAAwC;CAC1F,IAAM,IAAM,GAAG,EAAQ,QAAQ,OAAO,EAAE,EAAE,QACtC,GACE,IAAa,IAAI,gBAAgB,GACjC,IAAkB,KAAU,EAAW;CAC7C,AAAK,MACH,IAAQ,iBAAiB,EAAW,MAAM,GAAG,EAAgB;CAE/D,IAAI;EACF,IAAM,IAAW,MAAM,MAAM,GAAK;GAChC,QAAQ;GACR,QAAQ;GACR,SAAS,EAAE,QAAQ,mBAAmB;EACxC,CAAC;EACD,IAAI,CAAC,EAAS,IAAI,OAAO;EACzB,IAAM,IAAO,MAAM,EAAS,KAAK;EACjC,IAAI,CAAC,EAAK,KAAK,GAAG,OAAO;EACzB,IAAI;GACF,IAAM,IAAO,KAAK,MAAM,CAAI;GAC5B,OAAO,OAAO,KAAS,cAAY;EACrC,QAAQ;GACN,OAAO;EACT;CACF,QAAQ;EACN,OAAO;CACT,UAAU;EACR,AAAI,KAAO,aAAa,CAAK;CAC/B;AACF;AAEA,eAAsB,EACpB,GACA,IAA6B,SAC7B,GACwB;CACxB,KAAK,IAAM,KAAQ,GAAO;EACxB,IAAM,IAAI,EAAK,KAAK,CAAC,CAAC,QAAQ,OAAO,EAAE;EAClC,SAED,MAAM,EAAa,GADJ,EAAS,KAAK,KACD,CAAM,GACpC,OAAO;CAEX;CACA,OAAO;AACT;AAEA,SAAS,IAAsC;CAC7C,OAAO,EAAqC,EAAkB,QAAQ,CAAC;AACzE;AAOA,eAAsB,EAA0B,GAAuC;CACrF,IAAI,EAAkB,oBAAoB,GACxC,OAAO,EAAkB,QAAQ;CAInC,IAAI,KADQ,KAAK,IACO,IAAM,EAAiB,WAC7C,OAAO,EAAiB;CAG1B,IAAI,GACF,OAAO;CAGT,KAAkB,YAAY;EAG5B,IAAM,IAAS,MAAM,EAFL,EAEmC,GADlC,EAAkB,YACyB,GAAU,CAAM;EAY5E,OAVK,EAAkB,oBAAoB,KACrC,KACF,EAAkB,uBAAuB,CAAM,GAInD,IAAmB;GACjB,MAAM,EAAkB,QAAQ;GAChC,WAAW,KAAK,IAAI,IAAI;EAC1B,GACO,EAAiB;CAC1B,EAAA,CAAG;CAEH,IAAI;EACF,OAAO,MAAM;CACf,UAAU;EACR,IAAiB;CACnB;AACF;;;ACrHA,SAAgB,EAA0B,GAAyB;CACjE,OAAO,EAAQ,KAAK,CAAC,CAAC,QAAQ,QAAQ,EAAE;AAC1C;AASA,SAAgB,EAA2B,GAAiB,GAAgC;CAG1F,OAAO,GAFM,EAA0B,CAE7B,EAAK,2BADJ,mBAAmB,CACY;AAC5C;AAEA,IAAM,IAAmC;AAWzC,eAAsB,EACpB,GACA,GACA,GAC4B;CAC5B,IAAM,IAAM,EAA2B,GAAkB,CAAc,GACjE,IAAY,GAAS,aAAa,GAClC,IAAa,IAAI,gBAAgB,GACjC,IAAY,iBAAiB,EAAW,MAAM,GAAG,CAAS;CAEhE,IAAI;EACF,IAAM,IAAW,MAAM,MAAM,GAAK,EAAE,QAAQ,EAAW,OAAO,CAAC;EAe/D,OAdA,aAAa,CAAS,GAElB,EAAS,WAAW,MACf;GAAE,QAAQ;GAAK,WAAW;EAAK,IAGnC,EAAS,MAIV,EAAS,QACX,MAAM,EAAS,KAAK,OAAO,GAGtB;GAAE,QAAQ;GAAK,WAAW;EAAK,KAP7B;GAAE,QAAQ,EAAS;GAAQ,WAAW;EAAK;CAQtD,SAAS,GAAK;EAKZ,OAJA,aAAa,CAAS,GAClB,aAAe,SAAS,EAAI,SAAS,eAChC;GAAE,QAAQ;GAAK,WAAW;EAAK,IAEjC;GAAE,QAAQ;GAAK,WAAW;EAAK;CACxC;AACF;;;AC3BA,IAAM,IAAmB;AAezB,SAAgB,EAA6B,GAAiB,GAA4B;CAGxF,OAAO,GAFM,EAA0B,CAE7B,EAAK,6BADJ,mBAAmB,CACc;AAC9C;AAKA,SAAgB,GAA6B,GAA8C;CACzF,IAAM,IAAK,EAAO;CAIlB,OAHK,IACD,EAAG,0BAA0B,MAC7B,EAAG,cAAc,KAFL;AAIlB;AAMA,eAAsB,GACpB,GACA,GAC6C;CAC7C,IAAM,IAAM,EAA6B,GAAkB,CAAU;CACrE,IAAI;EACF,IAAM,IAAW,MAAM,MAAM,CAAG;EAChC,IAAI,CAAC,EAAS,IACZ,OAAO;EAET,IAAM,IAAQ,MAAM,EAAS,KAAK;EAClC,OAAO,KAAQ,OAAO,KAAS,WAAW,IAAO;CACnD,QAAQ;EACN,OAAO;CACT;AACF;AAKA,eAAsB,EACpB,GACA,GACA,GACsD;CACtD,IAAM,IAAM,EAAW,KAAK;CAC5B,IAAI,CAAC,GAAK,OAAO;CAEjB,IAAI;EACF,IAAM,IAAW,MAAM,MAAM,GAAK;GAChC,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IACnB,OAAO;IACP,WAAW,EAAE,IAAI,EAAW;GAC9B,CAAC;GACD,QAAQ,GAAM;EAChB,CAAC;EAED,IAAI,CAAC,EAAS,IACZ,OAAO;EAGT,IAAM,IAAQ,MAAM,EAAS,KAAK;EAWlC,IAAI,EAAK,QACP,OAAO;EAGT,IAAM,IAAK,EAAK,MAAM;EAUtB,OATK,IASE;GACL,eAAe,OAAO,EAAG,MAAO,WAAW,EAAG,KAAK;GACnD,aAAa,EAAG,WAAW,MAAM,OAAiC,OAA1B,OAAO,EAAG,UAAU,EAAE;GAC9D,aAAa,EAAG,OAAO,UAAU;GACjC,gBAAgB,EAAG,OAAO,aAAa;EACzC,IAbS;GACL,eAAe;GACf,aAAa;GACb,aAAa;GACb,gBAAgB;EAClB;CASJ,QAAQ;EACN,OAAO;CACT;AACF;AAOA,eAAsB,GACpB,GACA,GACA,GACsD;CACtD,IAAM,IAAW,EAAyC,GACpD,IAAU,GAAY,KAAK,GAC7B,IAA6B,SAC7B,IAA+B;CACnC,IAAI,GACF,IAAI;EACF,IAAM,IAAI,IAAI,IAAI,CAAO;EAEzB,AADA,IAAW,EAAE,aAAa,UAAU,SAAS,SAC7C,IAAgB,EAAE,YAAY;CAChC,QAAQ;EACN,IAAgB;CAClB;CAGF,IAAM,IACJ,KAAiB,EAAc,SAAS,IACpC,EAAqC,CAAa,IAClD,CAAC,GAAG,CAAQ,GAEZ,IAAS,GAAM;CACrB,KAAK,IAAM,KAAQ,GAAS;EAE1B,IAAI,CAAE,MAAM,EAAa,GADT,EAAS,KAAK,KACC,KAAU,KAAA,CAAS,GAAI;EAEtD,IAAM,IAAS,MAAM,EAA+B,GADlC,EAAS,KAAK,EAAK,WACuB,GAAY,CAAI;EAC5E,IAAI,MAAW,MACb,OAAO;CAEX;CACA,OAAO;AACT;;;ACnMA,IAAI,IAAgE;AAGpE,SAAgB,KAAuE;CACrF,OAAO;AACT;AAEA,SAAgB,GACd,GACM;CACN,IAA2B;AAC7B;;;ACAA,IAAM,IAAe,MAEjB,IAAoE,MAClE,oBAAkB,IAAI,IAAqD;AAGjF,SAAgB,IAAoC;CAElD,AADA,IAAoB,MACpB,EAAgB,MAAM;AACxB;AAEA,SAAS,GAAiB,GAAyE;CACjG,IAAM,KAAO,KAAA,qBAAA,CAA+B,KAAK;CAOjD,OANI,EAAI,WAAW,SAAS,IACnB;EAAE,UAAU;EAAQ,MAAM,EAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE;CAAE,IAE/D,EAAI,WAAW,UAAU,IACpB;EAAE,UAAU;EAAS,MAAM,EAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,OAAO,EAAE;CAAE,IAE7D;EAAE,UAAU;EAAS,MAAM,EAAI,QAAQ,OAAO,EAAE;CAAE;AAC3D;AAEA,SAAS,EAAc,GAIrB;CACA,IAAM,IAAO,EAAO,OAAO,kBAAkB,KAAK,KAAA,aAC5C,IAAO,EAAO,OAAO,oBAAA;CAE3B,OAAO;EACL,MAFmB,MAAS,MAAM,MAAS,MAAM,IAAO,GAAG,EAAK,GAAG;EAGnE;EACA,SAAS,UAAU,EAAK,GAAG;CAC7B;AACF;AAEA,SAAS,KAAoC;CAC3C,IAAI;EAEF,IAAM,IAAS,WAAE,QAAQ,UAAU;EACnC,OAAO,OAAO,KAAW,YAAY,EAAO,SAAS,IAAI,EAAO,QAAQ,OAAO,EAAE,IAAI,KAAA;CACvF,QAAQ;EACN;CACF;AACF;AAMA,SAAgB,EACd,GACA,GACQ;CACR,IAAM,IAAM,EAAa,KAAK;CAC9B,IAAI,CAAC,GACH,MAAU,MAAM,uBAAuB;CAEzC,IAAI,EAAI,WAAW,SAAS,KAAK,EAAI,WAAW,UAAU,GACxD,OAAO,EAAI,QAAQ,OAAO,EAAE;CAE9B,IAAI,EAAI,WAAW,GAAG,GAAG;EACvB,IAAM,KAAU,GAAS,QAAQ,KAAK,KAAK,GAAc,KAAK,GAAA,CAAI,QAAQ,OAAO,EAAE;EACnF,IAAI,CAAC,GACH,MAAU,MACR,0BAA0B,EAAa,sDACzC;EAEF,OAAO,GAAG,IAAS,EAAI,QAAQ,OAAO,EAAE;CAC1C;CACA,OAAO,WAAW,EAAI,QAAQ,OAAO,EAAE;AACzC;AAEA,eAAe,EACb,GACA,GACA,GACkB;CAClB,IAAM,IAAM,KAAK,IAAI;CACrB,IAAI,MAAa,WAAW;EAC1B,IAAI,KAAqB,IAAM,EAAkB,WAC/C,OAAO,EAAkB;EAE3B,IAAM,IAAU,MAAM,EAAa,GAAS,CAAM;EAElD,OADA,IAAoB;GAAE;GAAS,WAAW,IAAM;EAAa,GACtD;CACT;CAEA,IAAM,IAAS,EAAgB,IAAI,CAAQ;CAC3C,IAAI,KAAU,IAAM,EAAO,WACzB,OAAO,EAAO;CAEhB,IAAM,IAAU,MAAM,EAAa,GAAS,CAAM;CAElD,OADA,EAAgB,IAAI,GAAU;EAAE;EAAS,WAAW,IAAM;CAAa,CAAC,GACjE;AACT;AAEA,SAAS,EAAmB,GAAyD;CACnF,IAAM,EAAE,SAAM,gBAAa,GAAiB,EAAO,aAAa,GAC1D,IAAU,GAAG,EAAS,KAAK,KAC3B,IAAmB,EAAO,kBAAkB,KAAK,KAAK;CAC5D,OAAO;EACL,MAAM,EAAO,aAAa;EAC1B,aAAa;EACb,iBAAiB;EACjB,gBAAgB;EAChB,mBAAmB,GAAG,EAAS,KAAK,EAAK;EACzC;EACA,YAAY;EACZ,iBAAiB,EAAO,OAAO,iBAAiB,KAAK,KAAK,KAAA;CAC5D;AACF;AAEA,SAAS,EAAoB,GAAyD;CACpF,IAAM,IAAU,EAAc,CAAM,GAC9B,IAAM,EAAO,OAAO,iBAAiB,KAAK;CAChD,OAAO;EACL,MAAM;EACN,aAAa,EAAQ;EACrB,iBAAiB;EACjB,gBAAgB,EAAQ;EACxB,mBAAmB,GAAG,EAAQ,QAAQ;EACtC,kBAAkB,EAAQ;EAC1B,YAAY;EACZ,iBAAiB,KAAO,KAAA;CAC1B;AACF;AAEA,SAAS,EACP,GACA,GAC8B;CAC9B,IAAM,IAAS,IAAI,IAAI,CAAoB,GACrC,IAA6B,EAAO,aAAa,UAAU,SAAS,SACpE,IAAO,EAAO,SAAS,QAAQ,OAAO,EAAE,GACxC,IAAe,IAAO,GAAG,EAAO,OAAO,MAAS,EAAO,MACvD,IAAU,GAAG,EAAS,KAAK;CACjC,OAAO;EACL,MAAM,EAAO,aAAa;EAC1B,aAAa;EACb,iBAAiB;EACjB,gBAAgB;EAChB,mBAAmB,GAAG,EAAQ;EAC9B,kBAAkB;EAClB,YAAY;EACZ,iBAAiB,EAAO,OAAO,iBAAiB,KAAK,KAAK,KAAA;EAC1D,cAAc;CAChB;AACF;AAaA,eAAe,EACb,GACA,GAC8C;CAC9C,IAAM,IAAM,EAAO,cAAc,KAAK;CACtC,IAAI,CAAC,GAAK,OAAO;CAEjB,IAAM,IAAW,EAAoB,GAAK,EAAE,QAAQ,GAAS,OAAO,CAAC;CAMrE,OALoB,EAAO,OAAO,iBAAiB,MAG7C,CAAC,MADY,EAAgB,GAAU,SAAS,KAAY,GAAS,MAAM,IAC/D,OAEX,EAAoB,GAAQ,CAAQ;AAC7C;AAQA,eAAsB,GACpB,GACA,GACuC;CACvC,AAAI,GAAS,qBACX,EAA4B;CAG9B,IAAM,IAAiC,EAAO,aAAa,gBACrD,IAAc,EAAO,OAAO,iBAAiB;CAEnD,IAAI,MAAS,gBAAgB;EAC3B,IAAI,EAAO,cAAc,KAAK,GAAG;GAC/B,IAAM,IAAW,EAAoB,EAAO,cAAc,EAAE,QAAQ,GAAS,OAAO,CAAC;GACrF,IAAI,KAEE,CAAC,MADY,EAAgB,GAAU,SAAS,KAAY,GAAS,MAAM,GAE7E,MAAU,MACR,uCAAuC,EAAS,6FAElD;GAGJ,OAAO,EAAoB;IAAE,GAAG;IAAQ,WAAW;GAAK,GAAG,CAAQ;EACrE;EACA,OAAO,EAAmB;GAAE,GAAG;GAAQ,WAAW;EAAK,CAAC;CAC1D;CAEA,IAAI,MAAS,SAAS;EACpB,IAAM,IAAQ,MAAM,EAAkB;GAAE,GAAG;GAAQ,WAAW;EAAK,GAAG,CAAO;EAC7E,IAAI,GAAO,OAAO;EAElB,IAAM,IAAiB,EAAoB;GAAE,GAAG;GAAQ,WAAW;EAAK,CAAC;EACzE,IAAI,KAEE,CAAC,MADY,EAAgB,EAAe,gBAAgB,WAAW,GAAS,MAAM,GAExF,MAAU,MACR,0CAA0C,EAAe,eAAe,mHAE1E;EAGJ,OAAO;CACT;CAGA,IAAM,IAAQ,MAAM,EAAkB;EAAE,GAAG;EAAQ,WAAW;CAAK,GAAG,CAAO;CAC7E,IAAI,GAAO,OAAO;CAElB,IAAM,IAAU,EAAc,CAAM;CAMpC,OALI,KAAgB,MAAM,EAAgB,EAAQ,SAAS,WAAW,GAAS,MAAM,IAC5E,EAAoB;EAAE,GAAG;EAAQ,WAAW;CAAQ,CAAC,IAIvD;EACL,GAFW,EAAmB;GAAE,GAAG;GAAQ,WAAW;EAAe,CAElE;EACH,MAAM;EACN,YAAY;CACd;AACF;AAGA,SAAgB,GACd,GACA,GACU;CAIV,OAHI,EAAS,eAAe,mBAAmB,EAAS,eAAe,eAC9D,CAAC,EAAS,WAAW,IAEvB,EAAqC,EAAS,WAAW;AAClE;;;ACpQA,SAAgB,GACd,GACmB;CACnB,IAAM,IAAU,EAAO,WAAW,CAAC;CACnC,OAAO;EACL,WAAW,EAAQ;EACnB,eAAe,EAAO,iBAAiB,EAAQ;EAC/C,kBAAkB,EAAO,oBAAoB,EAAQ;EACrD,cAAc,EAAQ,cAAc,KAAK,KAAK,KAAA;EAC9C,OAAO;GACL,iBACE,EAAQ,OAAO,iBAAiB,KAAK,KACrC,EAAQ,iBAAiB,KAAK,KAE9B,KAAA;GACF,kBAAkB,EAAQ,OAAO,oBAAoB,EAAQ;GAC7D,kBAAkB,EAAQ,OAAO,oBAAoB,EAAQ;GAC7D,cAAc,EAAQ,OAAO,gBAAgB,EAAQ;EACvD;CACF;AACF;AAEA,SAAgB,GACd,GACmB;CACnB,OAAO;EACL,WAAW,EAAQ;EACnB,eAAe,EAAQ;EACvB,kBAAkB,EAAQ;EAC1B,cAAc,EAAQ,qBAAqB,KAAK,KAAK,KAAA;EACrD,OAAO;GACL,iBACE,EAAQ,iBAAiB,KAAK,KAAuC,KAAA;GACvE,kBAAkB,EAAQ;GAC1B,kBAAkB,EAAQ;EAC5B;CACF;AACF"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/easAttestationUrl.ts","../src/relationSeedRef.ts","../src/mediaRef.ts","../src/resolveSeedRssImageRelationRef.ts","../src/ArweaveClient/selectReadGateway.ts","../src/ArweaveClient/uploadApiVerification.ts","../src/ArweaveClient/arweaveL1UploadApi.ts","../src/gateway/gatewayState.ts","../src/gateway/resolveSeedGatewayEndpoints.ts","../src/gateway/seedGatewayConfig.ts"],"sourcesContent":["const EAS_ATTESTATION_EXPLORER_HOST = /(^|\\.)easscan\\.(org|xyz)$/i\n\n/**\n * True when `url` points at an EAS attestation explorer HTML page (not fetchable media).\n */\nexport function isEasAttestationExplorerUrl(url: string): boolean {\n const trimmed = url.trim()\n if (!trimmed) return false\n try {\n const parsed = new URL(trimmed)\n if (!EAS_ATTESTATION_EXPLORER_HOST.test(parsed.hostname)) {\n return false\n }\n return /\\/attestation\\/view\\//i.test(parsed.pathname)\n } catch {\n return false\n }\n}\n","/** Same rules as getCorrectId in helpers/index (avoid barrel circular import). */\nfunction parseLocalIdOrUid(localIdOrUid: string): { localId?: string; uid?: string } {\n const id = { localId: undefined as string | undefined, uid: undefined as string | undefined }\n if (!localIdOrUid) return id\n if (localIdOrUid.length === 10) {\n id.localId = localIdOrUid\n }\n if (localIdOrUid.startsWith('0x') && localIdOrUid.length === 66) {\n id.uid = localIdOrUid\n }\n return id\n}\n\nexport function normalizeRelationPropertyValue(value: unknown): string | undefined {\n if (value == null) return undefined\n if (typeof value === 'string') {\n const t = value.trim()\n return t !== '' ? t : undefined\n }\n if (typeof value === 'object' && value !== null) {\n const o = value as { seedLocalId?: string; seedUid?: string }\n if (typeof o.seedLocalId === 'string' && o.seedLocalId.trim() !== '') {\n return o.seedLocalId.trim()\n }\n if (typeof o.seedUid === 'string' && o.seedUid.trim() !== '') {\n return o.seedUid.trim()\n }\n }\n return undefined\n}\n\nconst LOCAL_SEED_REF = /^[a-zA-Z0-9_-]{10,21}$/\n\nexport function resolveSeedIdsFromRefString(s: string): {\n seedLocalId?: string\n seedUid?: string\n} {\n const fromCorrect = parseLocalIdOrUid(s)\n if (fromCorrect.localId || fromCorrect.uid) {\n return { seedLocalId: fromCorrect.localId, seedUid: fromCorrect.uid }\n }\n if (LOCAL_SEED_REF.test(s) && !s.startsWith('0x')) {\n return { seedLocalId: s }\n }\n return {}\n}\n","import { BaseArweaveClient } from './ArweaveClient/BaseArweaveClient.js'\nimport { isEasAttestationExplorerUrl } from './easAttestationUrl.js'\nimport {\n normalizeRelationPropertyValue,\n resolveSeedIdsFromRefString,\n} from './relationSeedRef.js'\n\nexport type FeedFieldRole = 'image' | 'audio' | 'video' | 'file' | 'html' | 'text'\n\nexport type FeedFieldDescriptor = {\n role: FeedFieldRole\n treatAs?: 'arweaveTx' | 'seedUid' | 'url'\n}\n\nexport type FeedFieldManifest = Record<string, FeedFieldDescriptor>\n\nexport type ClassifyMediaRefOptions = {\n treatAs?: FeedFieldDescriptor['treatAs']\n}\n\nexport type MediaRefClassification =\n | { kind: 'empty' }\n | { kind: 'url'; href: string }\n | { kind: 'nonMediaUrl'; href: string }\n | { kind: 'seedUid'; uid: string }\n | { kind: 'seedLocalId'; localId: string }\n | { kind: 'arweaveTxId'; txId: string }\n | { kind: 'unknown'; raw: string }\n\nexport type ResolveMediaRefResult =\n | { status: 'ready'; href: string; source: 'direct' | 'gateway' | 'localBlob' }\n | { status: 'empty' }\n | {\n status: 'unresolved'\n reason: string\n classification: MediaRefClassification\n }\n\nexport type ResolveMediaRefOptions = ClassifyMediaRefOptions\n\nconst ARWEAVE_TX_ID = /^[a-zA-Z0-9_-]{43}$/\n\nfunction trimOrEmpty(raw: string | undefined | null): string {\n if (raw == null) return ''\n return typeof raw === 'string' ? raw.trim() : String(raw).trim()\n}\n\nfunction coalesceStringField(item: Record<string, unknown>, key: string): string {\n const v = item[key]\n if (v == null) return ''\n if (typeof v === 'string') return v.trim()\n if (typeof v === 'number' || typeof v === 'boolean') return String(v)\n return ''\n}\n\nfunction unwrapRelationString(raw: string): string {\n const t = raw.trim()\n if (!t) return t\n try {\n const parsed = JSON.parse(t) as unknown\n const fromObj = normalizeRelationPropertyValue(parsed)\n if (fromObj) return fromObj\n } catch {\n // not JSON\n }\n return t\n}\n\nexport function classifyMediaRef(\n raw: string,\n options?: ClassifyMediaRefOptions,\n): MediaRefClassification {\n const s = trimOrEmpty(raw)\n if (!s) {\n return { kind: 'empty' }\n }\n\n const treatAs = options?.treatAs\n if (treatAs === 'url') {\n return { kind: 'url', href: s }\n }\n if (treatAs === 'arweaveTx') {\n return { kind: 'arweaveTxId', txId: s }\n }\n if (treatAs === 'seedUid') {\n if (s.startsWith('0x') && s.length === 66) {\n return { kind: 'seedUid', uid: s }\n }\n return { kind: 'unknown', raw: s }\n }\n\n if (\n s.startsWith('http://') ||\n s.startsWith('https://') ||\n s.startsWith('blob:') ||\n s.startsWith('data:')\n ) {\n if (isEasAttestationExplorerUrl(s)) {\n return { kind: 'nonMediaUrl', href: s }\n }\n return { kind: 'url', href: s }\n }\n\n const unwrapped = unwrapRelationString(s)\n const ids = resolveSeedIdsFromRefString(unwrapped)\n if (ids.seedUid) {\n return { kind: 'seedUid', uid: ids.seedUid }\n }\n if (ids.seedLocalId) {\n return { kind: 'seedLocalId', localId: ids.seedLocalId }\n }\n\n if (unwrapped.startsWith('0x') && unwrapped.length === 66) {\n return { kind: 'seedUid', uid: unwrapped }\n }\n\n if (ARWEAVE_TX_ID.test(unwrapped) && !unwrapped.startsWith('0x')) {\n return { kind: 'arweaveTxId', txId: unwrapped }\n }\n\n return { kind: 'unknown', raw: s }\n}\n\nexport type NormalizedMediaField = {\n role: 'image' | 'audio' | 'video' | 'file'\n raw: string\n classification: MediaRefClassification\n}\n\nexport type NormalizedHtmlField = {\n role: 'html'\n raw: string\n}\n\nexport type NormalizedTextField = {\n role: 'text'\n raw: string\n}\n\nexport type NormalizedFeedFieldValue =\n | NormalizedMediaField\n | NormalizedHtmlField\n | NormalizedTextField\n\nexport function getFeedItemStringField(item: Record<string, unknown>, key: string): string {\n const direct = coalesceStringField(item, key)\n if (direct) return direct\n const snake = key.replace(/[A-Z]/g, (l) => `_${l.toLowerCase()}`)\n if (snake !== key) {\n const alt = coalesceStringField(item, snake)\n if (alt) return alt\n }\n const parts = key.split('_')\n if (parts.length > 1) {\n const camel =\n parts[0] + parts.slice(1).map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join('')\n const alt2 = coalesceStringField(item, camel)\n if (alt2) return alt2\n }\n return ''\n}\n\nexport function normalizeFeedItemFields(\n item: Record<string, unknown>,\n manifest: FeedFieldManifest,\n): Record<string, NormalizedFeedFieldValue | undefined> {\n const out: Record<string, NormalizedFeedFieldValue | undefined> = {}\n for (const [fieldKey, descriptor] of Object.entries(manifest)) {\n const raw = getFeedItemStringField(item, fieldKey)\n if (!raw) {\n out[fieldKey] = undefined\n continue\n }\n if (descriptor.role === 'html') {\n out[fieldKey] = { role: 'html', raw }\n continue\n }\n if (descriptor.role === 'text') {\n out[fieldKey] = { role: 'text', raw }\n continue\n }\n const classification = classifyMediaRef(raw, { treatAs: descriptor.treatAs })\n out[fieldKey] = {\n role: descriptor.role,\n raw,\n classification,\n }\n }\n return out\n}\n\nexport function getArweaveUrlForTransaction(transactionId: string): string {\n return `${BaseArweaveClient.getBaseUrl()}/${transactionId}`\n}\n","import { BaseArweaveClient } from './ArweaveClient/BaseArweaveClient.js'\nimport { isEasAttestationExplorerUrl } from './easAttestationUrl.js'\nimport { classifyMediaRef } from './mediaRef.js'\n\nexport type SeedRssImageRelationRef = {\n storageTransactionId?: string\n arweaveUrl?: string\n seedUid?: string\n /** Gateway/raw URL suitable for image fetch; never an EAS attestation explorer page. */\n mediaUrl?: string\n}\n\nexport const SEED_RSS_IMAGE_RELATION_FIELD_KEYS = [\n 'featureImage',\n 'feature_image',\n 'image',\n 'images',\n 'coverImage',\n 'cover_image',\n 'thumbnail',\n 'thumbnail_image',\n 'thumbnailImage',\n] as const\n\nfunction trimOrEmpty(value: unknown): string {\n if (value == null) return ''\n if (typeof value === 'string') return value.trim()\n if (typeof value === 'number' || typeof value === 'boolean') return String(value)\n return ''\n}\n\nfunction readObjectStringField(obj: Record<string, unknown>, ...keys: string[]): string {\n for (const key of keys) {\n const direct = trimOrEmpty(obj[key])\n if (direct) return direct\n }\n\n const suffixes = keys.map((key) => key.split(':').pop()!.toLowerCase())\n for (const [rawKey, rawValue] of Object.entries(obj)) {\n const normalizedKey = rawKey.includes(':') ? rawKey.split(':').pop()! : rawKey\n const normalizedLower = normalizedKey.toLowerCase()\n if (suffixes.some((suffix) => normalizedLower === suffix.toLowerCase())) {\n const value = trimOrEmpty(rawValue)\n if (value) return value\n }\n }\n\n return ''\n}\n\nfunction tryGatewayUrlForTxId(txId: string): string | undefined {\n const trimmed = txId.trim()\n if (!trimmed || trimmed.startsWith('0x')) return undefined\n try {\n return `${BaseArweaveClient.getBaseUrl()}/${trimmed}`\n } catch {\n return undefined\n }\n}\n\nfunction resolveMediaUrlFromParts(parts: {\n storageTransactionId?: string\n arweaveUrl?: string\n}): string | undefined {\n const txId = parts.storageTransactionId?.trim()\n if (txId) {\n const fromTx = tryGatewayUrlForTxId(txId)\n if (fromTx) return fromTx\n }\n\n const arweaveUrl = parts.arweaveUrl?.trim()\n if (arweaveUrl && !isEasAttestationExplorerUrl(arweaveUrl)) {\n return arweaveUrl\n }\n\n return undefined\n}\n\nfunction resolveFromString(value: string): SeedRssImageRelationRef | undefined {\n const trimmed = value.trim()\n if (!trimmed) return undefined\n\n if (isEasAttestationExplorerUrl(trimmed)) {\n return undefined\n }\n\n const classification = classifyMediaRef(trimmed)\n switch (classification.kind) {\n case 'url':\n return { mediaUrl: classification.href }\n case 'arweaveTxId': {\n const mediaUrl = tryGatewayUrlForTxId(classification.txId)\n return {\n storageTransactionId: classification.txId,\n ...(mediaUrl ? { mediaUrl } : {}),\n }\n }\n case 'seedUid':\n return { seedUid: classification.uid }\n default: {\n const mediaUrl = tryGatewayUrlForTxId(trimmed)\n if (mediaUrl) {\n return {\n storageTransactionId: trimmed,\n mediaUrl,\n }\n }\n return undefined\n }\n }\n}\n\nfunction resolveFromObject(obj: Record<string, unknown>): SeedRssImageRelationRef | undefined {\n const storageTransactionId = readObjectStringField(\n obj,\n 'storageTransactionId',\n 'storage_transaction_id',\n )\n const arweaveUrl = readObjectStringField(obj, 'arweaveUrl', 'arweave_url')\n const seedUid = readObjectStringField(obj, 'seedUid', 'SeedUid', 'seed_uid')\n const link = readObjectStringField(obj, 'link', 'Link')\n\n const mediaUrl =\n resolveMediaUrlFromParts({ storageTransactionId, arweaveUrl }) ??\n (link && !isEasAttestationExplorerUrl(link) ? link : undefined)\n\n if (!storageTransactionId && !arweaveUrl && !seedUid && !mediaUrl) {\n return undefined\n }\n\n return {\n ...(storageTransactionId ? { storageTransactionId } : {}),\n ...(arweaveUrl && !isEasAttestationExplorerUrl(arweaveUrl) ? { arweaveUrl } : {}),\n ...(seedUid ? { seedUid } : {}),\n ...(mediaUrl ? { mediaUrl } : {}),\n }\n}\n\n/**\n * Resolve a Seed RSS image relation value (plain string or expanded relation object)\n * using field priority: storageTransactionId → arweaveUrl/gateway URL → seedUid.\n * EAS attestation explorer URLs are never returned as media.\n */\nexport function resolveSeedRssImageRelationRef(value: unknown): SeedRssImageRelationRef | undefined {\n if (value == null) return undefined\n\n if (typeof value === 'string') {\n return resolveFromString(value)\n }\n\n if (Array.isArray(value)) {\n for (const entry of value) {\n const resolved = resolveSeedRssImageRelationRef(entry)\n if (resolved?.mediaUrl || resolved?.storageTransactionId || resolved?.seedUid) {\n return resolved\n }\n }\n return undefined\n }\n\n if (typeof value === 'object') {\n return resolveFromObject(value as Record<string, unknown>)\n }\n\n return undefined\n}\n\n/**\n * Read the first configured image-relation field from a parsed RSS item record.\n */\nexport function resolveSeedRssImageRelationFromItem(\n item: Record<string, unknown>,\n fieldKeys: readonly string[] = SEED_RSS_IMAGE_RELATION_FIELD_KEYS,\n): SeedRssImageRelationRef | undefined {\n for (const key of fieldKeys) {\n if (!(key in item)) continue\n const resolved = resolveSeedRssImageRelationRef(item[key])\n if (resolved) return resolved\n }\n return undefined\n}\n","import { BaseArweaveClient } from './BaseArweaveClient.js'\nimport {\n DEFAULT_ARWEAVE_HOST,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\n\nconst READ_GATEWAY_CACHE_TTL_MS = 3 * 60 * 1000\nconst PROBE_TIMEOUT_MS = 5000\n\nlet readGatewayCache: { host: string; expiresAt: number } | null = null\nlet ensureInFlight: Promise<string> | null = null\n\n/** Clears cached read gateway (e.g. after tests or to force a fresh probe). */\nexport function invalidateReadGatewayCache(): void {\n readGatewayCache = null\n ensureInFlight = null\n}\n\n/** Clears probe cache, env override suppression, and preferred host (for tests). */\nexport function resetArweaveReadGatewayForTests(): void {\n invalidateReadGatewayCache()\n BaseArweaveClient.resetReadGatewaySelectionStateForTests()\n if (!BaseArweaveClient.isReadGatewayLocked()) {\n BaseArweaveClient.setPreferredReadGateway(DEFAULT_ARWEAVE_HOST)\n }\n}\n\n/**\n * GET /info with timeout. Treat 2xx + JSON object as healthy.\n */\nexport async function probeGateway(baseUrl: string, signal?: AbortSignal): Promise<boolean> {\n const url = `${baseUrl.replace(/\\/$/, '')}/info`\n let timer: ReturnType<typeof setTimeout> | undefined\n const controller = new AbortController()\n const effectiveSignal = signal ?? controller.signal\n if (!signal) {\n timer = setTimeout(() => controller.abort(), PROBE_TIMEOUT_MS)\n }\n try {\n const response = await fetch(url, {\n method: 'GET',\n signal: effectiveSignal,\n headers: { Accept: 'application/json' },\n })\n if (!response.ok) return false\n const text = await response.text()\n if (!text.trim()) return false\n try {\n const json = JSON.parse(text) as unknown\n return typeof json === 'object' && json !== null\n } catch {\n return false\n }\n } catch {\n return false\n } finally {\n if (timer) clearTimeout(timer)\n }\n}\n\nexport async function selectFirstHealthyReadGateway(\n hosts: string[],\n protocol: 'http' | 'https' = 'https',\n signal?: AbortSignal,\n): Promise<string | null> {\n for (const host of hosts) {\n const h = host.trim().replace(/\\/$/, '')\n if (!h) continue\n const baseUrl = `${protocol}://${h}`\n if (await probeGateway(baseUrl, signal)) {\n return h\n }\n }\n return null\n}\n\nfunction buildOrderedHostsForProbe(): string[] {\n return getArweaveReadGatewayHostsForPrimary(BaseArweaveClient.getHost())\n}\n\n/**\n * Probes gateways in order and applies the first healthy host via {@link BaseArweaveClient.applyProbedReadGateway}.\n * No-op when the read gateway is locked ({@link BaseArweaveClient.setHost}).\n * Uses a short TTL cache to avoid probing on every read.\n */\nexport async function ensureReadGatewaySelected(signal?: AbortSignal): Promise<string> {\n if (BaseArweaveClient.isReadGatewayLocked()) {\n return BaseArweaveClient.getHost()\n }\n\n const now = Date.now()\n if (readGatewayCache && now < readGatewayCache.expiresAt) {\n return readGatewayCache.host\n }\n\n if (ensureInFlight) {\n return ensureInFlight\n }\n\n ensureInFlight = (async () => {\n const ordered = buildOrderedHostsForProbe()\n const protocol = BaseArweaveClient.getProtocol()\n const picked = await selectFirstHealthyReadGateway(ordered, protocol, signal)\n\n if (!BaseArweaveClient.isReadGatewayLocked()) {\n if (picked) {\n BaseArweaveClient.applyProbedReadGateway(picked)\n }\n }\n\n readGatewayCache = {\n host: BaseArweaveClient.getHost(),\n expiresAt: Date.now() + READ_GATEWAY_CACHE_TTL_MS,\n }\n return readGatewayCache.host\n })()\n\n try {\n return await ensureInFlight\n } finally {\n ensureInFlight = null\n }\n}\n","import type { TransactionStatus } from '../types/arweave.js'\n\n/**\n * Trim and strip a trailing slash from an upload API base URL.\n */\nexport function normalizeUploadApiBaseUrl(baseUrl: string): string {\n return baseUrl.trim().replace(/\\/+$/, '')\n}\n\n/**\n * URL used to verify that an upload is available via the Seed upload API\n * (`GET` → HTTP 200 when present). Works for L1 transaction ids and ANS-104 data item ids.\n *\n * @param baseUrl - Upload API origin (e.g. from `ARWEAVE_UPLOAD_API_BASE_URL` / `uploadApiBaseUrl`)\n * @param txOrDataItemId - Arweave tx id or bundler data item id\n */\nexport function getUploadApiArweaveDataUrl(baseUrl: string, txOrDataItemId: string): string {\n const base = normalizeUploadApiBaseUrl(baseUrl)\n const id = encodeURIComponent(txOrDataItemId)\n return `${base}/api/upload/arweave/data/${id}`\n}\n\nconst DEFAULT_UPLOAD_STATUS_TIMEOUT_MS = 45_000\n\nexport type GetUploadPipelineTransactionStatusOptions = {\n /** Abort the request after this many ms (upload API hung / unreachable). Default 45s. */\n timeoutMs?: number\n}\n\n/**\n * Presence check against the upload API data route (same semantics as\n * {@link BaseArweaveClient.getTransactionStatus} for gateways: 200 = present, 404 = missing).\n */\nexport async function getUploadPipelineTransactionStatus(\n uploadApiBaseUrl: string,\n txOrDataItemId: string,\n options?: GetUploadPipelineTransactionStatusOptions,\n): Promise<TransactionStatus> {\n const url = getUploadApiArweaveDataUrl(uploadApiBaseUrl, txOrDataItemId)\n const timeoutMs = options?.timeoutMs ?? DEFAULT_UPLOAD_STATUS_TIMEOUT_MS\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeoutMs)\n\n try {\n const response = await fetch(url, { signal: controller.signal })\n clearTimeout(timeoutId)\n\n if (response.status === 404) {\n return { status: 404, confirmed: null }\n }\n\n if (!response.ok) {\n return { status: response.status, confirmed: null }\n }\n\n if (response.body) {\n await response.body.cancel()\n }\n\n return { status: 200, confirmed: null }\n } catch (err) {\n clearTimeout(timeoutId)\n if (err instanceof Error && err.name === 'AbortError') {\n return { status: 504, confirmed: null }\n }\n return { status: 500, confirmed: null }\n }\n}\n","import {\n getDefaultArweaveReadGatewayHostsOrdered,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\nimport { normalizeUploadApiBaseUrl } from './uploadApiVerification.js'\nimport { probeGateway } from './selectReadGateway.js'\n\n/** Response shape from `GET /api/upload/arweave/status/{dataItemId}`. */\nexport interface ArweaveUploadStatusResponse {\n dataItemId?: string\n phase?: string\n bundleId?: string\n turboStatus?: string\n turboInfo?: string\n winc?: string\n turbo?: {\n status?: string\n bundleId?: string\n info?: string\n winc?: string\n }\n l1?: {\n checked?: boolean\n httpStatus?: number\n confirmed?: boolean\n numberOfConfirmations?: number\n minConfirmationsRequired?: number\n meetsMinConfirmations?: boolean\n }\n}\n\nexport interface ArweaveGatewayTransactionQueryResult {\n /** GraphQL `transaction.id` (often same as data item id for ANS-104 items). */\n transactionId: string | null\n /** L1 bundle transaction id when the item is indexed as bundled. */\n bundledInId: string | null\n blockHeight?: number | null\n blockTimestamp?: number | null\n}\n\nconst GATEWAY_TX_QUERY = `\n query ArweaveGatewayTransaction($id: String!) {\n transaction(id: $id) {\n id\n bundledIn {\n id\n }\n block {\n height\n timestamp\n }\n }\n }\n`\n\nexport function getUploadApiArweaveStatusUrl(baseUrl: string, dataItemId: string): string {\n const base = normalizeUploadApiBaseUrl(baseUrl)\n const id = encodeURIComponent(dataItemId)\n return `${base}/api/upload/arweave/status/${id}`\n}\n\n/**\n * Whether L1 anchoring is complete per upload API status JSON.\n */\nexport function isArweaveL1AnchoringComplete(status: ArweaveUploadStatusResponse): boolean {\n const l1 = status.l1\n if (!l1) return false\n if (l1.meetsMinConfirmations === true) return true\n if (l1.confirmed === true) return true\n return false\n}\n\n/**\n * Fetches JSON from `GET /api/upload/arweave/status/{dataItemId}`.\n * Returns `null` if the response is not OK or body is not JSON.\n */\nexport async function getArweaveUploadStatus(\n uploadApiBaseUrl: string,\n dataItemId: string,\n): Promise<ArweaveUploadStatusResponse | null> {\n const url = getUploadApiArweaveStatusUrl(uploadApiBaseUrl, dataItemId)\n try {\n const response = await fetch(url)\n if (!response.ok) {\n return null\n }\n const body = (await response.json()) as ArweaveUploadStatusResponse\n return body && typeof body === 'object' ? body : null\n } catch {\n return null\n }\n}\n\n/**\n * Queries an Arweave gateway GraphQL API for transaction + bundle info.\n */\nexport async function queryArweaveGatewayTransaction(\n graphqlUrl: string,\n dataItemId: string,\n init?: Pick<RequestInit, 'signal'>,\n): Promise<ArweaveGatewayTransactionQueryResult | null> {\n const url = graphqlUrl.trim()\n if (!url) return null\n\n try {\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query: GATEWAY_TX_QUERY,\n variables: { id: dataItemId },\n }),\n signal: init?.signal,\n })\n\n if (!response.ok) {\n return null\n }\n\n const json = (await response.json()) as {\n data?: {\n transaction?: {\n id?: string\n bundledIn?: { id?: string } | null\n block?: { height?: number; timestamp?: number } | null\n } | null\n }\n errors?: unknown\n }\n\n if (json.errors) {\n return null\n }\n\n const tx = json.data?.transaction\n if (!tx) {\n return {\n transactionId: null,\n bundledInId: null,\n blockHeight: null,\n blockTimestamp: null,\n }\n }\n\n return {\n transactionId: typeof tx.id === 'string' ? tx.id : null,\n bundledInId: tx.bundledIn?.id != null ? String(tx.bundledIn.id) : null,\n blockHeight: tx.block?.height ?? null,\n blockTimestamp: tx.block?.timestamp ?? null,\n }\n } catch {\n return null\n }\n}\n\n/**\n * Resolves GraphQL against the first healthy gateway (GET /info probe per host), then runs\n * {@link queryArweaveGatewayTransaction}. Host order: optional `graphqlUrl` hostname first, then\n * {@link getDefaultArweaveReadGatewayHostsOrdered}.\n */\nexport async function queryArweaveGatewayTransactionWithFallback(\n graphqlUrl: string | undefined,\n dataItemId: string,\n init?: Pick<RequestInit, 'signal'>,\n): Promise<ArweaveGatewayTransactionQueryResult | null> {\n const defaults = getDefaultArweaveReadGatewayHostsOrdered()\n const trimmed = graphqlUrl?.trim()\n let protocol: 'http' | 'https' = 'https'\n let preferredHost: string | null = null\n if (trimmed) {\n try {\n const u = new URL(trimmed)\n protocol = u.protocol === 'http:' ? 'http' : 'https'\n preferredHost = u.hostname || null\n } catch {\n preferredHost = null\n }\n }\n\n const ordered =\n preferredHost && preferredHost.length > 0\n ? getArweaveReadGatewayHostsForPrimary(preferredHost)\n : [...defaults]\n\n const signal = init?.signal\n for (const host of ordered) {\n const base = `${protocol}://${host}`\n if (!(await probeGateway(base, signal ?? undefined))) continue\n const gqlUrl = `${protocol}://${host}/graphql`\n const result = await queryArweaveGatewayTransaction(gqlUrl, dataItemId, init)\n if (result !== null) {\n return result\n }\n }\n return null\n}\n","import type { ResolvedSeedGatewayEndpoints } from '../types/gateway.js'\n\nlet resolvedGatewayEndpoints: ResolvedSeedGatewayEndpoints | null = null\n\n/** Last endpoints applied during client init (for read-path helpers). */\nexport function getResolvedSeedGatewayEndpoints(): ResolvedSeedGatewayEndpoints | null {\n return resolvedGatewayEndpoints\n}\n\nexport function setResolvedSeedGatewayEndpoints(\n value: ResolvedSeedGatewayEndpoints | null,\n): void {\n resolvedGatewayEndpoints = value\n}\n","import { probeGateway } from '../ArweaveClient/selectReadGateway.js'\nimport {\n DEFAULT_ARWEAVE_HOST,\n DEFAULT_GATEWAY_SIDECAR_HOST,\n DEFAULT_GATEWAY_SIDECAR_PORT,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\nimport type {\n ResolvedSeedGatewayEndpoints,\n SeedGatewayConfig,\n SeedGatewayTransportMode,\n} from '../types/gateway.js'\n\nconst PROBE_TTL_MS = 3 * 60 * 1000\n\nlet sidecarProbeCache: { healthy: boolean; expiresAt: number } | null = null\nconst proxyProbeCache = new Map<string, { healthy: boolean; expiresAt: number }>()\n\n/** Clears cached sidecar / proxy probes (tests / forced re-probe). */\nexport function invalidateSidecarProbeCache(): void {\n sidecarProbeCache = null\n proxyProbeCache.clear()\n}\n\nfunction parseGatewayHost(input: string | undefined): { host: string; protocol: 'http' | 'https' } {\n const raw = (input ?? DEFAULT_ARWEAVE_HOST).trim()\n if (raw.startsWith('http://')) {\n return { protocol: 'http', host: raw.slice(7).replace(/\\/$/, '') }\n }\n if (raw.startsWith('https://')) {\n return { protocol: 'https', host: raw.slice(8).replace(/\\/$/, '') }\n }\n return { protocol: 'https', host: raw.replace(/\\/$/, '') }\n}\n\nfunction sidecarOrigin(config: SeedGatewayConfig): {\n host: string\n port: number\n baseUrl: string\n} {\n const host = config.hyper?.localSidecarHost?.trim() || DEFAULT_GATEWAY_SIDECAR_HOST\n const port = config.hyper?.localSidecarPort ?? DEFAULT_GATEWAY_SIDECAR_PORT\n const hostWithPort = port === 80 || port === 443 ? host : `${host}:${port}`\n return {\n host: hostWithPort,\n port,\n baseUrl: `http://${host}:${port}`,\n }\n}\n\nfunction browserOrigin(): string | undefined {\n try {\n const g = globalThis as { window?: { location?: { origin?: string } } }\n const origin = g.window?.location?.origin\n return typeof origin === 'string' && origin.length > 0 ? origin.replace(/\\/$/, '') : undefined\n } catch {\n return undefined\n }\n}\n\n/**\n * Resolve `proxyBaseUrl` to an absolute origin+path (no trailing slash).\n * Relative paths require a browser `window.location.origin` or {@link ResolveSeedGatewayEndpointsOptions.origin}.\n */\nexport function resolveProxyBaseUrl(\n proxyBaseUrl: string,\n options?: { origin?: string },\n): string {\n const raw = proxyBaseUrl.trim()\n if (!raw) {\n throw new Error('proxyBaseUrl is empty')\n }\n if (raw.startsWith('http://') || raw.startsWith('https://')) {\n return raw.replace(/\\/$/, '')\n }\n if (raw.startsWith('/')) {\n const origin = (options?.origin?.trim() || browserOrigin() || '').replace(/\\/$/, '')\n if (!origin) {\n throw new Error(\n `Relative proxyBaseUrl \"${proxyBaseUrl}\" requires a browser origin or resolve options.origin`,\n )\n }\n return `${origin}${raw.replace(/\\/$/, '')}`\n }\n return `https://${raw.replace(/\\/$/, '')}`\n}\n\nasync function probeUrlHealthy(\n baseUrl: string,\n cacheKey: 'sidecar' | string,\n signal?: AbortSignal,\n): Promise<boolean> {\n const now = Date.now()\n if (cacheKey === 'sidecar') {\n if (sidecarProbeCache && now < sidecarProbeCache.expiresAt) {\n return sidecarProbeCache.healthy\n }\n const healthy = await probeGateway(baseUrl, signal)\n sidecarProbeCache = { healthy, expiresAt: now + PROBE_TTL_MS }\n return healthy\n }\n\n const cached = proxyProbeCache.get(cacheKey)\n if (cached && now < cached.expiresAt) {\n return cached.healthy\n }\n const healthy = await probeGateway(baseUrl, signal)\n proxyProbeCache.set(cacheKey, { healthy, expiresAt: now + PROBE_TTL_MS })\n return healthy\n}\n\nfunction buildHttpEndpoints(config: SeedGatewayConfig): ResolvedSeedGatewayEndpoints {\n const { host, protocol } = parseGatewayHost(config.arweaveDomain)\n const baseUrl = `${protocol}://${host}`\n const uploadApiBaseUrl = config.uploadApiBaseUrl?.trim() || baseUrl\n return {\n mode: config.transport ?? 'http-gateway',\n arweaveHost: host,\n arweaveProtocol: protocol,\n arweaveBaseUrl: baseUrl,\n arweaveGraphqlUrl: `${protocol}://${host}/graphql`,\n uploadApiBaseUrl,\n activePath: 'http',\n gatewayHyperKey: config.hyper?.gatewayHyperKey?.trim() || undefined,\n }\n}\n\nfunction buildHyperEndpoints(config: SeedGatewayConfig): ResolvedSeedGatewayEndpoints {\n const sidecar = sidecarOrigin(config)\n const key = config.hyper?.gatewayHyperKey?.trim()\n return {\n mode: 'hyper',\n arweaveHost: sidecar.host,\n arweaveProtocol: 'http',\n arweaveBaseUrl: sidecar.baseUrl,\n arweaveGraphqlUrl: `${sidecar.baseUrl}/graphql`,\n uploadApiBaseUrl: sidecar.baseUrl,\n activePath: 'hyper-sidecar',\n gatewayHyperKey: key || undefined,\n }\n}\n\nfunction buildProxyEndpoints(\n config: SeedGatewayConfig,\n absoluteProxyBaseUrl: string,\n): ResolvedSeedGatewayEndpoints {\n const parsed = new URL(absoluteProxyBaseUrl)\n const protocol: 'http' | 'https' = parsed.protocol === 'http:' ? 'http' : 'https'\n const path = parsed.pathname.replace(/\\/$/, '')\n const hostWithPath = path ? `${parsed.host}${path}` : parsed.host\n const baseUrl = `${protocol}://${hostWithPath}`\n return {\n mode: config.transport ?? 'http-gateway',\n arweaveHost: hostWithPath,\n arweaveProtocol: protocol,\n arweaveBaseUrl: baseUrl,\n arweaveGraphqlUrl: `${baseUrl}/graphql`,\n uploadApiBaseUrl: baseUrl,\n activePath: 'http-proxy',\n gatewayHyperKey: config.hyper?.gatewayHyperKey?.trim() || undefined,\n proxyBaseUrl: absoluteProxyBaseUrl,\n }\n}\n\nexport type ResolveSeedGatewayEndpointsOptions = {\n signal?: AbortSignal\n /** Skip cache and probe sidecar / proxy again. */\n forceSidecarProbe?: boolean\n /**\n * Origin used to resolve relative `proxyBaseUrl` (e.g. `https://app.example.com`).\n * Defaults to `window.location.origin` in browsers.\n */\n origin?: string\n}\n\nasync function tryProxyEndpoints(\n config: SeedGatewayConfig,\n options?: ResolveSeedGatewayEndpointsOptions,\n): Promise<ResolvedSeedGatewayEndpoints | null> {\n const raw = config.proxyBaseUrl?.trim()\n if (!raw) return null\n\n const absolute = resolveProxyBaseUrl(raw, { origin: options?.origin })\n const shouldProbe = config.hyper?.probeSidecar !== false\n if (shouldProbe) {\n const ok = await probeUrlHealthy(absolute, `proxy:${absolute}`, options?.signal)\n if (!ok) return null\n }\n return buildProxyEndpoints(config, absolute)\n}\n\n/**\n * Resolve effective gateway + upload API URLs for the configured transport mode.\n *\n * Preference when a proxy and/or sidecar may apply:\n * configured + healthy `proxyBaseUrl` → local Hyper sidecar → public HTTP gateway.\n */\nexport async function resolveSeedGatewayEndpoints(\n config: SeedGatewayConfig,\n options?: ResolveSeedGatewayEndpointsOptions,\n): Promise<ResolvedSeedGatewayEndpoints> {\n if (options?.forceSidecarProbe) {\n invalidateSidecarProbeCache()\n }\n\n const mode: SeedGatewayTransportMode = config.transport ?? 'http-gateway'\n const shouldProbe = config.hyper?.probeSidecar !== false\n\n if (mode === 'http-gateway') {\n if (config.proxyBaseUrl?.trim()) {\n const absolute = resolveProxyBaseUrl(config.proxyBaseUrl, { origin: options?.origin })\n if (shouldProbe) {\n const ok = await probeUrlHealthy(absolute, `proxy:${absolute}`, options?.signal)\n if (!ok) {\n throw new Error(\n `Gateway HTTP proxy not reachable at ${absolute}. ` +\n 'Ensure your Node route runs createGatewayProxy (or equivalent) and mounts at proxyBaseUrl.',\n )\n }\n }\n return buildProxyEndpoints({ ...config, transport: mode }, absolute)\n }\n return buildHttpEndpoints({ ...config, transport: mode })\n }\n\n if (mode === 'hyper') {\n const proxy = await tryProxyEndpoints({ ...config, transport: mode }, options)\n if (proxy) return proxy\n\n const hyperEndpoints = buildHyperEndpoints({ ...config, transport: mode })\n if (shouldProbe) {\n const ok = await probeUrlHealthy(hyperEndpoints.arweaveBaseUrl, 'sidecar', options?.signal)\n if (!ok) {\n throw new Error(\n `Gateway Hyper sidecar not reachable at ${hyperEndpoints.arweaveBaseUrl}. ` +\n 'Run: seed gateway tunnel connect <operator-z32-key> — or configure gateway.proxyBaseUrl for an app-server proxy.',\n )\n }\n }\n return hyperEndpoints\n }\n\n // hybrid: proxy → sidecar → public HTTP\n const proxy = await tryProxyEndpoints({ ...config, transport: mode }, options)\n if (proxy) return proxy\n\n const sidecar = sidecarOrigin(config)\n if (shouldProbe && (await probeUrlHealthy(sidecar.baseUrl, 'sidecar', options?.signal))) {\n return buildHyperEndpoints({ ...config, transport: 'hyper' })\n }\n\n const http = buildHttpEndpoints({ ...config, transport: 'http-gateway' })\n return {\n ...http,\n mode: 'hybrid',\n activePath: 'hybrid-fallback-http',\n }\n}\n\n/** Build ordered gateway host list for read fallback (sidecar/proxy first when active). */\nexport function getReadGatewayHostsForConfig(\n resolved: ResolvedSeedGatewayEndpoints,\n _defaults?: readonly string[],\n): string[] {\n if (resolved.activePath === 'hyper-sidecar' || resolved.activePath === 'http-proxy') {\n return [resolved.arweaveHost]\n }\n return getArweaveReadGatewayHostsForPrimary(resolved.arweaveHost)\n}\n","import type {\n ClientGatewayContextInput,\n SeedConfigGatewayInput,\n SeedGatewayConfig,\n} from '../types/seedConfig.js'\nimport { DEFAULT_SEED_GATEWAY_HYPER_KEY } from '../constants.js'\n\n/** Merge seed.config gateway fields into {@link SeedGatewayConfig}. */\nexport function seedGatewayConfigFromSeedConfig(\n config: SeedConfigGatewayInput,\n): SeedGatewayConfig {\n const gateway = config.gateway ?? {}\n return {\n transport: gateway.transport,\n arweaveDomain: config.arweaveDomain ?? gateway.arweaveDomain,\n uploadApiBaseUrl: config.uploadApiBaseUrl ?? gateway.uploadApiBaseUrl,\n proxyBaseUrl: gateway.proxyBaseUrl?.trim() || undefined,\n hyper: {\n gatewayHyperKey:\n gateway.hyper?.gatewayHyperKey?.trim() ||\n gateway.gatewayHyperKey?.trim() ||\n DEFAULT_SEED_GATEWAY_HYPER_KEY ||\n undefined,\n localSidecarHost: gateway.hyper?.localSidecarHost ?? gateway.localSidecarHost,\n localSidecarPort: gateway.hyper?.localSidecarPort ?? gateway.localSidecarPort,\n probeSidecar: gateway.hyper?.probeSidecar ?? gateway.probeSidecar,\n },\n }\n}\n\nexport function seedGatewayConfigFromClientContext(\n context: ClientGatewayContextInput,\n): SeedGatewayConfig {\n return {\n transport: context.gatewayTransport,\n arweaveDomain: context.arweaveDomain,\n uploadApiBaseUrl: context.uploadApiBaseUrl,\n proxyBaseUrl: context.gatewayProxyBaseUrl?.trim() || undefined,\n hyper: {\n gatewayHyperKey:\n context.gatewayHyperKey?.trim() || DEFAULT_SEED_GATEWAY_HYPER_KEY || undefined,\n localSidecarHost: context.gatewaySidecarHost,\n localSidecarPort: context.gatewaySidecarPort,\n },\n }\n}\n"],"mappings":"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"}
|
package/dist/mediaRef.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type FeedFieldRole = 'image' | 'file' | 'html' | 'text';
|
|
1
|
+
export type FeedFieldRole = 'image' | 'audio' | 'video' | 'file' | 'html' | 'text';
|
|
2
2
|
export type FeedFieldDescriptor = {
|
|
3
3
|
role: FeedFieldRole;
|
|
4
4
|
treatAs?: 'arweaveTx' | 'seedUid' | 'url';
|
|
@@ -42,7 +42,7 @@ export type ResolveMediaRefResult = {
|
|
|
42
42
|
export type ResolveMediaRefOptions = ClassifyMediaRefOptions;
|
|
43
43
|
export declare function classifyMediaRef(raw: string, options?: ClassifyMediaRefOptions): MediaRefClassification;
|
|
44
44
|
export type NormalizedMediaField = {
|
|
45
|
-
role: 'image' | 'file';
|
|
45
|
+
role: 'image' | 'audio' | 'video' | 'file';
|
|
46
46
|
raw: string;
|
|
47
47
|
classification: MediaRefClassification;
|
|
48
48
|
};
|
package/dist/mediaRef.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaRef.d.ts","sourceRoot":"","sources":["../src/mediaRef.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"mediaRef.d.ts","sourceRoot":"","sources":["../src/mediaRef.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAElF,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,aAAa,CAAA;IACnB,OAAO,CAAC,EAAE,WAAW,GAAG,SAAS,GAAG,KAAK,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAEnE,MAAM,MAAM,uBAAuB,GAAG;IACpC,OAAO,CAAC,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAA;CACzC,CAAA;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEpC,MAAM,MAAM,qBAAqB,GAC7B;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAA;CAAE,GAC7E;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GACnB;IACE,MAAM,EAAE,YAAY,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,sBAAsB,CAAA;CACvC,CAAA;AAEL,MAAM,MAAM,sBAAsB,GAAG,uBAAuB,CAAA;AA8B5D,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,uBAAuB,GAChC,sBAAsB,CAkDxB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAA;IAC1C,GAAG,EAAE,MAAM,CAAA;IACX,cAAc,EAAE,sBAAsB,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,MAAM,MAAM,wBAAwB,GAChC,oBAAoB,GACpB,mBAAmB,GACnB,mBAAmB,CAAA;AAEvB,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBzF;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,iBAAiB,GAC1B,MAAM,CAAC,MAAM,EAAE,wBAAwB,GAAG,SAAS,CAAC,CAwBtD;AAED,wBAAgB,2BAA2B,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAEzE"}
|