@arkade-os/sdk 0.4.28 → 0.4.30
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/README.md +14 -16
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +4 -4
- package/dist/adapters/expo.d.ts +4 -4
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{ark-TZ1gXAXU.d.cts → ark-C0TMXvwO.d.cts} +92 -63
- package/dist/{ark-TZ1gXAXU.d.ts → ark-C0TMXvwO.d.ts} +92 -63
- package/dist/{asyncStorageTaskQueue-EFqSmYTg.d.cts → asyncStorageTaskQueue-DHOoNvRy.d.cts} +2 -2
- package/dist/{asyncStorageTaskQueue-Cb1F_Z9s.d.ts → asyncStorageTaskQueue-Iip3xMF_.d.ts} +2 -2
- package/dist/{chunk-ADV27S4N.cjs → chunk-6FLL2Q36.cjs} +8 -8
- package/dist/chunk-6FLL2Q36.cjs.map +1 -0
- package/dist/{chunk-ZBUDLTBO.js → chunk-6NWNOLL3.js} +5 -5
- package/dist/chunk-6NWNOLL3.js.map +1 -0
- package/dist/{chunk-BQLHADL7.js → chunk-6NY27WL6.js} +341 -183
- package/dist/chunk-6NY27WL6.js.map +1 -0
- package/dist/{chunk-CFZMTDWI.js → chunk-ABWRLTX5.js} +6 -5
- package/dist/chunk-ABWRLTX5.js.map +1 -0
- package/dist/{chunk-FG5ACJJW.cjs → chunk-GIGILVVP.cjs} +11 -10
- package/dist/chunk-GIGILVVP.cjs.map +1 -0
- package/dist/{chunk-A3EMF7RN.js → chunk-GRJKJNBO.js} +3 -3
- package/dist/{chunk-A3EMF7RN.js.map → chunk-GRJKJNBO.js.map} +1 -1
- package/dist/{chunk-I3DGUUCT.cjs → chunk-IEO3XDKI.cjs} +28 -28
- package/dist/{chunk-I3DGUUCT.cjs.map → chunk-IEO3XDKI.cjs.map} +1 -1
- package/dist/{chunk-IPX2R7FR.cjs → chunk-PCEE6DRL.cjs} +7 -7
- package/dist/{chunk-IPX2R7FR.cjs.map → chunk-PCEE6DRL.cjs.map} +1 -1
- package/dist/{chunk-HW3JJ323.js → chunk-TU3LVAPX.js} +32 -31
- package/dist/chunk-TU3LVAPX.js.map +1 -0
- package/dist/{chunk-5PG7DV7A.cjs → chunk-WMIPYZSB.cjs} +34 -36
- package/dist/chunk-WMIPYZSB.cjs.map +1 -0
- package/dist/{chunk-ZLO6NETT.cjs → chunk-XWJFOP5G.cjs} +505 -337
- package/dist/chunk-XWJFOP5G.cjs.map +1 -0
- package/dist/{chunk-T64LAI7L.js → chunk-YA4G7RFB.js} +3 -3
- package/dist/{chunk-T64LAI7L.js.map → chunk-YA4G7RFB.js.map} +1 -1
- package/dist/contracts/handlers/index.cjs +6 -6
- 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-aaVGfWsV.d.ts → delegate-CEk9RHVj.d.cts} +2 -2
- package/dist/{delegate-BFZs69hp.d.cts → delegate-Ds4Hi7Xy.d.ts} +2 -2
- package/dist/{index-NDla_UoJ.d.ts → index-DA9r_7Vg.d.ts} +2 -2
- package/dist/{index-B22cA64m.d.cts → index-WIAY0DDn.d.cts} +2 -2
- package/dist/index.cjs +161 -137
- package/dist/index.d.cts +144 -17
- package/dist/index.d.ts +144 -17
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +13 -13
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +4 -4
- package/dist/repositories/sqlite/index.cjs +13 -13
- package/dist/repositories/sqlite/index.d.cts +1 -1
- package/dist/repositories/sqlite/index.d.ts +1 -1
- package/dist/repositories/sqlite/index.js +4 -4
- package/dist/{taskRunner-C6Ff4OaU.d.cts → taskRunner-CdEVYgoP.d.cts} +2 -2
- package/dist/{taskRunner-yvPN8Z0K.d.ts → taskRunner-JNjIWWJi.d.ts} +2 -2
- 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 +19 -15
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +9 -7
- package/dist/wallet/expo/index.d.ts +9 -7
- package/dist/wallet/expo/index.js +11 -7
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/{wallet-D9NBRqvC.d.ts → wallet-BGL6SzKQ.d.ts} +19 -15
- package/dist/{wallet-AF-p-OWj.d.cts → wallet-CMgzKP0o.d.cts} +19 -15
- 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-5PG7DV7A.cjs.map +0 -1
- package/dist/chunk-ADV27S4N.cjs.map +0 -1
- package/dist/chunk-BQLHADL7.js.map +0 -1
- package/dist/chunk-CFZMTDWI.js.map +0 -1
- package/dist/chunk-FG5ACJJW.cjs.map +0 -1
- package/dist/chunk-HW3JJ323.js.map +0 -1
- package/dist/chunk-ZBUDLTBO.js.map +0 -1
- package/dist/chunk-ZLO6NETT.cjs.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 chunkXWJFOP5G_cjs = require('../../chunk-XWJFOP5G.cjs');
|
|
4
|
+
require('../../chunk-6FLL2Q36.cjs');
|
|
5
|
+
require('../../chunk-IEO3XDKI.cjs');
|
|
6
|
+
require('../../chunk-WMIPYZSB.cjs');
|
|
7
7
|
require('../../chunk-5BLDMQED.cjs');
|
|
8
8
|
|
|
9
9
|
// src/repositories/realm/walletRepository.ts
|
|
@@ -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 = chunkXWJFOP5G_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 (!chunkXWJFOP5G_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 = chunkXWJFOP5G_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(chunkXWJFOP5G_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 ?? chunkXWJFOP5G_cjs.scriptFromArkAddress(obj.address)
|
|
237
237
|
};
|
|
238
|
-
return
|
|
238
|
+
return chunkXWJFOP5G_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 chunkXWJFOP5G_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 = chunkXWJFOP5G_cjs.deserializeAssets(JSON.parse(obj.assetsJson));
|
|
273
273
|
}
|
|
274
274
|
return tx;
|
|
275
275
|
}
|
|
@@ -499,7 +499,7 @@ function runArkRealmMigrations(oldRealm, newRealm) {
|
|
|
499
499
|
for (let i = 0; i < newVtxos.length; i++) {
|
|
500
500
|
const newVtxo = newVtxos[i];
|
|
501
501
|
if (!newVtxo.script) {
|
|
502
|
-
newVtxo.script =
|
|
502
|
+
newVtxo.script = chunkXWJFOP5G_cjs.scriptFromArkAddress(newVtxo.address);
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
505
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, E as ExtendedVirtualCoin,
|
|
1
|
+
import { W as WalletRepository, E as ExtendedVirtualCoin, a2 as VtxoRepositoryKey, d as ExtendedCoin, A as ArkTransaction, a3 as WalletState, C as ContractRepository, a4 as ContractFilter, r as Contract } from '../../ark-C0TMXvwO.cjs';
|
|
2
2
|
import '@scure/btc-signer/transaction.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -19,7 +19,7 @@ interface RealmResults<T = Record<string, unknown>> extends Iterable<T> {
|
|
|
19
19
|
interface RealmLike {
|
|
20
20
|
write(callback: () => void): void;
|
|
21
21
|
objects<T = Record<string, unknown>>(schemaName: string): RealmResults<T>;
|
|
22
|
-
create(schemaName: string, values: Record<string, any>, mode?: string): void;
|
|
22
|
+
create(schemaName: string, values: Record<string, any>, mode?: boolean | string): void;
|
|
23
23
|
delete(objects: unknown): void;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, E as ExtendedVirtualCoin,
|
|
1
|
+
import { W as WalletRepository, E as ExtendedVirtualCoin, a2 as VtxoRepositoryKey, d as ExtendedCoin, A as ArkTransaction, a3 as WalletState, C as ContractRepository, a4 as ContractFilter, r as Contract } from '../../ark-C0TMXvwO.js';
|
|
2
2
|
import '@scure/btc-signer/transaction.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -19,7 +19,7 @@ interface RealmResults<T = Record<string, unknown>> extends Iterable<T> {
|
|
|
19
19
|
interface RealmLike {
|
|
20
20
|
write(callback: () => void): void;
|
|
21
21
|
objects<T = Record<string, unknown>>(schemaName: string): RealmResults<T>;
|
|
22
|
-
create(schemaName: string, values: Record<string, any>, mode?: string): void;
|
|
22
|
+
create(schemaName: string, values: Record<string, any>, mode?: boolean | string): void;
|
|
23
23
|
delete(objects: unknown): void;
|
|
24
24
|
}
|
|
25
25
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, scriptFromArkAddress, deserializeVtxo, deserializeUtxo, deserializeAssets } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
1
|
+
import { serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, scriptFromArkAddress, deserializeVtxo, deserializeUtxo, deserializeAssets } from '../../chunk-6NY27WL6.js';
|
|
2
|
+
import '../../chunk-6NWNOLL3.js';
|
|
3
|
+
import '../../chunk-YA4G7RFB.js';
|
|
4
|
+
import '../../chunk-TU3LVAPX.js';
|
|
5
5
|
import '../../chunk-NSBPE2FW.js';
|
|
6
6
|
|
|
7
7
|
// 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 chunkXWJFOP5G_cjs = require('../../chunk-XWJFOP5G.cjs');
|
|
4
|
+
require('../../chunk-6FLL2Q36.cjs');
|
|
5
|
+
require('../../chunk-IEO3XDKI.cjs');
|
|
6
|
+
require('../../chunk-WMIPYZSB.cjs');
|
|
7
7
|
require('../../chunk-5BLDMQED.cjs');
|
|
8
8
|
|
|
9
9
|
// src/repositories/sqlite/walletRepository.ts
|
|
@@ -126,7 +126,7 @@ var SQLiteWalletRepository = class {
|
|
|
126
126
|
for (const row of nullRows) {
|
|
127
127
|
await this.db.run(
|
|
128
128
|
`UPDATE ${this.tables.vtxos} SET script = ? WHERE txid = ? AND vout = ?`,
|
|
129
|
-
[
|
|
129
|
+
[chunkXWJFOP5G_cjs.scriptFromArkAddress(row.address), row.txid, row.vout]
|
|
130
130
|
);
|
|
131
131
|
}
|
|
132
132
|
const tempName = `${this.tables.vtxos}__migrate_tmp`;
|
|
@@ -204,7 +204,7 @@ var SQLiteWalletRepository = class {
|
|
|
204
204
|
async saveVtxos(address, vtxos) {
|
|
205
205
|
await this.ensureInit();
|
|
206
206
|
for (const vtxo of vtxos) {
|
|
207
|
-
const s =
|
|
207
|
+
const s = chunkXWJFOP5G_cjs.serializeVtxo(vtxo);
|
|
208
208
|
await this.db.run(
|
|
209
209
|
`INSERT OR REPLACE INTO ${this.tables.vtxos}
|
|
210
210
|
(txid, vout, value, address,
|
|
@@ -259,7 +259,7 @@ var SQLiteWalletRepository = class {
|
|
|
259
259
|
throw new Error("SQLiteWalletRepository requires an address");
|
|
260
260
|
}
|
|
261
261
|
for (const vtxo of vtxos) {
|
|
262
|
-
if (!
|
|
262
|
+
if (!chunkXWJFOP5G_cjs.isVtxoForScript(vtxo, key.script)) {
|
|
263
263
|
throw new Error(
|
|
264
264
|
`VTXO ${vtxo.txid}:${vtxo.vout} script mismatch: expected ${key.script}, got ${vtxo.script}`
|
|
265
265
|
);
|
|
@@ -283,7 +283,7 @@ var SQLiteWalletRepository = class {
|
|
|
283
283
|
async saveUtxos(address, utxos) {
|
|
284
284
|
await this.ensureInit();
|
|
285
285
|
for (const utxo of utxos) {
|
|
286
|
-
const s =
|
|
286
|
+
const s = chunkXWJFOP5G_cjs.serializeUtxo(utxo);
|
|
287
287
|
await this.db.run(
|
|
288
288
|
`INSERT OR REPLACE INTO ${this.tables.utxos}
|
|
289
289
|
(txid, vout, value, address,
|
|
@@ -339,7 +339,7 @@ var SQLiteWalletRepository = class {
|
|
|
339
339
|
tx.amount,
|
|
340
340
|
tx.settled ? 1 : 0,
|
|
341
341
|
tx.createdAt,
|
|
342
|
-
tx.assets ? JSON.stringify(
|
|
342
|
+
tx.assets ? JSON.stringify(chunkXWJFOP5G_cjs.serializeAssets(tx.assets)) : null
|
|
343
343
|
]
|
|
344
344
|
);
|
|
345
345
|
}
|
|
@@ -413,9 +413,9 @@ function vtxoRowToDomain(row) {
|
|
|
413
413
|
// Post-migration every row has `script`, but the backfill is
|
|
414
414
|
// idempotent: derive from `address` if the legacy column is still
|
|
415
415
|
// null (e.g. the migration hasn't run yet on this handle).
|
|
416
|
-
script: row.script ??
|
|
416
|
+
script: row.script ?? chunkXWJFOP5G_cjs.scriptFromArkAddress(row.address)
|
|
417
417
|
};
|
|
418
|
-
return
|
|
418
|
+
return chunkXWJFOP5G_cjs.deserializeVtxo(serialized);
|
|
419
419
|
}
|
|
420
420
|
function utxoRowToDomain(row) {
|
|
421
421
|
const serialized = {
|
|
@@ -434,7 +434,7 @@ function utxoRowToDomain(row) {
|
|
|
434
434
|
status: JSON.parse(row.status_json),
|
|
435
435
|
extraWitness: row.extra_witness_json ? JSON.parse(row.extra_witness_json) : void 0
|
|
436
436
|
};
|
|
437
|
-
return
|
|
437
|
+
return chunkXWJFOP5G_cjs.deserializeUtxo(serialized);
|
|
438
438
|
}
|
|
439
439
|
function txRowToDomain(row) {
|
|
440
440
|
const tx = {
|
|
@@ -449,7 +449,7 @@ function txRowToDomain(row) {
|
|
|
449
449
|
createdAt: row.created_at
|
|
450
450
|
};
|
|
451
451
|
if (row.assets_json) {
|
|
452
|
-
tx.assets =
|
|
452
|
+
tx.assets = chunkXWJFOP5G_cjs.deserializeAssets(JSON.parse(row.assets_json));
|
|
453
453
|
}
|
|
454
454
|
return tx;
|
|
455
455
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, E as ExtendedVirtualCoin,
|
|
1
|
+
import { W as WalletRepository, E as ExtendedVirtualCoin, a2 as VtxoRepositoryKey, d as ExtendedCoin, A as ArkTransaction, a3 as WalletState, C as ContractRepository, a4 as ContractFilter, r as Contract } from '../../ark-C0TMXvwO.cjs';
|
|
2
2
|
import '@scure/btc-signer/transaction.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, E as ExtendedVirtualCoin,
|
|
1
|
+
import { W as WalletRepository, E as ExtendedVirtualCoin, a2 as VtxoRepositoryKey, d as ExtendedCoin, A as ArkTransaction, a3 as WalletState, C as ContractRepository, a4 as ContractFilter, r as Contract } from '../../ark-C0TMXvwO.js';
|
|
2
2
|
import '@scure/btc-signer/transaction.js';
|
|
3
3
|
import '@scure/btc-signer/utils.js';
|
|
4
4
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { scriptFromArkAddress, serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, deserializeVtxo, deserializeUtxo, deserializeAssets } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
1
|
+
import { scriptFromArkAddress, serializeVtxo, isVtxoForScript, serializeUtxo, serializeAssets, deserializeVtxo, deserializeUtxo, deserializeAssets } from '../../chunk-6NY27WL6.js';
|
|
2
|
+
import '../../chunk-6NWNOLL3.js';
|
|
3
|
+
import '../../chunk-YA4G7RFB.js';
|
|
4
|
+
import '../../chunk-TU3LVAPX.js';
|
|
5
5
|
import '../../chunk-NSBPE2FW.js';
|
|
6
6
|
|
|
7
7
|
// src/repositories/sqlite/walletRepository.ts
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository, n as IndexerProvider, m as ArkProvider, q as VirtualCoin, r as Contract, E as ExtendedVirtualCoin } from './ark-
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository, n as IndexerProvider, m as ArkProvider, q as VirtualCoin, r as Contract, E as ExtendedVirtualCoin } from './ark-C0TMXvwO.cjs';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A task item represents a unit of work in the inbox.
|
|
@@ -111,4 +111,4 @@ interface CreateTaskDependenciesOptions {
|
|
|
111
111
|
*/
|
|
112
112
|
declare function createTaskDependencies(options: CreateTaskDependenciesOptions): TaskDependencies;
|
|
113
113
|
|
|
114
|
-
export { type CreateTaskDependenciesOptions as C, InMemoryTaskQueue as I, type TaskProcessor as T, type
|
|
114
|
+
export { type CreateTaskDependenciesOptions as C, InMemoryTaskQueue as I, type TaskProcessor as T, type TaskQueue as a, type TaskDependencies as b, type TaskItem as c, type TaskResult as d, createTaskDependencies as e, runTasks as r };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository, n as IndexerProvider, m as ArkProvider, q as VirtualCoin, r as Contract, E as ExtendedVirtualCoin } from './ark-
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository, n as IndexerProvider, m as ArkProvider, q as VirtualCoin, r as Contract, E as ExtendedVirtualCoin } from './ark-C0TMXvwO.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A task item represents a unit of work in the inbox.
|
|
@@ -111,4 +111,4 @@ interface CreateTaskDependenciesOptions {
|
|
|
111
111
|
*/
|
|
112
112
|
declare function createTaskDependencies(options: CreateTaskDependenciesOptions): TaskDependencies;
|
|
113
113
|
|
|
114
|
-
export { type CreateTaskDependenciesOptions as C, InMemoryTaskQueue as I, type TaskProcessor as T, type
|
|
114
|
+
export { type CreateTaskDependenciesOptions as C, InMemoryTaskQueue as I, type TaskProcessor as T, type TaskQueue as a, type TaskDependencies as b, type TaskItem as c, type TaskResult as d, createTaskDependencies as e, runTasks as r };
|
|
@@ -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 chunkPCEE6DRL_cjs = require('../../chunk-PCEE6DRL.cjs');
|
|
4
|
+
var chunkGIGILVVP_cjs = require('../../chunk-GIGILVVP.cjs');
|
|
5
|
+
var chunkXWJFOP5G_cjs = require('../../chunk-XWJFOP5G.cjs');
|
|
6
|
+
require('../../chunk-6FLL2Q36.cjs');
|
|
7
|
+
require('../../chunk-IEO3XDKI.cjs');
|
|
8
|
+
require('../../chunk-WMIPYZSB.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 = [chunkPCEE6DRL_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 chunkGIGILVVP_cjs.ExpoIndexerProvider(config.arkServerUrl);
|
|
48
|
+
const arkProvider = new chunkGIGILVVP_cjs.ExpoArkProvider(config.arkServerUrl);
|
|
49
|
+
const deps = chunkPCEE6DRL_cjs.createTaskDependencies({
|
|
50
50
|
walletRepository,
|
|
51
51
|
contractRepository,
|
|
52
52
|
indexerProvider,
|
|
53
53
|
arkProvider
|
|
54
54
|
});
|
|
55
|
-
await
|
|
55
|
+
await chunkPCEE6DRL_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(chunkPCEE6DRL_cjs.CONTRACT_POLL_TASK_TYPE);
|
|
61
61
|
if (existing.length === 0) {
|
|
62
62
|
const task = {
|
|
63
|
-
id:
|
|
64
|
-
type:
|
|
63
|
+
id: chunkXWJFOP5G_cjs.getRandomId(),
|
|
64
|
+
type: chunkPCEE6DRL_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 '../../ark-
|
|
2
|
-
import {
|
|
3
|
-
import { T as TaskProcessor } from '../../taskRunner-
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository } from '../../ark-C0TMXvwO.cjs';
|
|
2
|
+
import { A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-DHOoNvRy.cjs';
|
|
3
|
+
import { T as TaskProcessor } from '../../taskRunner-CdEVYgoP.cjs';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer/utils.js';
|
|
6
6
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { W as WalletRepository, C as ContractRepository } from '../../ark-
|
|
2
|
-
import {
|
|
3
|
-
import { T as TaskProcessor } from '../../taskRunner-
|
|
1
|
+
import { W as WalletRepository, C as ContractRepository } from '../../ark-C0TMXvwO.js';
|
|
2
|
+
import { A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-Iip3xMF_.js';
|
|
3
|
+
import { T as TaskProcessor } from '../../taskRunner-JNjIWWJi.js';
|
|
4
4
|
import '@scure/btc-signer/transaction.js';
|
|
5
5
|
import '@scure/btc-signer/utils.js';
|
|
6
6
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -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-GRJKJNBO.js';
|
|
2
|
+
import { ExpoIndexerProvider, ExpoArkProvider } from '../../chunk-ABWRLTX5.js';
|
|
3
|
+
import { getRandomId } from '../../chunk-6NY27WL6.js';
|
|
4
|
+
import '../../chunk-6NWNOLL3.js';
|
|
5
|
+
import '../../chunk-YA4G7RFB.js';
|
|
6
|
+
import '../../chunk-TU3LVAPX.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
|
-
var
|
|
6
|
-
var
|
|
7
|
-
require('../../chunk-
|
|
3
|
+
var chunkPCEE6DRL_cjs = require('../../chunk-PCEE6DRL.cjs');
|
|
4
|
+
var chunkXWJFOP5G_cjs = require('../../chunk-XWJFOP5G.cjs');
|
|
5
|
+
var chunk6FLL2Q36_cjs = require('../../chunk-6FLL2Q36.cjs');
|
|
6
|
+
var chunkIEO3XDKI_cjs = require('../../chunk-IEO3XDKI.cjs');
|
|
7
|
+
require('../../chunk-WMIPYZSB.cjs');
|
|
8
8
|
require('../../chunk-5BLDMQED.cjs');
|
|
9
9
|
var base = require('@scure/base');
|
|
10
10
|
|
|
@@ -52,20 +52,20 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
52
52
|
*/
|
|
53
53
|
static async setup(config) {
|
|
54
54
|
warnOnRemovedBackgroundFields(config.background);
|
|
55
|
-
const wallet = await
|
|
56
|
-
const processors = config.background.processors ?? [
|
|
55
|
+
const wallet = await chunkXWJFOP5G_cjs.Wallet.create(config);
|
|
56
|
+
const processors = config.background.processors ?? [chunkPCEE6DRL_cjs.contractPollProcessor];
|
|
57
57
|
const deps = {
|
|
58
58
|
walletRepository: wallet.walletRepository,
|
|
59
59
|
contractRepository: wallet.contractRepository,
|
|
60
60
|
indexerProvider: wallet.indexerProvider,
|
|
61
61
|
arkProvider: wallet.arkProvider,
|
|
62
|
-
extendVtxo: (vtxo, contract) =>
|
|
62
|
+
extendVtxo: (vtxo, contract) => chunkXWJFOP5G_cjs.extendVirtualCoinForContract(vtxo, contract)
|
|
63
63
|
};
|
|
64
64
|
const { taskQueue } = config.background;
|
|
65
65
|
if ("persistConfig" in taskQueue) {
|
|
66
|
-
const arkServerUrl = config.arkServerUrl
|
|
66
|
+
const arkServerUrl = config.arkServerUrl || (wallet.arkProvider instanceof chunk6FLL2Q36_cjs.RestArkProvider ? wallet.arkProvider.serverUrl : void 0);
|
|
67
67
|
if (arkServerUrl) {
|
|
68
|
-
const timelock = wallet.offchainTapscript.options.csvTimelock ??
|
|
68
|
+
const timelock = wallet.offchainTapscript.options.csvTimelock ?? chunkIEO3XDKI_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
|
|
69
69
|
const bgConfig = {
|
|
70
70
|
arkServerUrl,
|
|
71
71
|
pubkeyHex: base.hex.encode(wallet.offchainTapscript.options.pubKey),
|
|
@@ -93,7 +93,7 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
93
93
|
}, intervalMs);
|
|
94
94
|
}
|
|
95
95
|
async runForegroundPoll() {
|
|
96
|
-
await
|
|
96
|
+
await chunkPCEE6DRL_cjs.runTasks(this.taskQueue, this.processors, this.deps);
|
|
97
97
|
const results = await this.taskQueue.getResults();
|
|
98
98
|
if (results.length > 0) {
|
|
99
99
|
await this.taskQueue.acknowledgeResults(results.map((r) => r.id));
|
|
@@ -101,11 +101,11 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
101
101
|
await this.seedContractPollTask();
|
|
102
102
|
}
|
|
103
103
|
async seedContractPollTask() {
|
|
104
|
-
const existing = await this.taskQueue.getTasks(
|
|
104
|
+
const existing = await this.taskQueue.getTasks(chunkPCEE6DRL_cjs.CONTRACT_POLL_TASK_TYPE);
|
|
105
105
|
if (existing.length > 0) return;
|
|
106
106
|
const task = {
|
|
107
|
-
id:
|
|
108
|
-
type:
|
|
107
|
+
id: chunkXWJFOP5G_cjs.getRandomId(),
|
|
108
|
+
type: chunkPCEE6DRL_cjs.CONTRACT_POLL_TASK_TYPE,
|
|
109
109
|
data: {},
|
|
110
110
|
createdAt: Date.now()
|
|
111
111
|
};
|
|
@@ -149,8 +149,12 @@ var ExpoWallet = class _ExpoWallet {
|
|
|
149
149
|
getContractManager() {
|
|
150
150
|
return this.wallet.getContractManager();
|
|
151
151
|
}
|
|
152
|
+
getDelegateManager() {
|
|
153
|
+
return this.wallet.getDelegateManager();
|
|
154
|
+
}
|
|
155
|
+
/** @deprecated alias for @see ExpoWallet.getDelegateManager */
|
|
152
156
|
getDelegatorManager() {
|
|
153
|
-
return this.wallet.
|
|
157
|
+
return this.wallet.getDelegateManager();
|
|
154
158
|
}
|
|
155
159
|
sendBitcoin(params) {
|
|
156
160
|
return this.wallet.sendBitcoin(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/wallet/expo/wallet.ts"],"names":["Wallet","contractPollProcessor","extendVirtualCoinForContract","RestArkProvider","DefaultVtxo","hex","runTasks","CONTRACT_POLL_TASK_TYPE","getRandomId"],"mappings":"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","file":"index.cjs","sourcesContent":["import { hex } from \"@scure/base\";\nimport { Wallet } from \"../wallet\";\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 ExtendedVirtualCoin,\n Recipient,\n} from \"..\";\nimport type { VirtualCoin } from \"..\";\nimport type { SettlementEvent } from \"../../providers/ark\";\nimport type { Identity } from \"../../identity\";\nimport type { IContractManager } from \"../../contracts/contractManager\";\nimport type { IDelegatorManager } from \"../delegator\";\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 { DefaultVtxo } from \"../../script/default\";\nimport type { PersistedBackgroundConfig } from \"./background\";\nimport type { AsyncStorageTaskQueue } from \"../../worker/expo/asyncStorageTaskQueue\";\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 * arkServerUrl: 'https://arkade.computer',\n * esploraUrl: 'https://mempool.space/api',\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 {\n readonly identity: Identity;\n readonly arkProvider: Wallet[\"arkProvider\"];\n readonly indexerProvider: Wallet[\"indexerProvider\"];\n\n private foregroundIntervalId?: ReturnType<typeof setInterval>;\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 =\n wallet.offchainTapscript.options.csvTimelock ??\n DefaultVtxo.Script.DEFAULT_TIMELOCK;\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 this.runForegroundPoll().catch(console.error);\n }, intervalMs);\n }\n\n private async runForegroundPoll(): Promise<void> {\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 // 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 // ── 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 // ── 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<ExtendedVirtualCoin[]> {\n return this.wallet.getVtxos(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 getContractManager(): Promise<IContractManager> {\n return this.wallet.getContractManager();\n }\n\n getDelegatorManager(): Promise<IDelegatorManager | undefined> {\n return this.wallet.getDelegatorManager();\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","DefaultVtxo","hex","runTasks","CONTRACT_POLL_TASK_TYPE","getRandomId"],"mappings":"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","file":"index.cjs","sourcesContent":["import { hex } from \"@scure/base\";\nimport { Wallet } from \"../wallet\";\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 ExtendedVirtualCoin,\n Recipient,\n} from \"..\";\nimport type { VirtualCoin } from \"..\";\nimport type { SettlementEvent } from \"../../providers/ark\";\nimport type { Identity } from \"../../identity\";\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 { DefaultVtxo } from \"../../script/default\";\nimport type { PersistedBackgroundConfig } from \"./background\";\nimport type { AsyncStorageTaskQueue } from \"../../worker/expo/asyncStorageTaskQueue\";\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 {\n readonly identity: Identity;\n readonly arkProvider: Wallet[\"arkProvider\"];\n readonly indexerProvider: Wallet[\"indexerProvider\"];\n\n private foregroundIntervalId?: ReturnType<typeof setInterval>;\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 =\n wallet.offchainTapscript.options.csvTimelock ??\n DefaultVtxo.Script.DEFAULT_TIMELOCK;\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 this.runForegroundPoll().catch(console.error);\n }, intervalMs);\n }\n\n private async runForegroundPoll(): Promise<void> {\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 // 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 // ── 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 // ── 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<ExtendedVirtualCoin[]> {\n return this.wallet.getVtxos(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 getContractManager(): Promise<IContractManager> {\n return this.wallet.getContractManager();\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,9 +1,9 @@
|
|
|
1
|
-
import { W as Wallet } from '../../wallet-
|
|
2
|
-
import { I as IWallet, a as Identity, b as WalletConfig, c as WalletBalance, G as GetVtxosFilter, E as ExtendedVirtualCoin, d as ExtendedCoin, A as ArkTransaction, e as IContractManager, f as
|
|
3
|
-
import {
|
|
1
|
+
import { W as Wallet } from '../../wallet-CMgzKP0o.cjs';
|
|
2
|
+
import { I as IWallet, a as Identity, b as WalletConfig, c as WalletBalance, G as GetVtxosFilter, E as ExtendedVirtualCoin, d as ExtendedCoin, A as ArkTransaction, e as IContractManager, f as IDelegateManager, S as SendBitcoinParams, g as SettleParams, h as SettlementEvent, R as Recipient, i as IAssetManager } from '../../ark-C0TMXvwO.cjs';
|
|
3
|
+
import { a as TaskQueue, T as TaskProcessor } from '../../taskRunner-CdEVYgoP.cjs';
|
|
4
4
|
import '@scure/btc-signer/utils.js';
|
|
5
5
|
import '@scure/btc-signer/psbt.js';
|
|
6
|
-
import '../../delegate-
|
|
6
|
+
import '../../delegate-CEk9RHVj.cjs';
|
|
7
7
|
import '@scure/btc-signer/transaction.js';
|
|
8
8
|
import '@scure/btc-signer';
|
|
9
9
|
|
|
@@ -54,8 +54,8 @@ interface ExpoWalletConfig extends WalletConfig {
|
|
|
54
54
|
*
|
|
55
55
|
* const wallet = await ExpoWallet.setup({
|
|
56
56
|
* identity: MnemonicIdentity.fromMnemonic('abandon abandon...'),
|
|
57
|
-
*
|
|
58
|
-
*
|
|
57
|
+
* arkProvider: new RestArkProvider(),
|
|
58
|
+
* onchainProvider: new EsploraProvider(),
|
|
59
59
|
* storage: { ... },
|
|
60
60
|
* background: {
|
|
61
61
|
* taskQueue: new AsyncStorageTaskQueue(AsyncStorage),
|
|
@@ -112,7 +112,9 @@ declare class ExpoWallet implements IWallet {
|
|
|
112
112
|
getBoardingUtxos(): Promise<ExtendedCoin[]>;
|
|
113
113
|
getTransactionHistory(): Promise<ArkTransaction[]>;
|
|
114
114
|
getContractManager(): Promise<IContractManager>;
|
|
115
|
-
|
|
115
|
+
getDelegateManager(): Promise<IDelegateManager | undefined>;
|
|
116
|
+
/** @deprecated alias for @see ExpoWallet.getDelegateManager */
|
|
117
|
+
getDelegatorManager(): Promise<IDelegateManager | undefined>;
|
|
116
118
|
sendBitcoin(params: SendBitcoinParams): Promise<string>;
|
|
117
119
|
settle(params?: SettleParams, eventCallback?: (event: SettlementEvent) => void): Promise<string>;
|
|
118
120
|
send(...recipients: [Recipient, ...Recipient[]]): Promise<string>;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { W as Wallet } from '../../wallet-
|
|
2
|
-
import { I as IWallet, a as Identity, b as WalletConfig, c as WalletBalance, G as GetVtxosFilter, E as ExtendedVirtualCoin, d as ExtendedCoin, A as ArkTransaction, e as IContractManager, f as
|
|
3
|
-
import {
|
|
1
|
+
import { W as Wallet } from '../../wallet-BGL6SzKQ.js';
|
|
2
|
+
import { I as IWallet, a as Identity, b as WalletConfig, c as WalletBalance, G as GetVtxosFilter, E as ExtendedVirtualCoin, d as ExtendedCoin, A as ArkTransaction, e as IContractManager, f as IDelegateManager, S as SendBitcoinParams, g as SettleParams, h as SettlementEvent, R as Recipient, i as IAssetManager } from '../../ark-C0TMXvwO.js';
|
|
3
|
+
import { a as TaskQueue, T as TaskProcessor } from '../../taskRunner-JNjIWWJi.js';
|
|
4
4
|
import '@scure/btc-signer/utils.js';
|
|
5
5
|
import '@scure/btc-signer/psbt.js';
|
|
6
|
-
import '../../delegate-
|
|
6
|
+
import '../../delegate-Ds4Hi7Xy.js';
|
|
7
7
|
import '@scure/btc-signer/transaction.js';
|
|
8
8
|
import '@scure/btc-signer';
|
|
9
9
|
|
|
@@ -54,8 +54,8 @@ interface ExpoWalletConfig extends WalletConfig {
|
|
|
54
54
|
*
|
|
55
55
|
* const wallet = await ExpoWallet.setup({
|
|
56
56
|
* identity: MnemonicIdentity.fromMnemonic('abandon abandon...'),
|
|
57
|
-
*
|
|
58
|
-
*
|
|
57
|
+
* arkProvider: new RestArkProvider(),
|
|
58
|
+
* onchainProvider: new EsploraProvider(),
|
|
59
59
|
* storage: { ... },
|
|
60
60
|
* background: {
|
|
61
61
|
* taskQueue: new AsyncStorageTaskQueue(AsyncStorage),
|
|
@@ -112,7 +112,9 @@ declare class ExpoWallet implements IWallet {
|
|
|
112
112
|
getBoardingUtxos(): Promise<ExtendedCoin[]>;
|
|
113
113
|
getTransactionHistory(): Promise<ArkTransaction[]>;
|
|
114
114
|
getContractManager(): Promise<IContractManager>;
|
|
115
|
-
|
|
115
|
+
getDelegateManager(): Promise<IDelegateManager | undefined>;
|
|
116
|
+
/** @deprecated alias for @see ExpoWallet.getDelegateManager */
|
|
117
|
+
getDelegatorManager(): Promise<IDelegateManager | undefined>;
|
|
116
118
|
sendBitcoin(params: SendBitcoinParams): Promise<string>;
|
|
117
119
|
settle(params?: SettleParams, eventCallback?: (event: SettlementEvent) => void): Promise<string>;
|
|
118
120
|
send(...recipients: [Recipient, ...Recipient[]]): Promise<string>;
|