@arkade-os/sdk 0.4.43 → 0.4.45

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.
Files changed (68) hide show
  1. package/README.md +100 -0
  2. package/dist/adapters/expo.cjs +4 -4
  3. package/dist/adapters/expo.d.cts +2 -2
  4. package/dist/adapters/expo.d.ts +2 -2
  5. package/dist/adapters/expo.js +2 -2
  6. package/dist/adapters/indexedDB.cjs +3 -3
  7. package/dist/adapters/indexedDB.js +2 -2
  8. package/dist/{ark-I8jfe5VE.d.cts → ark-C-PjOngm.d.cts} +89 -1
  9. package/dist/{ark-I8jfe5VE.d.ts → ark-C-PjOngm.d.ts} +89 -1
  10. package/dist/{asyncStorageTaskQueue-D1FfHfgK.d.cts → asyncStorageTaskQueue-BmBPvTyh.d.cts} +1 -1
  11. package/dist/{asyncStorageTaskQueue-CjoL-35w.d.ts → asyncStorageTaskQueue-CHpI3moJ.d.ts} +1 -1
  12. package/dist/{chunk-VKKLOT2E.js → chunk-BOA4SHCD.js} +3 -3
  13. package/dist/{chunk-VKKLOT2E.js.map → chunk-BOA4SHCD.js.map} +1 -1
  14. package/dist/{chunk-PLJZRIFZ.cjs → chunk-HZ7VIN7P.cjs} +11 -11
  15. package/dist/{chunk-PLJZRIFZ.cjs.map → chunk-HZ7VIN7P.cjs.map} +1 -1
  16. package/dist/{chunk-JIWCE2IK.cjs → chunk-OFQGANH2.cjs} +7 -7
  17. package/dist/{chunk-JIWCE2IK.cjs.map → chunk-OFQGANH2.cjs.map} +1 -1
  18. package/dist/{chunk-US274KZO.js → chunk-QZ6HZZZK.js} +3 -3
  19. package/dist/{chunk-US274KZO.js.map → chunk-QZ6HZZZK.js.map} +1 -1
  20. package/dist/{chunk-QGNTDGMN.cjs → chunk-SRCWBFSZ.cjs} +1945 -357
  21. package/dist/chunk-SRCWBFSZ.cjs.map +1 -0
  22. package/dist/{chunk-B4R36PRN.js → chunk-TGRJ5WAX.js} +1868 -285
  23. package/dist/chunk-TGRJ5WAX.js.map +1 -0
  24. package/dist/{chunk-3AQNLQPM.cjs → chunk-UHOHLN3C.cjs} +119 -69
  25. package/dist/chunk-UHOHLN3C.cjs.map +1 -0
  26. package/dist/{chunk-763XHDAJ.js → chunk-YBQV7XBC.js} +119 -70
  27. package/dist/chunk-YBQV7XBC.js.map +1 -0
  28. package/dist/contracts/handlers/index.d.cts +3 -3
  29. package/dist/contracts/handlers/index.d.ts +3 -3
  30. package/dist/{delegate-CgjVjYOP.d.ts → delegate-BKNqva1j.d.ts} +1 -1
  31. package/dist/{delegate-BRqbh2fW.d.cts → delegate-DOEobYwH.d.cts} +1 -1
  32. package/dist/{index-DHuXlDEg.d.cts → index-BlW4I30l.d.cts} +2 -2
  33. package/dist/{index-DvWNB_rl.d.ts → index-Cm2fGeox.d.ts} +2 -2
  34. package/dist/index.cjs +150 -126
  35. package/dist/index.d.cts +275 -19
  36. package/dist/index.d.ts +275 -19
  37. package/dist/index.js +2 -2
  38. package/dist/repositories/realm/index.cjs +17 -17
  39. package/dist/repositories/realm/index.d.cts +2 -2
  40. package/dist/repositories/realm/index.d.ts +2 -2
  41. package/dist/repositories/realm/index.js +3 -3
  42. package/dist/repositories/sqlite/index.cjs +16 -16
  43. package/dist/repositories/sqlite/index.d.cts +2 -2
  44. package/dist/repositories/sqlite/index.d.ts +2 -2
  45. package/dist/repositories/sqlite/index.js +3 -3
  46. package/dist/{taskRunner-Djlhfgi1.d.ts → taskRunner-BngWSFMi.d.ts} +1 -1
  47. package/dist/{taskRunner-BSnslNmq.d.cts → taskRunner-DOiyRuJa.d.cts} +1 -1
  48. package/dist/wallet/expo/background.cjs +12 -12
  49. package/dist/wallet/expo/background.d.cts +3 -3
  50. package/dist/wallet/expo/background.d.ts +3 -3
  51. package/dist/wallet/expo/background.js +4 -4
  52. package/dist/wallet/expo/index.cjs +21 -12
  53. package/dist/wallet/expo/index.cjs.map +1 -1
  54. package/dist/wallet/expo/index.d.cts +11 -4
  55. package/dist/wallet/expo/index.d.ts +11 -4
  56. package/dist/wallet/expo/index.js +12 -3
  57. package/dist/wallet/expo/index.js.map +1 -1
  58. package/dist/{wallet-BsqRU8KM.d.cts → wallet-B3awP1Nj.d.ts} +105 -3
  59. package/dist/{wallet-D9z7wssl.d.ts → wallet-DBjumS42.d.cts} +105 -3
  60. package/dist/worker/expo/index.cjs +7 -7
  61. package/dist/worker/expo/index.d.cts +4 -4
  62. package/dist/worker/expo/index.d.ts +4 -4
  63. package/dist/worker/expo/index.js +3 -3
  64. package/package.json +1 -1
  65. package/dist/chunk-3AQNLQPM.cjs.map +0 -1
  66. package/dist/chunk-763XHDAJ.js.map +0 -1
  67. package/dist/chunk-B4R36PRN.js.map +0 -1
  68. package/dist/chunk-QGNTDGMN.cjs.map +0 -1
@@ -122,6 +122,59 @@ function checkKeyIncludes(key, arkPsbtFieldKey) {
122
122
  return hex.encode(new Uint8Array([key.type, ...key.key])).includes(expected);
123
123
  }
124
124
 
125
+ // package.json
126
+ var version = "0.4.45";
127
+
128
+ // src/utils/fetch.ts
129
+ var buildVersion = "0.9.9";
130
+ var sdkVersion = `ts-sdk/${version}`;
131
+ var FetchError = class extends Error {
132
+ /** The request URL that failed, when derivable from the `fetch` input. */
133
+ url;
134
+ /** The HTTP method of the failed request (defaults to `"GET"`). */
135
+ method;
136
+ constructor(message, options) {
137
+ super(message, { cause: options.cause });
138
+ this.name = "FetchError";
139
+ this.url = options.url;
140
+ this.method = options.method;
141
+ }
142
+ };
143
+ function baseFetch(input, init) {
144
+ if (typeof globalThis.fetch !== "function") {
145
+ throw new Error("Fetch API is not available in this environment.");
146
+ }
147
+ return globalThis.fetch(input, init).catch((cause) => {
148
+ const { url, method } = describeRequest(input, init);
149
+ throw new FetchError(`Network request failed: ${method} ${url}`, { url, method, cause });
150
+ });
151
+ }
152
+ function fetch(input, init) {
153
+ const headers = new Headers(init?.headers);
154
+ headers.set("X-Build-Version", buildVersion);
155
+ headers.set("X-SDK-VERSION", sdkVersion);
156
+ return baseFetch(input, { ...init, headers });
157
+ }
158
+ function describeRequest(input, init) {
159
+ let url;
160
+ if (typeof input === "string") {
161
+ url = input;
162
+ } else if (input instanceof URL) {
163
+ url = input.href;
164
+ } else {
165
+ url = input.url;
166
+ }
167
+ let method;
168
+ if (init?.method !== void 0) {
169
+ method = init.method;
170
+ } else if (input instanceof Request) {
171
+ method = input.method;
172
+ } else {
173
+ method = "GET";
174
+ }
175
+ return { url, method };
176
+ }
177
+
125
178
  // src/providers/errors.ts
126
179
  var ArkError = class extends Error {
127
180
  constructor(code, message, name, metadata) {
@@ -132,6 +185,28 @@ var ArkError = class extends Error {
132
185
  this.metadata = metadata;
133
186
  }
134
187
  };
188
+ var ProviderUnavailableError = class extends Error {
189
+ /** Always `true`: this error type only ever wraps retryable conditions. */
190
+ retryable = true;
191
+ constructor(message, options) {
192
+ super(message, { cause: options?.cause });
193
+ this.name = "ProviderUnavailableError";
194
+ }
195
+ };
196
+ function throwIfHttpUnavailable(response, kind, body) {
197
+ if (body !== void 0 && maybeArkError(new Error(body))) return;
198
+ if (response.status === 429 || response.status >= 500) {
199
+ throw new ProviderUnavailableError(
200
+ `${kind} unavailable: ${response.status} ${response.statusText}`
201
+ );
202
+ }
203
+ }
204
+ function toProviderUnavailable(err, kind) {
205
+ if (err instanceof FetchError) {
206
+ return new ProviderUnavailableError(`${kind} request failed`, { cause: err });
207
+ }
208
+ return err;
209
+ }
135
210
  function maybeArkError(error) {
136
211
  try {
137
212
  if (!(error instanceof Error)) return void 0;
@@ -348,59 +423,6 @@ function prepareCoinAsIntentProofInput(coin) {
348
423
  };
349
424
  }
350
425
 
351
- // package.json
352
- var version = "0.4.43";
353
-
354
- // src/utils/fetch.ts
355
- var buildVersion = "0.9.9";
356
- var sdkVersion = `ts-sdk/${version}`;
357
- var FetchError = class extends Error {
358
- /** The request URL that failed, when derivable from the `fetch` input. */
359
- url;
360
- /** The HTTP method of the failed request (defaults to `"GET"`). */
361
- method;
362
- constructor(message, options) {
363
- super(message, { cause: options.cause });
364
- this.name = "FetchError";
365
- this.url = options.url;
366
- this.method = options.method;
367
- }
368
- };
369
- function baseFetch(input, init) {
370
- if (typeof globalThis.fetch !== "function") {
371
- throw new Error("Fetch API is not available in this environment.");
372
- }
373
- return globalThis.fetch(input, init).catch((cause) => {
374
- const { url, method } = describeRequest(input, init);
375
- throw new FetchError(`Network request failed: ${method} ${url}`, { url, method, cause });
376
- });
377
- }
378
- function fetch(input, init) {
379
- const headers = new Headers(init?.headers);
380
- headers.set("X-Build-Version", buildVersion);
381
- headers.set("X-SDK-VERSION", sdkVersion);
382
- return baseFetch(input, { ...init, headers });
383
- }
384
- function describeRequest(input, init) {
385
- let url;
386
- if (typeof input === "string") {
387
- url = input;
388
- } else if (input instanceof URL) {
389
- url = input.href;
390
- } else {
391
- url = input.url;
392
- }
393
- let method;
394
- if (init?.method !== void 0) {
395
- method = init.method;
396
- } else if (input instanceof Request) {
397
- method = input.method;
398
- } else {
399
- method = "GET";
400
- }
401
- return { url, method };
402
- }
403
-
404
426
  // src/providers/utils.ts
405
427
  function createAbortError() {
406
428
  const error = new Error("EventSource closed");
@@ -568,16 +590,24 @@ var RestArkProvider = class {
568
590
  ...init.headers
569
591
  };
570
592
  if (digest) headers["X-Digest"] = digest;
571
- const response = await fetch(url, { ...init, headers });
593
+ let response;
594
+ try {
595
+ response = await fetch(url, { ...init, headers });
596
+ } catch (err) {
597
+ throw toProviderUnavailable(err, "arkade");
598
+ }
572
599
  if (response.ok) return response;
573
600
  let body;
574
601
  try {
575
602
  body = await response.clone().text();
576
603
  } catch (e) {
577
604
  console.warn("authedFetch could not read response body for digest check", e);
605
+ throwIfHttpUnavailable(response, "arkade");
578
606
  return response;
579
607
  }
580
- if (maybeArkError(new Error(body))?.name !== "DIGEST_MISMATCH") return response;
608
+ const arkError = maybeArkError(new Error(body));
609
+ if (!arkError) throwIfHttpUnavailable(response, "arkade");
610
+ if (arkError?.name !== "DIGEST_MISMATCH") return response;
581
611
  this._digest = "";
582
612
  const info = await this.getInfo();
583
613
  this.emitServerInfoChanged(info);
@@ -590,6 +620,7 @@ var RestArkProvider = class {
590
620
  const response = await fetch(url);
591
621
  if (!response.ok) {
592
622
  const errorText = await response.text();
623
+ throwIfHttpUnavailable(response, "arkade", errorText);
593
624
  handleError(errorText, `Failed to get server info: ${response.statusText}`);
594
625
  }
595
626
  const fromServer = await response.json();
@@ -2313,6 +2344,24 @@ var Packet = class _Packet {
2313
2344
  return packet;
2314
2345
  }
2315
2346
  };
2347
+ async function indexerFetch(input, init) {
2348
+ let res;
2349
+ try {
2350
+ res = await baseFetch(input, init);
2351
+ } catch (err) {
2352
+ throw toProviderUnavailable(err, "indexer");
2353
+ }
2354
+ if (!res.ok) {
2355
+ let body;
2356
+ try {
2357
+ body = await res.clone().text();
2358
+ } catch {
2359
+ body = void 0;
2360
+ }
2361
+ throwIfHttpUnavailable(res, "indexer", body);
2362
+ }
2363
+ return res;
2364
+ }
2316
2365
  var IndexerTxType = /* @__PURE__ */ ((IndexerTxType2) => {
2317
2366
  IndexerTxType2[IndexerTxType2["INDEXER_TX_TYPE_UNSPECIFIED"] = 0] = "INDEXER_TX_TYPE_UNSPECIFIED";
2318
2367
  IndexerTxType2[IndexerTxType2["INDEXER_TX_TYPE_RECEIVED"] = 1] = "INDEXER_TX_TYPE_RECEIVED";
@@ -2342,7 +2391,7 @@ var RestIndexerProvider = class {
2342
2391
  if (params.toString()) {
2343
2392
  url += "?" + params.toString();
2344
2393
  }
2345
- const res = await baseFetch(url);
2394
+ const res = await indexerFetch(url);
2346
2395
  if (!res.ok) {
2347
2396
  throw new Error(`Failed to fetch vtxo tree: ${res.statusText}`);
2348
2397
  }
@@ -2368,7 +2417,7 @@ var RestIndexerProvider = class {
2368
2417
  if (params.toString()) {
2369
2418
  url += "?" + params.toString();
2370
2419
  }
2371
- const res = await baseFetch(url);
2420
+ const res = await indexerFetch(url);
2372
2421
  if (!res.ok) {
2373
2422
  throw new Error(`Failed to fetch vtxo tree leaves: ${res.statusText}`);
2374
2423
  }
@@ -2380,7 +2429,7 @@ var RestIndexerProvider = class {
2380
2429
  }
2381
2430
  async getBatchSweepTransactions(batchOutpoint) {
2382
2431
  const url = `${this.serverUrl}/v1/indexer/batch/${batchOutpoint.txid}/${batchOutpoint.vout}/sweepTxs`;
2383
- const res = await baseFetch(url);
2432
+ const res = await indexerFetch(url);
2384
2433
  if (!res.ok) {
2385
2434
  throw new Error(`Failed to fetch batch sweep transactions: ${res.statusText}`);
2386
2435
  }
@@ -2392,7 +2441,7 @@ var RestIndexerProvider = class {
2392
2441
  }
2393
2442
  async getCommitmentTx(txid) {
2394
2443
  const url = `${this.serverUrl}/v1/indexer/commitmentTx/${txid}`;
2395
- const res = await baseFetch(url);
2444
+ const res = await indexerFetch(url);
2396
2445
  if (!res.ok) {
2397
2446
  throw new Error(`Failed to fetch commitment tx: ${res.statusText}`);
2398
2447
  }
@@ -2413,7 +2462,7 @@ var RestIndexerProvider = class {
2413
2462
  if (params.toString()) {
2414
2463
  url += "?" + params.toString();
2415
2464
  }
2416
- const res = await baseFetch(url);
2465
+ const res = await indexerFetch(url);
2417
2466
  if (!res.ok) {
2418
2467
  throw new Error(`Failed to fetch commitment tx connectors: ${res.statusText}`);
2419
2468
  }
@@ -2439,7 +2488,7 @@ var RestIndexerProvider = class {
2439
2488
  if (params.toString()) {
2440
2489
  url += "?" + params.toString();
2441
2490
  }
2442
- const res = await baseFetch(url);
2491
+ const res = await indexerFetch(url);
2443
2492
  if (!res.ok) {
2444
2493
  throw new Error(`Failed to fetch commitment tx forfeitTxs: ${res.statusText}`);
2445
2494
  }
@@ -2522,7 +2571,7 @@ var RestIndexerProvider = class {
2522
2571
  if (params.toString()) {
2523
2572
  url += "?" + params.toString();
2524
2573
  }
2525
- const res = await baseFetch(url);
2574
+ const res = await indexerFetch(url);
2526
2575
  if (!res.ok) {
2527
2576
  throw new Error(`Failed to fetch virtual txs: ${res.statusText}`);
2528
2577
  }
@@ -2543,7 +2592,7 @@ var RestIndexerProvider = class {
2543
2592
  if (params.toString()) {
2544
2593
  url += "?" + params.toString();
2545
2594
  }
2546
- const res = await baseFetch(url);
2595
+ const res = await indexerFetch(url);
2547
2596
  if (!res.ok) {
2548
2597
  throw new Error(`Failed to fetch vtxo chain: ${res.statusText}`);
2549
2598
  }
@@ -2602,7 +2651,7 @@ var RestIndexerProvider = class {
2602
2651
  if (params.toString()) {
2603
2652
  url += "?" + params.toString();
2604
2653
  }
2605
- const res = await baseFetch(url);
2654
+ const res = await indexerFetch(url);
2606
2655
  if (!res.ok) {
2607
2656
  throw new Error(`Failed to fetch vtxos: ${res.statusText}`);
2608
2657
  }
@@ -2617,7 +2666,7 @@ var RestIndexerProvider = class {
2617
2666
  }
2618
2667
  async getAssetDetails(assetId) {
2619
2668
  const url = `${this.serverUrl}/v1/indexer/asset/${encodeURIComponent(assetId)}`;
2620
- const res = await baseFetch(url);
2669
+ const res = await indexerFetch(url);
2621
2670
  if (!res.ok) {
2622
2671
  throw new Error(`Failed to fetch asset details: ${res.statusText}`);
2623
2672
  }
@@ -2635,7 +2684,7 @@ var RestIndexerProvider = class {
2635
2684
  }
2636
2685
  async subscribeForScripts(scripts, subscriptionId) {
2637
2686
  const url = `${this.serverUrl}/v1/indexer/script/subscribe`;
2638
- const res = await baseFetch(url, {
2687
+ const res = await indexerFetch(url, {
2639
2688
  headers: {
2640
2689
  "Content-Type": "application/json"
2641
2690
  },
@@ -2652,7 +2701,7 @@ var RestIndexerProvider = class {
2652
2701
  }
2653
2702
  async unsubscribeForScripts(subscriptionId, scripts) {
2654
2703
  const url = `${this.serverUrl}/v1/indexer/script/unsubscribe`;
2655
- const res = await baseFetch(url, {
2704
+ const res = await indexerFetch(url, {
2656
2705
  headers: {
2657
2706
  "Content-Type": "application/json"
2658
2707
  },
@@ -2807,6 +2856,6 @@ var Response;
2807
2856
  Response2.isGetAssetResponse = isGetAssetResponse;
2808
2857
  })(Response || (Response = {}));
2809
2858
 
2810
- export { ArkError, ArkPsbtFieldKey, ArkPsbtFieldKeyType, AssetGroup, AssetId, AssetInput, AssetOutput, AssetRef, BufferReader, ChainTxType, ConditionWitness, CosignerPublicKey, DigestMismatchError, FetchError, IndexerTxType, Intent, Metadata, OP_RETURN_EMPTY_PKSCRIPT, Packet, RestArkProvider, RestIndexerProvider, SettlementEventType, Transaction, VtxoTaprootTree, VtxoTreeExpiry, asset_exports, baseFetch, buildVersion, craftToSpendTx, fetch, getArkPsbtFields, isEventSourceError, isFetchTimeoutError, maybeArkError, sdkVersion, setArkPsbtField };
2811
- //# sourceMappingURL=chunk-763XHDAJ.js.map
2812
- //# sourceMappingURL=chunk-763XHDAJ.js.map
2859
+ export { ArkError, ArkPsbtFieldKey, ArkPsbtFieldKeyType, AssetGroup, AssetId, AssetInput, AssetOutput, AssetRef, BufferReader, ChainTxType, ConditionWitness, CosignerPublicKey, DigestMismatchError, FetchError, IndexerTxType, Intent, Metadata, OP_RETURN_EMPTY_PKSCRIPT, Packet, ProviderUnavailableError, RestArkProvider, RestIndexerProvider, SettlementEventType, Transaction, VtxoTaprootTree, VtxoTreeExpiry, asset_exports, baseFetch, buildVersion, craftToSpendTx, fetch, getArkPsbtFields, isEventSourceError, isFetchTimeoutError, maybeArkError, sdkVersion, setArkPsbtField };
2860
+ //# sourceMappingURL=chunk-YBQV7XBC.js.map
2861
+ //# sourceMappingURL=chunk-YBQV7XBC.js.map