@arkade-os/boltz-swap 0.3.32 → 0.3.34

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 (31) hide show
  1. package/README.md +22 -26
  2. package/dist/{arkade-swaps-CS8FZSVL.d.cts → arkade-swaps-BXAD1s8j.d.ts} +69 -8
  3. package/dist/{arkade-swaps-WiKCanCL.d.ts → arkade-swaps-CfMets16.d.cts} +69 -8
  4. package/dist/{chunk-NHBWNN6H.js → chunk-5K2FS2FE.js} +8 -27
  5. package/dist/chunk-SJQJQO7P.js +25 -0
  6. package/dist/{chunk-B3Q4TFWT.js → chunk-TDBUZE4N.js} +817 -866
  7. package/dist/expo/background.cjs +840 -892
  8. package/dist/expo/background.d.cts +3 -3
  9. package/dist/expo/background.d.ts +3 -3
  10. package/dist/expo/background.js +9 -20
  11. package/dist/expo/index.cjs +840 -870
  12. package/dist/expo/index.d.cts +8 -6
  13. package/dist/expo/index.d.ts +8 -6
  14. package/dist/expo/index.js +17 -20
  15. package/dist/index.cjs +1034 -1022
  16. package/dist/index.d.cts +95 -11
  17. package/dist/index.d.ts +95 -11
  18. package/dist/index.js +164 -119
  19. package/dist/repositories/realm/index.cjs +10 -22
  20. package/dist/repositories/realm/index.d.cts +7 -5
  21. package/dist/repositories/realm/index.d.ts +7 -5
  22. package/dist/repositories/realm/index.js +8 -22
  23. package/dist/repositories/sqlite/index.cjs +12 -23
  24. package/dist/repositories/sqlite/index.d.cts +1 -1
  25. package/dist/repositories/sqlite/index.d.ts +1 -1
  26. package/dist/repositories/sqlite/index.js +10 -23
  27. package/dist/{swapsPollProcessor-BF3uTFae.d.cts → swapsPollProcessor-BpAqG0V6.d.cts} +3 -3
  28. package/dist/{swapsPollProcessor-wYOMzldd.d.ts → swapsPollProcessor-DFVOAy_-.d.ts} +3 -3
  29. package/dist/{types-BBI7-KJ0.d.cts → types--axEWA8c.d.cts} +42 -4
  30. package/dist/{types-BBI7-KJ0.d.ts → types--axEWA8c.d.ts} +42 -4
  31. package/package.json +10 -25
package/dist/index.js CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  InvoiceFailedToPayError,
9
9
  NetworkError,
10
10
  PreimageFetchError,
11
+ QuoteRejectedError,
11
12
  SchemaError,
12
13
  SwapError,
13
14
  SwapExpiredError,
@@ -51,13 +52,20 @@ import {
51
52
  updateReverseSwapStatus,
52
53
  updateSubmarineSwapStatus,
53
54
  verifySignatures
54
- } from "./chunk-B3Q4TFWT.js";
55
+ } from "./chunk-TDBUZE4N.js";
56
+ import {
57
+ applyCreatedAtOrder,
58
+ applySwapsFilter
59
+ } from "./chunk-SJQJQO7P.js";
55
60
 
56
61
  // src/serviceWorker/arkade-swaps-message-handler.ts
57
- import {
58
- RestArkProvider,
59
- RestIndexerProvider
60
- } from "@arkade-os/sdk";
62
+ import { RestArkProvider, RestIndexerProvider } from "@arkade-os/sdk";
63
+ function toQuoteTransportError(error) {
64
+ if (error instanceof QuoteRejectedError) {
65
+ return error.toTransportError();
66
+ }
67
+ return error;
68
+ }
61
69
  var DEFAULT_MESSAGE_TAG = "ARKADE_SWAPS_UPDATER";
62
70
  var HANDLER_NOT_INITIALIZED = "ArkadeSwaps handler not initialized";
63
71
  var HandlerNotInitializedError = class extends Error {
@@ -173,9 +181,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
173
181
  try {
174
182
  switch (message.type) {
175
183
  case "CREATE_LIGHTNING_INVOICE": {
176
- const res = await this.handler.createLightningInvoice(
177
- message.payload
178
- );
184
+ const res = await this.handler.createLightningInvoice(message.payload);
179
185
  return this.tagged({
180
186
  id,
181
187
  type: "LIGHTNING_INVOICE_CREATED",
@@ -183,9 +189,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
183
189
  });
184
190
  }
185
191
  case "SEND_LIGHTNING_PAYMENT": {
186
- const res = await this.handler.sendLightningPayment(
187
- message.payload
188
- );
192
+ const res = await this.handler.sendLightningPayment(message.payload);
189
193
  return this.tagged({
190
194
  id,
191
195
  type: "LIGHTNING_PAYMENT_SENT",
@@ -193,9 +197,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
193
197
  });
194
198
  }
195
199
  case "CREATE_SUBMARINE_SWAP": {
196
- const res = await this.handler.createSubmarineSwap(
197
- message.payload
198
- );
200
+ const res = await this.handler.createSubmarineSwap(message.payload);
199
201
  return this.tagged({
200
202
  id,
201
203
  type: "SUBMARINE_SWAP_CREATED",
@@ -203,9 +205,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
203
205
  });
204
206
  }
205
207
  case "CREATE_REVERSE_SWAP": {
206
- const res = await this.handler.createReverseSwap(
207
- message.payload
208
- );
208
+ const res = await this.handler.createReverseSwap(message.payload);
209
209
  return this.tagged({
210
210
  id,
211
211
  type: "REVERSE_SWAP_CREATED",
@@ -216,9 +216,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
216
216
  await this.handler.claimVHTLC(message.payload);
217
217
  return this.tagged({ id, type: "VHTLC_CLAIMED" });
218
218
  case "REFUND_VHTLC": {
219
- const outcome = await this.handler.refundVHTLC(
220
- message.payload
221
- );
219
+ const outcome = await this.handler.refundVHTLC(message.payload);
222
220
  return this.tagged({
223
221
  id,
224
222
  type: "VHTLC_REFUNDED",
@@ -226,9 +224,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
226
224
  });
227
225
  }
228
226
  case "INSPECT_SUBMARINE_RECOVERY": {
229
- const info = await this.handler.inspectSubmarineRecovery(
230
- message.payload
231
- );
227
+ const info = await this.handler.inspectSubmarineRecovery(message.payload);
232
228
  return this.tagged({
233
229
  id,
234
230
  type: "SUBMARINE_RECOVERY_INSPECTED",
@@ -244,9 +240,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
244
240
  });
245
241
  }
246
242
  case "RECOVER_SUBMARINE_FUNDS": {
247
- const outcome = await this.handler.recoverSubmarineFunds(
248
- message.payload
249
- );
243
+ const outcome = await this.handler.recoverSubmarineFunds(message.payload);
250
244
  return this.tagged({
251
245
  id,
252
246
  type: "SUBMARINE_FUNDS_RECOVERED",
@@ -254,9 +248,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
254
248
  });
255
249
  }
256
250
  case "RECOVER_ALL_SUBMARINE_FUNDS": {
257
- const results = await this.handler.recoverAllSubmarineFunds(
258
- message.payload
259
- );
251
+ const results = await this.handler.recoverAllSubmarineFunds(message.payload);
260
252
  return this.tagged({
261
253
  id,
262
254
  type: "ALL_SUBMARINE_FUNDS_RECOVERED",
@@ -264,9 +256,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
264
256
  });
265
257
  }
266
258
  case "WAIT_AND_CLAIM": {
267
- const res = await this.handler.waitAndClaim(
268
- message.payload
269
- );
259
+ const res = await this.handler.waitAndClaim(message.payload);
270
260
  return this.tagged({
271
261
  id,
272
262
  type: "WAIT_AND_CLAIMED",
@@ -274,9 +264,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
274
264
  });
275
265
  }
276
266
  case "WAIT_FOR_SWAP_SETTLEMENT": {
277
- const res = await this.handler.waitForSwapSettlement(
278
- message.payload
279
- );
267
+ const res = await this.handler.waitForSwapSettlement(message.payload);
280
268
  return this.tagged({
281
269
  id,
282
270
  type: "SWAP_SETTLED",
@@ -284,9 +272,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
284
272
  });
285
273
  }
286
274
  case "RESTORE_SWAPS": {
287
- const res = await this.handler.restoreSwaps(
288
- message.payload
289
- );
275
+ const res = await this.handler.restoreSwaps(message.payload);
290
276
  return this.tagged({
291
277
  id,
292
278
  type: "SWAPS_RESTORED",
@@ -316,23 +302,15 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
316
302
  });
317
303
  }
318
304
  case "GET_FEES": {
319
- const res = message.payload ? await this.handler.getFees(
320
- message.payload.from,
321
- message.payload.to
322
- ) : await this.handler.getFees();
305
+ const res = message.payload ? await this.handler.getFees(message.payload.from, message.payload.to) : await this.handler.getFees();
323
306
  return this.tagged({ id, type: "FEES", payload: res });
324
307
  }
325
308
  case "GET_LIMITS": {
326
- const res = message.payload ? await this.handler.getLimits(
327
- message.payload.from,
328
- message.payload.to
329
- ) : await this.handler.getLimits();
309
+ const res = message.payload ? await this.handler.getLimits(message.payload.from, message.payload.to) : await this.handler.getLimits();
330
310
  return this.tagged({ id, type: "LIMITS", payload: res });
331
311
  }
332
312
  case "GET_SWAP_STATUS": {
333
- const res = await this.handler.getSwapStatus(
334
- message.payload.swapId
335
- );
313
+ const res = await this.handler.getSwapStatus(message.payload.swapId);
336
314
  return this.tagged({
337
315
  id,
338
316
  type: "SWAP_STATUS",
@@ -391,9 +369,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
391
369
  });
392
370
  }
393
371
  case "CREATE_CHAIN_SWAP": {
394
- const res = await this.handler.createChainSwap(
395
- message.payload
396
- );
372
+ const res = await this.handler.createChainSwap(message.payload);
397
373
  return this.tagged({
398
374
  id,
399
375
  type: "CHAIN_SWAP_CREATED",
@@ -401,9 +377,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
401
377
  });
402
378
  }
403
379
  case "WAIT_AND_CLAIM_CHAIN": {
404
- const res = await this.handler.waitAndClaimChain(
405
- message.payload
406
- );
380
+ const res = await this.handler.waitAndClaimChain(message.payload);
407
381
  return this.tagged({
408
382
  id,
409
383
  type: "CHAIN_CLAIMED",
@@ -411,9 +385,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
411
385
  });
412
386
  }
413
387
  case "WAIT_AND_CLAIM_ARK": {
414
- const res = await this.handler.waitAndClaimArk(
415
- message.payload
416
- );
388
+ const res = await this.handler.waitAndClaimArk(message.payload);
417
389
  return this.tagged({
418
390
  id,
419
391
  type: "ARK_CLAIMED",
@@ -421,9 +393,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
421
393
  });
422
394
  }
423
395
  case "WAIT_AND_CLAIM_BTC": {
424
- const res = await this.handler.waitAndClaimBtc(
425
- message.payload
426
- );
396
+ const res = await this.handler.waitAndClaimBtc(message.payload);
427
397
  return this.tagged({
428
398
  id,
429
399
  type: "BTC_CLAIMED",
@@ -436,13 +406,16 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
436
406
  case "CLAIM_BTC":
437
407
  await this.handler.claimBtc(message.payload);
438
408
  return this.tagged({ id, type: "BTC_CLAIM_EXECUTED" });
439
- case "REFUND_ARK":
440
- await this.handler.refundArk(message.payload);
441
- return this.tagged({ id, type: "ARK_REFUND_EXECUTED" });
409
+ case "REFUND_ARK": {
410
+ const outcome = await this.handler.refundArk(message.payload);
411
+ return this.tagged({
412
+ id,
413
+ type: "ARK_REFUND_EXECUTED",
414
+ payload: outcome
415
+ });
416
+ }
442
417
  case "SIGN_SERVER_CLAIM":
443
- await this.handler.signCooperativeClaimForServer(
444
- message.payload
445
- );
418
+ await this.handler.signCooperativeClaimForServer(message.payload);
446
419
  return this.tagged({ id, type: "SERVER_CLAIM_SIGNED" });
447
420
  case "VERIFY_CHAIN_SWAP": {
448
421
  const verified = await this.handler.verifyChainSwap({
@@ -455,14 +428,47 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
455
428
  });
456
429
  }
457
430
  case "QUOTE_SWAP": {
458
- const amount = await this.handler.quoteSwap(
459
- message.payload.swapId
460
- );
461
- return this.tagged({
462
- id,
463
- type: "SWAP_QUOTED",
464
- payload: { amount }
465
- });
431
+ try {
432
+ const amount = await this.handler.quoteSwap(
433
+ message.payload.swapId,
434
+ message.payload.options
435
+ );
436
+ return this.tagged({
437
+ id,
438
+ type: "SWAP_QUOTED",
439
+ payload: { amount }
440
+ });
441
+ } catch (e) {
442
+ throw toQuoteTransportError(e);
443
+ }
444
+ }
445
+ case "GET_SWAP_QUOTE": {
446
+ try {
447
+ const amount = await this.handler.getSwapQuote(message.payload.swapId);
448
+ return this.tagged({
449
+ id,
450
+ type: "SWAP_QUOTE_RETRIEVED",
451
+ payload: { amount }
452
+ });
453
+ } catch (e) {
454
+ throw toQuoteTransportError(e);
455
+ }
456
+ }
457
+ case "ACCEPT_SWAP_QUOTE": {
458
+ try {
459
+ const amount = await this.handler.acceptSwapQuote(
460
+ message.payload.swapId,
461
+ message.payload.amount,
462
+ message.payload.options
463
+ );
464
+ return this.tagged({
465
+ id,
466
+ type: "SWAP_QUOTE_ACCEPTED",
467
+ payload: { amount }
468
+ });
469
+ } catch (e) {
470
+ throw toQuoteTransportError(e);
471
+ }
466
472
  }
467
473
  /* --- SwapManager methods --- */
468
474
  case "SM-START": {
@@ -478,9 +484,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
478
484
  return this.tagged({ id, type: "SM-SWAP_ADDED" });
479
485
  }
480
486
  case "SM-REMOVE_SWAP": {
481
- await this.getSwapManagerOrThrow().removeSwap(
482
- message.payload.swapId
483
- );
487
+ await this.getSwapManagerOrThrow().removeSwap(message.payload.swapId);
484
488
  return this.tagged({ id, type: "SM-SWAP_REMOVED" });
485
489
  }
486
490
  case "SM-GET_PENDING_SWAPS": {
@@ -492,9 +496,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
492
496
  });
493
497
  }
494
498
  case "SM-HAS_SWAP": {
495
- const has = await this.getSwapManagerOrThrow().hasSwap(
496
- message.payload.swapId
497
- );
499
+ const has = await this.getSwapManagerOrThrow().hasSwap(message.payload.swapId);
498
500
  return this.tagged({
499
501
  id,
500
502
  type: "SM-HAS_SWAP_RESULT",
@@ -608,6 +610,7 @@ var ArkadeSwapsMessageHandler = class _ArkadeSwapsMessageHandler {
608
610
 
609
611
  // src/serviceWorker/arkade-swaps-runtime.ts
610
612
  import {
613
+ getRandomId,
611
614
  MESSAGE_BUS_NOT_INITIALIZED,
612
615
  ServiceWorkerTimeoutError
613
616
  } from "@arkade-os/sdk";
@@ -617,6 +620,11 @@ function isMessageBusNotInitializedError(error) {
617
620
  function isHandlerNotInitializedError(error) {
618
621
  return error instanceof Error && error.message.includes(HANDLER_NOT_INITIALIZED);
619
622
  }
623
+ function rethrowIfQuoteRejected(error) {
624
+ if (error instanceof QuoteRejectedError) throw error;
625
+ const rebuilt = QuoteRejectedError.fromTransportError(error);
626
+ if (rebuilt) throw rebuilt;
627
+ }
620
628
  var DEFAULT_MESSAGE_TIMEOUT_MS = 3e4;
621
629
  var NO_MESSAGE_TIMEOUT_MS = 0;
622
630
  var DEDUPABLE_REQUEST_TYPES = /* @__PURE__ */ new Set([
@@ -1084,12 +1092,13 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1084
1092
  });
1085
1093
  }
1086
1094
  async refundArk(pendingSwap) {
1087
- await this.sendMessage({
1095
+ const res = await this.sendMessage({
1088
1096
  id: getRandomId(),
1089
1097
  tag: this.messageTag,
1090
1098
  type: "REFUND_ARK",
1091
1099
  payload: pendingSwap
1092
1100
  });
1101
+ return res.payload;
1093
1102
  }
1094
1103
  async signCooperativeClaimForServer(pendingSwap) {
1095
1104
  await this.sendMessage({
@@ -1117,19 +1126,48 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1117
1126
  throw new Error("Cannot verify chain swap", { cause: e });
1118
1127
  }
1119
1128
  }
1120
- async quoteSwap(swapId) {
1129
+ async quoteSwap(swapId, options) {
1121
1130
  try {
1122
1131
  const res = await this.sendMessage({
1123
1132
  id: getRandomId(),
1124
1133
  tag: this.messageTag,
1125
1134
  type: "QUOTE_SWAP",
1126
- payload: { swapId }
1135
+ payload: { swapId, options }
1127
1136
  });
1128
1137
  return res.payload.amount;
1129
1138
  } catch (e) {
1139
+ rethrowIfQuoteRejected(e);
1130
1140
  throw new Error("Cannot quote swap", { cause: e });
1131
1141
  }
1132
1142
  }
1143
+ async getSwapQuote(swapId) {
1144
+ try {
1145
+ const res = await this.sendMessage({
1146
+ id: getRandomId(),
1147
+ tag: this.messageTag,
1148
+ type: "GET_SWAP_QUOTE",
1149
+ payload: { swapId }
1150
+ });
1151
+ return res.payload.amount;
1152
+ } catch (e) {
1153
+ rethrowIfQuoteRejected(e);
1154
+ throw new Error("Cannot get swap quote", { cause: e });
1155
+ }
1156
+ }
1157
+ async acceptSwapQuote(swapId, amount, options) {
1158
+ try {
1159
+ const res = await this.sendMessage({
1160
+ id: getRandomId(),
1161
+ tag: this.messageTag,
1162
+ type: "ACCEPT_SWAP_QUOTE",
1163
+ payload: { swapId, amount, options }
1164
+ });
1165
+ return res.payload.amount;
1166
+ } catch (e) {
1167
+ rethrowIfQuoteRejected(e);
1168
+ throw new Error("Cannot accept swap quote", { cause: e });
1169
+ }
1170
+ }
1133
1171
  enrichReverseSwapPreimage(swap, preimage) {
1134
1172
  return enrichReverseSwapPreimage(swap, preimage);
1135
1173
  }
@@ -1137,9 +1175,7 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1137
1175
  return enrichSubmarineSwapInvoice(swap, invoice);
1138
1176
  }
1139
1177
  createVHTLCScript(_args) {
1140
- throw new Error(
1141
- "createVHTLCScript is not supported via service worker"
1142
- );
1178
+ throw new Error("createVHTLCScript is not supported via service worker");
1143
1179
  }
1144
1180
  async joinBatch(_identity, _input, _output, _arkInfo, _isRecoverable = true) {
1145
1181
  throw new Error("joinBatch is not supported via service worker");
@@ -1269,10 +1305,7 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1269
1305
  return new Promise((resolve, reject) => {
1270
1306
  const cleanup = () => {
1271
1307
  clearTimeout(timeoutId);
1272
- navigator.serviceWorker.removeEventListener(
1273
- "message",
1274
- messageHandler
1275
- );
1308
+ navigator.serviceWorker.removeEventListener("message", messageHandler);
1276
1309
  };
1277
1310
  const timeoutId = timeoutMs > 0 ? setTimeout(() => {
1278
1311
  cleanup();
@@ -1317,18 +1350,11 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1317
1350
  const pingId = getRandomId();
1318
1351
  const cleanup = () => {
1319
1352
  clearTimeout(timeoutId);
1320
- navigator.serviceWorker.removeEventListener(
1321
- "message",
1322
- onMessage
1323
- );
1353
+ navigator.serviceWorker.removeEventListener("message", onMessage);
1324
1354
  };
1325
1355
  const timeoutId = setTimeout(() => {
1326
1356
  cleanup();
1327
- reject(
1328
- new ServiceWorkerTimeoutError(
1329
- "Service worker ping timed out"
1330
- )
1331
- );
1357
+ reject(new ServiceWorkerTimeoutError("Service worker ping timed out"));
1332
1358
  }, 2e3);
1333
1359
  const onMessage = (event) => {
1334
1360
  if (event.data?.id === pingId && event.data?.tag === "PONG") {
@@ -1356,9 +1382,7 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1356
1382
  await this.reinitialize();
1357
1383
  }
1358
1384
  }
1359
- const timeoutMs = LONG_RUNNING_ARKADE_SWAPS_REQUEST_TYPES.has(
1360
- request.type
1361
- ) ? NO_MESSAGE_TIMEOUT_MS : DEFAULT_MESSAGE_TIMEOUT_MS;
1385
+ const timeoutMs = LONG_RUNNING_ARKADE_SWAPS_REQUEST_TYPES.has(request.type) ? NO_MESSAGE_TIMEOUT_MS : DEFAULT_MESSAGE_TIMEOUT_MS;
1362
1386
  const maxRetries = 2;
1363
1387
  for (let attempt = 0; ; attempt++) {
1364
1388
  try {
@@ -1384,10 +1408,7 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1384
1408
  id: getRandomId(),
1385
1409
  payload: this.initPayload
1386
1410
  };
1387
- await this.sendMessageDirect(
1388
- initMessage,
1389
- DEFAULT_MESSAGE_TIMEOUT_MS
1390
- );
1411
+ await this.sendMessageDirect(initMessage, DEFAULT_MESSAGE_TIMEOUT_MS);
1391
1412
  })().finally(() => {
1392
1413
  this.reinitPromise = null;
1393
1414
  });
@@ -1396,10 +1417,7 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1396
1417
  initEventStream() {
1397
1418
  if (this.eventListenerInitialized) return;
1398
1419
  this.eventListenerInitialized = true;
1399
- navigator.serviceWorker.addEventListener(
1400
- "message",
1401
- this.handleEventMessage
1402
- );
1420
+ navigator.serviceWorker.addEventListener("message", this.handleEventMessage);
1403
1421
  }
1404
1422
  handleEventMessage = (event) => {
1405
1423
  const data = event.data;
@@ -1446,9 +1464,6 @@ var ServiceWorkerArkadeSwaps = class _ServiceWorkerArkadeSwaps {
1446
1464
  }
1447
1465
  };
1448
1466
  };
1449
- function getRandomId() {
1450
- return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
1451
- }
1452
1467
 
1453
1468
  // src/repositories/migrationFromContracts.ts
1454
1469
  var MIGRATION_KEY = "migration-from-storage-adapter-swaps";
@@ -1458,8 +1473,14 @@ async function migrateToSwapRepository(storageAdapter, fresh) {
1458
1473
  if (migration === "done") {
1459
1474
  return false;
1460
1475
  }
1461
- const reverseSwaps = await getContractCollection(storageAdapter, "reverseSwaps");
1462
- const submarineSwaps = await getContractCollection(storageAdapter, "submarineSwaps");
1476
+ const reverseSwaps = await getContractCollection(
1477
+ storageAdapter,
1478
+ "reverseSwaps"
1479
+ );
1480
+ const submarineSwaps = await getContractCollection(
1481
+ storageAdapter,
1482
+ "submarineSwaps"
1483
+ );
1463
1484
  for (const swap of reverseSwaps) {
1464
1485
  await fresh.saveSwap(swap);
1465
1486
  }
@@ -1469,9 +1490,7 @@ async function migrateToSwapRepository(storageAdapter, fresh) {
1469
1490
  await storageAdapter.setItem(MIGRATION_KEY, "done");
1470
1491
  return true;
1471
1492
  } catch (error) {
1472
- if (error instanceof Error && error.message.includes(
1473
- "One of the specified object stores was not found."
1474
- )) {
1493
+ if (error instanceof Error && error.message.includes("One of the specified object stores was not found.")) {
1475
1494
  return false;
1476
1495
  }
1477
1496
  throw error;
@@ -1489,18 +1508,44 @@ async function getContractCollection(storage, contractType) {
1489
1508
  );
1490
1509
  }
1491
1510
  }
1511
+
1512
+ // src/repositories/inMemory/swap-repository.ts
1513
+ var InMemorySwapRepository = class {
1514
+ version = 1;
1515
+ swaps = /* @__PURE__ */ new Map();
1516
+ async saveSwap(swap) {
1517
+ this.swaps.set(swap.id, swap);
1518
+ }
1519
+ async deleteSwap(id) {
1520
+ this.swaps.delete(id);
1521
+ }
1522
+ async getAllSwaps(filter) {
1523
+ const swaps = [...this.swaps.values()];
1524
+ if (!filter || Object.keys(filter).length === 0) return swaps;
1525
+ const filtered = applySwapsFilter(swaps, filter);
1526
+ return applyCreatedAtOrder(filtered, filter);
1527
+ }
1528
+ async clear() {
1529
+ this.swaps.clear();
1530
+ }
1531
+ async [Symbol.asyncDispose]() {
1532
+ await this.clear();
1533
+ }
1534
+ };
1492
1535
  export {
1493
1536
  ArkadeSwapsMessageHandler as ArkadeLightningMessageHandler,
1494
1537
  ArkadeSwaps,
1495
1538
  ArkadeSwapsMessageHandler,
1496
1539
  BoltzRefundError,
1497
1540
  BoltzSwapProvider,
1541
+ InMemorySwapRepository,
1498
1542
  IndexedDbSwapRepository,
1499
1543
  InsufficientFundsError,
1500
1544
  InvoiceExpiredError,
1501
1545
  InvoiceFailedToPayError,
1502
1546
  NetworkError,
1503
1547
  PreimageFetchError,
1548
+ QuoteRejectedError,
1504
1549
  SchemaError,
1505
1550
  ServiceWorkerArkadeSwaps as ServiceWorkerArkadeLightning,
1506
1551
  ServiceWorkerArkadeSwaps,
@@ -26,9 +26,14 @@ __export(realm_exports, {
26
26
  });
27
27
  module.exports = __toCommonJS(realm_exports);
28
28
 
29
+ // src/repositories/swap-repository.ts
30
+ function hasImpossibleSwapsFilter(filter) {
31
+ if (!filter) return false;
32
+ return Array.isArray(filter.id) && filter.id.length === 0 || Array.isArray(filter.status) && filter.status.length === 0 || Array.isArray(filter.type) && filter.type.length === 0;
33
+ }
34
+
29
35
  // src/repositories/realm/swap-repository.ts
30
36
  var RealmSwapRepository = class {
31
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
32
37
  constructor(realm) {
33
38
  this.realm = realm;
34
39
  }
@@ -66,21 +71,13 @@ var RealmSwapRepository = class {
66
71
  }
67
72
  async getAllSwaps(filter) {
68
73
  await this.ensureInit();
69
- if (Array.isArray(filter?.id) && filter.id.length === 0 || Array.isArray(filter?.status) && filter.status.length === 0 || Array.isArray(filter?.type) && filter.type.length === 0) {
70
- return [];
71
- }
74
+ if (hasImpossibleSwapsFilter(filter)) return [];
72
75
  let results = this.realm.objects("BoltzSwap");
73
76
  if (filter) {
74
77
  const filterParts = [];
75
78
  const filterArgs = [];
76
79
  let argIndex = 0;
77
- argIndex = this.addFilterCondition(
78
- filterParts,
79
- filterArgs,
80
- "id",
81
- filter.id,
82
- argIndex
83
- );
80
+ argIndex = this.addFilterCondition(filterParts, filterArgs, "id", filter.id, argIndex);
84
81
  argIndex = this.addFilterCondition(
85
82
  filterParts,
86
83
  filterArgs,
@@ -88,13 +85,7 @@ var RealmSwapRepository = class {
88
85
  filter.status,
89
86
  argIndex
90
87
  );
91
- this.addFilterCondition(
92
- filterParts,
93
- filterArgs,
94
- "type",
95
- filter.type,
96
- argIndex
97
- );
88
+ this.addFilterCondition(filterParts, filterArgs, "type", filter.type, argIndex);
98
89
  if (filterParts.length > 0) {
99
90
  const query = filterParts.join(" AND ");
100
91
  results = results.filtered(query, ...filterArgs);
@@ -104,10 +95,7 @@ var RealmSwapRepository = class {
104
95
  const reverse = filter.orderDirection === "desc";
105
96
  results = results.sorted("createdAt", reverse);
106
97
  }
107
- return [...results].map(
108
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
109
- (obj) => JSON.parse(obj.data)
110
- );
98
+ return [...results].map((obj) => JSON.parse(obj.data));
111
99
  }
112
100
  async clear() {
113
101
  await this.ensureInit();
@@ -1,12 +1,14 @@
1
- import { m as SwapRepository, B as BoltzSwap, o as GetSwapsFilter } from '../../types-BBI7-KJ0.cjs';
1
+ import { RealmLike } from '@arkade-os/sdk/repositories/realm';
2
+ import { n as SwapRepository, B as BoltzSwap, p as GetSwapsFilter } from '../../types--axEWA8c.cjs';
2
3
  import '@arkade-os/sdk';
3
4
 
4
5
  /**
5
6
  * Realm-based implementation of SwapRepository.
6
7
  *
7
- * Since `realm` is a peer dependency and not installed in this package,
8
- * the Realm instance is typed as `any`. Consumers must open Realm with
9
- * the schemas from `./schemas.ts` and pass the instance to the constructor.
8
+ * `realm` is a peer dependency and not installed in this package; consumers
9
+ * open Realm with the schemas from `./schemas.ts` and pass the instance to
10
+ * the constructor, where it is validated against the shared `RealmLike`
11
+ * shape exported by `@arkade-os/sdk`.
10
12
  *
11
13
  * Realm handles schema creation on open, so `ensureInit()` is a no-op.
12
14
  * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.
@@ -14,7 +16,7 @@ import '@arkade-os/sdk';
14
16
  declare class RealmSwapRepository implements SwapRepository {
15
17
  private readonly realm;
16
18
  readonly version: 1;
17
- constructor(realm: any);
19
+ constructor(realm: RealmLike);
18
20
  private ensureInit;
19
21
  [Symbol.asyncDispose](): Promise<void>;
20
22
  saveSwap<T extends BoltzSwap>(swap: T): Promise<void>;
@@ -1,12 +1,14 @@
1
- import { m as SwapRepository, B as BoltzSwap, o as GetSwapsFilter } from '../../types-BBI7-KJ0.js';
1
+ import { RealmLike } from '@arkade-os/sdk/repositories/realm';
2
+ import { n as SwapRepository, B as BoltzSwap, p as GetSwapsFilter } from '../../types--axEWA8c.js';
2
3
  import '@arkade-os/sdk';
3
4
 
4
5
  /**
5
6
  * Realm-based implementation of SwapRepository.
6
7
  *
7
- * Since `realm` is a peer dependency and not installed in this package,
8
- * the Realm instance is typed as `any`. Consumers must open Realm with
9
- * the schemas from `./schemas.ts` and pass the instance to the constructor.
8
+ * `realm` is a peer dependency and not installed in this package; consumers
9
+ * open Realm with the schemas from `./schemas.ts` and pass the instance to
10
+ * the constructor, where it is validated against the shared `RealmLike`
11
+ * shape exported by `@arkade-os/sdk`.
10
12
  *
11
13
  * Realm handles schema creation on open, so `ensureInit()` is a no-op.
12
14
  * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.
@@ -14,7 +16,7 @@ import '@arkade-os/sdk';
14
16
  declare class RealmSwapRepository implements SwapRepository {
15
17
  private readonly realm;
16
18
  readonly version: 1;
17
- constructor(realm: any);
19
+ constructor(realm: RealmLike);
18
20
  private ensureInit;
19
21
  [Symbol.asyncDispose](): Promise<void>;
20
22
  saveSwap<T extends BoltzSwap>(swap: T): Promise<void>;