@arkade-os/sdk 0.4.61 → 0.4.62
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 +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{asyncStorageTaskQueue-BWDxp3Dr.d.cts → asyncStorageTaskQueue-B53mOTCw.d.cts} +1 -1
- package/dist/{asyncStorageTaskQueue-Cq9FpKv6.d.ts → asyncStorageTaskQueue-Df-CTfTE.d.ts} +1 -1
- package/dist/{chunk-AUEXB42T.js → chunk-2IZW6AEK.js} +247 -84
- package/dist/chunk-2IZW6AEK.js.map +1 -0
- package/dist/{chunk-SF5NKAUA.cjs → chunk-G53HASDV.cjs} +48 -48
- package/dist/{chunk-SF5NKAUA.cjs.map → chunk-G53HASDV.cjs.map} +1 -1
- package/dist/{chunk-GDI2A65Z.js → chunk-H2ZAJOQA.js} +4 -4
- package/dist/{chunk-GDI2A65Z.js.map → chunk-H2ZAJOQA.js.map} +1 -1
- package/dist/{chunk-2JHN5RCY.cjs → chunk-I6EDUE75.cjs} +17 -17
- package/dist/{chunk-2JHN5RCY.cjs.map → chunk-I6EDUE75.cjs.map} +1 -1
- package/dist/{chunk-XLHN5L2O.js → chunk-I7RLG6VX.js} +4 -4
- package/dist/{chunk-XLHN5L2O.js.map → chunk-I7RLG6VX.js.map} +1 -1
- package/dist/{chunk-6O5OLYTZ.js → chunk-L7S5KC5B.js} +3 -3
- package/dist/{chunk-6O5OLYTZ.js.map → chunk-L7S5KC5B.js.map} +1 -1
- package/dist/{chunk-FNCQJLR2.cjs → chunk-OH2XLTXE.cjs} +3 -3
- package/dist/{chunk-FNCQJLR2.cjs.map → chunk-OH2XLTXE.cjs.map} +1 -1
- package/dist/{chunk-XMRB74HA.cjs → chunk-PWWA4DBL.cjs} +10 -10
- package/dist/{chunk-XMRB74HA.cjs.map → chunk-PWWA4DBL.cjs.map} +1 -1
- package/dist/{chunk-XFYFREPH.cjs → chunk-QRSR4HV4.cjs} +17 -17
- package/dist/{chunk-XFYFREPH.cjs.map → chunk-QRSR4HV4.cjs.map} +1 -1
- package/dist/{chunk-YVQNHELA.js → chunk-RMBI6P4N.js} +3 -3
- package/dist/{chunk-YVQNHELA.js.map → chunk-RMBI6P4N.js.map} +1 -1
- package/dist/{chunk-PVY6DMN5.js → chunk-URT2RVGB.js} +3 -3
- package/dist/{chunk-PVY6DMN5.js.map → chunk-URT2RVGB.js.map} +1 -1
- package/dist/{chunk-3NUDA3MB.cjs → chunk-Z2OZMKFV.cjs} +641 -476
- package/dist/chunk-Z2OZMKFV.cjs.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-BySzD37I.d.ts → delegate-BjYJJsml.d.ts} +1 -1
- package/dist/{delegate-C4Rl6h9l.d.cts → delegate-CC1gcvuC.d.cts} +1 -1
- package/dist/{index-C29VNcxC.d.ts → index-C888wFEV.d.ts} +2 -2
- package/dist/{index-BcRCHnzN.d.cts → index-CwBr7qzV.d.cts} +71 -12
- package/dist/{index-BcRCHnzN.d.ts → index-CwBr7qzV.d.ts} +71 -12
- package/dist/{index-Butfkm-K.d.cts → index-Cz5_WaQP.d.cts} +2 -2
- package/dist/index.cjs +274 -266
- package/dist/index.d.cts +105 -19
- package/dist/index.d.ts +105 -19
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-BTq3rMpI.d.cts → taskRunner-BMUndClz.d.cts} +1 -1
- package/dist/{taskRunner-DxMJYJ7Y.d.ts → taskRunner-DZWUsSzA.d.ts} +1 -1
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +16 -16
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +5 -5
- package/dist/wallet/expo/index.d.ts +5 -5
- package/dist/wallet/expo/index.js +7 -7
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/{wallet-DrSsUden.d.cts → wallet-Dpjx6CJ7.d.ts} +14 -5
- package/dist/{wallet-BVIfg2ic.d.ts → wallet-H3f14est.d.cts} +14 -5
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +1 -1
- package/dist/chunk-3NUDA3MB.cjs.map +0 -1
- package/dist/chunk-AUEXB42T.js.map +0 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../../chunk-
|
|
5
|
-
require('../../chunk-
|
|
6
|
-
require('../../chunk-
|
|
3
|
+
var chunkZ2OZMKFV_cjs = require('../../chunk-Z2OZMKFV.cjs');
|
|
4
|
+
require('../../chunk-I6EDUE75.cjs');
|
|
5
|
+
require('../../chunk-G53HASDV.cjs');
|
|
6
|
+
require('../../chunk-OH2XLTXE.cjs');
|
|
7
7
|
require('../../chunk-5BLDMQED.cjs');
|
|
8
8
|
|
|
9
9
|
// src/repositories/realm/walletRepository.ts
|
|
@@ -38,7 +38,7 @@ var RealmWalletRepository = class {
|
|
|
38
38
|
await this.ensureInit();
|
|
39
39
|
this.realm.write(() => {
|
|
40
40
|
for (const vtxo of vtxos) {
|
|
41
|
-
const s =
|
|
41
|
+
const s = chunkZ2OZMKFV_cjs.serializeVtxo(vtxo);
|
|
42
42
|
this.realm.create(
|
|
43
43
|
"ArkVtxo",
|
|
44
44
|
{
|
|
@@ -86,7 +86,7 @@ var RealmWalletRepository = class {
|
|
|
86
86
|
throw new Error("RealmWalletRepository requires an address");
|
|
87
87
|
}
|
|
88
88
|
for (const vtxo of vtxos) {
|
|
89
|
-
if (!
|
|
89
|
+
if (!chunkZ2OZMKFV_cjs.isVtxoForScript(vtxo, key.script)) {
|
|
90
90
|
throw new Error(
|
|
91
91
|
`VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`
|
|
92
92
|
);
|
|
@@ -111,7 +111,7 @@ var RealmWalletRepository = class {
|
|
|
111
111
|
await this.ensureInit();
|
|
112
112
|
this.realm.write(() => {
|
|
113
113
|
for (const utxo of utxos) {
|
|
114
|
-
const s =
|
|
114
|
+
const s = chunkZ2OZMKFV_cjs.serializeUtxo(utxo);
|
|
115
115
|
this.realm.create(
|
|
116
116
|
"ArkUtxo",
|
|
117
117
|
{
|
|
@@ -164,7 +164,7 @@ var RealmWalletRepository = class {
|
|
|
164
164
|
amount: tx.amount,
|
|
165
165
|
settled: tx.settled,
|
|
166
166
|
createdAt: tx.createdAt,
|
|
167
|
-
assetsJson: tx.assets ? JSON.stringify(
|
|
167
|
+
assetsJson: tx.assets ? JSON.stringify(chunkZ2OZMKFV_cjs.serializeAssets(tx.assets)) : null
|
|
168
168
|
},
|
|
169
169
|
"modified"
|
|
170
170
|
);
|
|
@@ -234,9 +234,9 @@ function vtxoObjectToDomain(obj) {
|
|
|
234
234
|
// Post-migration every row has `script`, but the backfill is
|
|
235
235
|
// idempotent: derive from `address` if the legacy column is still
|
|
236
236
|
// null (e.g. the migration hasn't run yet on this handle).
|
|
237
|
-
script: obj.script ??
|
|
237
|
+
script: obj.script ?? chunkZ2OZMKFV_cjs.scriptFromArkAddress(obj.address)
|
|
238
238
|
};
|
|
239
|
-
return
|
|
239
|
+
return chunkZ2OZMKFV_cjs.deserializeVtxo(serialized);
|
|
240
240
|
}
|
|
241
241
|
function utxoObjectToDomain(obj) {
|
|
242
242
|
const serialized = {
|
|
@@ -255,7 +255,7 @@ function utxoObjectToDomain(obj) {
|
|
|
255
255
|
status: JSON.parse(obj.statusJson),
|
|
256
256
|
extraWitness: obj.extraWitnessJson ? JSON.parse(obj.extraWitnessJson) : void 0
|
|
257
257
|
};
|
|
258
|
-
return
|
|
258
|
+
return chunkZ2OZMKFV_cjs.deserializeUtxo(serialized);
|
|
259
259
|
}
|
|
260
260
|
function txObjectToDomain(obj) {
|
|
261
261
|
const tx = {
|
|
@@ -270,7 +270,7 @@ function txObjectToDomain(obj) {
|
|
|
270
270
|
createdAt: obj.createdAt
|
|
271
271
|
};
|
|
272
272
|
if (obj.assetsJson) {
|
|
273
|
-
tx.assets =
|
|
273
|
+
tx.assets = chunkZ2OZMKFV_cjs.deserializeAssets(JSON.parse(obj.assetsJson));
|
|
274
274
|
}
|
|
275
275
|
return tx;
|
|
276
276
|
}
|
|
@@ -450,7 +450,7 @@ var RealmIntentRepository = class {
|
|
|
450
450
|
const clashes = [
|
|
451
451
|
...this.realm.objects("ArkIntent").filtered("intentId == $0", intent.intentId)
|
|
452
452
|
].map(toIntent);
|
|
453
|
-
|
|
453
|
+
chunkZ2OZMKFV_cjs.assertIntentIdUnique(intent, clashes);
|
|
454
454
|
}
|
|
455
455
|
this.realm.create(
|
|
456
456
|
"ArkIntent",
|
|
@@ -479,14 +479,14 @@ var RealmIntentRepository = class {
|
|
|
479
479
|
}
|
|
480
480
|
async getIntents(filter) {
|
|
481
481
|
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) =>
|
|
483
|
-
const { skip, end } =
|
|
482
|
+
const out = filter ? all.filter((i) => chunkZ2OZMKFV_cjs.intentMatchesFilter(i, filter)) : all;
|
|
483
|
+
const { skip, end } = chunkZ2OZMKFV_cjs.intentPageBounds(filter, out.length);
|
|
484
484
|
return out.slice(skip, end);
|
|
485
485
|
}
|
|
486
486
|
async getLockedVtxoOutpoints() {
|
|
487
487
|
const out = [];
|
|
488
488
|
for (const o of [...this.realm.objects("ArkIntent")].map(toIntent))
|
|
489
|
-
if (!
|
|
489
|
+
if (!chunkZ2OZMKFV_cjs.isTerminalIntentState(o.state)) out.push(...o.intentVtxos);
|
|
490
490
|
return out;
|
|
491
491
|
}
|
|
492
492
|
async [Symbol.asyncDispose]() {
|
|
@@ -528,7 +528,7 @@ var RealmVirtualTxRepository = class {
|
|
|
528
528
|
txid: t.txid,
|
|
529
529
|
psbt: t.psbt ?? prev?.psbt ?? null,
|
|
530
530
|
expiresAt: t.expiresAt ?? prev?.expiresAt ?? null,
|
|
531
|
-
type:
|
|
531
|
+
type: chunkZ2OZMKFV_cjs.mergeChainedTxType(t.type, prev?.type)
|
|
532
532
|
},
|
|
533
533
|
"modified"
|
|
534
534
|
);
|
|
@@ -762,7 +762,7 @@ function runArkRealmMigrations(oldRealm, newRealm) {
|
|
|
762
762
|
for (let i = 0; i < newVtxos.length; i++) {
|
|
763
763
|
const newVtxo = newVtxos[i];
|
|
764
764
|
if (!newVtxo.script) {
|
|
765
|
-
newVtxo.script =
|
|
765
|
+
newVtxo.script = chunkZ2OZMKFV_cjs.scriptFromArkAddress(newVtxo.address);
|
|
766
766
|
}
|
|
767
767
|
}
|
|
768
768
|
const oldHasVirtualTx = Array.isArray(oldRealm?.schema) && oldRealm.schema.some((s) => s.name === "ArkVirtualTx");
|
|
@@ -779,7 +779,7 @@ function runArkRealmMigrations(oldRealm, newRealm) {
|
|
|
779
779
|
|
|
780
780
|
Object.defineProperty(exports, "ChainedTxType", {
|
|
781
781
|
enumerable: true,
|
|
782
|
-
get: function () { return
|
|
782
|
+
get: function () { return chunkZ2OZMKFV_cjs.ChainedTxType; }
|
|
783
783
|
});
|
|
784
784
|
exports.ARK_REALM_SCHEMA_VERSION = ARK_REALM_SCHEMA_VERSION;
|
|
785
785
|
exports.ArkExperimentalRealmSchemas = ArkExperimentalRealmSchemas;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { W as WalletRepository,
|
|
2
|
-
export {
|
|
1
|
+
import { W as WalletRepository, u as ExtendedVirtualCoin, v as VtxoRepositoryKey, E as ExtendedCoin, A as ArkTransaction, w as WalletState, C as ContractRepository, x as ContractFilter, t as Contract, y as IntentRepository, z as ArkIntent, B as IntentFilter, O as Outpoint, D as VirtualTxRepository, F as VirtualTx, H as VtxoBranch } from '../../index-CwBr7qzV.cjs';
|
|
2
|
+
export { J as ChainedTxType } from '../../index-CwBr7qzV.cjs';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { W as WalletRepository,
|
|
2
|
-
export {
|
|
1
|
+
import { W as WalletRepository, u as ExtendedVirtualCoin, v as VtxoRepositoryKey, E as ExtendedCoin, A as ArkTransaction, w as WalletState, C as ContractRepository, x as ContractFilter, t as Contract, y as IntentRepository, z as ArkIntent, B as IntentFilter, O as Outpoint, D as VirtualTxRepository, F as VirtualTx, H as VtxoBranch } from '../../index-CwBr7qzV.js';
|
|
2
|
+
export { J as ChainedTxType } from '../../index-CwBr7qzV.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, scriptFromArkAddress, deserializeVtxo, deserializeUtxo, deserializeAssets, assertIntentIdUnique, intentMatchesFilter, intentPageBounds, isTerminalIntentState, mergeChainedTxType } from '../../chunk-
|
|
2
|
-
export { ChainedTxType } from '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
1
|
+
import { serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, scriptFromArkAddress, deserializeVtxo, deserializeUtxo, deserializeAssets, assertIntentIdUnique, intentMatchesFilter, intentPageBounds, isTerminalIntentState, mergeChainedTxType } from '../../chunk-2IZW6AEK.js';
|
|
2
|
+
export { ChainedTxType } from '../../chunk-2IZW6AEK.js';
|
|
3
|
+
import '../../chunk-RMBI6P4N.js';
|
|
4
|
+
import '../../chunk-L7S5KC5B.js';
|
|
5
|
+
import '../../chunk-URT2RVGB.js';
|
|
6
6
|
import '../../chunk-NSBPE2FW.js';
|
|
7
7
|
|
|
8
8
|
// src/repositories/realm/walletRepository.ts
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../../chunk-
|
|
5
|
-
require('../../chunk-
|
|
6
|
-
require('../../chunk-
|
|
3
|
+
var chunkZ2OZMKFV_cjs = require('../../chunk-Z2OZMKFV.cjs');
|
|
4
|
+
require('../../chunk-I6EDUE75.cjs');
|
|
5
|
+
require('../../chunk-G53HASDV.cjs');
|
|
6
|
+
require('../../chunk-OH2XLTXE.cjs');
|
|
7
7
|
require('../../chunk-5BLDMQED.cjs');
|
|
8
8
|
|
|
9
9
|
// src/repositories/sqlite/transaction.ts
|
|
@@ -154,7 +154,7 @@ var SQLiteWalletRepository = class {
|
|
|
154
154
|
for (const row of nullRows) {
|
|
155
155
|
await this.db.run(
|
|
156
156
|
`UPDATE ${this.tables.vtxos} SET script = ? WHERE txid = ? AND vout = ?`,
|
|
157
|
-
[
|
|
157
|
+
[chunkZ2OZMKFV_cjs.scriptFromArkAddress(row.address), row.txid, row.vout]
|
|
158
158
|
);
|
|
159
159
|
}
|
|
160
160
|
const tempName = `${this.tables.vtxos}__migrate_tmp`;
|
|
@@ -225,7 +225,7 @@ var SQLiteWalletRepository = class {
|
|
|
225
225
|
async saveVtxos(address, vtxos) {
|
|
226
226
|
await this.ensureInit();
|
|
227
227
|
for (const vtxo of vtxos) {
|
|
228
|
-
const s =
|
|
228
|
+
const s = chunkZ2OZMKFV_cjs.serializeVtxo(vtxo);
|
|
229
229
|
await this.db.run(
|
|
230
230
|
`INSERT OR REPLACE INTO ${this.tables.vtxos}
|
|
231
231
|
(txid, vout, value, address,
|
|
@@ -280,7 +280,7 @@ var SQLiteWalletRepository = class {
|
|
|
280
280
|
throw new Error("SQLiteWalletRepository requires an address");
|
|
281
281
|
}
|
|
282
282
|
for (const vtxo of vtxos) {
|
|
283
|
-
if (!
|
|
283
|
+
if (!chunkZ2OZMKFV_cjs.isVtxoForScript(vtxo, key.script)) {
|
|
284
284
|
throw new Error(
|
|
285
285
|
`VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`
|
|
286
286
|
);
|
|
@@ -304,7 +304,7 @@ var SQLiteWalletRepository = class {
|
|
|
304
304
|
async saveUtxos(address, utxos) {
|
|
305
305
|
await this.ensureInit();
|
|
306
306
|
for (const utxo of utxos) {
|
|
307
|
-
const s =
|
|
307
|
+
const s = chunkZ2OZMKFV_cjs.serializeUtxo(utxo);
|
|
308
308
|
await this.db.run(
|
|
309
309
|
`INSERT OR REPLACE INTO ${this.tables.utxos}
|
|
310
310
|
(txid, vout, value, address,
|
|
@@ -360,7 +360,7 @@ var SQLiteWalletRepository = class {
|
|
|
360
360
|
tx.amount,
|
|
361
361
|
tx.settled ? 1 : 0,
|
|
362
362
|
tx.createdAt,
|
|
363
|
-
tx.assets ? JSON.stringify(
|
|
363
|
+
tx.assets ? JSON.stringify(chunkZ2OZMKFV_cjs.serializeAssets(tx.assets)) : null
|
|
364
364
|
]
|
|
365
365
|
);
|
|
366
366
|
}
|
|
@@ -434,9 +434,9 @@ function vtxoRowToDomain(row) {
|
|
|
434
434
|
// Post-migration every row has `script`, but the backfill is
|
|
435
435
|
// idempotent: derive from `address` if the legacy column is still
|
|
436
436
|
// null (e.g. the migration hasn't run yet on this handle).
|
|
437
|
-
script: row.script ??
|
|
437
|
+
script: row.script ?? chunkZ2OZMKFV_cjs.scriptFromArkAddress(row.address)
|
|
438
438
|
};
|
|
439
|
-
return
|
|
439
|
+
return chunkZ2OZMKFV_cjs.deserializeVtxo(serialized);
|
|
440
440
|
}
|
|
441
441
|
function utxoRowToDomain(row) {
|
|
442
442
|
const serialized = {
|
|
@@ -455,7 +455,7 @@ function utxoRowToDomain(row) {
|
|
|
455
455
|
status: JSON.parse(row.status_json),
|
|
456
456
|
extraWitness: row.extra_witness_json ? JSON.parse(row.extra_witness_json) : void 0
|
|
457
457
|
};
|
|
458
|
-
return
|
|
458
|
+
return chunkZ2OZMKFV_cjs.deserializeUtxo(serialized);
|
|
459
459
|
}
|
|
460
460
|
function txRowToDomain(row) {
|
|
461
461
|
const tx = {
|
|
@@ -470,7 +470,7 @@ function txRowToDomain(row) {
|
|
|
470
470
|
createdAt: row.created_at
|
|
471
471
|
};
|
|
472
472
|
if (row.assets_json) {
|
|
473
|
-
tx.assets =
|
|
473
|
+
tx.assets = chunkZ2OZMKFV_cjs.deserializeAssets(JSON.parse(row.assets_json));
|
|
474
474
|
}
|
|
475
475
|
return tx;
|
|
476
476
|
}
|
|
@@ -743,8 +743,8 @@ var SQLiteIntentRepository = class {
|
|
|
743
743
|
`SELECT * FROM ${this.t} ORDER BY created_at ASC, intent_tx_id ASC`
|
|
744
744
|
);
|
|
745
745
|
let out = rows.map(rowToIntent);
|
|
746
|
-
if (filter) out = out.filter((i) =>
|
|
747
|
-
const { skip, end } =
|
|
746
|
+
if (filter) out = out.filter((i) => chunkZ2OZMKFV_cjs.intentMatchesFilter(i, filter));
|
|
747
|
+
const { skip, end } = chunkZ2OZMKFV_cjs.intentPageBounds(filter, out.length);
|
|
748
748
|
return out.slice(skip, end);
|
|
749
749
|
}
|
|
750
750
|
async getLockedVtxoOutpoints() {
|
|
@@ -752,7 +752,7 @@ var SQLiteIntentRepository = class {
|
|
|
752
752
|
const rows = await this.db.all(`SELECT * FROM ${this.t}`);
|
|
753
753
|
const out = [];
|
|
754
754
|
for (const r of rows) {
|
|
755
|
-
if (
|
|
755
|
+
if (chunkZ2OZMKFV_cjs.isTerminalIntentState(r.state)) continue;
|
|
756
756
|
for (const o of JSON.parse(r.intent_vtxos_json)) out.push(o);
|
|
757
757
|
}
|
|
758
758
|
return out;
|
|
@@ -847,7 +847,7 @@ var SQLiteVirtualTxRepository = class {
|
|
|
847
847
|
const prev = prevByTxid.get(t.txid);
|
|
848
848
|
const psbt = t.psbt ?? prev?.psbt ?? null;
|
|
849
849
|
const expires = t.expiresAt ?? prev?.expires_at ?? null;
|
|
850
|
-
const type =
|
|
850
|
+
const type = chunkZ2OZMKFV_cjs.mergeChainedTxType(t.type, prev?.type);
|
|
851
851
|
await this.db.run(
|
|
852
852
|
`INSERT OR REPLACE INTO ${this.tTx} (txid, psbt, expires_at, type) VALUES (?, ?, ?, ?)`,
|
|
853
853
|
[t.txid, psbt, expires, type]
|
|
@@ -933,7 +933,7 @@ function rowToTx(r) {
|
|
|
933
933
|
|
|
934
934
|
Object.defineProperty(exports, "ChainedTxType", {
|
|
935
935
|
enumerable: true,
|
|
936
|
-
get: function () { return
|
|
936
|
+
get: function () { return chunkZ2OZMKFV_cjs.ChainedTxType; }
|
|
937
937
|
});
|
|
938
938
|
exports.SQLiteContractRepository = SQLiteContractRepository;
|
|
939
939
|
exports.SQLiteIntentRepository = SQLiteIntentRepository;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { W as WalletRepository,
|
|
2
|
-
export {
|
|
1
|
+
import { W as WalletRepository, u as ExtendedVirtualCoin, v as VtxoRepositoryKey, E as ExtendedCoin, A as ArkTransaction, w as WalletState, C as ContractRepository, x as ContractFilter, t as Contract, y as IntentRepository, z as ArkIntent, B as IntentFilter, O as Outpoint, D as VirtualTxRepository, F as VirtualTx, H as VtxoBranch } from '../../index-CwBr7qzV.cjs';
|
|
2
|
+
export { J as ChainedTxType } from '../../index-CwBr7qzV.cjs';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { W as WalletRepository,
|
|
2
|
-
export {
|
|
1
|
+
import { W as WalletRepository, u as ExtendedVirtualCoin, v as VtxoRepositoryKey, E as ExtendedCoin, A as ArkTransaction, w as WalletState, C as ContractRepository, x as ContractFilter, t as Contract, y as IntentRepository, z as ArkIntent, B as IntentFilter, O as Outpoint, D as VirtualTxRepository, F as VirtualTx, H as VtxoBranch } from '../../index-CwBr7qzV.js';
|
|
2
|
+
export { J as ChainedTxType } from '../../index-CwBr7qzV.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, scriptFromArkAddress, deserializeVtxo, deserializeUtxo, deserializeAssets, intentMatchesFilter, intentPageBounds, isTerminalIntentState, mergeChainedTxType } from '../../chunk-
|
|
2
|
-
export { ChainedTxType } from '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
1
|
+
import { serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, scriptFromArkAddress, deserializeVtxo, deserializeUtxo, deserializeAssets, intentMatchesFilter, intentPageBounds, isTerminalIntentState, mergeChainedTxType } from '../../chunk-2IZW6AEK.js';
|
|
2
|
+
export { ChainedTxType } from '../../chunk-2IZW6AEK.js';
|
|
3
|
+
import '../../chunk-RMBI6P4N.js';
|
|
4
|
+
import '../../chunk-L7S5KC5B.js';
|
|
5
|
+
import '../../chunk-URT2RVGB.js';
|
|
6
6
|
import '../../chunk-NSBPE2FW.js';
|
|
7
7
|
|
|
8
8
|
// src/repositories/sqlite/transaction.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository,
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository, p as IndexerProvider, o as ArkProvider, s as VirtualCoin, t as Contract, u as ExtendedVirtualCoin } from './index-CwBr7qzV.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A task item represents a unit of work in the inbox.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository,
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository, p as IndexerProvider, o as ArkProvider, s as VirtualCoin, t as Contract, u as ExtendedVirtualCoin } from './index-CwBr7qzV.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A task item represents a unit of work in the inbox.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
require('../../chunk-
|
|
7
|
-
require('../../chunk-
|
|
8
|
-
require('../../chunk-
|
|
3
|
+
var chunkPWWA4DBL_cjs = require('../../chunk-PWWA4DBL.cjs');
|
|
4
|
+
var chunkQRSR4HV4_cjs = require('../../chunk-QRSR4HV4.cjs');
|
|
5
|
+
var chunkZ2OZMKFV_cjs = require('../../chunk-Z2OZMKFV.cjs');
|
|
6
|
+
require('../../chunk-I6EDUE75.cjs');
|
|
7
|
+
require('../../chunk-G53HASDV.cjs');
|
|
8
|
+
require('../../chunk-OH2XLTXE.cjs');
|
|
9
9
|
require('../../chunk-5BLDMQED.cjs');
|
|
10
10
|
var TaskManager = require('expo-task-manager');
|
|
11
11
|
var BackgroundTask = require('expo-background-task');
|
|
@@ -36,7 +36,7 @@ function defineExpoBackgroundTask(taskName, options) {
|
|
|
36
36
|
taskQueue,
|
|
37
37
|
walletRepository,
|
|
38
38
|
contractRepository,
|
|
39
|
-
processors = [
|
|
39
|
+
processors = [chunkPWWA4DBL_cjs.contractPollProcessor]
|
|
40
40
|
} = options;
|
|
41
41
|
TaskManager__namespace.defineTask(taskName, async () => {
|
|
42
42
|
try {
|
|
@@ -44,24 +44,24 @@ function defineExpoBackgroundTask(taskName, options) {
|
|
|
44
44
|
if (!config) {
|
|
45
45
|
return BackgroundTask__namespace.BackgroundTaskResult.Success;
|
|
46
46
|
}
|
|
47
|
-
const indexerProvider = new
|
|
48
|
-
const arkProvider = new
|
|
49
|
-
const deps =
|
|
47
|
+
const indexerProvider = new chunkQRSR4HV4_cjs.ExpoIndexerProvider(config.arkServerUrl);
|
|
48
|
+
const arkProvider = new chunkQRSR4HV4_cjs.ExpoArkProvider(config.arkServerUrl);
|
|
49
|
+
const deps = chunkPWWA4DBL_cjs.createTaskDependencies({
|
|
50
50
|
walletRepository,
|
|
51
51
|
contractRepository,
|
|
52
52
|
indexerProvider,
|
|
53
53
|
arkProvider
|
|
54
54
|
});
|
|
55
|
-
await
|
|
55
|
+
await chunkPWWA4DBL_cjs.runTasks(taskQueue, processors, deps);
|
|
56
56
|
const results = await taskQueue.getResults();
|
|
57
57
|
if (results.length > 0) {
|
|
58
58
|
await taskQueue.acknowledgeResults(results.map((r) => r.id));
|
|
59
59
|
}
|
|
60
|
-
const existing = await taskQueue.getTasks(
|
|
60
|
+
const existing = await taskQueue.getTasks(chunkPWWA4DBL_cjs.CONTRACT_POLL_TASK_TYPE);
|
|
61
61
|
if (existing.length === 0) {
|
|
62
62
|
const task = {
|
|
63
|
-
id:
|
|
64
|
-
type:
|
|
63
|
+
id: chunkZ2OZMKFV_cjs.getRandomId(),
|
|
64
|
+
type: chunkPWWA4DBL_cjs.CONTRACT_POLL_TASK_TYPE,
|
|
65
65
|
data: {},
|
|
66
66
|
createdAt: Date.now()
|
|
67
67
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository } from '../../index-
|
|
2
|
-
import { A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-
|
|
3
|
-
import { T as TaskProcessor } from '../../taskRunner-
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository } from '../../index-CwBr7qzV.cjs';
|
|
2
|
+
import { A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-B53mOTCw.cjs';
|
|
3
|
+
import { T as TaskProcessor } from '../../taskRunner-BMUndClz.cjs';
|
|
4
4
|
import '@scure/btc-signer/utils.js';
|
|
5
5
|
import '@scure/btc-signer/transaction.js';
|
|
6
6
|
import '@scure/btc-signer';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository } from '../../index-
|
|
2
|
-
import { A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-
|
|
3
|
-
import { T as TaskProcessor } from '../../taskRunner-
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository } from '../../index-CwBr7qzV.js';
|
|
2
|
+
import { A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-Df-CTfTE.js';
|
|
3
|
+
import { T as TaskProcessor } from '../../taskRunner-DZWUsSzA.js';
|
|
4
4
|
import '@scure/btc-signer/utils.js';
|
|
5
5
|
import '@scure/btc-signer/transaction.js';
|
|
6
6
|
import '@scure/btc-signer';
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { contractPollProcessor, createTaskDependencies, runTasks, CONTRACT_POLL_TASK_TYPE } from '../../chunk-
|
|
2
|
-
import { ExpoIndexerProvider, ExpoArkProvider } from '../../chunk-
|
|
3
|
-
import { getRandomId } from '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
6
|
-
import '../../chunk-
|
|
1
|
+
import { contractPollProcessor, createTaskDependencies, runTasks, CONTRACT_POLL_TASK_TYPE } from '../../chunk-I7RLG6VX.js';
|
|
2
|
+
import { ExpoIndexerProvider, ExpoArkProvider } from '../../chunk-H2ZAJOQA.js';
|
|
3
|
+
import { getRandomId } from '../../chunk-2IZW6AEK.js';
|
|
4
|
+
import '../../chunk-RMBI6P4N.js';
|
|
5
|
+
import '../../chunk-L7S5KC5B.js';
|
|
6
|
+
import '../../chunk-URT2RVGB.js';
|
|
7
7
|
import '../../chunk-NSBPE2FW.js';
|
|
8
8
|
import * as TaskManager from 'expo-task-manager';
|
|
9
9
|
import * as BackgroundTask from 'expo-background-task';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
require('../../chunk-
|
|
6
|
-
require('../../chunk-
|
|
7
|
-
var
|
|
3
|
+
var chunkPWWA4DBL_cjs = require('../../chunk-PWWA4DBL.cjs');
|
|
4
|
+
var chunkZ2OZMKFV_cjs = require('../../chunk-Z2OZMKFV.cjs');
|
|
5
|
+
require('../../chunk-I6EDUE75.cjs');
|
|
6
|
+
require('../../chunk-G53HASDV.cjs');
|
|
7
|
+
var chunkOH2XLTXE_cjs = require('../../chunk-OH2XLTXE.cjs');
|
|
8
8
|
require('../../chunk-5BLDMQED.cjs');
|
|
9
9
|
var base = require('@scure/base');
|
|
10
10
|
|
|
@@ -58,18 +58,18 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
58
58
|
*/
|
|
59
59
|
static async setup(config) {
|
|
60
60
|
warnOnRemovedBackgroundFields(config.background);
|
|
61
|
-
const wallet = await
|
|
62
|
-
const processors = config.background.processors ?? [
|
|
61
|
+
const wallet = await chunkZ2OZMKFV_cjs.Wallet.create(config);
|
|
62
|
+
const processors = config.background.processors ?? [chunkPWWA4DBL_cjs.contractPollProcessor];
|
|
63
63
|
const deps = {
|
|
64
64
|
walletRepository: wallet.walletRepository,
|
|
65
65
|
contractRepository: wallet.contractRepository,
|
|
66
66
|
indexerProvider: wallet.indexerProvider,
|
|
67
67
|
arkProvider: wallet.arkProvider,
|
|
68
|
-
extendVtxo: (vtxo, contract) =>
|
|
68
|
+
extendVtxo: (vtxo, contract) => chunkZ2OZMKFV_cjs.extendVirtualCoinForContract(vtxo, contract)
|
|
69
69
|
};
|
|
70
70
|
const { taskQueue } = config.background;
|
|
71
71
|
if ("persistConfig" in taskQueue) {
|
|
72
|
-
const arkServerUrl = config.arkServerUrl || (wallet.arkProvider instanceof
|
|
72
|
+
const arkServerUrl = config.arkServerUrl || (wallet.arkProvider instanceof chunkOH2XLTXE_cjs.RestArkProvider ? wallet.arkProvider.serverUrl : void 0);
|
|
73
73
|
if (arkServerUrl) {
|
|
74
74
|
const timelock = wallet.offchainTapscript.options.csvTimelock;
|
|
75
75
|
const bgConfig = {
|
|
@@ -100,7 +100,7 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
100
100
|
}
|
|
101
101
|
async runForegroundPoll() {
|
|
102
102
|
if (this.cleared) return;
|
|
103
|
-
await
|
|
103
|
+
await chunkPWWA4DBL_cjs.runTasks(this.taskQueue, this.processors, this.deps);
|
|
104
104
|
const results = await this.taskQueue.getResults();
|
|
105
105
|
if (results.length > 0) {
|
|
106
106
|
await this.taskQueue.acknowledgeResults(results.map((r) => r.id));
|
|
@@ -109,18 +109,18 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
109
109
|
await this.seedContractPollTask();
|
|
110
110
|
}
|
|
111
111
|
async seedContractPollTask() {
|
|
112
|
-
const existing = await this.taskQueue.getTasks(
|
|
112
|
+
const existing = await this.taskQueue.getTasks(chunkPWWA4DBL_cjs.CONTRACT_POLL_TASK_TYPE);
|
|
113
113
|
if (existing.length > 0) return;
|
|
114
114
|
const task = {
|
|
115
|
-
id:
|
|
116
|
-
type:
|
|
115
|
+
id: chunkZ2OZMKFV_cjs.getRandomId(),
|
|
116
|
+
type: chunkPWWA4DBL_cjs.CONTRACT_POLL_TASK_TYPE,
|
|
117
117
|
data: {},
|
|
118
118
|
createdAt: Date.now()
|
|
119
119
|
};
|
|
120
120
|
await this.taskQueue.addTask(task);
|
|
121
121
|
}
|
|
122
122
|
async removeContractPollTasks() {
|
|
123
|
-
const tasks = await this.taskQueue.getTasks(
|
|
123
|
+
const tasks = await this.taskQueue.getTasks(chunkPWWA4DBL_cjs.CONTRACT_POLL_TASK_TYPE);
|
|
124
124
|
for (const task of tasks) {
|
|
125
125
|
await this.taskQueue.removeTask(task.id);
|
|
126
126
|
}
|
|
@@ -228,8 +228,8 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
228
228
|
settle(params, eventCallback) {
|
|
229
229
|
return this.wallet.settle(params, eventCallback);
|
|
230
230
|
}
|
|
231
|
-
send(...
|
|
232
|
-
return this.wallet.send(...
|
|
231
|
+
send(...args) {
|
|
232
|
+
return this.wallet.send(...args);
|
|
233
233
|
}
|
|
234
234
|
get assetManager() {
|
|
235
235
|
return this.wallet.assetManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/wallet/expo/wallet.ts"],"names":["Wallet","contractPollProcessor","extendVirtualCoinForContract","RestArkProvider","hex","runTasks","CONTRACT_POLL_TASK_TYPE","getRandomId"],"mappings":"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","file":"index.cjs","sourcesContent":["import { hex } from \"@scure/base\";\nimport { Wallet, type ProviderConnectionState } from \"../wallet\";\nimport type { Activity, ActivityRegistry } from \"../activity\";\nimport { RestArkProvider } from \"../../providers/ark\";\nimport type {\n IWallet,\n IAssetManager,\n WalletBalance,\n WalletConfig,\n SendBitcoinParams,\n SettleParams,\n GetVtxosFilter,\n ArkTransaction,\n ExtendedCoin,\n Recipient,\n} from \"..\";\nimport type { SettlementEvent } from \"../../providers/ark\";\nimport type { Identity } from \"../../identity\";\nimport type { HDAllocationCapable, HDWalletCapable } from \"../hdWalletCapable\";\nimport type { IContractManager } from \"../../contracts/contractManager\";\nimport type { IDelegateManager } from \"../delegate\";\nimport type { TaskQueue, TaskItem } from \"../../worker/expo/taskQueue\";\nimport type { TaskProcessor, TaskDependencies } from \"../../worker/expo/taskRunner\";\nimport { runTasks } from \"../../worker/expo/taskRunner\";\nimport { contractPollProcessor, CONTRACT_POLL_TASK_TYPE } from \"../../worker/expo/processors\";\nimport { extendVirtualCoinForContract, getRandomId } from \"../utils\";\nimport type { PersistedBackgroundConfig } from \"./background\";\nimport type { AsyncStorageTaskQueue } from \"../../worker/expo/asyncStorageTaskQueue\";\nimport type { NormalizedExtendedVirtualCoin } from \"../vtxo\";\n\n/**\n * Background processing configuration for @see ExpoWallet.\n *\n * OS-level task registration is **not** part of this config — call\n * `registerExpoBackgroundTask` from `@arkade-os/sdk/wallet/expo/background`\n * explicitly. Splitting that step out keeps `/wallet/expo` free of the\n * `expo-task-manager` / `expo-background-task` dependencies, so\n * react-native-web and Node consumers can use `ExpoWallet` without\n * those native packages. See\n * https://github.com/arkade-os/ts-sdk/issues/486 for details.\n */\nexport interface ExpoBackgroundConfig {\n /** Persistence layer for foreground ↔ background handoff. */\n taskQueue: TaskQueue;\n /** Processors to run on each tick. Defaults to `[contractPollProcessor]`. */\n processors?: TaskProcessor[];\n /** If set, automatically polls at this interval (ms) while the app is in the foreground. */\n foregroundIntervalMs?: number;\n}\n\n/**\n * Configuration for @see ExpoWallet.setup.\n */\nexport interface ExpoWalletConfig extends WalletConfig {\n background: ExpoBackgroundConfig;\n}\n\n/**\n * Catches JS callers still passing the pre-fix-#486 fields: TypeScript\n * blocks these at compile time, but compiled JS silently dropped them\n * and consumers would never realize the OS task wasn't scheduled.\n *\n * @internal Exported for tests; not part of the public API surface.\n */\nexport function warnOnRemovedBackgroundFields(bg: unknown): void {\n if (!bg || typeof bg !== \"object\") return;\n const removed: string[] = [];\n if (\"taskName\" in bg) removed.push(\"taskName\");\n if (\"minimumBackgroundInterval\" in bg) {\n removed.push(\"minimumBackgroundInterval\");\n }\n if (removed.length === 0) return;\n console.warn(\n `[ark-sdk] ExpoWallet.setup: ignoring removed background field(s): ${removed.join(\", \")}. ` +\n 'OS-task registration moved to \"@arkade-os/sdk/wallet/expo/background\". ' +\n \"See https://github.com/arkade-os/ts-sdk/issues/486\",\n );\n}\n\n/**\n * Expo/React Native wallet with built-in background task processing.\n *\n * Wraps a standard @see Wallet and adds a lightweight task queue\n * for keeping contract/VTXO state fresh while the app is active and\n * across Expo BackgroundTask wakes.\n *\n * OS-level task registration is the consumer's responsibility — call\n * `registerExpoBackgroundTask` from\n * `@arkade-os/sdk/wallet/expo/background` after `setup()`. Keeping\n * registration out of `setup()` lets this entrypoint avoid pulling\n * `expo-task-manager` / `expo-background-task` into the `/wallet/expo`\n * bundle.\n *\n * @example\n * ```ts\n * import { ExpoWallet } from \"@arkade-os/sdk/wallet/expo\";\n * import { registerExpoBackgroundTask } from \"@arkade-os/sdk/wallet/expo/background\";\n * import { AsyncStorageTaskQueue } from \"@arkade-os/sdk/worker/expo\";\n *\n * const wallet = await ExpoWallet.setup({\n * identity: MnemonicIdentity.fromMnemonic('abandon abandon...'),\n * arkProvider: new RestArkProvider(),\n * onchainProvider: new EsploraProvider(),\n * storage: { ... },\n * background: {\n * taskQueue: new AsyncStorageTaskQueue(AsyncStorage),\n * foregroundIntervalMs: 20_000,\n * },\n * });\n *\n * // Activate the OS scheduler (Expo Android/iOS only)\n * await registerExpoBackgroundTask(\"ark-background-poll\", { minimumInterval: 15 });\n *\n * const balance = await wallet.getBalance();\n * ```\n */\nexport class ExpoWallet implements IWallet, HDWalletCapable, HDAllocationCapable {\n readonly identity: Identity;\n readonly arkProvider: Wallet[\"arkProvider\"];\n readonly indexerProvider: Wallet[\"indexerProvider\"];\n\n private foregroundIntervalId?: ReturnType<typeof setInterval>;\n private foregroundPollChain: Promise<void> = Promise.resolve();\n private cleared = false;\n\n private constructor(\n private readonly wallet: Wallet,\n private readonly taskQueue: TaskQueue,\n private readonly processors: TaskProcessor[],\n private readonly deps: TaskDependencies,\n foregroundIntervalMs?: number,\n ) {\n this.identity = wallet.identity;\n this.arkProvider = wallet.arkProvider;\n this.indexerProvider = wallet.indexerProvider;\n\n if (foregroundIntervalMs && foregroundIntervalMs > 0) {\n this.startForegroundPolling(foregroundIntervalMs);\n }\n }\n\n /**\n * Create an ExpoWallet with foreground/background queue handoff.\n *\n * 1. Creates the inner @see Wallet via `Wallet.create()`.\n * 2. Wires up processors (defaults to @see contractPollProcessor).\n * 3. Persists background config for the background handler (if the queue supports it).\n * 4. Seeds the task queue with a `contract-poll` task.\n * 5. Starts the foreground interval if `foregroundIntervalMs` is set.\n *\n * OS-level scheduling lives in\n * `@arkade-os/sdk/wallet/expo/background` and is invoked separately\n * by the consumer.\n */\n static async setup(config: ExpoWalletConfig): Promise<ExpoWallet> {\n warnOnRemovedBackgroundFields(config.background);\n\n const wallet = await Wallet.create(config);\n\n const processors = config.background.processors ?? [contractPollProcessor];\n\n const deps: TaskDependencies = {\n walletRepository: wallet.walletRepository,\n contractRepository: wallet.contractRepository,\n indexerProvider: wallet.indexerProvider,\n arkProvider: wallet.arkProvider,\n extendVtxo: (vtxo, contract) => extendVirtualCoinForContract(vtxo, contract),\n };\n\n const { taskQueue } = config.background;\n\n // Persist wallet params so the background handler can rehydrate\n // without a network call. Only works with AsyncStorageTaskQueue.\n if (\"persistConfig\" in taskQueue) {\n const arkServerUrl =\n config.arkServerUrl ||\n (wallet.arkProvider instanceof RestArkProvider\n ? wallet.arkProvider.serverUrl\n : undefined);\n\n if (arkServerUrl) {\n const timelock = wallet.offchainTapscript.options.csvTimelock;\n\n const bgConfig: PersistedBackgroundConfig = {\n arkServerUrl,\n pubkeyHex: hex.encode(wallet.offchainTapscript.options.pubKey),\n serverPubKeyHex: hex.encode(wallet.offchainTapscript.options.serverPubKey),\n exitTimelockValue: timelock.value.toString(),\n exitTimelockType: timelock.type,\n };\n\n await (taskQueue as AsyncStorageTaskQueue).persistConfig(bgConfig);\n }\n }\n\n const expoWallet = new ExpoWallet(\n wallet,\n taskQueue,\n processors,\n deps,\n config.background.foregroundIntervalMs,\n );\n\n // Seed the queue so the first tick (or background wake) has work to do\n await expoWallet.seedContractPollTask();\n\n return expoWallet;\n }\n\n // ── Foreground polling ───────────────────────────────────────────\n\n private startForegroundPolling(intervalMs: number): void {\n this.foregroundIntervalId = setInterval(() => {\n // Serialize polls so clear() can await the in-flight one before wiping.\n this.foregroundPollChain = this.foregroundPollChain\n .then(() => this.runForegroundPoll())\n .catch(console.error);\n }, intervalMs);\n }\n\n private async runForegroundPoll(): Promise<void> {\n if (this.cleared) return;\n\n await runTasks(this.taskQueue, this.processors, this.deps);\n\n // Consume results immediately (no background handoff needed)\n const results = await this.taskQueue.getResults();\n if (results.length > 0) {\n await this.taskQueue.acknowledgeResults(results.map((r) => r.id));\n }\n\n if (this.cleared) return;\n\n // Re-seed for the next tick\n await this.seedContractPollTask();\n }\n\n private async seedContractPollTask(): Promise<void> {\n const existing = await this.taskQueue.getTasks(CONTRACT_POLL_TASK_TYPE);\n if (existing.length > 0) return;\n\n const task: TaskItem = {\n id: getRandomId(),\n type: CONTRACT_POLL_TASK_TYPE,\n data: {},\n createdAt: Date.now(),\n };\n await this.taskQueue.addTask(task);\n }\n\n private async removeContractPollTasks(): Promise<void> {\n const tasks = await this.taskQueue.getTasks(CONTRACT_POLL_TASK_TYPE);\n for (const task of tasks) {\n await this.taskQueue.removeTask(task.id);\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────\n\n /**\n * Stop foreground polling and dispose the inner wallet.\n *\n * Does **not** unregister the OS background task — call\n * `unregisterExpoBackgroundTask` from\n * `@arkade-os/sdk/wallet/expo/background` yourself, matching the\n * explicit `register` step.\n */\n async dispose(): Promise<void> {\n if (this.foregroundIntervalId) {\n clearInterval(this.foregroundIntervalId);\n this.foregroundIntervalId = undefined;\n }\n\n await this.wallet.dispose();\n }\n\n /**\n * Stop foreground polling and wipe all locally persisted wallet data.\n * Does not unregister the OS background task or persisted queue config.\n */\n async clear(): Promise<void> {\n this.cleared = true;\n\n if (this.foregroundIntervalId) {\n clearInterval(this.foregroundIntervalId);\n this.foregroundIntervalId = undefined;\n }\n\n await this.foregroundPollChain;\n await this.wallet.clear();\n await this.removeContractPollTasks();\n }\n\n // ── IWallet delegation ───────────────────────────────────────────\n\n getAddress(): Promise<string> {\n return this.wallet.getAddress();\n }\n\n getBoardingAddress(): Promise<string> {\n return this.wallet.getBoardingAddress();\n }\n\n getBalance(): Promise<WalletBalance> {\n return this.wallet.getBalance();\n }\n\n getVtxos(filter?: GetVtxosFilter): Promise<NormalizedExtendedVirtualCoin[]> {\n return this.wallet.getVtxos(filter);\n }\n\n getSpendableVtxos(filter?: GetVtxosFilter): Promise<NormalizedExtendedVirtualCoin[]> {\n return this.wallet.getSpendableVtxos(filter);\n }\n\n getBoardingUtxos(): Promise<ExtendedCoin[]> {\n return this.wallet.getBoardingUtxos();\n }\n\n getTransactionHistory(): Promise<ArkTransaction[]> {\n return this.wallet.getTransactionHistory();\n }\n\n get activity(): ActivityRegistry {\n return this.wallet.activity;\n }\n\n getActivityHistory(): Promise<Activity[]> {\n return this.wallet.getActivityHistory();\n }\n\n getContractManager(): Promise<IContractManager> {\n return this.wallet.getContractManager();\n }\n\n // Descriptor surface, delegated like everything else here. Without these\n // the structural probes see a wallet with no HD state, so an Expo wallet\n // running `walletMode: 'hd'` would bind every artifact to its baseline\n // identity key — reusing one key across swaps while its receive addresses\n // rotate, and never allocating the indices a restore scan looks for.\n\n getCurrentSigningDescriptor(): Promise<string | undefined> {\n return this.wallet.getCurrentSigningDescriptor();\n }\n\n getNextSigningDescriptor(): Promise<string | undefined> {\n return this.wallet.getNextSigningDescriptor();\n }\n\n getUsedSigningDescriptors(opts?: { lookAhead?: number }): Promise<string[]> {\n return this.wallet.getUsedSigningDescriptors(opts);\n }\n\n advanceSigningDescriptorWatermark(descriptor: string): Promise<void> {\n return this.wallet.advanceSigningDescriptorWatermark(descriptor);\n }\n\n signerForDescriptor(descriptor: string): Promise<Identity> {\n return this.wallet.signerForDescriptor(descriptor);\n }\n\n /**\n * Wallet-level provider-connection freshness, delegated to the wrapped\n * in-process wallet. Synchronous because the Expo foreground wallet is\n * in-process (no worker boundary). Foreground-only: it does not imply any\n * background task can read live foreground state.\n */\n getProviderConnectionState(): ProviderConnectionState {\n return this.wallet.getProviderConnectionState();\n }\n\n getDelegateManager(): Promise<IDelegateManager | undefined> {\n return this.wallet.getDelegateManager();\n }\n\n /** @deprecated alias for @see ExpoWallet.getDelegateManager */\n getDelegatorManager(): Promise<IDelegateManager | undefined> {\n return this.wallet.getDelegateManager();\n }\n\n sendBitcoin(params: SendBitcoinParams): Promise<string> {\n return this.wallet.sendBitcoin(params);\n }\n\n settle(\n params?: SettleParams,\n eventCallback?: (event: SettlementEvent) => void,\n ): Promise<string> {\n return this.wallet.settle(params, eventCallback);\n }\n\n send(...recipients: [Recipient, ...Recipient[]]): Promise<string> {\n return this.wallet.send(...recipients);\n }\n\n get assetManager(): IAssetManager {\n return this.wallet.assetManager;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/wallet/expo/wallet.ts"],"names":["Wallet","contractPollProcessor","extendVirtualCoinForContract","RestArkProvider","hex","runTasks","CONTRACT_POLL_TASK_TYPE","getRandomId"],"mappings":"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","file":"index.cjs","sourcesContent":["import { hex } from \"@scure/base\";\nimport { Wallet, type ProviderConnectionState } from \"../wallet\";\nimport type { Activity, ActivityRegistry } from \"../activity\";\nimport { RestArkProvider } from \"../../providers/ark\";\nimport type {\n IWallet,\n IAssetManager,\n WalletBalance,\n WalletConfig,\n SendBitcoinParams,\n SettleParams,\n GetVtxosFilter,\n ArkTransaction,\n ExtendedCoin,\n Recipient,\n SendParams,\n} from \"..\";\nimport type { SettlementEvent } from \"../../providers/ark\";\nimport type { Identity } from \"../../identity\";\nimport type { HDAllocationCapable, HDWalletCapable } from \"../hdWalletCapable\";\nimport type { IContractManager } from \"../../contracts/contractManager\";\nimport type { IDelegateManager } from \"../delegate\";\nimport type { TaskQueue, TaskItem } from \"../../worker/expo/taskQueue\";\nimport type { TaskProcessor, TaskDependencies } from \"../../worker/expo/taskRunner\";\nimport { runTasks } from \"../../worker/expo/taskRunner\";\nimport { contractPollProcessor, CONTRACT_POLL_TASK_TYPE } from \"../../worker/expo/processors\";\nimport { extendVirtualCoinForContract, getRandomId } from \"../utils\";\nimport type { PersistedBackgroundConfig } from \"./background\";\nimport type { AsyncStorageTaskQueue } from \"../../worker/expo/asyncStorageTaskQueue\";\nimport type { NormalizedExtendedVirtualCoin } from \"../vtxo\";\n\n/**\n * Background processing configuration for @see ExpoWallet.\n *\n * OS-level task registration is **not** part of this config — call\n * `registerExpoBackgroundTask` from `@arkade-os/sdk/wallet/expo/background`\n * explicitly. Splitting that step out keeps `/wallet/expo` free of the\n * `expo-task-manager` / `expo-background-task` dependencies, so\n * react-native-web and Node consumers can use `ExpoWallet` without\n * those native packages. See\n * https://github.com/arkade-os/ts-sdk/issues/486 for details.\n */\nexport interface ExpoBackgroundConfig {\n /** Persistence layer for foreground ↔ background handoff. */\n taskQueue: TaskQueue;\n /** Processors to run on each tick. Defaults to `[contractPollProcessor]`. */\n processors?: TaskProcessor[];\n /** If set, automatically polls at this interval (ms) while the app is in the foreground. */\n foregroundIntervalMs?: number;\n}\n\n/**\n * Configuration for @see ExpoWallet.setup.\n */\nexport interface ExpoWalletConfig extends WalletConfig {\n background: ExpoBackgroundConfig;\n}\n\n/**\n * Catches JS callers still passing the pre-fix-#486 fields: TypeScript\n * blocks these at compile time, but compiled JS silently dropped them\n * and consumers would never realize the OS task wasn't scheduled.\n *\n * @internal Exported for tests; not part of the public API surface.\n */\nexport function warnOnRemovedBackgroundFields(bg: unknown): void {\n if (!bg || typeof bg !== \"object\") return;\n const removed: string[] = [];\n if (\"taskName\" in bg) removed.push(\"taskName\");\n if (\"minimumBackgroundInterval\" in bg) {\n removed.push(\"minimumBackgroundInterval\");\n }\n if (removed.length === 0) return;\n console.warn(\n `[ark-sdk] ExpoWallet.setup: ignoring removed background field(s): ${removed.join(\", \")}. ` +\n 'OS-task registration moved to \"@arkade-os/sdk/wallet/expo/background\". ' +\n \"See https://github.com/arkade-os/ts-sdk/issues/486\",\n );\n}\n\n/**\n * Expo/React Native wallet with built-in background task processing.\n *\n * Wraps a standard @see Wallet and adds a lightweight task queue\n * for keeping contract/VTXO state fresh while the app is active and\n * across Expo BackgroundTask wakes.\n *\n * OS-level task registration is the consumer's responsibility — call\n * `registerExpoBackgroundTask` from\n * `@arkade-os/sdk/wallet/expo/background` after `setup()`. Keeping\n * registration out of `setup()` lets this entrypoint avoid pulling\n * `expo-task-manager` / `expo-background-task` into the `/wallet/expo`\n * bundle.\n *\n * @example\n * ```ts\n * import { ExpoWallet } from \"@arkade-os/sdk/wallet/expo\";\n * import { registerExpoBackgroundTask } from \"@arkade-os/sdk/wallet/expo/background\";\n * import { AsyncStorageTaskQueue } from \"@arkade-os/sdk/worker/expo\";\n *\n * const wallet = await ExpoWallet.setup({\n * identity: MnemonicIdentity.fromMnemonic('abandon abandon...'),\n * arkProvider: new RestArkProvider(),\n * onchainProvider: new EsploraProvider(),\n * storage: { ... },\n * background: {\n * taskQueue: new AsyncStorageTaskQueue(AsyncStorage),\n * foregroundIntervalMs: 20_000,\n * },\n * });\n *\n * // Activate the OS scheduler (Expo Android/iOS only)\n * await registerExpoBackgroundTask(\"ark-background-poll\", { minimumInterval: 15 });\n *\n * const balance = await wallet.getBalance();\n * ```\n */\nexport class ExpoWallet implements IWallet, HDWalletCapable, HDAllocationCapable {\n readonly identity: Identity;\n readonly arkProvider: Wallet[\"arkProvider\"];\n readonly indexerProvider: Wallet[\"indexerProvider\"];\n\n private foregroundIntervalId?: ReturnType<typeof setInterval>;\n private foregroundPollChain: Promise<void> = Promise.resolve();\n private cleared = false;\n\n private constructor(\n private readonly wallet: Wallet,\n private readonly taskQueue: TaskQueue,\n private readonly processors: TaskProcessor[],\n private readonly deps: TaskDependencies,\n foregroundIntervalMs?: number,\n ) {\n this.identity = wallet.identity;\n this.arkProvider = wallet.arkProvider;\n this.indexerProvider = wallet.indexerProvider;\n\n if (foregroundIntervalMs && foregroundIntervalMs > 0) {\n this.startForegroundPolling(foregroundIntervalMs);\n }\n }\n\n /**\n * Create an ExpoWallet with foreground/background queue handoff.\n *\n * 1. Creates the inner @see Wallet via `Wallet.create()`.\n * 2. Wires up processors (defaults to @see contractPollProcessor).\n * 3. Persists background config for the background handler (if the queue supports it).\n * 4. Seeds the task queue with a `contract-poll` task.\n * 5. Starts the foreground interval if `foregroundIntervalMs` is set.\n *\n * OS-level scheduling lives in\n * `@arkade-os/sdk/wallet/expo/background` and is invoked separately\n * by the consumer.\n */\n static async setup(config: ExpoWalletConfig): Promise<ExpoWallet> {\n warnOnRemovedBackgroundFields(config.background);\n\n const wallet = await Wallet.create(config);\n\n const processors = config.background.processors ?? [contractPollProcessor];\n\n const deps: TaskDependencies = {\n walletRepository: wallet.walletRepository,\n contractRepository: wallet.contractRepository,\n indexerProvider: wallet.indexerProvider,\n arkProvider: wallet.arkProvider,\n extendVtxo: (vtxo, contract) => extendVirtualCoinForContract(vtxo, contract),\n };\n\n const { taskQueue } = config.background;\n\n // Persist wallet params so the background handler can rehydrate\n // without a network call. Only works with AsyncStorageTaskQueue.\n if (\"persistConfig\" in taskQueue) {\n const arkServerUrl =\n config.arkServerUrl ||\n (wallet.arkProvider instanceof RestArkProvider\n ? wallet.arkProvider.serverUrl\n : undefined);\n\n if (arkServerUrl) {\n const timelock = wallet.offchainTapscript.options.csvTimelock;\n\n const bgConfig: PersistedBackgroundConfig = {\n arkServerUrl,\n pubkeyHex: hex.encode(wallet.offchainTapscript.options.pubKey),\n serverPubKeyHex: hex.encode(wallet.offchainTapscript.options.serverPubKey),\n exitTimelockValue: timelock.value.toString(),\n exitTimelockType: timelock.type,\n };\n\n await (taskQueue as AsyncStorageTaskQueue).persistConfig(bgConfig);\n }\n }\n\n const expoWallet = new ExpoWallet(\n wallet,\n taskQueue,\n processors,\n deps,\n config.background.foregroundIntervalMs,\n );\n\n // Seed the queue so the first tick (or background wake) has work to do\n await expoWallet.seedContractPollTask();\n\n return expoWallet;\n }\n\n // ── Foreground polling ───────────────────────────────────────────\n\n private startForegroundPolling(intervalMs: number): void {\n this.foregroundIntervalId = setInterval(() => {\n // Serialize polls so clear() can await the in-flight one before wiping.\n this.foregroundPollChain = this.foregroundPollChain\n .then(() => this.runForegroundPoll())\n .catch(console.error);\n }, intervalMs);\n }\n\n private async runForegroundPoll(): Promise<void> {\n if (this.cleared) return;\n\n await runTasks(this.taskQueue, this.processors, this.deps);\n\n // Consume results immediately (no background handoff needed)\n const results = await this.taskQueue.getResults();\n if (results.length > 0) {\n await this.taskQueue.acknowledgeResults(results.map((r) => r.id));\n }\n\n if (this.cleared) return;\n\n // Re-seed for the next tick\n await this.seedContractPollTask();\n }\n\n private async seedContractPollTask(): Promise<void> {\n const existing = await this.taskQueue.getTasks(CONTRACT_POLL_TASK_TYPE);\n if (existing.length > 0) return;\n\n const task: TaskItem = {\n id: getRandomId(),\n type: CONTRACT_POLL_TASK_TYPE,\n data: {},\n createdAt: Date.now(),\n };\n await this.taskQueue.addTask(task);\n }\n\n private async removeContractPollTasks(): Promise<void> {\n const tasks = await this.taskQueue.getTasks(CONTRACT_POLL_TASK_TYPE);\n for (const task of tasks) {\n await this.taskQueue.removeTask(task.id);\n }\n }\n\n // ── Lifecycle ────────────────────────────────────────────────────\n\n /**\n * Stop foreground polling and dispose the inner wallet.\n *\n * Does **not** unregister the OS background task — call\n * `unregisterExpoBackgroundTask` from\n * `@arkade-os/sdk/wallet/expo/background` yourself, matching the\n * explicit `register` step.\n */\n async dispose(): Promise<void> {\n if (this.foregroundIntervalId) {\n clearInterval(this.foregroundIntervalId);\n this.foregroundIntervalId = undefined;\n }\n\n await this.wallet.dispose();\n }\n\n /**\n * Stop foreground polling and wipe all locally persisted wallet data.\n * Does not unregister the OS background task or persisted queue config.\n */\n async clear(): Promise<void> {\n this.cleared = true;\n\n if (this.foregroundIntervalId) {\n clearInterval(this.foregroundIntervalId);\n this.foregroundIntervalId = undefined;\n }\n\n await this.foregroundPollChain;\n await this.wallet.clear();\n await this.removeContractPollTasks();\n }\n\n // ── IWallet delegation ───────────────────────────────────────────\n\n getAddress(): Promise<string> {\n return this.wallet.getAddress();\n }\n\n getBoardingAddress(): Promise<string> {\n return this.wallet.getBoardingAddress();\n }\n\n getBalance(): Promise<WalletBalance> {\n return this.wallet.getBalance();\n }\n\n getVtxos(filter?: GetVtxosFilter): Promise<NormalizedExtendedVirtualCoin[]> {\n return this.wallet.getVtxos(filter);\n }\n\n getSpendableVtxos(filter?: GetVtxosFilter): Promise<NormalizedExtendedVirtualCoin[]> {\n return this.wallet.getSpendableVtxos(filter);\n }\n\n getBoardingUtxos(): Promise<ExtendedCoin[]> {\n return this.wallet.getBoardingUtxos();\n }\n\n getTransactionHistory(): Promise<ArkTransaction[]> {\n return this.wallet.getTransactionHistory();\n }\n\n get activity(): ActivityRegistry {\n return this.wallet.activity;\n }\n\n getActivityHistory(): Promise<Activity[]> {\n return this.wallet.getActivityHistory();\n }\n\n getContractManager(): Promise<IContractManager> {\n return this.wallet.getContractManager();\n }\n\n // Descriptor surface, delegated like everything else here. Without these\n // the structural probes see a wallet with no HD state, so an Expo wallet\n // running `walletMode: 'hd'` would bind every artifact to its baseline\n // identity key — reusing one key across swaps while its receive addresses\n // rotate, and never allocating the indices a restore scan looks for.\n\n getCurrentSigningDescriptor(): Promise<string | undefined> {\n return this.wallet.getCurrentSigningDescriptor();\n }\n\n getNextSigningDescriptor(): Promise<string | undefined> {\n return this.wallet.getNextSigningDescriptor();\n }\n\n getUsedSigningDescriptors(opts?: { lookAhead?: number }): Promise<string[]> {\n return this.wallet.getUsedSigningDescriptors(opts);\n }\n\n advanceSigningDescriptorWatermark(descriptor: string): Promise<void> {\n return this.wallet.advanceSigningDescriptorWatermark(descriptor);\n }\n\n signerForDescriptor(descriptor: string): Promise<Identity> {\n return this.wallet.signerForDescriptor(descriptor);\n }\n\n /**\n * Wallet-level provider-connection freshness, delegated to the wrapped\n * in-process wallet. Synchronous because the Expo foreground wallet is\n * in-process (no worker boundary). Foreground-only: it does not imply any\n * background task can read live foreground state.\n */\n getProviderConnectionState(): ProviderConnectionState {\n return this.wallet.getProviderConnectionState();\n }\n\n getDelegateManager(): Promise<IDelegateManager | undefined> {\n return this.wallet.getDelegateManager();\n }\n\n /** @deprecated alias for @see ExpoWallet.getDelegateManager */\n getDelegatorManager(): Promise<IDelegateManager | undefined> {\n return this.wallet.getDelegateManager();\n }\n\n sendBitcoin(params: SendBitcoinParams): Promise<string> {\n return this.wallet.sendBitcoin(params);\n }\n\n settle(\n params?: SettleParams,\n eventCallback?: (event: SettlementEvent) => void,\n ): Promise<string> {\n return this.wallet.settle(params, eventCallback);\n }\n\n send(...args: [SendParams] | [Recipient, ...Recipient[]]): Promise<string> {\n return this.wallet.send(...args);\n }\n\n get assetManager(): IAssetManager {\n return this.wallet.assetManager;\n }\n}\n"]}
|