@arkade-os/sdk 0.4.18 → 0.4.20

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 (60) hide show
  1. package/dist/cjs/contracts/contractWatcher.js +7 -1
  2. package/dist/cjs/contracts/handlers/default.js +10 -3
  3. package/dist/cjs/contracts/handlers/helpers.js +47 -5
  4. package/dist/cjs/contracts/handlers/vhtlc.js +4 -2
  5. package/dist/cjs/identity/descriptor.js +98 -0
  6. package/dist/cjs/identity/descriptorProvider.js +2 -0
  7. package/dist/cjs/identity/index.js +15 -1
  8. package/dist/cjs/identity/seedIdentity.js +91 -6
  9. package/dist/cjs/identity/serialize.js +166 -0
  10. package/dist/cjs/identity/staticDescriptorProvider.js +65 -0
  11. package/dist/cjs/index.js +6 -3
  12. package/dist/cjs/providers/ark.js +45 -34
  13. package/dist/cjs/providers/electrum.js +663 -0
  14. package/dist/cjs/providers/indexer.js +5 -1
  15. package/dist/cjs/providers/utils.js +4 -0
  16. package/dist/cjs/wallet/ramps.js +1 -1
  17. package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +10 -0
  18. package/dist/cjs/wallet/serviceWorker/wallet.js +137 -91
  19. package/dist/cjs/wallet/vtxo-manager.js +133 -17
  20. package/dist/cjs/wallet/wallet.js +80 -19
  21. package/dist/cjs/worker/messageBus.js +200 -56
  22. package/dist/esm/contracts/contractWatcher.js +7 -1
  23. package/dist/esm/contracts/handlers/default.js +10 -3
  24. package/dist/esm/contracts/handlers/helpers.js +47 -5
  25. package/dist/esm/contracts/handlers/vhtlc.js +4 -2
  26. package/dist/esm/identity/descriptor.js +92 -0
  27. package/dist/esm/identity/descriptorProvider.js +1 -0
  28. package/dist/esm/identity/index.js +6 -1
  29. package/dist/esm/identity/seedIdentity.js +89 -6
  30. package/dist/esm/identity/serialize.js +159 -0
  31. package/dist/esm/identity/staticDescriptorProvider.js +61 -0
  32. package/dist/esm/index.js +2 -1
  33. package/dist/esm/providers/ark.js +46 -35
  34. package/dist/esm/providers/electrum.js +658 -0
  35. package/dist/esm/providers/indexer.js +6 -2
  36. package/dist/esm/providers/utils.js +3 -0
  37. package/dist/esm/wallet/ramps.js +1 -1
  38. package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +10 -0
  39. package/dist/esm/wallet/serviceWorker/wallet.js +137 -91
  40. package/dist/esm/wallet/vtxo-manager.js +133 -17
  41. package/dist/esm/wallet/wallet.js +80 -19
  42. package/dist/esm/worker/messageBus.js +201 -57
  43. package/dist/types/contracts/handlers/default.d.ts +1 -1
  44. package/dist/types/contracts/handlers/helpers.d.ts +1 -1
  45. package/dist/types/contracts/types.d.ts +11 -3
  46. package/dist/types/identity/descriptor.d.ts +35 -0
  47. package/dist/types/identity/descriptorProvider.d.ts +28 -0
  48. package/dist/types/identity/index.d.ts +7 -1
  49. package/dist/types/identity/seedIdentity.d.ts +41 -4
  50. package/dist/types/identity/serialize.d.ts +84 -0
  51. package/dist/types/identity/staticDescriptorProvider.d.ts +18 -0
  52. package/dist/types/index.d.ts +4 -2
  53. package/dist/types/providers/electrum.d.ts +212 -0
  54. package/dist/types/providers/utils.d.ts +1 -0
  55. package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +11 -2
  56. package/dist/types/wallet/serviceWorker/wallet.d.ts +27 -10
  57. package/dist/types/wallet/vtxo-manager.d.ts +15 -0
  58. package/dist/types/wallet/wallet.d.ts +3 -0
  59. package/dist/types/worker/messageBus.d.ts +68 -8
  60. package/package.json +3 -2
@@ -1,5 +1,5 @@
1
1
  import { hex } from "@scure/base";
2
- import { eventSourceIterator } from './utils.js';
2
+ import { eventSourceIterator, isEventSourceError } from './utils.js';
3
3
  import { maybeArkError } from './errors.js';
4
4
  import { Intent } from '../intent/index.js';
5
5
  export var SettlementEventType;
@@ -227,28 +227,21 @@ export class RestArkProvider {
227
227
  const queryParams = topics.length > 0
228
228
  ? `?${topics.map((topic) => `topics=${encodeURIComponent(topic)}`).join("&")}`
229
229
  : "";
230
- // Create first EventSource eagerly so events are buffered
231
- // before the caller starts iterating, preventing race conditions
232
- // where the server emits events before iteration begins.
233
- const eagerEventSource = new EventSource(url + queryParams);
234
- const eagerIterator = eventSourceIterator(eagerEventSource);
230
+ // The EventSource is allocated inside the generator body so that
231
+ // abandoning the returned iterator before iteration starts does not
232
+ // leak the underlying SSE connection. `return()` is overridden below
233
+ // so that closing the generator also closes the connection even when
234
+ // the body is currently suspended at an await point.
235
+ let eventSource = null;
235
236
  // eslint-disable-next-line @typescript-eslint/no-this-alias
236
237
  const self = this;
237
- return (async function* () {
238
- let firstIteration = true;
239
- while (!signal?.aborted) {
240
- const eventSource = firstIteration
241
- ? eagerEventSource
242
- : new EventSource(url + queryParams);
243
- const iterator = firstIteration
244
- ? eagerIterator
245
- : eventSourceIterator(eventSource);
246
- firstIteration = false;
247
- try {
248
- const abortHandler = () => {
249
- eventSource.close();
250
- };
251
- signal?.addEventListener("abort", abortHandler);
238
+ const gen = (async function* () {
239
+ const abortHandler = () => eventSource?.close();
240
+ signal?.addEventListener("abort", abortHandler);
241
+ try {
242
+ while (!signal?.aborted) {
243
+ eventSource = new EventSource(url + queryParams);
244
+ const iterator = eventSourceIterator(eventSource);
252
245
  try {
253
246
  for await (const event of iterator) {
254
247
  if (signal?.aborted)
@@ -266,25 +259,39 @@ export class RestArkProvider {
266
259
  }
267
260
  }
268
261
  }
262
+ catch (error) {
263
+ if (signal?.aborted ||
264
+ (error instanceof Error &&
265
+ error.name === "AbortError")) {
266
+ break;
267
+ }
268
+ // ignore timeout errors, they're expected when the server is not sending anything for 5 min
269
+ if (isFetchTimeoutError(error)) {
270
+ console.debug("Timeout error ignored");
271
+ continue;
272
+ }
273
+ if (isEventSourceError(error)) {
274
+ throw error;
275
+ }
276
+ console.error("Event stream error:", error);
277
+ throw error;
278
+ }
269
279
  finally {
270
- signal?.removeEventListener("abort", abortHandler);
271
280
  eventSource.close();
272
281
  }
273
282
  }
274
- catch (error) {
275
- if (error instanceof Error && error.name === "AbortError") {
276
- break;
277
- }
278
- // ignore timeout errors, they're expected when the server is not sending anything for 5 min
279
- if (isFetchTimeoutError(error)) {
280
- console.debug("Timeout error ignored");
281
- continue;
282
- }
283
- console.error("Event stream error:", error);
284
- throw error;
285
- }
283
+ }
284
+ finally {
285
+ signal?.removeEventListener("abort", abortHandler);
286
+ eventSource?.close();
286
287
  }
287
288
  })();
289
+ const origReturn = gen.return.bind(gen);
290
+ gen.return = (value) => {
291
+ eventSource?.close();
292
+ return origReturn(value);
293
+ };
294
+ return gen;
288
295
  }
289
296
  async *getTransactionsStream(signal) {
290
297
  const url = `${this.serverUrl}/v1/txs`;
@@ -319,7 +326,8 @@ export class RestArkProvider {
319
326
  }
320
327
  }
321
328
  catch (error) {
322
- if (error instanceof Error && error.name === "AbortError") {
329
+ if (signal?.aborted ||
330
+ (error instanceof Error && error.name === "AbortError")) {
323
331
  break;
324
332
  }
325
333
  // ignore timeout errors, they're expected when the server is not sending anything for 5 min
@@ -327,6 +335,9 @@ export class RestArkProvider {
327
335
  console.debug("Timeout error ignored");
328
336
  continue;
329
337
  }
338
+ if (isEventSourceError(error)) {
339
+ throw error;
340
+ }
330
341
  console.error("Transaction stream error:", error);
331
342
  throw error;
332
343
  }