@arkade-os/sdk 0.5.0-rc.2 → 0.5.0-rc.4

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 (118) hide show
  1. package/README.md +12 -67
  2. package/dist/adapters/expo.cjs +5 -6
  3. package/dist/adapters/expo.d.cts +2 -2
  4. package/dist/adapters/expo.d.ts +2 -2
  5. package/dist/adapters/expo.js +3 -4
  6. package/dist/{asyncStorageTaskQueue-C5rBYlru.d.ts → asyncStorageTaskQueue-BCiOgs5x.d.ts} +2 -2
  7. package/dist/{asyncStorageTaskQueue-BuDvgWh6.d.cts → asyncStorageTaskQueue-CTIwKrt5.d.cts} +2 -2
  8. package/dist/{chunk-3R476TDV.js → chunk-4EZOMPAO.js} +14 -38
  9. package/dist/chunk-4EZOMPAO.js.map +1 -0
  10. package/dist/{chunk-D25O4EGY.cjs → chunk-5NLJUXXQ.cjs} +10 -10
  11. package/dist/{chunk-D25O4EGY.cjs.map → chunk-5NLJUXXQ.cjs.map} +1 -1
  12. package/dist/{chunk-JZWLXNHV.cjs → chunk-C5Y2R63Z.cjs} +25 -71
  13. package/dist/chunk-C5Y2R63Z.cjs.map +1 -0
  14. package/dist/{chunk-6DNR46C7.js → chunk-CIBGIZUW.js} +4 -4
  15. package/dist/{chunk-6DNR46C7.js.map → chunk-CIBGIZUW.js.map} +1 -1
  16. package/dist/{chunk-43FKNLX4.cjs → chunk-F7HJO5GT.cjs} +61 -85
  17. package/dist/chunk-F7HJO5GT.cjs.map +1 -0
  18. package/dist/{chunk-ISO4TI5J.js → chunk-GLZNJFAT.js} +25 -67
  19. package/dist/chunk-GLZNJFAT.js.map +1 -0
  20. package/dist/{chunk-HLCGYOIH.cjs → chunk-GPJSGLWM.cjs} +17 -17
  21. package/dist/{chunk-HLCGYOIH.cjs.map → chunk-GPJSGLWM.cjs.map} +1 -1
  22. package/dist/{chunk-ZOTXDOS5.js → chunk-MOWSLXGO.js} +4 -4
  23. package/dist/{chunk-ZOTXDOS5.js.map → chunk-MOWSLXGO.js.map} +1 -1
  24. package/dist/{chunk-ZRNQV6HV.js → chunk-PYTAH2NY.js} +167 -703
  25. package/dist/chunk-PYTAH2NY.js.map +1 -0
  26. package/dist/{chunk-NVZJSKZS.cjs → chunk-SYRQJS5N.cjs} +18 -19
  27. package/dist/chunk-SYRQJS5N.cjs.map +1 -0
  28. package/dist/{chunk-4PKLULWT.js → chunk-XHASFSDU.js} +3 -4
  29. package/dist/chunk-XHASFSDU.js.map +1 -0
  30. package/dist/{chunk-GMZZQXV5.cjs → chunk-ZHLYFRYY.cjs} +583 -1128
  31. package/dist/chunk-ZHLYFRYY.cjs.map +1 -0
  32. package/dist/contracts/handlers/index.cjs +9 -10
  33. package/dist/contracts/handlers/index.d.cts +3 -3
  34. package/dist/contracts/handlers/index.d.ts +3 -3
  35. package/dist/contracts/handlers/index.js +2 -3
  36. package/dist/{delegate-1yp1HyP7.d.cts → delegate-CpQIgTs7.d.cts} +1 -1
  37. package/dist/{delegate-BAX5QftB.d.ts → delegate-Dv-us16c.d.ts} +1 -1
  38. package/dist/{hdWalletCapable-CmEU0NP1.d.ts → hdWalletCapable-BC4Fmmht.d.ts} +7 -25
  39. package/dist/{hdWalletCapable-eJgaT-ec.d.cts → hdWalletCapable-DotEa5rZ.d.cts} +7 -25
  40. package/dist/{index-DUxufw76.d.ts → index-Czz9HSqE.d.cts} +21 -220
  41. package/dist/{index-DUxufw76.d.cts → index-Czz9HSqE.d.ts} +21 -220
  42. package/dist/{index-Bem5vKzX.d.ts → index-DUkvXxpt.d.ts} +3 -3
  43. package/dist/{index-W_oMcOmG.d.cts → index-DdJt5fRc.d.cts} +3 -3
  44. package/dist/index.cjs +291 -340
  45. package/dist/index.d.cts +58 -223
  46. package/dist/index.d.ts +58 -223
  47. package/dist/index.js +4 -5
  48. package/dist/repositories/realm/index.cjs +57 -24
  49. package/dist/repositories/realm/index.cjs.map +1 -1
  50. package/dist/repositories/realm/index.d.cts +12 -4
  51. package/dist/repositories/realm/index.d.ts +12 -4
  52. package/dist/repositories/realm/index.js +43 -10
  53. package/dist/repositories/realm/index.js.map +1 -1
  54. package/dist/repositories/sqlite/index.cjs +103 -33
  55. package/dist/repositories/sqlite/index.cjs.map +1 -1
  56. package/dist/repositories/sqlite/index.d.cts +12 -2
  57. package/dist/repositories/sqlite/index.d.ts +12 -2
  58. package/dist/repositories/sqlite/index.js +90 -20
  59. package/dist/repositories/sqlite/index.js.map +1 -1
  60. package/dist/{taskRunner-Dr3NStc0.d.cts → taskRunner-7E_Rx8bD.d.cts} +2 -2
  61. package/dist/{taskRunner-D_iPiZIi.d.ts → taskRunner-DUId1UJ8.d.ts} +2 -2
  62. package/dist/wallet/expo/background.cjs +14 -15
  63. package/dist/wallet/expo/background.cjs.map +1 -1
  64. package/dist/wallet/expo/background.d.cts +3 -3
  65. package/dist/wallet/expo/background.d.ts +3 -3
  66. package/dist/wallet/expo/background.js +6 -7
  67. package/dist/wallet/expo/background.js.map +1 -1
  68. package/dist/wallet/expo/index.cjs +15 -23
  69. package/dist/wallet/expo/index.cjs.map +1 -1
  70. package/dist/wallet/expo/index.d.cts +4 -7
  71. package/dist/wallet/expo/index.d.ts +4 -7
  72. package/dist/wallet/expo/index.js +7 -15
  73. package/dist/wallet/expo/index.js.map +1 -1
  74. package/dist/worker/expo/index.cjs +9 -10
  75. package/dist/worker/expo/index.cjs.map +1 -1
  76. package/dist/worker/expo/index.d.cts +4 -4
  77. package/dist/worker/expo/index.d.ts +4 -4
  78. package/dist/worker/expo/index.js +5 -6
  79. package/dist/worker/expo/index.js.map +1 -1
  80. package/package.json +4 -42
  81. package/dist/adapters/asyncStorage.cjs +0 -48
  82. package/dist/adapters/asyncStorage.cjs.map +0 -1
  83. package/dist/adapters/asyncStorage.d.cts +0 -16
  84. package/dist/adapters/asyncStorage.d.ts +0 -16
  85. package/dist/adapters/asyncStorage.js +0 -46
  86. package/dist/adapters/asyncStorage.js.map +0 -1
  87. package/dist/adapters/fileSystem.cjs +0 -116
  88. package/dist/adapters/fileSystem.cjs.map +0 -1
  89. package/dist/adapters/fileSystem.d.cts +0 -17
  90. package/dist/adapters/fileSystem.d.ts +0 -17
  91. package/dist/adapters/fileSystem.js +0 -93
  92. package/dist/adapters/fileSystem.js.map +0 -1
  93. package/dist/adapters/indexedDB.cjs +0 -103
  94. package/dist/adapters/indexedDB.cjs.map +0 -1
  95. package/dist/adapters/indexedDB.d.cts +0 -18
  96. package/dist/adapters/indexedDB.d.ts +0 -18
  97. package/dist/adapters/indexedDB.js +0 -101
  98. package/dist/adapters/indexedDB.js.map +0 -1
  99. package/dist/adapters/localStorage.cjs +0 -50
  100. package/dist/adapters/localStorage.cjs.map +0 -1
  101. package/dist/adapters/localStorage.d.cts +0 -14
  102. package/dist/adapters/localStorage.d.ts +0 -14
  103. package/dist/adapters/localStorage.js +0 -48
  104. package/dist/adapters/localStorage.js.map +0 -1
  105. package/dist/chunk-3R476TDV.js.map +0 -1
  106. package/dist/chunk-43FKNLX4.cjs.map +0 -1
  107. package/dist/chunk-4PKLULWT.js.map +0 -1
  108. package/dist/chunk-5BLDMQED.cjs +0 -18
  109. package/dist/chunk-5BLDMQED.cjs.map +0 -1
  110. package/dist/chunk-GMZZQXV5.cjs.map +0 -1
  111. package/dist/chunk-ISO4TI5J.js.map +0 -1
  112. package/dist/chunk-JZWLXNHV.cjs.map +0 -1
  113. package/dist/chunk-NSBPE2FW.js +0 -15
  114. package/dist/chunk-NSBPE2FW.js.map +0 -1
  115. package/dist/chunk-NVZJSKZS.cjs.map +0 -1
  116. package/dist/chunk-ZRNQV6HV.js.map +0 -1
  117. package/dist/index-C0IanN1m.d.cts +0 -11
  118. package/dist/index-C0IanN1m.d.ts +0 -11
@@ -1,10 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var chunkGMZZQXV5_cjs = require('../../chunk-GMZZQXV5.cjs');
4
- require('../../chunk-NVZJSKZS.cjs');
5
- require('../../chunk-43FKNLX4.cjs');
6
- require('../../chunk-JZWLXNHV.cjs');
7
- require('../../chunk-5BLDMQED.cjs');
3
+ var chunkZHLYFRYY_cjs = require('../../chunk-ZHLYFRYY.cjs');
4
+ require('../../chunk-SYRQJS5N.cjs');
5
+ require('../../chunk-F7HJO5GT.cjs');
6
+ require('../../chunk-C5Y2R63Z.cjs');
8
7
 
9
8
  // src/repositories/realm/walletRepository.ts
10
9
  var RealmWalletRepository = class {
@@ -38,7 +37,7 @@ var RealmWalletRepository = class {
38
37
  await this.ensureInit();
39
38
  this.realm.write(() => {
40
39
  for (const vtxo of vtxos) {
41
- const s = chunkGMZZQXV5_cjs.serializeVtxo(vtxo);
40
+ const s = chunkZHLYFRYY_cjs.serializeVtxo(vtxo);
42
41
  this.realm.create(
43
42
  "ArkVtxo",
44
43
  {
@@ -53,10 +52,14 @@ var RealmWalletRepository = class {
53
52
  intentCb: s.intentTapLeafScript.cb,
54
53
  intentS: s.intentTapLeafScript.s,
55
54
  statusJson: JSON.stringify(s.status),
56
- virtualStatusJson: JSON.stringify(s.virtualStatus),
57
55
  createdAt: typeof s.createdAt === "string" ? s.createdAt : s.createdAt instanceof Date ? s.createdAt.toISOString() : new Date(s.createdAt).toISOString(),
58
56
  isUnrolled: s.isUnrolled ?? false,
59
57
  isSpent: s.isSpent === void 0 ? null : s.isSpent,
58
+ isSwept: s.isSwept === void 0 ? null : s.isSwept,
59
+ isPreconfirmed: s.isPreconfirmed === void 0 ? null : s.isPreconfirmed,
60
+ commitmentTxIdsJson: s.commitmentTxIds ? JSON.stringify(s.commitmentTxIds) : null,
61
+ expiresAt: s.expiresAt === void 0 ? null : s.expiresAt instanceof Date ? s.expiresAt.toISOString() : new Date(s.expiresAt).toISOString(),
62
+ expiresAtHeight: s.expiresAtHeight ?? null,
60
63
  spentBy: s.spentBy ?? null,
61
64
  settledBy: s.settledBy ?? null,
62
65
  arkTxId: s.arkTxId ?? null,
@@ -86,7 +89,7 @@ var RealmWalletRepository = class {
86
89
  throw new Error("RealmWalletRepository requires an address");
87
90
  }
88
91
  for (const vtxo of vtxos) {
89
- if (!chunkGMZZQXV5_cjs.isVtxoForScript(vtxo, key.script)) {
92
+ if (!chunkZHLYFRYY_cjs.isVtxoForScript(vtxo, key.script)) {
90
93
  throw new Error(
91
94
  `VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`
92
95
  );
@@ -111,7 +114,7 @@ var RealmWalletRepository = class {
111
114
  await this.ensureInit();
112
115
  this.realm.write(() => {
113
116
  for (const utxo of utxos) {
114
- const s = chunkGMZZQXV5_cjs.serializeUtxo(utxo);
117
+ const s = chunkZHLYFRYY_cjs.serializeUtxo(utxo);
115
118
  this.realm.create(
116
119
  "ArkUtxo",
117
120
  {
@@ -164,7 +167,7 @@ var RealmWalletRepository = class {
164
167
  amount: tx.amount,
165
168
  settled: tx.settled,
166
169
  createdAt: tx.createdAt,
167
- assetsJson: tx.assets ? JSON.stringify(chunkGMZZQXV5_cjs.serializeAssets(tx.assets)) : null
170
+ assetsJson: tx.assets ? JSON.stringify(chunkZHLYFRYY_cjs.serializeAssets(tx.assets)) : null
168
171
  },
169
172
  "modified"
170
173
  );
@@ -222,10 +225,14 @@ function vtxoObjectToDomain(obj) {
222
225
  s: obj.intentS
223
226
  },
224
227
  status: JSON.parse(obj.statusJson),
225
- virtualStatus: JSON.parse(obj.virtualStatusJson),
226
228
  createdAt: new Date(obj.createdAt),
227
229
  isUnrolled: obj.isUnrolled,
228
230
  isSpent: obj.isSpent === null ? void 0 : obj.isSpent,
231
+ isSwept: obj.isSwept == null ? void 0 : obj.isSwept,
232
+ isPreconfirmed: obj.isPreconfirmed == null ? void 0 : obj.isPreconfirmed,
233
+ commitmentTxIds: obj.commitmentTxIdsJson ? JSON.parse(obj.commitmentTxIdsJson) : void 0,
234
+ expiresAt: obj.expiresAt ? new Date(obj.expiresAt) : void 0,
235
+ expiresAtHeight: obj.expiresAtHeight ?? void 0,
229
236
  spentBy: obj.spentBy ?? void 0,
230
237
  settledBy: obj.settledBy ?? void 0,
231
238
  arkTxId: obj.arkTxId ?? void 0,
@@ -234,9 +241,9 @@ function vtxoObjectToDomain(obj) {
234
241
  // Post-migration every row has `script`, but the backfill is
235
242
  // idempotent: derive from `address` if the legacy column is still
236
243
  // null (e.g. the migration hasn't run yet on this handle).
237
- script: obj.script ?? chunkGMZZQXV5_cjs.scriptFromArkAddress(obj.address)
244
+ script: obj.script ?? chunkZHLYFRYY_cjs.scriptFromArkAddress(obj.address)
238
245
  };
239
- return chunkGMZZQXV5_cjs.deserializeVtxo(serialized);
246
+ return chunkZHLYFRYY_cjs.deserializeVtxo(serialized);
240
247
  }
241
248
  function utxoObjectToDomain(obj) {
242
249
  const serialized = {
@@ -255,7 +262,7 @@ function utxoObjectToDomain(obj) {
255
262
  status: JSON.parse(obj.statusJson),
256
263
  extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : void 0
257
264
  };
258
- return chunkGMZZQXV5_cjs.deserializeUtxo(serialized);
265
+ return chunkZHLYFRYY_cjs.deserializeUtxo(serialized);
259
266
  }
260
267
  function txObjectToDomain(obj) {
261
268
  const tx = {
@@ -270,7 +277,7 @@ function txObjectToDomain(obj) {
270
277
  createdAt: obj.createdAt
271
278
  };
272
279
  if (obj.assetsJson) {
273
- tx.assets = chunkGMZZQXV5_cjs.deserializeAssets(JSON.parse(obj.assetsJson));
280
+ tx.assets = chunkZHLYFRYY_cjs.deserializeAssets(JSON.parse(obj.assetsJson));
274
281
  }
275
282
  return tx;
276
283
  }
@@ -450,7 +457,7 @@ var RealmIntentRepository = class {
450
457
  const clashes = [
451
458
  ...this.realm.objects("ArkIntent").filtered("intentId == $0", intent.intentId)
452
459
  ].map(toIntent);
453
- chunkGMZZQXV5_cjs.assertIntentIdUnique(intent, clashes);
460
+ chunkZHLYFRYY_cjs.assertIntentIdUnique(intent, clashes);
454
461
  }
455
462
  this.realm.create(
456
463
  "ArkIntent",
@@ -479,14 +486,14 @@ var RealmIntentRepository = class {
479
486
  }
480
487
  async getIntents(filter) {
481
488
  const all = [...this.realm.objects("ArkIntent")].map(toIntent).sort((a, b) => a.createdAt - b.createdAt || a.intentTxId.localeCompare(b.intentTxId));
482
- const out = filter ? all.filter((i) => chunkGMZZQXV5_cjs.intentMatchesFilter(i, filter)) : all;
483
- const { skip, end } = chunkGMZZQXV5_cjs.intentPageBounds(filter, out.length);
489
+ const out = filter ? all.filter((i) => chunkZHLYFRYY_cjs.intentMatchesFilter(i, filter)) : all;
490
+ const { skip, end } = chunkZHLYFRYY_cjs.intentPageBounds(filter, out.length);
484
491
  return out.slice(skip, end);
485
492
  }
486
493
  async getLockedVtxoOutpoints() {
487
494
  const out = [];
488
495
  for (const o of [...this.realm.objects("ArkIntent")].map(toIntent))
489
- if (!chunkGMZZQXV5_cjs.isTerminalIntentState(o.state)) out.push(...o.intentVtxos);
496
+ if (!chunkZHLYFRYY_cjs.isTerminalIntentState(o.state)) out.push(...o.intentVtxos);
490
497
  return out;
491
498
  }
492
499
  async [Symbol.asyncDispose]() {
@@ -528,7 +535,7 @@ var RealmVirtualTxRepository = class {
528
535
  txid: t.txid,
529
536
  psbt: t.psbt ?? prev?.psbt ?? null,
530
537
  expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,
531
- type: chunkGMZZQXV5_cjs.mergeChainedTxType(t.type, prev?.type)
538
+ type: chunkZHLYFRYY_cjs.mergeChainedTxType(t.type, prev?.type)
532
539
  },
533
540
  "modified"
534
541
  );
@@ -619,7 +626,6 @@ var ArkVtxoSchema = {
619
626
  intentS: "string",
620
627
  extraWitnessJson: "string?",
621
628
  statusJson: "string",
622
- virtualStatusJson: "string",
623
629
  spentBy: "string?",
624
630
  settledBy: "string?",
625
631
  arkTxId: "string?",
@@ -627,6 +633,12 @@ var ArkVtxoSchema = {
627
633
  // ISO 8601
628
634
  isUnrolled: "bool",
629
635
  isSpent: "bool?",
636
+ isSwept: "bool?",
637
+ isPreconfirmed: "bool?",
638
+ commitmentTxIdsJson: "string?",
639
+ expiresAt: "string?",
640
+ // ISO 8601
641
+ expiresAtHeight: "int?",
630
642
  assetsJson: "string?",
631
643
  // scriptPubKey (hex) locking this VTXO, indexed so contract-scoped
632
644
  // queries can resolve ownership without touching address mapping.
@@ -756,13 +768,34 @@ var ArkExperimentalRealmSchemas = [
756
768
  ArkVirtualTxSchema,
757
769
  ArkVtxoBranchSchema
758
770
  ];
759
- var ARK_REALM_SCHEMA_VERSION = 3;
771
+ var ARK_REALM_SCHEMA_VERSION = 5;
760
772
  function runArkRealmMigrations(oldRealm, newRealm) {
773
+ const legacyByPk = /* @__PURE__ */ new Map();
774
+ const oldVtxos = oldRealm?.objects?.("ArkVtxo") ?? [];
775
+ for (let i = 0; i < oldVtxos.length; i++) {
776
+ const raw = oldVtxos[i].virtualStatusJson;
777
+ if (raw) legacyByPk.set(oldVtxos[i].pk, raw);
778
+ }
761
779
  const newVtxos = newRealm.objects("ArkVtxo");
762
780
  for (let i = 0; i < newVtxos.length; i++) {
763
781
  const newVtxo = newVtxos[i];
764
782
  if (!newVtxo.script) {
765
- newVtxo.script = chunkGMZZQXV5_cjs.scriptFromArkAddress(newVtxo.address);
783
+ newVtxo.script = chunkZHLYFRYY_cjs.scriptFromArkAddress(newVtxo.address);
784
+ }
785
+ const facts = chunkZHLYFRYY_cjs.legacyVtxoFacts(legacyByPk.get(newVtxo.pk));
786
+ if (facts) {
787
+ if (newVtxo.isSpent == null) newVtxo.isSpent = facts.isSpent;
788
+ if (newVtxo.isSwept == null) newVtxo.isSwept = facts.isSwept;
789
+ if (newVtxo.isPreconfirmed == null) newVtxo.isPreconfirmed = facts.isPreconfirmed;
790
+ if (newVtxo.commitmentTxIdsJson == null && facts.commitmentTxIds) {
791
+ newVtxo.commitmentTxIdsJson = JSON.stringify(facts.commitmentTxIds);
792
+ }
793
+ if (newVtxo.expiresAt == null && facts.expiresAt) {
794
+ newVtxo.expiresAt = facts.expiresAt.toISOString();
795
+ }
796
+ if (newVtxo.expiresAtHeight == null && facts.expiresAtHeight !== void 0) {
797
+ newVtxo.expiresAtHeight = facts.expiresAtHeight;
798
+ }
766
799
  }
767
800
  }
768
801
  const oldHasVirtualTx = Array.isArray(oldRealm?.schema) && oldRealm.schema.some((s) => s.name === "ArkVirtualTx");
@@ -779,7 +812,7 @@ function runArkRealmMigrations(oldRealm, newRealm) {
779
812
 
780
813
  Object.defineProperty(exports, "ChainedTxType", {
781
814
  enumerable: true,
782
- get: function () { return chunkGMZZQXV5_cjs.ChainedTxType; }
815
+ get: function () { return chunkZHLYFRYY_cjs.ChainedTxType; }
783
816
  });
784
817
  exports.ARK_REALM_SCHEMA_VERSION = ARK_REALM_SCHEMA_VERSION;
785
818
  exports.ArkExperimentalRealmSchemas = ArkExperimentalRealmSchemas;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/repositories/realm/walletRepository.ts","../../../src/repositories/realm/contractRepository.ts","../../../src/repositories/realm/intentRepository.ts","../../../src/repositories/realm/virtualTxRepository.ts","../../../src/repositories/realm/schemas.ts"],"names":["serializeVtxo","isVtxoForScript","serializeUtxo","serializeAssets","scriptFromArkAddress","deserializeVtxo","deserializeUtxo","deserializeAssets","assertIntentIdUnique","intentMatchesFilter","intentPageBounds","isTerminalIntentState","mergeChainedTxType"],"mappings":";;;;;;;;;AAwBO,IAAM,wBAAN,MAAwD;AAAA,EAG3D,YAA6B,KAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAmB;AAAA,EAAnB,KAAA;AAAA,EAFpB,OAAA,GAAU,CAAA;AAAA;AAAA,EAMnB,MAAc,UAAA,GAA4B;AAAA,EAE1C;AAAA,EAEA,OAAO,MAAA,CAAO,YAAY,CAAA,GAAmB;AAAA,EAE7C;AAAA;AAAA,EAIA,MAAM,KAAA,GAAuB;AACzB,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC/C,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAC,CAAA;AAC/C,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AACtD,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAC,CAAA;AAAA,IAC1D,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAIA,MAAM,SAAS,OAAA,EAAiD;AAC5D,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAC/E,IAAA,OAAO,CAAC,GAAG,OAAO,CAAA,CAAE,IAAI,kBAAkB,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,SAAA,CAAU,OAAA,EAAiB,KAAA,EAA6C;AAC1E,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,QAAA,MAAM,CAAA,GAAIA,gCAAc,IAAI,CAAA;AAC5B,QAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,UACP,SAAA;AAAA,UACA;AAAA,YACI,IAAI,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAA;AAAA,YACvB,OAAA;AAAA,YACA,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,SAAS,CAAA,CAAE,OAAA;AAAA,YACX,SAAA,EAAW,EAAE,oBAAA,CAAqB,EAAA;AAAA,YAClC,QAAA,EAAU,EAAE,oBAAA,CAAqB,CAAA;AAAA,YACjC,QAAA,EAAU,EAAE,mBAAA,CAAoB,EAAA;AAAA,YAChC,OAAA,EAAS,EAAE,mBAAA,CAAoB,CAAA;AAAA,YAC/B,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,MAAM,CAAA;AAAA,YACnC,iBAAA,EAAmB,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,aAAa,CAAA;AAAA,YACjD,WACI,OAAO,CAAA,CAAE,cAAc,QAAA,GACjB,CAAA,CAAE,YACF,CAAA,CAAE,SAAA,YAAqB,OACrB,CAAA,CAAE,SAAA,CAAU,aAAY,GACxB,IAAI,KAAK,CAAA,CAAE,SAAS,EAAE,WAAA,EAAY;AAAA,YAC9C,UAAA,EAAY,EAAE,UAAA,IAAc,KAAA;AAAA,YAC5B,OAAA,EAAS,CAAA,CAAE,OAAA,KAAY,MAAA,GAAY,OAAO,CAAA,CAAE,OAAA;AAAA,YAC5C,OAAA,EAAS,EAAE,OAAA,IAAW,IAAA;AAAA,YACtB,SAAA,EAAW,EAAE,SAAA,IAAa,IAAA;AAAA,YAC1B,OAAA,EAAS,EAAE,OAAA,IAAW,IAAA;AAAA,YACtB,kBAAkB,CAAA,CAAE,YAAA,GAAe,KAAK,SAAA,CAAU,CAAA,CAAE,YAAY,CAAA,GAAI,IAAA;AAAA,YACpE,YAAY,CAAA,CAAE,MAAA,GAAS,KAAK,SAAA,CAAU,CAAA,CAAE,MAAM,CAAA,GAAI,IAAA;AAAA,YAClD,MAAA,EAAQ,EAAE,MAAA,IAAU;AAAA,WACxB;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,OAAA,EAAgC;AAC9C,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAChF,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,kBAAkB,MAAA,EAAgD;AACpE,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,gBAAgB,MAAM,CAAA;AAC7E,IAAA,OAAO,CAAC,GAAG,OAAO,CAAA,CAAE,IAAI,kBAAkB,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,kBAAA,CAAmB,GAAA,EAAwB,KAAA,EAA6C;AAC1F,IAAA,IAAI,CAAC,IAAI,OAAA,EAAS;AACd,MAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,IAC/D;AACA,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,MAAA,IAAI,CAACC,iCAAA,CAAgB,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,EAAG;AACpC,QAAA,MAAM,IAAI,KAAA;AAAA,UACN,CAAA,KAAA,EAAQ,IAAA,CAAK,IAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,2BAAA,EAA8B,GAAA,CAAI,MAAM,CAAA,MAAA,EAAS,IAAA,CAAK,MAAM,CAAA;AAAA,SAC9F;AAAA,MACJ;AAAA,IACJ;AACA,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,qBAAqB,MAAA,EAA+B;AACtD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,gBAAgB,MAAM,CAAA;AAC9E,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAIA,MAAM,SAAS,OAAA,EAA0C;AACrD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAC/E,IAAA,OAAO,CAAC,GAAG,OAAO,CAAA,CAAE,IAAI,kBAAkB,CAAA;AAAA,EAC9C;AAAA,EAEA,MAAM,SAAA,CAAU,OAAA,EAAiB,KAAA,EAAsC;AACnE,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACtB,QAAA,MAAM,CAAA,GAAIC,gCAAc,IAAI,CAAA;AAC5B,QAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,UACP,SAAA;AAAA,UACA;AAAA,YACI,IAAI,CAAA,EAAG,CAAA,CAAE,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAA;AAAA,YACvB,OAAA;AAAA,YACA,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,OAAO,CAAA,CAAE,KAAA;AAAA,YACT,SAAS,CAAA,CAAE,OAAA;AAAA,YACX,SAAA,EAAW,EAAE,oBAAA,CAAqB,EAAA;AAAA,YAClC,QAAA,EAAU,EAAE,oBAAA,CAAqB,CAAA;AAAA,YACjC,QAAA,EAAU,EAAE,mBAAA,CAAoB,EAAA;AAAA,YAChC,OAAA,EAAS,EAAE,mBAAA,CAAoB,CAAA;AAAA,YAC/B,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,CAAA,CAAE,MAAM,CAAA;AAAA,YACnC,kBAAkB,CAAA,CAAE,YAAA,GAAe,KAAK,SAAA,CAAU,CAAA,CAAE,YAAY,CAAA,GAAI;AAAA,WACxE;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,YAAY,OAAA,EAAgC;AAC9C,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,CAAE,QAAA,CAAS,iBAAiB,OAAO,CAAA;AAChF,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAIA,MAAM,sBAAsB,OAAA,EAA4C;AACpE,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,OAAA,CAAQ,gBAAgB,CAAA,CAAE,QAAA,CAAS,iBAAiB,OAAO,CAAA;AACtF,IAAA,MAAM,MAAM,CAAC,GAAG,OAAO,CAAA,CAAE,IAAI,gBAAgB,CAAA;AAC7C,IAAA,GAAA,CAAI,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAC5C,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,MAAM,gBAAA,CAAiB,OAAA,EAAiB,GAAA,EAAsC;AAC1E,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AAClB,QAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,UACP,gBAAA;AAAA,UACA;AAAA,YACI,EAAA,EAAI,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,GAAG,GAAA,CAAI,YAAY,CAAA,CAAA,EAAI,EAAA,CAAG,GAAA,CAAI,cAAc,CAAA,CAAA,EAAI,EAAA,CAAG,IAAI,OAAO,CAAA,CAAA;AAAA,YAChF,OAAA;AAAA,YACA,YAAA,EAAc,GAAG,GAAA,CAAI,YAAA;AAAA,YACrB,cAAA,EAAgB,GAAG,GAAA,CAAI,cAAA;AAAA,YACvB,OAAA,EAAS,GAAG,GAAA,CAAI,OAAA;AAAA,YAChB,MAAM,EAAA,CAAG,IAAA;AAAA,YACT,QAAQ,EAAA,CAAG,MAAA;AAAA,YACX,SAAS,EAAA,CAAG,OAAA;AAAA,YACZ,WAAW,EAAA,CAAG,SAAA;AAAA,YACd,UAAA,EAAY,GAAG,MAAA,GAAS,IAAA,CAAK,UAAUC,iCAAA,CAAgB,EAAA,CAAG,MAAM,CAAC,CAAA,GAAI;AAAA,WACzE;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,mBAAmB,OAAA,EAAgC;AACrD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CACjB,OAAA,CAAQ,gBAAgB,CAAA,CACxB,QAAA,CAAS,iBAAiB,OAAO,CAAA;AACtC,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAIA,MAAM,cAAA,GAA8C;AAChD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAChB,OAAA,CAA2B,gBAAgB,CAAA,CAC3C,QAAA,CAAS,aAAa,OAAO,CAAA;AAClC,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,OAAO,CAAA;AACzB,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE/B,IAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AACnB,IAAA,MAAM,QAAqB,EAAC;AAC5B,IAAA,IAAI,IAAI,YAAA,EAAc;AAClB,MAAA,KAAA,CAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,YAAY,CAAA;AAAA,IAChD;AACA,IAAA,KAAA,CAAM,YAAA,GAAe,IAAI,YAAA,IAAgB,MAAA;AACzC,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,gBAAgB,KAAA,EAAmC;AACrD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,QACP,gBAAA;AAAA,QACA;AAAA,UACI,GAAA,EAAK,OAAA;AAAA,UACL,cAAc,KAAA,CAAM,YAAA;AAAA,UACpB,cAAc,KAAA,CAAM,QAAA,GAAW,KAAK,SAAA,CAAU,KAAA,CAAM,QAAQ,CAAA,GAAI;AAAA,SACpE;AAAA,QACA;AAAA,OACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AACJ;AAWA,SAAS,mBAAmB,GAAA,EAA+B;AACvD,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,oBAAA,EAAsB;AAAA,MAClB,IAAI,GAAA,CAAI,SAAA;AAAA,MACR,GAAG,GAAA,CAAI;AAAA,KACX;AAAA,IACA,mBAAA,EAAqB;AAAA,MACjB,IAAI,GAAA,CAAI,QAAA;AAAA,MACR,GAAG,GAAA,CAAI;AAAA,KACX;AAAA,IACA,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AAAA,IACjC,aAAA,EAAe,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,iBAAiB,CAAA;AAAA,IAC/C,SAAA,EAAW,IAAI,IAAA,CAAK,GAAA,CAAI,SAAS,CAAA;AAAA,IACjC,YAAY,GAAA,CAAI,UAAA;AAAA,IAChB,OAAA,EAAS,GAAA,CAAI,OAAA,KAAY,IAAA,GAAO,SAAY,GAAA,CAAI,OAAA;AAAA,IAChD,OAAA,EAAS,IAAI,OAAA,IAAW,MAAA;AAAA,IACxB,SAAA,EAAW,IAAI,SAAA,IAAa,MAAA;AAAA,IAC5B,OAAA,EAAS,IAAI,OAAA,IAAW,MAAA;AAAA,IACxB,cAAc,GAAA,CAAI,gBAAA,GAAmB,KAAK,KAAA,CAAM,GAAA,CAAI,gBAAgB,CAAA,GAAI,MAAA;AAAA,IACxE,QAAQ,GAAA,CAAI,UAAA,GAAa,KAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,GAAI,MAAA;AAAA;AAAA;AAAA;AAAA,IAItD,MAAA,EAAQ,GAAA,CAAI,MAAA,IAAUC,sCAAA,CAAqB,IAAI,OAAO;AAAA,GAC1D;AAEA,EAAA,OAAOC,kCAAgB,UAAU,CAAA;AACrC;AAGA,SAAS,mBAAmB,GAAA,EAAwB;AAChD,EAAA,MAAM,UAAA,GAAa;AAAA,IACf,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,oBAAA,EAAsB;AAAA,MAClB,IAAI,GAAA,CAAI,SAAA;AAAA,MACR,GAAG,GAAA,CAAI;AAAA,KACX;AAAA,IACA,mBAAA,EAAqB;AAAA,MACjB,IAAI,GAAA,CAAI,QAAA;AAAA,MACR,GAAG,GAAA,CAAI;AAAA,KACX;AAAA,IACA,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AAAA,IACjC,cAAc,GAAA,CAAI,gBAAA,GAAmB,KAAK,KAAA,CAAM,GAAA,CAAI,gBAAgB,CAAA,GAAI;AAAA,GAC5E;AAEA,EAAA,OAAOC,kCAAgB,UAAU,CAAA;AACrC;AAGA,SAAS,iBAAiB,GAAA,EAA0B;AAChD,EAAA,MAAM,EAAA,GAAqB;AAAA,IACvB,GAAA,EAAK;AAAA,MACD,cAAc,GAAA,CAAI,YAAA;AAAA,MAClB,gBAAgB,GAAA,CAAI,cAAA;AAAA,MACpB,SAAS,GAAA,CAAI;AAAA,KACjB;AAAA,IACA,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,WAAW,GAAA,CAAI;AAAA,GACnB;AACA,EAAA,IAAI,IAAI,UAAA,EAAY;AAChB,IAAA,EAAA,CAAG,SAASC,mCAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAC,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,EAAA;AACX;;;ACtUO,IAAM,0BAAN,MAA4D;AAAA,EAG/D,YAA6B,KAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAmB;AAAA,EAAnB,KAAA;AAAA,EAFpB,OAAA,GAAU,CAAA;AAAA;AAAA,EAMnB,MAAc,UAAA,GAA4B;AAAA,EAE1C;AAAA,EAEA,OAAO,MAAA,CAAO,YAAY,CAAA,GAAmB;AAAA,EAE7C;AAAA;AAAA,EAIA,MAAM,KAAA,GAAuB;AACzB,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,IACvD,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAIA,MAAM,aAAa,MAAA,EAA8C;AAC7D,IAAA,MAAM,KAAK,UAAA,EAAW;AAEtB,IAAA,IAAI,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA;AAE9C,IAAA,IAAI,MAAA,EAAQ;AACR,MAAA,MAAM,cAAwB,EAAC;AAC/B,MAAA,MAAM,aAAwB,EAAC;AAE/B,MAAA,IAAI,QAAA,GAAW,CAAA;AACf,MAAA,QAAA,GAAW,IAAA,CAAK,kBAAA;AAAA,QACZ,WAAA;AAAA,QACA,UAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,CAAO,MAAA;AAAA,QACP;AAAA,OACJ;AACA,MAAA,QAAA,GAAW,IAAA,CAAK,kBAAA;AAAA,QACZ,WAAA;AAAA,QACA,UAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA,CAAO,KAAA;AAAA,QACP;AAAA,OACJ;AACA,MAAA,QAAA,GAAW,IAAA,CAAK,kBAAA;AAAA,QACZ,WAAA;AAAA,QACA,UAAA;AAAA,QACA,MAAA;AAAA,QACA,MAAA,CAAO,IAAA;AAAA,QACP;AAAA,OACJ;AACA,MAAA,QAAA,GAAW,KAAK,iBAAA,CAAkB,WAAA,EAAa,UAAA,EAAY,MAAA,CAAO,OAAO,QAAQ,CAAA;AAEjF,MAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AACxB,QAAA,MAAM,KAAA,GAAQ,WAAA,CAAY,IAAA,CAAK,OAAO,CAAA;AACtC,QAAA,OAAA,GAAU,OAAA,CAAQ,QAAA,CAAS,KAAA,EAAO,GAAG,UAAU,CAAA;AAAA,MACnD;AAAA,IACJ;AAEA,IAAA,OAAO,CAAC,GAAG,OAAO,CAAA,CAAE,IAAI,sBAAsB,CAAA;AAAA,EAClD;AAAA,EAEA,MAAM,aAAa,QAAA,EAAmC;AAClD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,QACP,aAAA;AAAA,QACA;AAAA,UACI,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,SAAS,QAAA,CAAS,OAAA;AAAA,UAClB,MAAM,QAAA,CAAS,IAAA;AAAA,UACf,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,UAAA,EAAY,IAAA,CAAK,SAAA,CAAU,QAAA,CAAS,MAAM,CAAA;AAAA,UAC1C,WAAW,QAAA,CAAS,SAAA;AAAA,UACpB,KAAA,EAAO,SAAS,KAAA,IAAS,IAAA;AAAA,UACzB,cAAc,QAAA,CAAS,QAAA,GAAW,KAAK,SAAA,CAAU,QAAA,CAAS,QAAQ,CAAA,GAAI,IAAA;AAAA,UACtE,KAAA,EAAO,SAAS,KAAA,IAAS;AAAA,SAC7B;AAAA,QACA;AAAA,OACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,eAAe,MAAA,EAA+B;AAChD,IAAA,MAAM,KAAK,UAAA,EAAW;AACtB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,OAAA,CAAQ,aAAa,CAAA,CAAE,QAAA,CAAS,gBAAgB,MAAM,CAAA;AAClF,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,IAC9B,CAAC,CAAA;AAAA,EACL;AAAA;AAAA,EAIQ,kBAAA,CACJ,KAAA,EACA,IAAA,EACA,MAAA,EACA,OACA,QAAA,EACM;AACN,IAAA,IAAI,KAAA,KAAU,QAAW,OAAO,QAAA;AAEhC,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACtB,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,QAAA;AAC/B,MAAA,MAAM,UAAA,GAAa,KAAA,CAAM,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM;AACnC,QAAA,OAAO,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,QAAA,GAAW,CAAC,CAAA,CAAA;AAAA,MACxC,CAAC,CAAA;AACD,MAAA,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACzC,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,KAAK,CAAA;AAClB,MAAA,OAAO,WAAW,KAAA,CAAM,MAAA;AAAA,IAC5B,CAAA,MAAO;AACH,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,QAAQ,CAAA,CAAE,CAAA;AACtC,MAAA,IAAA,CAAK,KAAK,KAAK,CAAA;AACf,MAAA,OAAO,QAAA,GAAW,CAAA;AAAA,IACtB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA,EAMQ,iBAAA,CACJ,KAAA,EACA,IAAA,EACA,KAAA,EACA,QAAA,EACM;AACN,IAAA,IAAI,KAAA,KAAU,QAAW,OAAO,QAAA;AAEhC,IAAA,MAAM,SAAS,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAI,KAAA,GAAQ,CAAC,KAAK,CAAA;AACpD,IAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,QAAA;AAEhC,IAAA,MAAM,UAAA,GAAa,OAAO,GAAA,CAAI,CAAC,GAAG,CAAA,KAAM,CAAA,UAAA,EAAa,QAAA,GAAW,CAAC,CAAA,CAAE,CAAA;AACnE,IAAA,IAAI,OAAO,QAAA,CAAS,SAAS,CAAA,EAAG,UAAA,CAAW,KAAK,eAAe,CAAA;AAC/D,IAAA,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,UAAA,CAAW,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,CAAG,CAAA;AACzC,IAAA,IAAA,CAAK,IAAA,CAAK,GAAG,MAAM,CAAA;AACnB,IAAA,OAAO,WAAW,MAAA,CAAO,MAAA;AAAA,EAC7B;AACJ;AAKA,SAAS,uBAAuB,GAAA,EAAoB;AAChD,EAAA,MAAM,QAAA,GAAqB;AAAA,IACvB,QAAQ,GAAA,CAAI,MAAA;AAAA,IACZ,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA;AAAA,IACjC,WAAW,GAAA,CAAI;AAAA,GACnB;AAEA,EAAA,IAAI,GAAA,CAAI,KAAA,KAAU,IAAA,IAAQ,GAAA,CAAI,UAAU,MAAA,EAAW;AAC/C,IAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,KAAA;AAAA,EACzB;AACA,EAAA,IAAI,GAAA,CAAI,YAAA,KAAiB,IAAA,IAAQ,GAAA,CAAI,iBAAiB,MAAA,EAAW;AAC7D,IAAA,QAAA,CAAS,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,YAAY,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,GAAA,CAAI,KAAA,KAAU,IAAA,IAAQ,GAAA,CAAI,UAAU,MAAA,EAAW;AAC/C,IAAA,QAAA,CAAS,QAAQ,GAAA,CAAI,KAAA;AAAA,EACzB;AAEA,EAAA,OAAO,QAAA;AACX;;;ACzKA,SAAS,SAAS,CAAA,EAAmB;AACjC,EAAA,OAAO;AAAA,IACH,YAAY,CAAA,CAAE,UAAA;AAAA,IACd,QAAA,EAAU,EAAE,QAAA,IAAY,MAAA;AAAA,IACxB,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,SAAA,EAAW,EAAE,SAAA,IAAa,MAAA;AAAA,IAC1B,UAAA,EAAY,EAAE,UAAA,IAAc,MAAA;AAAA,IAC5B,WAAW,CAAA,CAAE,SAAA;AAAA,IACb,WAAW,CAAA,CAAE,SAAA;AAAA,IACb,eAAe,CAAA,CAAE,aAAA;AAAA,IACjB,sBAAsB,CAAA,CAAE,oBAAA;AAAA,IACxB,aAAa,CAAA,CAAE,WAAA;AAAA,IACf,oBAAoB,CAAA,CAAE,kBAAA;AAAA,IACtB,OAAA,EAAS,EAAE,OAAA,IAAW,MAAA;AAAA,IACtB,uBAAA,EAAyB,EAAE,uBAAA,IAA2B,MAAA;AAAA,IACtD,kBAAA,EAAoB,EAAE,kBAAA,IAAsB,MAAA;AAAA,IAC5C,eAAA,EAAiB,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,mBAAmB,CAAA;AAAA,IACjD,gBAAA,EAAkB,EAAE,gBAAA,IAAoB,MAAA;AAAA,IACxC,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,eAAe;AAAA,GAC7C;AACJ;AAEO,IAAM,wBAAN,MAAwD;AAAA,EAE3D,YAA6B,KAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAmB;AAAA,EAAnB,KAAA;AAAA,EADpB,OAAA,GAAU,CAAA;AAAA,EAGnB,MAAM,KAAA,GAAuB;AACzB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAC,CAAA;AAAA,IACrD,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,WAAW,MAAA,EAAkC;AAC/C,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAI,MAAA,CAAO,YAAY,IAAA,EAAM;AACzB,QAAA,MAAM,OAAA,GAAU;AAAA,UACZ,GAAG,KAAK,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,CAAE,QAAA,CAAS,gBAAA,EAAkB,MAAA,CAAO,QAAQ;AAAA,SACjF,CAAE,IAAI,QAAQ,CAAA;AACd,QAAAC,sCAAA,CAAqB,QAAQ,OAAO,CAAA;AAAA,MACxC;AACA,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,QACP,WAAA;AAAA,QACA;AAAA,UACI,YAAY,MAAA,CAAO,UAAA;AAAA,UACnB,QAAA,EAAU,OAAO,QAAA,IAAY,IAAA;AAAA,UAC7B,OAAO,MAAA,CAAO,KAAA;AAAA,UACd,SAAA,EAAW,OAAO,SAAA,IAAa,IAAA;AAAA,UAC/B,UAAA,EAAY,OAAO,UAAA,IAAc,IAAA;AAAA,UACjC,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,UACpB,eAAe,MAAA,CAAO,aAAA;AAAA,UACtB,sBAAsB,MAAA,CAAO,oBAAA;AAAA,UAC7B,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,oBAAoB,MAAA,CAAO,kBAAA;AAAA,UAC3B,OAAA,EAAS,OAAO,OAAA,IAAW,IAAA;AAAA,UAC3B,uBAAA,EAAyB,OAAO,uBAAA,IAA2B,IAAA;AAAA,UAC3D,kBAAA,EAAoB,OAAO,kBAAA,IAAsB,IAAA;AAAA,UACjD,mBAAA,EAAqB,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,eAAe,CAAA;AAAA,UAC1D,gBAAA,EAAkB,OAAO,gBAAA,IAAoB,IAAA;AAAA,UAC7C,eAAA,EAAiB,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,WAAW;AAAA,SACtD;AAAA,QACA;AAAA,OACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,WAAW,MAAA,EAA6C;AAC1D,IAAA,MAAM,GAAA,GAAM,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,QAAQ,WAAW,CAAC,CAAA,CAC1C,GAAA,CAAI,QAAQ,CAAA,CACZ,KAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,SAAA,GAAY,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,UAAA,CAAW,aAAA,CAAc,CAAA,CAAE,UAAU,CAAC,CAAA;AACzF,IAAA,MAAM,GAAA,GAAM,MAAA,GAAS,GAAA,CAAI,MAAA,CAAO,CAAC,MAAMC,qCAAA,CAAoB,CAAA,EAAG,MAAM,CAAC,CAAA,GAAI,GAAA;AACzE,IAAA,MAAM,EAAE,IAAA,EAAM,GAAA,KAAQC,kCAAA,CAAiB,MAAA,EAAQ,IAAI,MAAM,CAAA;AACzD,IAAA,OAAO,GAAA,CAAI,KAAA,CAAM,IAAA,EAAM,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEA,MAAM,sBAAA,GAA8C;AAChD,IAAA,MAAM,MAAkB,EAAC;AACzB,IAAA,KAAA,MAAW,CAAA,IAAK,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,QAAQ,WAAW,CAAC,CAAA,CAAE,GAAA,CAAI,QAAQ,CAAA;AAC7D,MAAA,IAAI,CAACC,wCAAsB,CAAA,CAAE,KAAK,GAAG,GAAA,CAAI,IAAA,CAAK,GAAG,CAAA,CAAE,WAAW,CAAA;AAClE,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,OAAO,MAAA,CAAO,YAAY,CAAA,GAAmB;AAAA,EAAC;AAClD;;;ACvFA,IAAM,OAAA,GAAU,CAAC,CAAA,KAAgB,CAAA,EAAG,EAAE,IAAI,CAAA,CAAA,EAAI,EAAE,IAAI,CAAA,CAAA;AACpD,IAAM,QAAA,GAAW,CAAC,CAAA,KAAkB,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA,CAAA,EAAI,CAAA,CAAE,QAAQ,CAAA,CAAA,EAAI,CAAA,CAAE,QAAQ,CAAA,CAAA;AAG7E,SAAS,KAAK,CAAA,EAAmB;AAC7B,EAAA,OAAO;AAAA,IACH,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,IAAA,EAAM,EAAE,IAAA,IAAQ,IAAA;AAAA,IAChB,SAAA,EAAW,EAAE,SAAA,IAAa,IAAA;AAAA,IAC1B,MAAO,CAAA,CAAE,IAAA,IAAA,CAAA;AAAA,GACb;AACJ;AAEO,IAAM,2BAAN,MAA8D;AAAA,EAEjE,YAA6B,KAAA,EAAkB;AAAlB,IAAA,IAAA,CAAA,KAAA,GAAA,KAAA;AAAA,EAAmB;AAAA,EAAnB,KAAA;AAAA,EADpB,OAAA,GAAU,CAAA;AAAA,EAGnB,MAAM,KAAA,GAAuB;AACzB,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAC,CAAA;AACpD,MAAA,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAC,CAAA;AAAA,IACzD,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,iBAAiB,GAAA,EAAiC;AACpD,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,KAAA,MAAW,KAAK,GAAA,EAAK;AACjB,QAAA,MAAM,IAAA,GAAO;AAAA,UACT,GAAG,KAAK,KAAA,CAAM,OAAA,CAAmB,cAAc,CAAA,CAAE,QAAA,CAAS,YAAA,EAAc,CAAA,CAAE,IAAI;AAAA,SAClF,CAAE,GAAG,CAAC,CAAA;AACN,QAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,UACP,cAAA;AAAA,UACA;AAAA,YACI,MAAM,CAAA,CAAE,IAAA;AAAA,YACR,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,IAAA,EAAM,IAAA,IAAQ,IAAA;AAAA,YAC9B,SAAA,EAAW,CAAA,CAAE,SAAA,IAAa,IAAA,EAAM,SAAA,IAAa,IAAA;AAAA,YAC7C,IAAA,EAAMC,oCAAA,CAAmB,CAAA,CAAE,IAAA,EAAM,MAAM,IAAI;AAAA,WAC/C;AAAA,UACA;AAAA,SACJ;AAAA,MACJ;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,aAAa,IAAA,EAAyC;AACxD,IAAA,MAAM,CAAA,GAAI,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,CAAE,QAAA,CAAS,YAAA,EAAc,IAAI,CAAC,CAAA;AAC7E,IAAA,OAAO,EAAE,MAAA,GAAS,IAAA,CAAK,CAAA,CAAE,CAAC,CAAC,CAAA,GAAI,IAAA;AAAA,EACnC;AAAA,EAEA,MAAM,SAAA,CAAU,IAAA,EAAgB,MAAA,EAAqC;AACjE,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,QACP,IAAA,CAAK,MAAM,OAAA,CAAQ,eAAe,EAAE,QAAA,CAAS,eAAA,EAAiB,OAAA,CAAQ,IAAI,CAAC;AAAA,OAC/E;AACA,MAAA,KAAA,MAAW,CAAA,IAAK,MAAA;AACZ,QAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,UACP,eAAA;AAAA,UACA;AAAA,YACI,EAAA,EAAI,SAAS,CAAC,CAAA;AAAA,YACd,SAAS,CAAA,EAAG,CAAA,CAAE,QAAQ,CAAA,CAAA,EAAI,EAAE,QAAQ,CAAA,CAAA;AAAA,YACpC,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,aAAa,CAAA,CAAE,WAAA;AAAA,YACf,UAAU,CAAA,CAAE;AAAA,WAChB;AAAA,UACA;AAAA,SACJ;AAAA,IACR,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,MAAM,UAAU,IAAA,EAAsC;AAClD,IAAA,MAAM,IAAA,GAAO;AAAA,MACT,GAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,eAAe,EAAE,QAAA,CAAS,eAAA,EAAiB,OAAA,CAAQ,IAAI,CAAC;AAAA;AAAA,KAElF;AACA,IAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,GAAW,EAAE,QAAQ,CAAA;AAC3C,IAAA,MAAM,MAAmB,EAAC;AAC1B,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AAClB,MAAA,MAAM,CAAA,GAAI,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,CAAE,QAAA,CAAS,YAAA,EAAc,CAAA,CAAE,WAAW,CAAC,CAAA;AACtF,MAAA,IAAI,CAAA,CAAE,QAAQ,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA,CAAE,CAAC,CAAC,CAAC,CAAA;AAAA,IACrC;AACA,IAAA,OAAO,GAAA;AAAA,EACX;AAAA,EAEA,MAAM,UAAU,IAAA,EAAkC;AAC9C,IAAA,OACI,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,QAAQ,eAAe,CAAA,CAAE,QAAA,CAAS,eAAA,EAAiB,OAAA,CAAQ,IAAI,CAAC,CAAC,EAC3E,MAAA,GAAS,CAAA;AAAA,EAEtB;AAAA,EAEA,MAAM,kBAAkB,IAAA,EAA+B;AACnD,IAAA,IAAA,CAAK,KAAA,CAAM,MAAM,MAAM;AACnB,MAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CACnB,OAAA,CAAQ,eAAe,EACvB,QAAA,CAAS,eAAA,EAAiB,OAAA,CAAQ,IAAI,CAAC,CAAA;AAM5C,MAAA,MAAM,YAAA,GAAe;AAAA,QACjB,GAAG,IAAI,GAAA;AAAA;AAAA,UAEH,CAAC,GAAG,UAAU,CAAA,CAAE,IAAI,CAAC,CAAA,KAAW,EAAE,WAAqB;AAAA;AAC3D,OACJ;AACA,MAAA,IAAA,CAAK,KAAA,CAAM,OAAO,UAAU,CAAA;AAC5B,MAAA,KAAA,MAAW,eAAe,YAAA,EAAc;AACpC,QAAA,MAAM,QAAA,GAAW;AAAA,UACb,GAAG,KAAK,KAAA,CACH,OAAA,CAAQ,eAAe,CAAA,CACvB,QAAA,CAAS,qBAAqB,WAAW;AAAA,SAClD;AACA,QAAA,IAAI,SAAS,MAAA,KAAW,CAAA;AACpB,UAAA,IAAA,CAAK,KAAA,CAAM,MAAA;AAAA,YACP,KAAK,KAAA,CAAM,OAAA,CAAQ,cAAc,CAAA,CAAE,QAAA,CAAS,cAAc,WAAW;AAAA,WACzE;AAAA,MACR;AAAA,IACJ,CAAC,CAAA;AAAA,EACL;AAAA,EAEA,OAAO,MAAA,CAAO,YAAY,CAAA,GAAmB;AAAA,EAAC;AAClD;;;ACxHO,IAAM,aAAA,GAAgB;AAAA,EACzB,IAAA,EAAM,SAAA;AAAA,EACN,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,EAAA,EAAI,QAAA;AAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACzC,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAS,QAAA;AAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,QAAA,EAAU,QAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,OAAA,EAAS,QAAA;AAAA,IACT,gBAAA,EAAkB,SAAA;AAAA,IAClB,UAAA,EAAY,QAAA;AAAA,IACZ,iBAAA,EAAmB,QAAA;AAAA,IACnB,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW,SAAA;AAAA,IACX,OAAA,EAAS,SAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA;AAAA,IACX,UAAA,EAAY,MAAA;AAAA,IACZ,OAAA,EAAS,OAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAKZ,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA;AAAK;AAEhD,CAAA;AAEO,IAAM,aAAA,GAAgB;AAAA,EACzB,IAAA,EAAM,SAAA;AAAA,EACN,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,EAAA,EAAI,QAAA;AAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACzC,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,KAAA;AAAA,IACN,KAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAS,QAAA;AAAA;AAAA,IACT,SAAA,EAAW,QAAA;AAAA,IACX,QAAA,EAAU,QAAA;AAAA,IACV,QAAA,EAAU,QAAA;AAAA,IACV,OAAA,EAAS,QAAA;AAAA,IACT,gBAAA,EAAkB,SAAA;AAAA,IAClB,UAAA,EAAY;AAAA;AAEpB,CAAA;AAEO,IAAM,oBAAA,GAAuB;AAAA,EAChC,IAAA,EAAM,gBAAA;AAAA,EACN,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,EAAA,EAAI,QAAA;AAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACzC,YAAA,EAAc,QAAA;AAAA,IACd,cAAA,EAAgB,QAAA;AAAA,IAChB,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,KAAA;AAAA,IACR,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY;AAAA;AAEpB,CAAA;AAEO,IAAM,oBAAA,GAAuB;AAAA,EAChC,IAAA,EAAM,gBAAA;AAAA,EACN,UAAA,EAAY,KAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,GAAA,EAAK,QAAA;AAAA,IACL,YAAA,EAAc,MAAA;AAAA,IACd,YAAA,EAAc;AAAA;AAEtB,CAAA;AAEO,IAAM,iBAAA,GAAoB;AAAA,EAC7B,IAAA,EAAM,aAAA;AAAA,EACN,UAAA,EAAY,QAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,MAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAS,QAAA;AAAA,IACT,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACtC,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACvC,UAAA,EAAY,QAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,SAAA,EAAW,MAAA;AAAA,IACX,KAAA,EAAO,SAAA;AAAA,IACP,YAAA,EAAc,SAAA;AAAA,IACd,OAAO,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,SAAS,IAAA;AAAK;AAE/D,CAAA;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC3B,IAAA,EAAM,WAAA;AAAA,EACN,UAAA,EAAY,YAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,UAAA,EAAY,QAAA;AAAA,IACZ,QAAA,EAAU,SAAA;AAAA,IACV,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IACvC,SAAA,EAAW,MAAA;AAAA,IACX,UAAA,EAAY,MAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,SAAA,EAAW,KAAA;AAAA,IACX,aAAA,EAAe,QAAA;AAAA,IACf,oBAAA,EAAsB,QAAA;AAAA,IACtB,WAAA,EAAa,QAAA;AAAA,IACb,kBAAA,EAAoB,QAAA;AAAA,IACpB,OAAA,EAAS,SAAA;AAAA,IACT,uBAAA,EAAyB,SAAA;AAAA,IACzB,kBAAA,EAAoB,SAAA;AAAA,IACpB,mBAAA,EAAqB,QAAA;AAAA,IACrB,gBAAA,EAAkB,SAAA;AAAA,IAClB,eAAA,EAAiB;AAAA;AAEzB,CAAA;AAEO,IAAM,kBAAA,GAAqB;AAAA,EAC9B,IAAA,EAAM,cAAA;AAAA,EACN,UAAA,EAAY,MAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,IAAA,EAAM;AAAA;AAEd,CAAA;AAEO,IAAM,mBAAA,GAAsB;AAAA,EAC/B,IAAA,EAAM,eAAA;AAAA,EACN,UAAA,EAAY,IAAA;AAAA,EACZ,UAAA,EAAY;AAAA,IACR,EAAA,EAAI,QAAA;AAAA;AAAA,IACJ,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA;AAAA,IACzC,QAAA,EAAU,QAAA;AAAA,IACV,QAAA,EAAU,KAAA;AAAA,IACV,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAU,SAAS,IAAA,EAAK;AAAA,IAC7C,QAAA,EAAU;AAAA;AAElB,CAAA;AAMO,IAAM,eAAA,GAAkB;AAAA,EAC3B,aAAA;AAAA,EACA,aAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACJ;AAeO,IAAM,2BAAA,GAA8B;AAAA,EACvC,eAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACJ;AAiCO,IAAM,wBAAA,GAA2B;AAYjC,SAAS,qBAAA,CAAsB,UAAe,QAAA,EAAqB;AACtE,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,OAAA,CAAQ,SAAS,CAAA;AAC3C,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACtC,IAAA,MAAM,OAAA,GAAU,SAAS,CAAC,CAAA;AAC1B,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AACjB,MAAA,OAAA,CAAQ,MAAA,GAASR,sCAAA,CAAqB,OAAA,CAAQ,OAAO,CAAA;AAAA,IACzD;AAAA,EACJ;AAOA,EAAA,MAAM,eAAA,GACF,KAAA,CAAM,OAAA,CAAQ,QAAA,EAAU,MAAM,CAAA,IAC9B,QAAA,CAAS,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAwB,CAAA,CAAE,SAAS,cAAc,CAAA;AAC3E,EAAA,IAAI,eAAA,EAAiB;AACjB,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,cAAc,CAAA;AAC9C,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,cAAc,CAAA;AAC9C,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,EAAA,EAAK;AACpC,MAAA,IAAI,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,IAAQ,QAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,GAAA,IAAO,IAAA,EAAM;AACjD,QAAA,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,GAAO,MAAA,CAAO,CAAC,CAAA,CAAE,GAAA;AAAA,MAC/B;AAAA,IACJ;AAAA,EACJ;AACJ","file":"index.cjs","sourcesContent":["import { ArkTransaction, ExtendedCoin, ExtendedVirtualCoin } from \"../../wallet\";\nimport { WalletRepository, WalletState, VtxoRepositoryKey } from \"../walletRepository\";\nimport {\n serializeVtxo,\n serializeUtxo,\n deserializeVtxo,\n deserializeUtxo,\n serializeAssets,\n deserializeAssets,\n SerializedTapLeaf,\n} from \"../serialization\";\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { isVtxoForScript } from \"../../contracts/vtxoOwnership\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of WalletRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmWalletRepository implements WalletRepository {\n readonly version = 1 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVtxo\"));\n this.realm.delete(this.realm.objects(\"ArkUtxo\"));\n this.realm.delete(this.realm.objects(\"ArkTransaction\"));\n this.realm.delete(this.realm.objects(\"ArkWalletState\"));\n });\n }\n\n // ── VTXO management ────────────────────────────────────────────────\n\n async getVtxos(address: string): Promise<ExtendedVirtualCoin[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkVtxo\").filtered(\"address == $0\", address);\n return [...results].map(vtxoObjectToDomain);\n }\n\n async saveVtxos(address: string, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const vtxo of vtxos) {\n const s = serializeVtxo(vtxo);\n this.realm.create(\n \"ArkVtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n virtualStatusJson: JSON.stringify(s.virtualStatus),\n createdAt:\n typeof s.createdAt === \"string\"\n ? s.createdAt\n : s.createdAt instanceof Date\n ? s.createdAt.toISOString()\n : new Date(s.createdAt).toISOString(),\n isUnrolled: s.isUnrolled ?? false,\n isSpent: s.isSpent === undefined ? null : s.isSpent,\n spentBy: s.spentBy ?? null,\n settledBy: s.settledBy ?? null,\n arkTxId: s.arkTxId ?? null,\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n assetsJson: s.assets ? JSON.stringify(s.assets) : null,\n script: s.script ?? null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteVtxos(address: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkVtxo\").filtered(\"address == $0\", address);\n this.realm.delete(toDelete);\n });\n }\n\n async getVtxosForScript(script: string): Promise<ExtendedVirtualCoin[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkVtxo\").filtered(\"script == $0\", script);\n return [...results].map(vtxoObjectToDomain);\n }\n\n async saveVtxosForScript(key: VtxoRepositoryKey, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n if (!key.address) {\n throw new Error(\"RealmWalletRepository requires an address\");\n }\n for (const vtxo of vtxos) {\n if (!isVtxoForScript(vtxo, key.script)) {\n throw new Error(\n `VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`,\n );\n }\n }\n return this.saveVtxos(key.address, vtxos);\n }\n\n async deleteVtxosForScript(script: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkVtxo\").filtered(\"script == $0\", script);\n this.realm.delete(toDelete);\n });\n }\n\n // ── UTXO management ────────────────────────────────────────────────\n\n async getUtxos(address: string): Promise<ExtendedCoin[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkUtxo\").filtered(\"address == $0\", address);\n return [...results].map(utxoObjectToDomain);\n }\n\n async saveUtxos(address: string, utxos: ExtendedCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const utxo of utxos) {\n const s = serializeUtxo(utxo);\n this.realm.create(\n \"ArkUtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteUtxos(address: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkUtxo\").filtered(\"address == $0\", address);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Transaction history ────────────────────────────────────────────\n\n async getTransactionHistory(address: string): Promise<ArkTransaction[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkTransaction\").filtered(\"address == $0\", address);\n const txs = [...results].map(txObjectToDomain);\n txs.sort((a, b) => a.createdAt - b.createdAt);\n return txs;\n }\n\n async saveTransactions(address: string, txs: ArkTransaction[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const tx of txs) {\n this.realm.create(\n \"ArkTransaction\",\n {\n pk: `${address}:${tx.key.boardingTxid}:${tx.key.commitmentTxid}:${tx.key.arkTxid}`,\n address,\n boardingTxid: tx.key.boardingTxid,\n commitmentTxid: tx.key.commitmentTxid,\n arkTxid: tx.key.arkTxid,\n type: tx.type,\n amount: tx.amount,\n settled: tx.settled,\n createdAt: tx.createdAt,\n assetsJson: tx.assets ? JSON.stringify(serializeAssets(tx.assets)) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteTransactions(address: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm\n .objects(\"ArkTransaction\")\n .filtered(\"address == $0\", address);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Wallet state ───────────────────────────────────────────────────\n\n async getWalletState(): Promise<WalletState | null> {\n await this.ensureInit();\n const results = this.realm\n .objects<WalletStateObject>(\"ArkWalletState\")\n .filtered(\"key == $0\", \"state\");\n const items = [...results];\n if (items.length === 0) return null;\n\n const obj = items[0];\n const state: WalletState = {};\n if (obj.settingsJson) {\n state.settings = JSON.parse(obj.settingsJson);\n }\n state.lastSyncTime = obj.lastSyncTime ?? undefined;\n return state;\n }\n\n async saveWalletState(state: WalletState): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkWalletState\",\n {\n key: \"state\",\n lastSyncTime: state.lastSyncTime,\n settingsJson: state.settings ? JSON.stringify(state.settings) : null,\n },\n \"modified\",\n );\n });\n }\n}\n\ninterface WalletStateObject {\n key: string;\n lastSyncTime: number | null;\n settingsJson: string | null;\n}\n\n// ── Realm object → Domain converters ─────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction vtxoObjectToDomain(obj: any): ExtendedVirtualCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n virtualStatus: JSON.parse(obj.virtualStatusJson),\n createdAt: new Date(obj.createdAt),\n isUnrolled: obj.isUnrolled,\n isSpent: obj.isSpent === null ? undefined : obj.isSpent,\n spentBy: obj.spentBy ?? undefined,\n settledBy: obj.settledBy ?? undefined,\n arkTxId: obj.arkTxId ?? undefined,\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n assets: obj.assetsJson ? JSON.parse(obj.assetsJson) : undefined,\n // Post-migration every row has `script`, but the backfill is\n // idempotent: derive from `address` if the legacy column is still\n // null (e.g. the migration hasn't run yet on this handle).\n script: obj.script ?? scriptFromArkAddress(obj.address),\n };\n\n return deserializeVtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction utxoObjectToDomain(obj: any): ExtendedCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n };\n\n return deserializeUtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction txObjectToDomain(obj: any): ArkTransaction {\n const tx: ArkTransaction = {\n key: {\n boardingTxid: obj.boardingTxid,\n commitmentTxid: obj.commitmentTxid,\n arkTxid: obj.arkTxid,\n },\n type: obj.type as ArkTransaction[\"type\"],\n amount: obj.amount,\n settled: obj.settled,\n createdAt: obj.createdAt,\n };\n if (obj.assetsJson) {\n tx.assets = deserializeAssets(JSON.parse(obj.assetsJson));\n }\n return tx;\n}\n","import { Contract, ContractState, ContractWatchState } from \"../../contracts/types\";\nimport { ContractFilter, ContractRepository } from \"../contractRepository\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of ContractRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmContractRepository implements ContractRepository {\n readonly version = 2 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkContract\"));\n });\n }\n\n // ── Contract management ────────────────────────────────────────────\n\n async getContracts(filter?: ContractFilter): Promise<Contract[]> {\n await this.ensureInit();\n\n let results = this.realm.objects(\"ArkContract\");\n\n if (filter) {\n const filterParts: string[] = [];\n const filterArgs: unknown[] = [];\n\n let argIndex = 0;\n argIndex = this.addFilterCondition(\n filterParts,\n filterArgs,\n \"script\",\n filter.script,\n argIndex,\n );\n argIndex = this.addFilterCondition(\n filterParts,\n filterArgs,\n \"state\",\n filter.state,\n argIndex,\n );\n argIndex = this.addFilterCondition(\n filterParts,\n filterArgs,\n \"type\",\n filter.type,\n argIndex,\n );\n argIndex = this.addWatchCondition(filterParts, filterArgs, filter.watch, argIndex);\n\n if (filterParts.length > 0) {\n const query = filterParts.join(\" AND \");\n results = results.filtered(query, ...filterArgs);\n }\n }\n\n return [...results].map(contractObjectToDomain);\n }\n\n async saveContract(contract: Contract): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkContract\",\n {\n script: contract.script,\n address: contract.address,\n type: contract.type,\n state: contract.state,\n paramsJson: JSON.stringify(contract.params),\n createdAt: contract.createdAt,\n label: contract.label ?? null,\n metadataJson: contract.metadata ? JSON.stringify(contract.metadata) : null,\n watch: contract.watch ?? null,\n },\n \"modified\",\n );\n });\n }\n\n async deleteContract(script: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkContract\").filtered(\"script == $0\", script);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────\n\n private addFilterCondition(\n parts: string[],\n args: unknown[],\n column: string,\n value: string | string[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n if (Array.isArray(value)) {\n if (value.length === 0) return argIndex;\n const conditions = value.map((_, i) => {\n return `${column} == $${argIndex + i}`;\n });\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...value);\n return argIndex + value.length;\n } else {\n parts.push(`${column} == $${argIndex}`);\n args.push(value);\n return argIndex + 1;\n }\n }\n\n /**\n * Same as {@link addFilterCondition}, except a row predating the\n * property stores null and must match `\"watched\"`.\n */\n private addWatchCondition(\n parts: string[],\n args: unknown[],\n value: ContractWatchState | ContractWatchState[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n const wanted = Array.isArray(value) ? value : [value];\n if (wanted.length === 0) return argIndex;\n\n const conditions = wanted.map((_, i) => `watch == $${argIndex + i}`);\n if (wanted.includes(\"watched\")) conditions.push(\"watch == null\");\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...wanted);\n return argIndex + wanted.length;\n }\n}\n\n// ── Realm object → Domain converter ──────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction contractObjectToDomain(obj: any): Contract {\n const contract: Contract = {\n script: obj.script,\n address: obj.address,\n type: obj.type,\n state: obj.state as ContractState,\n params: JSON.parse(obj.paramsJson),\n createdAt: obj.createdAt,\n };\n\n if (obj.label !== null && obj.label !== undefined) {\n contract.label = obj.label;\n }\n if (obj.metadataJson !== null && obj.metadataJson !== undefined) {\n contract.metadata = JSON.parse(obj.metadataJson);\n }\n if (obj.watch !== null && obj.watch !== undefined) {\n contract.watch = obj.watch as ContractWatchState;\n }\n\n return contract;\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ArkIntent,\n ArkIntentState,\n assertIntentIdUnique,\n IntentFilter,\n IntentRepository,\n intentMatchesFilter,\n intentPageBounds,\n isTerminalIntentState,\n} from \"../intentRepository\";\nimport { RealmLike } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toIntent(o: any): ArkIntent {\n return {\n intentTxId: o.intentTxId,\n intentId: o.intentId ?? undefined,\n state: o.state as ArkIntentState,\n validFrom: o.validFrom ?? undefined,\n validUntil: o.validUntil ?? undefined,\n createdAt: o.createdAt,\n updatedAt: o.updatedAt,\n registerProof: o.registerProof,\n registerProofMessage: o.registerProofMessage,\n deleteProof: o.deleteProof,\n deleteProofMessage: o.deleteProofMessage,\n batchId: o.batchId ?? undefined,\n commitmentTransactionId: o.commitmentTransactionId ?? undefined,\n cancellationReason: o.cancellationReason ?? undefined,\n partialForfeits: JSON.parse(o.partialForfeitsJson),\n signerDescriptor: o.signerDescriptor ?? undefined,\n intentVtxos: JSON.parse(o.intentVtxosJson),\n };\n}\n\nexport class RealmIntentRepository implements IntentRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkIntent\"));\n });\n }\n\n async saveIntent(intent: ArkIntent): Promise<void> {\n this.realm.write(() => {\n if (intent.intentId != null) {\n const clashes = [\n ...this.realm.objects(\"ArkIntent\").filtered(\"intentId == $0\", intent.intentId),\n ].map(toIntent);\n assertIntentIdUnique(intent, clashes);\n }\n this.realm.create(\n \"ArkIntent\",\n {\n intentTxId: intent.intentTxId,\n intentId: intent.intentId ?? null,\n state: intent.state,\n validFrom: intent.validFrom ?? null,\n validUntil: intent.validUntil ?? null,\n createdAt: intent.createdAt,\n updatedAt: Date.now(),\n registerProof: intent.registerProof,\n registerProofMessage: intent.registerProofMessage,\n deleteProof: intent.deleteProof,\n deleteProofMessage: intent.deleteProofMessage,\n batchId: intent.batchId ?? null,\n commitmentTransactionId: intent.commitmentTransactionId ?? null,\n cancellationReason: intent.cancellationReason ?? null,\n partialForfeitsJson: JSON.stringify(intent.partialForfeits),\n signerDescriptor: intent.signerDescriptor ?? null,\n intentVtxosJson: JSON.stringify(intent.intentVtxos),\n },\n \"modified\",\n );\n });\n }\n\n async getIntents(filter?: IntentFilter): Promise<ArkIntent[]> {\n const all = [...this.realm.objects(\"ArkIntent\")]\n .map(toIntent)\n .sort((a, b) => a.createdAt - b.createdAt || a.intentTxId.localeCompare(b.intentTxId));\n const out = filter ? all.filter((i) => intentMatchesFilter(i, filter)) : all;\n const { skip, end } = intentPageBounds(filter, out.length);\n return out.slice(skip, end);\n }\n\n async getLockedVtxoOutpoints(): Promise<Outpoint[]> {\n const out: Outpoint[] = [];\n for (const o of [...this.realm.objects(\"ArkIntent\")].map(toIntent))\n if (!isTerminalIntentState(o.state)) out.push(...o.intentVtxos);\n return out;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ChainedTxType,\n mergeChainedTxType,\n VirtualTx,\n VirtualTxRepository,\n VtxoBranch,\n} from \"../virtualTxRepository\";\nimport { RealmLike } from \"./types\";\n\nconst vtxoKey = (o: Outpoint) => `${o.txid}:${o.vout}`;\nconst branchPk = (b: VtxoBranch) => `${b.vtxoTxid}:${b.vtxoVout}:${b.position}`;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toTx(o: any): VirtualTx {\n return {\n txid: o.txid,\n psbt: o.psbt ?? null,\n expiresAt: o.expiresAt ?? null,\n type: (o.type ?? ChainedTxType.Unspecified) as ChainedTxType,\n };\n}\n\nexport class RealmVirtualTxRepository implements VirtualTxRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVirtualTx\"));\n this.realm.delete(this.realm.objects(\"ArkVtxoBranch\"));\n });\n }\n\n async upsertVirtualTxs(txs: VirtualTx[]): Promise<void> {\n this.realm.write(() => {\n for (const t of txs) {\n const prev = [\n ...this.realm.objects<VirtualTx>(\"ArkVirtualTx\").filtered(\"txid == $0\", t.txid),\n ].at(0);\n this.realm.create(\n \"ArkVirtualTx\",\n {\n txid: t.txid,\n psbt: t.psbt ?? prev?.psbt ?? null,\n expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,\n type: mergeChainedTxType(t.type, prev?.type),\n },\n \"modified\",\n );\n }\n });\n }\n\n async getVirtualTx(txid: string): Promise<VirtualTx | null> {\n const r = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", txid)];\n return r.length ? toTx(r[0]) : null;\n }\n\n async setBranch(vtxo: Outpoint, branch: VtxoBranch[]): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(\n this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n );\n for (const b of branch)\n this.realm.create(\n \"ArkVtxoBranch\",\n {\n pk: branchPk(b),\n vtxoKey: `${b.vtxoTxid}:${b.vtxoVout}`,\n vtxoTxid: b.vtxoTxid,\n vtxoVout: b.vtxoVout,\n virtualTxid: b.virtualTxid,\n position: b.position,\n },\n \"modified\",\n );\n });\n }\n\n async getBranch(vtxo: Outpoint): Promise<VirtualTx[]> {\n const rows = [\n ...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as any[];\n rows.sort((a, b) => a.position - b.position);\n const out: VirtualTx[] = [];\n for (const b of rows) {\n const t = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", b.virtualTxid)];\n if (t.length) out.push(toTx(t[0]));\n }\n return out;\n }\n\n async hasBranch(vtxo: Outpoint): Promise<boolean> {\n return (\n [...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo))]\n .length > 0\n );\n }\n\n async pruneForSpentVtxo(vtxo: Outpoint): Promise<void> {\n this.realm.write(() => {\n const branchRows = this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"vtxoKey == $0\", vtxoKey(vtxo));\n // Snapshot the referenced txids into plain strings BEFORE deleting.\n // Real Realm invalidates deleted objects, so reading `virtualTxid`\n // off them after `delete` throws (\"Accessing object which has been\n // invalidated\") — which would roll back the whole write() and make\n // prune a permanent no-op on React Native.\n const virtualTxids = [\n ...new Set(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [...branchRows].map((e: any) => e.virtualTxid as string),\n ),\n ];\n this.realm.delete(branchRows);\n for (const virtualTxid of virtualTxids) {\n const stillRef = [\n ...this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"virtualTxid == $0\", virtualTxid),\n ];\n if (stillRef.length === 0)\n this.realm.delete(\n this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", virtualTxid),\n );\n }\n });\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","/**\n * Realm object schemas for the Arkade wallet.\n *\n * All schema names are prefixed with \"Ark\" to avoid collisions with\n * other Realm schemas in the consuming application.\n *\n * Since `realm` is a peer dependency (not installed in this package),\n * schemas are defined as plain JS objects conforming to Realm's\n * ObjectSchema shape.\n */\n\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\n\nexport const ArkVtxoSchema = {\n name: \"ArkVtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n virtualStatusJson: \"string\",\n spentBy: \"string?\",\n settledBy: \"string?\",\n arkTxId: \"string?\",\n createdAt: \"string\", // ISO 8601\n isUnrolled: \"bool\",\n isSpent: \"bool?\",\n assetsJson: \"string?\",\n // scriptPubKey (hex) locking this VTXO, indexed so contract-scoped\n // queries can resolve ownership without touching address mapping.\n // Required as of schema v2; legacy rows are backfilled from `address`\n // during migration (see `runArkRealmMigrations`).\n script: { type: \"string\", indexed: true },\n },\n} as const;\n\nexport const ArkUtxoSchema = {\n name: \"ArkUtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n },\n} as const;\n\nexport const ArkTransactionSchema = {\n name: \"ArkTransaction\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${address}:${boardingTxid}:${commitmentTxid}:${arkTxid}`\n address: { type: \"string\", indexed: true },\n boardingTxid: \"string\",\n commitmentTxid: \"string\",\n arkTxid: \"string\",\n type: \"string\",\n amount: \"int\",\n settled: \"bool\",\n createdAt: \"int\",\n assetsJson: \"string?\",\n },\n} as const;\n\nexport const ArkWalletStateSchema = {\n name: \"ArkWalletState\",\n primaryKey: \"key\",\n properties: {\n key: \"string\",\n lastSyncTime: \"int?\",\n settingsJson: \"string?\",\n },\n} as const;\n\nexport const ArkContractSchema = {\n name: \"ArkContract\",\n primaryKey: \"script\",\n properties: {\n script: \"string\",\n address: \"string\",\n type: { type: \"string\", indexed: true },\n state: { type: \"string\", indexed: true },\n paramsJson: \"string\",\n createdAt: \"int\",\n expiresAt: \"int?\",\n label: \"string?\",\n metadataJson: \"string?\",\n watch: { type: \"string\", optional: true, indexed: true },\n },\n} as const;\n\nexport const ArkIntentSchema = {\n name: \"ArkIntent\",\n primaryKey: \"intentTxId\",\n properties: {\n intentTxId: \"string\",\n intentId: \"string?\",\n state: { type: \"string\", indexed: true },\n validFrom: \"int?\",\n validUntil: \"int?\",\n createdAt: \"int\",\n updatedAt: \"int\",\n registerProof: \"string\",\n registerProofMessage: \"string\",\n deleteProof: \"string\",\n deleteProofMessage: \"string\",\n batchId: \"string?\",\n commitmentTransactionId: \"string?\",\n cancellationReason: \"string?\",\n partialForfeitsJson: \"string\",\n signerDescriptor: \"string?\",\n intentVtxosJson: \"string\",\n },\n} as const;\n\nexport const ArkVirtualTxSchema = {\n name: \"ArkVirtualTx\",\n primaryKey: \"txid\",\n properties: {\n txid: \"string\",\n psbt: \"string?\",\n expiresAt: \"int?\",\n type: \"int\",\n },\n} as const;\n\nexport const ArkVtxoBranchSchema = {\n name: \"ArkVtxoBranch\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // `${vtxoTxid}:${vtxoVout}:${position}`\n vtxoKey: { type: \"string\", indexed: true }, // `${vtxoTxid}:${vtxoVout}`\n vtxoTxid: \"string\",\n vtxoVout: \"int\",\n virtualTxid: { type: \"string\", indexed: true },\n position: \"int\",\n },\n} as const;\n\n/**\n * All Realm schemas needed by the Arkade wallet repositories.\n * Pass this array to your Realm configuration's `schema` property.\n */\nexport const ArkRealmSchemas = [\n ArkVtxoSchema,\n ArkUtxoSchema,\n ArkTransactionSchema,\n ArkWalletStateSchema,\n ArkContractSchema,\n];\n\n/**\n * @experimental Schemas for the inert intent/virtualtx persistence layer.\n *\n * Deliberately kept OUT of {@link ArkRealmSchemas} and {@link\n * ARK_REALM_SCHEMA_VERSION} so upgrading the SDK never migrates an existing\n * consumer's Realm. A consumer opting in must register these schemas and bump\n * their own `schemaVersion` themselves:\n *\n * ```ts\n * schema: [...ArkRealmSchemas, ...ArkExperimentalRealmSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION + 1, yourSchemaVersion),\n * ```\n */\nexport const ArkExperimentalRealmSchemas = [\n ArkIntentSchema,\n ArkVirtualTxSchema,\n ArkVtxoBranchSchema,\n];\n\n/**\n * Current Realm schema version for the Arkade wallet.\n *\n * Consumers opening Realm must pass a `schemaVersion` at least this high so\n * legacy databases get migrated; merge it with your own app's version:\n *\n * ```ts\n * await Realm.open({\n * schema: [...ArkRealmSchemas, ...yourSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION, yourSchemaVersion),\n * onMigration: (oldRealm, newRealm) => {\n * runArkRealmMigrations(oldRealm, newRealm);\n * // your own migrations\n * },\n * });\n * ```\n *\n * History:\n * - v1: initial ArkVtxo/ArkUtxo/... schemas, `script` nullable.\n * - v2: ArkVtxo.script becomes required; NULL values are backfilled from\n * the owning Ark address during migration.\n * - v3: ArkContract.watch added (nullable). No data migration: a row\n * without one reads as `watched`, which is the coverage every\n * existing contract has today.\n *\n * The intent/virtualtx schemas ({@link ArkExperimentalRealmSchemas}) are NOT\n * counted here: they are experimental and inert, so they never move the\n * advertised version on their own. `runArkRealmMigrations` still carries the\n * intent-schema migration steps (guarded per-schema) for consumers who opt in\n * and bump their own version.\n */\nexport const ARK_REALM_SCHEMA_VERSION = 3;\n\n/**\n * Run every Arkade schema migration applicable to the open Realm.\n *\n * Designed to be composed with the consumer's own migrations inside a single\n * `onMigration` callback. Each migration step does a per-row check so it\n * remains idempotent and independent of the app's global `schemaVersion` —\n * a consumer whose app is already at version 10 can still trigger the\n * Arkade v1→v2 script backfill when the row has never been populated.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function runArkRealmMigrations(oldRealm: any, newRealm: any): void {\n const newVtxos = newRealm.objects(\"ArkVtxo\");\n for (let i = 0; i < newVtxos.length; i++) {\n const newVtxo = newVtxos[i];\n if (!newVtxo.script) {\n newVtxo.script = scriptFromArkAddress(newVtxo.address);\n }\n }\n\n // v3 → v4: ArkVirtualTx.hex was renamed to psbt (both hold the same\n // serialized tx payload). A rename is drop-old + add-new, so the value\n // would be lost unless we copy it across. Guard on the old schema actually\n // defining ArkVirtualTx — a v1/v2 realm never had it, and reading objects\n // of an unknown type throws.\n const oldHasVirtualTx =\n Array.isArray(oldRealm?.schema) &&\n oldRealm.schema.some((s: { name: string }) => s.name === \"ArkVirtualTx\");\n if (oldHasVirtualTx) {\n const oldTxs = oldRealm.objects(\"ArkVirtualTx\");\n const newTxs = newRealm.objects(\"ArkVirtualTx\");\n for (let i = 0; i < newTxs.length; i++) {\n if (newTxs[i].psbt == null && oldTxs[i].hex != null) {\n newTxs[i].psbt = oldTxs[i].hex;\n }\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../../../src/repositories/realm/walletRepository.ts","../../../src/repositories/realm/contractRepository.ts","../../../src/repositories/realm/intentRepository.ts","../../../src/repositories/realm/virtualTxRepository.ts","../../../src/repositories/realm/schemas.ts"],"names":["serializeVtxo","isVtxoForScript","serializeUtxo","serializeAssets","scriptFromArkAddress","deserializeVtxo","deserializeUtxo","deserializeAssets","assertIntentIdUnique","intentMatchesFilter","intentPageBounds","isTerminalIntentState","mergeChainedTxType","legacyVtxoFacts"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ArkTransaction, ExtendedCoin, ExtendedVirtualCoin } from \"../../wallet\";\nimport { WalletRepository, WalletState, VtxoRepositoryKey } from \"../walletRepository\";\nimport {\n serializeVtxo,\n serializeUtxo,\n deserializeVtxo,\n deserializeUtxo,\n serializeAssets,\n deserializeAssets,\n SerializedTapLeaf,\n} from \"../serialization\";\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { isVtxoForScript } from \"../../contracts/vtxoOwnership\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of WalletRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmWalletRepository implements WalletRepository {\n readonly version = 1 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVtxo\"));\n this.realm.delete(this.realm.objects(\"ArkUtxo\"));\n this.realm.delete(this.realm.objects(\"ArkTransaction\"));\n this.realm.delete(this.realm.objects(\"ArkWalletState\"));\n });\n }\n\n // ── VTXO management ────────────────────────────────────────────────\n\n async getVtxos(address: string): Promise<ExtendedVirtualCoin[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkVtxo\").filtered(\"address == $0\", address);\n return [...results].map(vtxoObjectToDomain);\n }\n\n async saveVtxos(address: string, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const vtxo of vtxos) {\n const s = serializeVtxo(vtxo);\n this.realm.create(\n \"ArkVtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n createdAt:\n typeof s.createdAt === \"string\"\n ? s.createdAt\n : s.createdAt instanceof Date\n ? s.createdAt.toISOString()\n : new Date(s.createdAt).toISOString(),\n isUnrolled: s.isUnrolled ?? false,\n isSpent: s.isSpent === undefined ? null : s.isSpent,\n isSwept: s.isSwept === undefined ? null : s.isSwept,\n isPreconfirmed: s.isPreconfirmed === undefined ? null : s.isPreconfirmed,\n commitmentTxIdsJson: s.commitmentTxIds\n ? JSON.stringify(s.commitmentTxIds)\n : null,\n expiresAt:\n s.expiresAt === undefined\n ? null\n : s.expiresAt instanceof Date\n ? s.expiresAt.toISOString()\n : new Date(s.expiresAt).toISOString(),\n expiresAtHeight: s.expiresAtHeight ?? null,\n spentBy: s.spentBy ?? null,\n settledBy: s.settledBy ?? null,\n arkTxId: s.arkTxId ?? null,\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n assetsJson: s.assets ? JSON.stringify(s.assets) : null,\n script: s.script ?? null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteVtxos(address: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkVtxo\").filtered(\"address == $0\", address);\n this.realm.delete(toDelete);\n });\n }\n\n async getVtxosForScript(script: string): Promise<ExtendedVirtualCoin[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkVtxo\").filtered(\"script == $0\", script);\n return [...results].map(vtxoObjectToDomain);\n }\n\n async saveVtxosForScript(key: VtxoRepositoryKey, vtxos: ExtendedVirtualCoin[]): Promise<void> {\n if (!key.address) {\n throw new Error(\"RealmWalletRepository requires an address\");\n }\n for (const vtxo of vtxos) {\n if (!isVtxoForScript(vtxo, key.script)) {\n throw new Error(\n `VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`,\n );\n }\n }\n return this.saveVtxos(key.address, vtxos);\n }\n\n async deleteVtxosForScript(script: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkVtxo\").filtered(\"script == $0\", script);\n this.realm.delete(toDelete);\n });\n }\n\n // ── UTXO management ────────────────────────────────────────────────\n\n async getUtxos(address: string): Promise<ExtendedCoin[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkUtxo\").filtered(\"address == $0\", address);\n return [...results].map(utxoObjectToDomain);\n }\n\n async saveUtxos(address: string, utxos: ExtendedCoin[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const utxo of utxos) {\n const s = serializeUtxo(utxo);\n this.realm.create(\n \"ArkUtxo\",\n {\n pk: `${s.txid}:${s.vout}`,\n address,\n txid: s.txid,\n vout: s.vout,\n value: s.value,\n tapTree: s.tapTree,\n forfeitCb: s.forfeitTapLeafScript.cb,\n forfeitS: s.forfeitTapLeafScript.s,\n intentCb: s.intentTapLeafScript.cb,\n intentS: s.intentTapLeafScript.s,\n statusJson: JSON.stringify(s.status),\n extraWitnessJson: s.extraWitness ? JSON.stringify(s.extraWitness) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteUtxos(address: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkUtxo\").filtered(\"address == $0\", address);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Transaction history ────────────────────────────────────────────\n\n async getTransactionHistory(address: string): Promise<ArkTransaction[]> {\n await this.ensureInit();\n const results = this.realm.objects(\"ArkTransaction\").filtered(\"address == $0\", address);\n const txs = [...results].map(txObjectToDomain);\n txs.sort((a, b) => a.createdAt - b.createdAt);\n return txs;\n }\n\n async saveTransactions(address: string, txs: ArkTransaction[]): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n for (const tx of txs) {\n this.realm.create(\n \"ArkTransaction\",\n {\n pk: `${address}:${tx.key.boardingTxid}:${tx.key.commitmentTxid}:${tx.key.arkTxid}`,\n address,\n boardingTxid: tx.key.boardingTxid,\n commitmentTxid: tx.key.commitmentTxid,\n arkTxid: tx.key.arkTxid,\n type: tx.type,\n amount: tx.amount,\n settled: tx.settled,\n createdAt: tx.createdAt,\n assetsJson: tx.assets ? JSON.stringify(serializeAssets(tx.assets)) : null,\n },\n \"modified\",\n );\n }\n });\n }\n\n async deleteTransactions(address: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm\n .objects(\"ArkTransaction\")\n .filtered(\"address == $0\", address);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Wallet state ───────────────────────────────────────────────────\n\n async getWalletState(): Promise<WalletState | null> {\n await this.ensureInit();\n const results = this.realm\n .objects<WalletStateObject>(\"ArkWalletState\")\n .filtered(\"key == $0\", \"state\");\n const items = [...results];\n if (items.length === 0) return null;\n\n const obj = items[0];\n const state: WalletState = {};\n if (obj.settingsJson) {\n state.settings = JSON.parse(obj.settingsJson);\n }\n state.lastSyncTime = obj.lastSyncTime ?? undefined;\n return state;\n }\n\n async saveWalletState(state: WalletState): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkWalletState\",\n {\n key: \"state\",\n lastSyncTime: state.lastSyncTime,\n settingsJson: state.settings ? JSON.stringify(state.settings) : null,\n },\n \"modified\",\n );\n });\n }\n}\n\ninterface WalletStateObject {\n key: string;\n lastSyncTime: number | null;\n settingsJson: string | null;\n}\n\n// ── Realm object → Domain converters ─────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction vtxoObjectToDomain(obj: any): ExtendedVirtualCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n createdAt: new Date(obj.createdAt),\n isUnrolled: obj.isUnrolled,\n isSpent: obj.isSpent === null ? undefined : obj.isSpent,\n isSwept: obj.isSwept == null ? undefined : obj.isSwept,\n isPreconfirmed: obj.isPreconfirmed == null ? undefined : obj.isPreconfirmed,\n commitmentTxIds: obj.commitmentTxIdsJson ? JSON.parse(obj.commitmentTxIdsJson) : undefined,\n expiresAt: obj.expiresAt ? new Date(obj.expiresAt) : undefined,\n expiresAtHeight: obj.expiresAtHeight ?? undefined,\n spentBy: obj.spentBy ?? undefined,\n settledBy: obj.settledBy ?? undefined,\n arkTxId: obj.arkTxId ?? undefined,\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n assets: obj.assetsJson ? JSON.parse(obj.assetsJson) : undefined,\n // Post-migration every row has `script`, but the backfill is\n // idempotent: derive from `address` if the legacy column is still\n // null (e.g. the migration hasn't run yet on this handle).\n script: obj.script ?? scriptFromArkAddress(obj.address),\n };\n\n return deserializeVtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction utxoObjectToDomain(obj: any): ExtendedCoin {\n const serialized = {\n txid: obj.txid,\n vout: obj.vout,\n value: obj.value,\n tapTree: obj.tapTree,\n forfeitTapLeafScript: {\n cb: obj.forfeitCb,\n s: obj.forfeitS,\n } as SerializedTapLeaf,\n intentTapLeafScript: {\n cb: obj.intentCb,\n s: obj.intentS,\n } as SerializedTapLeaf,\n status: JSON.parse(obj.statusJson),\n extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : undefined,\n };\n\n return deserializeUtxo(serialized);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction txObjectToDomain(obj: any): ArkTransaction {\n const tx: ArkTransaction = {\n key: {\n boardingTxid: obj.boardingTxid,\n commitmentTxid: obj.commitmentTxid,\n arkTxid: obj.arkTxid,\n },\n type: obj.type as ArkTransaction[\"type\"],\n amount: obj.amount,\n settled: obj.settled,\n createdAt: obj.createdAt,\n };\n if (obj.assetsJson) {\n tx.assets = deserializeAssets(JSON.parse(obj.assetsJson));\n }\n return tx;\n}\n","import { Contract, ContractState, ContractWatchState } from \"../../contracts/types\";\nimport { ContractFilter, ContractRepository } from \"../contractRepository\";\nimport { RealmLike } from \"./types\";\n\n/**\n * Realm-based implementation of ContractRepository.\n *\n * Consumers must open Realm with the schemas from `./schemas.ts` and pass\n * the instance to the constructor.\n *\n * Realm handles schema creation on open, so `ensureInit()` is a no-op.\n * The consumer owns the Realm lifecycle — `[Symbol.asyncDispose]` is a no-op.\n */\nexport class RealmContractRepository implements ContractRepository {\n readonly version = 2 as const;\n\n constructor(private readonly realm: RealmLike) {}\n\n // ── Lifecycle ──────────────────────────────────────────────────────\n\n private async ensureInit(): Promise<void> {\n // Realm handles schema on open — nothing to initialise.\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n // no-op — consumer owns the Realm lifecycle\n }\n\n // ── Clear ──────────────────────────────────────────────────────────\n\n async clear(): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkContract\"));\n });\n }\n\n // ── Contract management ────────────────────────────────────────────\n\n async getContracts(filter?: ContractFilter): Promise<Contract[]> {\n await this.ensureInit();\n\n let results = this.realm.objects(\"ArkContract\");\n\n if (filter) {\n const filterParts: string[] = [];\n const filterArgs: unknown[] = [];\n\n let argIndex = 0;\n argIndex = this.addFilterCondition(\n filterParts,\n filterArgs,\n \"script\",\n filter.script,\n argIndex,\n );\n argIndex = this.addFilterCondition(\n filterParts,\n filterArgs,\n \"state\",\n filter.state,\n argIndex,\n );\n argIndex = this.addFilterCondition(\n filterParts,\n filterArgs,\n \"type\",\n filter.type,\n argIndex,\n );\n argIndex = this.addWatchCondition(filterParts, filterArgs, filter.watch, argIndex);\n\n if (filterParts.length > 0) {\n const query = filterParts.join(\" AND \");\n results = results.filtered(query, ...filterArgs);\n }\n }\n\n return [...results].map(contractObjectToDomain);\n }\n\n async saveContract(contract: Contract): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n this.realm.create(\n \"ArkContract\",\n {\n script: contract.script,\n address: contract.address,\n type: contract.type,\n state: contract.state,\n paramsJson: JSON.stringify(contract.params),\n createdAt: contract.createdAt,\n label: contract.label ?? null,\n metadataJson: contract.metadata ? JSON.stringify(contract.metadata) : null,\n watch: contract.watch ?? null,\n },\n \"modified\",\n );\n });\n }\n\n async deleteContract(script: string): Promise<void> {\n await this.ensureInit();\n this.realm.write(() => {\n const toDelete = this.realm.objects(\"ArkContract\").filtered(\"script == $0\", script);\n this.realm.delete(toDelete);\n });\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────\n\n private addFilterCondition(\n parts: string[],\n args: unknown[],\n column: string,\n value: string | string[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n if (Array.isArray(value)) {\n if (value.length === 0) return argIndex;\n const conditions = value.map((_, i) => {\n return `${column} == $${argIndex + i}`;\n });\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...value);\n return argIndex + value.length;\n } else {\n parts.push(`${column} == $${argIndex}`);\n args.push(value);\n return argIndex + 1;\n }\n }\n\n /**\n * Same as {@link addFilterCondition}, except a row predating the\n * property stores null and must match `\"watched\"`.\n */\n private addWatchCondition(\n parts: string[],\n args: unknown[],\n value: ContractWatchState | ContractWatchState[] | undefined,\n argIndex: number,\n ): number {\n if (value === undefined) return argIndex;\n\n const wanted = Array.isArray(value) ? value : [value];\n if (wanted.length === 0) return argIndex;\n\n const conditions = wanted.map((_, i) => `watch == $${argIndex + i}`);\n if (wanted.includes(\"watched\")) conditions.push(\"watch == null\");\n parts.push(`(${conditions.join(\" OR \")})`);\n args.push(...wanted);\n return argIndex + wanted.length;\n }\n}\n\n// ── Realm object → Domain converter ──────────────────────────────────────\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction contractObjectToDomain(obj: any): Contract {\n const contract: Contract = {\n script: obj.script,\n address: obj.address,\n type: obj.type,\n state: obj.state as ContractState,\n params: JSON.parse(obj.paramsJson),\n createdAt: obj.createdAt,\n };\n\n if (obj.label !== null && obj.label !== undefined) {\n contract.label = obj.label;\n }\n if (obj.metadataJson !== null && obj.metadataJson !== undefined) {\n contract.metadata = JSON.parse(obj.metadataJson);\n }\n if (obj.watch !== null && obj.watch !== undefined) {\n contract.watch = obj.watch as ContractWatchState;\n }\n\n return contract;\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ArkIntent,\n ArkIntentState,\n assertIntentIdUnique,\n IntentFilter,\n IntentRepository,\n intentMatchesFilter,\n intentPageBounds,\n isTerminalIntentState,\n} from \"../intentRepository\";\nimport { RealmLike } from \"./types\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toIntent(o: any): ArkIntent {\n return {\n intentTxId: o.intentTxId,\n intentId: o.intentId ?? undefined,\n state: o.state as ArkIntentState,\n validFrom: o.validFrom ?? undefined,\n validUntil: o.validUntil ?? undefined,\n createdAt: o.createdAt,\n updatedAt: o.updatedAt,\n registerProof: o.registerProof,\n registerProofMessage: o.registerProofMessage,\n deleteProof: o.deleteProof,\n deleteProofMessage: o.deleteProofMessage,\n batchId: o.batchId ?? undefined,\n commitmentTransactionId: o.commitmentTransactionId ?? undefined,\n cancellationReason: o.cancellationReason ?? undefined,\n partialForfeits: JSON.parse(o.partialForfeitsJson),\n signerDescriptor: o.signerDescriptor ?? undefined,\n intentVtxos: JSON.parse(o.intentVtxosJson),\n };\n}\n\nexport class RealmIntentRepository implements IntentRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkIntent\"));\n });\n }\n\n async saveIntent(intent: ArkIntent): Promise<void> {\n this.realm.write(() => {\n if (intent.intentId != null) {\n const clashes = [\n ...this.realm.objects(\"ArkIntent\").filtered(\"intentId == $0\", intent.intentId),\n ].map(toIntent);\n assertIntentIdUnique(intent, clashes);\n }\n this.realm.create(\n \"ArkIntent\",\n {\n intentTxId: intent.intentTxId,\n intentId: intent.intentId ?? null,\n state: intent.state,\n validFrom: intent.validFrom ?? null,\n validUntil: intent.validUntil ?? null,\n createdAt: intent.createdAt,\n updatedAt: Date.now(),\n registerProof: intent.registerProof,\n registerProofMessage: intent.registerProofMessage,\n deleteProof: intent.deleteProof,\n deleteProofMessage: intent.deleteProofMessage,\n batchId: intent.batchId ?? null,\n commitmentTransactionId: intent.commitmentTransactionId ?? null,\n cancellationReason: intent.cancellationReason ?? null,\n partialForfeitsJson: JSON.stringify(intent.partialForfeits),\n signerDescriptor: intent.signerDescriptor ?? null,\n intentVtxosJson: JSON.stringify(intent.intentVtxos),\n },\n \"modified\",\n );\n });\n }\n\n async getIntents(filter?: IntentFilter): Promise<ArkIntent[]> {\n const all = [...this.realm.objects(\"ArkIntent\")]\n .map(toIntent)\n .sort((a, b) => a.createdAt - b.createdAt || a.intentTxId.localeCompare(b.intentTxId));\n const out = filter ? all.filter((i) => intentMatchesFilter(i, filter)) : all;\n const { skip, end } = intentPageBounds(filter, out.length);\n return out.slice(skip, end);\n }\n\n async getLockedVtxoOutpoints(): Promise<Outpoint[]> {\n const out: Outpoint[] = [];\n for (const o of [...this.realm.objects(\"ArkIntent\")].map(toIntent))\n if (!isTerminalIntentState(o.state)) out.push(...o.intentVtxos);\n return out;\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","import { Outpoint } from \"../../wallet\";\nimport {\n ChainedTxType,\n mergeChainedTxType,\n VirtualTx,\n VirtualTxRepository,\n VtxoBranch,\n} from \"../virtualTxRepository\";\nimport { RealmLike } from \"./types\";\n\nconst vtxoKey = (o: Outpoint) => `${o.txid}:${o.vout}`;\nconst branchPk = (b: VtxoBranch) => `${b.vtxoTxid}:${b.vtxoVout}:${b.position}`;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction toTx(o: any): VirtualTx {\n return {\n txid: o.txid,\n psbt: o.psbt ?? null,\n expiresAt: o.expiresAt ?? null,\n type: (o.type ?? ChainedTxType.Unspecified) as ChainedTxType,\n };\n}\n\nexport class RealmVirtualTxRepository implements VirtualTxRepository {\n readonly version = 1 as const;\n constructor(private readonly realm: RealmLike) {}\n\n async clear(): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(this.realm.objects(\"ArkVirtualTx\"));\n this.realm.delete(this.realm.objects(\"ArkVtxoBranch\"));\n });\n }\n\n async upsertVirtualTxs(txs: VirtualTx[]): Promise<void> {\n this.realm.write(() => {\n for (const t of txs) {\n const prev = [\n ...this.realm.objects<VirtualTx>(\"ArkVirtualTx\").filtered(\"txid == $0\", t.txid),\n ].at(0);\n this.realm.create(\n \"ArkVirtualTx\",\n {\n txid: t.txid,\n psbt: t.psbt ?? prev?.psbt ?? null,\n expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,\n type: mergeChainedTxType(t.type, prev?.type),\n },\n \"modified\",\n );\n }\n });\n }\n\n async getVirtualTx(txid: string): Promise<VirtualTx | null> {\n const r = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", txid)];\n return r.length ? toTx(r[0]) : null;\n }\n\n async setBranch(vtxo: Outpoint, branch: VtxoBranch[]): Promise<void> {\n this.realm.write(() => {\n this.realm.delete(\n this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n );\n for (const b of branch)\n this.realm.create(\n \"ArkVtxoBranch\",\n {\n pk: branchPk(b),\n vtxoKey: `${b.vtxoTxid}:${b.vtxoVout}`,\n vtxoTxid: b.vtxoTxid,\n vtxoVout: b.vtxoVout,\n virtualTxid: b.virtualTxid,\n position: b.position,\n },\n \"modified\",\n );\n });\n }\n\n async getBranch(vtxo: Outpoint): Promise<VirtualTx[]> {\n const rows = [\n ...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo)),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ] as any[];\n rows.sort((a, b) => a.position - b.position);\n const out: VirtualTx[] = [];\n for (const b of rows) {\n const t = [...this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", b.virtualTxid)];\n if (t.length) out.push(toTx(t[0]));\n }\n return out;\n }\n\n async hasBranch(vtxo: Outpoint): Promise<boolean> {\n return (\n [...this.realm.objects(\"ArkVtxoBranch\").filtered(\"vtxoKey == $0\", vtxoKey(vtxo))]\n .length > 0\n );\n }\n\n async pruneForSpentVtxo(vtxo: Outpoint): Promise<void> {\n this.realm.write(() => {\n const branchRows = this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"vtxoKey == $0\", vtxoKey(vtxo));\n // Snapshot the referenced txids into plain strings BEFORE deleting.\n // Real Realm invalidates deleted objects, so reading `virtualTxid`\n // off them after `delete` throws (\"Accessing object which has been\n // invalidated\") — which would roll back the whole write() and make\n // prune a permanent no-op on React Native.\n const virtualTxids = [\n ...new Set(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [...branchRows].map((e: any) => e.virtualTxid as string),\n ),\n ];\n this.realm.delete(branchRows);\n for (const virtualTxid of virtualTxids) {\n const stillRef = [\n ...this.realm\n .objects(\"ArkVtxoBranch\")\n .filtered(\"virtualTxid == $0\", virtualTxid),\n ];\n if (stillRef.length === 0)\n this.realm.delete(\n this.realm.objects(\"ArkVirtualTx\").filtered(\"txid == $0\", virtualTxid),\n );\n }\n });\n }\n\n async [Symbol.asyncDispose](): Promise<void> {}\n}\n","/**\n * Realm object schemas for the Arkade wallet.\n *\n * All schema names are prefixed with \"Ark\" to avoid collisions with\n * other Realm schemas in the consuming application.\n *\n * Since `realm` is a peer dependency (not installed in this package),\n * schemas are defined as plain JS objects conforming to Realm's\n * ObjectSchema shape.\n */\n\nimport { scriptFromArkAddress } from \"../scriptFromAddress\";\nimport { legacyVtxoFacts } from \"../legacyVtxoFacts\";\n\nexport const ArkVtxoSchema = {\n name: \"ArkVtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n spentBy: \"string?\",\n settledBy: \"string?\",\n arkTxId: \"string?\",\n createdAt: \"string\", // ISO 8601\n isUnrolled: \"bool\",\n isSpent: \"bool?\",\n isSwept: \"bool?\",\n isPreconfirmed: \"bool?\",\n commitmentTxIdsJson: \"string?\",\n expiresAt: \"string?\", // ISO 8601\n expiresAtHeight: \"int?\",\n assetsJson: \"string?\",\n // scriptPubKey (hex) locking this VTXO, indexed so contract-scoped\n // queries can resolve ownership without touching address mapping.\n // Required as of schema v2; legacy rows are backfilled from `address`\n // during migration (see `runArkRealmMigrations`).\n script: { type: \"string\", indexed: true },\n },\n} as const;\n\nexport const ArkUtxoSchema = {\n name: \"ArkUtxo\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${txid}:${vout}`\n address: { type: \"string\", indexed: true },\n txid: \"string\",\n vout: \"int\",\n value: \"int\",\n tapTree: \"string\", // hex-encoded\n forfeitCb: \"string\",\n forfeitS: \"string\",\n intentCb: \"string\",\n intentS: \"string\",\n extraWitnessJson: \"string?\",\n statusJson: \"string\",\n },\n} as const;\n\nexport const ArkTransactionSchema = {\n name: \"ArkTransaction\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // composite: `${address}:${boardingTxid}:${commitmentTxid}:${arkTxid}`\n address: { type: \"string\", indexed: true },\n boardingTxid: \"string\",\n commitmentTxid: \"string\",\n arkTxid: \"string\",\n type: \"string\",\n amount: \"int\",\n settled: \"bool\",\n createdAt: \"int\",\n assetsJson: \"string?\",\n },\n} as const;\n\nexport const ArkWalletStateSchema = {\n name: \"ArkWalletState\",\n primaryKey: \"key\",\n properties: {\n key: \"string\",\n lastSyncTime: \"int?\",\n settingsJson: \"string?\",\n },\n} as const;\n\nexport const ArkContractSchema = {\n name: \"ArkContract\",\n primaryKey: \"script\",\n properties: {\n script: \"string\",\n address: \"string\",\n type: { type: \"string\", indexed: true },\n state: { type: \"string\", indexed: true },\n paramsJson: \"string\",\n createdAt: \"int\",\n expiresAt: \"int?\",\n label: \"string?\",\n metadataJson: \"string?\",\n watch: { type: \"string\", optional: true, indexed: true },\n },\n} as const;\n\nexport const ArkIntentSchema = {\n name: \"ArkIntent\",\n primaryKey: \"intentTxId\",\n properties: {\n intentTxId: \"string\",\n intentId: \"string?\",\n state: { type: \"string\", indexed: true },\n validFrom: \"int?\",\n validUntil: \"int?\",\n createdAt: \"int\",\n updatedAt: \"int\",\n registerProof: \"string\",\n registerProofMessage: \"string\",\n deleteProof: \"string\",\n deleteProofMessage: \"string\",\n batchId: \"string?\",\n commitmentTransactionId: \"string?\",\n cancellationReason: \"string?\",\n partialForfeitsJson: \"string\",\n signerDescriptor: \"string?\",\n intentVtxosJson: \"string\",\n },\n} as const;\n\nexport const ArkVirtualTxSchema = {\n name: \"ArkVirtualTx\",\n primaryKey: \"txid\",\n properties: {\n txid: \"string\",\n psbt: \"string?\",\n expiresAt: \"int?\",\n type: \"int\",\n },\n} as const;\n\nexport const ArkVtxoBranchSchema = {\n name: \"ArkVtxoBranch\",\n primaryKey: \"pk\",\n properties: {\n pk: \"string\", // `${vtxoTxid}:${vtxoVout}:${position}`\n vtxoKey: { type: \"string\", indexed: true }, // `${vtxoTxid}:${vtxoVout}`\n vtxoTxid: \"string\",\n vtxoVout: \"int\",\n virtualTxid: { type: \"string\", indexed: true },\n position: \"int\",\n },\n} as const;\n\n/**\n * All Realm schemas needed by the Arkade wallet repositories.\n * Pass this array to your Realm configuration's `schema` property.\n */\nexport const ArkRealmSchemas = [\n ArkVtxoSchema,\n ArkUtxoSchema,\n ArkTransactionSchema,\n ArkWalletStateSchema,\n ArkContractSchema,\n];\n\n/**\n * @experimental Schemas for the inert intent/virtualtx persistence layer.\n *\n * Deliberately kept OUT of {@link ArkRealmSchemas} and {@link\n * ARK_REALM_SCHEMA_VERSION} so upgrading the SDK never migrates an existing\n * consumer's Realm. A consumer opting in must register these schemas and bump\n * their own `schemaVersion` themselves:\n *\n * ```ts\n * schema: [...ArkRealmSchemas, ...ArkExperimentalRealmSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION + 1, yourSchemaVersion),\n * ```\n */\nexport const ArkExperimentalRealmSchemas = [\n ArkIntentSchema,\n ArkVirtualTxSchema,\n ArkVtxoBranchSchema,\n];\n\n/**\n * Current Realm schema version for the Arkade wallet.\n *\n * Consumers opening Realm must pass a `schemaVersion` at least this high so\n * legacy databases get migrated; merge it with your own app's version:\n *\n * ```ts\n * await Realm.open({\n * schema: [...ArkRealmSchemas, ...yourSchemas],\n * schemaVersion: Math.max(ARK_REALM_SCHEMA_VERSION, yourSchemaVersion),\n * onMigration: (oldRealm, newRealm) => {\n * runArkRealmMigrations(oldRealm, newRealm);\n * // your own migrations\n * },\n * });\n * ```\n *\n * History:\n * - v1: initial ArkVtxo/ArkUtxo/... schemas, `script` nullable.\n * - v2: ArkVtxo.script becomes required; NULL values are backfilled from\n * the owning Ark address during migration.\n * - v3: ArkContract.watch added (nullable). No data migration: a row\n * without one reads as `watched`, which is the coverage every\n * existing contract has today.\n * - v4: ArkVtxo.virtualStatusJson removed.\n * - v5: ArkVtxo stores the canonical VTXO facts that blob used to project —\n * `isSwept`, `isPreconfirmed`, `commitmentTxIdsJson`, `expiresAt`,\n * `expiresAtHeight` — backfilled from it during migration.\n *\n * The intent/virtualtx schemas ({@link ArkExperimentalRealmSchemas}) are NOT\n * counted here: they are experimental and inert, so they never move the\n * advertised version on their own. `runArkRealmMigrations` still carries the\n * intent-schema migration steps (guarded per-schema) for consumers who opt in\n * and bump their own version.\n */\nexport const ARK_REALM_SCHEMA_VERSION = 5;\n\n/**\n * Run every Arkade schema migration applicable to the open Realm.\n *\n * Designed to be composed with the consumer's own migrations inside a single\n * `onMigration` callback. Each migration step does a per-row check so it\n * remains idempotent and independent of the app's global `schemaVersion` —\n * a consumer whose app is already at version 10 can still trigger the\n * Arkade v1→v2 script backfill when the row has never been populated.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function runArkRealmMigrations(oldRealm: any, newRealm: any): void {\n // v4 → v5: the canonical facts used to live inside `virtualStatusJson`, which v4 drops. Realm\n // deletes a removed property from the new realm, so the old one is the only place left to read\n // it from — and without the copy a swept row comes back `isSwept: false`, spendable, until the\n // first indexer sync. Keyed by `pk` rather than by position: the two collections are parallel\n // in practice, but a mismatch here would write one row's state onto another's.\n const legacyByPk = new Map<string, unknown>();\n const oldVtxos = oldRealm?.objects?.(\"ArkVtxo\") ?? [];\n for (let i = 0; i < oldVtxos.length; i++) {\n const raw = oldVtxos[i].virtualStatusJson;\n if (raw) legacyByPk.set(oldVtxos[i].pk, raw);\n }\n\n const newVtxos = newRealm.objects(\"ArkVtxo\");\n for (let i = 0; i < newVtxos.length; i++) {\n const newVtxo = newVtxos[i];\n if (!newVtxo.script) {\n newVtxo.script = scriptFromArkAddress(newVtxo.address);\n }\n\n const facts = legacyVtxoFacts(legacyByPk.get(newVtxo.pk));\n // Only fill blanks: a row the new code has already written carries the authoritative value,\n // and the legacy projection is the lossier of the two.\n if (facts) {\n if (newVtxo.isSpent == null) newVtxo.isSpent = facts.isSpent;\n if (newVtxo.isSwept == null) newVtxo.isSwept = facts.isSwept;\n if (newVtxo.isPreconfirmed == null) newVtxo.isPreconfirmed = facts.isPreconfirmed;\n if (newVtxo.commitmentTxIdsJson == null && facts.commitmentTxIds) {\n newVtxo.commitmentTxIdsJson = JSON.stringify(facts.commitmentTxIds);\n }\n if (newVtxo.expiresAt == null && facts.expiresAt) {\n newVtxo.expiresAt = facts.expiresAt.toISOString();\n }\n if (newVtxo.expiresAtHeight == null && facts.expiresAtHeight !== undefined) {\n newVtxo.expiresAtHeight = facts.expiresAtHeight;\n }\n }\n }\n\n // ArkVirtualTx.hex was renamed to psbt (both hold the same serialized tx\n // payload). A rename is drop-old + add-new, so the value would be lost\n // unless we copy it across. The step is versioned by the consumer's own\n // counter, not by ARK_REALM_SCHEMA_VERSION: these schemas are opt-in and\n // never move it. Guard on the old schema actually defining ArkVirtualTx —\n // a realm that never opted in doesn't have it, and reading objects of an\n // unknown type throws.\n const oldHasVirtualTx =\n Array.isArray(oldRealm?.schema) &&\n oldRealm.schema.some((s: { name: string }) => s.name === \"ArkVirtualTx\");\n if (oldHasVirtualTx) {\n const oldTxs = oldRealm.objects(\"ArkVirtualTx\");\n const newTxs = newRealm.objects(\"ArkVirtualTx\");\n for (let i = 0; i < newTxs.length; i++) {\n if (newTxs[i].psbt == null && oldTxs[i].hex != null) {\n newTxs[i].psbt = oldTxs[i].hex;\n }\n }\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { W as WalletRepository, B as ExtendedVirtualCoin, D as VtxoRepositoryKey, E as ExtendedCoin, g as ArkTransaction, F as WalletState, C as ContractRepository, H as ContractFilter, z as Contract, J as IntentRepository, K as ArkIntent, L as IntentFilter, O as Outpoint, M as VirtualTxRepository, P as VirtualTx, Q as VtxoBranch } from '../../index-DUxufw76.cjs';
2
- export { U as ChainedTxType } from '../../index-DUxufw76.cjs';
1
+ import { W as WalletRepository, z as ExtendedVirtualCoin, B as VtxoRepositoryKey, E as ExtendedCoin, g as ArkTransaction, D as WalletState, C as ContractRepository, F as ContractFilter, y as Contract, H as IntentRepository, J as ArkIntent, K as IntentFilter, O as Outpoint, L as VirtualTxRepository, M as VirtualTx, P as VtxoBranch } from '../../index-Czz9HSqE.cjs';
2
+ export { Q as ChainedTxType } from '../../index-Czz9HSqE.cjs';
3
3
  import '@scure/btc-signer/utils.js';
4
4
  import '@scure/btc-signer/transaction.js';
5
5
  import '@scure/btc-signer';
@@ -131,13 +131,17 @@ declare const ArkRealmSchemas: ({
131
131
  readonly intentS: "string";
132
132
  readonly extraWitnessJson: "string?";
133
133
  readonly statusJson: "string";
134
- readonly virtualStatusJson: "string";
135
134
  readonly spentBy: "string?";
136
135
  readonly settledBy: "string?";
137
136
  readonly arkTxId: "string?";
138
137
  readonly createdAt: "string";
139
138
  readonly isUnrolled: "bool";
140
139
  readonly isSpent: "bool?";
140
+ readonly isSwept: "bool?";
141
+ readonly isPreconfirmed: "bool?";
142
+ readonly commitmentTxIdsJson: "string?";
143
+ readonly expiresAt: "string?";
144
+ readonly expiresAtHeight: "int?";
141
145
  readonly assetsJson: "string?";
142
146
  readonly script: {
143
147
  readonly type: "string";
@@ -305,6 +309,10 @@ declare const ArkExperimentalRealmSchemas: ({
305
309
  * - v3: ArkContract.watch added (nullable). No data migration: a row
306
310
  * without one reads as `watched`, which is the coverage every
307
311
  * existing contract has today.
312
+ * - v4: ArkVtxo.virtualStatusJson removed.
313
+ * - v5: ArkVtxo stores the canonical VTXO facts that blob used to project —
314
+ * `isSwept`, `isPreconfirmed`, `commitmentTxIdsJson`, `expiresAt`,
315
+ * `expiresAtHeight` — backfilled from it during migration.
308
316
  *
309
317
  * The intent/virtualtx schemas ({@link ArkExperimentalRealmSchemas}) are NOT
310
318
  * counted here: they are experimental and inert, so they never move the
@@ -312,7 +320,7 @@ declare const ArkExperimentalRealmSchemas: ({
312
320
  * intent-schema migration steps (guarded per-schema) for consumers who opt in
313
321
  * and bump their own version.
314
322
  */
315
- declare const ARK_REALM_SCHEMA_VERSION = 3;
323
+ declare const ARK_REALM_SCHEMA_VERSION = 5;
316
324
  /**
317
325
  * Run every Arkade schema migration applicable to the open Realm.
318
326
  *