@hardkas/toolkit 0.11.2-alpha → 0.11.4-alpha
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/fee-estimator.d.ts +9 -0
- package/dist/fee-estimator.d.ts.map +1 -0
- package/dist/fee-estimator.js +32 -0
- package/dist/fee-estimator.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer.d.ts +1 -0
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +7 -0
- package/dist/indexer.js.map +1 -1
- package/dist/query-api.d.ts +22 -0
- package/dist/query-api.d.ts.map +1 -0
- package/dist/query-api.js +116 -0
- package/dist/query-api.js.map +1 -0
- package/dist/snapshot/serialization.d.ts +0 -9
- package/dist/snapshot/serialization.d.ts.map +1 -1
- package/dist/snapshot/serialization.js +0 -12
- package/dist/snapshot/serialization.js.map +1 -1
- package/dist/subscriptions.d.ts +22 -0
- package/dist/subscriptions.d.ts.map +1 -0
- package/dist/subscriptions.js +91 -0
- package/dist/subscriptions.js.map +1 -0
- package/dist/wallet.d.ts +71 -1
- package/dist/wallet.d.ts.map +1 -1
- package/dist/wallet.js +296 -44
- package/dist/wallet.js.map +1 -1
- package/package.json +24 -9
- package/.turbo/turbo-build.log +0 -4
- package/src/dag/consensus.ts +0 -150
- package/src/dag/index.ts +0 -73
- package/src/dag/store.ts +0 -40
- package/src/dag/topology.ts +0 -108
- package/src/dag/types.ts +0 -20
- package/src/index.ts +0 -10
- package/src/indexer.ts +0 -134
- package/src/jobs.ts +0 -63
- package/src/payment.ts +0 -100
- package/src/silver/index.ts +0 -102
- package/src/silver/templates.ts +0 -27
- package/src/silver/types.ts +0 -37
- package/src/snapshot/backends/FsSnapshotBackend.ts +0 -100
- package/src/snapshot/backends/MemorySnapshotBackend.ts +0 -65
- package/src/snapshot/index.ts +0 -102
- package/src/snapshot/serialization.ts +0 -35
- package/src/snapshot/types.ts +0 -45
- package/src/stores/invoice-store.ts +0 -62
- package/src/stores/utxo-control-store.ts +0 -78
- package/src/utxos.ts +0 -451
- package/src/wallet.ts +0 -158
- package/test/silver.test.ts +0 -59
- package/test/snapshot.test.ts +0 -99
- package/test/toolkit.test.ts +0 -140
- package/tsconfig.json +0 -9
- package/vitest.config.ts +0 -8
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { KaspaRpcClient } from '@hardkas/kaspa-rpc';
|
|
2
|
+
export type FeePriority = "slow" | "normal" | "fast";
|
|
3
|
+
export interface DynamicFeeRateResult {
|
|
4
|
+
feeRate: bigint;
|
|
5
|
+
evidence: "dynamic" | "heuristic";
|
|
6
|
+
mempoolSize?: number | undefined;
|
|
7
|
+
}
|
|
8
|
+
export declare function calculateDynamicFeeRate(rpc: KaspaRpcClient | undefined, priority: FeePriority): Promise<DynamicFeeRateResult>;
|
|
9
|
+
//# sourceMappingURL=fee-estimator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee-estimator.d.ts","sourceRoot":"","sources":["../src/fee-estimator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,SAAS,GAAG,WAAW,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,wBAAsB,uBAAuB,CACzC,GAAG,EAAE,cAAc,GAAG,SAAS,EAC/B,QAAQ,EAAE,WAAW,GACtB,OAAO,CAAC,oBAAoB,CAAC,CAgC/B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export async function calculateDynamicFeeRate(rpc, priority) {
|
|
2
|
+
const feeFloor = priority === "slow" ? 1n : priority === "normal" ? 2n : 5n;
|
|
3
|
+
let dynamicMempoolMultiplier = 1n;
|
|
4
|
+
let evidence = "heuristic";
|
|
5
|
+
let mempoolSize = undefined;
|
|
6
|
+
if (rpc && rpc.getInfo) {
|
|
7
|
+
try {
|
|
8
|
+
const info = await rpc.getInfo();
|
|
9
|
+
mempoolSize = info.mempoolSize;
|
|
10
|
+
// Dynamic heuristics based on mempool size
|
|
11
|
+
if (mempoolSize !== undefined) {
|
|
12
|
+
if (mempoolSize > 10000) {
|
|
13
|
+
dynamicMempoolMultiplier = priority === "slow" ? 1n : 2n;
|
|
14
|
+
}
|
|
15
|
+
if (mempoolSize > 50000) {
|
|
16
|
+
dynamicMempoolMultiplier = priority === "slow" ? 2n : priority === "normal" ? 5n : 10n;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
evidence = "dynamic";
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
// Graceful fallback to heuristic if RPC is unreachable or fails
|
|
23
|
+
evidence = "heuristic";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return {
|
|
27
|
+
feeRate: feeFloor * dynamicMempoolMultiplier,
|
|
28
|
+
evidence,
|
|
29
|
+
...(mempoolSize !== undefined ? { mempoolSize } : {})
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=fee-estimator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fee-estimator.js","sourceRoot":"","sources":["../src/fee-estimator.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,GAA+B,EAC/B,QAAqB;IAErB,MAAM,QAAQ,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5E,IAAI,wBAAwB,GAAG,EAAE,CAAC;IAClC,IAAI,QAAQ,GAA4B,WAAW,CAAC;IACpD,IAAI,WAAW,GAAuB,SAAS,CAAC;IAEhD,IAAI,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QACrB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YACjC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAE/B,2CAA2C;YAC3C,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;gBAC5B,IAAI,WAAW,GAAG,KAAK,EAAE,CAAC;oBACtB,wBAAwB,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC7D,CAAC;gBACD,IAAI,WAAW,GAAG,KAAK,EAAE,CAAC;oBACtB,wBAAwB,GAAG,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC3F,CAAC;YACL,CAAC;YACD,QAAQ,GAAG,SAAS,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,gEAAgE;YAChE,QAAQ,GAAG,WAAW,CAAC;QAC3B,CAAC;IACL,CAAC;IAED,OAAO;QACH,OAAO,EAAE,QAAQ,GAAG,wBAAwB;QAC5C,QAAQ;QACR,GAAG,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxD,CAAC;AACN,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,4 +8,7 @@ export * from './dag/index.js';
|
|
|
8
8
|
export * from './snapshot/index.js';
|
|
9
9
|
export * from './silver/index.js';
|
|
10
10
|
export * from './silver/types.js';
|
|
11
|
+
export * from './subscriptions.js';
|
|
12
|
+
export * from './fee-estimator.js';
|
|
13
|
+
export * from './query-api.js';
|
|
11
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -8,4 +8,7 @@ export * from './dag/index.js';
|
|
|
8
8
|
export * from './snapshot/index.js';
|
|
9
9
|
export * from './silver/index.js';
|
|
10
10
|
export * from './silver/types.js';
|
|
11
|
+
export * from './subscriptions.js';
|
|
12
|
+
export * from './fee-estimator.js';
|
|
13
|
+
export * from './query-api.js';
|
|
11
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
|
package/dist/indexer.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export declare class IndexerToolkit implements SnapshotParticipant {
|
|
|
24
24
|
watch(address: string | string[], handler?: WatchHandler): Promise<void>;
|
|
25
25
|
balance(address: string): Promise<bigint>;
|
|
26
26
|
history(address: string): Promise<any[]>;
|
|
27
|
+
utxos(address: string): Promise<any[]>;
|
|
27
28
|
findReceipts(opts: {
|
|
28
29
|
tags: string[];
|
|
29
30
|
}): Promise<any[]>;
|
package/dist/indexer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,aAAa,EAAE,MAAM,eAAe,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACvD,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE9D,qBAAa,cAAe,YAAW,mBAAmB;IAOlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN5C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAsB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAE3D,OAAO;WAiBO,IAAI,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc;IAI1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAQxC,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAKtD,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAgBxB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvC"}
|
|
1
|
+
{"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,aAAa,EAAE,MAAM,eAAe,CAAC;AAG/D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE1D,MAAM,WAAW,oBAAqB,SAAQ,aAAa;IACvD,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,qBAAqB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE9D,qBAAa,cAAe,YAAW,mBAAmB;IAOlC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAN5C,OAAO,CAAC,UAAU,CAAkB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAsB;IACzC,OAAO,CAAC,aAAa,CAAC,CAAyB;IAC/C,SAAgB,GAAG,EAAE,MAAM,CAAC;IAC5B,SAAgB,OAAO,CAAC,EAAE,oBAAoB,GAAG,SAAS,CAAC;IAE3D,OAAO;WAiBO,IAAI,CAAC,OAAO,GAAE,qBAA0B,GAAG,cAAc;IAI1D,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAMxB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxE,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzC,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAQxC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAQtC,YAAY,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAKtD,cAAc,CAAC,QAAQ,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAW5C,QAAQ,IAAI,OAAO,CAAC,GAAG,CAAC;IAgBxB,OAAO,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAIvC"}
|
package/dist/indexer.js
CHANGED
|
@@ -62,6 +62,13 @@ export class IndexerToolkit {
|
|
|
62
62
|
const history = this.projection?.get('history') || {};
|
|
63
63
|
return history[address] || [];
|
|
64
64
|
}
|
|
65
|
+
async utxos(address) {
|
|
66
|
+
if (this.backend?.utxos) {
|
|
67
|
+
return this.backend.utxos(address);
|
|
68
|
+
}
|
|
69
|
+
const utxos = this.projection?.get('utxos') || {};
|
|
70
|
+
return utxos[address] || [];
|
|
71
|
+
}
|
|
65
72
|
async findReceipts(opts) {
|
|
66
73
|
if (!this.artifactIndex)
|
|
67
74
|
return [];
|
package/dist/indexer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAgBxC,MAAM,OAAO,cAAc;IAOc;IAN7B,UAAU,CAAkB;IAC5B,UAAU,CAAuB;IACjC,aAAa,CAA0B;IAC/B,GAAG,CAAS;IACZ,OAAO,CAAoC;IAE3D,YAAqC,OAA8B;QAA9B,YAAO,GAAP,OAAO,CAAuB;QAC/D,IAAI,CAAC,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAE/B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAC5D,IAAI,CAAC,UAAU,GAAG,IAAI,mBAAmB,CAAC;gBACtC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,cAAc,CAAC,CAAC,CAAC,8BAA8B;gBAC5F,SAAS,EAAE,SAAS;aACvB,CAAC,CAAC;YACH,IAAI,CAAC,aAAa,GAAG,IAAI,sBAAsB,CAAC;gBAC5C,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,iCAAiC;aACtG,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;IAC5B,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,UAAiC,EAAE;QAClD,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,OAAO;QAChB,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAA0B,EAAE,OAAsB;QACjE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC/D,mCAAmC;QACnC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YACtB,MAAM,EAAE,EAAE,EAAE,yBAAyB;YACrC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE,IAAI;YAChB,gBAAgB,EAAE,SAAS;YAC3B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;gBACnB,wDAAwD;gBACxD,IAAI,OAAO,EAAE,CAAC;oBACV,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;gBACvB,CAAC;YACL,CAAC;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAe;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,OAAe;QAChC,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;QACtD,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAwB;QAC9C,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,QAAa;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO;QAChC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC;YACrB,IAAI,EAAE,QAAQ,CAAC,EAAE,IAAI,WAAW;YAChC,MAAM,EAAE,QAAQ,CAAC,MAAM,IAAI,YAAY;YACvC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,QAAQ,EAAE,cAAc,QAAQ,CAAC,EAAE,OAAO;YAC1C,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,EAAE;SAC5B,CAAC,CAAC;IACP,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAClG,OAAO;gBACH,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI;gBAC1B,aAAa,EAAE,IAAI;gBACnB,SAAS,EAAE,KAAK;gBAChB,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;aACjC,CAAC;QACN,CAAC;QACD,OAAO;YACH,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE;YAC3C,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE;YACjD,GAAG,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;SACjC,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAU;QAC3B,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;YACtB,yEAAyE;YACzE,IAAI,KAAK,CAAC,GAAG;gBAAE,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACjD,OAAO;QACX,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAClF,IAAI,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC9F,IAAI,KAAK,CAAC,GAAG;YAAE,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,MAAM;QACf,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QACxB,8EAA8E;IAClF,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { KaspaRpcClient } from "@hardkas/kaspa-rpc";
|
|
2
|
+
import { IndexerToolkit } from "./indexer.js";
|
|
3
|
+
export type QueryDataSource = "indexer" | "rpc" | "cache" | "unavailable";
|
|
4
|
+
export interface QueryResponse<T> {
|
|
5
|
+
data: T;
|
|
6
|
+
source: QueryDataSource;
|
|
7
|
+
}
|
|
8
|
+
export declare class QueryToolkit {
|
|
9
|
+
private readonly rpc;
|
|
10
|
+
private readonly indexer?;
|
|
11
|
+
constructor(rpc: KaspaRpcClient, indexer?: IndexerToolkit | undefined);
|
|
12
|
+
balance(address: string): Promise<QueryResponse<bigint>>;
|
|
13
|
+
utxos(address: string): Promise<QueryResponse<any[]>>;
|
|
14
|
+
history(address: string): Promise<QueryResponse<any[]>>;
|
|
15
|
+
transaction(txid: string): Promise<QueryResponse<any>>;
|
|
16
|
+
confirmations(txid: string): Promise<QueryResponse<number>>;
|
|
17
|
+
mempool(txid?: string): Promise<QueryResponse<any>>;
|
|
18
|
+
block(hash: string): Promise<QueryResponse<any>>;
|
|
19
|
+
network(): Promise<QueryResponse<any>>;
|
|
20
|
+
sync(): Promise<QueryResponse<any>>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=query-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-api.d.ts","sourceRoot":"","sources":["../src/query-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,aAAa,CAAC;AAE1E,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,eAAe,CAAC;CACzB;AAED,qBAAa,YAAY;IAErB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;gBADR,GAAG,EAAE,cAAc,EACnB,OAAO,CAAC,EAAE,cAAc,YAAA;IAG9B,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAcxD,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IAcrD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;IAiBvD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IActD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAuB3D,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAanD,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAShD,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAgBtC,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CAIjD"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
export class QueryToolkit {
|
|
2
|
+
rpc;
|
|
3
|
+
indexer;
|
|
4
|
+
constructor(rpc, indexer) {
|
|
5
|
+
this.rpc = rpc;
|
|
6
|
+
this.indexer = indexer;
|
|
7
|
+
}
|
|
8
|
+
async balance(address) {
|
|
9
|
+
if (this.indexer) {
|
|
10
|
+
try {
|
|
11
|
+
const data = await this.indexer.balance(address);
|
|
12
|
+
return { data, source: "indexer" };
|
|
13
|
+
}
|
|
14
|
+
catch (e) {
|
|
15
|
+
// Fallback to RPC if indexer fails or throws
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const data = await this.rpc.getBalanceByAddress(address);
|
|
19
|
+
return { data: data.balanceSompi, source: "rpc" };
|
|
20
|
+
}
|
|
21
|
+
async utxos(address) {
|
|
22
|
+
if (this.indexer && this.indexer.utxos) {
|
|
23
|
+
try {
|
|
24
|
+
const data = await this.indexer.utxos(address);
|
|
25
|
+
return { data, source: "indexer" };
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
// Fallback to RPC
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
const data = await this.rpc.getUtxosByAddress(address);
|
|
32
|
+
return { data, source: "rpc" };
|
|
33
|
+
}
|
|
34
|
+
async history(address) {
|
|
35
|
+
if (this.indexer) {
|
|
36
|
+
try {
|
|
37
|
+
const data = await this.indexer.history(address);
|
|
38
|
+
return { data, source: "indexer" };
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
// Bubble error if it fails
|
|
42
|
+
throw e;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Kaspa RPC does not natively support address history
|
|
46
|
+
throw new Error("History query requires an IndexerProvider. Native RPC does not support address history.");
|
|
47
|
+
}
|
|
48
|
+
async transaction(txid) {
|
|
49
|
+
// If indexer had a transaction endpoint, we'd use it here.
|
|
50
|
+
// For now, we fallback to RPC.
|
|
51
|
+
// Will throw if the node doesn't have txindex enabled.
|
|
52
|
+
// We let this bubble up as designed.
|
|
53
|
+
const data = await this.rpc.getTransaction(txid);
|
|
54
|
+
if (data === null) {
|
|
55
|
+
// Not found
|
|
56
|
+
throw new Error(`Transaction ${txid} not found.`);
|
|
57
|
+
}
|
|
58
|
+
return { data, source: "rpc" };
|
|
59
|
+
}
|
|
60
|
+
async confirmations(txid) {
|
|
61
|
+
// A high-level helper to calculate confirmations.
|
|
62
|
+
// 1. Get the transaction to find its accepting block DAA score.
|
|
63
|
+
const tx = await this.rpc.getTransaction(txid);
|
|
64
|
+
if (!tx) {
|
|
65
|
+
throw new Error(`Transaction ${txid} not found.`);
|
|
66
|
+
}
|
|
67
|
+
// Unconfirmed TX in mempool has no accepting block score
|
|
68
|
+
if (!tx.acceptingBlockHash || !tx.acceptingBlockBlueScore) {
|
|
69
|
+
return { data: 0, source: "rpc" };
|
|
70
|
+
}
|
|
71
|
+
// 2. Get current virtual blue score
|
|
72
|
+
const virtualScoreResp = await this.rpc.getVirtualSelectedParentBlueScore();
|
|
73
|
+
const virtualScore = BigInt(virtualScoreResp.blueScore);
|
|
74
|
+
const txScore = BigInt(tx.acceptingBlockBlueScore);
|
|
75
|
+
const confirmations = virtualScore > txScore ? Number(virtualScore - txScore) + 1 : 1;
|
|
76
|
+
return { data: confirmations, source: "rpc" };
|
|
77
|
+
}
|
|
78
|
+
async mempool(txid) {
|
|
79
|
+
if (txid) {
|
|
80
|
+
const data = await this.rpc.getMempoolEntry(txid);
|
|
81
|
+
if (!data) {
|
|
82
|
+
throw new Error(`Transaction ${txid} not found in mempool.`);
|
|
83
|
+
}
|
|
84
|
+
return { data, source: "rpc" };
|
|
85
|
+
}
|
|
86
|
+
const data = await this.rpc.getMempoolEntries({ includeOrphanPool: false, filterTransactionPool: false });
|
|
87
|
+
return { data, source: "rpc" };
|
|
88
|
+
}
|
|
89
|
+
async block(hash) {
|
|
90
|
+
// Note: If the underlying client supports getBlock, call it dynamically.
|
|
91
|
+
if (this.rpc.getBlock) {
|
|
92
|
+
const block = await this.rpc.getBlock(hash);
|
|
93
|
+
return { data: block, source: "rpc" };
|
|
94
|
+
}
|
|
95
|
+
throw new Error("Method not mapped: block query needs explicit RPC support for getBlock.");
|
|
96
|
+
}
|
|
97
|
+
async network() {
|
|
98
|
+
const info = await this.rpc.getInfo();
|
|
99
|
+
const dag = await this.rpc.getBlockDagInfo();
|
|
100
|
+
const net = await this.rpc.getCurrentNetwork();
|
|
101
|
+
return {
|
|
102
|
+
data: {
|
|
103
|
+
serverVersion: info.serverVersion,
|
|
104
|
+
isSynced: info.isSynced,
|
|
105
|
+
networkId: net.currentNetwork || dag.networkId,
|
|
106
|
+
mempoolSize: info.mempoolSize
|
|
107
|
+
},
|
|
108
|
+
source: "rpc"
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
async sync() {
|
|
112
|
+
const data = await this.rpc.getSyncStatus();
|
|
113
|
+
return { data, source: "rpc" };
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=query-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-api.js","sourceRoot":"","sources":["../src/query-api.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { SnapshotState } from "./types.js";
|
|
2
1
|
/**
|
|
3
2
|
* Custom JSON Replacer to safely serialize BigInt values.
|
|
4
3
|
*/
|
|
@@ -7,12 +6,4 @@ export declare function snapshotReplacer(key: string, value: any): any;
|
|
|
7
6
|
* Custom JSON Reviver to safely deserialize BigInt values.
|
|
8
7
|
*/
|
|
9
8
|
export declare function snapshotReviver(key: string, value: any): any;
|
|
10
|
-
/**
|
|
11
|
-
* Serializes a SnapshotState map to a string safely supporting BigInt.
|
|
12
|
-
*/
|
|
13
|
-
export declare function serializeState(state: Record<string, SnapshotState>): string;
|
|
14
|
-
/**
|
|
15
|
-
* Deserializes a SnapshotState map from a string safely supporting BigInt.
|
|
16
|
-
*/
|
|
17
|
-
export declare function deserializeState(data: string): Record<string, SnapshotState>;
|
|
18
9
|
//# sourceMappingURL=serialization.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/snapshot/serialization.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"serialization.d.ts","sourceRoot":"","sources":["../../src/snapshot/serialization.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,CAK7D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,GAAG,CAK5D"}
|
|
@@ -16,16 +16,4 @@ export function snapshotReviver(key, value) {
|
|
|
16
16
|
}
|
|
17
17
|
return value;
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
20
|
-
* Serializes a SnapshotState map to a string safely supporting BigInt.
|
|
21
|
-
*/
|
|
22
|
-
export function serializeState(state) {
|
|
23
|
-
return JSON.stringify(state, snapshotReplacer, 2);
|
|
24
|
-
}
|
|
25
|
-
/**
|
|
26
|
-
* Deserializes a SnapshotState map from a string safely supporting BigInt.
|
|
27
|
-
*/
|
|
28
|
-
export function deserializeState(data) {
|
|
29
|
-
return JSON.parse(data, snapshotReviver);
|
|
30
|
-
}
|
|
31
19
|
//# sourceMappingURL=serialization.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/snapshot/serialization.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,KAAU;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAU;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnF,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../src/snapshot/serialization.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,KAAU;IACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;IACzC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAU;IACnD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACnF,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { KaspaRpcClient } from "@hardkas/kaspa-rpc";
|
|
2
|
+
export interface WalletSubscriptionEvent {
|
|
3
|
+
type: "transaction";
|
|
4
|
+
txid: string;
|
|
5
|
+
details?: any;
|
|
6
|
+
}
|
|
7
|
+
export type WalletWatchHandler = (event: WalletSubscriptionEvent) => void | Promise<void>;
|
|
8
|
+
export declare class WalletSubscriptionManager {
|
|
9
|
+
private rpc;
|
|
10
|
+
private getAddress;
|
|
11
|
+
private seenTxIds;
|
|
12
|
+
private txIdQueue;
|
|
13
|
+
private readonly MAX_DEDUPE_CACHE;
|
|
14
|
+
private handlers;
|
|
15
|
+
private activeRpcSubscription?;
|
|
16
|
+
constructor(rpc: KaspaRpcClient, getAddress: () => Promise<string>);
|
|
17
|
+
watch(handler: WalletWatchHandler): Promise<{
|
|
18
|
+
unwatch: () => Promise<void>;
|
|
19
|
+
}>;
|
|
20
|
+
private handleRawUtxosChanged;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=subscriptions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.d.ts","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,uBAAuB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1F,qBAAa,yBAAyB;IAStB,OAAO,CAAC,GAAG;IAAkB,OAAO,CAAC,UAAU;IAR3D,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,SAAS,CAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAGzC,OAAO,CAAC,QAAQ,CAAiC;IACjD,OAAO,CAAC,qBAAqB,CAAC,CAAmD;gBAE7D,GAAG,EAAE,cAAc,EAAU,UAAU,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAErE,KAAK,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IA6B1F,OAAO,CAAC,qBAAqB;CAwDhC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { logger } from "@hardkas/observability";
|
|
2
|
+
export class WalletSubscriptionManager {
|
|
3
|
+
rpc;
|
|
4
|
+
getAddress;
|
|
5
|
+
seenTxIds = new Set();
|
|
6
|
+
txIdQueue = []; // Simple LRU tracking
|
|
7
|
+
MAX_DEDUPE_CACHE = 1000;
|
|
8
|
+
// Maintain a list of handlers per address
|
|
9
|
+
handlers = new Set();
|
|
10
|
+
activeRpcSubscription;
|
|
11
|
+
constructor(rpc, getAddress) {
|
|
12
|
+
this.rpc = rpc;
|
|
13
|
+
this.getAddress = getAddress;
|
|
14
|
+
}
|
|
15
|
+
async watch(handler) {
|
|
16
|
+
this.handlers.add(handler);
|
|
17
|
+
// If this is the first handler, spin up the underlying RPC subscription
|
|
18
|
+
if (this.handlers.size === 1 && !this.activeRpcSubscription) {
|
|
19
|
+
const addr = await this.getAddress();
|
|
20
|
+
const subscription = await this.rpc.subscribeToUtxosChanged([addr], (data) => {
|
|
21
|
+
this.handleRawUtxosChanged(data);
|
|
22
|
+
});
|
|
23
|
+
this.activeRpcSubscription = {
|
|
24
|
+
unsubscribe: async () => {
|
|
25
|
+
await subscription.unsubscribe();
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
unwatch: async () => {
|
|
31
|
+
this.handlers.delete(handler);
|
|
32
|
+
if (this.handlers.size === 0 && this.activeRpcSubscription) {
|
|
33
|
+
await this.activeRpcSubscription.unsubscribe().catch(() => { });
|
|
34
|
+
this.activeRpcSubscription = undefined;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
handleRawUtxosChanged(data) {
|
|
40
|
+
// Data usually has 'added' and 'removed' arrays containing KaspaRpcUtxo
|
|
41
|
+
const added = data?.added || data?.utxosAdded || [];
|
|
42
|
+
const removed = data?.removed || data?.utxosRemoved || [];
|
|
43
|
+
// Extract all unique txids from this event
|
|
44
|
+
const incomingTxids = new Set();
|
|
45
|
+
const extractTxid = (utxos) => {
|
|
46
|
+
for (const u of utxos) {
|
|
47
|
+
const txid = u?.outpoint?.transactionId || u?.outpoint?.transaction_id || u?.outpoint?.txId;
|
|
48
|
+
if (txid) {
|
|
49
|
+
incomingTxids.add(txid);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
extractTxid(added);
|
|
54
|
+
extractTxid(removed);
|
|
55
|
+
for (const txid of incomingTxids) {
|
|
56
|
+
if (this.seenTxIds.has(txid)) {
|
|
57
|
+
logger.debug("WalletSubscriptionManager deduplicated event", { txid });
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
// Mark as seen
|
|
61
|
+
this.seenTxIds.add(txid);
|
|
62
|
+
this.txIdQueue.push(txid);
|
|
63
|
+
if (this.txIdQueue.length > this.MAX_DEDUPE_CACHE) {
|
|
64
|
+
const oldest = this.txIdQueue.shift();
|
|
65
|
+
if (oldest)
|
|
66
|
+
this.seenTxIds.delete(oldest);
|
|
67
|
+
}
|
|
68
|
+
// Dispatch to all wallet-level handlers
|
|
69
|
+
const event = {
|
|
70
|
+
type: "transaction",
|
|
71
|
+
txid,
|
|
72
|
+
details: data
|
|
73
|
+
};
|
|
74
|
+
for (const handler of this.handlers) {
|
|
75
|
+
try {
|
|
76
|
+
// Safe execution
|
|
77
|
+
const res = handler(event);
|
|
78
|
+
if (res instanceof Promise) {
|
|
79
|
+
res.catch(err => {
|
|
80
|
+
logger.error("Wallet watch async handler threw error", { error: err });
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
logger.error("Wallet watch sync handler threw error", { error: err });
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../src/subscriptions.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { WalletQueryProvider } from '@hardkas/query';
|
|
2
2
|
import { WalletUtxoApi } from './utxos.js';
|
|
3
|
+
import { WalletWatchHandler } from './subscriptions.js';
|
|
4
|
+
import { FeePriority } from './fee-estimator.js';
|
|
3
5
|
export interface WalletToolkitOptions {
|
|
4
6
|
storePath?: string;
|
|
5
7
|
network?: "simnet" | "testnet" | "mainnet";
|
|
6
8
|
provider?: WalletQueryProvider;
|
|
9
|
+
rpc?: any;
|
|
10
|
+
signer?: any;
|
|
11
|
+
coinbaseMaturity?: bigint;
|
|
7
12
|
}
|
|
8
13
|
export declare class WalletToolkit {
|
|
9
14
|
readonly name: string;
|
|
@@ -13,31 +18,96 @@ export declare class WalletToolkit {
|
|
|
13
18
|
private addressManager;
|
|
14
19
|
private walletQuery;
|
|
15
20
|
private _utxosApi;
|
|
21
|
+
private _subscriptionManager?;
|
|
16
22
|
private constructor();
|
|
17
23
|
static open(name: string, options?: WalletToolkitOptions): WalletToolkit;
|
|
18
24
|
create(): Promise<void>;
|
|
19
|
-
|
|
25
|
+
receive(): Promise<string>;
|
|
20
26
|
balance(): Promise<bigint>;
|
|
21
27
|
get utxos(): WalletUtxoApi;
|
|
22
28
|
history(): Promise<any[]>;
|
|
29
|
+
watch(cb: WalletWatchHandler): Promise<{
|
|
30
|
+
unwatch: () => void;
|
|
31
|
+
}>;
|
|
23
32
|
estimateFee(opts: {
|
|
24
33
|
to: string;
|
|
25
34
|
amount: bigint;
|
|
35
|
+
priority?: FeePriority;
|
|
26
36
|
feeRate?: bigint;
|
|
27
37
|
}): Promise<{
|
|
28
38
|
fee: bigint;
|
|
39
|
+
feeRate: bigint;
|
|
40
|
+
estimatedMass: bigint;
|
|
41
|
+
estimatedFee: bigint;
|
|
29
42
|
totalOut: bigint;
|
|
30
43
|
plan: any;
|
|
44
|
+
evidence: "dynamic" | "heuristic";
|
|
45
|
+
mempoolSize?: number;
|
|
31
46
|
}>;
|
|
47
|
+
/**
|
|
48
|
+
* @deprecated Use hardkas.tx.plan directly or the specific operation helpers like send() or consolidate()
|
|
49
|
+
*/
|
|
32
50
|
planSend(opts: {
|
|
33
51
|
to: string;
|
|
34
52
|
amount: bigint;
|
|
53
|
+
priority?: FeePriority;
|
|
35
54
|
feeRate?: bigint;
|
|
36
55
|
}): Promise<any>;
|
|
56
|
+
/**
|
|
57
|
+
* @deprecated sendSimulated is moved to testing patterns. Use hardkas.localnet.mine() and standard send() flows.
|
|
58
|
+
*/
|
|
37
59
|
sendSimulated(opts: {
|
|
38
60
|
to: string;
|
|
39
61
|
amount: bigint;
|
|
62
|
+
priority?: FeePriority;
|
|
40
63
|
feeRate?: bigint;
|
|
41
64
|
}): Promise<string>;
|
|
65
|
+
private signAndBroadcast;
|
|
66
|
+
send(opts: {
|
|
67
|
+
to: string;
|
|
68
|
+
amount: bigint;
|
|
69
|
+
priority?: FeePriority;
|
|
70
|
+
feeRate?: bigint;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
txId: string;
|
|
73
|
+
plan: any;
|
|
74
|
+
}>;
|
|
75
|
+
payMany(opts: {
|
|
76
|
+
outputs: {
|
|
77
|
+
address: string;
|
|
78
|
+
amount: bigint;
|
|
79
|
+
}[];
|
|
80
|
+
priority?: FeePriority;
|
|
81
|
+
feeRate?: bigint;
|
|
82
|
+
}): Promise<{
|
|
83
|
+
txId: string;
|
|
84
|
+
plan: any;
|
|
85
|
+
}>;
|
|
86
|
+
sweep(opts: {
|
|
87
|
+
to: string;
|
|
88
|
+
priority?: FeePriority;
|
|
89
|
+
feeRate?: bigint;
|
|
90
|
+
}): Promise<{
|
|
91
|
+
txId: string;
|
|
92
|
+
plan: any;
|
|
93
|
+
}>;
|
|
94
|
+
consolidate(opts: {
|
|
95
|
+
to?: string;
|
|
96
|
+
priority?: FeePriority;
|
|
97
|
+
feeRate?: bigint;
|
|
98
|
+
maxUtxos?: number;
|
|
99
|
+
}): Promise<{
|
|
100
|
+
txId: string;
|
|
101
|
+
plan: any;
|
|
102
|
+
}>;
|
|
103
|
+
split(opts: {
|
|
104
|
+
outputsCount: number;
|
|
105
|
+
amountPerOutput: bigint;
|
|
106
|
+
priority?: FeePriority;
|
|
107
|
+
feeRate?: bigint;
|
|
108
|
+
}): Promise<{
|
|
109
|
+
txId: string;
|
|
110
|
+
plan: any;
|
|
111
|
+
}>;
|
|
42
112
|
}
|
|
43
113
|
//# sourceMappingURL=wallet.d.ts.map
|
package/dist/wallet.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"AACA,OAAO,EAAe,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}
|