@arkade-os/sdk 0.4.33 → 0.4.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- 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/{ark-DEsDMYGv.d.cts → ark-Dsv5Jq4E.d.cts} +65 -7
- package/dist/{ark-DEsDMYGv.d.ts → ark-Dsv5Jq4E.d.ts} +65 -7
- package/dist/{asyncStorageTaskQueue-CMrTYlKG.d.ts → asyncStorageTaskQueue-BH-zuth5.d.ts} +1 -1
- package/dist/{asyncStorageTaskQueue-D8T1VXEx.d.cts → asyncStorageTaskQueue-D92ch8yI.d.cts} +1 -1
- package/dist/{chunk-L6ZETTX3.js → chunk-5WDBHWX3.js} +4 -4
- package/dist/{chunk-L6ZETTX3.js.map → chunk-5WDBHWX3.js.map} +1 -1
- package/dist/{chunk-5CCRRL5S.cjs → chunk-CCLNFHJ5.cjs} +11 -11
- package/dist/{chunk-5CCRRL5S.cjs.map → chunk-CCLNFHJ5.cjs.map} +1 -1
- package/dist/{chunk-WMIPYZSB.cjs → chunk-CMPJR3HS.cjs} +42 -9
- package/dist/chunk-CMPJR3HS.cjs.map +1 -0
- package/dist/{chunk-AOJUURHM.js → chunk-CUSABEUQ.js} +141 -37
- package/dist/chunk-CUSABEUQ.js.map +1 -0
- package/dist/{chunk-SPDNHPM4.cjs → chunk-FSAXPBGP.cjs} +8 -8
- package/dist/{chunk-SPDNHPM4.cjs.map → chunk-FSAXPBGP.cjs.map} +1 -1
- package/dist/{chunk-E22HEKLN.js → chunk-FXFBPXV3.js} +3 -3
- package/dist/{chunk-E22HEKLN.js.map → chunk-FXFBPXV3.js.map} +1 -1
- package/dist/{chunk-GYSK5R57.cjs → chunk-GUTKJMSF.cjs} +164 -59
- package/dist/chunk-GUTKJMSF.cjs.map +1 -0
- package/dist/{chunk-DSS2GQUG.js → chunk-HFXEUW55.js} +575 -155
- package/dist/chunk-HFXEUW55.js.map +1 -0
- package/dist/{chunk-TU3LVAPX.js → chunk-OUVTG72A.js} +43 -11
- package/dist/chunk-OUVTG72A.js.map +1 -0
- package/dist/{chunk-BU3BU6XK.js → chunk-VVGD3JIP.js} +3 -3
- package/dist/{chunk-BU3BU6XK.js.map → chunk-VVGD3JIP.js.map} +1 -1
- package/dist/{chunk-7K3ROJF6.cjs → chunk-XCHBQVMK.cjs} +718 -298
- package/dist/chunk-XCHBQVMK.cjs.map +1 -0
- package/dist/{chunk-HAVA4XB7.cjs → chunk-ZS3OZHC7.cjs} +7 -7
- package/dist/{chunk-HAVA4XB7.cjs.map → chunk-ZS3OZHC7.cjs.map} +1 -1
- package/dist/contracts/handlers/index.cjs +7 -7
- 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-BJeBNP5a.d.cts → delegate-BaS5SCIW.d.cts} +1 -1
- package/dist/{delegate-EXN2mfkb.d.ts → delegate-Baz_hb83.d.ts} +1 -1
- package/dist/{index-BG2ooYKO.d.ts → index-FwXZveaX.d.ts} +22 -16
- package/dist/{index-DHjEeHEp.d.cts → index-lNZ6qaO3.d.cts} +22 -16
- package/dist/index.cjs +134 -130
- package/dist/index.d.cts +63 -14
- package/dist/index.d.ts +63 -14
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +13 -13
- package/dist/repositories/realm/index.d.cts +1 -1
- package/dist/repositories/realm/index.d.ts +1 -1
- 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-B7lBU45X.d.ts → taskRunner-B1NUWyWR.d.ts} +1 -1
- package/dist/{taskRunner-pIGyarFG.d.cts → taskRunner-vFRA3F9b.d.cts} +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 +13 -13
- package/dist/wallet/expo/index.d.cts +5 -5
- package/dist/wallet/expo/index.d.ts +5 -5
- package/dist/wallet/expo/index.js +5 -5
- package/dist/{wallet-C4L_X0i6.d.ts → wallet-By9HIo0Q.d.cts} +160 -5
- package/dist/{wallet-D4Dll5Gu.d.cts → wallet-D6uoBLmS.d.ts} +160 -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 +4 -4
- package/dist/chunk-7K3ROJF6.cjs.map +0 -1
- package/dist/chunk-AOJUURHM.js.map +0 -1
- package/dist/chunk-DSS2GQUG.js.map +0 -1
- package/dist/chunk-GYSK5R57.cjs.map +0 -1
- package/dist/chunk-TU3LVAPX.js.map +0 -1
- package/dist/chunk-WMIPYZSB.cjs.map +0 -1
package/README.md
CHANGED
|
@@ -228,7 +228,7 @@ If you don't pass a provider explicitly, `OnchainWallet` and `Wallet.create({ ..
|
|
|
228
228
|
|
|
229
229
|
#### Default URLs
|
|
230
230
|
|
|
231
|
-
The SDK ships with reachable defaults for each network — bitcoin, signet, and mutinynet point at Ark Labs–operated deployments; testnet falls back to mempool.space; regtest assumes a local
|
|
231
|
+
The SDK ships with reachable defaults for each network — bitcoin, signet, and mutinynet point at Ark Labs–operated deployments; testnet falls back to mempool.space; regtest assumes a local [arkade-regtest](https://github.com/ArkLabsHQ/arkade-regtest) stack (esplora API on `http://localhost:3000/api`).
|
|
232
232
|
|
|
233
233
|
```typescript
|
|
234
234
|
import {
|
package/dist/adapters/expo.cjs
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
3
|
+
var chunkCCLNFHJ5_cjs = require('../chunk-CCLNFHJ5.cjs');
|
|
4
|
+
require('../chunk-FSAXPBGP.cjs');
|
|
5
|
+
require('../chunk-CMPJR3HS.cjs');
|
|
6
6
|
require('../chunk-5BLDMQED.cjs');
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
Object.defineProperty(exports, "ExpoArkProvider", {
|
|
11
11
|
enumerable: true,
|
|
12
|
-
get: function () { return
|
|
12
|
+
get: function () { return chunkCCLNFHJ5_cjs.ExpoArkProvider; }
|
|
13
13
|
});
|
|
14
14
|
Object.defineProperty(exports, "ExpoIndexerProvider", {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function () { return
|
|
16
|
+
get: function () { return chunkCCLNFHJ5_cjs.ExpoIndexerProvider; }
|
|
17
17
|
});
|
|
18
18
|
//# sourceMappingURL=expo.cjs.map
|
|
19
19
|
//# sourceMappingURL=expo.cjs.map
|
package/dist/adapters/expo.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { j as RestArkProvider, h as SettlementEvent, T as TxNotification, k as RestIndexerProvider, l as SubscriptionResponse } from '../ark-
|
|
2
|
-
export { m as ArkProvider, n as IndexerProvider } from '../ark-
|
|
1
|
+
import { j as RestArkProvider, h as SettlementEvent, T as TxNotification, k as RestIndexerProvider, l as SubscriptionResponse } from '../ark-Dsv5Jq4E.cjs';
|
|
2
|
+
export { m as ArkProvider, n as IndexerProvider } from '../ark-Dsv5Jq4E.cjs';
|
|
3
3
|
import '@scure/btc-signer/transaction.js';
|
|
4
4
|
import '@scure/btc-signer/utils.js';
|
|
5
5
|
import '@scure/btc-signer/psbt.js';
|
package/dist/adapters/expo.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { j as RestArkProvider, h as SettlementEvent, T as TxNotification, k as RestIndexerProvider, l as SubscriptionResponse } from '../ark-
|
|
2
|
-
export { m as ArkProvider, n as IndexerProvider } from '../ark-
|
|
1
|
+
import { j as RestArkProvider, h as SettlementEvent, T as TxNotification, k as RestIndexerProvider, l as SubscriptionResponse } from '../ark-Dsv5Jq4E.js';
|
|
2
|
+
export { m as ArkProvider, n as IndexerProvider } from '../ark-Dsv5Jq4E.js';
|
|
3
3
|
import '@scure/btc-signer/transaction.js';
|
|
4
4
|
import '@scure/btc-signer/utils.js';
|
|
5
5
|
import '@scure/btc-signer/psbt.js';
|
package/dist/adapters/expo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { ExpoArkProvider, ExpoIndexerProvider } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { ExpoArkProvider, ExpoIndexerProvider } from '../chunk-5WDBHWX3.js';
|
|
2
|
+
import '../chunk-FXFBPXV3.js';
|
|
3
|
+
import '../chunk-OUVTG72A.js';
|
|
4
4
|
import '../chunk-NSBPE2FW.js';
|
|
5
5
|
//# sourceMappingURL=expo.js.map
|
|
6
6
|
//# sourceMappingURL=expo.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
require('../chunk-
|
|
6
|
-
require('../chunk-
|
|
3
|
+
var chunkXCHBQVMK_cjs = require('../chunk-XCHBQVMK.cjs');
|
|
4
|
+
require('../chunk-FSAXPBGP.cjs');
|
|
5
|
+
require('../chunk-GUTKJMSF.cjs');
|
|
6
|
+
require('../chunk-CMPJR3HS.cjs');
|
|
7
7
|
require('../chunk-5BLDMQED.cjs');
|
|
8
8
|
|
|
9
9
|
// src/storage/indexedDB.ts
|
|
@@ -11,7 +11,7 @@ var IndexedDBStorageAdapter = class {
|
|
|
11
11
|
dbName;
|
|
12
12
|
version;
|
|
13
13
|
db = null;
|
|
14
|
-
constructor(dbName, version =
|
|
14
|
+
constructor(dbName, version = chunkXCHBQVMK_cjs.DB_VERSION) {
|
|
15
15
|
this.dbName = dbName;
|
|
16
16
|
this.version = version;
|
|
17
17
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DB_VERSION } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
4
|
-
import '../chunk-
|
|
1
|
+
import { DB_VERSION } from '../chunk-HFXEUW55.js';
|
|
2
|
+
import '../chunk-FXFBPXV3.js';
|
|
3
|
+
import '../chunk-CUSABEUQ.js';
|
|
4
|
+
import '../chunk-OUVTG72A.js';
|
|
5
5
|
import '../chunk-NSBPE2FW.js';
|
|
6
6
|
|
|
7
7
|
// src/storage/indexedDB.ts
|
|
@@ -454,6 +454,12 @@ declare class VtxoScript {
|
|
|
454
454
|
/**
|
|
455
455
|
* Create a virtual output script from its tapleaf scripts.
|
|
456
456
|
*
|
|
457
|
+
* The Taproot script tree is assembled using btcd's algorithm
|
|
458
|
+
* (`txscript.AssembleTaprootScriptTree`) so the derived taproot output
|
|
459
|
+
* key agrees with arkd for any leaf count. `@scure/btc-signer`'s
|
|
460
|
+
* default `taprootListToTree` is a Huffman builder that only agrees
|
|
461
|
+
* with arkd for power-of-2 leaf counts.
|
|
462
|
+
*
|
|
457
463
|
* @param scripts - Raw tapscript bytes for each leaf
|
|
458
464
|
* @throws Error if the provided leaves cannot produce a valid Taproot tree
|
|
459
465
|
*/
|
|
@@ -893,16 +899,12 @@ declare class VtxoManager implements AsyncDisposable, IVtxoManager {
|
|
|
893
899
|
private getBoardingTimelock;
|
|
894
900
|
/** Returns the TapLeafScript for the boarding tapscript's exit (CSV) path. */
|
|
895
901
|
private getBoardingExitLeaf;
|
|
896
|
-
/** Returns the pkScript (output script) of the boarding tapscript. */
|
|
897
|
-
private getBoardingOutputScript;
|
|
898
902
|
/** Returns the onchain provider for fee estimation and broadcasting. */
|
|
899
903
|
private getOnchainProvider;
|
|
900
904
|
/** Returns the Ark provider for intent fee and server info lookups. */
|
|
901
905
|
private getArkProvider;
|
|
902
906
|
/** Returns the Bitcoin network configuration from the wallet. */
|
|
903
907
|
private getNetwork;
|
|
904
|
-
/** Returns the wallet's identity for transaction signing. */
|
|
905
|
-
private getIdentity;
|
|
906
908
|
private initializeSubscription;
|
|
907
909
|
/**
|
|
908
910
|
* VTXO_ALREADY_SPENT means the server's authoritative view of VTXO state
|
|
@@ -994,8 +996,8 @@ declare const networks: {
|
|
|
994
996
|
* Mainnet, mutinynet, and signet point at Ark Labs–operated
|
|
995
997
|
* mempool deployments (mempool.space-compatible esplora API).
|
|
996
998
|
* Testnet falls back to the public mempool.space deployment
|
|
997
|
-
* because Ark doesn't host it. Regtest assumes a local
|
|
998
|
-
* stack on the standard port.
|
|
999
|
+
* because Ark doesn't host it. Regtest assumes a local arkade-regtest
|
|
1000
|
+
* stack exposing mempool's esplora API on the standard port.
|
|
999
1001
|
*/
|
|
1000
1002
|
declare const ESPLORA_URL: Record<NetworkName, string>;
|
|
1001
1003
|
type ExplorerTransaction = {
|
|
@@ -1281,6 +1283,14 @@ interface ScanResult {
|
|
|
1281
1283
|
interface ScanContractsOptions {
|
|
1282
1284
|
/** Default 20. A non-positive / non-integer value throws. */
|
|
1283
1285
|
gapLimit?: number;
|
|
1286
|
+
/**
|
|
1287
|
+
* Number of HD indices probed concurrently per window (default
|
|
1288
|
+
* {@link DEFAULT_SCAN_BATCH}). Pure latency knob: the gap loop stays
|
|
1289
|
+
* gap-limit bounded and the discovered set is identical regardless of
|
|
1290
|
+
* batch size. A non-positive / non-integer value throws. Ignored when
|
|
1291
|
+
* `hd` is false (the static pass probes only index 0).
|
|
1292
|
+
*/
|
|
1293
|
+
batchSize?: number;
|
|
1284
1294
|
/** HD mode → unbounded gap loop guided by the gap counter; false → probe only index 0 (single static pass). */
|
|
1285
1295
|
hd: boolean;
|
|
1286
1296
|
/**
|
|
@@ -1581,6 +1591,19 @@ declare class ContractManager implements IContractManager {
|
|
|
1581
1591
|
* other handler hit it).
|
|
1582
1592
|
* - `persistAndWatchContract` rejecting is operational/fatal and
|
|
1583
1593
|
* propagates (only `discoverAt` is guarded).
|
|
1594
|
+
* - Within an index the handler probes run concurrently (independent
|
|
1595
|
+
* network reads); their hits are persisted sequentially in
|
|
1596
|
+
* `discoverables` order to preserve the first-wins collision tie-break.
|
|
1597
|
+
* - Indices are probed `batchSize` at a time (a second concurrency layer
|
|
1598
|
+
* over the per-index probes), but each window is CAPPED to
|
|
1599
|
+
* `gapLimit - unused` indices — the most a serial scan could still reach
|
|
1600
|
+
* before the gap window is guaranteed to close. So every index probed in
|
|
1601
|
+
* a window is one a one-index-at-a-time scan would also reach: nothing is
|
|
1602
|
+
* over-scanned, nothing is discarded, and `materialize`/`discoverAt` are
|
|
1603
|
+
* invoked on exactly the same index set. The window's hits are still
|
|
1604
|
+
* processed strictly in ascending index order, so the discovered set,
|
|
1605
|
+
* persisted rows, `lastIndexUsed`, and `handlerErrors` are byte-for-byte
|
|
1606
|
+
* identical to the serial path — only the wall-clock differs.
|
|
1584
1607
|
*/
|
|
1585
1608
|
scanContracts(opts: ScanContractsOptions): Promise<ScanResult>;
|
|
1586
1609
|
/**
|
|
@@ -1958,12 +1981,47 @@ interface DiscoveredContract {
|
|
|
1958
1981
|
interface DiscoveryDeps {
|
|
1959
1982
|
indexerProvider: IndexerProvider;
|
|
1960
1983
|
onchainProvider: OnchainProvider;
|
|
1984
|
+
/**
|
|
1985
|
+
* Ark-address network data. The `{ hrp }` shape is all the L2
|
|
1986
|
+
* (`default`/`delegate`) discovery path needs to render an Ark address.
|
|
1987
|
+
*/
|
|
1961
1988
|
network: {
|
|
1962
1989
|
hrp: string;
|
|
1963
1990
|
};
|
|
1991
|
+
/**
|
|
1992
|
+
* Full Bitcoin network descriptor for on-chain (P2TR) address
|
|
1993
|
+
* rendering. Required by the boarding discovery probe, which derives an
|
|
1994
|
+
* on-chain Taproot address via {@link VtxoScript.onchainAddress} — the
|
|
1995
|
+
* `{ hrp }`-only {@link DiscoveryDeps.network} lacks the `bech32` data
|
|
1996
|
+
* that needs. Absent only when no boarding discovery is plumbed (e.g.
|
|
1997
|
+
* the scanner unit harness), in which case boarding `discoverAt` no-ops.
|
|
1998
|
+
*/
|
|
1999
|
+
onchainNetwork?: Network;
|
|
2000
|
+
/**
|
|
2001
|
+
* The server's **current** signer key (x-only, 32 bytes), taken from a
|
|
2002
|
+
* fresh server-info snapshot at restore time. L2 (`default`/`delegate`)
|
|
2003
|
+
* discovery probes this key first.
|
|
2004
|
+
*/
|
|
1964
2005
|
serverPubKey: Uint8Array;
|
|
2006
|
+
/**
|
|
2007
|
+
* The server's **deprecated** signer keys (x-only, 32 bytes) from the same
|
|
2008
|
+
* snapshot. A VTXO minted under a now-rotated signer is anchored to a
|
|
2009
|
+
* different script; L2 discovery scans these keys alongside
|
|
2010
|
+
* {@link DiscoveryDeps.serverPubKey} so signer rotation does not strand
|
|
2011
|
+
* funds. Empty/absent when the server advertises no deprecated signers.
|
|
2012
|
+
* Boarding discovery does not consult this set (current UTXO set only).
|
|
2013
|
+
*/
|
|
2014
|
+
deprecatedSignerPubKeys?: Uint8Array[];
|
|
1965
2015
|
/** Relative timelocks the wallet treats as its baseline matrix. */
|
|
1966
2016
|
csvTimelocks: RelativeTimelock[];
|
|
2017
|
+
/**
|
|
2018
|
+
* Boarding-exit CSV timelock. Distinct from {@link DiscoveryDeps.csvTimelocks}
|
|
2019
|
+
* (the unilateral-exit matrix): boarding scripts source their CSV from the
|
|
2020
|
+
* server's boarding-exit delay. Present only when boarding discovery is
|
|
2021
|
+
* plumbed; when absent, boarding `discoverAt` no-ops (so the scanner unit
|
|
2022
|
+
* harness, which never sets it, is unaffected).
|
|
2023
|
+
*/
|
|
2024
|
+
boardingTimelock?: RelativeTimelock;
|
|
1967
2025
|
/** Present only for delegate wallets. */
|
|
1968
2026
|
delegatePubKey?: Uint8Array;
|
|
1969
2027
|
}
|
|
@@ -3919,4 +3977,4 @@ declare namespace ProtoTypes {
|
|
|
3919
3977
|
export { };
|
|
3920
3978
|
}
|
|
3921
3979
|
|
|
3922
|
-
export {
|
|
3980
|
+
export { type SignerSession as $, type ArkTransaction as A, type BatchStartedEvent as B, type ContractRepository as C, type DescriptorProvider as D, type ExtendedVirtualCoin as E, type IReadonlyWallet as F, type GetVtxosFilter as G, type ReadonlyIdentity as H, type IWallet as I, type DelegateProvider as J, type ReadonlyWalletConfig as K, type IReadonlyAssetManager as L, type NetworkName as M, type Network as N, type OnchainProvider as O, type ArkInfo as P, ArkAddress as Q, type Recipient as R, type SendBitcoinParams as S, type TxNotification as T, type Coin as U, VtxoScript as V, type WalletRepository as W, ContractManager as X, CSVMultisigTapscript as Y, type SettlementConfig as Z, VtxoManager as _, type Identity as a, type ExtendedContractVtxo as a$, type SignedIntent as a0, Intent as a1, type VtxoRepositoryKey as a2, type WalletState as a3, type ContractFilter as a4, type DescriptorSigningRequest as a5, Transaction as a6, type IntentFeeConfig as a7, type OffchainInput as a8, FeeAmount as a9, type ArkTapscript as aA, type Asset as aB, type AssetMetadata as aC, type BaseWalletConfig as aD, type BatchInfo as aE, type BatchSignableIdentity as aF, CLTVMultisigTapscript as aG, ChainTxType as aH, type CommitmentTx as aI, ConditionCSVMultisigTapscript as aJ, ConditionMultisigTapscript as aK, type ContractBalance as aL, type ContractEventCallback as aM, type ContractHandler as aN, type ContractManagerConfig as aO, type ContractState as aP, type ContractVtxo as aQ, ContractWatcher as aR, DelegateManagerImpl as aS, type DelegateOptions as aT, DelegatorManagerImpl as aU, type DelegatorProvider as aV, type Discoverable as aW, type DiscoveredContract as aX, type DiscoveryDeps as aY, ESPLORA_URL as aZ, EsploraProvider as a_, type OnchainInput as aa, type FeeOutput as ab, type ContractWatcherConfig as ac, type FeeInfo as ad, type CreateContractParams as ae, type GetContractsFilter as af, type GetSpendablePathsOptions as ag, type GetAllSpendingPathsOptions as ah, type IssuanceParams as ai, type ReissuanceParams as aj, type BurnParams as ak, type RenewVtxosOptions as al, type ContractWithVtxos as am, type PathSelection as an, type ContractEvent as ao, type AssetDetails as ap, type IssuanceResult as aq, type DelegateInfo as ar, type StorageConfig as as, type IVtxoManager as at, type ExplorerTransaction as au, type EncodedVtxoScript as av, type Status as aw, type Outpoint as ax, type ChainTx as ay, type PathContext as az, type WalletConfig as b, type HandlerError as b0, type IDelegatorManager as b1, IndexerTxType as b2, type KnownMetadata as b3, MultisigTapscript as b4, type Nonces as b5, type Output as b6, type PageResponse as b7, type PaginationOptions as b8, PartialSig as b9, getSequence as bA, isBatchSignable as bB, isDiscoverable as bC, isExpired as bD, isRecoverable as bE, isSpendable as bF, isSubdust as bG, isVtxoExpiringSoon as bH, networks as bI, type ProviderClass as ba, RestDelegateProvider as bb, RestDelegatorProvider as bc, type ScanContractsOptions as bd, type ScanResult as be, type ScheduledSession as bf, SettlementEventType as bg, type SignRequest as bh, type SubscriptionEvent as bi, type SubscriptionHeartbeat as bj, type TapLeaves as bk, TapTreeCoder as bl, TapscriptType as bm, type TreeNonces as bn, type TreePartialSigs as bo, type Tx as bp, type TxHistoryRecord as bq, type TxKey as br, type TxTreeNode as bs, TxType as bt, type VirtualStatus as bu, type Vtxo as bv, type VtxoChain as bw, type VtxoType as bx, type WalletMode as by, decodeTapscript as bz, type WalletBalance as c, type ExtendedCoin as d, type IContractManager as e, type IDelegateManager as f, type SettleParams as g, type SettlementEvent as h, type IAssetManager as i, RestArkProvider as j, RestIndexerProvider as k, type SubscriptionResponse as l, type ArkProvider as m, type IndexerProvider as n, type RelativeTimelock as o, type TapLeafScript as p, type VirtualCoin as q, type Contract as r, type TreeSigningStartedEvent as s, TxTree as t, type TreeNoncesEvent as u, type BatchFinalizationEvent as v, type BatchFinalizedEvent as w, type BatchFailedEvent as x, type TreeTxEvent as y, type TreeSignatureEvent as z };
|
|
@@ -454,6 +454,12 @@ declare class VtxoScript {
|
|
|
454
454
|
/**
|
|
455
455
|
* Create a virtual output script from its tapleaf scripts.
|
|
456
456
|
*
|
|
457
|
+
* The Taproot script tree is assembled using btcd's algorithm
|
|
458
|
+
* (`txscript.AssembleTaprootScriptTree`) so the derived taproot output
|
|
459
|
+
* key agrees with arkd for any leaf count. `@scure/btc-signer`'s
|
|
460
|
+
* default `taprootListToTree` is a Huffman builder that only agrees
|
|
461
|
+
* with arkd for power-of-2 leaf counts.
|
|
462
|
+
*
|
|
457
463
|
* @param scripts - Raw tapscript bytes for each leaf
|
|
458
464
|
* @throws Error if the provided leaves cannot produce a valid Taproot tree
|
|
459
465
|
*/
|
|
@@ -893,16 +899,12 @@ declare class VtxoManager implements AsyncDisposable, IVtxoManager {
|
|
|
893
899
|
private getBoardingTimelock;
|
|
894
900
|
/** Returns the TapLeafScript for the boarding tapscript's exit (CSV) path. */
|
|
895
901
|
private getBoardingExitLeaf;
|
|
896
|
-
/** Returns the pkScript (output script) of the boarding tapscript. */
|
|
897
|
-
private getBoardingOutputScript;
|
|
898
902
|
/** Returns the onchain provider for fee estimation and broadcasting. */
|
|
899
903
|
private getOnchainProvider;
|
|
900
904
|
/** Returns the Ark provider for intent fee and server info lookups. */
|
|
901
905
|
private getArkProvider;
|
|
902
906
|
/** Returns the Bitcoin network configuration from the wallet. */
|
|
903
907
|
private getNetwork;
|
|
904
|
-
/** Returns the wallet's identity for transaction signing. */
|
|
905
|
-
private getIdentity;
|
|
906
908
|
private initializeSubscription;
|
|
907
909
|
/**
|
|
908
910
|
* VTXO_ALREADY_SPENT means the server's authoritative view of VTXO state
|
|
@@ -994,8 +996,8 @@ declare const networks: {
|
|
|
994
996
|
* Mainnet, mutinynet, and signet point at Ark Labs–operated
|
|
995
997
|
* mempool deployments (mempool.space-compatible esplora API).
|
|
996
998
|
* Testnet falls back to the public mempool.space deployment
|
|
997
|
-
* because Ark doesn't host it. Regtest assumes a local
|
|
998
|
-
* stack on the standard port.
|
|
999
|
+
* because Ark doesn't host it. Regtest assumes a local arkade-regtest
|
|
1000
|
+
* stack exposing mempool's esplora API on the standard port.
|
|
999
1001
|
*/
|
|
1000
1002
|
declare const ESPLORA_URL: Record<NetworkName, string>;
|
|
1001
1003
|
type ExplorerTransaction = {
|
|
@@ -1281,6 +1283,14 @@ interface ScanResult {
|
|
|
1281
1283
|
interface ScanContractsOptions {
|
|
1282
1284
|
/** Default 20. A non-positive / non-integer value throws. */
|
|
1283
1285
|
gapLimit?: number;
|
|
1286
|
+
/**
|
|
1287
|
+
* Number of HD indices probed concurrently per window (default
|
|
1288
|
+
* {@link DEFAULT_SCAN_BATCH}). Pure latency knob: the gap loop stays
|
|
1289
|
+
* gap-limit bounded and the discovered set is identical regardless of
|
|
1290
|
+
* batch size. A non-positive / non-integer value throws. Ignored when
|
|
1291
|
+
* `hd` is false (the static pass probes only index 0).
|
|
1292
|
+
*/
|
|
1293
|
+
batchSize?: number;
|
|
1284
1294
|
/** HD mode → unbounded gap loop guided by the gap counter; false → probe only index 0 (single static pass). */
|
|
1285
1295
|
hd: boolean;
|
|
1286
1296
|
/**
|
|
@@ -1581,6 +1591,19 @@ declare class ContractManager implements IContractManager {
|
|
|
1581
1591
|
* other handler hit it).
|
|
1582
1592
|
* - `persistAndWatchContract` rejecting is operational/fatal and
|
|
1583
1593
|
* propagates (only `discoverAt` is guarded).
|
|
1594
|
+
* - Within an index the handler probes run concurrently (independent
|
|
1595
|
+
* network reads); their hits are persisted sequentially in
|
|
1596
|
+
* `discoverables` order to preserve the first-wins collision tie-break.
|
|
1597
|
+
* - Indices are probed `batchSize` at a time (a second concurrency layer
|
|
1598
|
+
* over the per-index probes), but each window is CAPPED to
|
|
1599
|
+
* `gapLimit - unused` indices — the most a serial scan could still reach
|
|
1600
|
+
* before the gap window is guaranteed to close. So every index probed in
|
|
1601
|
+
* a window is one a one-index-at-a-time scan would also reach: nothing is
|
|
1602
|
+
* over-scanned, nothing is discarded, and `materialize`/`discoverAt` are
|
|
1603
|
+
* invoked on exactly the same index set. The window's hits are still
|
|
1604
|
+
* processed strictly in ascending index order, so the discovered set,
|
|
1605
|
+
* persisted rows, `lastIndexUsed`, and `handlerErrors` are byte-for-byte
|
|
1606
|
+
* identical to the serial path — only the wall-clock differs.
|
|
1584
1607
|
*/
|
|
1585
1608
|
scanContracts(opts: ScanContractsOptions): Promise<ScanResult>;
|
|
1586
1609
|
/**
|
|
@@ -1958,12 +1981,47 @@ interface DiscoveredContract {
|
|
|
1958
1981
|
interface DiscoveryDeps {
|
|
1959
1982
|
indexerProvider: IndexerProvider;
|
|
1960
1983
|
onchainProvider: OnchainProvider;
|
|
1984
|
+
/**
|
|
1985
|
+
* Ark-address network data. The `{ hrp }` shape is all the L2
|
|
1986
|
+
* (`default`/`delegate`) discovery path needs to render an Ark address.
|
|
1987
|
+
*/
|
|
1961
1988
|
network: {
|
|
1962
1989
|
hrp: string;
|
|
1963
1990
|
};
|
|
1991
|
+
/**
|
|
1992
|
+
* Full Bitcoin network descriptor for on-chain (P2TR) address
|
|
1993
|
+
* rendering. Required by the boarding discovery probe, which derives an
|
|
1994
|
+
* on-chain Taproot address via {@link VtxoScript.onchainAddress} — the
|
|
1995
|
+
* `{ hrp }`-only {@link DiscoveryDeps.network} lacks the `bech32` data
|
|
1996
|
+
* that needs. Absent only when no boarding discovery is plumbed (e.g.
|
|
1997
|
+
* the scanner unit harness), in which case boarding `discoverAt` no-ops.
|
|
1998
|
+
*/
|
|
1999
|
+
onchainNetwork?: Network;
|
|
2000
|
+
/**
|
|
2001
|
+
* The server's **current** signer key (x-only, 32 bytes), taken from a
|
|
2002
|
+
* fresh server-info snapshot at restore time. L2 (`default`/`delegate`)
|
|
2003
|
+
* discovery probes this key first.
|
|
2004
|
+
*/
|
|
1964
2005
|
serverPubKey: Uint8Array;
|
|
2006
|
+
/**
|
|
2007
|
+
* The server's **deprecated** signer keys (x-only, 32 bytes) from the same
|
|
2008
|
+
* snapshot. A VTXO minted under a now-rotated signer is anchored to a
|
|
2009
|
+
* different script; L2 discovery scans these keys alongside
|
|
2010
|
+
* {@link DiscoveryDeps.serverPubKey} so signer rotation does not strand
|
|
2011
|
+
* funds. Empty/absent when the server advertises no deprecated signers.
|
|
2012
|
+
* Boarding discovery does not consult this set (current UTXO set only).
|
|
2013
|
+
*/
|
|
2014
|
+
deprecatedSignerPubKeys?: Uint8Array[];
|
|
1965
2015
|
/** Relative timelocks the wallet treats as its baseline matrix. */
|
|
1966
2016
|
csvTimelocks: RelativeTimelock[];
|
|
2017
|
+
/**
|
|
2018
|
+
* Boarding-exit CSV timelock. Distinct from {@link DiscoveryDeps.csvTimelocks}
|
|
2019
|
+
* (the unilateral-exit matrix): boarding scripts source their CSV from the
|
|
2020
|
+
* server's boarding-exit delay. Present only when boarding discovery is
|
|
2021
|
+
* plumbed; when absent, boarding `discoverAt` no-ops (so the scanner unit
|
|
2022
|
+
* harness, which never sets it, is unaffected).
|
|
2023
|
+
*/
|
|
2024
|
+
boardingTimelock?: RelativeTimelock;
|
|
1967
2025
|
/** Present only for delegate wallets. */
|
|
1968
2026
|
delegatePubKey?: Uint8Array;
|
|
1969
2027
|
}
|
|
@@ -3919,4 +3977,4 @@ declare namespace ProtoTypes {
|
|
|
3919
3977
|
export { };
|
|
3920
3978
|
}
|
|
3921
3979
|
|
|
3922
|
-
export {
|
|
3980
|
+
export { type SignerSession as $, type ArkTransaction as A, type BatchStartedEvent as B, type ContractRepository as C, type DescriptorProvider as D, type ExtendedVirtualCoin as E, type IReadonlyWallet as F, type GetVtxosFilter as G, type ReadonlyIdentity as H, type IWallet as I, type DelegateProvider as J, type ReadonlyWalletConfig as K, type IReadonlyAssetManager as L, type NetworkName as M, type Network as N, type OnchainProvider as O, type ArkInfo as P, ArkAddress as Q, type Recipient as R, type SendBitcoinParams as S, type TxNotification as T, type Coin as U, VtxoScript as V, type WalletRepository as W, ContractManager as X, CSVMultisigTapscript as Y, type SettlementConfig as Z, VtxoManager as _, type Identity as a, type ExtendedContractVtxo as a$, type SignedIntent as a0, Intent as a1, type VtxoRepositoryKey as a2, type WalletState as a3, type ContractFilter as a4, type DescriptorSigningRequest as a5, Transaction as a6, type IntentFeeConfig as a7, type OffchainInput as a8, FeeAmount as a9, type ArkTapscript as aA, type Asset as aB, type AssetMetadata as aC, type BaseWalletConfig as aD, type BatchInfo as aE, type BatchSignableIdentity as aF, CLTVMultisigTapscript as aG, ChainTxType as aH, type CommitmentTx as aI, ConditionCSVMultisigTapscript as aJ, ConditionMultisigTapscript as aK, type ContractBalance as aL, type ContractEventCallback as aM, type ContractHandler as aN, type ContractManagerConfig as aO, type ContractState as aP, type ContractVtxo as aQ, ContractWatcher as aR, DelegateManagerImpl as aS, type DelegateOptions as aT, DelegatorManagerImpl as aU, type DelegatorProvider as aV, type Discoverable as aW, type DiscoveredContract as aX, type DiscoveryDeps as aY, ESPLORA_URL as aZ, EsploraProvider as a_, type OnchainInput as aa, type FeeOutput as ab, type ContractWatcherConfig as ac, type FeeInfo as ad, type CreateContractParams as ae, type GetContractsFilter as af, type GetSpendablePathsOptions as ag, type GetAllSpendingPathsOptions as ah, type IssuanceParams as ai, type ReissuanceParams as aj, type BurnParams as ak, type RenewVtxosOptions as al, type ContractWithVtxos as am, type PathSelection as an, type ContractEvent as ao, type AssetDetails as ap, type IssuanceResult as aq, type DelegateInfo as ar, type StorageConfig as as, type IVtxoManager as at, type ExplorerTransaction as au, type EncodedVtxoScript as av, type Status as aw, type Outpoint as ax, type ChainTx as ay, type PathContext as az, type WalletConfig as b, type HandlerError as b0, type IDelegatorManager as b1, IndexerTxType as b2, type KnownMetadata as b3, MultisigTapscript as b4, type Nonces as b5, type Output as b6, type PageResponse as b7, type PaginationOptions as b8, PartialSig as b9, getSequence as bA, isBatchSignable as bB, isDiscoverable as bC, isExpired as bD, isRecoverable as bE, isSpendable as bF, isSubdust as bG, isVtxoExpiringSoon as bH, networks as bI, type ProviderClass as ba, RestDelegateProvider as bb, RestDelegatorProvider as bc, type ScanContractsOptions as bd, type ScanResult as be, type ScheduledSession as bf, SettlementEventType as bg, type SignRequest as bh, type SubscriptionEvent as bi, type SubscriptionHeartbeat as bj, type TapLeaves as bk, TapTreeCoder as bl, TapscriptType as bm, type TreeNonces as bn, type TreePartialSigs as bo, type Tx as bp, type TxHistoryRecord as bq, type TxKey as br, type TxTreeNode as bs, TxType as bt, type VirtualStatus as bu, type Vtxo as bv, type VtxoChain as bw, type VtxoType as bx, type WalletMode as by, decodeTapscript as bz, type WalletBalance as c, type ExtendedCoin as d, type IContractManager as e, type IDelegateManager as f, type SettleParams as g, type SettlementEvent as h, type IAssetManager as i, RestArkProvider as j, RestIndexerProvider as k, type SubscriptionResponse as l, type ArkProvider as m, type IndexerProvider as n, type RelativeTimelock as o, type TapLeafScript as p, type VirtualCoin as q, type Contract as r, type TreeSigningStartedEvent as s, TxTree as t, type TreeNoncesEvent as u, type BatchFinalizationEvent as v, type BatchFinalizedEvent as w, type BatchFailedEvent as x, type TreeTxEvent as y, type TreeSignatureEvent as z };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { RestArkProvider, isFetchTimeoutError, RestIndexerProvider } from './chunk-
|
|
2
|
-
import { DEFAULT_ARKADE_SERVER_URL } from './chunk-
|
|
1
|
+
import { RestArkProvider, isFetchTimeoutError, RestIndexerProvider } from './chunk-FXFBPXV3.js';
|
|
2
|
+
import { DEFAULT_ARKADE_SERVER_URL } from './chunk-OUVTG72A.js';
|
|
3
3
|
|
|
4
4
|
// src/providers/expoUtils.ts
|
|
5
5
|
async function getExpoFetch(options) {
|
|
@@ -206,5 +206,5 @@ var ExpoIndexerProvider = class extends RestIndexerProvider {
|
|
|
206
206
|
};
|
|
207
207
|
|
|
208
208
|
export { ExpoArkProvider, ExpoIndexerProvider };
|
|
209
|
-
//# sourceMappingURL=chunk-
|
|
210
|
-
//# sourceMappingURL=chunk-
|
|
209
|
+
//# sourceMappingURL=chunk-5WDBHWX3.js.map
|
|
210
|
+
//# sourceMappingURL=chunk-5WDBHWX3.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/providers/expoUtils.ts","../src/providers/expoArk.ts","../src/providers/expoIndexer.ts"],"names":[],"mappings":";;;;AAIA,eAAsB,aAAa,OAAA,EAA4D;AAG3F,EAAA,IAAI;AACA,IAAA,MAAM,eAAA,GAAkB,MAAM,OAAO,YAAY,CAAA;AACjD,IAAA,OAAA,CAAQ,MAAM,gCAAgC,CAAA;AAC9C,IAAA,OAAO,eAAA,CAAgB,KAAA;AAAA,EAC3B,SAAS,KAAA,EAAO;AAQZ,IAAA,OAAA,CAAQ,IAAA;AAAA,MACJ,wGAAA;AAAA,MAEA;AAAA,KACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AACJ;AAYA,gBAAuB,iBAAA,CACnB,GAAA,EACA,WAAA,EACA,OAAA,EACA,SACA,SAAA,EACgC;AAChC,EAAA,MAAM,eAAA,GAAkB,IAAI,eAAA,EAAgB;AAC5C,EAAA,MAAM,OAAA,GAAU,MAAM,eAAA,CAAgB,KAAA,EAAM;AAC5C,EAAA,WAAA,EAAa,iBAAiB,OAAA,EAAS,OAAA,EAAS,EAAE,IAAA,EAAM,MAAM,CAAA;AAE9D,EAAA,IAAI;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,OAAA,CAAQ,GAAA,EAAK;AAAA,MAChC,OAAA,EAAS;AAAA,QACL,MAAA,EAAQ,mBAAA;AAAA,QACR,GAAG;AAAA,OACP;AAAA,MACA,QAAQ,eAAA,CAAgB;AAAA,KAC3B,CAAA;AAED,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,QAAA,CAAS,MAAM,CAAA,yBAAA,CAA2B,CAAA;AAAA,IACnF;AAEA,IAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAChB,MAAA,MAAM,IAAI,MAAM,uBAAuB,CAAA;AAAA,IAC3C;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,IAAA,CAAK,SAAA,EAAU;AACvC,IAAA,MAAM,OAAA,GAAU,IAAI,WAAA,EAAY;AAChC,IAAA,IAAI,MAAA,GAAS,EAAA;AAEb,IAAA,OAAO,CAAC,aAAa,OAAA,EAAS;AAC1B,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,OAAO,IAAA,EAAK;AAC1C,MAAA,IAAI,IAAA,EAAM;AACN,QAAA;AAAA,MACJ;AAEA,MAAA,MAAA,IAAU,QAAQ,MAAA,CAAO,KAAA,EAAO,EAAE,MAAA,EAAQ,MAAM,CAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,CAAM,IAAI,CAAA;AAE/B,MAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,GAAG,CAAA,EAAA,EAAK;AACvC,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,CAAC,CAAA,CAAE,IAAA,EAAK;AAC3B,QAAA,IAAI,CAAC,IAAA,EAAM;AAEX,QAAA,IAAI,IAAA,CAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AAC1B,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,SAAA,CAAU,CAAC,EAAE,IAAA,EAAK;AACvC,UAAA,IAAI,CAAC,OAAA,EAAS;AAEd,UAAA,IAAI;AACA,YAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAC/B,YAAA,MAAM,MAAA,GAAS,UAAU,IAAI,CAAA;AAC7B,YAAA,IAAI,WAAW,IAAA,EAAM;AACjB,cAAA,MAAM,MAAA;AAAA,YACV;AAAA,UACJ,SAAS,UAAA,EAAY;AACjB,YAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,UAAU,CAAA;AACrD,YAAA,MAAM,UAAA;AAAA,UACV;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,MAAA,GAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA;AAAA,IACnC;AAAA,EACJ,CAAA,SAAE;AACE,IAAA,WAAA,EAAa,mBAAA,CAAoB,SAAS,OAAO,CAAA;AAAA,EACrD;AACJ;;;ACxFO,IAAM,eAAA,GAAN,cAA8B,eAAA,CAAgB;AAAA,EACjD,WAAA,CAAY,YAAoB,yBAAA,EAA2B;AACvD,IAAA,KAAA,CAAM,SAAS,CAAA;AAAA,EACnB;AAAA,EAEA,OAAgB,cAAA,CACZ,MAAA,EACA,MAAA,EACsC;AACtC,IAAA,MAAM,SAAA,GAAY,MAAM,YAAA,EAAa;AACrC,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,gBAAA,CAAA;AAC7B,IAAA,MAAM,cACF,MAAA,CAAO,MAAA,GAAS,IACV,CAAA,CAAA,EAAI,MAAA,CAAO,IAAI,CAAC,KAAA,KAAU,CAAA,OAAA,EAAU,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAE,EAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,GAC1E,EAAA;AAEV,IAAA,OAAO,CAAC,QAAQ,OAAA,EAAS;AACrB,MAAA,IAAI;AACA,QAAA,OAAO,iBAAA,CAAkB,MAAM,WAAA,EAAa,MAAA,EAAQ,WAAW,EAAC,EAAG,CAAC,IAAA,KAAS;AAGzE,UAAA,MAAM,SAAA,GAAY,KAAK,MAAA,IAAU,IAAA;AAGjC,UAAA,IAAI,SAAA,CAAU,cAAc,KAAA,CAAA,EAAW;AACnC,YAAA,OAAO,IAAA;AAAA,UACX;AAEA,UAAA,OAAO,IAAA,CAAK,qBAAqB,SAAS,CAAA;AAAA,QAC9C,CAAC,CAAA;AAAA,MACL,SAAS,KAAA,EAAO;AACZ,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACvD,UAAA;AAAA,QACJ;AAIA,QAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC5B,UAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AACrC,UAAA;AAAA,QACJ;AAEA,QAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuB,KAAK,CAAA;AAC1C,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,OAAgB,sBAAsB,MAAA,EAGnC;AACC,IAAA,MAAM,SAAA,GAAY,MAAM,YAAA,EAAa;AACrC,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,SAAS,CAAA,OAAA,CAAA;AAE7B,IAAA,OAAO,CAAC,QAAQ,OAAA,EAAS;AACrB,MAAA,IAAI;AACA,QAAA,OAAO,kBAAkB,GAAA,EAAK,MAAA,EAAQ,WAAW,EAAC,EAAG,CAAC,IAAA,KAAS;AAC3D,UAAA,OAAO,IAAA,CAAK,4BAAA,CAA6B,IAAA,CAAK,MAAM,CAAA;AAAA,QACxD,CAAC,CAAA;AAAA,MACL,SAAS,KAAA,EAAO;AACZ,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACvD,UAAA;AAAA,QACJ;AAIA,QAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC5B,UAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AACrC,UAAA;AAAA,QACJ;AAEA,QAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAChD,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ;;;ACvFA,SAAS,YAAY,IAAA,EAAyB;AAC1C,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAK,QAAA,CAAS,IAAA;AAAA,IACpB,IAAA,EAAM,KAAK,QAAA,CAAS,IAAA;AAAA,IACpB,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,IACzB,MAAA,EAAQ;AAAA,MACJ,SAAA,EAAW,CAAC,IAAA,CAAK,OAAA,IAAW,CAAC,IAAA,CAAK,cAAA;AAAA,MAClC,MAAA,EAAQ,CAAC,IAAA,CAAK;AAAA,KAClB;AAAA,IACA,aAAA,EAAe;AAAA,MACX,OAAO,IAAA,CAAK,OAAA,GAAU,OAAA,GAAU,IAAA,CAAK,iBAAiB,cAAA,GAAiB,SAAA;AAAA,MACvE,iBAAiB,IAAA,CAAK,eAAA;AAAA,MACtB,aAAa,IAAA,CAAK,SAAA,GAAY,OAAO,IAAA,CAAK,SAAS,IAAI,GAAA,GAAO;AAAA,KAClE;AAAA,IACA,OAAA,EAAS,KAAK,OAAA,IAAW,EAAA;AAAA,IACzB,WAAW,IAAA,CAAK,SAAA;AAAA,IAChB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,WAAW,IAAI,IAAA,CAAK,OAAO,IAAA,CAAK,SAAS,IAAI,GAAI,CAAA;AAAA,IACjD,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MAC7B,SAAS,CAAA,CAAE,OAAA;AAAA,MACX,MAAA,EAAQ,MAAA,CAAO,CAAA,CAAE,MAAM;AAAA,KAC3B,CAAE;AAAA,GACN;AACJ;AAeO,IAAM,mBAAA,GAAN,cAAkC,mBAAA,CAAoB;AAAA,EACzD,WAAA,CAAY,YAAoB,yBAAA,EAA2B;AACvD,IAAA,KAAA,CAAM,SAAS,CAAA;AAAA,EACnB;AAAA,EAEA,OAAgB,eAAA,CACZ,cAAA,EACA,WAAA,EAC2C;AAE3C,IAAA,MAAM,aAAA,GACF,OAAO,SAAA,KAAc,WAAA,IAAe,UAAU,OAAA,KAAY,aAAA;AAE9D,IAAA,MAAM,YAAY,MAAM,YAAA,EAAa,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AAEpD,MAAA,IAAI,aAAA,EAAe;AACf,QAAA,MAAM,IAAI,KAAA;AAAA,UACN;AAAA,SAGJ;AAAA,MACJ;AACA,MAAA,MAAM,KAAA;AAAA,IACV,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAAM,CAAA,EAAG,IAAA,CAAK,SAAS,mCAAmC,cAAc,CAAA,CAAA;AAE9E,IAAA,OAAO,CAAC,YAAY,OAAA,EAAS;AACzB,MAAA,IAAI;AACA,QAAA,OAAO,iBAAA;AAAA,UACH,GAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA;AAAA,UACA,EAAE,gBAAgB,kBAAA,EAAmB;AAAA,UACrC,CAAC,IAAA,KAAsC;AAEnC,YAAA,IAAI,IAAA,CAAK,cAAc,KAAA,CAAA,EAAW;AAE9B,cAAA,OAAO,IAAA;AAAA,YACX;AAEA,YAAA,IAAI,KAAK,KAAA,EAAO;AACZ,cAAA,OAAO;AAAA,gBACH,IAAA,EAAM,KAAK,KAAA,CAAM,IAAA;AAAA,gBACjB,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAC;AAAA,gBAChC,WAAW,IAAA,CAAK,KAAA,CAAM,YAAY,EAAC,EAAG,IAAI,WAAW,CAAA;AAAA,gBACrD,aAAa,IAAA,CAAK,KAAA,CAAM,cAAc,EAAC,EAAG,IAAI,WAAW,CAAA;AAAA,gBACzD,aAAa,IAAA,CAAK,KAAA,CAAM,cAAc,EAAC,EAAG,IAAI,WAAW,CAAA;AAAA,gBACzD,EAAA,EAAI,KAAK,KAAA,CAAM,EAAA;AAAA,gBACf,aAAA,EAAe,KAAK,KAAA,CAAM;AAAA,eAC9B;AAAA,YACJ;AACA,YAAA,OAAO,IAAA;AAAA,UACX;AAAA,SACJ;AAAA,MACJ,SAAS,KAAA,EAAO;AACZ,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACvD,UAAA;AAAA,QACJ;AAIA,QAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC5B,UAAA,OAAA,CAAQ,MAAM,uBAAuB,CAAA;AACrC,UAAA;AAAA,QACJ;AAEA,QAAA,OAAA,CAAQ,KAAA,CAAM,uBAAuB,KAAK,CAAA;AAC1C,QAAA,MAAM,KAAA;AAAA,MACV;AAAA,IACJ;AAAA,EACJ;AACJ","file":"chunk-L6ZETTX3.js","sourcesContent":["/**\n * Dynamically imports expo/fetch with fallback to standard fetch.\n * @returns A fetch function suitable for SSE streaming\n */\nexport async function getExpoFetch(options?: { requireExpo?: boolean }): Promise<typeof fetch> {\n const requireExpo = options?.requireExpo ?? false;\n\n try {\n const expoFetchModule = await import(\"expo/fetch\");\n console.debug(\"Using expo/fetch for streaming\");\n return expoFetchModule.fetch as unknown as typeof fetch;\n } catch (error) {\n if (requireExpo) {\n throw new Error(\n \"expo/fetch is unavailable in this environment. \" +\n \"Please ensure expo/fetch is installed and properly configured.\",\n );\n }\n\n console.warn(\n \"Using standard fetch instead of expo/fetch. \" +\n \"Streaming may not be fully supported in some environments.\",\n error,\n );\n return fetch;\n }\n}\n\n/**\n * Generic SSE stream processor using fetch API with ReadableStream.\n * Handles SSE format parsing, buffer management, and abort signals.\n *\n * @param url - The SSE endpoint URL\n * @param abortSignal - Signal to abort the stream\n * @param fetchFn - Fetch function to use (defaults to standard fetch)\n * @param headers - Additional headers to send\n * @param parseData - Function to parse and yield data from SSE events\n */\nexport async function* sseStreamIterator<T>(\n url: string,\n abortSignal: AbortSignal,\n fetchFn: typeof fetch,\n headers: Record<string, string>,\n parseData: (data: any) => T | null,\n): AsyncGenerator<T, void, unknown> {\n const fetchController = new AbortController();\n const cleanup = () => fetchController.abort();\n abortSignal?.addEventListener(\"abort\", cleanup, { once: true });\n\n try {\n const response = await fetchFn(url, {\n headers: {\n Accept: \"text/event-stream\",\n ...headers,\n },\n signal: fetchController.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status} when fetching SSE stream`);\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (!abortSignal?.aborted) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n\n for (let i = 0; i < lines.length - 1; i++) {\n const line = lines[i].trim();\n if (!line) continue;\n\n if (line.startsWith(\"data:\")) {\n const jsonStr = line.substring(5).trim();\n if (!jsonStr) continue;\n\n try {\n const data = JSON.parse(jsonStr);\n const parsed = parseData(data);\n if (parsed !== null) {\n yield parsed;\n }\n } catch (parseError) {\n console.error(\"Failed to parse SSE data:\", parseError);\n throw parseError;\n }\n }\n }\n\n buffer = lines[lines.length - 1];\n }\n } finally {\n abortSignal?.removeEventListener(\"abort\", cleanup);\n }\n}\n","import { DEFAULT_ARKADE_SERVER_URL } from \"../networks\";\nimport { RestArkProvider, SettlementEvent, TxNotification, isFetchTimeoutError } from \"./ark\";\nimport { getExpoFetch, sseStreamIterator } from \"./expoUtils\";\n\n/**\n * Expo-compatible Arkade provider implementation using expo/fetch for SSE support.\n * This provider works specifically in React Native/Expo environments where\n * standard EventSource is not available but expo/fetch provides SSE capabilities.\n *\n * @example\n * ```typescript\n * import { ExpoArkProvider } from '@arkade-os/sdk/providers/expo';\n *\n * const provider = new ExpoArkProvider('https://arkade.computer');\n * const info = await provider.getInfo();\n * ```\n */\nexport class ExpoArkProvider extends RestArkProvider {\n constructor(serverUrl: string = DEFAULT_ARKADE_SERVER_URL) {\n super(serverUrl);\n }\n\n override async *getEventStream(\n signal: AbortSignal,\n topics: string[],\n ): AsyncIterableIterator<SettlementEvent> {\n const expoFetch = await getExpoFetch();\n const url = `${this.serverUrl}/v1/batch/events`;\n const queryParams =\n topics.length > 0\n ? `?${topics.map((topic) => `topics=${encodeURIComponent(topic)}`).join(\"&\")}`\n : \"\";\n\n while (!signal?.aborted) {\n try {\n yield* sseStreamIterator(url + queryParams, signal, expoFetch, {}, (data) => {\n // Handle different response structures\n // v8 mesh API might wrap in {result: ...} or send directly\n const eventData = data.result || data;\n\n // Skip heartbeat messages\n if (eventData.heartbeat !== undefined) {\n return null;\n }\n\n return this.parseSettlementEvent(eventData);\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Event stream error:\", error);\n throw error;\n }\n }\n }\n\n override async *getTransactionsStream(signal: AbortSignal): AsyncIterableIterator<{\n commitmentTx?: TxNotification;\n arkTx?: TxNotification;\n }> {\n const expoFetch = await getExpoFetch();\n const url = `${this.serverUrl}/v1/txs`;\n\n while (!signal?.aborted) {\n try {\n yield* sseStreamIterator(url, signal, expoFetch, {}, (data) => {\n return this.parseTransactionNotification(data.result);\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Transaction stream error:\", error);\n throw error;\n }\n }\n }\n}\n","import { RestIndexerProvider, SubscriptionResponse, Vtxo } from \"./indexer\";\nimport { isFetchTimeoutError } from \"./ark\";\nimport { VirtualCoin } from \"../wallet\";\nimport { getExpoFetch, sseStreamIterator } from \"./expoUtils\";\nimport { DEFAULT_ARKADE_SERVER_URL } from \"../networks\";\n\n// Helper function to convert Vtxo to VirtualCoin (same as in indexer.ts)\nfunction convertVtxo(vtxo: Vtxo): VirtualCoin {\n return {\n txid: vtxo.outpoint.txid,\n vout: vtxo.outpoint.vout,\n value: Number(vtxo.amount),\n status: {\n confirmed: !vtxo.isSwept && !vtxo.isPreconfirmed,\n isLeaf: !vtxo.isPreconfirmed,\n },\n virtualStatus: {\n state: vtxo.isSwept ? \"swept\" : vtxo.isPreconfirmed ? \"preconfirmed\" : \"settled\",\n commitmentTxIds: vtxo.commitmentTxids,\n batchExpiry: vtxo.expiresAt ? Number(vtxo.expiresAt) * 1000 : undefined,\n },\n spentBy: vtxo.spentBy ?? \"\",\n settledBy: vtxo.settledBy,\n arkTxId: vtxo.arkTxid,\n createdAt: new Date(Number(vtxo.createdAt) * 1000),\n isUnrolled: vtxo.isUnrolled,\n isSpent: vtxo.isSpent,\n script: vtxo.script,\n assets: vtxo.assets?.map((a) => ({\n assetId: a.assetId,\n amount: BigInt(a.amount),\n })),\n };\n}\n\n/**\n * Expo-compatible Indexer provider implementation using expo/fetch for streaming support.\n * This provider works specifically in React Native/Expo environments where\n * standard fetch streaming may not work properly but expo/fetch provides streaming capabilities.\n *\n * @example\n * ```typescript\n * import { ExpoIndexerProvider } from '@arkade-os/sdk/adapters/expo';\n *\n * const provider = new ExpoIndexerProvider('https://indexer.example.com');\n * const vtxos = await provider.getVtxos({ scripts: ['script1'] });\n * ```\n */\nexport class ExpoIndexerProvider extends RestIndexerProvider {\n constructor(serverUrl: string = DEFAULT_ARKADE_SERVER_URL) {\n super(serverUrl);\n }\n\n override async *getSubscription(\n subscriptionId: string,\n abortSignal: AbortSignal,\n ): AsyncIterableIterator<SubscriptionResponse> {\n // Detect if we're running in React Native/Expo environment\n const isReactNative =\n typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\n\n const expoFetch = await getExpoFetch().catch((error) => {\n // In React Native/Expo, expo/fetch is required for proper streaming support\n if (isReactNative) {\n throw new Error(\n \"expo/fetch is unavailable in React Native environment. \" +\n \"Please ensure expo/fetch is installed and properly configured. \" +\n \"Streaming support may not work with standard fetch in React Native.\",\n );\n }\n throw error;\n });\n\n const url = `${this.serverUrl}/v1/indexer/script/subscription/${subscriptionId}`;\n\n while (!abortSignal.aborted) {\n try {\n yield* sseStreamIterator(\n url,\n abortSignal,\n expoFetch,\n { \"Content-Type\": \"application/json\" },\n (data): SubscriptionResponse | null => {\n // Handle new v8 proto format with heartbeat or event\n if (data.heartbeat !== undefined) {\n // Skip heartbeat messages\n return null;\n }\n // Process event messages\n if (data.event) {\n return {\n txid: data.event.txid,\n scripts: data.event.scripts || [],\n newVtxos: (data.event.newVtxos || []).map(convertVtxo),\n spentVtxos: (data.event.spentVtxos || []).map(convertVtxo),\n sweptVtxos: (data.event.sweptVtxos || []).map(convertVtxo),\n tx: data.event.tx,\n checkpointTxs: data.event.checkpointTxs,\n };\n }\n return null;\n },\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Subscription error:\", error);\n throw error;\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/providers/expoUtils.ts","../src/providers/expoArk.ts","../src/providers/expoIndexer.ts"],"names":[],"mappings":"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","file":"chunk-5WDBHWX3.js","sourcesContent":["/**\n * Dynamically imports expo/fetch with fallback to standard fetch.\n * @returns A fetch function suitable for SSE streaming\n */\nexport async function getExpoFetch(options?: { requireExpo?: boolean }): Promise<typeof fetch> {\n const requireExpo = options?.requireExpo ?? false;\n\n try {\n const expoFetchModule = await import(\"expo/fetch\");\n console.debug(\"Using expo/fetch for streaming\");\n return expoFetchModule.fetch as unknown as typeof fetch;\n } catch (error) {\n if (requireExpo) {\n throw new Error(\n \"expo/fetch is unavailable in this environment. \" +\n \"Please ensure expo/fetch is installed and properly configured.\",\n );\n }\n\n console.warn(\n \"Using standard fetch instead of expo/fetch. \" +\n \"Streaming may not be fully supported in some environments.\",\n error,\n );\n return fetch;\n }\n}\n\n/**\n * Generic SSE stream processor using fetch API with ReadableStream.\n * Handles SSE format parsing, buffer management, and abort signals.\n *\n * @param url - The SSE endpoint URL\n * @param abortSignal - Signal to abort the stream\n * @param fetchFn - Fetch function to use (defaults to standard fetch)\n * @param headers - Additional headers to send\n * @param parseData - Function to parse and yield data from SSE events\n */\nexport async function* sseStreamIterator<T>(\n url: string,\n abortSignal: AbortSignal,\n fetchFn: typeof fetch,\n headers: Record<string, string>,\n parseData: (data: any) => T | null,\n): AsyncGenerator<T, void, unknown> {\n const fetchController = new AbortController();\n const cleanup = () => fetchController.abort();\n abortSignal?.addEventListener(\"abort\", cleanup, { once: true });\n\n try {\n const response = await fetchFn(url, {\n headers: {\n Accept: \"text/event-stream\",\n ...headers,\n },\n signal: fetchController.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Unexpected status ${response.status} when fetching SSE stream`);\n }\n\n if (!response.body) {\n throw new Error(\"Response body is null\");\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n while (!abortSignal?.aborted) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split(\"\\n\");\n\n for (let i = 0; i < lines.length - 1; i++) {\n const line = lines[i].trim();\n if (!line) continue;\n\n if (line.startsWith(\"data:\")) {\n const jsonStr = line.substring(5).trim();\n if (!jsonStr) continue;\n\n try {\n const data = JSON.parse(jsonStr);\n const parsed = parseData(data);\n if (parsed !== null) {\n yield parsed;\n }\n } catch (parseError) {\n console.error(\"Failed to parse SSE data:\", parseError);\n throw parseError;\n }\n }\n }\n\n buffer = lines[lines.length - 1];\n }\n } finally {\n abortSignal?.removeEventListener(\"abort\", cleanup);\n }\n}\n","import { DEFAULT_ARKADE_SERVER_URL } from \"../networks\";\nimport { RestArkProvider, SettlementEvent, TxNotification, isFetchTimeoutError } from \"./ark\";\nimport { getExpoFetch, sseStreamIterator } from \"./expoUtils\";\n\n/**\n * Expo-compatible Arkade provider implementation using expo/fetch for SSE support.\n * This provider works specifically in React Native/Expo environments where\n * standard EventSource is not available but expo/fetch provides SSE capabilities.\n *\n * @example\n * ```typescript\n * import { ExpoArkProvider } from '@arkade-os/sdk/providers/expo';\n *\n * const provider = new ExpoArkProvider('https://arkade.computer');\n * const info = await provider.getInfo();\n * ```\n */\nexport class ExpoArkProvider extends RestArkProvider {\n constructor(serverUrl: string = DEFAULT_ARKADE_SERVER_URL) {\n super(serverUrl);\n }\n\n override async *getEventStream(\n signal: AbortSignal,\n topics: string[],\n ): AsyncIterableIterator<SettlementEvent> {\n const expoFetch = await getExpoFetch();\n const url = `${this.serverUrl}/v1/batch/events`;\n const queryParams =\n topics.length > 0\n ? `?${topics.map((topic) => `topics=${encodeURIComponent(topic)}`).join(\"&\")}`\n : \"\";\n\n while (!signal?.aborted) {\n try {\n yield* sseStreamIterator(url + queryParams, signal, expoFetch, {}, (data) => {\n // Handle different response structures\n // v8 mesh API might wrap in {result: ...} or send directly\n const eventData = data.result || data;\n\n // Skip heartbeat messages\n if (eventData.heartbeat !== undefined) {\n return null;\n }\n\n return this.parseSettlementEvent(eventData);\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Event stream error:\", error);\n throw error;\n }\n }\n }\n\n override async *getTransactionsStream(signal: AbortSignal): AsyncIterableIterator<{\n commitmentTx?: TxNotification;\n arkTx?: TxNotification;\n }> {\n const expoFetch = await getExpoFetch();\n const url = `${this.serverUrl}/v1/txs`;\n\n while (!signal?.aborted) {\n try {\n yield* sseStreamIterator(url, signal, expoFetch, {}, (data) => {\n return this.parseTransactionNotification(data.result);\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Transaction stream error:\", error);\n throw error;\n }\n }\n }\n}\n","import { RestIndexerProvider, SubscriptionResponse, Vtxo } from \"./indexer\";\nimport { isFetchTimeoutError } from \"./ark\";\nimport { VirtualCoin } from \"../wallet\";\nimport { getExpoFetch, sseStreamIterator } from \"./expoUtils\";\nimport { DEFAULT_ARKADE_SERVER_URL } from \"../networks\";\n\n// Helper function to convert Vtxo to VirtualCoin (same as in indexer.ts)\nfunction convertVtxo(vtxo: Vtxo): VirtualCoin {\n return {\n txid: vtxo.outpoint.txid,\n vout: vtxo.outpoint.vout,\n value: Number(vtxo.amount),\n status: {\n confirmed: !vtxo.isSwept && !vtxo.isPreconfirmed,\n isLeaf: !vtxo.isPreconfirmed,\n },\n virtualStatus: {\n state: vtxo.isSwept ? \"swept\" : vtxo.isPreconfirmed ? \"preconfirmed\" : \"settled\",\n commitmentTxIds: vtxo.commitmentTxids,\n batchExpiry: vtxo.expiresAt ? Number(vtxo.expiresAt) * 1000 : undefined,\n },\n spentBy: vtxo.spentBy ?? \"\",\n settledBy: vtxo.settledBy,\n arkTxId: vtxo.arkTxid,\n createdAt: new Date(Number(vtxo.createdAt) * 1000),\n isUnrolled: vtxo.isUnrolled,\n isSpent: vtxo.isSpent,\n script: vtxo.script,\n assets: vtxo.assets?.map((a) => ({\n assetId: a.assetId,\n amount: BigInt(a.amount),\n })),\n };\n}\n\n/**\n * Expo-compatible Indexer provider implementation using expo/fetch for streaming support.\n * This provider works specifically in React Native/Expo environments where\n * standard fetch streaming may not work properly but expo/fetch provides streaming capabilities.\n *\n * @example\n * ```typescript\n * import { ExpoIndexerProvider } from '@arkade-os/sdk/adapters/expo';\n *\n * const provider = new ExpoIndexerProvider('https://indexer.example.com');\n * const vtxos = await provider.getVtxos({ scripts: ['script1'] });\n * ```\n */\nexport class ExpoIndexerProvider extends RestIndexerProvider {\n constructor(serverUrl: string = DEFAULT_ARKADE_SERVER_URL) {\n super(serverUrl);\n }\n\n override async *getSubscription(\n subscriptionId: string,\n abortSignal: AbortSignal,\n ): AsyncIterableIterator<SubscriptionResponse> {\n // Detect if we're running in React Native/Expo environment\n const isReactNative =\n typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\";\n\n const expoFetch = await getExpoFetch().catch((error) => {\n // In React Native/Expo, expo/fetch is required for proper streaming support\n if (isReactNative) {\n throw new Error(\n \"expo/fetch is unavailable in React Native environment. \" +\n \"Please ensure expo/fetch is installed and properly configured. \" +\n \"Streaming support may not work with standard fetch in React Native.\",\n );\n }\n throw error;\n });\n\n const url = `${this.serverUrl}/v1/indexer/script/subscription/${subscriptionId}`;\n\n while (!abortSignal.aborted) {\n try {\n yield* sseStreamIterator(\n url,\n abortSignal,\n expoFetch,\n { \"Content-Type\": \"application/json\" },\n (data): SubscriptionResponse | null => {\n // Handle new v8 proto format with heartbeat or event\n if (data.heartbeat !== undefined) {\n // Skip heartbeat messages\n return null;\n }\n // Process event messages\n if (data.event) {\n return {\n txid: data.event.txid,\n scripts: data.event.scripts || [],\n newVtxos: (data.event.newVtxos || []).map(convertVtxo),\n spentVtxos: (data.event.spentVtxos || []).map(convertVtxo),\n sweptVtxos: (data.event.sweptVtxos || []).map(convertVtxo),\n tx: data.event.tx,\n checkpointTxs: data.event.checkpointTxs,\n };\n }\n return null;\n },\n );\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n break;\n }\n\n // ignore timeout errors, they're expected when the server is not sending anything for 5 min\n // these timeouts are set by expo/fetch function\n if (isFetchTimeoutError(error)) {\n console.debug(\"Timeout error ignored\");\n continue;\n }\n\n console.error(\"Subscription error:\", error);\n throw error;\n }\n }\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunkFSAXPBGP_cjs = require('./chunk-FSAXPBGP.cjs');
|
|
4
|
+
var chunkCMPJR3HS_cjs = require('./chunk-CMPJR3HS.cjs');
|
|
5
5
|
|
|
6
6
|
// src/providers/expoUtils.ts
|
|
7
7
|
async function getExpoFetch(options) {
|
|
@@ -71,8 +71,8 @@ async function* sseStreamIterator(url, abortSignal, fetchFn, headers, parseData)
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
// src/providers/expoArk.ts
|
|
74
|
-
var ExpoArkProvider = class extends
|
|
75
|
-
constructor(serverUrl =
|
|
74
|
+
var ExpoArkProvider = class extends chunkFSAXPBGP_cjs.RestArkProvider {
|
|
75
|
+
constructor(serverUrl = chunkCMPJR3HS_cjs.DEFAULT_ARKADE_SERVER_URL) {
|
|
76
76
|
super(serverUrl);
|
|
77
77
|
}
|
|
78
78
|
async *getEventStream(signal, topics) {
|
|
@@ -92,7 +92,7 @@ var ExpoArkProvider = class extends chunkSPDNHPM4_cjs.RestArkProvider {
|
|
|
92
92
|
if (error instanceof Error && error.name === "AbortError") {
|
|
93
93
|
break;
|
|
94
94
|
}
|
|
95
|
-
if (
|
|
95
|
+
if (chunkFSAXPBGP_cjs.isFetchTimeoutError(error)) {
|
|
96
96
|
console.debug("Timeout error ignored");
|
|
97
97
|
continue;
|
|
98
98
|
}
|
|
@@ -113,7 +113,7 @@ var ExpoArkProvider = class extends chunkSPDNHPM4_cjs.RestArkProvider {
|
|
|
113
113
|
if (error instanceof Error && error.name === "AbortError") {
|
|
114
114
|
break;
|
|
115
115
|
}
|
|
116
|
-
if (
|
|
116
|
+
if (chunkFSAXPBGP_cjs.isFetchTimeoutError(error)) {
|
|
117
117
|
console.debug("Timeout error ignored");
|
|
118
118
|
continue;
|
|
119
119
|
}
|
|
@@ -152,8 +152,8 @@ function convertVtxo(vtxo) {
|
|
|
152
152
|
}))
|
|
153
153
|
};
|
|
154
154
|
}
|
|
155
|
-
var ExpoIndexerProvider = class extends
|
|
156
|
-
constructor(serverUrl =
|
|
155
|
+
var ExpoIndexerProvider = class extends chunkFSAXPBGP_cjs.RestIndexerProvider {
|
|
156
|
+
constructor(serverUrl = chunkCMPJR3HS_cjs.DEFAULT_ARKADE_SERVER_URL) {
|
|
157
157
|
super(serverUrl);
|
|
158
158
|
}
|
|
159
159
|
async *getSubscription(subscriptionId, abortSignal) {
|
|
@@ -196,7 +196,7 @@ var ExpoIndexerProvider = class extends chunkSPDNHPM4_cjs.RestIndexerProvider {
|
|
|
196
196
|
if (error instanceof Error && error.name === "AbortError") {
|
|
197
197
|
break;
|
|
198
198
|
}
|
|
199
|
-
if (
|
|
199
|
+
if (chunkFSAXPBGP_cjs.isFetchTimeoutError(error)) {
|
|
200
200
|
console.debug("Timeout error ignored");
|
|
201
201
|
continue;
|
|
202
202
|
}
|
|
@@ -209,5 +209,5 @@ var ExpoIndexerProvider = class extends chunkSPDNHPM4_cjs.RestIndexerProvider {
|
|
|
209
209
|
|
|
210
210
|
exports.ExpoArkProvider = ExpoArkProvider;
|
|
211
211
|
exports.ExpoIndexerProvider = ExpoIndexerProvider;
|
|
212
|
-
//# sourceMappingURL=chunk-
|
|
213
|
-
//# sourceMappingURL=chunk-
|
|
212
|
+
//# sourceMappingURL=chunk-CCLNFHJ5.cjs.map
|
|
213
|
+
//# sourceMappingURL=chunk-CCLNFHJ5.cjs.map
|