@arkade-os/sdk 0.4.44 → 0.4.46
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 +35 -0
- 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-I8jfe5VE.d.cts → ark-C9ognsOV.d.cts} +94 -2
- package/dist/{ark-I8jfe5VE.d.ts → ark-C9ognsOV.d.ts} +94 -2
- package/dist/{asyncStorageTaskQueue-BtSOVZFn.d.ts → asyncStorageTaskQueue-BAKZ5cS5.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-Dap7qUlF.d.cts → asyncStorageTaskQueue-CmBYVlxw.d.cts} +2 -2
- package/dist/{chunk-32YKLQPS.cjs → chunk-4KXOCVXP.cjs} +32 -29
- package/dist/chunk-4KXOCVXP.cjs.map +1 -0
- package/dist/{chunk-RJ6XVCX4.cjs → chunk-6TQJOD72.cjs} +7 -7
- package/dist/{chunk-RJ6XVCX4.cjs.map → chunk-6TQJOD72.cjs.map} +1 -1
- package/dist/{chunk-UBYY2TPK.cjs → chunk-7IYIFMF4.cjs} +178 -79
- package/dist/chunk-7IYIFMF4.cjs.map +1 -0
- package/dist/{chunk-LJ35HPJW.js → chunk-CWJ7ZCP7.js} +171 -75
- package/dist/chunk-CWJ7ZCP7.js.map +1 -0
- package/dist/{chunk-XIVCG6EP.cjs → chunk-D46YDM36.cjs} +1173 -425
- package/dist/chunk-D46YDM36.cjs.map +1 -0
- package/dist/{chunk-BE5MUB7T.js → chunk-FWG4TSPN.js} +7 -2
- package/dist/chunk-FWG4TSPN.js.map +1 -0
- package/dist/{chunk-V7WIZR2B.js → chunk-JTCQ6QXQ.js} +4 -4
- package/dist/{chunk-V7WIZR2B.js.map → chunk-JTCQ6QXQ.js.map} +1 -1
- package/dist/{chunk-HXDZ2QTW.cjs → chunk-MQB5H4X5.cjs} +7 -2
- package/dist/chunk-MQB5H4X5.cjs.map +1 -0
- package/dist/{chunk-FMI2GKYO.js → chunk-P6VBP3CT.js} +977 -231
- package/dist/chunk-P6VBP3CT.js.map +1 -0
- package/dist/{chunk-YNEDJTX2.js → chunk-QKC2T54O.js} +6 -3
- package/dist/chunk-QKC2T54O.js.map +1 -0
- package/dist/{chunk-LCQQPOIT.js → chunk-R2SVAM5Q.js} +3 -3
- package/dist/{chunk-LCQQPOIT.js.map → chunk-R2SVAM5Q.js.map} +1 -1
- package/dist/{chunk-X37EKDIH.cjs → chunk-SOXGAA52.cjs} +14 -14
- package/dist/{chunk-X37EKDIH.cjs.map → chunk-SOXGAA52.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-BRqbh2fW.d.cts → delegate-DVEgyRwI.d.cts} +1 -1
- package/dist/{delegate-CgjVjYOP.d.ts → delegate-aOd5qINr.d.ts} +1 -1
- package/dist/{index-DvWNB_rl.d.ts → index-CPzL4tqg.d.ts} +2 -2
- package/dist/{index-DHuXlDEg.d.cts → index-D8vmtWWO.d.cts} +2 -2
- package/dist/index.cjs +176 -156
- package/dist/index.d.cts +45 -20
- package/dist/index.d.ts +45 -20
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +23 -19
- package/dist/repositories/realm/index.cjs.map +1 -1
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +9 -5
- package/dist/repositories/realm/index.js.map +1 -1
- package/dist/repositories/sqlite/index.cjs +22 -18
- package/dist/repositories/sqlite/index.cjs.map +1 -1
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +9 -5
- package/dist/repositories/sqlite/index.js.map +1 -1
- package/dist/{taskRunner-Bptw9UMa.d.ts → taskRunner-B48-V-Pb.d.ts} +2 -2
- package/dist/{taskRunner-CeFxKhSH.d.cts → taskRunner-nNecmQ2C.d.cts} +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 +27 -14
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +11 -4
- package/dist/wallet/expo/index.d.ts +11 -4
- package/dist/wallet/expo/index.js +18 -5
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/{wallet-BsqRU8KM.d.cts → wallet-BUg3D4WJ.d.cts} +139 -3
- package/dist/{wallet-D9z7wssl.d.ts → wallet-DM0oShTu.d.ts} +139 -3
- package/dist/worker/expo/index.cjs +10 -9
- package/dist/worker/expo/index.cjs.map +1 -1
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +6 -5
- package/dist/worker/expo/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/chunk-32YKLQPS.cjs.map +0 -1
- package/dist/chunk-BE5MUB7T.js.map +0 -1
- package/dist/chunk-FMI2GKYO.js.map +0 -1
- package/dist/chunk-HXDZ2QTW.cjs.map +0 -1
- package/dist/chunk-LJ35HPJW.js.map +0 -1
- package/dist/chunk-UBYY2TPK.cjs.map +0 -1
- package/dist/chunk-XIVCG6EP.cjs.map +0 -1
- package/dist/chunk-YNEDJTX2.js.map +0 -1
|
@@ -1,8 +1,82 @@
|
|
|
1
1
|
import { Transaction } from '@scure/btc-signer';
|
|
2
2
|
import { Bytes } from '@scure/btc-signer/utils.js';
|
|
3
|
-
import {
|
|
3
|
+
import { J as BatchStartedEvent, K as TreeSigningStartedEvent, L as TxTree, M as TreeNoncesEvent, N as BatchFinalizationEvent, P as BatchFinalizedEvent, Q as BatchFailedEvent, U as TreeTxEvent, X as TreeSignatureEvent, j as SettlementEvent, b as WalletConfig, W as WalletRepository, C as ContractRepository, Y as DescriptorProvider, g as IContractManager, Z as IReadonlyWallet, _ as ReadonlyIdentity, $ as Network, a0 as OnchainProvider, p as IndexerProvider, a1 as DelegateProvider, a2 as ReadonlyWalletConfig, x as IntentRepository, B as VirtualTxRepository, a3 as ExitCaptureMode, a4 as ExitDataSource, q as RelativeTimelock, e as ActivityRegistry, a5 as IReadonlyAssetManager, a6 as ContractSyncState, o as ArkProvider, a7 as NetworkName, a8 as ArkInfo, a9 as ArkAddress, c as WalletBalance, G as GetVtxosFilter, E as ExtendedVirtualCoin, A as ArkTransaction, f as Activity, d as ExtendedCoin, aa as Coin, ab as ContractManager, I as IWallet, a as Identity, ac as CSVMultisigTapscript, ad as SettlementConfig, k as IAssetManager, ae as VtxoManager, h as IDelegateManager, S as SendBitcoinParams, i as SettleParams, R as Recipient, af as SignerSession, ag as SignedIntent, ah as Intent } from './ark-C9ognsOV.js';
|
|
4
4
|
import { TransactionOutput } from '@scure/btc-signer/psbt.js';
|
|
5
|
-
import { D as DefaultVtxo, a as DelegateVtxo } from './delegate-
|
|
5
|
+
import { D as DefaultVtxo, a as DelegateVtxo } from './delegate-aOd5qINr.js';
|
|
6
|
+
|
|
7
|
+
declare class ArkError extends Error {
|
|
8
|
+
readonly code: number;
|
|
9
|
+
readonly message: string;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly metadata?: Record<string, string> | undefined;
|
|
12
|
+
constructor(code: number, message: string, name: string, metadata?: Record<string, string> | undefined);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Structured arkd error `name`s the SDK branches on, centralized so call sites don't
|
|
16
|
+
* hardcode string literals. Not an exhaustive mirror of the server's codes — only the
|
|
17
|
+
* ones the SDK acts on.
|
|
18
|
+
*/
|
|
19
|
+
declare const ArkErrorName: {
|
|
20
|
+
readonly DIGEST_MISMATCH: "DIGEST_MISMATCH";
|
|
21
|
+
readonly VTXO_ALREADY_SPENT: "VTXO_ALREADY_SPENT";
|
|
22
|
+
readonly INVALID_TX_FILTER: "INVALID_TX_FILTER";
|
|
23
|
+
readonly TX_FILTERS_LIMIT_EXCEEDED: "TX_FILTERS_LIMIT_EXCEEDED";
|
|
24
|
+
/**
|
|
25
|
+
* A CLTV closure was spent before its absolute locktime matured. Raised only by
|
|
26
|
+
* `submitTx` (never `finalizeTx`), with metadata
|
|
27
|
+
* `{ locktime, current_locktime, type: "height" | "time" }`.
|
|
28
|
+
*
|
|
29
|
+
* Self-healing, so defer and retry rather than fail: the server matures a
|
|
30
|
+
* seconds-locktime against the **chain tip block's timestamp**, not its wall clock,
|
|
31
|
+
* so a spend attempted promptly at maturity is rejected until a later block lands.
|
|
32
|
+
*/
|
|
33
|
+
readonly FORFEIT_CLOSURE_LOCKED: "FORFEIT_CLOSURE_LOCKED";
|
|
34
|
+
};
|
|
35
|
+
type ArkErrorName = (typeof ArkErrorName)[keyof typeof ArkErrorName];
|
|
36
|
+
/**
|
|
37
|
+
* Type guard for a structured {@link ArkError}, optionally narrowing to a specific
|
|
38
|
+
* `name`. Prefer it over comparing `err.name` literals.
|
|
39
|
+
*
|
|
40
|
+
* `name` accepts only cataloged {@link ArkErrorName} values; to branch on a name the
|
|
41
|
+
* catalog does not cover, either add it there or compare `err.name` after guarding
|
|
42
|
+
* with the one-argument form.
|
|
43
|
+
*
|
|
44
|
+
* @example
|
|
45
|
+
* if (isArkError(maybeArkError(err), ArkErrorName.DIGEST_MISMATCH)) { ... }
|
|
46
|
+
*/
|
|
47
|
+
declare function isArkError(error: unknown, name?: ArkErrorName): error is ArkError;
|
|
48
|
+
/**
|
|
49
|
+
* Which remote dependency an availability failure refers to. Used to label the
|
|
50
|
+
* {@link ProviderUnavailableError} message and the wallet's
|
|
51
|
+
* `ProviderConnectionState`; it is deliberately *not* carried as a structured
|
|
52
|
+
* field on the error, since custom `Error` own-properties do not survive the
|
|
53
|
+
* service-worker `postMessage` boundary (only `name`/`message`/`cause` do).
|
|
54
|
+
*/
|
|
55
|
+
type ProviderKind = "arkade" | "indexer";
|
|
56
|
+
/**
|
|
57
|
+
* A remote provider (Arkade operator or its indexer) is temporarily
|
|
58
|
+
* unreachable. This is a *retryable* condition — transport failure, request
|
|
59
|
+
* timeout, or a 5xx/429-style temporary HTTP response — as opposed to a
|
|
60
|
+
* terminal configuration/authorization/schema error, which stays a plain
|
|
61
|
+
* `Error`/{@link ArkError}. The original low-level error is preserved as
|
|
62
|
+
* {@link Error.cause}.
|
|
63
|
+
*/
|
|
64
|
+
declare class ProviderUnavailableError extends Error {
|
|
65
|
+
/** Always `true`: this error type only ever wraps retryable conditions. */
|
|
66
|
+
readonly retryable = true;
|
|
67
|
+
constructor(message: string, options?: {
|
|
68
|
+
cause?: unknown;
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Try to convert an error to an ArkError class, returning undefined if the error is not an ArkError
|
|
73
|
+
* @param error - The error to parse
|
|
74
|
+
* @returns The parsed ArkError, or undefined if the error is not an ArkError
|
|
75
|
+
*/
|
|
76
|
+
declare function maybeArkError(error: any): ArkError | undefined;
|
|
77
|
+
|
|
78
|
+
/** Where the {@link ArkInfo} used to construct a wallet came from. */
|
|
79
|
+
type ServerInfoSource = "live" | "cache";
|
|
6
80
|
|
|
7
81
|
/**
|
|
8
82
|
* Batch namespace provides utilities for joining and processing batch session.
|
|
@@ -412,6 +486,23 @@ interface BoardingUtxoGroup {
|
|
|
412
486
|
csvTimelock: RelativeTimelock;
|
|
413
487
|
coins: ExtendedCoin[];
|
|
414
488
|
}
|
|
489
|
+
/**
|
|
490
|
+
* Freshness of the wallet's provider-backed sync, composed from the boot
|
|
491
|
+
* server-info source and the contract-manager's indexer-sync health. It
|
|
492
|
+
* describes only how fresh provider data is — never the wallet balances/VTXOs
|
|
493
|
+
* themselves, which are always served from the repository (system of record).
|
|
494
|
+
*/
|
|
495
|
+
type ProviderConnectionState = {
|
|
496
|
+
mode: "online";
|
|
497
|
+
source: "live";
|
|
498
|
+
lastOnlineAt: number;
|
|
499
|
+
} | {
|
|
500
|
+
mode: "degraded";
|
|
501
|
+
source: "cache" | "repository";
|
|
502
|
+
provider: ProviderKind;
|
|
503
|
+
reason: string;
|
|
504
|
+
lastOnlineAt?: number;
|
|
505
|
+
};
|
|
415
506
|
declare class ReadonlyWallet implements IReadonlyWallet {
|
|
416
507
|
readonly identity: ReadonlyIdentity;
|
|
417
508
|
readonly network: Network;
|
|
@@ -438,6 +529,12 @@ declare class ReadonlyWallet implements IReadonlyWallet {
|
|
|
438
529
|
* (ContractManager isn't given it); `undefined` ⇒ no-op.
|
|
439
530
|
*/
|
|
440
531
|
virtualTxRepository?: VirtualTxRepository;
|
|
532
|
+
/** Opt-in exit-data capture settings; see {@link StorageConfig.exitDataCapture}. */
|
|
533
|
+
exitDataCapture?: {
|
|
534
|
+
mode?: ExitCaptureMode;
|
|
535
|
+
minExitWorthSats?: number;
|
|
536
|
+
sources?: ExitDataSource[];
|
|
537
|
+
};
|
|
441
538
|
private readonly _assetManager;
|
|
442
539
|
readonly walletContractTimelocks: RelativeTimelock[];
|
|
443
540
|
protected _pendingSpendOutpoints: Set<string>;
|
|
@@ -473,6 +570,43 @@ declare class ReadonlyWallet implements IReadonlyWallet {
|
|
|
473
570
|
* construction-time snapshot for their lifetime.
|
|
474
571
|
*/
|
|
475
572
|
protected _arkServerPublicKey: Bytes;
|
|
573
|
+
/**
|
|
574
|
+
* Whether this wallet was constructed from live operator server-info
|
|
575
|
+
* (`"live"`) or from a cached snapshot because the operator was unreachable
|
|
576
|
+
* (`"cache"`). Freshness signal for {@link getProviderConnectionState}.
|
|
577
|
+
*/
|
|
578
|
+
protected _serverInfoSource: ServerInfoSource;
|
|
579
|
+
/**
|
|
580
|
+
* Epoch-ms of the last known live operator contact: construction time on the
|
|
581
|
+
* `live` boot path, the cached snapshot's `savedAt` on the `cache` path.
|
|
582
|
+
*/
|
|
583
|
+
protected _serverInfoLastOnlineAt?: number;
|
|
584
|
+
/** @see {@link _serverInfoSource} */
|
|
585
|
+
get serverInfoSource(): ServerInfoSource;
|
|
586
|
+
/**
|
|
587
|
+
* Composed provider-connection freshness: the boot server-info source
|
|
588
|
+
* (Arkade) combined with the contract-manager's indexer-sync health, if the
|
|
589
|
+
* manager has been initialized. Reads no live provider state — it never
|
|
590
|
+
* forces a `ContractManager` to construct — so it is safe for readonly
|
|
591
|
+
* callers that only use address/balance APIs.
|
|
592
|
+
*
|
|
593
|
+
* - Boot fell back to a cached snapshot → degraded on `arkade` (`cache`).
|
|
594
|
+
* - Otherwise, if the contract manager has degraded to repository data →
|
|
595
|
+
* degraded on `indexer` (`repository`).
|
|
596
|
+
* - Otherwise online.
|
|
597
|
+
*
|
|
598
|
+
* This only describes sync freshness; wallet balances/VTXOs are always read
|
|
599
|
+
* from the repository regardless of this state.
|
|
600
|
+
*/
|
|
601
|
+
getProviderConnectionState(): ProviderConnectionState;
|
|
602
|
+
/**
|
|
603
|
+
* The contract-manager's current provider-sync health **without forcing it
|
|
604
|
+
* to initialize** — reads the already-constructed manager, or reports
|
|
605
|
+
* `online` when none exists yet. Unlike {@link getContractManager}, this
|
|
606
|
+
* never triggers a remote sync, so it is safe on a pure diagnostics path
|
|
607
|
+
* (e.g. the service-worker sync-state message).
|
|
608
|
+
*/
|
|
609
|
+
getContractSyncState(): ContractSyncState;
|
|
476
610
|
protected constructor(identity: ReadonlyIdentity, network: Network, onchainProvider: OnchainProvider, indexerProvider: IndexerProvider, arkServerPublicKey: Bytes, offchainTapscript: DefaultVtxo.Script | DelegateVtxo.Script, boardingTapscript: DefaultVtxo.Script, dustAmount: bigint, walletRepository: WalletRepository, contractRepository: ContractRepository, delegateProvider?: DelegateProvider | undefined, watcherConfig?: ReadonlyWalletConfig["watcherConfig"], walletContractTimelocks?: RelativeTimelock[]);
|
|
477
611
|
/**
|
|
478
612
|
* x-only hex of the operator's deprecated signer keys (from
|
|
@@ -570,6 +704,8 @@ declare class ReadonlyWallet implements IReadonlyWallet {
|
|
|
570
704
|
walletRepository: WalletRepository;
|
|
571
705
|
contractRepository: ContractRepository;
|
|
572
706
|
info: ArkInfo;
|
|
707
|
+
serverInfoSource: ServerInfoSource;
|
|
708
|
+
serverInfoLastOnlineAt: number | undefined;
|
|
573
709
|
delegateProvider: DelegateProvider | undefined;
|
|
574
710
|
/** @deprecated alias for `delegateProvider` */
|
|
575
711
|
delegatorProvider: DelegateProvider | undefined;
|
|
@@ -1190,4 +1326,4 @@ declare class Wallet extends ReadonlyWallet implements IWallet {
|
|
|
1190
1326
|
*/
|
|
1191
1327
|
declare function waitForIncomingFunds(wallet: Wallet): Promise<IncomingFunds>;
|
|
1192
1328
|
|
|
1193
|
-
export { Batch as B, type IncomingFunds as I, ReadonlyWallet as R, Wallet as W, type ReceiveRotatorFactory as a, type ReceiveRotatorBootOpts as b, type ReceiveRotatorBoot as c, type BoardingUtxoGroup as
|
|
1329
|
+
export { ArkError as A, Batch as B, type IncomingFunds as I, type ProviderConnectionState as P, ReadonlyWallet as R, type ServerInfoSource as S, Wallet as W, type ReceiveRotatorFactory as a, type ReceiveRotatorBootOpts as b, type ReceiveRotatorBoot as c, ArkErrorName as d, type BoardingUtxoGroup as e, type ProviderKind as f, ProviderUnavailableError as g, isArkError as i, maybeArkError as m, waitForIncomingFunds as w };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../../chunk-
|
|
5
|
-
require('../../chunk-
|
|
6
|
-
require('../../chunk-
|
|
7
|
-
require('../../chunk-
|
|
3
|
+
var chunk6TQJOD72_cjs = require('../../chunk-6TQJOD72.cjs');
|
|
4
|
+
require('../../chunk-D46YDM36.cjs');
|
|
5
|
+
require('../../chunk-7IYIFMF4.cjs');
|
|
6
|
+
require('../../chunk-4KXOCVXP.cjs');
|
|
7
|
+
require('../../chunk-MQB5H4X5.cjs');
|
|
8
8
|
require('../../chunk-5BLDMQED.cjs');
|
|
9
9
|
|
|
10
10
|
// src/worker/expo/taskQueue.ts
|
|
@@ -48,6 +48,7 @@ var AsyncStorageTaskQueue = class {
|
|
|
48
48
|
this.outboxKey = `${prefix}:outbox`;
|
|
49
49
|
this.configKey = `${prefix}:config`;
|
|
50
50
|
}
|
|
51
|
+
storage;
|
|
51
52
|
inboxKey;
|
|
52
53
|
outboxKey;
|
|
53
54
|
configKey;
|
|
@@ -120,19 +121,19 @@ var AsyncStorageTaskQueue = class {
|
|
|
120
121
|
|
|
121
122
|
Object.defineProperty(exports, "CONTRACT_POLL_TASK_TYPE", {
|
|
122
123
|
enumerable: true,
|
|
123
|
-
get: function () { return
|
|
124
|
+
get: function () { return chunk6TQJOD72_cjs.CONTRACT_POLL_TASK_TYPE; }
|
|
124
125
|
});
|
|
125
126
|
Object.defineProperty(exports, "contractPollProcessor", {
|
|
126
127
|
enumerable: true,
|
|
127
|
-
get: function () { return
|
|
128
|
+
get: function () { return chunk6TQJOD72_cjs.contractPollProcessor; }
|
|
128
129
|
});
|
|
129
130
|
Object.defineProperty(exports, "createTaskDependencies", {
|
|
130
131
|
enumerable: true,
|
|
131
|
-
get: function () { return
|
|
132
|
+
get: function () { return chunk6TQJOD72_cjs.createTaskDependencies; }
|
|
132
133
|
});
|
|
133
134
|
Object.defineProperty(exports, "runTasks", {
|
|
134
135
|
enumerable: true,
|
|
135
|
-
get: function () { return
|
|
136
|
+
get: function () { return chunk6TQJOD72_cjs.runTasks; }
|
|
136
137
|
});
|
|
137
138
|
exports.AsyncStorageTaskQueue = AsyncStorageTaskQueue;
|
|
138
139
|
exports.InMemoryTaskQueue = InMemoryTaskQueue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/worker/expo/taskQueue.ts","../../../src/worker/expo/asyncStorageTaskQueue.ts"],"names":[],"mappings":";;;;;;;;;;AA6CO,IAAM,oBAAN,MAA6C;AAAA,EACxC,KAAA,uBAAY,GAAA,EAAsB;AAAA,EAClC,MAAA,uBAAa,GAAA,EAAwB;AAAA,EAE7C,MAAM,QAAQ,IAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,WAAW,EAAA,EAA2B;AACxC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,SAAS,IAAA,EAAoC;AAC/C,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAC5C,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,OAAO,MAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,UAAA,GAA4B;AAC9B,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACrB;AAAA,EAEA,MAAM,WAAW,MAAA,EAAmC;AAChD,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AAAA,EACrC;AAAA,EAEA,MAAM,UAAA,GAAoC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,mBAAmB,GAAA,EAA8B;AACnD,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AAClB,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IACzB;AAAA,EACJ;AACJ;;;AC7DO,IAAM,wBAAN,MAAiD;AAAA,EAKpD,WAAA,CACqB,OAAA,EACjB,MAAA,GAAS,gBAAA,EACX;AAFmB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGjB,IAAA,IAAA,CAAK,QAAA,GAAW,GAAG,MAAM,CAAA,MAAA,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,GAAY,GAAG,MAAM,CAAA,OAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,SAAA,GAAY,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EAC9B;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/worker/expo/taskQueue.ts","../../../src/worker/expo/asyncStorageTaskQueue.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * A task item represents a unit of work in the inbox.\n */\nexport interface TaskItem {\n id: string;\n type: string;\n data: Record<string, unknown>;\n createdAt: number;\n}\n\n/**\n * A task result represents the outcome of processing a task item.\n */\nexport interface TaskResult {\n id: string;\n taskItemId: string;\n type: string;\n status: \"success\" | \"failed\" | \"noop\";\n data?: Record<string, unknown>;\n executedAt: number;\n}\n\n/**\n * Persistence layer for handing off work between foreground and background.\n *\n * - **Inbox**: tasks waiting to be processed.\n * - **Outbox**: results produced by processors, waiting to be consumed.\n */\nexport interface TaskQueue {\n // Inbox\n addTask(task: TaskItem): Promise<void>;\n removeTask(id: string): Promise<void>;\n getTasks(type?: string): Promise<TaskItem[]>;\n clearTasks(): Promise<void>;\n\n // Outbox\n pushResult(result: TaskResult): Promise<void>;\n getResults(): Promise<TaskResult[]>;\n acknowledgeResults(ids: string[]): Promise<void>;\n}\n\n/**\n * In-memory TaskQueue for testing and lightweight use.\n * State is lost when the process exits.\n */\nexport class InMemoryTaskQueue implements TaskQueue {\n private inbox = new Map<string, TaskItem>();\n private outbox = new Map<string, TaskResult>();\n\n async addTask(task: TaskItem): Promise<void> {\n this.inbox.set(task.id, task);\n }\n\n async removeTask(id: string): Promise<void> {\n this.inbox.delete(id);\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = Array.from(this.inbox.values());\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n this.inbox.clear();\n }\n\n async pushResult(result: TaskResult): Promise<void> {\n this.outbox.set(result.id, result);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return Array.from(this.outbox.values());\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n for (const id of ids) {\n this.outbox.delete(id);\n }\n }\n}\n","import type { TaskItem, TaskResult, TaskQueue } from \"./taskQueue\";\n\n/**\n * Minimal async key-value storage interface.\n *\n * Compatible with `@react-native-async-storage/async-storage` and\n * any other storage that exposes the same three methods.\n */\nexport interface AsyncStorageLike {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n}\n\n/**\n * AsyncStorage-backed TaskQueue for Expo/React Native.\n *\n * Persists inbox, outbox, and an optional config blob to AsyncStorage\n * so that data survives process restarts and can be shared between\n * foreground and background execution contexts.\n */\nexport class AsyncStorageTaskQueue implements TaskQueue {\n private readonly inboxKey: string;\n private readonly outboxKey: string;\n private readonly configKey: string;\n\n constructor(\n private readonly storage: AsyncStorageLike,\n prefix = \"ark:task-queue\",\n ) {\n this.inboxKey = `${prefix}:inbox`;\n this.outboxKey = `${prefix}:outbox`;\n this.configKey = `${prefix}:config`;\n }\n\n // ── Inbox ────────────────────────────────────────────────────────\n\n async addTask(task: TaskItem): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n tasks.push(task);\n await this.writeList(this.inboxKey, tasks);\n }\n\n async removeTask(id: string): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n await this.writeList(\n this.inboxKey,\n tasks.filter((t) => t.id !== id),\n );\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n await this.storage.removeItem(this.inboxKey);\n }\n\n // ── Outbox ───────────────────────────────────────────────────────\n\n async pushResult(result: TaskResult): Promise<void> {\n const results = await this.readList<TaskResult>(this.outboxKey);\n results.push(result);\n await this.writeList(this.outboxKey, results);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return this.readList<TaskResult>(this.outboxKey);\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n const idSet = new Set(ids);\n const results = await this.readList<TaskResult>(this.outboxKey);\n await this.writeList(\n this.outboxKey,\n results.filter((r) => !idSet.has(r.id)),\n );\n }\n\n // ── Config persistence (for background handler rehydration) ──────\n\n /**\n * Persist a config blob alongside the queue data.\n * Used by @see ExpoWallet.setup to store the wallet parameters\n * that the background handler needs to reconstruct providers.\n */\n async persistConfig(config: Record<string, unknown> | object): Promise<void> {\n await this.storage.setItem(this.configKey, JSON.stringify(config));\n }\n\n /**\n * Load the persisted config blob.\n * Used by the background handler to rehydrate wallet dependencies.\n */\n async loadConfig<T = Record<string, unknown>>(): Promise<T | null> {\n const raw = await this.storage.getItem(this.configKey);\n return raw ? JSON.parse(raw) : null;\n }\n\n // ── Helpers ──────────────────────────────────────────────────────\n\n private async readList<T>(key: string): Promise<T[]> {\n const raw = await this.storage.getItem(key);\n return raw ? JSON.parse(raw) : [];\n }\n\n private async writeList<T>(key: string, list: T[]): Promise<void> {\n await this.storage.setItem(key, JSON.stringify(list));\n }\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as TaskProcessor } from '../../taskRunner-
|
|
2
|
-
export { C as CreateTaskDependenciesOptions, I as InMemoryTaskQueue,
|
|
3
|
-
export {
|
|
4
|
-
import '../../ark-
|
|
1
|
+
import { T as TaskProcessor } from '../../taskRunner-nNecmQ2C.cjs';
|
|
2
|
+
export { C as CreateTaskDependenciesOptions, I as InMemoryTaskQueue, b as TaskDependencies, c as TaskItem, a as TaskQueue, d as TaskResult, e as createTaskDependencies, r as runTasks } from '../../taskRunner-nNecmQ2C.cjs';
|
|
3
|
+
export { a as AsyncStorageLike, A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-CmBYVlxw.cjs';
|
|
4
|
+
import '../../ark-C9ognsOV.cjs';
|
|
5
5
|
import '@scure/btc-signer/transaction.js';
|
|
6
6
|
import '@scure/btc-signer/utils.js';
|
|
7
7
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { T as TaskProcessor } from '../../taskRunner-
|
|
2
|
-
export { C as CreateTaskDependenciesOptions, I as InMemoryTaskQueue,
|
|
3
|
-
export {
|
|
4
|
-
import '../../ark-
|
|
1
|
+
import { T as TaskProcessor } from '../../taskRunner-B48-V-Pb.js';
|
|
2
|
+
export { C as CreateTaskDependenciesOptions, I as InMemoryTaskQueue, b as TaskDependencies, c as TaskItem, a as TaskQueue, d as TaskResult, e as createTaskDependencies, r as runTasks } from '../../taskRunner-B48-V-Pb.js';
|
|
3
|
+
export { a as AsyncStorageLike, A as AsyncStorageTaskQueue } from '../../asyncStorageTaskQueue-BAKZ5cS5.js';
|
|
4
|
+
import '../../ark-C9ognsOV.js';
|
|
5
5
|
import '@scure/btc-signer/transaction.js';
|
|
6
6
|
import '@scure/btc-signer/utils.js';
|
|
7
7
|
import '@scure/btc-signer/psbt.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { CONTRACT_POLL_TASK_TYPE, contractPollProcessor, createTaskDependencies, runTasks } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
3
|
-
import '../../chunk-
|
|
4
|
-
import '../../chunk-
|
|
5
|
-
import '../../chunk-
|
|
1
|
+
export { CONTRACT_POLL_TASK_TYPE, contractPollProcessor, createTaskDependencies, runTasks } from '../../chunk-R2SVAM5Q.js';
|
|
2
|
+
import '../../chunk-P6VBP3CT.js';
|
|
3
|
+
import '../../chunk-CWJ7ZCP7.js';
|
|
4
|
+
import '../../chunk-QKC2T54O.js';
|
|
5
|
+
import '../../chunk-FWG4TSPN.js';
|
|
6
6
|
import '../../chunk-NSBPE2FW.js';
|
|
7
7
|
|
|
8
8
|
// src/worker/expo/taskQueue.ts
|
|
@@ -46,6 +46,7 @@ var AsyncStorageTaskQueue = class {
|
|
|
46
46
|
this.outboxKey = `${prefix}:outbox`;
|
|
47
47
|
this.configKey = `${prefix}:config`;
|
|
48
48
|
}
|
|
49
|
+
storage;
|
|
49
50
|
inboxKey;
|
|
50
51
|
outboxKey;
|
|
51
52
|
configKey;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/worker/expo/taskQueue.ts","../../../src/worker/expo/asyncStorageTaskQueue.ts"],"names":[],"mappings":";;;;;;;;AA6CO,IAAM,oBAAN,MAA6C;AAAA,EACxC,KAAA,uBAAY,GAAA,EAAsB;AAAA,EAClC,MAAA,uBAAa,GAAA,EAAwB;AAAA,EAE7C,MAAM,QAAQ,IAAA,EAA+B;AACzC,IAAA,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,IAAI,CAAA;AAAA,EAChC;AAAA,EAEA,MAAM,WAAW,EAAA,EAA2B;AACxC,IAAA,IAAA,CAAK,KAAA,CAAM,OAAO,EAAE,CAAA;AAAA,EACxB;AAAA,EAEA,MAAM,SAAS,IAAA,EAAoC;AAC/C,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,QAAQ,CAAA;AAC5C,IAAA,IAAI,IAAA,EAAM;AACN,MAAA,OAAO,MAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,IAAI,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,KAAA;AAAA,EACX;AAAA,EAEA,MAAM,UAAA,GAA4B;AAC9B,IAAA,IAAA,CAAK,MAAM,KAAA,EAAM;AAAA,EACrB;AAAA,EAEA,MAAM,WAAW,MAAA,EAAmC;AAChD,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,EAAA,EAAI,MAAM,CAAA;AAAA,EACrC;AAAA,EAEA,MAAM,UAAA,GAAoC;AACtC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,MAAA,CAAO,QAAQ,CAAA;AAAA,EAC1C;AAAA,EAEA,MAAM,mBAAmB,GAAA,EAA8B;AACnD,IAAA,KAAA,MAAW,MAAM,GAAA,EAAK;AAClB,MAAA,IAAA,CAAK,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IACzB;AAAA,EACJ;AACJ;;;AC7DO,IAAM,wBAAN,MAAiD;AAAA,EAKpD,WAAA,CACqB,OAAA,EACjB,MAAA,GAAS,gBAAA,EACX;AAFmB,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA;AAGjB,IAAA,IAAA,CAAK,QAAA,GAAW,GAAG,MAAM,CAAA,MAAA,CAAA;AACzB,IAAA,IAAA,CAAK,SAAA,GAAY,GAAG,MAAM,CAAA,OAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,SAAA,GAAY,GAAG,MAAM,CAAA,OAAA,CAAA;AAAA,EAC9B;AAAA,
|
|
1
|
+
{"version":3,"sources":["../../../src/worker/expo/taskQueue.ts","../../../src/worker/expo/asyncStorageTaskQueue.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * A task item represents a unit of work in the inbox.\n */\nexport interface TaskItem {\n id: string;\n type: string;\n data: Record<string, unknown>;\n createdAt: number;\n}\n\n/**\n * A task result represents the outcome of processing a task item.\n */\nexport interface TaskResult {\n id: string;\n taskItemId: string;\n type: string;\n status: \"success\" | \"failed\" | \"noop\";\n data?: Record<string, unknown>;\n executedAt: number;\n}\n\n/**\n * Persistence layer for handing off work between foreground and background.\n *\n * - **Inbox**: tasks waiting to be processed.\n * - **Outbox**: results produced by processors, waiting to be consumed.\n */\nexport interface TaskQueue {\n // Inbox\n addTask(task: TaskItem): Promise<void>;\n removeTask(id: string): Promise<void>;\n getTasks(type?: string): Promise<TaskItem[]>;\n clearTasks(): Promise<void>;\n\n // Outbox\n pushResult(result: TaskResult): Promise<void>;\n getResults(): Promise<TaskResult[]>;\n acknowledgeResults(ids: string[]): Promise<void>;\n}\n\n/**\n * In-memory TaskQueue for testing and lightweight use.\n * State is lost when the process exits.\n */\nexport class InMemoryTaskQueue implements TaskQueue {\n private inbox = new Map<string, TaskItem>();\n private outbox = new Map<string, TaskResult>();\n\n async addTask(task: TaskItem): Promise<void> {\n this.inbox.set(task.id, task);\n }\n\n async removeTask(id: string): Promise<void> {\n this.inbox.delete(id);\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = Array.from(this.inbox.values());\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n this.inbox.clear();\n }\n\n async pushResult(result: TaskResult): Promise<void> {\n this.outbox.set(result.id, result);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return Array.from(this.outbox.values());\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n for (const id of ids) {\n this.outbox.delete(id);\n }\n }\n}\n","import type { TaskItem, TaskResult, TaskQueue } from \"./taskQueue\";\n\n/**\n * Minimal async key-value storage interface.\n *\n * Compatible with `@react-native-async-storage/async-storage` and\n * any other storage that exposes the same three methods.\n */\nexport interface AsyncStorageLike {\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n}\n\n/**\n * AsyncStorage-backed TaskQueue for Expo/React Native.\n *\n * Persists inbox, outbox, and an optional config blob to AsyncStorage\n * so that data survives process restarts and can be shared between\n * foreground and background execution contexts.\n */\nexport class AsyncStorageTaskQueue implements TaskQueue {\n private readonly inboxKey: string;\n private readonly outboxKey: string;\n private readonly configKey: string;\n\n constructor(\n private readonly storage: AsyncStorageLike,\n prefix = \"ark:task-queue\",\n ) {\n this.inboxKey = `${prefix}:inbox`;\n this.outboxKey = `${prefix}:outbox`;\n this.configKey = `${prefix}:config`;\n }\n\n // ── Inbox ────────────────────────────────────────────────────────\n\n async addTask(task: TaskItem): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n tasks.push(task);\n await this.writeList(this.inboxKey, tasks);\n }\n\n async removeTask(id: string): Promise<void> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n await this.writeList(\n this.inboxKey,\n tasks.filter((t) => t.id !== id),\n );\n }\n\n async getTasks(type?: string): Promise<TaskItem[]> {\n const tasks = await this.readList<TaskItem>(this.inboxKey);\n if (type) {\n return tasks.filter((t) => t.type === type);\n }\n return tasks;\n }\n\n async clearTasks(): Promise<void> {\n await this.storage.removeItem(this.inboxKey);\n }\n\n // ── Outbox ───────────────────────────────────────────────────────\n\n async pushResult(result: TaskResult): Promise<void> {\n const results = await this.readList<TaskResult>(this.outboxKey);\n results.push(result);\n await this.writeList(this.outboxKey, results);\n }\n\n async getResults(): Promise<TaskResult[]> {\n return this.readList<TaskResult>(this.outboxKey);\n }\n\n async acknowledgeResults(ids: string[]): Promise<void> {\n const idSet = new Set(ids);\n const results = await this.readList<TaskResult>(this.outboxKey);\n await this.writeList(\n this.outboxKey,\n results.filter((r) => !idSet.has(r.id)),\n );\n }\n\n // ── Config persistence (for background handler rehydration) ──────\n\n /**\n * Persist a config blob alongside the queue data.\n * Used by @see ExpoWallet.setup to store the wallet parameters\n * that the background handler needs to reconstruct providers.\n */\n async persistConfig(config: Record<string, unknown> | object): Promise<void> {\n await this.storage.setItem(this.configKey, JSON.stringify(config));\n }\n\n /**\n * Load the persisted config blob.\n * Used by the background handler to rehydrate wallet dependencies.\n */\n async loadConfig<T = Record<string, unknown>>(): Promise<T | null> {\n const raw = await this.storage.getItem(this.configKey);\n return raw ? JSON.parse(raw) : null;\n }\n\n // ── Helpers ──────────────────────────────────────────────────────\n\n private async readList<T>(key: string): Promise<T[]> {\n const raw = await this.storage.getItem(key);\n return raw ? JSON.parse(raw) : [];\n }\n\n private async writeList<T>(key: string, list: T[]): Promise<void> {\n await this.storage.setItem(key, JSON.stringify(list));\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arkade-os/sdk",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.46",
|
|
4
4
|
"description": "TypeScript SDK for building Bitcoin wallets using the Arkade protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -149,7 +149,7 @@
|
|
|
149
149
|
},
|
|
150
150
|
"devDependencies": {
|
|
151
151
|
"@types/better-sqlite3": "7.6.13",
|
|
152
|
-
"@vitest/coverage-v8": "3.2.
|
|
152
|
+
"@vitest/coverage-v8": "3.2.7",
|
|
153
153
|
"better-sqlite3": "12.6.2",
|
|
154
154
|
"typedoc": "^0.28.19"
|
|
155
155
|
},
|