@seedprotocol/arweave 0.7.9-next.1177.ga3e08ed → 0.7.9-next.1306.g4ff6582

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 CHANGED
@@ -1,19 +1,19 @@
1
- import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as ee, K as te, L as ne, M as re, N as ie, O as ae, P as oe, Q as se, R as ce, S as u, T as le, U as d, V as ue, W as de, X as fe, Y as pe, Z as me, _ as he, a as ge, b as _e, c as ve, d as f, et as p, f as m, g as h, h as g, i as _, j as v, k as y, l as b, m as x, n as S, nt as C, o as w, p as T, q as E, r as D, rt as O, s as k, t as A, tt as j, u as M, v as N, w as P, x as F, y as ye, z as be } from "./transactionStatus-zdutyXNX.js";
1
+ import { $ as e, A as t, B as n, C as r, D as i, E as a, F as o, G as s, H as c, I as l, J as u, K as ee, L as d, M as f, N as te, O as ne, P as re, Q as ie, R as ae, S as oe, T as se, U as ce, V as le, W as ue, X as de, Y as fe, Z as pe, _ as me, a as he, b as ge, c as _e, d as ve, et as p, f as m, g as h, h as g, i as _, it as v, j as y, k as b, l as x, m as S, n as C, nt as w, o as T, p as E, q as D, r as O, rt as k, s as A, t as j, tt as M, u as N, v as P, w as F, x as ye, y as be, z as xe } from "./ArweaveClient-EKSAAcSl.js";
2
2
  //#region src/easAttestationUrl.ts
3
- var xe = /(^|\.)easscan\.(org|xyz)$/i;
3
+ var Se = /(^|\.)easscan\.(org|xyz)$/i;
4
4
  function I(e) {
5
5
  let t = e.trim();
6
6
  if (!t) return !1;
7
7
  try {
8
8
  let e = new URL(t);
9
- return xe.test(e.hostname) ? /\/attestation\/view\//i.test(e.pathname) : !1;
9
+ return Se.test(e.hostname) ? /\/attestation\/view\//i.test(e.pathname) : !1;
10
10
  } catch {
11
11
  return !1;
12
12
  }
13
13
  }
14
14
  //#endregion
15
15
  //#region src/relationSeedRef.ts
16
- function Se(e) {
16
+ function Ce(e) {
17
17
  let t = {
18
18
  localId: void 0,
19
19
  uid: void 0
@@ -33,25 +33,25 @@ function L(e) {
33
33
  }
34
34
  }
35
35
  }
36
- var R = /^[a-zA-Z0-9_-]{10,21}$/;
37
- function z(e) {
38
- let t = Se(e);
36
+ var we = /^[a-zA-Z0-9_-]{10,21}$/;
37
+ function R(e) {
38
+ let t = Ce(e);
39
39
  return t.localId || t.uid ? {
40
40
  seedLocalId: t.localId,
41
41
  seedUid: t.uid
42
- } : R.test(e) && !e.startsWith("0x") ? { seedLocalId: e } : {};
42
+ } : we.test(e) && !e.startsWith("0x") ? { seedLocalId: e } : {};
43
43
  }
44
44
  //#endregion
45
45
  //#region src/mediaRef.ts
46
- var Ce = /^[a-zA-Z0-9_-]{43}$/;
47
- function we(e) {
46
+ var Te = /^[a-zA-Z0-9_-]{43}$/;
47
+ function Ee(e) {
48
48
  return e == null ? "" : typeof e == "string" ? e.trim() : String(e).trim();
49
49
  }
50
- function B(e, t) {
50
+ function z(e, t) {
51
51
  let n = e[t];
52
52
  return n == null ? "" : typeof n == "string" ? n.trim() : typeof n == "number" || typeof n == "boolean" ? String(n) : "";
53
53
  }
54
- function Te(e) {
54
+ function De(e) {
55
55
  let t = e.trim();
56
56
  if (!t) return t;
57
57
  try {
@@ -60,8 +60,8 @@ function Te(e) {
60
60
  } catch {}
61
61
  return t;
62
62
  }
63
- function V(e, t) {
64
- let n = we(e);
63
+ function B(e, t) {
64
+ let n = Ee(e);
65
65
  if (!n) return { kind: "empty" };
66
66
  let r = t?.treatAs;
67
67
  if (r === "url") return {
@@ -86,7 +86,7 @@ function V(e, t) {
86
86
  kind: "url",
87
87
  href: n
88
88
  };
89
- let i = Te(n), a = z(i);
89
+ let i = De(n), a = R(i);
90
90
  return a.seedUid ? {
91
91
  kind: "seedUid",
92
92
  uid: a.seedUid
@@ -96,7 +96,7 @@ function V(e, t) {
96
96
  } : i.startsWith("0x") && i.length === 66 ? {
97
97
  kind: "seedUid",
98
98
  uid: i
99
- } : Ce.test(i) && !i.startsWith("0x") ? {
99
+ } : Te.test(i) && !i.startsWith("0x") ? {
100
100
  kind: "arweaveTxId",
101
101
  txId: i
102
102
  } : {
@@ -104,25 +104,25 @@ function V(e, t) {
104
104
  raw: n
105
105
  };
106
106
  }
107
- function H(e, t) {
108
- let n = B(e, t);
107
+ function V(e, t) {
108
+ let n = z(e, t);
109
109
  if (n) return n;
110
110
  let r = t.replace(/[A-Z]/g, (e) => `_${e.toLowerCase()}`);
111
111
  if (r !== t) {
112
- let t = B(e, r);
112
+ let t = z(e, r);
113
113
  if (t) return t;
114
114
  }
115
115
  let i = t.split("_");
116
116
  if (i.length > 1) {
117
- let t = B(e, i[0] + i.slice(1).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(""));
117
+ let t = z(e, i[0] + i.slice(1).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(""));
118
118
  if (t) return t;
119
119
  }
120
120
  return "";
121
121
  }
122
- function Ee(e, t) {
122
+ function Oe(e, t) {
123
123
  let n = {};
124
124
  for (let [r, i] of Object.entries(t)) {
125
- let t = H(e, r);
125
+ let t = V(e, r);
126
126
  if (!t) {
127
127
  n[r] = void 0;
128
128
  continue;
@@ -141,7 +141,7 @@ function Ee(e, t) {
141
141
  };
142
142
  continue;
143
143
  }
144
- let a = V(t, { treatAs: i.treatAs });
144
+ let a = B(t, { treatAs: i.treatAs });
145
145
  n[r] = {
146
146
  role: i.role,
147
147
  raw: t,
@@ -150,12 +150,12 @@ function Ee(e, t) {
150
150
  }
151
151
  return n;
152
152
  }
153
- function De(e) {
154
- return `${l.getBaseUrl()}/${e}`;
153
+ function ke(e) {
154
+ return `${d.getBaseUrl()}/${e}`;
155
155
  }
156
156
  //#endregion
157
157
  //#region src/resolveSeedRssImageRelationRef.ts
158
- var U = [
158
+ var H = [
159
159
  "featureImage",
160
160
  "feature_image",
161
161
  "image",
@@ -166,49 +166,49 @@ var U = [
166
166
  "thumbnail_image",
167
167
  "thumbnailImage"
168
168
  ];
169
- function W(e) {
169
+ function U(e) {
170
170
  return e == null ? "" : typeof e == "string" ? e.trim() : typeof e == "number" || typeof e == "boolean" ? String(e) : "";
171
171
  }
172
- function G(e, ...t) {
172
+ function W(e, ...t) {
173
173
  for (let n of t) {
174
- let t = W(e[n]);
174
+ let t = U(e[n]);
175
175
  if (t) return t;
176
176
  }
177
177
  let n = t.map((e) => e.split(":").pop().toLowerCase());
178
178
  for (let [t, r] of Object.entries(e)) {
179
179
  let e = (t.includes(":") ? t.split(":").pop() : t).toLowerCase();
180
180
  if (n.some((t) => e === t.toLowerCase())) {
181
- let e = W(r);
181
+ let e = U(r);
182
182
  if (e) return e;
183
183
  }
184
184
  }
185
185
  return "";
186
186
  }
187
- function K(e) {
187
+ function G(e) {
188
188
  let t = e.trim();
189
189
  if (t && !t.startsWith("0x")) try {
190
- return `${l.getBaseUrl()}/${t}`;
190
+ return `${d.getBaseUrl()}/${t}`;
191
191
  } catch {
192
192
  return;
193
193
  }
194
194
  }
195
- function Oe(e) {
195
+ function Ae(e) {
196
196
  let t = e.storageTransactionId?.trim();
197
197
  if (t) {
198
- let e = K(t);
198
+ let e = G(t);
199
199
  if (e) return e;
200
200
  }
201
201
  let n = e.arweaveUrl?.trim();
202
202
  if (n && !I(n)) return n;
203
203
  }
204
- function ke(e) {
204
+ function je(e) {
205
205
  let t = e.trim();
206
206
  if (!t || I(t)) return;
207
- let n = V(t);
207
+ let n = B(t);
208
208
  switch (n.kind) {
209
209
  case "url": return { mediaUrl: n.href };
210
210
  case "arweaveTxId": {
211
- let e = K(n.txId);
211
+ let e = G(n.txId);
212
212
  return {
213
213
  storageTransactionId: n.txId,
214
214
  ...e ? { mediaUrl: e } : {}
@@ -216,7 +216,7 @@ function ke(e) {
216
216
  }
217
217
  case "seedUid": return { seedUid: n.uid };
218
218
  default: {
219
- let e = K(t);
219
+ let e = G(t);
220
220
  return e ? {
221
221
  storageTransactionId: t,
222
222
  mediaUrl: e
@@ -224,8 +224,8 @@ function ke(e) {
224
224
  }
225
225
  }
226
226
  }
227
- function Ae(e) {
228
- let t = G(e, "storageTransactionId", "storage_transaction_id"), n = G(e, "arweaveUrl", "arweave_url"), r = G(e, "seedUid", "SeedUid", "seed_uid"), i = G(e, "link", "Link"), a = Oe({
227
+ function Me(e) {
228
+ let t = W(e, "storageTransactionId", "storage_transaction_id"), n = W(e, "arweaveUrl", "arweave_url"), r = W(e, "seedUid", "SeedUid", "seed_uid"), i = W(e, "link", "Link"), a = Ae({
229
229
  storageTransactionId: t,
230
230
  arweaveUrl: n
231
231
  }) ?? (i && !I(i) ? i : void 0);
@@ -236,34 +236,34 @@ function Ae(e) {
236
236
  ...a ? { mediaUrl: a } : {}
237
237
  };
238
238
  }
239
- function q(e) {
239
+ function K(e) {
240
240
  if (e != null) {
241
- if (typeof e == "string") return ke(e);
241
+ if (typeof e == "string") return je(e);
242
242
  if (Array.isArray(e)) for (let t of e) {
243
- let e = q(t);
243
+ let e = K(t);
244
244
  if (e?.mediaUrl || e?.storageTransactionId || e?.seedUid) return e;
245
245
  }
246
- else if (typeof e == "object") return Ae(e);
246
+ else if (typeof e == "object") return Me(e);
247
247
  }
248
248
  }
249
- function je(e, t = U) {
249
+ function Ne(e, t = H) {
250
250
  for (let n of t) {
251
251
  if (!(n in e)) continue;
252
- let t = q(e[n]);
252
+ let t = K(e[n]);
253
253
  if (t) return t;
254
254
  }
255
255
  }
256
256
  //#endregion
257
257
  //#region src/ArweaveClient/transactionTagsByIds.ts
258
- var Me = 100, J = "\n query GetTransactionsTagsByIds($ids: [ID!], $first: Int) {\n transactions(ids: $ids, first: $first) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n";
259
- async function Ne(e, t) {
258
+ var Pe = 100, q = "\n query GetTransactionsTagsByIds($ids: [ID!], $first: Int) {\n transactions(ids: $ids, first: $first) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n";
259
+ async function Fe(e, t) {
260
260
  let n = /* @__PURE__ */ new Map(), r = Array.from(new Set(e.filter((e) => typeof e == "string" && e.trim())));
261
261
  if (r.length === 0) return n;
262
- let i = t?.client ?? l.getArweaveClient(), a = Math.max(1, Math.min(t?.batchSize ?? 100, 100));
262
+ let i = t?.client ?? d.getArweaveClient(), a = Math.max(1, Math.min(t?.batchSize ?? 100, 100));
263
263
  for (let e = 0; e < r.length; e += a) {
264
264
  let o = r.slice(e, e + a);
265
265
  try {
266
- let e = await i.request(J, {
266
+ let e = await i.request(q, {
267
267
  ids: o,
268
268
  first: o.length
269
269
  });
@@ -282,15 +282,15 @@ async function Ne(e, t) {
282
282
  }
283
283
  //#endregion
284
284
  //#region src/ArweaveClient/uploadApiVerification.ts
285
- function Y(e) {
285
+ function J(e) {
286
286
  return e.trim().replace(/\/+$/, "");
287
287
  }
288
- function X(e, t) {
289
- return `${Y(e)}/api/upload/arweave/data/${encodeURIComponent(t)}`;
288
+ function Y(e, t) {
289
+ return `${J(e)}/api/upload/arweave/data/${encodeURIComponent(t)}`;
290
290
  }
291
- var Pe = 45e3;
292
- async function Fe(e, t, n) {
293
- let r = X(e, t), i = n?.timeoutMs ?? Pe, a = new AbortController(), o = setTimeout(() => a.abort(), i);
291
+ var Ie = 45e3;
292
+ async function Le(e, t, n) {
293
+ let r = Y(e, t), i = n?.timeoutMs ?? Ie, a = new AbortController(), o = setTimeout(() => a.abort(), i);
294
294
  try {
295
295
  let e = await fetch(r, { signal: a.signal });
296
296
  return clearTimeout(o), e.status === 404 ? {
@@ -315,16 +315,16 @@ async function Fe(e, t, n) {
315
315
  }
316
316
  //#endregion
317
317
  //#region src/ArweaveClient/arweaveL1UploadApi.ts
318
- var Ie = "\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";
319
- function Z(e, t) {
320
- return `${Y(e)}/api/upload/arweave/status/${encodeURIComponent(t)}`;
318
+ var Re = "\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";
319
+ function X(e, t) {
320
+ return `${J(e)}/api/upload/arweave/status/${encodeURIComponent(t)}`;
321
321
  }
322
- function Le(e) {
322
+ function ze(e) {
323
323
  let t = e.l1;
324
324
  return t ? t.meetsMinConfirmations === !0 || t.confirmed === !0 : !1;
325
325
  }
326
- async function Re(e, t) {
327
- let n = Z(e, t);
326
+ async function Z(e, t) {
327
+ let n = X(e, t);
328
328
  try {
329
329
  let e = await fetch(n);
330
330
  if (!e.ok) return null;
@@ -342,7 +342,7 @@ async function Q(e, t, n) {
342
342
  method: "POST",
343
343
  headers: { "Content-Type": "application/json" },
344
344
  body: JSON.stringify({
345
- query: Ie,
345
+ query: Re,
346
346
  variables: { id: t }
347
347
  }),
348
348
  signal: n?.signal
@@ -366,34 +366,34 @@ async function Q(e, t, n) {
366
366
  return null;
367
367
  }
368
368
  }
369
- async function ze(t, n, r) {
370
- let i = p(), a = t?.trim(), o = "https", s = null;
369
+ async function Be(e, t, n) {
370
+ let i = M(), a = e?.trim(), o = "https", s = null;
371
371
  if (a) try {
372
372
  let e = new URL(a);
373
373
  o = e.protocol === "http:" ? "http" : "https", s = e.hostname || null;
374
374
  } catch {
375
375
  s = null;
376
376
  }
377
- let c = s && s.length > 0 ? e(s) : [...i], l = r?.signal;
377
+ let c = s && s.length > 0 ? p(s) : [...i], l = n?.signal;
378
378
  for (let e of c) {
379
- let t = `${o}://${e}`;
380
- if (!await u(t, l ?? void 0)) continue;
381
- let i = await Q(`${o}://${e}/graphql`, n, r);
382
- if (i !== null) return i;
379
+ let i = `${o}://${e}`;
380
+ if (!await r(i, l ?? void 0)) continue;
381
+ let a = await Q(`${o}://${e}/graphql`, t, n);
382
+ if (a !== null) return a;
383
383
  }
384
384
  return null;
385
385
  }
386
386
  //#endregion
387
387
  //#region src/gateway/publicUrl.ts
388
388
  function $() {
389
- return f()?.publicArweaveBaseUrl ?? l.getBaseUrl();
389
+ return m()?.publicArweaveBaseUrl ?? d.getBaseUrl();
390
390
  }
391
- function Be(e) {
391
+ function Ve(e) {
392
392
  return `${$()}/raw/${e}`;
393
393
  }
394
394
  //#endregion
395
395
  //#region src/gateway/seedGatewayConfig.ts
396
- function Ve(e) {
396
+ function He(e) {
397
397
  let t = e.gateway ?? {};
398
398
  return {
399
399
  transport: t.transport,
@@ -409,7 +409,7 @@ function Ve(e) {
409
409
  }
410
410
  };
411
411
  }
412
- function He(e) {
412
+ function Ue(e) {
413
413
  return {
414
414
  transport: e.gatewayTransport,
415
415
  arweaveDomain: e.arweaveDomain,
@@ -423,6 +423,6 @@ function He(e) {
423
423
  };
424
424
  }
425
425
  //#endregion
426
- export { s as ARWEAVE_HOST_ENV_KEYS, l as ArweaveClient, l as BaseArweaveClient, te as DEFAULT_ARWEAVE_GATEWAYS, E as DEFAULT_ARWEAVE_GRAPHQL_URL, ee as DEFAULT_ARWEAVE_HOST, _ as DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS, pe as DEFAULT_GATEWAY_SIDECAR_HOST, fe as DEFAULT_GATEWAY_SIDECAR_PORT, me as DEFAULT_SEED_FEED_HYPER_KEY, se as DEFAULT_SEED_GATEWAY_HYPER_KEY, A as DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS, S as DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS, ne as DuplicateArweaveModuleError, oe as GET_ARWEAVE_TRANSACTIONS, J as GET_TRANSACTIONS_TAGS_BY_IDS, o as GET_TRANSACTION_TAGS, U as SEED_RSS_IMAGE_RELATION_FIELD_KEYS, Me as TRANSACTION_TAGS_BATCH_SIZE, ce as assertSingleArweaveModule, le as beginGatewayHostHalfOpenProbe, V as classifyMediaRef, a as configureGatewayCircuitBreaker, ge as ensureArweaveReadGatewayForFallback, N as ensureReadGatewaySelected, w as fetchArweaveRawFromBaseUrl, k as fetchArweaveRawTextAcrossGateways, D as fetchTransactionStatusAcrossGateways, ve as getArweaveReadBaseUrls, e as getArweaveReadGatewayHostsForPrimary, Re as getArweaveUploadStatus, De as getArweaveUrlForTransaction, p as getDefaultArweaveReadGatewayHostsOrdered, H as getFeedItemStringField, i as getGatewayHostCircuitState, ye as getLastHealthyReadGatewayHost, M as getPreferredArweaveReadBaseUrls, $ as getPublicArweaveBaseUrl, Be as getPublicArweaveRawUrl, x as getReadGatewayHostsForConfig, b as getResolvedArweaveReadBaseUrls, f as getResolvedSeedGatewayEndpoints, n as getResponseMediaType, Ne as getTransactionTagsByIds, X as getUploadApiArweaveDataUrl, Z as getUploadApiArweaveStatusUrl, Fe as getUploadPipelineTransactionStatus, ue as hasArweaveContentReadTransform, _e as invalidateReadGatewayCache, g as invalidateSidecarProbeCache, Le as isArweaveL1AnchoringComplete, I as isEasAttestationExplorerUrl, ae as isGatewayHostCircuitOpen, j as isKnownArweaveGatewayHostname, F as isReadGatewayKnownHealthy, y as listOpenGatewayCircuitHosts, C as mergePrimaryHostWithDefaults, Ee as normalizeFeedItemFields, t as normalizeGatewayHostKey, L as normalizeRelationPropertyValue, Y as normalizeUploadApiBaseUrl, u as probeGateway, Q as queryArweaveGatewayTransaction, ze as queryArweaveGatewayTransactionWithFallback, c as readArweaveContentResponse, v as recordGatewayHostFailure, re as recordGatewayHostSuccess, be as resetArweaveClientOwnerForTests, r as resetArweaveReadGatewayForTests, ie as resetGatewayCircuitBreakerForTests, O as resolveArweaveHostFromEnv, h as resolveProxyBaseUrl, he as resolveSeedGatewayEndpoints, z as resolveSeedIdsFromRefString, je as resolveSeedRssImageRelationFromItem, q as resolveSeedRssImageRelationRef, He as seedGatewayConfigFromClientContext, Ve as seedGatewayConfigFromSeedConfig, P as selectFirstHealthyReadGateway, d as setArweaveContentReadTransform, m as setPreferredArweaveReadBaseUrls, T as setResolvedSeedGatewayEndpoints, de as transformArweaveContent };
426
+ export { ee as ARWEAVE_HOST_ENV_KEYS, d as ArweaveClient, d as BaseArweaveClient, D as DEFAULT_ARWEAVE_GATEWAYS, u as DEFAULT_ARWEAVE_GRAPHQL_URL, fe as DEFAULT_ARWEAVE_HOST, he as DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS, de as DEFAULT_GATEWAY_SIDECAR_HOST, pe as DEFAULT_GATEWAY_SIDECAR_PORT, ie as DEFAULT_SEED_FEED_HYPER_KEY, e as DEFAULT_SEED_GATEWAY_HYPER_KEY, C as DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS, O as DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS, j as DefaultArweaveClient, ae as DuplicateArweaveModuleError, o as GET_ARWEAVE_TRANSACTIONS, q as GET_TRANSACTIONS_TAGS_BY_IDS, l as GET_TRANSACTION_TAGS, H as SEED_RSS_IMAGE_RELATION_FIELD_KEYS, Pe as TRANSACTION_TAGS_BATCH_SIZE, xe as assertSingleArweaveModule, a as beginGatewayHostHalfOpenProbe, B as classifyMediaRef, i as configureGatewayCircuitBreaker, T as ensureArweaveReadGatewayForFallback, be as ensureReadGatewaySelected, A as fetchArweaveRawFromBaseUrl, _e as fetchArweaveRawTextAcrossGateways, _ as fetchTransactionStatusAcrossGateways, x as getArweaveReadBaseUrls, p as getArweaveReadGatewayHostsForPrimary, Z as getArweaveUploadStatus, ke as getArweaveUrlForTransaction, M as getDefaultArweaveReadGatewayHostsOrdered, V as getFeedItemStringField, ne as getGatewayHostCircuitState, ge as getLastHealthyReadGatewayHost, ve as getPreferredArweaveReadBaseUrls, $ as getPublicArweaveBaseUrl, Ve as getPublicArweaveRawUrl, g as getReadGatewayHostsForConfig, N as getResolvedArweaveReadBaseUrls, m as getResolvedSeedGatewayEndpoints, le as getResponseMediaType, Fe as getTransactionTagsByIds, Y as getUploadApiArweaveDataUrl, X as getUploadApiArweaveStatusUrl, Le as getUploadPipelineTransactionStatus, c as hasArweaveContentReadTransform, ye as invalidateReadGatewayCache, h as invalidateSidecarProbeCache, ze as isArweaveL1AnchoringComplete, I as isEasAttestationExplorerUrl, b as isGatewayHostCircuitOpen, w as isKnownArweaveGatewayHostname, oe as isReadGatewayKnownHealthy, t as listOpenGatewayCircuitHosts, k as mergePrimaryHostWithDefaults, Oe as normalizeFeedItemFields, y as normalizeGatewayHostKey, L as normalizeRelationPropertyValue, J as normalizeUploadApiBaseUrl, r as probeGateway, Q as queryArweaveGatewayTransaction, Be as queryArweaveGatewayTransactionWithFallback, ce as readArweaveContentResponse, f as recordGatewayHostFailure, te as recordGatewayHostSuccess, n as resetArweaveClientOwnerForTests, F as resetArweaveReadGatewayForTests, re as resetGatewayCircuitBreakerForTests, v as resolveArweaveHostFromEnv, me as resolveProxyBaseUrl, P as resolveSeedGatewayEndpoints, R as resolveSeedIdsFromRefString, Ne as resolveSeedRssImageRelationFromItem, K as resolveSeedRssImageRelationRef, Ue as seedGatewayConfigFromClientContext, He as seedGatewayConfigFromSeedConfig, se as selectFirstHealthyReadGateway, ue as setArweaveContentReadTransform, E as setPreferredArweaveReadBaseUrls, S as setResolvedSeedGatewayEndpoints, s as transformArweaveContent };
427
427
 
428
428
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["trimOrEmpty","getArweaveReadGatewayHostsForPrimary","normalizeGatewayHostKey","getResponseMediaType","resetArweaveReadGatewayForTests","getGatewayHostCircuitState","configureGatewayCircuitBreaker","GET_TRANSACTION_TAGS","ARWEAVE_HOST_ENV_KEYS","readArweaveContentResponse","BaseArweaveClient","DEFAULT_ARWEAVE_HOST","DEFAULT_ARWEAVE_GATEWAYS","DuplicateArweaveModuleError","recordGatewayHostSuccess","resetGatewayCircuitBreakerForTests","isGatewayHostCircuitOpen","GET_ARWEAVE_TRANSACTIONS","DEFAULT_SEED_GATEWAY_HYPER_KEY","assertSingleArweaveModule","probeGateway","beginGatewayHostHalfOpenProbe","setArweaveContentReadTransform","hasArweaveContentReadTransform","transformArweaveContent","DEFAULT_GATEWAY_SIDECAR_PORT","DEFAULT_GATEWAY_SIDECAR_HOST","DEFAULT_SEED_FEED_HYPER_KEY","resolveSeedGatewayEndpoints","ensureArweaveReadGatewayForFallback","invalidateReadGatewayCache","getArweaveReadBaseUrls","getResolvedSeedGatewayEndpoints","getDefaultArweaveReadGatewayHostsOrdered","setPreferredArweaveReadBaseUrls","resolveProxyBaseUrl","invalidateSidecarProbeCache","DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS","recordGatewayHostFailure","listOpenGatewayCircuitHosts","getResolvedArweaveReadBaseUrls","getReadGatewayHostsForConfig","DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS","mergePrimaryHostWithDefaults","fetchArweaveRawFromBaseUrl","setResolvedSeedGatewayEndpoints","DEFAULT_ARWEAVE_GRAPHQL_URL","fetchTransactionStatusAcrossGateways","resolveArweaveHostFromEnv","fetchArweaveRawTextAcrossGateways","DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS","isKnownArweaveGatewayHostname","getPreferredArweaveReadBaseUrls","ensureReadGatewaySelected","selectFirstHealthyReadGateway","isReadGatewayKnownHealthy","getLastHealthyReadGatewayHost","resetArweaveClientOwnerForTests","EAS_ATTESTATION_EXPLORER_HOST","isEasAttestationExplorerUrl","trimmed","url","parsed","parseLocalIdOrUid","id","localIdOrUid","normalizeRelationPropertyValue","value","o","LOCAL_SEED_REF","resolveSeedIdsFromRefString","fromCorrect","s","ARWEAVE_TX_ID","trimOrEmpty$1","raw","coalesceStringField","v","item","key","unwrapRelationString","fromObj","classifyMediaRef","treatAs","options","unwrapped","ids","getFeedItemStringField","direct","snake","l","alt","parts","alt2","p","normalizeFeedItemFields","out","fieldKey","descriptor","manifest","classification","getArweaveUrlForTransaction","transactionId","SEED_RSS_IMAGE_RELATION_FIELD_KEYS","trimOrEmpty","readObjectStringField","keys","obj","suffixes","rawKey","rawValue","normalizedLower","suffix","tryGatewayUrlForTxId","txId","resolveMediaUrlFromParts","fromTx","arweaveUrl","resolveFromString","mediaUrl","resolveFromObject","storageTransactionId","seedUid","link","resolveSeedRssImageRelationRef","entry","resolved","resolveSeedRssImageRelationFromItem","fieldKeys","TRANSACTION_TAGS_BATCH_SIZE","GET_TRANSACTIONS_TAGS_BY_IDS","getTransactionTagsByIds","transactionIds","client","batchSize","i","batch","result","edge","node","tag","error","normalizeUploadApiBaseUrl","baseUrl","getUploadApiArweaveDataUrl","txOrDataItemId","DEFAULT_UPLOAD_STATUS_TIMEOUT_MS","getUploadPipelineTransactionStatus","uploadApiBaseUrl","timeoutMs","controller","timeoutId","response","err","GATEWAY_TX_QUERY","getUploadApiArweaveStatusUrl","dataItemId","isArweaveL1AnchoringComplete","l1","status","getArweaveUploadStatus","body","queryArweaveGatewayTransaction","graphqlUrl","init","json","tx","queryArweaveGatewayTransactionWithFallback","defaults","protocol","preferredHost","u","ordered","signal","host","base","getPublicArweaveBaseUrl","getPublicArweaveRawUrl","seedGatewayConfigFromSeedConfig","gateway","config","seedGatewayConfigFromClientContext","context"],"sources":["../src/easAttestationUrl.ts","../src/relationSeedRef.ts","../src/mediaRef.ts","../src/resolveSeedRssImageRelationRef.ts","../src/ArweaveClient/transactionTagsByIds.ts","../src/ArweaveClient/uploadApiVerification.ts","../src/ArweaveClient/arweaveL1UploadApi.ts","../src/gateway/publicUrl.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 type { GraphQLClient } from 'graphql-request'\nimport { BaseArweaveClient } from './BaseArweaveClient.js'\nimport type { TransactionTag } from '../types/arweave.js'\n\n/** Arweave GraphQL serves at most 100 transactions per page. */\nexport const TRANSACTION_TAGS_BATCH_SIZE = 100\n\n/**\n * Plain string, not a codegen document: the `graphql()` helper from the client preset only knows\n * documents present when codegen last ran.\n */\nexport const GET_TRANSACTIONS_TAGS_BY_IDS = /* GraphQL */ `\n query GetTransactionsTagsByIds($ids: [ID!], $first: Int) {\n transactions(ids: $ids, first: $first) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n`\n\ntype TransactionsTagsByIdsResult = {\n transactions?: {\n edges?: Array<{ node?: { id?: string; tags?: TransactionTag[] | null } | null } | null> | null\n } | null\n}\n\n/**\n * Tags of many transactions in batched GraphQL requests (`transactions(ids: [...])`), keyed by id.\n * A transaction the gateway does not know yet (e.g. just published, not indexed) is absent from\n * the map; a failed batch is skipped (logged through `onError`) rather than failing the caller.\n */\nexport async function getTransactionTagsByIds(\n transactionIds: readonly string[],\n options?: { client?: GraphQLClient; batchSize?: number; onError?: (error: unknown) => void },\n): Promise<Map<string, TransactionTag[]>> {\n const out = new Map<string, TransactionTag[]>()\n const ids = Array.from(new Set(transactionIds.filter((id) => typeof id === 'string' && id.trim())))\n if (ids.length === 0) return out\n\n const client = options?.client ?? BaseArweaveClient.getArweaveClient()\n const batchSize = Math.max(1, Math.min(options?.batchSize ?? TRANSACTION_TAGS_BATCH_SIZE, TRANSACTION_TAGS_BATCH_SIZE))\n\n for (let i = 0; i < ids.length; i += batchSize) {\n const batch = ids.slice(i, i + batchSize)\n try {\n const result = await client.request<TransactionsTagsByIdsResult>(GET_TRANSACTIONS_TAGS_BY_IDS, {\n ids: batch,\n first: batch.length,\n })\n for (const edge of result?.transactions?.edges ?? []) {\n const node = edge?.node\n if (!node?.id) continue\n out.set(\n node.id,\n (node.tags ?? []).map((tag) => ({ name: tag.name, value: tag.value })),\n )\n }\n } catch (error) {\n options?.onError?.(error)\n }\n }\n return out\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 { BaseArweaveClient } from '../ArweaveClient/BaseArweaveClient.js'\nimport { getResolvedSeedGatewayEndpoints } from './gatewayState.js'\n\n/**\n * Base URL of the public gateway for links written into published content. The read host\n * ({@link BaseArweaveClient.getBaseUrl}) can be a local Hyper sidecar or an app-server proxy,\n * which nobody else can reach. Before client init resolves endpoints, falls back to the read host.\n */\nexport function getPublicArweaveBaseUrl(): string {\n return getResolvedSeedGatewayEndpoints()?.publicArweaveBaseUrl ?? BaseArweaveClient.getBaseUrl()\n}\n\n/** `{public gateway}/raw/{transactionId}`, for URLs that get uploaded or attested. */\nexport function getPublicArweaveRawUrl(transactionId: string): string {\n return `${getPublicArweaveBaseUrl()}/raw/${transactionId}`\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 preferredReadBaseUrls: gateway.preferredReadBaseUrls,\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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"}
1
+ {"version":3,"file":"index.js","names":["trimOrEmpty","DEFAULT_SEED_GATEWAY_HYPER_KEY","listOpenGatewayCircuitHosts","resetArweaveClientOwnerForTests","probeGateway","configureGatewayCircuitBreaker","beginGatewayHostHalfOpenProbe","GET_ARWEAVE_TRANSACTIONS","transformArweaveContent","hasArweaveContentReadTransform","GET_TRANSACTION_TAGS","DEFAULT_ARWEAVE_GRAPHQL_URL","ARWEAVE_HOST_ENV_KEYS","BaseArweaveClient","recordGatewayHostFailure","recordGatewayHostSuccess","getGatewayHostCircuitState","resetGatewayCircuitBreakerForTests","DEFAULT_SEED_FEED_HYPER_KEY","DuplicateArweaveModuleError","isReadGatewayKnownHealthy","selectFirstHealthyReadGateway","readArweaveContentResponse","getResponseMediaType","setArweaveContentReadTransform","DEFAULT_GATEWAY_SIDECAR_HOST","DEFAULT_ARWEAVE_HOST","DEFAULT_GATEWAY_SIDECAR_PORT","resolveProxyBaseUrl","DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS","getLastHealthyReadGatewayHost","fetchArweaveRawTextAcrossGateways","getPreferredArweaveReadBaseUrls","getArweaveReadGatewayHostsForPrimary","getResolvedSeedGatewayEndpoints","invalidateSidecarProbeCache","getReadGatewayHostsForConfig","fetchTransactionStatusAcrossGateways","resolveArweaveHostFromEnv","normalizeGatewayHostKey","isGatewayHostCircuitOpen","getArweaveReadBaseUrls","setResolvedSeedGatewayEndpoints","DEFAULT_TRANSACTION_STATUS_TIMEOUT_MS","isKnownArweaveGatewayHostname","ensureArweaveReadGatewayForFallback","setPreferredArweaveReadBaseUrls","DEFAULT_ARWEAVE_GATEWAYS","DEFAULT_TRANSACTION_STATUS_TOTAL_TIMEOUT_MS","mergePrimaryHostWithDefaults","fetchArweaveRawFromBaseUrl","DefaultArweaveClient","getDefaultArweaveReadGatewayHostsOrdered","getResolvedArweaveReadBaseUrls","resolveSeedGatewayEndpoints","resetArweaveReadGatewayForTests","invalidateReadGatewayCache","ensureReadGatewaySelected","assertSingleArweaveModule","EAS_ATTESTATION_EXPLORER_HOST","isEasAttestationExplorerUrl","trimmed","url","parsed","parseLocalIdOrUid","id","localIdOrUid","normalizeRelationPropertyValue","value","o","LOCAL_SEED_REF","resolveSeedIdsFromRefString","fromCorrect","s","ARWEAVE_TX_ID","trimOrEmpty$1","raw","coalesceStringField","v","item","key","unwrapRelationString","fromObj","classifyMediaRef","treatAs","options","unwrapped","ids","getFeedItemStringField","direct","snake","l","alt","parts","alt2","p","normalizeFeedItemFields","out","fieldKey","descriptor","manifest","classification","getArweaveUrlForTransaction","transactionId","SEED_RSS_IMAGE_RELATION_FIELD_KEYS","trimOrEmpty","readObjectStringField","keys","obj","suffixes","rawKey","rawValue","normalizedLower","suffix","tryGatewayUrlForTxId","txId","resolveMediaUrlFromParts","fromTx","arweaveUrl","resolveFromString","mediaUrl","resolveFromObject","storageTransactionId","seedUid","link","resolveSeedRssImageRelationRef","entry","resolved","resolveSeedRssImageRelationFromItem","fieldKeys","TRANSACTION_TAGS_BATCH_SIZE","GET_TRANSACTIONS_TAGS_BY_IDS","getTransactionTagsByIds","transactionIds","client","batchSize","i","batch","result","edge","node","tag","error","normalizeUploadApiBaseUrl","baseUrl","getUploadApiArweaveDataUrl","txOrDataItemId","DEFAULT_UPLOAD_STATUS_TIMEOUT_MS","getUploadPipelineTransactionStatus","uploadApiBaseUrl","timeoutMs","controller","timeoutId","response","err","GATEWAY_TX_QUERY","getUploadApiArweaveStatusUrl","dataItemId","isArweaveL1AnchoringComplete","l1","status","getArweaveUploadStatus","body","queryArweaveGatewayTransaction","graphqlUrl","init","json","tx","queryArweaveGatewayTransactionWithFallback","defaults","protocol","preferredHost","u","ordered","signal","host","base","getPublicArweaveBaseUrl","getPublicArweaveRawUrl","seedGatewayConfigFromSeedConfig","gateway","config","seedGatewayConfigFromClientContext","context"],"sources":["../src/easAttestationUrl.ts","../src/relationSeedRef.ts","../src/mediaRef.ts","../src/resolveSeedRssImageRelationRef.ts","../src/ArweaveClient/transactionTagsByIds.ts","../src/ArweaveClient/uploadApiVerification.ts","../src/ArweaveClient/arweaveL1UploadApi.ts","../src/gateway/publicUrl.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 type { GraphQLClient } from 'graphql-request'\nimport { BaseArweaveClient } from './BaseArweaveClient.js'\nimport type { TransactionTag } from '../types/arweave.js'\n\n/** Arweave GraphQL serves at most 100 transactions per page. */\nexport const TRANSACTION_TAGS_BATCH_SIZE = 100\n\n/**\n * Plain string, not a codegen document: the `graphql()` helper from the client preset only knows\n * documents present when codegen last ran.\n */\nexport const GET_TRANSACTIONS_TAGS_BY_IDS = /* GraphQL */ `\n query GetTransactionsTagsByIds($ids: [ID!], $first: Int) {\n transactions(ids: $ids, first: $first) {\n edges {\n node {\n id\n tags {\n name\n value\n }\n }\n }\n }\n }\n`\n\ntype TransactionsTagsByIdsResult = {\n transactions?: {\n edges?: Array<{ node?: { id?: string; tags?: TransactionTag[] | null } | null } | null> | null\n } | null\n}\n\n/**\n * Tags of many transactions in batched GraphQL requests (`transactions(ids: [...])`), keyed by id.\n * A transaction the gateway does not know yet (e.g. just published, not indexed) is absent from\n * the map; a failed batch is skipped (logged through `onError`) rather than failing the caller.\n */\nexport async function getTransactionTagsByIds(\n transactionIds: readonly string[],\n options?: { client?: GraphQLClient; batchSize?: number; onError?: (error: unknown) => void },\n): Promise<Map<string, TransactionTag[]>> {\n const out = new Map<string, TransactionTag[]>()\n const ids = Array.from(new Set(transactionIds.filter((id) => typeof id === 'string' && id.trim())))\n if (ids.length === 0) return out\n\n const client = options?.client ?? BaseArweaveClient.getArweaveClient()\n const batchSize = Math.max(1, Math.min(options?.batchSize ?? TRANSACTION_TAGS_BATCH_SIZE, TRANSACTION_TAGS_BATCH_SIZE))\n\n for (let i = 0; i < ids.length; i += batchSize) {\n const batch = ids.slice(i, i + batchSize)\n try {\n const result = await client.request<TransactionsTagsByIdsResult>(GET_TRANSACTIONS_TAGS_BY_IDS, {\n ids: batch,\n first: batch.length,\n })\n for (const edge of result?.transactions?.edges ?? []) {\n const node = edge?.node\n if (!node?.id) continue\n out.set(\n node.id,\n (node.tags ?? []).map((tag) => ({ name: tag.name, value: tag.value })),\n )\n }\n } catch (error) {\n options?.onError?.(error)\n }\n }\n return out\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 { BaseArweaveClient } from '../ArweaveClient/BaseArweaveClient.js'\nimport { getResolvedSeedGatewayEndpoints } from './gatewayState.js'\n\n/**\n * Base URL of the public gateway for links written into published content. The read host\n * ({@link BaseArweaveClient.getBaseUrl}) can be a local Hyper sidecar or an app-server proxy,\n * which nobody else can reach. Before client init resolves endpoints, falls back to the read host.\n */\nexport function getPublicArweaveBaseUrl(): string {\n return getResolvedSeedGatewayEndpoints()?.publicArweaveBaseUrl ?? BaseArweaveClient.getBaseUrl()\n}\n\n/** `{public gateway}/raw/{transactionId}`, for URLs that get uploaded or attested. */\nexport function getPublicArweaveRawUrl(transactionId: string): string {\n return `${getPublicArweaveBaseUrl()}/raw/${transactionId}`\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 preferredReadBaseUrls: gateway.preferredReadBaseUrls,\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,IAAM2D,KAAgC;AAKtC,SAAgBC,EAA4B,GAAsB;CAChE,IAAMC,IAAUC,EAAI,KAAK;CACzB,IAAI,CAACD,GAAS,OAAO;CACrB,IAAI;EACF,IAAME,IAAS,IAAI,IAAIF,CAAO;EAI9B,OAHKF,GAA8B,KAAKI,EAAO,QAAQ,IAGhD,yBAAyB,KAAKA,EAAO,QAAQ,IAF3C;CAGX,QAAQ;EACN,OAAO;CACT;AACF;;;AChBA,SAASC,GAAkB,GAA0D;CACnF,IAAMC,IAAK;EAAE,SAAS,KAAA;EAAiC,KAAK,KAAA;CAAgC;CAQ5F,OAPKC,MACDA,EAAa,WAAW,OAC1B,EAAG,UAAUA,IAEXA,EAAa,WAAW,IAAI,KAAKA,EAAa,WAAW,OAC3D,EAAG,MAAMA,KAEJD;AACT;AAEA,SAAgBE,EAA+B,GAAoC;CACjF,IAAIC,KAAS,MACb;MAAI,OAAOA,KAAU,UAAU;GAC7B,IAAM,IAAIA,EAAM,KAAK;GACrB,OAAO,MAAM,KAAS,KAAA,IAAJ;EACpB;EACA,IAAI,OAAOA,KAAU,YAAYA,GAAgB;GAC/C,IAAMC,IAAID;GACV,IAAI,OAAOC,EAAE,eAAgB,YAAYA,EAAE,YAAY,KAAK,MAAM,IAChE,OAAOA,EAAE,YAAY,KAAK;GAE5B,IAAI,OAAOA,EAAE,WAAY,YAAYA,EAAE,QAAQ,KAAK,MAAM,IACxD,OAAOA,EAAE,QAAQ,KAAK;EAE1B;CATA;AAWF;AAEA,IAAMC,KAAiB;AAEvB,SAAgBC,EAA4B,GAG1C;CACA,IAAMC,IAAcR,GAAkBS,CAAC;CAOvC,OANID,EAAY,WAAWA,EAAY,MAC9B;EAAE,aAAaA,EAAY;EAAS,SAASA,EAAY;CAAI,IAElEF,GAAe,KAAKG,CAAC,KAAK,CAACA,EAAE,WAAW,IAAI,IACvC,EAAE,aAAaA,EAAE,IAEnB,CAAC;AACV;;;ACLA,IAAMC,KAAgB;AAEtB,SAAS1E,GAAY,GAAwC;CAE3D,OADI4E,KAAO,OAAa,KACjB,OAAOA,KAAQ,WAAWA,EAAI,KAAK,IAAI,OAAOA,CAAG,CAAC,CAAC,KAAK;AACjE;AAEA,SAASC,EAAoB,GAA+B,GAAqB;CAC/E,IAAMC,IAAIC,EAAKC;CAIf,OAHIF,KAAK,OAAa,KAClB,OAAOA,KAAM,WAAiBA,EAAE,KAAK,IACrC,OAAOA,KAAM,YAAY,OAAOA,KAAM,YAAkB,OAAOA,CAAC,IAC7D;AACT;AAEA,SAASG,GAAqB,GAAqB;CACjD,IAAM,IAAIL,EAAI,KAAK;CACnB,IAAI,CAAC,GAAG,OAAO;CACf,IAAI;EAEF,IAAMM,IAAUf,EADD,KAAK,MAAM,CACqB,CAAM;EACrD,IAAIe,GAAS,OAAOA;CACtB,QAAQ,CAER;CACA,OAAO;AACT;AAEA,SAAgBC,EACd,GACA,GACwB;CACxB,IAAMV,IAAIzE,GAAY4E,CAAG;CACzB,IAAI,CAACH,GACH,OAAO,EAAE,MAAM,QAAQ;CAGzB,IAAMW,IAAUC,GAAS;CACzB,IAAID,MAAY,OACd,OAAO;EAAE,MAAM;EAAO,MAAMX;CAAE;CAEhC,IAAIW,MAAY,aACd,OAAO;EAAE,MAAM;EAAe,MAAMX;CAAE;CAExC,IAAIW,MAAY,WAId,OAHIX,EAAE,WAAW,IAAI,KAAKA,EAAE,WAAW,KAC9B;EAAE,MAAM;EAAW,KAAKA;CAAE,IAE5B;EAAE,MAAM;EAAW,KAAKA;CAAE;CAGnC,IACEA,EAAE,WAAW,SAAS,KACtBA,EAAE,WAAW,UAAU,KACvBA,EAAE,WAAW,OAAO,KACpBA,EAAE,WAAW,OAAO,GAKpB,OAHIb,EAA4Ba,CAAC,IACxB;EAAE,MAAM;EAAe,MAAMA;CAAE,IAEjC;EAAE,MAAM;EAAO,MAAMA;CAAE;CAGhC,IAAMa,IAAYL,GAAqBR,CAAC,GAClCc,IAAMhB,EAA4Be,CAAS;CAgBjD,OAfIC,EAAI,UACC;EAAE,MAAM;EAAW,KAAKA,EAAI;CAAQ,IAEzCA,EAAI,cACC;EAAE,MAAM;EAAe,SAASA,EAAI;CAAY,IAGrDD,EAAU,WAAW,IAAI,KAAKA,EAAU,WAAW,KAC9C;EAAE,MAAM;EAAW,KAAKA;CAAU,IAGvCZ,GAAc,KAAKY,CAAS,KAAK,CAACA,EAAU,WAAW,IAAI,IACtD;EAAE,MAAM;EAAe,MAAMA;CAAU,IAGzC;EAAE,MAAM;EAAW,KAAKb;CAAE;AACnC;AAuBA,SAAgBe,EAAuB,GAA+B,GAAqB;CACzF,IAAMC,IAASZ,EAAoBE,GAAMC,CAAG;CAC5C,IAAIS,GAAQ,OAAOA;CACnB,IAAMC,IAAQV,EAAI,QAAQ,WAAW,MAAM,IAAIW,EAAE,YAAY,GAAG;CAChE,IAAID,MAAUV,GAAK;EACjB,IAAMY,IAAMf,EAAoBE,GAAMW,CAAK;EAC3C,IAAIE,GAAK,OAAOA;CAClB;CACA,IAAMC,IAAQb,EAAI,MAAM,GAAG;CAC3B,IAAIa,EAAM,SAAS,GAAG;EAGpB,IAAMC,IAAOjB,EAAoBE,GAD/Bc,EAAM,KAAKA,EAAM,MAAM,CAAC,CAAC,CAAC,KAAK,MAAME,EAAE,OAAO,CAAC,CAAC,CAAC,YAAY,IAAIA,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAC1C;EAC5C,IAAID,GAAM,OAAOA;CACnB;CACA,OAAO;AACT;AAEA,SAAgBE,GACd,GACA,GACsD;CACtD,IAAMC,IAA4D,CAAC;CACnE,KAAK,IAAM,CAACC,GAAUC,MAAe,OAAO,QAAQC,CAAQ,GAAG;EAC7D,IAAMxB,IAAMY,EAAuBT,GAAMmB,CAAQ;EACjD,IAAI,CAACtB,GAAK;GACR,EAAIsB,KAAY,KAAA;GAChB;EACF;EACA,IAAIC,EAAW,SAAS,QAAQ;GAC9B,EAAID,KAAY;IAAE,MAAM;IAAQ;GAAI;GACpC;EACF;EACA,IAAIC,EAAW,SAAS,QAAQ;GAC9B,EAAID,KAAY;IAAE,MAAM;IAAQ;GAAI;GACpC;EACF;EACA,IAAMG,IAAiBlB,EAAiBP,GAAK,EAAE,SAASuB,EAAW,QAAQ,CAAC;EAC5E,EAAID,KAAY;GACd,MAAMC,EAAW;GACjB;GACA;EACF;CACF;CACA,OAAOF;AACT;AAEA,SAAgBK,GAA4B,GAA+B;CACzE,OAAO,GAAGzF,EAAkB,WAAW,EAAE,GAAG0F;AAC9C;;;ACrLA,IAAaC,IAAqC;CAChD;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,SAASC,EAAY,GAAwB;CAI3C,OAHIrC,KAAS,OAAa,KACtB,OAAOA,KAAU,WAAiBA,EAAM,KAAK,IAC7C,OAAOA,KAAU,YAAY,OAAOA,KAAU,YAAkB,OAAOA,CAAK,IACzE;AACT;AAEA,SAASsC,EAAsB,GAA8B,GAAGC,GAAwB;CACtF,KAAK,IAAM3B,KAAO2B,GAAM;EACtB,IAAMlB,IAASgB,EAAYG,EAAI5B,EAAI;EACnC,IAAIS,GAAQ,OAAOA;CACrB;CAEA,IAAMoB,IAAWF,EAAK,KAAK,MAAQ3B,EAAI,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAE,YAAY,CAAC;CACtE,KAAK,IAAM,CAAC8B,GAAQC,MAAa,OAAO,QAAQH,CAAG,GAAG;EAEpD,IAAMI,KADgBF,EAAO,SAAS,GAAG,IAAIA,EAAO,MAAM,GAAG,CAAC,CAAC,IAAI,IAAKA,EAAA,CAClC,YAAY;EAClD,IAAID,EAAS,MAAM,MAAWG,MAAoBC,EAAO,YAAY,CAAC,GAAG;GACvE,IAAM7C,IAAQqC,EAAYM,CAAQ;GAClC,IAAI3C,GAAO,OAAOA;EACpB;CACF;CAEA,OAAO;AACT;AAEA,SAAS8C,EAAqB,GAAkC;CAC9D,IAAMrD,IAAUsD,EAAK,KAAK;CAC1B,IAAKtD,KAAW,GAAQ,WAAW,IAAI,GACvC,IAAI;EACF,OAAO,GAAGhD,EAAkB,WAAW,EAAE,GAAGgD;CAC9C,QAAQ;EACN;CACF;AACF;AAEA,SAASuD,GAAyB,GAGX;CACrB,IAAMD,IAAOtB,EAAM,sBAAsB,KAAK;CAC9C,IAAIsB,GAAM;EACR,IAAME,IAASH,EAAqBC,CAAI;EACxC,IAAIE,GAAQ,OAAOA;CACrB;CAEA,IAAMC,IAAazB,EAAM,YAAY,KAAK;CAC1C,IAAIyB,KAAc,CAAC1D,EAA4B0D,CAAU,GACvD,OAAOA;AAIX;AAEA,SAASC,GAAkB,GAAoD;CAC7E,IAAM1D,IAAUO,EAAM,KAAK;CAG3B,IAFI,CAACP,KAEDD,EAA4BC,CAAO,GACrC;CAGF,IAAMwC,IAAiBlB,EAAiBtB,CAAO;CAC/C,QAAQwC,EAAe,MAAvB;EACE,KAAK,OACH,OAAO,EAAE,UAAUA,EAAe,KAAK;EACzC,KAAK,eAAe;GAClB,IAAMmB,IAAWN,EAAqBb,EAAe,IAAI;GACzD,OAAO;IACL,sBAAsBA,EAAe;IACrC,GAAImB,IAAW,EAAE,YAAS,IAAI,CAAC;GACjC;EACF;EACA,KAAK,WACH,OAAO,EAAE,SAASnB,EAAe,IAAI;EACvC,SAAS;GACP,IAAMmB,IAAWN,EAAqBrD,CAAO;GAO7C,OANI2D,IACK;IACL,sBAAsB3D;IACtB;GACF,IAEF;EACF;CACF;AACF;AAEA,SAAS4D,GAAkB,GAAmE;CAC5F,IAAMC,IAAuBhB,EAC3BE,GACA,wBACA,wBACF,GACMU,IAAaZ,EAAsBE,GAAK,cAAc,aAAa,GACnEe,IAAUjB,EAAsBE,GAAK,WAAW,WAAW,UAAU,GACrEgB,IAAOlB,EAAsBE,GAAK,QAAQ,MAAM,GAEhDY,IACJJ,GAAyB;EAAE;EAAsB;CAAW,CAAC,MAC5DQ,KAAQ,CAAChE,EAA4BgE,CAAI,IAAIA,IAAO,KAAA;CAEvD,IAAKF,KAAyBJ,KAAeK,KAAYH,GAIzD,OAAO;EACL,GAAIE,IAAuB,EAAE,wBAAqB,IAAI,CAAC;EACvD,GAAIJ,KAAc,CAAC1D,EAA4B0D,CAAU,IAAI,EAAE,cAAW,IAAI,CAAC;EAC/E,GAAIK,IAAU,EAAE,WAAQ,IAAI,CAAC;EAC7B,GAAIH,IAAW,EAAE,YAAS,IAAI,CAAC;CACjC;AACF;AAOA,SAAgBK,EAA+B,GAAqD;CAClG,IAAIzD,KAAS,MAEb;MAAI,OAAOA,KAAU,UACnB,OAAOmD,GAAkBnD,CAAK;EAGhC,IAAI,MAAM,QAAQA,CAAK,GACrB,KAAK,IAAM0D,KAAS1D,GAAO;GACzB,IAAM2D,IAAWF,EAA+BC,CAAK;GACrD,IAAIC,GAAU,YAAYA,GAAU,wBAAwBA,GAAU,SACpE,OAAOA;EAEX;OAIF,IAAI,OAAO3D,KAAU,UACnB,OAAOqD,GAAkBrD,CAAgC;CAd3B;AAkBlC;AAKA,SAAgB4D,GACd,GACA,IAA+BxB,GACM;CACrC,KAAK,IAAMxB,KAAOiD,GAAW;EAC3B,IAAI,EAAEjD,KAAOD,IAAO;EACpB,IAAMgD,IAAWF,EAA+B9C,EAAKC,EAAI;EACzD,IAAI+C,GAAU,OAAOA;CACvB;AAEF;;;AC/KA,IAAaG,KAA8B,KAM9BC,IAA6C;AA2B1D,eAAsBC,GACpB,GACA,GACwC;CACxC,IAAMnC,oBAAM,IAAI,IAA8B,GACxCV,IAAM,MAAM,KAAK,IAAI,IAAI8C,EAAe,QAAQ,MAAO,OAAOpE,KAAO,YAAYA,EAAG,KAAK,CAAC,CAAC,CAAC;CAClG,IAAIsB,EAAI,WAAW,GAAG,OAAOU;CAE7B,IAAMqC,IAASjD,GAAS,UAAUxE,EAAkB,iBAAiB,GAC/D0H,IAAY,KAAK,IAAI,GAAG,KAAK,IAAIlD,GAAS,aAAA,KAAA,GAAqE,CAAC;CAEtH,KAAK,IAAImD,IAAI,GAAGA,IAAIjD,EAAI,QAAQ,KAAKgD,GAAW;EAC9C,IAAME,IAAQlD,EAAI,MAAMiD,GAAGA,IAAID,CAAS;EACxC,IAAI;GACF,IAAMG,IAAS,MAAMJ,EAAO,QAAqCH,GAA8B;IAC7F,KAAKM;IACL,OAAOA,EAAM;GACf,CAAC;GACD,KAAK,IAAME,KAAQD,GAAQ,cAAc,SAAS,CAAC,GAAG;IACpD,IAAME,IAAOD,GAAM;IACnB,AAAKC,GAAM,MACX3C,EAAI,IACF2C,EAAK,KACJA,EAAK,QAAQ,CAAC,EAAA,CAAG,KAAK,OAAS;KAAE,MAAMC,EAAI;KAAM,OAAOA,EAAI;IAAM,EAAE,CACvE;GACF;EACF,SAASC,GAAO;GACd,GAAS,UAAUA,CAAK;EAC1B;CACF;CACA,OAAO7C;AACT;;;AChEA,SAAgB8C,EAA0B,GAAyB;CACjE,OAAOC,EAAQ,KAAK,CAAC,CAAC,QAAQ,QAAQ,EAAE;AAC1C;AASA,SAAgBC,EAA2B,GAAiB,GAAgC;CAG1F,OAAO,GAFMF,EAA0BC,CAE7B,EAAK,2BADJ,mBAAmBE,CACY;AAC5C;AAEA,IAAMC,KAAmC;AAWzC,eAAsBC,GACpB,GACA,GACA,GAC4B;CAC5B,IAAMtF,IAAMmF,EAA2BI,GAAkBH,CAAc,GACjEI,IAAYjE,GAAS,aAAa8D,IAClCI,IAAa,IAAI,gBAAgB,GACjCC,IAAY,iBAAiBD,EAAW,MAAM,GAAGD,CAAS;CAEhE,IAAI;EACF,IAAMG,IAAW,MAAM,MAAM3F,GAAK,EAAE,QAAQyF,EAAW,OAAO,CAAC;EAe/D,OAdA,aAAaC,CAAS,GAElBC,EAAS,WAAW,MACf;GAAE,QAAQ;GAAK,WAAW;EAAK,IAGnCA,EAAS,MAIVA,EAAS,QACX,MAAMA,EAAS,KAAK,OAAO,GAGtB;GAAE,QAAQ;GAAK,WAAW;EAAK,KAP7B;GAAE,QAAQA,EAAS;GAAQ,WAAW;EAAK;CAQtD,SAASC,GAAK;EAKZ,OAJA,aAAaF,CAAS,GAClBE,aAAe,SAASA,EAAI,SAAS,eAChC;GAAE,QAAQ;GAAK,WAAW;EAAK,IAEjC;GAAE,QAAQ;GAAK,WAAW;EAAK;CACxC;AACF;;;AC3BA,IAAMC,KAAmB;AAezB,SAAgBC,EAA6B,GAAiB,GAA4B;CAGxF,OAAO,GAFMb,EAA0BC,CAE7B,EAAK,6BADJ,mBAAmBa,CACc;AAC9C;AAKA,SAAgBC,GAA6B,GAA8C;CACzF,IAAMC,IAAKC,EAAO;CAIlB,OAHKD,IACDA,EAAG,0BAA0B,MAC7BA,EAAG,cAAc,KAFL;AAIlB;AAMA,eAAsBE,EACpB,GACA,GAC6C;CAC7C,IAAMnG,IAAM8F,EAA6BP,GAAkBQ,CAAU;CACrE,IAAI;EACF,IAAMJ,IAAW,MAAM,MAAM3F,CAAG;EAChC,IAAI,CAAC2F,EAAS,IACZ,OAAO;EAET,IAAMS,IAAQ,MAAMT,EAAS,KAAK;EAClC,OAAOS,KAAQ,OAAOA,KAAS,WAAWA,IAAO;CACnD,QAAQ;EACN,OAAO;CACT;AACF;AAKA,eAAsBC,EACpB,GACA,GACA,GACsD;CACtD,IAAMrG,IAAMsG,EAAW,KAAK;CAC5B,IAAI,CAACtG,GAAK,OAAO;CAEjB,IAAI;EACF,IAAM2F,IAAW,MAAM,MAAM3F,GAAK;GAChC,QAAQ;GACR,SAAS,EACP,gBAAgB,mBAClB;GACA,MAAM,KAAK,UAAU;IACnB,OAAO6F;IACP,WAAW,EAAE,IAAIE,EAAW;GAC9B,CAAC;GACD,QAAQQ,GAAM;EAChB,CAAC;EAED,IAAI,CAACZ,EAAS,IACZ,OAAO;EAGT,IAAMa,IAAQ,MAAMb,EAAS,KAAK;EAWlC,IAAIa,EAAK,QACP,OAAO;EAGT,IAAMC,IAAKD,EAAK,MAAM;EAUtB,OATKC,IASE;GACL,eAAe,OAAOA,EAAG,MAAO,WAAWA,EAAG,KAAK;GACnD,aAAaA,EAAG,WAAW,MAAM,OAAiC,OAA1B,OAAOA,EAAG,UAAU,EAAE;GAC9D,aAAaA,EAAG,OAAO,UAAU;GACjC,gBAAgBA,EAAG,OAAO,aAAa;EACzC,IAbS;GACL,eAAe;GACf,aAAa;GACb,aAAa;GACb,gBAAgB;EAClB;CASJ,QAAQ;EACN,OAAO;CACT;AACF;AAOA,eAAsBC,GACpB,GACA,GACA,GACsD;CACtD,IAAMC,IAAWrH,EAAyC,GACpDS,IAAUuG,GAAY,KAAK,GAC7BM,IAA6B,SAC7BC,IAA+B;CACnC,IAAI9G,GACF,IAAI;EACF,IAAM+G,IAAI,IAAI,IAAI/G,CAAO;EAEzB,AADA,IAAW+G,EAAE,aAAa,UAAU,SAAS,SAC7C,IAAgBA,EAAE,YAAY;CAChC,QAAQ;EACN,IAAgB;CAClB;CAGF,IAAMC,IACJF,KAAiBA,EAAc,SAAS,IACpC1I,EAAqC0I,CAAa,IAClD,CAAC,GAAGF,CAAQ,GAEZK,IAAST,GAAM;CACrB,KAAK,IAAMU,KAAQF,GAAS;EAC1B,IAAMG,IAAO,GAAGN,EAAS,KAAKK;EAC9B,IAAI,CAAE,MAAM3K,EAAa4K,GAAMF,KAAU,KAAA,CAAS,GAAI;EAEtD,IAAMpC,IAAS,MAAMyB,EAA+B,GADlCO,EAAS,KAAKK,EAAK,WACuBlB,GAAYQ,CAAI;EAC5E,IAAI3B,MAAW,MACb,OAAOA;CAEX;CACA,OAAO;AACT;;;AC7LA,SAAgBuC,IAAkC;CAChD,OAAO/I,EAAgC,CAAC,EAAE,wBAAwBrB,EAAkB,WAAW;AACjG;AAGA,SAAgBqK,GAAuB,GAA+B;CACpE,OAAO,GAAGD,EAAwB,EAAE,OAAO1E;AAC7C;;;ACPA,SAAgB4E,GACd,GACmB;CACnB,IAAMC,IAAUC,EAAO,WAAW,CAAC;CACnC,OAAO;EACL,WAAWD,EAAQ;EACnB,eAAeC,EAAO,iBAAiBD,EAAQ;EAC/C,kBAAkBC,EAAO,oBAAoBD,EAAQ;EACrD,cAAcA,EAAQ,cAAc,KAAK,KAAK,KAAA;EAC9C,uBAAuBA,EAAQ;EAC/B,OAAO;GACL,iBACEA,EAAQ,OAAO,iBAAiB,KAAK,KACrCA,EAAQ,iBAAiB,KAAK,KAE9B,KAAA;GACF,kBAAkBA,EAAQ,OAAO,oBAAoBA,EAAQ;GAC7D,kBAAkBA,EAAQ,OAAO,oBAAoBA,EAAQ;GAC7D,cAAcA,EAAQ,OAAO,gBAAgBA,EAAQ;EACvD;CACF;AACF;AAEA,SAAgBE,GACd,GACmB;CACnB,OAAO;EACL,WAAWC,EAAQ;EACnB,eAAeA,EAAQ;EACvB,kBAAkBA,EAAQ;EAC1B,cAAcA,EAAQ,qBAAqB,KAAK,KAAK,KAAA;EACrD,OAAO;GACL,iBACEA,EAAQ,iBAAiB,KAAK,KAAuC,KAAA;GACvE,kBAAkBA,EAAQ;GAC1B,kBAAkBA,EAAQ;EAC5B;CACF;AACF"}
@@ -1,13 +1,5 @@
1
- import type { IArweaveClient } from '../ArweaveClient/IArweaveClient.js';
2
- import { GraphQLClient } from 'graphql-request';
3
- import type { TransactionStatus, TransactionTag, GetDataOptions, DownloadFilesParams, DownloadResult, CreateTransactionOptions } from '../types/arweave.js';
4
- export declare class NodeArweaveClient implements IArweaveClient {
5
- getArweaveClient(): GraphQLClient;
6
- getTransactionStatus(transactionId: string): Promise<TransactionStatus>;
7
- getTransactionData(transactionId: string, options?: GetDataOptions): Promise<Uint8Array | string>;
8
- getTransactionTags(transactionId: string): Promise<TransactionTag[]>;
9
- createTransaction(data: string | Uint8Array, options?: CreateTransactionOptions): Promise<any>;
10
- downloadFiles(params: DownloadFilesParams): Promise<DownloadResult[]>;
1
+ import { DefaultArweaveClient } from '../default/ArweaveClient.js';
2
+ export declare class NodeArweaveClient extends DefaultArweaveClient {
11
3
  }
12
4
  /** @deprecated Prefer NodeArweaveClient */
13
5
  export declare const ArweaveClient: typeof NodeArweaveClient;
@@ -1 +1 @@
1
- {"version":3,"file":"ArweaveClient.d.ts","sourceRoot":"","sources":["../../src/node/ArweaveClient.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,wBAAwB,EACzB,MAAM,qBAAqB,CAAC;AAkC7B,qBAAa,iBAAkB,YAAW,cAAc;IACtD,gBAAgB,IAAI,aAAa;IAI3B,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKvE,kBAAkB,CACtB,aAAa,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,UAAU,GAAG,MAAM,CAAC;IA0CzB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoBpE,iBAAiB,CACrB,IAAI,EAAE,MAAM,GAAG,UAAU,EACzB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,GAAG,CAAC;IAiBT,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;CAgD5E;AAED,2CAA2C;AAC3C,eAAO,MAAM,aAAa,0BAAoB,CAAC"}
1
+ {"version":3,"file":"ArweaveClient.d.ts","sourceRoot":"","sources":["../../src/node/ArweaveClient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAA;AAElE,qBAAa,iBAAkB,SAAQ,oBAAoB;CAAG;AAE9D,2CAA2C;AAC3C,eAAO,MAAM,aAAa,0BAAoB,CAAA"}