@kaleidorg/wallet-engine 1.0.0-beta.4 → 1.0.0-beta.41
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/LICENSE +21 -0
- package/README.md +29 -10
- package/dist/adapters/ArkadeAdapter.d.ts +78 -14
- package/dist/adapters/ArkadeAdapter.d.ts.map +1 -1
- package/dist/adapters/ArkadeAdapter.js +653 -161
- package/dist/adapters/ArkadeAdapter.js.map +1 -1
- package/dist/adapters/IProtocolAdapter.d.ts +195 -18
- package/dist/adapters/IProtocolAdapter.d.ts.map +1 -1
- package/dist/adapters/IProtocolAdapter.js +6 -2
- package/dist/adapters/IProtocolAdapter.js.map +1 -1
- package/dist/adapters/RgbAdapter.d.ts +70 -27
- package/dist/adapters/RgbAdapter.d.ts.map +1 -1
- package/dist/adapters/RgbAdapter.js +464 -370
- package/dist/adapters/RgbAdapter.js.map +1 -1
- package/dist/adapters/SparkAdapter.d.ts +93 -15
- package/dist/adapters/SparkAdapter.d.ts.map +1 -1
- package/dist/adapters/SparkAdapter.js +833 -168
- package/dist/adapters/SparkAdapter.js.map +1 -1
- package/dist/adapters/arkade.d.ts +15 -0
- package/dist/adapters/arkade.d.ts.map +1 -0
- package/dist/adapters/arkade.js +15 -0
- package/dist/adapters/arkade.js.map +1 -0
- package/dist/adapters/flashnet.d.ts +15 -0
- package/dist/adapters/flashnet.d.ts.map +1 -0
- package/dist/adapters/flashnet.js +17 -0
- package/dist/adapters/flashnet.js.map +1 -0
- package/dist/adapters/native.d.ts +17 -0
- package/dist/adapters/native.d.ts.map +1 -0
- package/dist/adapters/native.js +17 -0
- package/dist/adapters/native.js.map +1 -0
- package/dist/adapters/rgb.d.ts +11 -0
- package/dist/adapters/rgb.d.ts.map +1 -0
- package/dist/adapters/rgb.js +11 -0
- package/dist/adapters/rgb.js.map +1 -0
- package/dist/adapters/spark.d.ts +12 -0
- package/dist/adapters/spark.d.ts.map +1 -0
- package/dist/adapters/spark.js +14 -0
- package/dist/adapters/spark.js.map +1 -0
- package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts +53 -19
- package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/ArkadeWdkAdapter.js +366 -90
- package/dist/adapters/wdk/ArkadeWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/BaseWdkAdapter.d.ts +40 -0
- package/dist/adapters/wdk/BaseWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/BaseWdkAdapter.js +71 -0
- package/dist/adapters/wdk/BaseWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/LiquidWdkAdapter.d.ts +6 -13
- package/dist/adapters/wdk/LiquidWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/LiquidWdkAdapter.js +14 -32
- package/dist/adapters/wdk/LiquidWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/RgbCore.d.ts +64 -0
- package/dist/adapters/wdk/RgbCore.d.ts.map +1 -0
- package/dist/adapters/wdk/RgbCore.js +111 -0
- package/dist/adapters/wdk/RgbCore.js.map +1 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.d.ts +277 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.js +728 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.js.map +1 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.d.ts +104 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.js +249 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/RlnWdkAdapter.d.ts +27 -14
- package/dist/adapters/wdk/RlnWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/RlnWdkAdapter.js +111 -87
- package/dist/adapters/wdk/RlnWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/SparkWdkAdapter.d.ts +74 -41
- package/dist/adapters/wdk/SparkWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/SparkWdkAdapter.js +706 -249
- package/dist/adapters/wdk/SparkWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/index.d.ts +17 -0
- package/dist/adapters/wdk/index.d.ts.map +1 -0
- package/dist/adapters/wdk/index.js +17 -0
- package/dist/adapters/wdk/index.js.map +1 -0
- package/dist/adapters/wdk/wasm-rgb.d.ts +15 -0
- package/dist/adapters/wdk/wasm-rgb.d.ts.map +1 -0
- package/dist/adapters/wdk/wasm-rgb.js +15 -0
- package/dist/adapters/wdk/wasm-rgb.js.map +1 -0
- package/dist/capabilities/index.d.ts +1 -1
- package/dist/capabilities/index.d.ts.map +1 -1
- package/dist/capabilities/index.js +17 -2
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/operations.d.ts +22 -0
- package/dist/capabilities/operations.d.ts.map +1 -0
- package/dist/capabilities/operations.js +62 -0
- package/dist/capabilities/operations.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/disclosure/index.d.ts +1 -1
- package/dist/disclosure/index.js +1 -1
- package/dist/disclosure/index.js.map +1 -1
- package/dist/format.d.ts +11 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +10 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +21 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -32
- package/dist/index.js.map +1 -1
- package/dist/lib/arkade-client-manager.d.ts +64 -24
- package/dist/lib/arkade-client-manager.d.ts.map +1 -1
- package/dist/lib/arkade-client-manager.js +240 -65
- package/dist/lib/arkade-client-manager.js.map +1 -1
- package/dist/lib/arkade-converters.d.ts +39 -0
- package/dist/lib/arkade-converters.d.ts.map +1 -0
- package/dist/lib/arkade-converters.js +148 -0
- package/dist/lib/arkade-converters.js.map +1 -0
- package/dist/lib/arkade-helpers.d.ts +110 -0
- package/dist/lib/arkade-helpers.d.ts.map +1 -0
- package/dist/lib/arkade-helpers.js +227 -0
- package/dist/lib/arkade-helpers.js.map +1 -0
- package/dist/lib/arkade-swaps-client-manager.d.ts +55 -0
- package/dist/lib/arkade-swaps-client-manager.d.ts.map +1 -0
- package/dist/lib/arkade-swaps-client-manager.js +127 -0
- package/dist/lib/arkade-swaps-client-manager.js.map +1 -0
- package/dist/lib/arkade-vtxo-lifecycle.d.ts +116 -0
- package/dist/lib/arkade-vtxo-lifecycle.d.ts.map +1 -0
- package/dist/lib/arkade-vtxo-lifecycle.js +184 -0
- package/dist/lib/arkade-vtxo-lifecycle.js.map +1 -0
- package/dist/lib/flashnet-client-manager.d.ts +26 -9
- package/dist/lib/flashnet-client-manager.d.ts.map +1 -1
- package/dist/lib/flashnet-client-manager.js +97 -13
- package/dist/lib/flashnet-client-manager.js.map +1 -1
- package/dist/lib/kaleido-client-manager.d.ts +38 -3
- package/dist/lib/kaleido-client-manager.d.ts.map +1 -1
- package/dist/lib/kaleido-client-manager.js +79 -10
- package/dist/lib/kaleido-client-manager.js.map +1 -1
- package/dist/lib/ln-message-sign.d.ts +20 -0
- package/dist/lib/ln-message-sign.d.ts.map +1 -0
- package/dist/lib/ln-message-sign.js +90 -0
- package/dist/lib/ln-message-sign.js.map +1 -0
- package/dist/lib/log.d.ts +15 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +16 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/orchestra-client.d.ts +149 -0
- package/dist/lib/orchestra-client.d.ts.map +1 -0
- package/dist/lib/orchestra-client.js +178 -0
- package/dist/lib/orchestra-client.js.map +1 -0
- package/dist/lib/psbt-signer.d.ts +60 -0
- package/dist/lib/psbt-signer.d.ts.map +1 -0
- package/dist/lib/psbt-signer.js +161 -0
- package/dist/lib/psbt-signer.js.map +1 -0
- package/dist/lib/rgb-converters.d.ts +62 -0
- package/dist/lib/rgb-converters.d.ts.map +1 -0
- package/dist/lib/rgb-converters.js +179 -0
- package/dist/lib/rgb-converters.js.map +1 -0
- package/dist/lib/rgb-fee-policy.d.ts +41 -0
- package/dist/lib/rgb-fee-policy.d.ts.map +1 -0
- package/dist/lib/rgb-fee-policy.js +52 -0
- package/dist/lib/rgb-fee-policy.js.map +1 -0
- package/dist/lib/rgb-helpers.d.ts +54 -0
- package/dist/lib/rgb-helpers.d.ts.map +1 -0
- package/dist/lib/rgb-helpers.js +89 -0
- package/dist/lib/rgb-helpers.js.map +1 -0
- package/dist/lib/spark-activity.d.ts +5 -0
- package/dist/lib/spark-activity.d.ts.map +1 -0
- package/dist/lib/spark-activity.js +11 -0
- package/dist/lib/spark-activity.js.map +1 -0
- package/dist/lib/spark-balance-cache.d.ts +58 -0
- package/dist/lib/spark-balance-cache.d.ts.map +1 -0
- package/dist/lib/spark-balance-cache.js +86 -0
- package/dist/lib/spark-balance-cache.js.map +1 -0
- package/dist/lib/spark-client-manager.d.ts +64 -10
- package/dist/lib/spark-client-manager.d.ts.map +1 -1
- package/dist/lib/spark-client-manager.js +191 -35
- package/dist/lib/spark-client-manager.js.map +1 -1
- package/dist/lib/spark-converters.d.ts +64 -0
- package/dist/lib/spark-converters.d.ts.map +1 -0
- package/dist/lib/spark-converters.js +242 -0
- package/dist/lib/spark-converters.js.map +1 -0
- package/dist/lib/spark-helpers.d.ts +72 -0
- package/dist/lib/spark-helpers.d.ts.map +1 -0
- package/dist/lib/spark-helpers.js +151 -0
- package/dist/lib/spark-helpers.js.map +1 -0
- package/dist/lib/spark-sent-token-records.d.ts +43 -0
- package/dist/lib/spark-sent-token-records.d.ts.map +1 -0
- package/dist/lib/spark-sent-token-records.js +105 -0
- package/dist/lib/spark-sent-token-records.js.map +1 -0
- package/dist/lib/wallet-seed.d.ts +31 -0
- package/dist/lib/wallet-seed.d.ts.map +1 -0
- package/dist/lib/wallet-seed.js +58 -0
- package/dist/lib/wallet-seed.js.map +1 -0
- package/dist/lib/zbase32.d.ts +3 -0
- package/dist/lib/zbase32.d.ts.map +1 -0
- package/dist/lib/zbase32.js +64 -0
- package/dist/lib/zbase32.js.map +1 -0
- package/dist/manager/ProtocolManager.d.ts +54 -3
- package/dist/manager/ProtocolManager.d.ts.map +1 -1
- package/dist/manager/ProtocolManager.js +118 -41
- package/dist/manager/ProtocolManager.js.map +1 -1
- package/dist/ports/index.d.ts +20 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +23 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/receive/unifiedReceive.d.ts +12 -0
- package/dist/receive/unifiedReceive.d.ts.map +1 -1
- package/dist/receive/unifiedReceive.js +35 -4
- package/dist/receive/unifiedReceive.js.map +1 -1
- package/dist/registry/createWdkRegistry.d.ts +10 -2
- package/dist/registry/createWdkRegistry.d.ts.map +1 -1
- package/dist/registry/createWdkRegistry.js +14 -7
- package/dist/registry/createWdkRegistry.js.map +1 -1
- package/dist/router/destination.d.ts +2 -2
- package/dist/router/destination.d.ts.map +1 -1
- package/dist/router/destination.js +34 -11
- package/dist/router/destination.js.map +1 -1
- package/dist/router/index.d.ts +39 -3
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +113 -4
- package/dist/router/index.js.map +1 -1
- package/dist/router/preference.d.ts +53 -0
- package/dist/router/preference.d.ts.map +1 -0
- package/dist/router/preference.js +81 -0
- package/dist/router/preference.js.map +1 -0
- package/dist/swap/KaleidoswapSwap.d.ts +1 -1
- package/dist/swap/KaleidoswapSwap.d.ts.map +1 -1
- package/dist/swap/KaleidoswapSwap.js +37 -20
- package/dist/swap/KaleidoswapSwap.js.map +1 -1
- package/dist/swap/index.d.ts +8 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +8 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/types/arkade.d.ts +1 -1
- package/dist/types/base.d.ts +35 -25
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/base.js +28 -2
- package/dist/types/base.js.map +1 -1
- package/dist/types/cross-l2.d.ts +1 -1
- package/dist/types/flashnet.d.ts +20 -0
- package/dist/types/flashnet.d.ts.map +1 -1
- package/dist/types/flashnet.js +34 -6
- package/dist/types/flashnet.js.map +1 -1
- package/dist/types/rgb.d.ts +18 -4
- package/dist/types/rgb.d.ts.map +1 -1
- package/dist/types/spark.d.ts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +68 -14
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAQ;AACR,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAIhC,cAAc,kBAAkB,CAAA;AAEhC,oBAAoB;AACpB,OAAO,EAAqG,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAExK,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAA6B,MAAM,gBAAgB,CAAA;AAErH,yEAAyE;AACzE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAA;AAI1I,8EAA8E;AAC9E,sFAAsF;AACtF,gGAAgG;AAChG,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5E,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,4EAA4E;AAC5E,gFAAgF;AAChF,4BAA4B;AAC5B,6EAA6E;AAC7E,+EAA+E;AAC/E,wEAAwE;AAExE,oDAAoD;AACpD,OAAO,EACL,mBAAmB,GAMpB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,mBAAmB,GAGpB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GAGX,MAAM,qBAAqB,CAAA;AAE5B,0EAA0E;AAC1E,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GAEjB,MAAM,0BAA0B,CAAA;AAEjC,iCAAiC;AACjC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GAKT,MAAM,cAAc,CAAA;AAErB,yEAAyE;AACzE,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,8BAA8B,EAC9B,oBAAoB,EACpB,yBAAyB,EACzB,4BAA4B,EAC5B,qBAAqB,EACrB,qBAAqB,EACrB,8BAA8B,GAS/B,MAAM,6BAA6B,CAAA;AAEpC,UAAU;AACV,OAAO,EAAE,eAAe,EAA8B,MAAM,2BAA2B,CAAA;AAEvF,YAAY;AACZ,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA"}
|
|
@@ -1,46 +1,86 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Arkade Client Manager
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of an Arkade wallet (`@arkade-os/sdk` v0.4.x).
|
|
5
|
+
* The SDK is pure TypeScript — no WASM, no dynamic import() restrictions —
|
|
6
|
+
* so it runs directly inside an MV3 service worker.
|
|
7
|
+
*
|
|
8
|
+
* Platform-agnostic: storage repositories and network providers are injected
|
|
9
|
+
* by consumers via `setPlatformProviders()`. The extension supplies the SDK's
|
|
10
|
+
* IndexedDB repositories (the default when a browser host provides none);
|
|
11
|
+
* React Native injects AsyncStorage-backed repositories. No `chrome.*` /
|
|
12
|
+
* platform globals are referenced here.
|
|
13
|
+
*
|
|
14
|
+
* Wallet-secret handling: new wallets use an nsec root secret. A 64-char hex
|
|
15
|
+
* private key and BIP39 mnemonics (BIP86 Taproot derivation) are also accepted
|
|
16
|
+
* so developer/test imports behave predictably. Deriving nsec-rooted keys
|
|
17
|
+
* directly (rather than via BIP39 `mnemonicToSeedSync`) avoids the
|
|
18
|
+
* "Invalid mnemonic" failure mode nsec-rooted wallets otherwise hit.
|
|
6
19
|
*/
|
|
7
|
-
import type { ArkadeConfig } from
|
|
8
|
-
|
|
20
|
+
import type { ArkadeConfig } from "../types/arkade.js";
|
|
21
|
+
import { Wallet, VtxoManager } from "@arkade-os/sdk";
|
|
22
|
+
import type { IncomingFunds } from "@arkade-os/sdk";
|
|
9
23
|
/**
|
|
10
|
-
* Platform-specific providers injected by consumers.
|
|
24
|
+
* Platform-specific providers injected by consumers. When a factory is absent
|
|
25
|
+
* the manager falls back to the SDK's browser-native implementation
|
|
26
|
+
* (IndexedDB repositories, `RestDelegatorProvider`), which is correct for the
|
|
27
|
+
* extension. Non-browser hosts (React Native) must inject every provider they
|
|
28
|
+
* rely on.
|
|
11
29
|
*/
|
|
12
30
|
export interface ArkadePlatformProviders {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* SDK factory injected by consumers.
|
|
20
|
-
* Consumers must call `setArkadeSdkFactory()` before `initialize()`.
|
|
21
|
-
*/
|
|
22
|
-
export interface ArkadeSdkFactory {
|
|
23
|
-
createWallet: (config: any) => Promise<any>;
|
|
24
|
-
createIdentity: (privateKeyHex: string) => any;
|
|
31
|
+
createWalletRepository?: (dbName: string) => unknown;
|
|
32
|
+
createContractRepository?: (dbName: string) => unknown;
|
|
33
|
+
createDelegatorProvider?: (url: string) => unknown;
|
|
34
|
+
createArkProvider?: () => unknown;
|
|
35
|
+
createIndexerProvider?: () => unknown;
|
|
25
36
|
}
|
|
26
37
|
declare class ArkadeClientManager {
|
|
27
38
|
private wallet;
|
|
39
|
+
private _vtxoManager;
|
|
28
40
|
private config;
|
|
41
|
+
/** Serializes concurrent initialize() calls */
|
|
29
42
|
private _initPromise;
|
|
43
|
+
/** Config for the in-flight _initPromise (used for concurrent-init guard) */
|
|
44
|
+
private _pendingConfig;
|
|
45
|
+
/** Cleanup function returned by wallet.notifyIncomingFunds() */
|
|
46
|
+
private _stopIncomingFunds;
|
|
47
|
+
/** Guards against duplicate startIncomingFundsListener() calls */
|
|
48
|
+
private _listenerStarted;
|
|
49
|
+
/** Platform-injected providers (repositories, delegator, network) */
|
|
30
50
|
private platformProviders;
|
|
31
|
-
|
|
51
|
+
/** Inject platform-specific providers before calling initialize(). */
|
|
32
52
|
setPlatformProviders(providers: ArkadePlatformProviders): void;
|
|
33
53
|
/**
|
|
34
|
-
*
|
|
35
|
-
*
|
|
54
|
+
* Initialize the Arkade wallet.
|
|
55
|
+
* Concurrent calls share the same in-flight promise to prevent races.
|
|
56
|
+
* Throws if called while already initializing with a different identity or
|
|
57
|
+
* network — the caller must call dispose() first.
|
|
36
58
|
*/
|
|
37
|
-
setSdkFactory(factory: ArkadeSdkFactory): void;
|
|
38
59
|
initialize(config: ArkadeConfig): Promise<void>;
|
|
39
60
|
private _doInitialize;
|
|
40
|
-
|
|
61
|
+
private buildDbName;
|
|
62
|
+
refreshVtxoState(): Promise<void>;
|
|
63
|
+
/**
|
|
64
|
+
* Return the active wallet instance.
|
|
65
|
+
* Throws if not initialized.
|
|
66
|
+
*/
|
|
67
|
+
getWallet(): Wallet;
|
|
68
|
+
/**
|
|
69
|
+
* Return the VtxoManager for VTXO lifecycle operations.
|
|
70
|
+
* Throws if not initialized.
|
|
71
|
+
*/
|
|
72
|
+
getVtxoManager(): VtxoManager;
|
|
41
73
|
isInitialized(): boolean;
|
|
42
|
-
getWallet(): ArkadeWallet;
|
|
43
74
|
getConfig(): ArkadeConfig | null;
|
|
75
|
+
disconnect(): Promise<void>;
|
|
76
|
+
reset(): void;
|
|
77
|
+
/**
|
|
78
|
+
* Start listening for incoming VTXOs and boarding UTXOs.
|
|
79
|
+
* @param onIncoming Callback fired per notification; receives the raw SDK payload.
|
|
80
|
+
* @returns Stop function (also called automatically on disconnect/reset)
|
|
81
|
+
*/
|
|
82
|
+
startIncomingFundsListener(onIncoming: (notification: IncomingFunds) => void): void;
|
|
83
|
+
stopIncomingFundsListener(): void;
|
|
44
84
|
}
|
|
45
85
|
export declare const arkadeClientManager: ArkadeClientManager;
|
|
46
86
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arkade-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/arkade-client-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"arkade-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/arkade-client-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAOpD,OAAO,EACL,MAAM,EAIN,WAAW,EAEZ,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,gBAAgB,CAAC;AAMlE;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,sBAAsB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACrD,wBAAwB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;IACvD,uBAAuB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC;IAClC,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;CACvC;AAoDD,cAAM,mBAAmB;IACvB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,MAAM,CAA6B;IAC3C,+CAA+C;IAC/C,OAAO,CAAC,YAAY,CAA8B;IAClD,6EAA6E;IAC7E,OAAO,CAAC,cAAc,CAA6B;IACnD,gEAAgE;IAChE,OAAO,CAAC,kBAAkB,CAA6B;IACvD,kEAAkE;IAClE,OAAO,CAAC,gBAAgB,CAAS;IACjC,qEAAqE;IACrE,OAAO,CAAC,iBAAiB,CAA+B;IAExD,sEAAsE;IACtE,oBAAoB,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI;IAI9D;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YA0BjC,aAAa;YAsEb,WAAW;IASnB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAavC;;;OAGG;IACH,SAAS,IAAI,MAAM;IAOnB;;;OAGG;IACH,cAAc,IAAI,WAAW;IAO7B,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,YAAY,GAAG,IAAI;IAI1B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC,KAAK,IAAI,IAAI;IAiBb;;;;OAIG;IACH,0BAA0B,CAAC,UAAU,EAAE,CAAC,YAAY,EAAE,aAAa,KAAK,IAAI,GAAG,IAAI;IAgCnF,yBAAyB,IAAI,IAAI;CAYlC;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAC"}
|
|
@@ -1,121 +1,296 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Arkade Client Manager
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
*
|
|
4
|
+
* Manages the lifecycle of an Arkade wallet (`@arkade-os/sdk` v0.4.x).
|
|
5
|
+
* The SDK is pure TypeScript — no WASM, no dynamic import() restrictions —
|
|
6
|
+
* so it runs directly inside an MV3 service worker.
|
|
7
|
+
*
|
|
8
|
+
* Platform-agnostic: storage repositories and network providers are injected
|
|
9
|
+
* by consumers via `setPlatformProviders()`. The extension supplies the SDK's
|
|
10
|
+
* IndexedDB repositories (the default when a browser host provides none);
|
|
11
|
+
* React Native injects AsyncStorage-backed repositories. No `chrome.*` /
|
|
12
|
+
* platform globals are referenced here.
|
|
13
|
+
*
|
|
14
|
+
* Wallet-secret handling: new wallets use an nsec root secret. A 64-char hex
|
|
15
|
+
* private key and BIP39 mnemonics (BIP86 Taproot derivation) are also accepted
|
|
16
|
+
* so developer/test imports behave predictably. Deriving nsec-rooted keys
|
|
17
|
+
* directly (rather than via BIP39 `mnemonicToSeedSync`) avoids the
|
|
18
|
+
* "Invalid mnemonic" failure mode nsec-rooted wallets otherwise hit.
|
|
6
19
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
20
|
+
import { DEFAULT_VTXO_THRESHOLD_SECONDS } from "./arkade-vtxo-lifecycle.js";
|
|
21
|
+
import { log } from "./log.js";
|
|
22
|
+
import { mnemonicToSeedSync } from "@scure/bip39";
|
|
23
|
+
import { HDKey } from "@scure/bip32";
|
|
24
|
+
import { bech32 } from "@scure/base";
|
|
25
|
+
import { bytesToHex } from "@noble/hashes/utils.js";
|
|
26
|
+
import { Wallet, SingleKey, IndexedDBWalletRepository, IndexedDBContractRepository, RestDelegatorProvider, } from "@arkade-os/sdk";
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Wallet-secret helpers
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
/** Decode an `nsec1…` bech32 secret into a 32-byte private key hex, or null. */
|
|
31
|
+
function nsecToPrivateKeyHex(input) {
|
|
32
|
+
try {
|
|
33
|
+
// nsec is plain bech32 (not bech32m) over the 32-byte secret. Use a
|
|
34
|
+
// generous length limit — the default 90 is enough but we future-proof.
|
|
35
|
+
const decoded = bech32.decode(input, 1023);
|
|
36
|
+
if (decoded.prefix !== "nsec")
|
|
37
|
+
return null;
|
|
38
|
+
const data = bech32.fromWords(decoded.words);
|
|
39
|
+
if (data.length !== 32)
|
|
40
|
+
return null;
|
|
41
|
+
return bytesToHex(Uint8Array.from(data));
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Resolve a wallet secret to the 32-byte private key hex the Arkade identity
|
|
49
|
+
* needs. Accepts (in order): an `nsec1…` root secret, a 64-char hex private
|
|
50
|
+
* key, or a BIP39 mnemonic (BIP86 Taproot `m/86'/{coinType}'/0'/0/0`).
|
|
51
|
+
*/
|
|
52
|
+
function resolveArkadePrivateKeyHex(walletSecret, isMainnet) {
|
|
53
|
+
const trimmed = walletSecret.trim();
|
|
54
|
+
if (trimmed.startsWith("nsec1")) {
|
|
55
|
+
const hex = nsecToPrivateKeyHex(trimmed);
|
|
56
|
+
if (hex)
|
|
57
|
+
return hex;
|
|
58
|
+
}
|
|
59
|
+
if (/^[0-9a-f]{64}$/i.test(trimmed)) {
|
|
60
|
+
return trimmed.toLowerCase();
|
|
61
|
+
}
|
|
62
|
+
const seed = mnemonicToSeedSync(trimmed);
|
|
11
63
|
const root = HDKey.fromMasterSeed(seed);
|
|
12
64
|
const coinType = isMainnet ? 0 : 1;
|
|
13
65
|
const child = root.derive(`m/86'/${coinType}'/0'/0/0`);
|
|
14
66
|
if (!child.privateKey) {
|
|
15
|
-
throw new Error(
|
|
67
|
+
throw new Error("Failed to derive private key from wallet secret");
|
|
16
68
|
}
|
|
17
|
-
return
|
|
69
|
+
return bytesToHex(child.privateKey);
|
|
18
70
|
}
|
|
71
|
+
// ---------------------------------------------------------------------------
|
|
72
|
+
// ArkadeClientManager
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
19
74
|
class ArkadeClientManager {
|
|
20
75
|
constructor() {
|
|
21
76
|
this.wallet = null;
|
|
77
|
+
this._vtxoManager = null;
|
|
22
78
|
this.config = null;
|
|
79
|
+
/** Serializes concurrent initialize() calls */
|
|
23
80
|
this._initPromise = null;
|
|
81
|
+
/** Config for the in-flight _initPromise (used for concurrent-init guard) */
|
|
82
|
+
this._pendingConfig = null;
|
|
83
|
+
/** Cleanup function returned by wallet.notifyIncomingFunds() */
|
|
84
|
+
this._stopIncomingFunds = null;
|
|
85
|
+
/** Guards against duplicate startIncomingFundsListener() calls */
|
|
86
|
+
this._listenerStarted = false;
|
|
87
|
+
/** Platform-injected providers (repositories, delegator, network) */
|
|
24
88
|
this.platformProviders = {};
|
|
25
|
-
this.sdkFactory = null;
|
|
26
89
|
}
|
|
90
|
+
/** Inject platform-specific providers before calling initialize(). */
|
|
27
91
|
setPlatformProviders(providers) {
|
|
28
92
|
this.platformProviders = providers;
|
|
29
93
|
}
|
|
30
94
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
95
|
+
* Initialize the Arkade wallet.
|
|
96
|
+
* Concurrent calls share the same in-flight promise to prevent races.
|
|
97
|
+
* Throws if called while already initializing with a different identity or
|
|
98
|
+
* network — the caller must call dispose() first.
|
|
33
99
|
*/
|
|
34
|
-
setSdkFactory(factory) {
|
|
35
|
-
this.sdkFactory = factory;
|
|
36
|
-
}
|
|
37
100
|
initialize(config) {
|
|
38
|
-
if (this._initPromise)
|
|
101
|
+
if (this._initPromise) {
|
|
102
|
+
if (this._pendingConfig?.network !== config.network ||
|
|
103
|
+
this._pendingConfig?.mnemonic !== config.mnemonic ||
|
|
104
|
+
this._pendingConfig?.arkServerUrl !== config.arkServerUrl ||
|
|
105
|
+
this._pendingConfig?.delegatorUrl !== config.delegatorUrl ||
|
|
106
|
+
this._pendingConfig?.delegationEnabled !== config.delegationEnabled ||
|
|
107
|
+
this._pendingConfig?.vtxoThresholdSeconds !== config.vtxoThresholdSeconds) {
|
|
108
|
+
return Promise.reject(new Error("Arkade client is already initializing with a different config. Call dispose() first."));
|
|
109
|
+
}
|
|
39
110
|
return this._initPromise;
|
|
111
|
+
}
|
|
112
|
+
this._pendingConfig = config;
|
|
40
113
|
this._initPromise = this._doInitialize(config).finally(() => {
|
|
41
114
|
this._initPromise = null;
|
|
115
|
+
this._pendingConfig = null;
|
|
42
116
|
});
|
|
43
117
|
return this._initPromise;
|
|
44
118
|
}
|
|
45
119
|
async _doInitialize(config) {
|
|
46
120
|
if (this.wallet) {
|
|
47
|
-
|
|
121
|
+
log.warn("[ArkadeClientManager] Wallet already initialized, re-initializing...");
|
|
48
122
|
await this.disconnect();
|
|
49
123
|
}
|
|
124
|
+
this.config = config;
|
|
50
125
|
try {
|
|
51
|
-
const isMainnet = config.network ===
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
if (config.esploraUrl) {
|
|
59
|
-
walletConfig.esploraUrl = config.esploraUrl;
|
|
60
|
-
}
|
|
61
|
-
// Storage repositories (IndexedDB for extension, AsyncStorage for RN)
|
|
62
|
-
const storage = {};
|
|
63
|
-
if (this.platformProviders.createWalletRepository) {
|
|
64
|
-
storage.walletRepository = this.platformProviders.createWalletRepository();
|
|
65
|
-
}
|
|
66
|
-
if (this.platformProviders.createContractRepository) {
|
|
67
|
-
storage.contractRepository = this.platformProviders.createContractRepository();
|
|
68
|
-
}
|
|
69
|
-
if (Object.keys(storage).length > 0) {
|
|
70
|
-
walletConfig.storage = storage;
|
|
71
|
-
}
|
|
72
|
-
// Settlement config (VTXO lifecycle)
|
|
73
|
-
walletConfig.settlementConfig = {
|
|
74
|
-
vtxoThreshold: config.vtxoThresholdSeconds ?? 259200, // 3 days default
|
|
126
|
+
const isMainnet = config.network === "mainnet";
|
|
127
|
+
const privKeyHex = resolveArkadePrivateKeyHex(config.mnemonic, isMainnet);
|
|
128
|
+
const identity = SingleKey.fromHex(privKeyHex);
|
|
129
|
+
const dbName = await this.buildDbName(config, identity);
|
|
130
|
+
const vtxoThreshold = config.vtxoThresholdSeconds ?? DEFAULT_VTXO_THRESHOLD_SECONDS;
|
|
131
|
+
const settlementConfig = {
|
|
132
|
+
vtxoThreshold,
|
|
75
133
|
boardingUtxoSweep: true,
|
|
76
134
|
pollIntervalMs: 60000,
|
|
77
135
|
};
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
136
|
+
const walletConfig = {
|
|
137
|
+
identity,
|
|
138
|
+
arkServerUrl: config.arkServerUrl,
|
|
139
|
+
esploraUrl: config.esploraUrl,
|
|
140
|
+
storage: {
|
|
141
|
+
walletRepository: (this.platformProviders.createWalletRepository?.(dbName) ??
|
|
142
|
+
new IndexedDBWalletRepository(dbName)),
|
|
143
|
+
contractRepository: (this.platformProviders.createContractRepository?.(dbName) ??
|
|
144
|
+
new IndexedDBContractRepository(dbName)),
|
|
145
|
+
},
|
|
146
|
+
settlementConfig,
|
|
147
|
+
};
|
|
148
|
+
// Wire delegation provider if configured.
|
|
149
|
+
if (config.delegatorUrl && config.delegationEnabled) {
|
|
150
|
+
walletConfig.delegatorProvider = (this.platformProviders.createDelegatorProvider?.(config.delegatorUrl) ?? new RestDelegatorProvider(config.delegatorUrl));
|
|
151
|
+
log.info("[ArkadeClientManager] Delegation provider configured:", config.delegatorUrl);
|
|
93
152
|
}
|
|
94
|
-
this.
|
|
95
|
-
|
|
153
|
+
this.wallet = await Wallet.create(walletConfig);
|
|
154
|
+
// Reuse the wallet's own VtxoManager rather than creating a second one.
|
|
155
|
+
// Wallet.create() already initialises an internal VtxoManager with the
|
|
156
|
+
// same settlementConfig; constructing another would register a duplicate
|
|
157
|
+
// contract-event subscription and a second boarding-UTXO poll loop.
|
|
158
|
+
this._vtxoManager = await this.wallet.getVtxoManager();
|
|
159
|
+
await this.refreshVtxoState();
|
|
160
|
+
log.info("[ArkadeClientManager] Arkade wallet initialized successfully (vtxoThreshold=%ds)", vtxoThreshold);
|
|
96
161
|
}
|
|
97
162
|
catch (error) {
|
|
98
163
|
this.wallet = null;
|
|
164
|
+
this._vtxoManager = null;
|
|
99
165
|
const msg = error instanceof Error ? error.message : String(error);
|
|
100
|
-
throw new Error(`Failed to initialize Arkade wallet: ${msg}`)
|
|
166
|
+
throw Object.assign(new Error(`Failed to initialize Arkade wallet: ${msg}`), {
|
|
167
|
+
cause: error,
|
|
168
|
+
});
|
|
101
169
|
}
|
|
102
170
|
}
|
|
103
|
-
async
|
|
104
|
-
|
|
105
|
-
|
|
171
|
+
async buildDbName(config, identity) {
|
|
172
|
+
const pubKey = await identity.xOnlyPublicKey();
|
|
173
|
+
const pubKeyHex = bytesToHex(pubKey);
|
|
174
|
+
return `arkade-wallet-${config.network}-${pubKeyHex.slice(0, 16)}`;
|
|
106
175
|
}
|
|
107
|
-
|
|
108
|
-
|
|
176
|
+
async refreshVtxoState() {
|
|
177
|
+
if (!this.wallet) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
try {
|
|
181
|
+
const contractManager = await this.wallet.getContractManager();
|
|
182
|
+
await contractManager.refreshVtxos();
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
log.warn("[ArkadeClientManager] Failed to refresh VTXO state:", error);
|
|
186
|
+
}
|
|
109
187
|
}
|
|
188
|
+
/**
|
|
189
|
+
* Return the active wallet instance.
|
|
190
|
+
* Throws if not initialized.
|
|
191
|
+
*/
|
|
110
192
|
getWallet() {
|
|
111
193
|
if (!this.wallet) {
|
|
112
|
-
throw new Error(
|
|
194
|
+
throw new Error("Arkade wallet not initialized. Call initialize() first.");
|
|
113
195
|
}
|
|
114
196
|
return this.wallet;
|
|
115
197
|
}
|
|
198
|
+
/**
|
|
199
|
+
* Return the VtxoManager for VTXO lifecycle operations.
|
|
200
|
+
* Throws if not initialized.
|
|
201
|
+
*/
|
|
202
|
+
getVtxoManager() {
|
|
203
|
+
if (!this._vtxoManager) {
|
|
204
|
+
throw new Error("VtxoManager not initialized. Call initialize() first.");
|
|
205
|
+
}
|
|
206
|
+
return this._vtxoManager;
|
|
207
|
+
}
|
|
208
|
+
isInitialized() {
|
|
209
|
+
return this.wallet !== null;
|
|
210
|
+
}
|
|
116
211
|
getConfig() {
|
|
117
212
|
return this.config;
|
|
118
213
|
}
|
|
214
|
+
async disconnect() {
|
|
215
|
+
this.stopIncomingFundsListener();
|
|
216
|
+
this._listenerStarted = false;
|
|
217
|
+
if (this._vtxoManager) {
|
|
218
|
+
try {
|
|
219
|
+
await this._vtxoManager.dispose();
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
/* ignore */
|
|
223
|
+
}
|
|
224
|
+
this._vtxoManager = null;
|
|
225
|
+
}
|
|
226
|
+
this.wallet = null;
|
|
227
|
+
this.config = null;
|
|
228
|
+
log.info("[ArkadeClientManager] Wallet disconnected");
|
|
229
|
+
}
|
|
230
|
+
reset() {
|
|
231
|
+
this.stopIncomingFundsListener();
|
|
232
|
+
this._listenerStarted = false;
|
|
233
|
+
if (this._vtxoManager) {
|
|
234
|
+
try {
|
|
235
|
+
this._vtxoManager.dispose();
|
|
236
|
+
}
|
|
237
|
+
catch {
|
|
238
|
+
/* ignore */
|
|
239
|
+
}
|
|
240
|
+
this._vtxoManager = null;
|
|
241
|
+
}
|
|
242
|
+
this.wallet = null;
|
|
243
|
+
this.config = null;
|
|
244
|
+
this._initPromise = null;
|
|
245
|
+
log.info("[ArkadeClientManager] Complete reset performed");
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Start listening for incoming VTXOs and boarding UTXOs.
|
|
249
|
+
* @param onIncoming Callback fired per notification; receives the raw SDK payload.
|
|
250
|
+
* @returns Stop function (also called automatically on disconnect/reset)
|
|
251
|
+
*/
|
|
252
|
+
startIncomingFundsListener(onIncoming) {
|
|
253
|
+
if (this._listenerStarted) {
|
|
254
|
+
log.warn("[ArkadeClientManager] Incoming funds listener already started — ignoring duplicate call");
|
|
255
|
+
return;
|
|
256
|
+
}
|
|
257
|
+
if (!this.wallet) {
|
|
258
|
+
log.warn("[ArkadeClientManager] Cannot start listener — wallet not initialized");
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
// Stop any existing subscription first
|
|
262
|
+
this.stopIncomingFundsListener();
|
|
263
|
+
this.wallet
|
|
264
|
+
.notifyIncomingFunds((notification) => {
|
|
265
|
+
try {
|
|
266
|
+
onIncoming(notification);
|
|
267
|
+
}
|
|
268
|
+
catch (err) {
|
|
269
|
+
log.error("[ArkadeClientManager] Error in incoming funds callback:", err);
|
|
270
|
+
}
|
|
271
|
+
})
|
|
272
|
+
.then((stop) => {
|
|
273
|
+
this._stopIncomingFunds = stop;
|
|
274
|
+
this._listenerStarted = true;
|
|
275
|
+
log.info("[ArkadeClientManager] Incoming funds listener started");
|
|
276
|
+
})
|
|
277
|
+
.catch((err) => {
|
|
278
|
+
log.error("[ArkadeClientManager] Failed to start incoming funds listener:", err);
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
stopIncomingFundsListener() {
|
|
282
|
+
if (this._stopIncomingFunds) {
|
|
283
|
+
try {
|
|
284
|
+
this._stopIncomingFunds();
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
/* ignore */
|
|
288
|
+
}
|
|
289
|
+
this._stopIncomingFunds = null;
|
|
290
|
+
this._listenerStarted = false;
|
|
291
|
+
log.info("[ArkadeClientManager] Incoming funds listener stopped");
|
|
292
|
+
}
|
|
293
|
+
}
|
|
119
294
|
}
|
|
120
295
|
export const arkadeClientManager = new ArkadeClientManager();
|
|
121
296
|
//# sourceMappingURL=arkade-client-manager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arkade-client-manager.js","sourceRoot":"","sources":["../../src/lib/arkade-client-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"arkade-client-manager.js","sourceRoot":"","sources":["../../src/lib/arkade-client-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK ↔ unified-shape converter for the Arkade adapter.
|
|
3
|
+
*
|
|
4
|
+
* The single converter here covers Arkade transaction history:
|
|
5
|
+
* - `convertArkTxToUnifiedAll` — expand one ArkTransaction into one
|
|
6
|
+
* UnifiedTransaction per asset moved (or a single BTC entry for
|
|
7
|
+
* pure-BTC transfers).
|
|
8
|
+
*
|
|
9
|
+
* `getAssetDetails` is injected as a callback so this module stays pure —
|
|
10
|
+
* the adapter wraps its `getCachedAssetDetails(wallet, …)` to pre-bind the
|
|
11
|
+
* wallet + cache. That keeps the unit tests free of the @arkade-os/sdk
|
|
12
|
+
* Wallet shape.
|
|
13
|
+
*/
|
|
14
|
+
import type { ArkTransaction } from "@arkade-os/sdk";
|
|
15
|
+
import type { UnifiedTransaction } from "../types/base.js";
|
|
16
|
+
/**
|
|
17
|
+
* Resolve metadata for an Arkade asset id. The adapter passes a
|
|
18
|
+
* cache-backed implementation that calls `wallet.assetManager.getAssetDetails`.
|
|
19
|
+
* Returning `null` on failure is fine — the converter falls back to the
|
|
20
|
+
* helper-derived ticker / name / precision.
|
|
21
|
+
*/
|
|
22
|
+
export type AssetDetailsResolver = (assetId: string) => Promise<Record<string, unknown> | null>;
|
|
23
|
+
/**
|
|
24
|
+
* Expand an ArkTransaction into one UnifiedTransaction per asset moved.
|
|
25
|
+
* Asset-bearing transfers carry only dust BTC for the carrier output, so we
|
|
26
|
+
* emit one entry per `tx.assets[]` entry; pure-BTC transfers emit a single
|
|
27
|
+
* BTC entry. `type` is the SDK's TxType enum: "SENT" or "RECEIVED".
|
|
28
|
+
*
|
|
29
|
+
* SDK semantics (transactionHistory.js): asset amounts on RECEIVED txs come
|
|
30
|
+
* from `collectAssets` (positive sums). Asset amounts on SENT txs come from
|
|
31
|
+
* `subtractAssets(spent, change)` — i.e. `change - spent`, which is negative.
|
|
32
|
+
* We surface absolute amounts and rely on `direction` for the sign.
|
|
33
|
+
*
|
|
34
|
+
* On any error the converter swallows and returns `[]` — `listTransactions`
|
|
35
|
+
* uses Promise.all over a flat-map, so a single malformed history entry
|
|
36
|
+
* must not poison the whole batch.
|
|
37
|
+
*/
|
|
38
|
+
export declare function convertArkTxToUnifiedAll(tx: ArkTransaction, resolveDetails: AssetDetailsResolver): Promise<UnifiedTransaction[]>;
|
|
39
|
+
//# sourceMappingURL=arkade-converters.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-converters.d.ts","sourceRoot":"","sources":["../../src/lib/arkade-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,EAAgB,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAYtE;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;AAEhG;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,wBAAwB,CAC5C,EAAE,EAAE,cAAc,EAClB,cAAc,EAAE,oBAAoB,GACnC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAkI/B"}
|