@hardkas/toolkit 0.11.2-alpha → 0.11.6-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.
Files changed (56) hide show
  1. package/dist/fee-estimator.d.ts +9 -0
  2. package/dist/fee-estimator.d.ts.map +1 -0
  3. package/dist/fee-estimator.js +32 -0
  4. package/dist/fee-estimator.js.map +1 -0
  5. package/dist/index.d.ts +3 -0
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/indexer.d.ts +1 -0
  10. package/dist/indexer.d.ts.map +1 -1
  11. package/dist/indexer.js +7 -0
  12. package/dist/indexer.js.map +1 -1
  13. package/dist/query-api.d.ts +22 -0
  14. package/dist/query-api.d.ts.map +1 -0
  15. package/dist/query-api.js +116 -0
  16. package/dist/query-api.js.map +1 -0
  17. package/dist/snapshot/serialization.d.ts +0 -9
  18. package/dist/snapshot/serialization.d.ts.map +1 -1
  19. package/dist/snapshot/serialization.js +0 -12
  20. package/dist/snapshot/serialization.js.map +1 -1
  21. package/dist/subscriptions.d.ts +22 -0
  22. package/dist/subscriptions.d.ts.map +1 -0
  23. package/dist/subscriptions.js +91 -0
  24. package/dist/subscriptions.js.map +1 -0
  25. package/dist/wallet.d.ts +71 -1
  26. package/dist/wallet.d.ts.map +1 -1
  27. package/dist/wallet.js +296 -44
  28. package/dist/wallet.js.map +1 -1
  29. package/package.json +24 -9
  30. package/.turbo/turbo-build.log +0 -4
  31. package/src/dag/consensus.ts +0 -150
  32. package/src/dag/index.ts +0 -73
  33. package/src/dag/store.ts +0 -40
  34. package/src/dag/topology.ts +0 -108
  35. package/src/dag/types.ts +0 -20
  36. package/src/index.ts +0 -10
  37. package/src/indexer.ts +0 -134
  38. package/src/jobs.ts +0 -63
  39. package/src/payment.ts +0 -100
  40. package/src/silver/index.ts +0 -102
  41. package/src/silver/templates.ts +0 -27
  42. package/src/silver/types.ts +0 -37
  43. package/src/snapshot/backends/FsSnapshotBackend.ts +0 -100
  44. package/src/snapshot/backends/MemorySnapshotBackend.ts +0 -65
  45. package/src/snapshot/index.ts +0 -102
  46. package/src/snapshot/serialization.ts +0 -35
  47. package/src/snapshot/types.ts +0 -45
  48. package/src/stores/invoice-store.ts +0 -62
  49. package/src/stores/utxo-control-store.ts +0 -78
  50. package/src/utxos.ts +0 -451
  51. package/src/wallet.ts +0 -158
  52. package/test/silver.test.ts +0 -59
  53. package/test/snapshot.test.ts +0 -99
  54. package/test/toolkit.test.ts +0 -140
  55. package/tsconfig.json +0 -9
  56. 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
@@ -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[]>;
@@ -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 [];
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;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;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,MAAM,CAE3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAE5E"}
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;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAoC;IAC/D,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC7C,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
- address(): Promise<string>;
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
@@ -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;AAoB3C,MAAM,WAAW,oBAAoB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAClC;AAED,qBAAa,aAAa;aAQF,IAAI,EAAE,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAT5B,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,WAAW,CAAc;IAEjC,OAAO,CAAC,SAAS,CAAgB;IAEjC,OAAO;WAmCO,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB,GAAG,aAAa;IAKtE,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAY1B,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;IAKvC,IAAW,KAAK,IAAI,aAAa,CAEhC;IAEY,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAKzB,WAAW,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,CAAA;KAAE,CAAC;IAmB1H,QAAQ,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAa9E,aAAa,CAAC,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAmBtG"}
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../src/wallet.ts"],"names":[],"mappings":"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"}