@seedprotocol/arweave 0.7.6-next.949.g73caafc → 0.7.6
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/gateway/transactionStatus.d.ts +21 -0
- package/dist/gateway/transactionStatus.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +82 -480
- package/dist/index.js.map +1 -1
- package/dist/node/ArweaveClient.d.ts.map +1 -1
- package/dist/node.js +25 -43
- package/dist/node.js.map +1 -1
- package/dist/transactionStatus-BpYIaQyY.js +1021 -0
- package/dist/transactionStatus-BpYIaQyY.js.map +1 -0
- package/package.json +1 -1
- package/dist/queries-t-LwBKFl.js +0 -581
- package/dist/queries-t-LwBKFl.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactionStatus-BpYIaQyY.js","names":["types.GetTransactionTagsDocument","types.GetArweaveTransactionsDocument","g","DEFAULT_ARWEAVE_HOST","DEFAULT_SEED_FEED_HYPER_KEY","DEFAULT_SEED_GATEWAY_HYPER_KEY","DEFAULT_GATEWAY_SIDECAR_HOST","DEFAULT_GATEWAY_SIDECAR_PORT","DEFAULT_ARWEAVE_GRAPHQL_URL","DEFAULT_ARWEAVE_GATEWAYS","READ_GATEWAYS_ENV_KEYS","ARWEAVE_HOST_ENV_KEYS","normalizeGatewayHostInput","input","resolveArweaveHostFromEnv","key","raw","filterDefaultsForPrimary","primaryNorm","primary","seedNorm","defaults","g","getArweaveReadGatewayHostsForPrimary","mergePrimaryHostWithDefaults","getDefaultArweaveReadGatewayHostsOrdered","s","seen","out","keyOf","h","add","k","d","isKnownArweaveGatewayHostname","hostname","gl","readTransform","setArweaveContentReadTransform","transform","hasArweaveContentReadTransform","transformArweaveContent","content","context","getResponseMediaType","response","readArweaveContentResponse","OWNER_KEY","thisCopy","markArweaveClientOwner","DuplicateArweaveModuleError","assertSingleArweaveModule","owner","resetArweaveClientOwnerForTests","parseGateway","_host","_protocol","_hostExplicitlySet","_suppressEnvGatewayOverride","BaseArweaveClient","impl","envHost","host","slash","protocol","defaultPort","url","parsed","transactionId","data","options","isString","bytes","params","documents","\"kind\"","\"definitions\"","\"operation\"","\"name\"","\"value\"","\"variableDefinitions\"","\"variable\"","\"type\"","\"selectionSet\"","\"selections\"","\"alias\"","\"arguments\"","graphql","source","GET_TRANSACTION_TAGS","GET_ARWEAVE_TRANSACTIONS","DEFAULT_FAILURE_THRESHOLD","DEFAULT_OPEN_MS","failureThreshold","openDurationMs","circuits","normalizeGatewayHostKey","hostOrUrl","getOrCreate","c","resolveState","now","configureGatewayCircuitBreaker","resetGatewayCircuitBreakerForTests","isGatewayHostCircuitOpen","state","getGatewayHostCircuitState","beginGatewayHostHalfOpenProbe","recordGatewayHostSuccess","recordGatewayHostFailure","listOpenGatewayCircuitHosts","READ_GATEWAY_CACHE_TTL_MS","READ_GATEWAY_UNHEALTHY_CACHE_TTL_MS","PROBE_TIMEOUT_MS","readGatewayCache","ensureInFlight","lastHealthyReadGatewayHost","invalidateReadGatewayCache","resetArweaveReadGatewayForTests","isReadGatewayKnownHealthy","getLastHealthyReadGatewayHost","probeGateway","baseUrl","hostKey","timer","controller","effectiveSignal","signal","text","json","ok","selectFirstHealthyReadGateway","hosts","buildOrderedHostsForProbe","ensureReadGatewaySelected","picked","fallback","PROBE_TTL_MS","sidecarProbeCache","proxyProbeCache","invalidateSidecarProbeCache","parseGatewayHost","sidecarOrigin","config","port","browserOrigin","origin","resolveProxyBaseUrl","proxyBaseUrl","probeUrlHealthy","cacheKey","healthy","cached","buildHttpEndpoints","uploadApiBaseUrl","buildHyperEndpoints","sidecar","buildProxyEndpoints","absoluteProxyBaseUrl","path","hostWithPath","tryProxyEndpoints","absolute","resolveSeedGatewayEndpoints","mode","shouldProbe","proxy","hyperEndpoints","getReadGatewayHostsForConfig","resolved","resolvedGatewayEndpoints","getResolvedSeedGatewayEndpoints","setResolvedSeedGatewayEndpoints","value","preferredReadBaseUrls","getPreferredArweaveReadBaseUrls","setPreferredArweaveReadBaseUrls","urls","trimmed","DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS","pushUnique","u","getResolvedArweaveReadBaseUrls","getArweaveReadBaseUrls","ensureArweaveReadGatewayForFallback","fetchArweaveRawFromBaseUrl","res","fetchArweaveRawTextAcrossGateways","tried","tryUrls","base","DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS","DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS","isGatewayFailure","status","fetchStatusFromBaseUrl","timeoutMs","fetchTransactionStatusAcrossGateways","deadline","baseUrls","open","candidates","lastStatus","remaining","attempt"],"sources":["../src/constants.ts","../src/content/arweaveContent.ts","../src/moduleOwner.ts","../src/ArweaveClient/BaseArweaveClient.ts","../src/graphql/gql/graphql.ts","../src/graphql/gql/gql.ts","../src/ArweaveClient/queries.ts","../src/gateway/gatewayCircuitBreaker.ts","../src/ArweaveClient/selectReadGateway.ts","../src/gateway/resolveSeedGatewayEndpoints.ts","../src/gateway/gatewayState.ts","../src/gateway/readBaseUrls.ts","../src/gateway/transactionStatus.ts"],"sourcesContent":["/** Default Arweave gateway host used across all packages (first in {@link DEFAULT_ARWEAVE_GATEWAYS}) */\nexport const DEFAULT_ARWEAVE_HOST = 'ar.seedprotocol.io'\n\n/**\n * Official Seed Protocol public feed Hyperdrive key (z32).\n * Empty until the first official publisher keypair is generated and backed up by ops.\n */\nexport const DEFAULT_SEED_FEED_HYPER_KEY = ''\n\n/**\n * Official Seed Protocol gateway Hyper tunnel operator key (z32).\n * Empty until ops generate and back up the first operator keypair.\n * Also defined in packages/gateway-hyper/src/constants.ts; keep both equal (gateway-hyper __tests__/constants.test.ts checks).\n */\nexport const DEFAULT_SEED_GATEWAY_HYPER_KEY = ''\n\n/** Default localhost sidecar bind for Gateway Hyper client mode. */\nexport const DEFAULT_GATEWAY_SIDECAR_HOST = '127.0.0.1'\nexport const DEFAULT_GATEWAY_SIDECAR_PORT = 1984\n\n/** Default Arweave gateway GraphQL endpoint (transaction / block queries). */\nexport const DEFAULT_ARWEAVE_GRAPHQL_URL = `https://${DEFAULT_ARWEAVE_HOST}/graphql`\n\n/**\n * Default Arweave gateways for read fallback / metadata fetching (ordered by preference).\n * Override order with `ARWEAVE_READ_GATEWAYS` or `NEXT_PUBLIC_ARWEAVE_READ_GATEWAYS` (comma-separated hosts).\n */\nexport const DEFAULT_ARWEAVE_GATEWAYS = [\n 'ar.seedprotocol.io',\n 'arweave.net',\n 'arweave.dev',\n 'g8way.io',\n 'permagate.io',\n 'zigza.xyz',\n] as const\n\nconst READ_GATEWAYS_ENV_KEYS = ['ARWEAVE_READ_GATEWAYS', 'NEXT_PUBLIC_ARWEAVE_READ_GATEWAYS'] as const\n\n/** Env keys checked for primary Arweave gateway host (first match wins). */\nexport const ARWEAVE_HOST_ENV_KEYS = [\n 'NEXT_PUBLIC_ARWEAVE_HOST',\n 'ARWEAVE_HOST',\n 'VITE_ARWEAVE_HOST',\n] as const\n\nfunction normalizeGatewayHostInput(input: string): string {\n const t = input.trim()\n if (t.startsWith('http://')) return t.slice(7).replace(/\\/$/, '')\n if (t.startsWith('https://')) return t.slice(8).replace(/\\/$/, '')\n return t.replace(/\\/$/, '')\n}\n\n/**\n * Primary gateway host from env (`NEXT_PUBLIC_ARWEAVE_HOST`, `ARWEAVE_HOST`, or `VITE_ARWEAVE_HOST`).\n * Scheme prefixes (`http://`, `https://`) are stripped.\n */\nexport function resolveArweaveHostFromEnv(): string | undefined {\n if (typeof process === 'undefined' || !process.env) return undefined\n for (const key of ARWEAVE_HOST_ENV_KEYS) {\n const raw = process.env[key]?.trim()\n if (raw) return normalizeGatewayHostInput(raw)\n }\n return undefined\n}\n\nfunction filterDefaultsForPrimary(primary: string, defaults: readonly string[]): string[] {\n const primaryNorm = primary.trim().toLowerCase().replace(/\\/$/, '')\n const seedNorm = DEFAULT_ARWEAVE_HOST.toLowerCase()\n if (primaryNorm === seedNorm) return [...defaults]\n return defaults.filter((g) => g.toLowerCase() !== seedNorm)\n}\n\n/**\n * Ordered read gateways: `primary` first, then fallbacks.\n * When `primary` is not {@link DEFAULT_ARWEAVE_HOST}, `ar.seedprotocol.io` is omitted from fallbacks\n * unless it appears in an explicit `ARWEAVE_READ_GATEWAYS` env list.\n */\nexport function getArweaveReadGatewayHostsForPrimary(primary: string): string[] {\n const defaults = getDefaultArweaveReadGatewayHostsOrdered()\n return mergePrimaryHostWithDefaults(primary, filterDefaultsForPrimary(primary, defaults))\n}\n\n/** Ordered gateway hostnames for reads: env list if set, otherwise {@link DEFAULT_ARWEAVE_GATEWAYS}. */\nexport function getDefaultArweaveReadGatewayHostsOrdered(): string[] {\n if (typeof process === 'undefined' || !process.env) {\n return [...DEFAULT_ARWEAVE_GATEWAYS]\n }\n for (const key of READ_GATEWAYS_ENV_KEYS) {\n const raw = process.env[key]?.trim()\n if (raw) {\n return raw.split(',').map((s) => s.trim()).filter(Boolean)\n }\n }\n return [...DEFAULT_ARWEAVE_GATEWAYS]\n}\n\n/**\n * Deduped host list: primary first, then each default not already present (case-insensitive).\n */\nexport function mergePrimaryHostWithDefaults(\n primary: string,\n defaults: readonly string[],\n): string[] {\n const seen = new Set<string>()\n const out: string[] = []\n const keyOf = (h: string) => h.trim().toLowerCase().replace(/\\/$/, '')\n const add = (h: string) => {\n const t = h.trim().replace(/\\/$/, '')\n if (!t) return\n const k = keyOf(t)\n if (seen.has(k)) return\n seen.add(k)\n out.push(t)\n }\n add(primary)\n for (const d of defaults) add(d)\n return out\n}\n\n/**\n * True if `hostname` looks like a public Arweave gateway used in stored URLs (hydration / RSS).\n */\nexport function isKnownArweaveGatewayHostname(hostname: string): boolean {\n const h = hostname.trim().toLowerCase()\n if (!h) return false\n if (h.endsWith('arweave.net')) return true\n if (h.endsWith('ar-io.net')) return true\n for (const g of DEFAULT_ARWEAVE_GATEWAYS) {\n const gl = g.toLowerCase()\n if (h === gl || h.endsWith(`.${gl}`)) return true\n }\n return false\n}\n","/**\n * Read-side seam for Arweave content: every place the SDK packages read an upload's bytes from a\n * gateway passes them through {@link transformArweaveContent} before using them. Today nothing is\n * registered and content is used as fetched (public publishing). A future private-publish option\n * would register a transform here (e.g. decrypt using keys from the client config) instead of\n * patching each reader.\n *\n * Readers routed through it:\n * - {@link fetchArweaveRawTextAcrossGateways} (`readBaseUrls.ts`): the SDK's Html storage-seed\n * fallback (`readHtmlBodyForStorageSeed`) and other text reads.\n * - `BaseArweaveClient.getTransactionData` (every platform client; `decode: false` reads are left\n * alone, they are not content bytes).\n * - `@seedprotocol/query`'s `hydrateArweaveRichTextInItems` (also re-exported by `@seedprotocol/feed`).\n *\n * Not routed (they cannot be, as things stand):\n * - The SDK's OPFS download worker runs from a string and cannot import this module; it has its own\n * `transformDownloadedContent` hook.\n * - Places that hand a gateway URL straight to the browser (`SeedImage` / `useEnsureLocalImage`'s\n * progressive `gatewayHref`, `mediaRef` hrefs, feed image URLs). Encrypted content would need\n * those to fetch, transform and use a blob URL instead.\n */\n\nexport type ArweaveContent = {\n bytes: Uint8Array\n /** Media type without parameters, lowercased (from the response, i.e. the upload's Content-Type tag). */\n contentType?: string\n}\n\nexport type ArweaveContentReadContext = {\n transactionId: string\n}\n\n/** @experimental Signature may change when private publishing lands. */\nexport type ArweaveContentReadTransform = (\n content: ArweaveContent,\n context: ArweaveContentReadContext,\n) => ArweaveContent | Promise<ArweaveContent>\n\nlet readTransform: ArweaveContentReadTransform | undefined\n\n/**\n * Register (or clear, with `undefined`) the transform applied to Arweave content after it is\n * fetched. @experimental Groundwork for private publishing; nothing in the SDK registers one yet.\n */\nexport function setArweaveContentReadTransform(transform: ArweaveContentReadTransform | undefined): void {\n readTransform = transform\n}\n\n/** True when a read transform is registered. Lets readers skip work on the common, public path. */\nexport function hasArweaveContentReadTransform(): boolean {\n return readTransform !== undefined\n}\n\n/** Content as the app should see it: the registered transform's result, or `content` unchanged. */\nexport async function transformArweaveContent(\n content: ArweaveContent,\n context: ArweaveContentReadContext,\n): Promise<ArweaveContent> {\n return readTransform ? readTransform(content, context) : content\n}\n\n/** `Content-Type` header without parameters, lowercased; undefined when absent. */\nexport function getResponseMediaType(response: Response): string | undefined {\n const raw = response.headers?.get('content-type')\n const mediaType = raw?.split(';')[0]?.trim().toLowerCase()\n return mediaType || undefined\n}\n\n/** Read a gateway response's body through {@link transformArweaveContent}. */\nexport async function readArweaveContentResponse(\n response: Response,\n context: ArweaveContentReadContext,\n): Promise<ArweaveContent> {\n const bytes = new Uint8Array(await response.arrayBuffer())\n return transformArweaveContent({ bytes, contentType: getResponseMediaType(response) }, context)\n}\n","/**\n * Detects a second copy of this package in one page or process. Each copy has its own\n * BaseArweaveClient slot and gateway state, so code reading through one copy would quietly\n * miss the client and gateway registered on the other.\n *\n * Whichever copy last registered a client records itself under a global key that every copy\n * shares; {@link assertSingleArweaveModule} throws when that is not the caller's copy.\n */\nconst OWNER_KEY = Symbol.for('@seedprotocol/arweave:clientOwner')\n\n/** Identity of this copy of the module. */\nconst thisCopy = Object.freeze({ package: '@seedprotocol/arweave' })\n\ntype GlobalWithOwner = typeof globalThis & { [OWNER_KEY]?: object }\n\n/** @internal Called by BaseArweaveClient when a client is registered. */\nexport function markArweaveClientOwner(): void {\n ;(globalThis as GlobalWithOwner)[OWNER_KEY] = thisCopy\n}\n\nexport class DuplicateArweaveModuleError extends Error {\n constructor() {\n super(\n 'Two copies of @seedprotocol/arweave are loaded, and the Arweave client was registered on the other copy ' +\n '(e.g. by SeedClient). Reads through this copy would use a different client and gateway. ' +\n 'Make sure every @seedprotocol/* package is the same version and installed once (`npm ls @seedprotocol/arweave`). ' +\n 'With Vite, keep @seedprotocol/* packages out of optimizeDeps.exclude so they are pre-bundled together, ' +\n 'and dedupe them (seedVitePlugin does) when they are linked into the app.',\n )\n this.name = 'DuplicateArweaveModuleError'\n }\n}\n\n/** Throws {@link DuplicateArweaveModuleError} when another copy of this package registered the Arweave client. */\nexport function assertSingleArweaveModule(): void {\n const owner = (globalThis as GlobalWithOwner)[OWNER_KEY]\n if (owner !== undefined && owner !== thisCopy) throw new DuplicateArweaveModuleError()\n}\n\n/** @internal Tests that load fresh module copies (vi.resetModules) clear the shared marker. */\nexport function resetArweaveClientOwnerForTests(): void {\n delete (globalThis as GlobalWithOwner)[OWNER_KEY]\n}\n","import { GraphQLClient } from 'graphql-request'\nimport type {\n TransactionStatus,\n TransactionTag,\n GetDataOptions,\n DownloadFilesParams,\n DownloadResult,\n CreateTransactionOptions,\n} from '../types/arweave.js'\nimport { DEFAULT_ARWEAVE_HOST, resolveArweaveHostFromEnv } from '../constants.js'\nimport type { IArweaveClient } from './IArweaveClient.js'\nimport { hasArweaveContentReadTransform, transformArweaveContent } from '../content/arweaveContent.js'\nimport { markArweaveClientOwner } from '../moduleOwner.js'\n\nfunction parseGateway(input: string): { protocol: 'http' | 'https'; host: string } {\n const t = input.trim()\n if (t.startsWith('http://')) {\n return { protocol: 'http', host: t.slice(7).replace(/\\/$/, '') }\n }\n if (t.startsWith('https://')) {\n return { protocol: 'https', host: t.slice(8).replace(/\\/$/, '') }\n }\n return { protocol: 'https', host: t.replace(/\\/$/, '') }\n}\n\n// Internal gateway state (process-wide; stays on the facade)\nlet _host = DEFAULT_ARWEAVE_HOST\nlet _protocol: 'http' | 'https' = 'https'\nlet _hostExplicitlySet = false\n/** When true, env gateway host does not override `_host` (after a successful read-gateway probe). */\nlet _suppressEnvGatewayOverride = false\n\nexport abstract class BaseArweaveClient {\n private static _impl: IArweaveClient | null = null\n\n static configure(impl: IArweaveClient): void {\n if (!impl) {\n throw new Error(\n 'Cannot configure ArweaveClient with undefined or null. Ensure the platform-specific ArweaveClient is properly created.',\n )\n }\n BaseArweaveClient._impl = impl\n markArweaveClientOwner()\n }\n\n /** True once a platform (SDK, Node bootstrap, host app) has registered an implementation. */\n static isConfigured(): boolean {\n return BaseArweaveClient._impl != null\n }\n\n private static requireImpl(): IArweaveClient {\n if (!BaseArweaveClient._impl) {\n throw new Error(\n 'ArweaveClient not configured. Import from @seedprotocol/arweave/node to register the Node.js implementation, or ensure SDK platform init has run.',\n )\n }\n return BaseArweaveClient._impl\n }\n\n /**\n * Resolved gateway host (no scheme) and protocol from env override or setHost().\n */\n static resolveGateway(): { protocol: 'http' | 'https'; host: string } {\n const envHost = resolveArweaveHostFromEnv()\n if (envHost && !_hostExplicitlySet && !_suppressEnvGatewayOverride) {\n return parseGateway(envHost)\n }\n return { protocol: _protocol, host: _host }\n }\n\n // ============================================\n // Configuration Methods (facade / process-wide)\n // ============================================\n\n /**\n * Get the current Arweave host (hostname, optionally with port and path prefix — no URL scheme)\n * @returns The Arweave host (e.g. 'arweave.net', 'localhost:1984', or 'app.example.com/api/seed-gateway')\n */\n static getHost(): string {\n return this.resolveGateway().host\n }\n\n /**\n * Hostname (+ optional port) without a path prefix — safe for the `arweave` npm client's `init({ host })`.\n */\n static getArweaveSdkHost(): string {\n const host = this.getHost()\n const slash = host.indexOf('/')\n return slash === -1 ? host : host.slice(0, slash)\n }\n\n /**\n * `{ host, port, protocol }` for the `arweave` npm client's `init()`. The port is always set: the\n * web build of `arweave` otherwise falls back to the page's own port (`https://arweave.net:5173`),\n * and a `host:port` passed as `host` becomes `host:port:443`. Path prefixes are dropped — the\n * `arweave` client cannot address a gateway mounted under a path.\n */\n static getArweaveJsApiConfig(): { host: string; port: number; protocol: 'http' | 'https' } {\n const protocol = this.getProtocol()\n const defaultPort = protocol === 'https' ? 443 : 80\n try {\n const url = new URL(`${protocol}://${this.getArweaveSdkHost()}`)\n return { host: url.hostname, port: url.port ? Number(url.port) : defaultPort, protocol }\n } catch {\n return { host: this.getArweaveSdkHost(), port: defaultPort, protocol }\n }\n }\n\n /**\n * Path prefix on the gateway origin (e.g. `/api/seed-gateway`), or empty.\n */\n static getGatewayPath(): string {\n const host = this.getHost()\n const slash = host.indexOf('/')\n if (slash === -1) return ''\n return host.slice(slash).replace(/\\/$/, '') || ''\n }\n\n /**\n * Get whether requests use http or https\n */\n static getProtocol(): 'http' | 'https' {\n return this.resolveGateway().protocol\n }\n\n /**\n * Base URL for the configured gateway (e.g. https://arweave.net, http://localhost:1984,\n * or https://app.example.com/api/seed-gateway)\n */\n static getBaseUrl(): string {\n const { protocol, host } = this.resolveGateway()\n return `${protocol}://${host}`\n }\n\n /**\n * Set the Arweave gateway. Plain host defaults to https; prefix with http:// for local HTTP gateways.\n * @param host - e.g. 'arweave.net', 'https://arweave.net', or 'http://localhost:1984'\n */\n static setHost(host: string): void {\n const parsed = parseGateway(host)\n _host = parsed.host\n _protocol = parsed.protocol\n _hostExplicitlySet = true\n _suppressEnvGatewayOverride = false\n }\n\n /**\n * When true, read-path gateway probing does not change the host ({@link setHost}).\n */\n static isReadGatewayLocked(): boolean {\n return _hostExplicitlySet\n }\n\n /**\n * @internal Clears env override suppression after probing (for test isolation).\n */\n static resetReadGatewaySelectionStateForTests(): void {\n _suppressEnvGatewayOverride = false\n }\n\n /**\n * Sets the preferred read gateway without locking. Env host still takes precedence until a probe applies a host.\n * Used for seed `arweaveDomain`.\n */\n static setPreferredReadGateway(host: string): void {\n const parsed = parseGateway(host)\n _host = parsed.host\n _protocol = parsed.protocol\n _hostExplicitlySet = false\n }\n\n /**\n * Applies a gateway chosen by read-path health probing so {@link getHost} uses it instead of env override.\n */\n static applyProbedReadGateway(host: string): void {\n const parsed = parseGateway(host)\n _host = parsed.host\n _protocol = parsed.protocol\n _hostExplicitlySet = false\n _suppressEnvGatewayOverride = true\n }\n\n /**\n * Get the GraphQL endpoint URL\n * @returns The full GraphQL endpoint URL\n */\n static getEndpoint(): string {\n return `${this.getBaseUrl()}/graphql`\n }\n\n /**\n * Get the raw data URL for a transaction\n * @param transactionId - The Arweave transaction ID\n * @returns The full URL to access raw transaction data\n */\n static getRawUrl(transactionId: string): string {\n return `${this.getBaseUrl()}/raw/${transactionId}`\n }\n\n /**\n * URL used to verify that a transaction is available on the gateway (HTTP 200 = present).\n * @param transactionId - The Arweave transaction ID\n */\n static getStatusUrl(transactionId: string): string {\n return `${this.getBaseUrl()}/${transactionId}`\n }\n\n // ============================================\n // Delegated to platform instance\n // ============================================\n\n static getArweaveClient(): GraphQLClient {\n return BaseArweaveClient.requireImpl().getArweaveClient()\n }\n\n static getTransactionStatus(transactionId: string): Promise<TransactionStatus> {\n return BaseArweaveClient.requireImpl().getTransactionStatus(transactionId)\n }\n\n /**\n * Transaction data from the platform client. Decoded data goes through `transformArweaveContent`\n * when a read transform is registered (see `content/arweaveContent.ts`); `decode: false` returns\n * the encoded data as is.\n */\n static async getTransactionData(\n transactionId: string,\n options?: GetDataOptions\n ): Promise<Uint8Array | string> {\n const data = await BaseArweaveClient.requireImpl().getTransactionData(transactionId, options)\n if (options?.decode === false || !hasArweaveContentReadTransform()) {\n return data\n }\n const isString = typeof data === 'string'\n const { bytes } = await transformArweaveContent(\n { bytes: isString ? new TextEncoder().encode(data) : data },\n { transactionId },\n )\n return isString ? new TextDecoder().decode(bytes) : bytes\n }\n\n static getTransactionTags(transactionId: string): Promise<TransactionTag[]> {\n return BaseArweaveClient.requireImpl().getTransactionTags(transactionId)\n }\n\n static createTransaction(\n data: string | Uint8Array,\n options?: CreateTransactionOptions\n ): Promise<any> {\n return BaseArweaveClient.requireImpl().createTransaction(data, options)\n }\n\n static downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]> {\n return BaseArweaveClient.requireImpl().downloadFiles(params)\n }\n}\n","/* eslint-disable */\nimport type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = T | null | undefined;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string; }\n String: { input: string; output: string; }\n Boolean: { input: boolean; output: boolean; }\n Int: { input: number; output: number; }\n Float: { input: number; output: number; }\n};\n\n/** Representation of a value transfer between wallets, in both winson and ar. */\nexport type Amount = {\n __typename?: 'Amount';\n /** Amount as an AR string e.g. \\`\"0.000000000001\"\\`. */\n ar: Scalars['String']['output'];\n /** Amount as a winston string e.g. \\`\"1000000000000\"\\`. */\n winston: Scalars['String']['output'];\n};\n\n/** Block Schema */\nexport type Block = {\n __typename?: 'Block';\n /** The block height. */\n height: Scalars['Int']['output'];\n /** The block ID. */\n id?: Maybe<Scalars['ID']['output']>;\n /** The previous block ID. */\n previous?: Maybe<Scalars['ID']['output']>;\n /** The block timestamp (UTC). */\n timestamp?: Maybe<Scalars['Int']['output']>;\n};\n\n/**\n * Paginated result set using the GraphQL cursor spec,\n * see: https://relay.dev/graphql/connections.htm.\n */\nexport type BlockConnection = {\n __typename?: 'BlockConnection';\n edges: Array<BlockEdge>;\n pageInfo: PageInfo;\n};\n\n/** Paginated result set using the GraphQL cursor spec. */\nexport type BlockEdge = {\n __typename?: 'BlockEdge';\n /**\n * The cursor value for fetching the next page.\n *\n * Pass this to the after parameter in blocks(after: $cursor), the next page will start from the next item after this.\n */\n cursor: Scalars['String']['output'];\n /** A block object. */\n node: Block;\n};\n\n/**\n * The data bundle containing the current data item.\n * See: https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-104.md.\n */\nexport type Bundle = {\n __typename?: 'Bundle';\n /** ID of the containing data bundle. */\n id: Scalars['ID']['output'];\n};\n\nexport enum CacheControlScope {\n Private = 'PRIVATE',\n Public = 'PUBLIC'\n}\n\n/** Basic metadata about the transaction data payload. */\nexport type MetaData = {\n __typename?: 'MetaData';\n /** Size of the associated data in bytes. */\n size: Scalars['String']['output'];\n /** Type is derived from the \\`content-type\\` tag on a transaction. */\n type?: Maybe<Scalars['String']['output']>;\n};\n\n/** Representation of a transaction owner. */\nexport type Owner = {\n __typename?: 'Owner';\n /** The owner's wallet address. */\n address: Scalars['String']['output'];\n /** The owner's public key as a base64url encoded string. */\n key: Scalars['String']['output'];\n};\n\n/** Paginated page info using the GraphQL cursor spec. */\nexport type PageInfo = {\n __typename?: 'PageInfo';\n hasNextPage: Scalars['Boolean']['output'];\n};\n\n/**\n * The parent transaction for bundled transactions,\n * see: https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-102.md.\n */\nexport type Parent = {\n __typename?: 'Parent';\n id: Scalars['ID']['output'];\n};\n\nexport type Query = {\n __typename?: 'Query';\n block?: Maybe<Block>;\n blocks: BlockConnection;\n /** Get a transaction by its id */\n transaction?: Maybe<Transaction>;\n /** Get a paginated set of matching transactions using filters. */\n transactions: TransactionConnection;\n};\n\n\nexport type QueryBlockArgs = {\n id?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type QueryBlocksArgs = {\n after?: InputMaybe<Scalars['String']['input']>;\n first?: InputMaybe<Scalars['Int']['input']>;\n height?: InputMaybe<RangeFilter>;\n ids?: InputMaybe<Array<Scalars['ID']['input']>>;\n sort?: InputMaybe<SortOrder>;\n};\n\n\nexport type QueryTransactionArgs = {\n id: Scalars['ID']['input'];\n};\n\n\nexport type QueryTransactionsArgs = {\n after?: InputMaybe<Scalars['String']['input']>;\n block?: InputMaybe<RangeFilter>;\n bundledIn?: InputMaybe<Array<Scalars['ID']['input']>>;\n first?: InputMaybe<Scalars['Int']['input']>;\n ids?: InputMaybe<Array<Scalars['ID']['input']>>;\n ingested_at?: InputMaybe<RangeFilter>;\n owners?: InputMaybe<Array<Scalars['String']['input']>>;\n recipients?: InputMaybe<Array<Scalars['String']['input']>>;\n sort?: InputMaybe<SortOrder>;\n tags?: InputMaybe<Array<TagFilter>>;\n};\n\n/** Filter with a min and max */\nexport type RangeFilter = {\n /** Maximum integer to filter to */\n max?: InputMaybe<Scalars['Int']['input']>;\n /** Minimum integer to filter from */\n min?: InputMaybe<Scalars['Int']['input']>;\n};\n\n/** Optionally reverse the result sort order from `HEIGHT_DESC` (default) to `HEIGHT_ASC`. */\nexport enum SortOrder {\n /** Results are sorted by the transaction block height in ascending order, with the oldest transactions appearing first, and the most recent and pending/unconfirmed appearing last. */\n HeightAsc = 'HEIGHT_ASC',\n /** Results are sorted by the transaction block height in descending order, with the most recent and unconfirmed/pending transactions appearing first. */\n HeightDesc = 'HEIGHT_DESC',\n /** Results are sorted by the transaction ingestion time in ascending order, with the oldest ingested transactions appearing first. */\n IngestedAtAsc = 'INGESTED_AT_ASC',\n /** Results are sorted by the transaction ingestion time in descending order, with the most recently ingested transactions appearing first. */\n IngestedAtDesc = 'INGESTED_AT_DESC'\n}\n\n/** Tag Schema */\nexport type Tag = {\n __typename?: 'Tag';\n /** UTF-8 tag name */\n name: Scalars['String']['output'];\n /** UTF-8 tag value */\n value: Scalars['String']['output'];\n};\n\n/** Find transactions with the following tag name and value */\nexport type TagFilter = {\n /** How tag names and values are matched. Defaults to EXACT. */\n match?: TagMatch;\n /** The tag name */\n name?: InputMaybe<Scalars['String']['input']>;\n /** The operator to apply to to the tag filter. Defaults to EQ (equal). */\n op?: TagOperator;\n /**\n * An array of values to match against. If multiple values are passed then transactions with _any_ matching tag value from the set will be returned.\n *\n * e.g.\n *\n * `{name: \"app-name\", values: [\"app-1\"]}`\n *\n * Returns all transactions where the `app-name` tag has a value of `app-1`.\n *\n * `{name: \"app-name\", values: [\"app-1\", \"app-2\", \"app-3\"]}`\n *\n * Returns all transactions where the `app-name` tag has a value of either `app-1` _or_ `app-2` _or_ `app-3`.\n */\n values?: InputMaybe<Array<Scalars['String']['input']>>;\n};\n\n/** The method used to determine if tags match. */\nexport enum TagMatch {\n /** An exact match */\n Exact = 'EXACT',\n /** Fuzzy match containing all search terms */\n FuzzyAnd = 'FUZZY_AND',\n /** Fuzzy match containing at least one search term */\n FuzzyOr = 'FUZZY_OR',\n /** A wildcard match */\n Wildcard = 'WILDCARD'\n}\n\n/** The operator to apply to a tag value. */\nexport enum TagOperator {\n /** Equal */\n Eq = 'EQ',\n /** Not equal */\n Neq = 'NEQ'\n}\n\n/** Transaction Structure */\nexport type Transaction = {\n __typename?: 'Transaction';\n anchor: Scalars['String']['output'];\n /** Transactions with a null block are recent and unconfirmed, if they aren't mined into a block within 60 minutes they will be removed from results. */\n block?: Maybe<Block>;\n /**\n * For bundled data items this references the containing bundle ID.\n * See: https://github.com/ArweaveTeam/arweave-standards/blob/master/ans/ANS-104.md\n */\n bundledIn?: Maybe<Bundle>;\n data: MetaData;\n fee: Amount;\n id: Scalars['ID']['output'];\n /** When this transaction was made available for querying */\n ingested_at?: Maybe<Scalars['Int']['output']>;\n owner: Owner;\n /**\n * @deprecated Don't use, kept for backwards compatability only!\n * @deprecated Use `bundledIn`\n */\n parent?: Maybe<Parent>;\n quantity: Amount;\n recipient: Scalars['String']['output'];\n signature: Scalars['String']['output'];\n tags: Array<Tag>;\n};\n\n/**\n * Paginated result set using the GraphQL cursor spec,\n * see: https://relay.dev/graphql/connections.htm.\n */\nexport type TransactionConnection = {\n __typename?: 'TransactionConnection';\n /** The number of transactions that match this query. */\n count?: Maybe<Scalars['String']['output']>;\n edges: Array<TransactionEdge>;\n pageInfo: PageInfo;\n};\n\n/** Paginated result set using the GraphQL cursor spec. */\nexport type TransactionEdge = {\n __typename?: 'TransactionEdge';\n /**\n * The cursor value for fetching the next page.\n *\n * Pass this to the `after` parameter in ` transactions(after: $cursor)`, the next page will start from the next item after this.\n */\n cursor: Scalars['String']['output'];\n /** A transaction object. */\n node: Transaction;\n};\n\nexport type GetTransactionTagsQueryVariables = Exact<{\n transactionId: Scalars['ID']['input'];\n}>;\n\n\nexport type GetTransactionTagsQuery = { __typename?: 'Query', tags?: { __typename?: 'Transaction', id: string, tags: Array<{ __typename?: 'Tag', name: string, value: string }> } | null };\n\nexport type GetArweaveTransactionsQueryVariables = Exact<{\n owners?: InputMaybe<Array<Scalars['String']['input']> | Scalars['String']['input']>;\n first?: InputMaybe<Scalars['Int']['input']>;\n after?: InputMaybe<Scalars['String']['input']>;\n}>;\n\n\nexport type GetArweaveTransactionsQuery = { __typename?: 'Query', transactions: { __typename?: 'TransactionConnection', edges: Array<{ __typename?: 'TransactionEdge', cursor: string, node: { __typename?: 'Transaction', id: string, anchor: string, signature: string, block?: { __typename?: 'Block', id?: string | null, height: number } | null, data: { __typename?: 'MetaData', size: string, type?: string | null }, tags: Array<{ __typename?: 'Tag', name: string, value: string }> } }>, pageInfo: { __typename?: 'PageInfo', hasNextPage: boolean } } };\n\n\nexport const GetTransactionTagsDocument = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"GetTransactionTags\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"transactionId\"}},\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"ID\"}}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"alias\":{\"kind\":\"Name\",\"value\":\"tags\"},\"name\":{\"kind\":\"Name\",\"value\":\"transaction\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"transactionId\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"tags\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"value\"}}]}}]}}]}}]} as unknown as DocumentNode<GetTransactionTagsQuery, GetTransactionTagsQueryVariables>;\nexport const GetArweaveTransactionsDocument = {\"kind\":\"Document\",\"definitions\":[{\"kind\":\"OperationDefinition\",\"operation\":\"query\",\"name\":{\"kind\":\"Name\",\"value\":\"GetArweaveTransactions\"},\"variableDefinitions\":[{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"owners\"}},\"type\":{\"kind\":\"ListType\",\"type\":{\"kind\":\"NonNullType\",\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"first\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"Int\"}}},{\"kind\":\"VariableDefinition\",\"variable\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"after\"}},\"type\":{\"kind\":\"NamedType\",\"name\":{\"kind\":\"Name\",\"value\":\"String\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"transactions\"},\"arguments\":[{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"owners\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"owners\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"first\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"first\"}}},{\"kind\":\"Argument\",\"name\":{\"kind\":\"Name\",\"value\":\"after\"},\"value\":{\"kind\":\"Variable\",\"name\":{\"kind\":\"Name\",\"value\":\"after\"}}}],\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"edges\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"cursor\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"node\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"anchor\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"signature\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"block\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"id\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"height\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"data\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"size\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"type\"}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"tags\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"name\"}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"value\"}}]}}]}}]}},{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"pageInfo\"},\"selectionSet\":{\"kind\":\"SelectionSet\",\"selections\":[{\"kind\":\"Field\",\"name\":{\"kind\":\"Name\",\"value\":\"hasNextPage\"}}]}}]}}]}}]} as unknown as DocumentNode<GetArweaveTransactionsQuery, GetArweaveTransactionsQueryVariables>;","/* eslint-disable */\nimport * as types from './graphql';\nimport type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';\n\n/**\n * Map of all GraphQL operations in the project.\n *\n * This map has several performance disadvantages:\n * 1. It is not tree-shakeable, so it will include all operations in the project.\n * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle.\n * 3. It does not support dead code elimination, so it will add unused operations.\n *\n * Therefore it is highly recommended to use the babel or swc plugin for production.\n * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size\n */\ntype Documents = {\n \"\\n query GetTransactionTags($transactionId: ID!) {\\n tags: transaction(id: $transactionId) {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n\": typeof types.GetTransactionTagsDocument,\n \"\\n query GetArweaveTransactions(\\n $owners: [String!]\\n $first: Int\\n $after: String\\n ) {\\n transactions(owners: $owners, first: $first, after: $after) {\\n edges {\\n cursor\\n node {\\n id\\n anchor\\n signature\\n block {\\n id\\n height\\n }\\n data {\\n size\\n type\\n }\\n tags {\\n name\\n value\\n }\\n }\\n }\\n pageInfo {\\n hasNextPage\\n }\\n }\\n }\\n\": typeof types.GetArweaveTransactionsDocument,\n};\nconst documents: Documents = {\n \"\\n query GetTransactionTags($transactionId: ID!) {\\n tags: transaction(id: $transactionId) {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n\": types.GetTransactionTagsDocument,\n \"\\n query GetArweaveTransactions(\\n $owners: [String!]\\n $first: Int\\n $after: String\\n ) {\\n transactions(owners: $owners, first: $first, after: $after) {\\n edges {\\n cursor\\n node {\\n id\\n anchor\\n signature\\n block {\\n id\\n height\\n }\\n data {\\n size\\n type\\n }\\n tags {\\n name\\n value\\n }\\n }\\n }\\n pageInfo {\\n hasNextPage\\n }\\n }\\n }\\n\": types.GetArweaveTransactionsDocument,\n};\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n *\n *\n * @example\n * ```ts\n * const query = graphql(`query GetUser($id: ID!) { user(id: $id) { name } }`);\n * ```\n *\n * The query argument is unknown!\n * Please regenerate the types.\n */\nexport function graphql(source: string): unknown;\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(source: \"\\n query GetTransactionTags($transactionId: ID!) {\\n tags: transaction(id: $transactionId) {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n\"): (typeof documents)[\"\\n query GetTransactionTags($transactionId: ID!) {\\n tags: transaction(id: $transactionId) {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n\"];\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(source: \"\\n query GetArweaveTransactions(\\n $owners: [String!]\\n $first: Int\\n $after: String\\n ) {\\n transactions(owners: $owners, first: $first, after: $after) {\\n edges {\\n cursor\\n node {\\n id\\n anchor\\n signature\\n block {\\n id\\n height\\n }\\n data {\\n size\\n type\\n }\\n tags {\\n name\\n value\\n }\\n }\\n }\\n pageInfo {\\n hasNextPage\\n }\\n }\\n }\\n\"): (typeof documents)[\"\\n query GetArweaveTransactions(\\n $owners: [String!]\\n $first: Int\\n $after: String\\n ) {\\n transactions(owners: $owners, first: $first, after: $after) {\\n edges {\\n cursor\\n node {\\n id\\n anchor\\n signature\\n block {\\n id\\n height\\n }\\n data {\\n size\\n type\\n }\\n tags {\\n name\\n value\\n }\\n }\\n }\\n pageInfo {\\n hasNextPage\\n }\\n }\\n }\\n\"];\n\nexport function graphql(source: string) {\n return (documents as any)[source] ?? {};\n}\n\nexport type DocumentType<TDocumentNode extends DocumentNode<any, any>> = TDocumentNode extends DocumentNode< infer TType, any> ? TType : never;","import { graphql } from '../graphql/gql/index.js'\nimport type { TypedDocumentNode } from '@graphql-typed-document-node/core'\n\nexport const GET_TRANSACTION_TAGS = graphql(/* GraphQL */ `\n query GetTransactionTags($transactionId: ID!) {\n tags: transaction(id: $transactionId) {\n id\n tags {\n name\n value\n }\n }\n }\n`) as unknown as TypedDocumentNode<{ tags: { id: string; tags: { name: string; value: string }[] } | null }, { transactionId: string }>\n\nexport const GET_ARWEAVE_TRANSACTIONS = graphql(/* GraphQL */ `\n query GetArweaveTransactions(\n $owners: [String!]\n $first: Int\n $after: String\n ) {\n transactions(owners: $owners, first: $first, after: $after) {\n edges {\n cursor\n node {\n id\n anchor\n signature\n block {\n id\n height\n }\n data {\n size\n type\n }\n tags {\n name\n value\n }\n }\n }\n pageInfo {\n hasNextPage\n }\n }\n }\n`) as unknown as TypedDocumentNode<\n {\n transactions: {\n edges: Array<{\n cursor: string\n node: {\n id: string\n anchor: string\n signature: string\n block: { id: string; height: number }\n data: { size: number; type: string }\n tags: Array<{ name: string; value: string }>\n }\n }>\n pageInfo: { hasNextPage: boolean }\n }\n },\n { owners?: string[]; first?: number; after?: string }\n>\n","/**\n * Process-wide circuit breaker for Arweave gateway hosts.\n *\n * After consecutive failures, a host is \"open\" for a cooldown and skipped by\n * probes / metadata fetches. After the cooldown it becomes half-open (one probe\n * allowed). Success closes the circuit.\n */\n\nexport type GatewayCircuitState = 'closed' | 'open' | 'half-open'\n\ntype HostCircuit = {\n failures: number\n openedAt: number | null\n /** When half-open, only one probe may run at a time. */\n halfOpenProbeInFlight: boolean\n}\n\nconst DEFAULT_FAILURE_THRESHOLD = 1\nconst DEFAULT_OPEN_MS = 60_000\n\nlet failureThreshold = DEFAULT_FAILURE_THRESHOLD\nlet openDurationMs = DEFAULT_OPEN_MS\nconst circuits = new Map<string, HostCircuit>()\n\n/** Strip scheme / trailing slash; lowercase host (+ optional port/path). */\nexport function normalizeGatewayHostKey(hostOrUrl: string): string {\n let t = hostOrUrl.trim()\n if (!t) return ''\n if (t.startsWith('http://')) t = t.slice(7)\n else if (t.startsWith('https://')) t = t.slice(8)\n return t.replace(/\\/$/, '').toLowerCase()\n}\n\nfunction getOrCreate(key: string): HostCircuit {\n let c = circuits.get(key)\n if (!c) {\n c = { failures: 0, openedAt: null, halfOpenProbeInFlight: false }\n circuits.set(key, c)\n }\n return c\n}\n\nfunction resolveState(c: HostCircuit, now: number): GatewayCircuitState {\n if (c.openedAt == null) return 'closed'\n if (now - c.openedAt >= openDurationMs) return 'half-open'\n return 'open'\n}\n\n/**\n * Configure failure threshold and open-state duration (mainly for tests).\n */\nexport function configureGatewayCircuitBreaker(options: {\n failureThreshold?: number\n openDurationMs?: number\n}): void {\n if (options.failureThreshold != null && options.failureThreshold >= 1) {\n failureThreshold = options.failureThreshold\n }\n if (options.openDurationMs != null && options.openDurationMs >= 0) {\n openDurationMs = options.openDurationMs\n }\n}\n\n/** Clears all host circuits and restores default thresholds (for tests). */\nexport function resetGatewayCircuitBreakerForTests(): void {\n circuits.clear()\n failureThreshold = DEFAULT_FAILURE_THRESHOLD\n openDurationMs = DEFAULT_OPEN_MS\n}\n\n/**\n * True when the host should not receive new requests (open), or a half-open\n * probe is already in flight.\n */\nexport function isGatewayHostCircuitOpen(hostOrUrl: string, now = Date.now()): boolean {\n const key = normalizeGatewayHostKey(hostOrUrl)\n if (!key) return false\n const c = circuits.get(key)\n if (!c) return false\n const state = resolveState(c, now)\n if (state === 'open') return true\n if (state === 'half-open' && c.halfOpenProbeInFlight) return true\n return false\n}\n\nexport function getGatewayHostCircuitState(\n hostOrUrl: string,\n now = Date.now(),\n): GatewayCircuitState {\n const key = normalizeGatewayHostKey(hostOrUrl)\n if (!key) return 'closed'\n const c = circuits.get(key)\n if (!c) return 'closed'\n return resolveState(c, now)\n}\n\n/**\n * Mark that a probe/request is starting against a half-open host so concurrent\n * callers skip it. No-op when closed or fully open.\n */\nexport function beginGatewayHostHalfOpenProbe(hostOrUrl: string, now = Date.now()): void {\n const key = normalizeGatewayHostKey(hostOrUrl)\n if (!key) return\n const c = getOrCreate(key)\n if (resolveState(c, now) === 'half-open') {\n c.halfOpenProbeInFlight = true\n }\n}\n\nexport function recordGatewayHostSuccess(hostOrUrl: string): void {\n const key = normalizeGatewayHostKey(hostOrUrl)\n if (!key) return\n circuits.set(key, { failures: 0, openedAt: null, halfOpenProbeInFlight: false })\n}\n\nexport function recordGatewayHostFailure(hostOrUrl: string, now = Date.now()): void {\n const key = normalizeGatewayHostKey(hostOrUrl)\n if (!key) return\n const c = getOrCreate(key)\n c.failures += 1\n c.halfOpenProbeInFlight = false\n if (c.failures >= failureThreshold) {\n c.openedAt = now\n }\n}\n\n/** Hosts currently in open (or half-open with in-flight) state. */\nexport function listOpenGatewayCircuitHosts(now = Date.now()): string[] {\n const out: string[] = []\n for (const key of circuits.keys()) {\n if (isGatewayHostCircuitOpen(key, now)) out.push(key)\n }\n return out\n}\n","import { BaseArweaveClient } from './BaseArweaveClient.js'\nimport {\n DEFAULT_ARWEAVE_HOST,\n getArweaveReadGatewayHostsForPrimary,\n} from '../constants.js'\nimport {\n beginGatewayHostHalfOpenProbe,\n isGatewayHostCircuitOpen,\n recordGatewayHostFailure,\n recordGatewayHostSuccess,\n resetGatewayCircuitBreakerForTests,\n} from '../gateway/gatewayCircuitBreaker.js'\n\nconst READ_GATEWAY_CACHE_TTL_MS = 3 * 60 * 1000\n/** Shorter TTL when no gateway passed the probe — avoid hammering while still recovering sooner. */\nconst READ_GATEWAY_UNHEALTHY_CACHE_TTL_MS = 60 * 1000\nconst PROBE_TIMEOUT_MS = 5000\n\ntype ReadGatewayCache = {\n host: string\n /** False when the last probe found no healthy gateway. */\n healthy: boolean\n expiresAt: number\n}\n\nlet readGatewayCache: ReadGatewayCache | null = null\nlet ensureInFlight: Promise<string> | null = null\n/** Last host that successfully passed /info (survives an all-fail probe cycle). */\nlet lastHealthyReadGatewayHost: 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 lastHealthyReadGatewayHost = null\n resetGatewayCircuitBreakerForTests()\n BaseArweaveClient.resetReadGatewaySelectionStateForTests()\n if (!BaseArweaveClient.isReadGatewayLocked()) {\n BaseArweaveClient.setPreferredReadGateway(DEFAULT_ARWEAVE_HOST)\n }\n}\n\n/**\n * True when the last {@link ensureReadGatewaySelected} probe found a healthy host\n * (or the cache still says so). False after an all-fail probe until the next success.\n */\nexport function isReadGatewayKnownHealthy(): boolean {\n if (BaseArweaveClient.isReadGatewayLocked()) return true\n if (readGatewayCache && Date.now() < readGatewayCache.expiresAt) {\n return readGatewayCache.healthy\n }\n return lastHealthyReadGatewayHost != null\n}\n\n/** Last gateway host that passed /info, if any. */\nexport function getLastHealthyReadGatewayHost(): string | null {\n return lastHealthyReadGatewayHost\n}\n\n/**\n * GET /info with timeout. Treat 2xx + JSON object as healthy.\n * Records circuit-breaker success/failure for the host.\n */\nexport async function probeGateway(baseUrl: string, signal?: AbortSignal): Promise<boolean> {\n const url = `${baseUrl.replace(/\\/$/, '')}/info`\n let hostKey = baseUrl\n try {\n hostKey = new URL(baseUrl.includes('://') ? baseUrl : `https://${baseUrl}`).host\n } catch {\n hostKey = baseUrl.replace(/^https?:\\/\\//, '').replace(/\\/$/, '')\n }\n\n if (isGatewayHostCircuitOpen(hostKey)) {\n return false\n }\n beginGatewayHostHalfOpenProbe(hostKey)\n\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) {\n recordGatewayHostFailure(hostKey)\n return false\n }\n const text = await response.text()\n if (!text.trim()) {\n recordGatewayHostFailure(hostKey)\n return false\n }\n try {\n const json = JSON.parse(text) as unknown\n const ok = typeof json === 'object' && json !== null\n if (ok) recordGatewayHostSuccess(hostKey)\n else recordGatewayHostFailure(hostKey)\n return ok\n } catch {\n recordGatewayHostFailure(hostKey)\n return false\n }\n } catch {\n recordGatewayHostFailure(hostKey)\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 if (isGatewayHostCircuitOpen(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 *\n * When every probe fails, keeps the last known healthy host (if any) instead of\n * treating the preferred-but-unreachable host as selected, and caches\n * `healthy: false` so {@link isReadGatewayKnownHealthy} reflects that.\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 lastHealthyReadGatewayHost = picked\n readGatewayCache = {\n host: picked,\n healthy: true,\n expiresAt: Date.now() + READ_GATEWAY_CACHE_TTL_MS,\n }\n } else {\n const fallback = lastHealthyReadGatewayHost ?? BaseArweaveClient.getHost()\n if (\n lastHealthyReadGatewayHost &&\n BaseArweaveClient.getHost() !== lastHealthyReadGatewayHost\n ) {\n BaseArweaveClient.applyProbedReadGateway(lastHealthyReadGatewayHost)\n }\n readGatewayCache = {\n host: fallback,\n healthy: false,\n expiresAt: Date.now() + READ_GATEWAY_UNHEALTHY_CACHE_TTL_MS,\n }\n }\n } else {\n readGatewayCache = {\n host: BaseArweaveClient.getHost(),\n healthy: true,\n expiresAt: Date.now() + READ_GATEWAY_CACHE_TTL_MS,\n }\n }\n\n return readGatewayCache.host\n })()\n\n try {\n return await ensureInFlight\n } finally {\n ensureInFlight = null\n }\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 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 { ResolvedSeedGatewayEndpoints } from '../types/gateway.js'\nimport { resolveProxyBaseUrl } from './resolveSeedGatewayEndpoints.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\nlet preferredReadBaseUrls: string[] = []\n\n/**\n * Gateways tried before the resolved / public hosts for `/raw/{id}` reads — typically the gateway\n * the app uploads through (Hyper sidecar or app-server proxy), which serves data items before they\n * reach L1 or the public gateways. Does not affect upload, GraphQL or {@link BaseArweaveClient} host.\n */\nexport function getPreferredArweaveReadBaseUrls(): string[] {\n return preferredReadBaseUrls\n}\n\n/**\n * Replace the preferred read gateways. Each entry is a base URL with scheme and any path prefix\n * (`https://app.example.com/api/seed-gateway`); same-origin relative paths (`/api/seed-gateway`)\n * resolve against `window.location.origin` and are dropped when there is no origin. Pass `[]` to clear.\n */\nexport function setPreferredArweaveReadBaseUrls(urls: readonly string[]): void {\n const out: string[] = []\n const seen = new Set<string>()\n for (const raw of urls) {\n const trimmed = raw?.trim()\n if (!trimmed) continue\n let url: string\n try {\n // URL lowercases scheme and host; the path stays case-sensitive.\n const parsed = new URL(/^https?:\\/\\//i.test(trimmed) ? trimmed : resolveProxyBaseUrl(trimmed))\n url = `${parsed.origin}${parsed.pathname.replace(/\\/+$/, '')}`\n } catch {\n continue\n }\n if (seen.has(url)) continue\n seen.add(url)\n out.push(url)\n }\n preferredReadBaseUrls = out\n}\n","import { BaseArweaveClient } from '../ArweaveClient/BaseArweaveClient.js'\nimport { ensureReadGatewaySelected } from '../ArweaveClient/selectReadGateway.js'\nimport { getArweaveReadGatewayHostsForPrimary } from '../constants.js'\nimport { getPreferredArweaveReadBaseUrls, getResolvedSeedGatewayEndpoints } from './gatewayState.js'\nimport { getReadGatewayHostsForConfig } from './resolveSeedGatewayEndpoints.js'\nimport { readArweaveContentResponse } from '../content/arweaveContent.js'\n\n/** Per-gateway timeout for {@link fetchArweaveRawFromBaseUrl}; a hung gateway must not block the next one. */\nexport const DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS = 10_000\n\nexport type ArweaveReadBaseUrlOptions = {\n /** Hosts (no scheme) used when no gateway endpoints have been resolved, e.g. a feed's own list. */\n fallbackHosts?: readonly string[]\n}\n\nfunction pushUnique(out: string[], seen: Set<string>, url: string): void {\n const u = url.trim().replace(/\\/$/, '')\n if (!u || seen.has(u)) return\n seen.add(u)\n out.push(u)\n}\n\n/**\n * Resolved / public read gateways as base URLs (scheme + host + any path prefix), without the\n * preferred ones. Does not probe.\n */\nexport function getResolvedArweaveReadBaseUrls(options?: ArweaveReadBaseUrlOptions): string[] {\n const resolved = getResolvedSeedGatewayEndpoints()\n const protocol = BaseArweaveClient.getProtocol()\n const hosts = resolved\n ? getReadGatewayHostsForConfig(resolved)\n : options?.fallbackHosts?.length\n ? [...options.fallbackHosts]\n : getArweaveReadGatewayHostsForPrimary(BaseArweaveClient.getHost())\n\n const out: string[] = []\n const seen = new Set<string>()\n for (const host of hosts) {\n const h = host.trim()\n if (!h) continue\n pushUnique(out, seen, /^https?:\\/\\//i.test(h) ? h : `${protocol}://${h}`)\n }\n return out\n}\n\n/**\n * Ordered base URLs for `/raw/{id}` (and `/{id}`) reads: preferred gateways\n * ({@link setPreferredArweaveReadBaseUrls}) first, then the resolved / public gateways. Does not probe.\n */\nexport function getArweaveReadBaseUrls(options?: ArweaveReadBaseUrlOptions): string[] {\n const out: string[] = []\n const seen = new Set<string>()\n for (const url of getPreferredArweaveReadBaseUrls()) pushUnique(out, seen, url)\n for (const url of getResolvedArweaveReadBaseUrls(options)) pushUnique(out, seen, url)\n return out\n}\n\n/** Run the read-gateway probe unless a sidecar / proxy is already the active path. Never throws. */\nexport async function ensureArweaveReadGatewayForFallback(): Promise<void> {\n try {\n const resolved = getResolvedSeedGatewayEndpoints()\n if (resolved && (resolved.activePath === 'hyper-sidecar' || resolved.activePath === 'http-proxy')) {\n return\n }\n await ensureReadGatewaySelected()\n } catch {\n /* optional — fall through to the current host */\n }\n}\n\n/** GET `{baseUrl}/raw/{id}`; `undefined` on network error, timeout or non-2xx. */\nexport async function fetchArweaveRawFromBaseUrl(\n baseUrl: string,\n transactionId: string,\n options?: { timeoutMs?: number },\n): Promise<Response | undefined> {\n const controller = new AbortController()\n const timer = setTimeout(\n () => controller.abort(),\n options?.timeoutMs ?? DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS,\n )\n try {\n const res = await fetch(`${baseUrl.replace(/\\/$/, '')}/raw/${encodeURIComponent(transactionId)}`, {\n method: 'GET',\n credentials: 'omit',\n signal: controller.signal,\n })\n return res.ok ? res : undefined\n } catch {\n return undefined\n } finally {\n clearTimeout(timer)\n }\n}\n\n/**\n * GET `/raw/{id}` across read gateways and return the first non-empty body as text. Preferred\n * gateways go first and are tried before any read-gateway probe; a just-published item is served\n * by the gateway it was uploaded through well before it reaches L1 or the public hosts.\n * The body goes through `transformArweaveContent` (see `content/arweaveContent.ts`).\n */\nexport async function fetchArweaveRawTextAcrossGateways(\n transactionId: string,\n options?: ArweaveReadBaseUrlOptions & { timeoutMs?: number },\n): Promise<string | undefined> {\n const tried = new Set<string>()\n const tryUrls = async (urls: string[]): Promise<string | undefined> => {\n for (const base of urls) {\n if (tried.has(base)) continue\n tried.add(base)\n const res = await fetchArweaveRawFromBaseUrl(base, transactionId, options)\n if (!res) continue\n try {\n const { bytes } = await readArweaveContentResponse(res, { transactionId })\n const text = new TextDecoder().decode(bytes)\n if (text.length > 0) return text\n } catch {\n /* body read failed — next gateway */\n }\n }\n return undefined\n }\n\n const preferred = await tryUrls(getPreferredArweaveReadBaseUrls())\n if (preferred) return preferred\n\n await ensureArweaveReadGatewayForFallback()\n return tryUrls(getResolvedArweaveReadBaseUrls(options))\n}\n","import type { TransactionStatus } from '../types/arweave.js'\nimport {\n isGatewayHostCircuitOpen,\n recordGatewayHostFailure,\n recordGatewayHostSuccess,\n} from './gatewayCircuitBreaker.js'\nimport { getArweaveReadBaseUrls } from './readBaseUrls.js'\n\n/** Per-gateway timeout for a status check. A gateway can take minutes on an id it doesn't have. */\nexport const DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS = 10_000\n\n/** Time budget for a status check across all gateways. */\nexport const DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS = 20_000\n\nexport type TransactionStatusFetchOptions = {\n timeoutMs?: number\n totalTimeoutMs?: number\n /** Base URLs to try in order. Defaults to {@link getArweaveReadBaseUrls}. */\n baseUrls?: readonly string[]\n}\n\ntype Attempt = { kind: 'answer'; status: number } | { kind: 'retry'; status: number }\n\n/** 5xx and 429 say nothing about the transaction; another gateway may answer. */\nconst isGatewayFailure = (status: number) => status >= 500 || status === 429\n\nasync function fetchStatusFromBaseUrl(baseUrl: string, transactionId: string, timeoutMs: number): Promise<Attempt> {\n const controller = new AbortController()\n const timer = setTimeout(() => controller.abort(), timeoutMs)\n try {\n const response = await fetch(`${baseUrl.replace(/\\/$/, '')}/${encodeURIComponent(transactionId)}`, {\n method: 'GET',\n credentials: 'omit',\n signal: controller.signal,\n })\n // Presence only: don't download the body.\n await response.body?.cancel().catch(() => {})\n return isGatewayFailure(response.status)\n ? { kind: 'retry', status: response.status }\n : { kind: 'answer', status: response.status }\n } catch {\n return { kind: 'retry', status: controller.signal.aborted ? 504 : 500 }\n } finally {\n clearTimeout(timer)\n }\n}\n\n/**\n * HTTP status of `GET {gateway}/{id}`, trying read gateways in order\n * ({@link getArweaveReadBaseUrls}: preferred, then the configured host, then public fallbacks; only\n * the proxy or sidecar when one is the active path). A gateway's 2xx-4xx answer is returned as is\n * (a 404 isn't retried elsewhere). A timeout, network error, 5xx or 429 moves on to the next\n * gateway, and gateways whose circuit is open are skipped. When none answers within the total\n * budget the status is 504 if the last attempt timed out, otherwise that attempt's status.\n */\nexport async function fetchTransactionStatusAcrossGateways(\n transactionId: string,\n options: TransactionStatusFetchOptions = {},\n): Promise<TransactionStatus> {\n const timeoutMs = options.timeoutMs ?? DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS\n const deadline = Date.now() + (options.totalTimeoutMs ?? DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS)\n const baseUrls = options.baseUrls ?? getArweaveReadBaseUrls()\n const open = baseUrls.filter((url) => !isGatewayHostCircuitOpen(url))\n // Every circuit open: try them anyway rather than answer without asking.\n const candidates = open.length > 0 ? open : baseUrls\n\n let lastStatus = 500\n for (const baseUrl of candidates) {\n const remaining = deadline - Date.now()\n if (remaining <= 0) break\n const attempt = await fetchStatusFromBaseUrl(baseUrl, transactionId, Math.min(timeoutMs, remaining))\n if (attempt.kind === 'answer') {\n recordGatewayHostSuccess(baseUrl)\n // Callers test for 200 (present); any 2xx means the gateway has it.\n const status = attempt.status >= 200 && attempt.status < 300 ? 200 : attempt.status\n return { status, confirmed: null }\n }\n recordGatewayHostFailure(baseUrl)\n lastStatus = attempt.status\n }\n return { status: lastStatus, confirmed: null }\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seedprotocol/arweave",
|
|
3
|
-
"version": "0.7.6
|
|
3
|
+
"version": "0.7.6",
|
|
4
4
|
"description": "Arweave gateway client for Seed Protocol: transaction reads, read-gateway selection with health probing, and gateway endpoint resolution",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"seed-protocol",
|