@arkade-os/sdk 0.4.41 → 0.4.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/expo.cjs +4 -4
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +2 -2
- package/dist/adapters/indexedDB.cjs +3 -3
- package/dist/adapters/indexedDB.js +2 -2
- package/dist/{ark-CSqMJczW.d.cts → ark-I8jfe5VE.d.cts} +157 -2
- package/dist/{ark-CSqMJczW.d.ts → ark-I8jfe5VE.d.ts} +157 -2
- package/dist/{asyncStorageTaskQueue-SZPrhw23.d.ts → asyncStorageTaskQueue-CjoL-35w.d.ts} +1 -1
- package/dist/{asyncStorageTaskQueue-79XdGsdW.d.cts → asyncStorageTaskQueue-D1FfHfgK.d.cts} +1 -1
- package/dist/{chunk-ALISWEQ5.cjs → chunk-3AQNLQPM.cjs} +39 -4
- package/dist/chunk-3AQNLQPM.cjs.map +1 -0
- package/dist/{chunk-5XAYUPK4.js → chunk-763XHDAJ.js} +39 -5
- package/dist/chunk-763XHDAJ.js.map +1 -0
- package/dist/{chunk-D5MQYYYF.js → chunk-B4R36PRN.js} +1106 -357
- package/dist/chunk-B4R36PRN.js.map +1 -0
- package/dist/{chunk-KNASU3QI.cjs → chunk-JIWCE2IK.cjs} +7 -7
- package/dist/{chunk-KNASU3QI.cjs.map → chunk-JIWCE2IK.cjs.map} +1 -1
- package/dist/{chunk-WBF3FNS3.cjs → chunk-PLJZRIFZ.cjs} +11 -11
- package/dist/{chunk-WBF3FNS3.cjs.map → chunk-PLJZRIFZ.cjs.map} +1 -1
- package/dist/{chunk-3MPXMLP4.cjs → chunk-QGNTDGMN.cjs} +1190 -430
- package/dist/chunk-QGNTDGMN.cjs.map +1 -0
- package/dist/{chunk-MYI333YH.js → chunk-US274KZO.js} +3 -3
- package/dist/{chunk-MYI333YH.js.map → chunk-US274KZO.js.map} +1 -1
- package/dist/{chunk-DDG4RE5F.js → chunk-VKKLOT2E.js} +3 -3
- package/dist/{chunk-DDG4RE5F.js.map → chunk-VKKLOT2E.js.map} +1 -1
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/{delegate-Bqwe-kbj.d.cts → delegate-BRqbh2fW.d.cts} +1 -1
- package/dist/{delegate-BTn9BK8E.d.ts → delegate-CgjVjYOP.d.ts} +1 -1
- package/dist/{index-aYiHTMkX.d.cts → index-DHuXlDEg.d.cts} +2 -2
- package/dist/{index-kITujXlS.d.ts → index-DvWNB_rl.d.ts} +2 -2
- package/dist/index.cjs +150 -118
- package/dist/index.d.cts +113 -9
- package/dist/index.d.ts +113 -9
- package/dist/index.js +2 -2
- package/dist/repositories/realm/index.cjs +268 -12
- package/dist/repositories/realm/index.cjs.map +1 -1
- package/dist/repositories/realm/index.d.cts +101 -3
- package/dist/repositories/realm/index.d.ts +101 -3
- package/dist/repositories/realm/index.js +254 -4
- package/dist/repositories/realm/index.js.map +1 -1
- package/dist/repositories/sqlite/index.cjs +366 -40
- package/dist/repositories/sqlite/index.cjs.map +1 -1
- package/dist/repositories/sqlite/index.d.cts +52 -6
- package/dist/repositories/sqlite/index.d.ts +52 -6
- package/dist/repositories/sqlite/index.js +353 -32
- package/dist/repositories/sqlite/index.js.map +1 -1
- package/dist/{taskRunner-DRHElPMG.d.cts → taskRunner-BSnslNmq.d.cts} +1 -1
- package/dist/{taskRunner-BuBAZQwB.d.ts → taskRunner-Djlhfgi1.d.ts} +1 -1
- package/dist/wallet/expo/background.cjs +12 -12
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +4 -4
- package/dist/wallet/expo/index.cjs +12 -12
- package/dist/wallet/expo/index.d.cts +4 -4
- package/dist/wallet/expo/index.d.ts +4 -4
- package/dist/wallet/expo/index.js +3 -3
- package/dist/{wallet-CTEQpKG9.d.ts → wallet-BsqRU8KM.d.cts} +29 -5
- package/dist/{wallet-BZgRfnAE.d.cts → wallet-D9z7wssl.d.ts} +29 -5
- package/dist/worker/expo/index.cjs +7 -7
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +3 -3
- package/package.json +2 -2
- package/dist/chunk-3MPXMLP4.cjs.map +0 -1
- package/dist/chunk-5XAYUPK4.js.map +0 -1
- package/dist/chunk-ALISWEQ5.cjs.map +0 -1
- package/dist/chunk-D5MQYYYF.js.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../../chunk-
|
|
3
|
+
var chunkQGNTDGMN_cjs = require('../../chunk-QGNTDGMN.cjs');
|
|
4
|
+
require('../../chunk-3AQNLQPM.cjs');
|
|
5
5
|
require('../../chunk-32YKLQPS.cjs');
|
|
6
6
|
require('../../chunk-HXDZ2QTW.cjs');
|
|
7
7
|
require('../../chunk-5BLDMQED.cjs');
|
|
@@ -37,7 +37,7 @@ var RealmWalletRepository = class {
|
|
|
37
37
|
await this.ensureInit();
|
|
38
38
|
this.realm.write(() => {
|
|
39
39
|
for (const vtxo of vtxos) {
|
|
40
|
-
const s =
|
|
40
|
+
const s = chunkQGNTDGMN_cjs.serializeVtxo(vtxo);
|
|
41
41
|
this.realm.create(
|
|
42
42
|
"ArkVtxo",
|
|
43
43
|
{
|
|
@@ -85,7 +85,7 @@ var RealmWalletRepository = class {
|
|
|
85
85
|
throw new Error("RealmWalletRepository requires an address");
|
|
86
86
|
}
|
|
87
87
|
for (const vtxo of vtxos) {
|
|
88
|
-
if (!
|
|
88
|
+
if (!chunkQGNTDGMN_cjs.isVtxoForScript(vtxo, key.script)) {
|
|
89
89
|
throw new Error(
|
|
90
90
|
`VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`
|
|
91
91
|
);
|
|
@@ -110,7 +110,7 @@ var RealmWalletRepository = class {
|
|
|
110
110
|
await this.ensureInit();
|
|
111
111
|
this.realm.write(() => {
|
|
112
112
|
for (const utxo of utxos) {
|
|
113
|
-
const s =
|
|
113
|
+
const s = chunkQGNTDGMN_cjs.serializeUtxo(utxo);
|
|
114
114
|
this.realm.create(
|
|
115
115
|
"ArkUtxo",
|
|
116
116
|
{
|
|
@@ -163,7 +163,7 @@ var RealmWalletRepository = class {
|
|
|
163
163
|
amount: tx.amount,
|
|
164
164
|
settled: tx.settled,
|
|
165
165
|
createdAt: tx.createdAt,
|
|
166
|
-
assetsJson: tx.assets ? JSON.stringify(
|
|
166
|
+
assetsJson: tx.assets ? JSON.stringify(chunkQGNTDGMN_cjs.serializeAssets(tx.assets)) : null
|
|
167
167
|
},
|
|
168
168
|
"modified"
|
|
169
169
|
);
|
|
@@ -233,9 +233,9 @@ function vtxoObjectToDomain(obj) {
|
|
|
233
233
|
// Post-migration every row has `script`, but the backfill is
|
|
234
234
|
// idempotent: derive from `address` if the legacy column is still
|
|
235
235
|
// null (e.g. the migration hasn't run yet on this handle).
|
|
236
|
-
script: obj.script ??
|
|
236
|
+
script: obj.script ?? chunkQGNTDGMN_cjs.scriptFromArkAddress(obj.address)
|
|
237
237
|
};
|
|
238
|
-
return
|
|
238
|
+
return chunkQGNTDGMN_cjs.deserializeVtxo(serialized);
|
|
239
239
|
}
|
|
240
240
|
function utxoObjectToDomain(obj) {
|
|
241
241
|
const serialized = {
|
|
@@ -254,7 +254,7 @@ function utxoObjectToDomain(obj) {
|
|
|
254
254
|
status: JSON.parse(obj.statusJson),
|
|
255
255
|
extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : void 0
|
|
256
256
|
};
|
|
257
|
-
return
|
|
257
|
+
return chunkQGNTDGMN_cjs.deserializeUtxo(serialized);
|
|
258
258
|
}
|
|
259
259
|
function txObjectToDomain(obj) {
|
|
260
260
|
const tx = {
|
|
@@ -269,7 +269,7 @@ function txObjectToDomain(obj) {
|
|
|
269
269
|
createdAt: obj.createdAt
|
|
270
270
|
};
|
|
271
271
|
if (obj.assetsJson) {
|
|
272
|
-
tx.assets =
|
|
272
|
+
tx.assets = chunkQGNTDGMN_cjs.deserializeAssets(JSON.parse(obj.assetsJson));
|
|
273
273
|
}
|
|
274
274
|
return tx;
|
|
275
275
|
}
|
|
@@ -390,6 +390,193 @@ function contractObjectToDomain(obj) {
|
|
|
390
390
|
return contract;
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
+
// src/repositories/realm/intentRepository.ts
|
|
394
|
+
function toIntent(o) {
|
|
395
|
+
return {
|
|
396
|
+
intentTxId: o.intentTxId,
|
|
397
|
+
intentId: o.intentId ?? void 0,
|
|
398
|
+
state: o.state,
|
|
399
|
+
validFrom: o.validFrom ?? void 0,
|
|
400
|
+
validUntil: o.validUntil ?? void 0,
|
|
401
|
+
createdAt: o.createdAt,
|
|
402
|
+
updatedAt: o.updatedAt,
|
|
403
|
+
registerProof: o.registerProof,
|
|
404
|
+
registerProofMessage: o.registerProofMessage,
|
|
405
|
+
deleteProof: o.deleteProof,
|
|
406
|
+
deleteProofMessage: o.deleteProofMessage,
|
|
407
|
+
batchId: o.batchId ?? void 0,
|
|
408
|
+
commitmentTransactionId: o.commitmentTransactionId ?? void 0,
|
|
409
|
+
cancellationReason: o.cancellationReason ?? void 0,
|
|
410
|
+
partialForfeits: JSON.parse(o.partialForfeitsJson),
|
|
411
|
+
signerDescriptor: o.signerDescriptor ?? void 0,
|
|
412
|
+
intentVtxos: JSON.parse(o.intentVtxosJson)
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
var RealmIntentRepository = class {
|
|
416
|
+
constructor(realm) {
|
|
417
|
+
this.realm = realm;
|
|
418
|
+
}
|
|
419
|
+
version = 1;
|
|
420
|
+
async clear() {
|
|
421
|
+
this.realm.write(() => {
|
|
422
|
+
this.realm.delete(this.realm.objects("ArkIntent"));
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
async saveIntent(intent) {
|
|
426
|
+
this.realm.write(() => {
|
|
427
|
+
if (intent.intentId != null) {
|
|
428
|
+
const clashes = [
|
|
429
|
+
...this.realm.objects("ArkIntent").filtered("intentId == $0", intent.intentId)
|
|
430
|
+
].map(toIntent);
|
|
431
|
+
chunkQGNTDGMN_cjs.assertIntentIdUnique(intent, clashes);
|
|
432
|
+
}
|
|
433
|
+
this.realm.create(
|
|
434
|
+
"ArkIntent",
|
|
435
|
+
{
|
|
436
|
+
intentTxId: intent.intentTxId,
|
|
437
|
+
intentId: intent.intentId ?? null,
|
|
438
|
+
state: intent.state,
|
|
439
|
+
validFrom: intent.validFrom ?? null,
|
|
440
|
+
validUntil: intent.validUntil ?? null,
|
|
441
|
+
createdAt: intent.createdAt,
|
|
442
|
+
updatedAt: Date.now(),
|
|
443
|
+
registerProof: intent.registerProof,
|
|
444
|
+
registerProofMessage: intent.registerProofMessage,
|
|
445
|
+
deleteProof: intent.deleteProof,
|
|
446
|
+
deleteProofMessage: intent.deleteProofMessage,
|
|
447
|
+
batchId: intent.batchId ?? null,
|
|
448
|
+
commitmentTransactionId: intent.commitmentTransactionId ?? null,
|
|
449
|
+
cancellationReason: intent.cancellationReason ?? null,
|
|
450
|
+
partialForfeitsJson: JSON.stringify(intent.partialForfeits),
|
|
451
|
+
signerDescriptor: intent.signerDescriptor ?? null,
|
|
452
|
+
intentVtxosJson: JSON.stringify(intent.intentVtxos)
|
|
453
|
+
},
|
|
454
|
+
"modified"
|
|
455
|
+
);
|
|
456
|
+
});
|
|
457
|
+
}
|
|
458
|
+
async getIntents(filter) {
|
|
459
|
+
const all = [...this.realm.objects("ArkIntent")].map(toIntent).sort((a, b) => a.createdAt - b.createdAt || a.intentTxId.localeCompare(b.intentTxId));
|
|
460
|
+
const out = filter ? all.filter((i) => chunkQGNTDGMN_cjs.intentMatchesFilter(i, filter)) : all;
|
|
461
|
+
const { skip, end } = chunkQGNTDGMN_cjs.intentPageBounds(filter, out.length);
|
|
462
|
+
return out.slice(skip, end);
|
|
463
|
+
}
|
|
464
|
+
async getLockedVtxoOutpoints() {
|
|
465
|
+
const out = [];
|
|
466
|
+
for (const o of [...this.realm.objects("ArkIntent")].map(toIntent))
|
|
467
|
+
if (!chunkQGNTDGMN_cjs.isTerminalIntentState(o.state)) out.push(...o.intentVtxos);
|
|
468
|
+
return out;
|
|
469
|
+
}
|
|
470
|
+
async [Symbol.asyncDispose]() {
|
|
471
|
+
}
|
|
472
|
+
};
|
|
473
|
+
|
|
474
|
+
// src/repositories/realm/virtualTxRepository.ts
|
|
475
|
+
var vtxoKey = (o) => `${o.txid}:${o.vout}`;
|
|
476
|
+
var branchPk = (b) => `${b.vtxoTxid}:${b.vtxoVout}:${b.position}`;
|
|
477
|
+
function toTx(o) {
|
|
478
|
+
return {
|
|
479
|
+
txid: o.txid,
|
|
480
|
+
psbt: o.psbt ?? null,
|
|
481
|
+
expiresAt: o.expiresAt ?? null,
|
|
482
|
+
type: o.type ?? 0 /* Unspecified */
|
|
483
|
+
};
|
|
484
|
+
}
|
|
485
|
+
var RealmVirtualTxRepository = class {
|
|
486
|
+
constructor(realm) {
|
|
487
|
+
this.realm = realm;
|
|
488
|
+
}
|
|
489
|
+
version = 1;
|
|
490
|
+
async clear() {
|
|
491
|
+
this.realm.write(() => {
|
|
492
|
+
this.realm.delete(this.realm.objects("ArkVirtualTx"));
|
|
493
|
+
this.realm.delete(this.realm.objects("ArkVtxoBranch"));
|
|
494
|
+
});
|
|
495
|
+
}
|
|
496
|
+
async upsertVirtualTxs(txs) {
|
|
497
|
+
this.realm.write(() => {
|
|
498
|
+
for (const t of txs) {
|
|
499
|
+
const prev = [
|
|
500
|
+
...this.realm.objects("ArkVirtualTx").filtered("txid == $0", t.txid)
|
|
501
|
+
].at(0);
|
|
502
|
+
this.realm.create(
|
|
503
|
+
"ArkVirtualTx",
|
|
504
|
+
{
|
|
505
|
+
txid: t.txid,
|
|
506
|
+
psbt: t.psbt ?? prev?.psbt ?? null,
|
|
507
|
+
expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,
|
|
508
|
+
type: chunkQGNTDGMN_cjs.mergeChainedTxType(t.type, prev?.type)
|
|
509
|
+
},
|
|
510
|
+
"modified"
|
|
511
|
+
);
|
|
512
|
+
}
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
async getVirtualTx(txid) {
|
|
516
|
+
const r = [...this.realm.objects("ArkVirtualTx").filtered("txid == $0", txid)];
|
|
517
|
+
return r.length ? toTx(r[0]) : null;
|
|
518
|
+
}
|
|
519
|
+
async setBranch(vtxo, branch) {
|
|
520
|
+
this.realm.write(() => {
|
|
521
|
+
this.realm.delete(
|
|
522
|
+
this.realm.objects("ArkVtxoBranch").filtered("vtxoKey == $0", vtxoKey(vtxo))
|
|
523
|
+
);
|
|
524
|
+
for (const b of branch)
|
|
525
|
+
this.realm.create(
|
|
526
|
+
"ArkVtxoBranch",
|
|
527
|
+
{
|
|
528
|
+
pk: branchPk(b),
|
|
529
|
+
vtxoKey: `${b.vtxoTxid}:${b.vtxoVout}`,
|
|
530
|
+
vtxoTxid: b.vtxoTxid,
|
|
531
|
+
vtxoVout: b.vtxoVout,
|
|
532
|
+
virtualTxid: b.virtualTxid,
|
|
533
|
+
position: b.position
|
|
534
|
+
},
|
|
535
|
+
"modified"
|
|
536
|
+
);
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
async getBranch(vtxo) {
|
|
540
|
+
const rows = [
|
|
541
|
+
...this.realm.objects("ArkVtxoBranch").filtered("vtxoKey == $0", vtxoKey(vtxo))
|
|
542
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
543
|
+
];
|
|
544
|
+
rows.sort((a, b) => a.position - b.position);
|
|
545
|
+
const out = [];
|
|
546
|
+
for (const b of rows) {
|
|
547
|
+
const t = [...this.realm.objects("ArkVirtualTx").filtered("txid == $0", b.virtualTxid)];
|
|
548
|
+
if (t.length) out.push(toTx(t[0]));
|
|
549
|
+
}
|
|
550
|
+
return out;
|
|
551
|
+
}
|
|
552
|
+
async hasBranch(vtxo) {
|
|
553
|
+
return [...this.realm.objects("ArkVtxoBranch").filtered("vtxoKey == $0", vtxoKey(vtxo))].length > 0;
|
|
554
|
+
}
|
|
555
|
+
async pruneForSpentVtxo(vtxo) {
|
|
556
|
+
this.realm.write(() => {
|
|
557
|
+
const branchRows = this.realm.objects("ArkVtxoBranch").filtered("vtxoKey == $0", vtxoKey(vtxo));
|
|
558
|
+
const virtualTxids = [
|
|
559
|
+
...new Set(
|
|
560
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
561
|
+
[...branchRows].map((e) => e.virtualTxid)
|
|
562
|
+
)
|
|
563
|
+
];
|
|
564
|
+
this.realm.delete(branchRows);
|
|
565
|
+
for (const virtualTxid of virtualTxids) {
|
|
566
|
+
const stillRef = [
|
|
567
|
+
...this.realm.objects("ArkVtxoBranch").filtered("virtualTxid == $0", virtualTxid)
|
|
568
|
+
];
|
|
569
|
+
if (stillRef.length === 0)
|
|
570
|
+
this.realm.delete(
|
|
571
|
+
this.realm.objects("ArkVirtualTx").filtered("txid == $0", virtualTxid)
|
|
572
|
+
);
|
|
573
|
+
}
|
|
574
|
+
});
|
|
575
|
+
}
|
|
576
|
+
async [Symbol.asyncDispose]() {
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
|
|
393
580
|
// src/repositories/realm/schemas.ts
|
|
394
581
|
var ArkVtxoSchema = {
|
|
395
582
|
name: "ArkVtxo",
|
|
@@ -486,6 +673,53 @@ var ArkContractSchema = {
|
|
|
486
673
|
metadataJson: "string?"
|
|
487
674
|
}
|
|
488
675
|
};
|
|
676
|
+
var ArkIntentSchema = {
|
|
677
|
+
name: "ArkIntent",
|
|
678
|
+
primaryKey: "intentTxId",
|
|
679
|
+
properties: {
|
|
680
|
+
intentTxId: "string",
|
|
681
|
+
intentId: "string?",
|
|
682
|
+
state: { type: "string", indexed: true },
|
|
683
|
+
validFrom: "int?",
|
|
684
|
+
validUntil: "int?",
|
|
685
|
+
createdAt: "int",
|
|
686
|
+
updatedAt: "int",
|
|
687
|
+
registerProof: "string",
|
|
688
|
+
registerProofMessage: "string",
|
|
689
|
+
deleteProof: "string",
|
|
690
|
+
deleteProofMessage: "string",
|
|
691
|
+
batchId: "string?",
|
|
692
|
+
commitmentTransactionId: "string?",
|
|
693
|
+
cancellationReason: "string?",
|
|
694
|
+
partialForfeitsJson: "string",
|
|
695
|
+
signerDescriptor: "string?",
|
|
696
|
+
intentVtxosJson: "string"
|
|
697
|
+
}
|
|
698
|
+
};
|
|
699
|
+
var ArkVirtualTxSchema = {
|
|
700
|
+
name: "ArkVirtualTx",
|
|
701
|
+
primaryKey: "txid",
|
|
702
|
+
properties: {
|
|
703
|
+
txid: "string",
|
|
704
|
+
psbt: "string?",
|
|
705
|
+
expiresAt: "int?",
|
|
706
|
+
type: "int"
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
var ArkVtxoBranchSchema = {
|
|
710
|
+
name: "ArkVtxoBranch",
|
|
711
|
+
primaryKey: "pk",
|
|
712
|
+
properties: {
|
|
713
|
+
pk: "string",
|
|
714
|
+
// `${vtxoTxid}:${vtxoVout}:${position}`
|
|
715
|
+
vtxoKey: { type: "string", indexed: true },
|
|
716
|
+
// `${vtxoTxid}:${vtxoVout}`
|
|
717
|
+
vtxoTxid: "string",
|
|
718
|
+
vtxoVout: "int",
|
|
719
|
+
virtualTxid: { type: "string", indexed: true },
|
|
720
|
+
position: "int"
|
|
721
|
+
}
|
|
722
|
+
};
|
|
489
723
|
var ArkRealmSchemas = [
|
|
490
724
|
ArkVtxoSchema,
|
|
491
725
|
ArkUtxoSchema,
|
|
@@ -493,20 +727,42 @@ var ArkRealmSchemas = [
|
|
|
493
727
|
ArkWalletStateSchema,
|
|
494
728
|
ArkContractSchema
|
|
495
729
|
];
|
|
730
|
+
var ArkExperimentalRealmSchemas = [
|
|
731
|
+
ArkIntentSchema,
|
|
732
|
+
ArkVirtualTxSchema,
|
|
733
|
+
ArkVtxoBranchSchema
|
|
734
|
+
];
|
|
496
735
|
var ARK_REALM_SCHEMA_VERSION = 2;
|
|
497
|
-
function runArkRealmMigrations(
|
|
736
|
+
function runArkRealmMigrations(oldRealm, newRealm) {
|
|
498
737
|
const newVtxos = newRealm.objects("ArkVtxo");
|
|
499
738
|
for (let i = 0; i < newVtxos.length; i++) {
|
|
500
739
|
const newVtxo = newVtxos[i];
|
|
501
740
|
if (!newVtxo.script) {
|
|
502
|
-
newVtxo.script =
|
|
741
|
+
newVtxo.script = chunkQGNTDGMN_cjs.scriptFromArkAddress(newVtxo.address);
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
const oldHasVirtualTx = Array.isArray(oldRealm?.schema) && oldRealm.schema.some((s) => s.name === "ArkVirtualTx");
|
|
745
|
+
if (oldHasVirtualTx) {
|
|
746
|
+
const oldTxs = oldRealm.objects("ArkVirtualTx");
|
|
747
|
+
const newTxs = newRealm.objects("ArkVirtualTx");
|
|
748
|
+
for (let i = 0; i < newTxs.length; i++) {
|
|
749
|
+
if (newTxs[i].psbt == null && oldTxs[i].hex != null) {
|
|
750
|
+
newTxs[i].psbt = oldTxs[i].hex;
|
|
751
|
+
}
|
|
503
752
|
}
|
|
504
753
|
}
|
|
505
754
|
}
|
|
506
755
|
|
|
756
|
+
Object.defineProperty(exports, "ChainedTxType", {
|
|
757
|
+
enumerable: true,
|
|
758
|
+
get: function () { return chunkQGNTDGMN_cjs.ChainedTxType; }
|
|
759
|
+
});
|
|
507
760
|
exports.ARK_REALM_SCHEMA_VERSION = ARK_REALM_SCHEMA_VERSION;
|
|
761
|
+
exports.ArkExperimentalRealmSchemas = ArkExperimentalRealmSchemas;
|
|
508
762
|
exports.ArkRealmSchemas = ArkRealmSchemas;
|
|
509
763
|
exports.RealmContractRepository = RealmContractRepository;
|
|
764
|
+
exports.RealmIntentRepository = RealmIntentRepository;
|
|
765
|
+
exports.RealmVirtualTxRepository = RealmVirtualTxRepository;
|
|
510
766
|
exports.RealmWalletRepository = RealmWalletRepository;
|
|
511
767
|
exports.runArkRealmMigrations = runArkRealmMigrations;
|
|
512
768
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/repositories/realm/walletRepository.ts","../../../src/repositories/realm/contractRepository.ts","../../../src/repositories/realm/schemas.ts"],"names":["serializeVtxo","isVtxoForScript","serializeUtxo","serializeAssets","scriptFromArkAddress","deserializeVtxo","deserializeUtxo","deserializeAssets"],"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 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 } 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 = 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(\"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\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 },\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// ── 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\n return contract;\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 },\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 * 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 */\nexport const ARK_REALM_SCHEMA_VERSION = 2;\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"]}
|
|
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":"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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 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 } 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 = 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(\"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\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 },\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// ── 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\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 },\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 *\n * The intent/virtualtx schemas ({@link ArkExperimentalRealmSchemas}) are NOT\n * counted here: they are experimental and inert, so the advertised version\n * stays at v2 and upgrading the SDK never triggers a Realm migration for a\n * consumer using the default {@link ArkRealmSchemas} set. `runArkRealmMigrations`\n * still carries the intent-schema migration steps (guarded per-schema) for\n * consumers who opt in and bump their own version.\n */\nexport const ARK_REALM_SCHEMA_VERSION = 2;\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"]}
|