@seedprotocol/arweave 0.6.6 → 0.6.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,26 +1,26 @@
1
- import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as ee, p as u, r as d, s as f, t as te, u as p } from "./queries-BLXr3teJ.js";
1
+ import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as ee, p as u, r as d, s as f, t as te, u as ne } from "./queries-BwzzEwk1.js";
2
2
  //#region src/easAttestationUrl.ts
3
- var ne = /(^|\.)easscan\.(org|xyz)$/i;
4
- function m(e) {
3
+ var re = /(^|\.)easscan\.(org|xyz)$/i;
4
+ function p(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 ne.test(e.hostname) ? /\/attestation\/view\//i.test(e.pathname) : !1;
9
+ return re.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 h(e) {
16
+ function ie(e) {
17
17
  let t = {
18
18
  localId: void 0,
19
19
  uid: void 0
20
20
  };
21
21
  return e ? (e.length === 10 && (t.localId = e), e.startsWith("0x") && e.length === 66 && (t.uid = e), t) : t;
22
22
  }
23
- function g(e) {
23
+ function ae(e) {
24
24
  if (e != null) {
25
25
  if (typeof e == "string") {
26
26
  let t = e.trim();
@@ -33,35 +33,35 @@ function g(e) {
33
33
  }
34
34
  }
35
35
  }
36
- var re = /^[a-zA-Z0-9_-]{10,21}$/;
37
- function _(e) {
38
- let t = h(e);
36
+ var oe = /^[a-zA-Z0-9_-]{10,21}$/;
37
+ function se(e) {
38
+ let t = ie(e);
39
39
  return t.localId || t.uid ? {
40
40
  seedLocalId: t.localId,
41
41
  seedUid: t.uid
42
- } : re.test(e) && !e.startsWith("0x") ? { seedLocalId: e } : {};
42
+ } : oe.test(e) && !e.startsWith("0x") ? { seedLocalId: e } : {};
43
43
  }
44
44
  //#endregion
45
45
  //#region src/mediaRef.ts
46
- var ie = /^[a-zA-Z0-9_-]{43}$/;
47
- function ae(e) {
46
+ var ce = /^[a-zA-Z0-9_-]{43}$/;
47
+ function le(e) {
48
48
  return e == null ? "" : typeof e == "string" ? e.trim() : String(e).trim();
49
49
  }
50
- function v(e, t) {
50
+ function m(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 y(e) {
54
+ function ue(e) {
55
55
  let t = e.trim();
56
56
  if (!t) return t;
57
57
  try {
58
- let e = g(JSON.parse(t));
58
+ let e = ae(JSON.parse(t));
59
59
  if (e) return e;
60
60
  } catch {}
61
61
  return t;
62
62
  }
63
- function b(e, t) {
64
- let n = ae(e);
63
+ function h(e, t) {
64
+ let n = le(e);
65
65
  if (!n) return { kind: "empty" };
66
66
  let r = t?.treatAs;
67
67
  if (r === "url") return {
@@ -79,14 +79,14 @@ function b(e, t) {
79
79
  kind: "unknown",
80
80
  raw: n
81
81
  };
82
- if (n.startsWith("http://") || n.startsWith("https://") || n.startsWith("blob:") || n.startsWith("data:")) return m(n) ? {
82
+ if (n.startsWith("http://") || n.startsWith("https://") || n.startsWith("blob:") || n.startsWith("data:")) return p(n) ? {
83
83
  kind: "nonMediaUrl",
84
84
  href: n
85
85
  } : {
86
86
  kind: "url",
87
87
  href: n
88
88
  };
89
- let i = y(n), a = _(i);
89
+ let i = ue(n), a = se(i);
90
90
  return a.seedUid ? {
91
91
  kind: "seedUid",
92
92
  uid: a.seedUid
@@ -96,7 +96,7 @@ function b(e, t) {
96
96
  } : i.startsWith("0x") && i.length === 66 ? {
97
97
  kind: "seedUid",
98
98
  uid: i
99
- } : ie.test(i) && !i.startsWith("0x") ? {
99
+ } : ce.test(i) && !i.startsWith("0x") ? {
100
100
  kind: "arweaveTxId",
101
101
  txId: i
102
102
  } : {
@@ -104,25 +104,25 @@ function b(e, t) {
104
104
  raw: n
105
105
  };
106
106
  }
107
- function x(e, t) {
108
- let n = v(e, t);
107
+ function g(e, t) {
108
+ let n = m(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 = v(e, r);
112
+ let t = m(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 = v(e, i[0] + i.slice(1).map((e) => e.charAt(0).toUpperCase() + e.slice(1)).join(""));
117
+ let t = m(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 oe(e, t) {
122
+ function de(e, t) {
123
123
  let n = {};
124
124
  for (let [r, i] of Object.entries(t)) {
125
- let t = x(e, r);
125
+ let t = g(e, r);
126
126
  if (!t) {
127
127
  n[r] = void 0;
128
128
  continue;
@@ -141,7 +141,7 @@ function oe(e, t) {
141
141
  };
142
142
  continue;
143
143
  }
144
- let a = b(t, { treatAs: i.treatAs });
144
+ let a = h(t, { treatAs: i.treatAs });
145
145
  n[r] = {
146
146
  role: i.role,
147
147
  raw: t,
@@ -150,12 +150,12 @@ function oe(e, t) {
150
150
  }
151
151
  return n;
152
152
  }
153
- function se(e) {
153
+ function fe(e) {
154
154
  return `${d.getBaseUrl()}/${e}`;
155
155
  }
156
156
  //#endregion
157
157
  //#region src/resolveSeedRssImageRelationRef.ts
158
- var S = [
158
+ var _ = [
159
159
  "featureImage",
160
160
  "feature_image",
161
161
  "image",
@@ -166,25 +166,25 @@ var S = [
166
166
  "thumbnail_image",
167
167
  "thumbnailImage"
168
168
  ];
169
- function C(e) {
169
+ function pe(e) {
170
170
  return e == null ? "" : typeof e == "string" ? e.trim() : typeof e == "number" || typeof e == "boolean" ? String(e) : "";
171
171
  }
172
- function w(e, ...t) {
172
+ function v(e, ...t) {
173
173
  for (let n of t) {
174
- let t = C(e[n]);
174
+ let t = pe(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 = C(r);
181
+ let e = pe(r);
182
182
  if (e) return e;
183
183
  }
184
184
  }
185
185
  return "";
186
186
  }
187
- function T(e) {
187
+ function y(e) {
188
188
  let t = e.trim();
189
189
  if (t && !t.startsWith("0x")) try {
190
190
  return `${d.getBaseUrl()}/${t}`;
@@ -192,23 +192,23 @@ function T(e) {
192
192
  return;
193
193
  }
194
194
  }
195
- function E(e) {
195
+ function me(e) {
196
196
  let t = e.storageTransactionId?.trim();
197
197
  if (t) {
198
- let e = T(t);
198
+ let e = y(t);
199
199
  if (e) return e;
200
200
  }
201
201
  let n = e.arweaveUrl?.trim();
202
- if (n && !m(n)) return n;
202
+ if (n && !p(n)) return n;
203
203
  }
204
- function ce(e) {
204
+ function he(e) {
205
205
  let t = e.trim();
206
- if (!t || m(t)) return;
207
- let n = b(t);
206
+ if (!t || p(t)) return;
207
+ let n = h(t);
208
208
  switch (n.kind) {
209
209
  case "url": return { mediaUrl: n.href };
210
210
  case "arweaveTxId": {
211
- let e = T(n.txId);
211
+ let e = y(n.txId);
212
212
  return {
213
213
  storageTransactionId: n.txId,
214
214
  ...e ? { mediaUrl: e } : {}
@@ -216,7 +216,7 @@ function ce(e) {
216
216
  }
217
217
  case "seedUid": return { seedUid: n.uid };
218
218
  default: {
219
- let e = T(t);
219
+ let e = y(t);
220
220
  return e ? {
221
221
  storageTransactionId: t,
222
222
  mediaUrl: e
@@ -224,109 +224,201 @@ function ce(e) {
224
224
  }
225
225
  }
226
226
  }
227
- function le(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 = E({
227
+ function ge(e) {
228
+ let t = v(e, "storageTransactionId", "storage_transaction_id"), n = v(e, "arweaveUrl", "arweave_url"), r = v(e, "seedUid", "SeedUid", "seed_uid"), i = v(e, "link", "Link"), a = me({
229
229
  storageTransactionId: t,
230
230
  arweaveUrl: n
231
- }) ?? (i && !m(i) ? i : void 0);
231
+ }) ?? (i && !p(i) ? i : void 0);
232
232
  if (t || n || r || a) return {
233
233
  ...t ? { storageTransactionId: t } : {},
234
- ...n && !m(n) ? { arweaveUrl: n } : {},
234
+ ...n && !p(n) ? { arweaveUrl: n } : {},
235
235
  ...r ? { seedUid: r } : {},
236
236
  ...a ? { mediaUrl: a } : {}
237
237
  };
238
238
  }
239
- function D(e) {
239
+ function b(e) {
240
240
  if (e != null) {
241
- if (typeof e == "string") return ce(e);
241
+ if (typeof e == "string") return he(e);
242
242
  if (Array.isArray(e)) {
243
243
  for (let t of e) {
244
- let e = D(t);
244
+ let e = b(t);
245
245
  if (e?.mediaUrl || e?.storageTransactionId || e?.seedUid) return e;
246
246
  }
247
247
  return;
248
248
  }
249
- if (typeof e == "object") return le(e);
249
+ if (typeof e == "object") return ge(e);
250
250
  }
251
251
  }
252
- function ue(e, t = S) {
252
+ function _e(e, t = _) {
253
253
  for (let n of t) {
254
254
  if (!(n in e)) continue;
255
- let t = D(e[n]);
255
+ let t = b(e[n]);
256
256
  if (t) return t;
257
257
  }
258
258
  }
259
259
  //#endregion
260
+ //#region src/gateway/gatewayCircuitBreaker.ts
261
+ var x = 1, S = 6e4, C = x, w = S, T = /* @__PURE__ */ new Map();
262
+ function E(e) {
263
+ let t = e.trim();
264
+ return t ? (t.startsWith("http://") ? t = t.slice(7) : t.startsWith("https://") && (t = t.slice(8)), t.replace(/\/$/, "").toLowerCase()) : "";
265
+ }
266
+ function D(e) {
267
+ let t = T.get(e);
268
+ return t || (t = {
269
+ failures: 0,
270
+ openedAt: null,
271
+ halfOpenProbeInFlight: !1
272
+ }, T.set(e, t)), t;
273
+ }
274
+ function O(e, t) {
275
+ return e.openedAt == null ? "closed" : t - e.openedAt >= w ? "half-open" : "open";
276
+ }
277
+ function ve(e) {
278
+ e.failureThreshold != null && e.failureThreshold >= 1 && (C = e.failureThreshold), e.openDurationMs != null && e.openDurationMs >= 0 && (w = e.openDurationMs);
279
+ }
280
+ function k() {
281
+ T.clear(), C = x, w = S;
282
+ }
283
+ function A(e, t = Date.now()) {
284
+ let n = E(e);
285
+ if (!n) return !1;
286
+ let r = T.get(n);
287
+ if (!r) return !1;
288
+ let i = O(r, t);
289
+ return !!(i === "open" || i === "half-open" && r.halfOpenProbeInFlight);
290
+ }
291
+ function ye(e, t = Date.now()) {
292
+ let n = E(e);
293
+ if (!n) return "closed";
294
+ let r = T.get(n);
295
+ return r ? O(r, t) : "closed";
296
+ }
297
+ function j(e, t = Date.now()) {
298
+ let n = E(e);
299
+ if (!n) return;
300
+ let r = D(n);
301
+ O(r, t) === "half-open" && (r.halfOpenProbeInFlight = !0);
302
+ }
303
+ function M(e) {
304
+ let t = E(e);
305
+ t && T.set(t, {
306
+ failures: 0,
307
+ openedAt: null,
308
+ halfOpenProbeInFlight: !1
309
+ });
310
+ }
311
+ function N(e, t = Date.now()) {
312
+ let n = E(e);
313
+ if (!n) return;
314
+ let r = D(n);
315
+ r.failures += 1, r.halfOpenProbeInFlight = !1, r.failures >= C && (r.openedAt = t);
316
+ }
317
+ function be(e = Date.now()) {
318
+ let t = [];
319
+ for (let n of T.keys()) A(n, e) && t.push(n);
320
+ return t;
321
+ }
322
+ //#endregion
260
323
  //#region src/ArweaveClient/selectReadGateway.ts
261
- var de = 18e4, fe = 5e3, O = null, k = null;
262
- function A() {
263
- O = null, k = null;
324
+ var P = 18e4, xe = 6e4, Se = 5e3, F = null, I = null, L = null;
325
+ function R() {
326
+ F = null, I = null;
327
+ }
328
+ function Ce() {
329
+ R(), L = null, k(), d.resetReadGatewaySelectionStateForTests(), d.isReadGatewayLocked() || d.setPreferredReadGateway(f);
264
330
  }
265
- function pe() {
266
- A(), d.resetReadGatewaySelectionStateForTests(), d.isReadGatewayLocked() || d.setPreferredReadGateway(f);
331
+ function we() {
332
+ return d.isReadGatewayLocked() ? !0 : F && Date.now() < F.expiresAt ? F.healthy : L != null;
267
333
  }
268
- async function j(e, t) {
269
- let n = `${e.replace(/\/$/, "")}/info`, r, i = new AbortController(), a = t ?? i.signal;
270
- t || (r = setTimeout(() => i.abort(), fe));
334
+ function Te() {
335
+ return L;
336
+ }
337
+ async function z(e, t) {
338
+ let n = `${e.replace(/\/$/, "")}/info`, r = e;
339
+ try {
340
+ r = new URL(e.includes("://") ? e : `https://${e}`).host;
341
+ } catch {
342
+ r = e.replace(/^https?:\/\//, "").replace(/\/$/, "");
343
+ }
344
+ if (A(r)) return !1;
345
+ j(r);
346
+ let i, a = new AbortController(), o = t ?? a.signal;
347
+ t || (i = setTimeout(() => a.abort(), Se));
271
348
  try {
272
349
  let e = await fetch(n, {
273
350
  method: "GET",
274
- signal: a,
351
+ signal: o,
275
352
  headers: { Accept: "application/json" }
276
353
  });
277
- if (!e.ok) return !1;
354
+ if (!e.ok) return N(r), !1;
278
355
  let t = await e.text();
279
- if (!t.trim()) return !1;
356
+ if (!t.trim()) return N(r), !1;
280
357
  try {
281
- let e = JSON.parse(t);
282
- return typeof e == "object" && !!e;
358
+ let e = JSON.parse(t), n = typeof e == "object" && !!e;
359
+ return n ? M(r) : N(r), n;
283
360
  } catch {
284
- return !1;
361
+ return N(r), !1;
285
362
  }
286
363
  } catch {
287
- return !1;
364
+ return N(r), !1;
288
365
  } finally {
289
- r && clearTimeout(r);
366
+ i && clearTimeout(i);
290
367
  }
291
368
  }
292
- async function M(e, t = "https", n) {
369
+ async function B(e, t = "https", n) {
293
370
  for (let r of e) {
294
371
  let e = r.trim().replace(/\/$/, "");
295
- if (e && await j(`${t}://${e}`, n)) return e;
372
+ if (e && !A(e) && await z(`${t}://${e}`, n)) return e;
296
373
  }
297
374
  return null;
298
375
  }
299
- function N() {
376
+ function Ee() {
300
377
  return r(d.getHost());
301
378
  }
302
- async function P(e) {
379
+ async function V(e) {
303
380
  if (d.isReadGatewayLocked()) return d.getHost();
304
- if (O && Date.now() < O.expiresAt) return O.host;
305
- if (k) return k;
306
- k = (async () => {
307
- let t = await M(N(), d.getProtocol(), e);
308
- return d.isReadGatewayLocked() || t && d.applyProbedReadGateway(t), O = {
381
+ if (F && Date.now() < F.expiresAt) return F.host;
382
+ if (I) return I;
383
+ I = (async () => {
384
+ let t = await B(Ee(), d.getProtocol(), e);
385
+ if (d.isReadGatewayLocked()) F = {
309
386
  host: d.getHost(),
310
- expiresAt: Date.now() + de
311
- }, O.host;
387
+ healthy: !0,
388
+ expiresAt: Date.now() + P
389
+ };
390
+ else if (t) d.applyProbedReadGateway(t), L = t, F = {
391
+ host: t,
392
+ healthy: !0,
393
+ expiresAt: Date.now() + P
394
+ };
395
+ else {
396
+ let e = L ?? d.getHost();
397
+ L && d.getHost() !== L && d.applyProbedReadGateway(L), F = {
398
+ host: e,
399
+ healthy: !1,
400
+ expiresAt: Date.now() + xe
401
+ };
402
+ }
403
+ return F.host;
312
404
  })();
313
405
  try {
314
- return await k;
406
+ return await I;
315
407
  } finally {
316
- k = null;
408
+ I = null;
317
409
  }
318
410
  }
319
411
  //#endregion
320
412
  //#region src/ArweaveClient/uploadApiVerification.ts
321
- function F(e) {
413
+ function H(e) {
322
414
  return e.trim().replace(/\/+$/, "");
323
415
  }
324
- function I(e, t) {
325
- return `${F(e)}/api/upload/arweave/data/${encodeURIComponent(t)}`;
416
+ function U(e, t) {
417
+ return `${H(e)}/api/upload/arweave/data/${encodeURIComponent(t)}`;
326
418
  }
327
- var L = 45e3;
328
- async function R(e, t, n) {
329
- let r = I(e, t), i = n?.timeoutMs ?? L, a = new AbortController(), o = setTimeout(() => a.abort(), i);
419
+ var De = 45e3;
420
+ async function Oe(e, t, n) {
421
+ let r = U(e, t), i = n?.timeoutMs ?? De, a = new AbortController(), o = setTimeout(() => a.abort(), i);
330
422
  try {
331
423
  let e = await fetch(r, { signal: a.signal });
332
424
  return clearTimeout(o), e.status === 404 ? {
@@ -351,16 +443,16 @@ async function R(e, t, n) {
351
443
  }
352
444
  //#endregion
353
445
  //#region src/ArweaveClient/arweaveL1UploadApi.ts
354
- var z = "\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";
355
- function B(e, t) {
356
- return `${F(e)}/api/upload/arweave/status/${encodeURIComponent(t)}`;
446
+ var ke = "\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";
447
+ function W(e, t) {
448
+ return `${H(e)}/api/upload/arweave/status/${encodeURIComponent(t)}`;
357
449
  }
358
- function me(e) {
450
+ function Ae(e) {
359
451
  let t = e.l1;
360
452
  return t ? t.meetsMinConfirmations === !0 || t.confirmed === !0 : !1;
361
453
  }
362
- async function he(e, t) {
363
- let n = B(e, t);
454
+ async function je(e, t) {
455
+ let n = W(e, t);
364
456
  try {
365
457
  let e = await fetch(n);
366
458
  if (!e.ok) return null;
@@ -370,7 +462,7 @@ async function he(e, t) {
370
462
  return null;
371
463
  }
372
464
  }
373
- async function V(e, t, n) {
465
+ async function Me(e, t, n) {
374
466
  let r = e.trim();
375
467
  if (!r) return null;
376
468
  try {
@@ -378,7 +470,7 @@ async function V(e, t, n) {
378
470
  method: "POST",
379
471
  headers: { "Content-Type": "application/json" },
380
472
  body: JSON.stringify({
381
- query: z,
473
+ query: ke,
382
474
  variables: { id: t }
383
475
  }),
384
476
  signal: n?.signal
@@ -402,7 +494,7 @@ async function V(e, t, n) {
402
494
  return null;
403
495
  }
404
496
  }
405
- async function ge(e, t, n) {
497
+ async function Ne(e, t, n) {
406
498
  let i = u(), a = e?.trim(), o = "https", s = null;
407
499
  if (a) try {
408
500
  let e = new URL(a);
@@ -412,28 +504,19 @@ async function ge(e, t, n) {
412
504
  }
413
505
  let c = s && s.length > 0 ? r(s) : [...i], l = n?.signal;
414
506
  for (let e of c) {
415
- if (!await j(`${o}://${e}`, l ?? void 0)) continue;
416
- let r = await V(`${o}://${e}/graphql`, t, n);
507
+ if (!await z(`${o}://${e}`, l ?? void 0)) continue;
508
+ let r = await Me(`${o}://${e}/graphql`, t, n);
417
509
  if (r !== null) return r;
418
510
  }
419
511
  return null;
420
512
  }
421
513
  //#endregion
422
- //#region src/gateway/gatewayState.ts
423
- var H = null;
424
- function _e() {
425
- return H;
426
- }
427
- function ve(e) {
428
- H = e;
429
- }
430
- //#endregion
431
514
  //#region src/gateway/resolveSeedGatewayEndpoints.ts
432
- var U = 18e4, W = null, G = /* @__PURE__ */ new Map();
433
- function K() {
434
- W = null, G.clear();
515
+ var Pe = 18e4, G = null, K = /* @__PURE__ */ new Map();
516
+ function Fe() {
517
+ G = null, K.clear();
435
518
  }
436
- function ye(e) {
519
+ function Ie(e) {
437
520
  let t = (e ?? "ar.seedprotocol.io").trim();
438
521
  return t.startsWith("http://") ? {
439
522
  protocol: "http",
@@ -446,7 +529,7 @@ function ye(e) {
446
529
  host: t.replace(/\/$/, "")
447
530
  };
448
531
  }
449
- function q(e) {
532
+ function Le(e) {
450
533
  let t = e.hyper?.localSidecarHost?.trim() || "127.0.0.1", n = e.hyper?.localSidecarPort ?? 1984;
451
534
  return {
452
535
  host: n === 80 || n === 443 ? t : `${t}:${n}`,
@@ -454,7 +537,7 @@ function q(e) {
454
537
  baseUrl: `http://${t}:${n}`
455
538
  };
456
539
  }
457
- function be() {
540
+ function Re() {
458
541
  try {
459
542
  let e = globalThis.window?.location?.origin;
460
543
  return typeof e == "string" && e.length > 0 ? e.replace(/\/$/, "") : void 0;
@@ -462,37 +545,37 @@ function be() {
462
545
  return;
463
546
  }
464
547
  }
465
- function J(e, t) {
548
+ function q(e, t) {
466
549
  let n = e.trim();
467
550
  if (!n) throw Error("proxyBaseUrl is empty");
468
551
  if (n.startsWith("http://") || n.startsWith("https://")) return n.replace(/\/$/, "");
469
552
  if (n.startsWith("/")) {
470
- let r = (t?.origin?.trim() || be() || "").replace(/\/$/, "");
553
+ let r = (t?.origin?.trim() || Re() || "").replace(/\/$/, "");
471
554
  if (!r) throw Error(`Relative proxyBaseUrl "${e}" requires a browser origin or resolve options.origin`);
472
555
  return `${r}${n.replace(/\/$/, "")}`;
473
556
  }
474
557
  return `https://${n.replace(/\/$/, "")}`;
475
558
  }
476
- async function Y(e, t, n) {
559
+ async function J(e, t, n) {
477
560
  let r = Date.now();
478
561
  if (t === "sidecar") {
479
- if (W && r < W.expiresAt) return W.healthy;
480
- let t = await j(e, n);
481
- return W = {
562
+ if (G && r < G.expiresAt) return G.healthy;
563
+ let t = await z(e, n);
564
+ return G = {
482
565
  healthy: t,
483
- expiresAt: r + U
566
+ expiresAt: r + Pe
484
567
  }, t;
485
568
  }
486
- let i = G.get(t);
569
+ let i = K.get(t);
487
570
  if (i && r < i.expiresAt) return i.healthy;
488
- let a = await j(e, n);
489
- return G.set(t, {
571
+ let a = await z(e, n);
572
+ return K.set(t, {
490
573
  healthy: a,
491
- expiresAt: r + U
574
+ expiresAt: r + Pe
492
575
  }), a;
493
576
  }
494
- function X(e) {
495
- let { host: t, protocol: n } = ye(e.arweaveDomain), r = `${n}://${t}`, i = e.uploadApiBaseUrl?.trim() || r;
577
+ function ze(e) {
578
+ let { host: t, protocol: n } = Ie(e.arweaveDomain), r = `${n}://${t}`, i = e.uploadApiBaseUrl?.trim() || r;
496
579
  return {
497
580
  mode: e.transport ?? "http-gateway",
498
581
  arweaveHost: t,
@@ -504,8 +587,8 @@ function X(e) {
504
587
  gatewayHyperKey: e.hyper?.gatewayHyperKey?.trim() || void 0
505
588
  };
506
589
  }
507
- function Z(e) {
508
- let t = q(e), n = e.hyper?.gatewayHyperKey?.trim();
590
+ function Be(e) {
591
+ let t = Le(e), n = e.hyper?.gatewayHyperKey?.trim();
509
592
  return {
510
593
  mode: "hyper",
511
594
  arweaveHost: t.host,
@@ -517,7 +600,7 @@ function Z(e) {
517
600
  gatewayHyperKey: n || void 0
518
601
  };
519
602
  }
520
- function Q(e, t) {
603
+ function Ve(e, t) {
521
604
  let n = new URL(t), r = n.protocol === "http:" ? "http" : "https", i = n.pathname.replace(/\/$/, ""), a = i ? `${n.host}${i}` : n.host, o = `${r}://${a}`;
522
605
  return {
523
606
  mode: e.transport ?? "http-gateway",
@@ -531,53 +614,53 @@ function Q(e, t) {
531
614
  proxyBaseUrl: t
532
615
  };
533
616
  }
534
- async function $(e, t) {
617
+ async function He(e, t) {
535
618
  let n = e.proxyBaseUrl?.trim();
536
619
  if (!n) return null;
537
- let r = J(n, { origin: t?.origin });
538
- return e.hyper?.probeSidecar !== !1 && !await Y(r, `proxy:${r}`, t?.signal) ? null : Q(e, r);
620
+ let r = q(n, { origin: t?.origin });
621
+ return e.hyper?.probeSidecar !== !1 && !await J(r, `proxy:${r}`, t?.signal) ? null : Ve(e, r);
539
622
  }
540
- async function xe(e, t) {
541
- t?.forceSidecarProbe && K();
623
+ async function Ue(e, t) {
624
+ t?.forceSidecarProbe && Fe();
542
625
  let n = e.transport ?? "http-gateway", r = e.hyper?.probeSidecar !== !1;
543
626
  if (n === "http-gateway") {
544
627
  if (e.proxyBaseUrl?.trim()) {
545
- let i = J(e.proxyBaseUrl, { origin: t?.origin });
546
- if (r && !await Y(i, `proxy:${i}`, t?.signal)) throw Error(`Gateway HTTP proxy not reachable at ${i}. Ensure your Node route runs createGatewayProxy (or equivalent) and mounts at proxyBaseUrl.`);
547
- return Q({
628
+ let i = q(e.proxyBaseUrl, { origin: t?.origin });
629
+ if (r && !await J(i, `proxy:${i}`, t?.signal)) throw Error(`Gateway HTTP proxy not reachable at ${i}. Ensure your Node route runs createGatewayProxy (or equivalent) and mounts at proxyBaseUrl.`);
630
+ return Ve({
548
631
  ...e,
549
632
  transport: n
550
633
  }, i);
551
634
  }
552
- return X({
635
+ return ze({
553
636
  ...e,
554
637
  transport: n
555
638
  });
556
639
  }
557
640
  if (n === "hyper") {
558
- let i = await $({
641
+ let i = await He({
559
642
  ...e,
560
643
  transport: n
561
644
  }, t);
562
645
  if (i) return i;
563
- let a = Z({
646
+ let a = Be({
564
647
  ...e,
565
648
  transport: n
566
649
  });
567
- if (r && !await Y(a.arweaveBaseUrl, "sidecar", t?.signal)) throw Error(`Gateway Hyper sidecar not reachable at ${a.arweaveBaseUrl}. Run: seed gateway tunnel connect <operator-z32-key> — or configure gateway.proxyBaseUrl for an app-server proxy.`);
650
+ if (r && !await J(a.arweaveBaseUrl, "sidecar", t?.signal)) throw Error(`Gateway Hyper sidecar not reachable at ${a.arweaveBaseUrl}. Run: seed gateway tunnel connect <operator-z32-key> — or configure gateway.proxyBaseUrl for an app-server proxy.`);
568
651
  return a;
569
652
  }
570
- let i = await $({
653
+ let i = await He({
571
654
  ...e,
572
655
  transport: n
573
656
  }, t);
574
657
  if (i) return i;
575
- let a = q(e);
576
- return r && await Y(a.baseUrl, "sidecar", t?.signal) ? Z({
658
+ let a = Le(e);
659
+ return r && await J(a.baseUrl, "sidecar", t?.signal) ? Be({
577
660
  ...e,
578
661
  transport: "hyper"
579
662
  }) : {
580
- ...X({
663
+ ...ze({
581
664
  ...e,
582
665
  transport: "http-gateway"
583
666
  }),
@@ -585,18 +668,48 @@ async function xe(e, t) {
585
668
  activePath: "hybrid-fallback-http"
586
669
  };
587
670
  }
588
- function Se(e, t) {
671
+ function We(e, t) {
589
672
  return e.activePath === "hyper-sidecar" || e.activePath === "http-proxy" ? [e.arweaveHost] : r(e.arweaveHost);
590
673
  }
591
674
  //#endregion
675
+ //#region src/gateway/gatewayState.ts
676
+ var Ge = null;
677
+ function Y() {
678
+ return Ge;
679
+ }
680
+ function Ke(e) {
681
+ Ge = e;
682
+ }
683
+ var qe = [];
684
+ function X() {
685
+ return qe;
686
+ }
687
+ function Je(e) {
688
+ let t = [], n = /* @__PURE__ */ new Set();
689
+ for (let r of e) {
690
+ let e = r?.trim();
691
+ if (!e) continue;
692
+ let i;
693
+ try {
694
+ let t = new URL(/^https?:\/\//i.test(e) ? e : q(e));
695
+ i = `${t.origin}${t.pathname.replace(/\/+$/, "")}`;
696
+ } catch {
697
+ continue;
698
+ }
699
+ n.has(i) || (n.add(i), t.push(i));
700
+ }
701
+ qe = t;
702
+ }
703
+ //#endregion
592
704
  //#region src/gateway/seedGatewayConfig.ts
593
- function Ce(e) {
705
+ function Ye(e) {
594
706
  let t = e.gateway ?? {};
595
707
  return {
596
708
  transport: t.transport,
597
709
  arweaveDomain: e.arweaveDomain ?? t.arweaveDomain,
598
710
  uploadApiBaseUrl: e.uploadApiBaseUrl ?? t.uploadApiBaseUrl,
599
711
  proxyBaseUrl: t.proxyBaseUrl?.trim() || void 0,
712
+ preferredReadBaseUrls: t.preferredReadBaseUrls,
600
713
  hyper: {
601
714
  gatewayHyperKey: t.hyper?.gatewayHyperKey?.trim() || t.gatewayHyperKey?.trim() || void 0,
602
715
  localSidecarHost: t.hyper?.localSidecarHost ?? t.localSidecarHost,
@@ -605,7 +718,7 @@ function Ce(e) {
605
718
  }
606
719
  };
607
720
  }
608
- function we(e) {
721
+ function Xe(e) {
609
722
  return {
610
723
  transport: e.gatewayTransport,
611
724
  arweaveDomain: e.arweaveDomain,
@@ -619,6 +732,63 @@ function we(e) {
619
732
  };
620
733
  }
621
734
  //#endregion
622
- export { o as ARWEAVE_HOST_ENV_KEYS, d as ArweaveClient, d as BaseArweaveClient, e as DEFAULT_ARWEAVE_GATEWAYS, ee as DEFAULT_ARWEAVE_GRAPHQL_URL, f as DEFAULT_ARWEAVE_HOST, t as DEFAULT_GATEWAY_SIDECAR_HOST, s as DEFAULT_GATEWAY_SIDECAR_PORT, p as DEFAULT_SEED_FEED_HYPER_KEY, n as DEFAULT_SEED_GATEWAY_HYPER_KEY, te as GET_ARWEAVE_TRANSACTIONS, l as GET_TRANSACTION_TAGS, S as SEED_RSS_IMAGE_RELATION_FIELD_KEYS, b as classifyMediaRef, P as ensureReadGatewaySelected, r as getArweaveReadGatewayHostsForPrimary, he as getArweaveUploadStatus, se as getArweaveUrlForTransaction, u as getDefaultArweaveReadGatewayHostsOrdered, x as getFeedItemStringField, Se as getReadGatewayHostsForConfig, _e as getResolvedSeedGatewayEndpoints, I as getUploadApiArweaveDataUrl, B as getUploadApiArweaveStatusUrl, R as getUploadPipelineTransactionStatus, A as invalidateReadGatewayCache, K as invalidateSidecarProbeCache, me as isArweaveL1AnchoringComplete, m as isEasAttestationExplorerUrl, c as isKnownArweaveGatewayHostname, a as mergePrimaryHostWithDefaults, oe as normalizeFeedItemFields, g as normalizeRelationPropertyValue, F as normalizeUploadApiBaseUrl, j as probeGateway, V as queryArweaveGatewayTransaction, ge as queryArweaveGatewayTransactionWithFallback, pe as resetArweaveReadGatewayForTests, i as resolveArweaveHostFromEnv, J as resolveProxyBaseUrl, xe as resolveSeedGatewayEndpoints, _ as resolveSeedIdsFromRefString, ue as resolveSeedRssImageRelationFromItem, D as resolveSeedRssImageRelationRef, we as seedGatewayConfigFromClientContext, Ce as seedGatewayConfigFromSeedConfig, M as selectFirstHealthyReadGateway, ve as setResolvedSeedGatewayEndpoints };
735
+ //#region src/gateway/readBaseUrls.ts
736
+ var Ze = 1e4;
737
+ function Z(e, t, n) {
738
+ let r = n.trim().replace(/\/$/, "");
739
+ r && !t.has(r) && (t.add(r), e.push(r));
740
+ }
741
+ function Q(e) {
742
+ let t = Y(), n = d.getProtocol(), i = t ? We(t) : e?.fallbackHosts?.length ? [...e.fallbackHosts] : r(d.getHost()), a = [], o = /* @__PURE__ */ new Set();
743
+ for (let e of i) {
744
+ let t = e.trim();
745
+ t && Z(a, o, /^https?:\/\//i.test(t) ? t : `${n}://${t}`);
746
+ }
747
+ return a;
748
+ }
749
+ function Qe(e) {
750
+ let t = [], n = /* @__PURE__ */ new Set();
751
+ for (let e of X()) Z(t, n, e);
752
+ for (let r of Q(e)) Z(t, n, r);
753
+ return t;
754
+ }
755
+ async function $e() {
756
+ try {
757
+ let e = Y();
758
+ if (e && (e.activePath === "hyper-sidecar" || e.activePath === "http-proxy")) return;
759
+ await V();
760
+ } catch {}
761
+ }
762
+ async function $(e, t, n) {
763
+ let r = new AbortController(), i = setTimeout(() => r.abort(), n?.timeoutMs ?? 1e4);
764
+ try {
765
+ let n = await fetch(`${e.replace(/\/$/, "")}/raw/${encodeURIComponent(t)}`, {
766
+ method: "GET",
767
+ credentials: "omit",
768
+ signal: r.signal
769
+ });
770
+ return n.ok ? n : void 0;
771
+ } catch {
772
+ return;
773
+ } finally {
774
+ clearTimeout(i);
775
+ }
776
+ }
777
+ async function et(e, t) {
778
+ let n = /* @__PURE__ */ new Set(), r = async (r) => {
779
+ for (let i of r) {
780
+ if (n.has(i)) continue;
781
+ n.add(i);
782
+ let r = await $(i, e, t);
783
+ if (r) try {
784
+ let e = await r.text();
785
+ if (e.length > 0) return e;
786
+ } catch {}
787
+ }
788
+ };
789
+ return await r(X()) || (await $e(), r(Q(t)));
790
+ }
791
+ //#endregion
792
+ export { o as ARWEAVE_HOST_ENV_KEYS, d as ArweaveClient, d as BaseArweaveClient, e as DEFAULT_ARWEAVE_GATEWAYS, ee as DEFAULT_ARWEAVE_GRAPHQL_URL, f as DEFAULT_ARWEAVE_HOST, Ze as DEFAULT_ARWEAVE_RAW_READ_TIMEOUT_MS, t as DEFAULT_GATEWAY_SIDECAR_HOST, s as DEFAULT_GATEWAY_SIDECAR_PORT, ne as DEFAULT_SEED_FEED_HYPER_KEY, n as DEFAULT_SEED_GATEWAY_HYPER_KEY, te as GET_ARWEAVE_TRANSACTIONS, l as GET_TRANSACTION_TAGS, _ as SEED_RSS_IMAGE_RELATION_FIELD_KEYS, j as beginGatewayHostHalfOpenProbe, h as classifyMediaRef, ve as configureGatewayCircuitBreaker, $e as ensureArweaveReadGatewayForFallback, V as ensureReadGatewaySelected, $ as fetchArweaveRawFromBaseUrl, et as fetchArweaveRawTextAcrossGateways, Qe as getArweaveReadBaseUrls, r as getArweaveReadGatewayHostsForPrimary, je as getArweaveUploadStatus, fe as getArweaveUrlForTransaction, u as getDefaultArweaveReadGatewayHostsOrdered, g as getFeedItemStringField, ye as getGatewayHostCircuitState, Te as getLastHealthyReadGatewayHost, X as getPreferredArweaveReadBaseUrls, We as getReadGatewayHostsForConfig, Q as getResolvedArweaveReadBaseUrls, Y as getResolvedSeedGatewayEndpoints, U as getUploadApiArweaveDataUrl, W as getUploadApiArweaveStatusUrl, Oe as getUploadPipelineTransactionStatus, R as invalidateReadGatewayCache, Fe as invalidateSidecarProbeCache, Ae as isArweaveL1AnchoringComplete, p as isEasAttestationExplorerUrl, A as isGatewayHostCircuitOpen, c as isKnownArweaveGatewayHostname, we as isReadGatewayKnownHealthy, be as listOpenGatewayCircuitHosts, a as mergePrimaryHostWithDefaults, de as normalizeFeedItemFields, E as normalizeGatewayHostKey, ae as normalizeRelationPropertyValue, H as normalizeUploadApiBaseUrl, z as probeGateway, Me as queryArweaveGatewayTransaction, Ne as queryArweaveGatewayTransactionWithFallback, N as recordGatewayHostFailure, M as recordGatewayHostSuccess, Ce as resetArweaveReadGatewayForTests, k as resetGatewayCircuitBreakerForTests, i as resolveArweaveHostFromEnv, q as resolveProxyBaseUrl, Ue as resolveSeedGatewayEndpoints, se as resolveSeedIdsFromRefString, _e as resolveSeedRssImageRelationFromItem, b as resolveSeedRssImageRelationRef, Xe as seedGatewayConfigFromClientContext, Ye as seedGatewayConfigFromSeedConfig, B as selectFirstHealthyReadGateway, Je as setPreferredArweaveReadBaseUrls, Ke as setResolvedSeedGatewayEndpoints };
623
793
 
624
794
  //# sourceMappingURL=index.js.map