@arkade-os/sdk 0.4.19 → 0.4.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/contracts/contractWatcher.js +33 -3
- package/dist/cjs/contracts/handlers/default.js +10 -3
- package/dist/cjs/contracts/handlers/helpers.js +47 -5
- package/dist/cjs/contracts/handlers/vhtlc.js +4 -2
- package/dist/cjs/identity/descriptor.js +98 -0
- package/dist/cjs/identity/descriptorProvider.js +2 -0
- package/dist/cjs/identity/index.js +15 -1
- package/dist/cjs/identity/seedIdentity.js +91 -6
- package/dist/cjs/identity/serialize.js +166 -0
- package/dist/cjs/identity/staticDescriptorProvider.js +65 -0
- package/dist/cjs/index.js +6 -3
- package/dist/cjs/providers/ark.js +71 -46
- package/dist/cjs/providers/electrum.js +663 -0
- package/dist/cjs/providers/indexer.js +60 -43
- package/dist/cjs/providers/utils.js +62 -12
- package/dist/cjs/wallet/ramps.js +1 -1
- package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +10 -0
- package/dist/cjs/wallet/serviceWorker/wallet.js +137 -91
- package/dist/cjs/wallet/vtxo-manager.js +56 -8
- package/dist/cjs/wallet/wallet.js +130 -156
- package/dist/cjs/worker/messageBus.js +200 -56
- package/dist/esm/contracts/contractWatcher.js +33 -3
- package/dist/esm/contracts/handlers/default.js +10 -3
- package/dist/esm/contracts/handlers/helpers.js +47 -5
- package/dist/esm/contracts/handlers/vhtlc.js +4 -2
- package/dist/esm/identity/descriptor.js +92 -0
- package/dist/esm/identity/descriptorProvider.js +1 -0
- package/dist/esm/identity/index.js +6 -1
- package/dist/esm/identity/seedIdentity.js +89 -6
- package/dist/esm/identity/serialize.js +159 -0
- package/dist/esm/identity/staticDescriptorProvider.js +61 -0
- package/dist/esm/index.js +2 -1
- package/dist/esm/providers/ark.js +72 -47
- package/dist/esm/providers/electrum.js +658 -0
- package/dist/esm/providers/indexer.js +61 -44
- package/dist/esm/providers/utils.js +61 -12
- package/dist/esm/wallet/ramps.js +1 -1
- package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +10 -0
- package/dist/esm/wallet/serviceWorker/wallet.js +137 -91
- package/dist/esm/wallet/vtxo-manager.js +56 -8
- package/dist/esm/wallet/wallet.js +130 -156
- package/dist/esm/worker/messageBus.js +201 -57
- package/dist/types/contracts/contractWatcher.d.ts +3 -0
- package/dist/types/contracts/handlers/default.d.ts +1 -1
- package/dist/types/contracts/handlers/helpers.d.ts +1 -1
- package/dist/types/contracts/types.d.ts +11 -3
- package/dist/types/identity/descriptor.d.ts +35 -0
- package/dist/types/identity/descriptorProvider.d.ts +28 -0
- package/dist/types/identity/index.d.ts +7 -1
- package/dist/types/identity/seedIdentity.d.ts +41 -4
- package/dist/types/identity/serialize.d.ts +84 -0
- package/dist/types/identity/staticDescriptorProvider.d.ts +18 -0
- package/dist/types/index.d.ts +4 -2
- package/dist/types/providers/electrum.d.ts +212 -0
- package/dist/types/providers/utils.d.ts +10 -5
- package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +11 -2
- package/dist/types/wallet/serviceWorker/wallet.d.ts +27 -10
- package/dist/types/wallet/vtxo-manager.d.ts +2 -0
- package/dist/types/wallet/wallet.d.ts +7 -6
- package/dist/types/worker/messageBus.d.ts +68 -8
- package/package.json +3 -2
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ArkProvider } from "../providers/ark";
|
|
2
|
+
import { type SerializedIdentity, type LegacySerializedIdentity } from "../identity";
|
|
2
3
|
import { ReadonlyWallet, Wallet } from "../wallet/wallet";
|
|
3
4
|
import type { SettlementConfig } from "../wallet/vtxo-manager";
|
|
4
5
|
import type { ContractWatcherConfig } from "../contracts/contractWatcher";
|
|
@@ -45,11 +46,29 @@ export interface MessageHandler<REQ extends RequestEnvelope = RequestEnvelope, R
|
|
|
45
46
|
* Handle routed messages from the clients
|
|
46
47
|
**/
|
|
47
48
|
handleMessage(message: REQ): Promise<RES | null>;
|
|
49
|
+
/**
|
|
50
|
+
* Optional opt-out from the bus-level message timeout.
|
|
51
|
+
*
|
|
52
|
+
* Long-running flows (e.g. settlement) surrender control to remote peers
|
|
53
|
+
* and can legitimately sit idle for longer than `messageTimeoutMs`. When
|
|
54
|
+
* this returns true, the bus awaits `handleMessage` without a deadline.
|
|
55
|
+
* Defaults to false.
|
|
56
|
+
*/
|
|
57
|
+
isLongRunning?(message: REQ): boolean;
|
|
48
58
|
}
|
|
49
59
|
type Options = {
|
|
50
60
|
messageHandlers: MessageHandler[];
|
|
51
61
|
tickIntervalMs?: number;
|
|
52
62
|
messageTimeoutMs?: number;
|
|
63
|
+
/**
|
|
64
|
+
* Per-operation timeout overrides. Keys are either message types
|
|
65
|
+
* (e.g. "SETTLE") or handler tags (e.g. "WALLET_UPDATER"). Message-type
|
|
66
|
+
* matches take precedence over tag matches. Unspecified operations use
|
|
67
|
+
* `messageTimeoutMs`. These are treated as defaults: any map supplied
|
|
68
|
+
* via `INITIALIZE_MESSAGE_BUS` overrides per-key and is re-applied on
|
|
69
|
+
* every (re-)init.
|
|
70
|
+
*/
|
|
71
|
+
messageTimeoutOverrides?: Record<string, number>;
|
|
53
72
|
debug?: boolean;
|
|
54
73
|
buildServices?: (config: Initialize["config"]) => Promise<{
|
|
55
74
|
arkProvider: ArkProvider;
|
|
@@ -61,11 +80,7 @@ type Initialize = {
|
|
|
61
80
|
type: "INITIALIZE_MESSAGE_BUS";
|
|
62
81
|
id: string;
|
|
63
82
|
config: {
|
|
64
|
-
wallet:
|
|
65
|
-
privateKey: string;
|
|
66
|
-
} | {
|
|
67
|
-
publicKey: string;
|
|
68
|
-
};
|
|
83
|
+
wallet: SerializedIdentity | LegacySerializedIdentity;
|
|
69
84
|
arkServer: {
|
|
70
85
|
url: string;
|
|
71
86
|
publicKey?: string;
|
|
@@ -75,6 +90,12 @@ type Initialize = {
|
|
|
75
90
|
esploraUrl?: string;
|
|
76
91
|
settlementConfig?: SettlementConfig | false;
|
|
77
92
|
watcherConfig?: Partial<Omit<ContractWatcherConfig, "indexerProvider">>;
|
|
93
|
+
/**
|
|
94
|
+
* Page-supplied per-operation timeout map. Keys are message types
|
|
95
|
+
* (e.g. "SETTLE"). Overrides constructor-supplied
|
|
96
|
+
* `messageTimeoutOverrides` per-key; re-applied on every init.
|
|
97
|
+
*/
|
|
98
|
+
messageTimeouts?: Record<string, number>;
|
|
78
99
|
};
|
|
79
100
|
};
|
|
80
101
|
export declare class MessageBus {
|
|
@@ -83,6 +104,9 @@ export declare class MessageBus {
|
|
|
83
104
|
private handlers;
|
|
84
105
|
private tickIntervalMs;
|
|
85
106
|
private messageTimeoutMs;
|
|
107
|
+
private readonly constructorTimeoutOverrides;
|
|
108
|
+
private messageTimeoutOverrides;
|
|
109
|
+
private lateDeliveries;
|
|
86
110
|
private running;
|
|
87
111
|
private tickTimeout;
|
|
88
112
|
private tickInProgress;
|
|
@@ -91,7 +115,7 @@ export declare class MessageBus {
|
|
|
91
115
|
private readonly buildServicesFn;
|
|
92
116
|
private readonly boundOnMessage;
|
|
93
117
|
/** Create the service-worker message bus with repositories and handler configuration. */
|
|
94
|
-
constructor(walletRepository: WalletRepository, contractRepository: ContractRepository, { messageHandlers, tickIntervalMs, messageTimeoutMs, debug, buildServices, }: Options);
|
|
118
|
+
constructor(walletRepository: WalletRepository, contractRepository: ContractRepository, { messageHandlers, tickIntervalMs, messageTimeoutMs, messageTimeoutOverrides, debug, buildServices, }: Options);
|
|
95
119
|
/** Start the message bus and attach service-worker event listeners. */
|
|
96
120
|
start(): Promise<void>;
|
|
97
121
|
/** Stop the message bus, cancel ticks, and stop all registered handlers. */
|
|
@@ -104,10 +128,46 @@ export declare class MessageBus {
|
|
|
104
128
|
private processMessage;
|
|
105
129
|
/**
|
|
106
130
|
* Race `promise` against a timeout. Note: this does NOT cancel the
|
|
107
|
-
* underlying work — the original promise keeps running.
|
|
108
|
-
*
|
|
131
|
+
* underlying work — the original promise keeps running. Call
|
|
132
|
+
* `attachLateDelivery` after catching the timeout to surface the
|
|
133
|
+
* eventual result so the message id does not go silent.
|
|
109
134
|
*/
|
|
110
135
|
private withTimeout;
|
|
136
|
+
/**
|
|
137
|
+
* Extract the declared `type` from a request envelope (e.g. "SETTLE").
|
|
138
|
+
* Not every envelope carries a type (PING/INIT are special cased
|
|
139
|
+
* earlier), so this returns undefined for envelopes that lack one.
|
|
140
|
+
*/
|
|
141
|
+
private extractMessageType;
|
|
142
|
+
/**
|
|
143
|
+
* Resolve the timeout for an operation. Message-type overrides take
|
|
144
|
+
* precedence over handler-tag overrides, with the bus-wide default
|
|
145
|
+
* (`messageTimeoutMs`) as the final fallback.
|
|
146
|
+
*/
|
|
147
|
+
private resolveTimeoutMs;
|
|
148
|
+
/**
|
|
149
|
+
* Build a human-readable label for timeout errors. Format:
|
|
150
|
+
* `"<MESSAGE_TYPE> via <HANDLER_TAG>"` when both are known, else the
|
|
151
|
+
* handler tag alone. Used so timeout errors name the operation the
|
|
152
|
+
* client actually triggered (e.g. SETTLE) rather than just the
|
|
153
|
+
* handler that received it (e.g. WALLET_UPDATER).
|
|
154
|
+
*/
|
|
155
|
+
private labelFor;
|
|
156
|
+
/**
|
|
157
|
+
* Post a response to the originating client. When `source` is null
|
|
158
|
+
* (client tab closed, detached frame, etc.) the response cannot be
|
|
159
|
+
* delivered; we log the drop in debug mode so it is not invisible.
|
|
160
|
+
*/
|
|
161
|
+
private deliverResponse;
|
|
162
|
+
/**
|
|
163
|
+
* After a handler times out the client has already received a timeout
|
|
164
|
+
* error, but the handler keeps running. Attach a follow-up so the
|
|
165
|
+
* handler's eventual result (or error) is delivered under the same
|
|
166
|
+
* message id, or — if the handler never completes within
|
|
167
|
+
* {@link LATE_DELIVERY_GRACE_MS} — an "Operation abandoned" error is
|
|
168
|
+
* sent so the client's listener (if still attached) does not hang.
|
|
169
|
+
*/
|
|
170
|
+
private attachLateDelivery;
|
|
111
171
|
/**
|
|
112
172
|
* Returns the registered SW for the path.
|
|
113
173
|
* It uses the functions in `service-worker-manager.ts` module.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arkade-os/sdk",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.21",
|
|
4
4
|
"description": "TypeScript SDK for building Bitcoin wallets using the Arkade protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -87,7 +87,8 @@
|
|
|
87
87
|
"@scure/base": "2.0.0",
|
|
88
88
|
"@scure/bip39": "2.0.1",
|
|
89
89
|
"@scure/btc-signer": "2.0.1",
|
|
90
|
-
"bip68": "1.0.4"
|
|
90
|
+
"bip68": "1.0.4",
|
|
91
|
+
"ws-electrumx-client": "1.0.5"
|
|
91
92
|
},
|
|
92
93
|
"devDependencies": {
|
|
93
94
|
"@types/better-sqlite3": "7.6.13",
|