@hardkas/toolkit 0.11.1-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 (113) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/LICENSE +21 -0
  3. package/dist/dag/consensus.d.ts +20 -0
  4. package/dist/dag/consensus.d.ts.map +1 -0
  5. package/dist/dag/consensus.js +131 -0
  6. package/dist/dag/consensus.js.map +1 -0
  7. package/dist/dag/index.d.ts +28 -0
  8. package/dist/dag/index.d.ts.map +1 -0
  9. package/dist/dag/index.js +57 -0
  10. package/dist/dag/index.js.map +1 -0
  11. package/dist/dag/store.d.ts +11 -0
  12. package/dist/dag/store.d.ts.map +1 -0
  13. package/dist/dag/store.js +32 -0
  14. package/dist/dag/store.js.map +1 -0
  15. package/dist/dag/topology.d.ts +14 -0
  16. package/dist/dag/topology.d.ts.map +1 -0
  17. package/dist/dag/topology.js +98 -0
  18. package/dist/dag/topology.js.map +1 -0
  19. package/dist/dag/types.d.ts +21 -0
  20. package/dist/dag/types.d.ts.map +1 -0
  21. package/dist/dag/types.js +2 -0
  22. package/dist/dag/types.js.map +1 -0
  23. package/dist/index.d.ts +10 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +10 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/indexer.d.ts +34 -0
  28. package/dist/indexer.d.ts.map +1 -0
  29. package/dist/indexer.js +111 -0
  30. package/dist/indexer.js.map +1 -0
  31. package/dist/jobs.d.ts +18 -0
  32. package/dist/jobs.d.ts.map +1 -0
  33. package/dist/jobs.js +33 -0
  34. package/dist/jobs.js.map +1 -0
  35. package/dist/payment.d.ts +25 -0
  36. package/dist/payment.d.ts.map +1 -0
  37. package/dist/payment.js +66 -0
  38. package/dist/payment.js.map +1 -0
  39. package/dist/silver/index.d.ts +20 -0
  40. package/dist/silver/index.d.ts.map +1 -0
  41. package/dist/silver/index.js +94 -0
  42. package/dist/silver/index.js.map +1 -0
  43. package/dist/silver/templates.d.ts +2 -0
  44. package/dist/silver/templates.d.ts.map +1 -0
  45. package/dist/silver/templates.js +28 -0
  46. package/dist/silver/templates.js.map +1 -0
  47. package/dist/silver/types.d.ts +34 -0
  48. package/dist/silver/types.d.ts.map +1 -0
  49. package/dist/silver/types.js +2 -0
  50. package/dist/silver/types.js.map +1 -0
  51. package/dist/snapshot/backends/FsSnapshotBackend.d.ts +14 -0
  52. package/dist/snapshot/backends/FsSnapshotBackend.d.ts.map +1 -0
  53. package/dist/snapshot/backends/FsSnapshotBackend.js +82 -0
  54. package/dist/snapshot/backends/FsSnapshotBackend.js.map +1 -0
  55. package/dist/snapshot/backends/MemorySnapshotBackend.d.ts +13 -0
  56. package/dist/snapshot/backends/MemorySnapshotBackend.d.ts.map +1 -0
  57. package/dist/snapshot/backends/MemorySnapshotBackend.js +55 -0
  58. package/dist/snapshot/backends/MemorySnapshotBackend.js.map +1 -0
  59. package/dist/snapshot/index.d.ts +19 -0
  60. package/dist/snapshot/index.d.ts.map +1 -0
  61. package/dist/snapshot/index.js +84 -0
  62. package/dist/snapshot/index.js.map +1 -0
  63. package/dist/snapshot/serialization.d.ts +18 -0
  64. package/dist/snapshot/serialization.d.ts.map +1 -0
  65. package/dist/snapshot/serialization.js +31 -0
  66. package/dist/snapshot/serialization.js.map +1 -0
  67. package/dist/snapshot/types.d.ts +44 -0
  68. package/dist/snapshot/types.d.ts.map +1 -0
  69. package/dist/snapshot/types.js +2 -0
  70. package/dist/snapshot/types.js.map +1 -0
  71. package/dist/stores/invoice-store.d.ts +26 -0
  72. package/dist/stores/invoice-store.d.ts.map +1 -0
  73. package/dist/stores/invoice-store.js +34 -0
  74. package/dist/stores/invoice-store.js.map +1 -0
  75. package/dist/stores/utxo-control-store.d.ts +23 -0
  76. package/dist/stores/utxo-control-store.d.ts.map +1 -0
  77. package/dist/stores/utxo-control-store.js +64 -0
  78. package/dist/stores/utxo-control-store.js.map +1 -0
  79. package/dist/utxos.d.ts +128 -0
  80. package/dist/utxos.d.ts.map +1 -0
  81. package/dist/utxos.js +331 -0
  82. package/dist/utxos.js.map +1 -0
  83. package/dist/wallet.d.ts +34 -0
  84. package/dist/wallet.d.ts.map +1 -0
  85. package/dist/wallet.js +72 -0
  86. package/dist/wallet.js.map +1 -0
  87. package/package.json +28 -0
  88. package/src/dag/consensus.ts +150 -0
  89. package/src/dag/index.ts +73 -0
  90. package/src/dag/store.ts +40 -0
  91. package/src/dag/topology.ts +108 -0
  92. package/src/dag/types.ts +20 -0
  93. package/src/index.ts +9 -0
  94. package/src/indexer.ts +128 -0
  95. package/src/jobs.ts +46 -0
  96. package/src/payment.ts +81 -0
  97. package/src/silver/index.ts +102 -0
  98. package/src/silver/templates.ts +27 -0
  99. package/src/silver/types.ts +37 -0
  100. package/src/snapshot/backends/FsSnapshotBackend.ts +100 -0
  101. package/src/snapshot/backends/MemorySnapshotBackend.ts +65 -0
  102. package/src/snapshot/index.ts +102 -0
  103. package/src/snapshot/serialization.ts +35 -0
  104. package/src/snapshot/types.ts +45 -0
  105. package/src/stores/invoice-store.ts +53 -0
  106. package/src/stores/utxo-control-store.ts +78 -0
  107. package/src/utxos.ts +451 -0
  108. package/src/wallet.ts +93 -0
  109. package/test/silver.test.ts +59 -0
  110. package/test/snapshot.test.ts +99 -0
  111. package/test/toolkit.test.ts +109 -0
  112. package/tsconfig.json +9 -0
  113. package/vitest.config.ts +8 -0
@@ -0,0 +1,4 @@
1
+
2
+ > @hardkas/toolkit@0.11.0-alpha build C:\Users\jrodr\Documents\kaslabdevs\GitHub\HardKas-repo\packages\toolkit
3
+ > tsc
4
+
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Javier Rodriguez
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,20 @@
1
+ import { LocalDagStore } from './store.js';
2
+ import { DAGTopology } from './topology.js';
3
+ import { DagStatistics } from './types.js';
4
+ export declare class ConsensusView {
5
+ private readonly store;
6
+ private readonly topology;
7
+ private blueScoreCache;
8
+ constructor(store: LocalDagStore, topology: DAGTopology);
9
+ clearCache(): void;
10
+ blueScore(hash: string): Promise<number>;
11
+ confirmations(hash: string): Promise<number>;
12
+ private isOrphan;
13
+ trace(txid: string): Promise<{
14
+ txid: string;
15
+ status: string;
16
+ foundIn: string[];
17
+ }>;
18
+ statistics(): Promise<DagStatistics>;
19
+ }
20
+ //# sourceMappingURL=consensus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus.d.ts","sourceRoot":"","sources":["../../src/dag/consensus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAY,aAAa,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,aAAa;IAKlB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ7B,OAAO,CAAC,cAAc,CAA6B;gBAG9B,KAAK,EAAE,aAAa,EACpB,QAAQ,EAAE,WAAW;IAGnC,UAAU,IAAI,IAAI;IAIZ,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA+BxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YA8B3C,QAAQ;IAWT,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IA4CjF,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;CAgBpD"}
@@ -0,0 +1,131 @@
1
+ export class ConsensusView {
2
+ store;
3
+ topology;
4
+ // Memoize calculated blue scores to prevent exponential recursion
5
+ blueScoreCache = new Map();
6
+ constructor(store, topology) {
7
+ this.store = store;
8
+ this.topology = topology;
9
+ }
10
+ clearCache() {
11
+ this.blueScoreCache.clear();
12
+ }
13
+ async blueScore(hash) {
14
+ // If provided explicitly in the payload, use it
15
+ const b = await this.topology.block(hash);
16
+ if (b.blueScore !== undefined) {
17
+ return b.blueScore;
18
+ }
19
+ if (this.blueScoreCache.has(hash)) {
20
+ return this.blueScoreCache.get(hash);
21
+ }
22
+ if (b.parents.length === 0) {
23
+ this.blueScoreCache.set(hash, 0);
24
+ return 0;
25
+ }
26
+ let maxScore = 0;
27
+ for (const p of b.parents) {
28
+ try {
29
+ const score = await this.blueScore(p);
30
+ if (score > maxScore)
31
+ maxScore = score;
32
+ }
33
+ catch (e) {
34
+ // Ignore missing parents (orphans)
35
+ }
36
+ }
37
+ const calculatedScore = maxScore + 1;
38
+ this.blueScoreCache.set(hash, calculatedScore);
39
+ return calculatedScore;
40
+ }
41
+ async confirmations(hash) {
42
+ const isOrphan = await this.isOrphan(hash);
43
+ if (isOrphan)
44
+ return 0;
45
+ const allBlocks = this.store.getAllBlocks();
46
+ const tips = allBlocks.filter(b => this.store.getChildrenHashes(b.hash).length === 0);
47
+ if (tips.length === 0)
48
+ return 0;
49
+ let maxScore = -1;
50
+ let heaviestTip = null;
51
+ for (const tip of tips) {
52
+ const score = await this.blueScore(tip.hash);
53
+ if (score > maxScore) {
54
+ maxScore = score;
55
+ heaviestTip = tip;
56
+ }
57
+ }
58
+ if (!heaviestTip)
59
+ return 0;
60
+ // Verify reachability: does the heaviest tip actually include this block in its past?
61
+ const reachable = await this.topology.reachability(hash, heaviestTip.hash);
62
+ if (!reachable)
63
+ return 0;
64
+ const blockScore = await this.blueScore(hash);
65
+ return Math.max(0, maxScore - blockScore);
66
+ }
67
+ async isOrphan(hash) {
68
+ const b = this.store.getBlock(hash);
69
+ if (!b)
70
+ return false;
71
+ if (b.parents.length === 0)
72
+ return false;
73
+ for (const p of b.parents) {
74
+ if (!this.store.getBlock(p))
75
+ return true;
76
+ }
77
+ return false;
78
+ }
79
+ async trace(txid) {
80
+ const allBlocks = this.store.getAllBlocks();
81
+ const foundInBlocks = [];
82
+ for (const block of allBlocks) {
83
+ if (block.transactions && block.transactions.some(tx => tx.id === txid)) {
84
+ foundInBlocks.push(block.hash);
85
+ }
86
+ }
87
+ if (foundInBlocks.length === 0) {
88
+ return { txid, status: "not_found", foundIn: [] };
89
+ }
90
+ if (foundInBlocks.length === 1) {
91
+ const blockHash = foundInBlocks[0];
92
+ const isOrphan = await this.isOrphan(blockHash);
93
+ return { txid, status: isOrphan ? "orphan" : "accepted", foundIn: foundInBlocks };
94
+ }
95
+ // Parallel branch conflict detection
96
+ let isConflict = false;
97
+ for (let i = 0; i < foundInBlocks.length; i++) {
98
+ for (let j = i + 1; j < foundInBlocks.length; j++) {
99
+ const b1 = foundInBlocks[i];
100
+ const b2 = foundInBlocks[j];
101
+ const reach1 = await this.topology.reachability(b1, b2);
102
+ const reach2 = await this.topology.reachability(b2, b1);
103
+ if (!reach1 && !reach2) {
104
+ isConflict = true;
105
+ break;
106
+ }
107
+ }
108
+ }
109
+ return {
110
+ txid,
111
+ status: isConflict ? "conflict" : "merged",
112
+ foundIn: foundInBlocks
113
+ };
114
+ }
115
+ async statistics() {
116
+ const allBlocks = this.store.getAllBlocks();
117
+ const tips = allBlocks.filter(b => this.store.getChildrenHashes(b.hash).length === 0);
118
+ let highestBlueScore = 0;
119
+ for (const b of allBlocks) {
120
+ const score = await this.blueScore(b.hash);
121
+ if (score > highestBlueScore)
122
+ highestBlueScore = score;
123
+ }
124
+ return {
125
+ totalBlocks: allBlocks.length,
126
+ totalTips: tips.length,
127
+ highestBlueScore
128
+ };
129
+ }
130
+ }
131
+ //# sourceMappingURL=consensus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consensus.js","sourceRoot":"","sources":["../../src/dag/consensus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { DagBlock, DagNeighborhood, DagStatistics } from './types.js';
2
+ export * from './types.js';
3
+ export declare class DagApi {
4
+ private store;
5
+ private topology;
6
+ private consensus;
7
+ constructor();
8
+ ingestBlocks(blocks: DagBlock[]): Promise<void>;
9
+ snapshot(): Promise<DagBlock[]>;
10
+ restore(blocks: DagBlock[]): Promise<void>;
11
+ reload(): Promise<void>;
12
+ block(hash: string): Promise<DagBlock>;
13
+ parents(hash: string): Promise<DagBlock[]>;
14
+ children(hash: string): Promise<DagBlock[]>;
15
+ reachability(fromHash: string, toHash: string): Promise<boolean>;
16
+ neighborhood(hash: string, opts?: {
17
+ depth?: number;
18
+ }): Promise<DagNeighborhood>;
19
+ blueScore(hash: string): Promise<number>;
20
+ confirmations(hash: string): Promise<number>;
21
+ trace(txid: string): Promise<{
22
+ txid: string;
23
+ status: string;
24
+ foundIn: string[];
25
+ }>;
26
+ statistics(): Promise<DagStatistics>;
27
+ }
28
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dag/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEtE,cAAc,YAAY,CAAC;AAE3B,qBAAa,MAAM;IACf,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAc;IAC9B,OAAO,CAAC,SAAS,CAAgB;;IAQpB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAI/C,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI/B,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAItC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAI3C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIhE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,CAAC;IAKnF,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI5C,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAIjF,UAAU,IAAI,OAAO,CAAC,aAAa,CAAC;CAGpD"}
@@ -0,0 +1,57 @@
1
+ import { LocalDagStore } from './store.js';
2
+ import { DAGTopology } from './topology.js';
3
+ import { ConsensusView } from './consensus.js';
4
+ export * from './types.js';
5
+ export class DagApi {
6
+ store;
7
+ topology;
8
+ consensus;
9
+ constructor() {
10
+ this.store = new LocalDagStore();
11
+ this.topology = new DAGTopology(this.store);
12
+ this.consensus = new ConsensusView(this.store, this.topology);
13
+ }
14
+ async ingestBlocks(blocks) {
15
+ this.store.ingest(blocks);
16
+ }
17
+ async snapshot() {
18
+ return this.store.getAllBlocks();
19
+ }
20
+ async restore(blocks) {
21
+ this.store.clear();
22
+ this.store.ingest(blocks);
23
+ }
24
+ async reload() {
25
+ this.consensus.clearCache();
26
+ }
27
+ // Topology
28
+ async block(hash) {
29
+ return this.topology.block(hash);
30
+ }
31
+ async parents(hash) {
32
+ return this.topology.parents(hash);
33
+ }
34
+ async children(hash) {
35
+ return this.topology.children(hash);
36
+ }
37
+ async reachability(fromHash, toHash) {
38
+ return this.topology.reachability(fromHash, toHash);
39
+ }
40
+ async neighborhood(hash, opts = {}) {
41
+ return this.topology.neighborhood(hash, opts);
42
+ }
43
+ // Consensus
44
+ async blueScore(hash) {
45
+ return this.consensus.blueScore(hash);
46
+ }
47
+ async confirmations(hash) {
48
+ return this.consensus.confirmations(hash);
49
+ }
50
+ async trace(txid) {
51
+ return this.consensus.trace(txid);
52
+ }
53
+ async statistics() {
54
+ return this.consensus.statistics();
55
+ }
56
+ }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dag/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,cAAc,YAAY,CAAC;AAE3B,MAAM,OAAO,MAAM;IACP,KAAK,CAAgB;IACrB,QAAQ,CAAc;IACtB,SAAS,CAAgB;IAEjC;QACI,IAAI,CAAC,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,aAAa,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClE,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,MAAkB;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAAkB;QACnC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,MAAM;QACf,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,WAAW;IACJ,KAAK,CAAC,KAAK,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAY;QAC7B,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,QAAgB,EAAE,MAAc;QACtD,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,OAA2B,EAAE;QACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClD,CAAC;IAED,YAAY;IACL,KAAK,CAAC,SAAS,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,IAAY;QACnC,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC;CACJ"}
@@ -0,0 +1,11 @@
1
+ import { DagBlock } from './types.js';
2
+ export declare class LocalDagStore {
3
+ private blocks;
4
+ private childrenIndex;
5
+ ingest(blocksToIngest: DagBlock[]): void;
6
+ getBlock(hash: string): DagBlock | undefined;
7
+ getChildrenHashes(hash: string): string[];
8
+ getAllBlocks(): DagBlock[];
9
+ clear(): void;
10
+ }
11
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/dag/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAA+B;IAG7C,OAAO,CAAC,aAAa,CAAkC;IAEhD,MAAM,CAAC,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI;IAcxC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAI5C,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAKzC,YAAY,IAAI,QAAQ,EAAE;IAI1B,KAAK,IAAI,IAAI;CAIvB"}
@@ -0,0 +1,32 @@
1
+ export class LocalDagStore {
2
+ blocks = new Map();
3
+ // Reverse index to avoid O(N) children scans
4
+ childrenIndex = new Map();
5
+ ingest(blocksToIngest) {
6
+ for (const block of blocksToIngest) {
7
+ this.blocks.set(block.hash, block);
8
+ // Update children index
9
+ for (const parent of block.parents) {
10
+ if (!this.childrenIndex.has(parent)) {
11
+ this.childrenIndex.set(parent, new Set());
12
+ }
13
+ this.childrenIndex.get(parent).add(block.hash);
14
+ }
15
+ }
16
+ }
17
+ getBlock(hash) {
18
+ return this.blocks.get(hash);
19
+ }
20
+ getChildrenHashes(hash) {
21
+ const children = this.childrenIndex.get(hash);
22
+ return children ? Array.from(children) : [];
23
+ }
24
+ getAllBlocks() {
25
+ return Array.from(this.blocks.values());
26
+ }
27
+ clear() {
28
+ this.blocks.clear();
29
+ this.childrenIndex.clear();
30
+ }
31
+ }
32
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/dag/store.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACd,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE7C,6CAA6C;IACrC,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEhD,MAAM,CAAC,cAA0B;QACpC,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEnC,wBAAwB;YACxB,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;gBAC9C,CAAC;gBACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;IACL,CAAC;IAEM,QAAQ,CAAC,IAAY;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,iBAAiB,CAAC,IAAY;QACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,OAAO,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,CAAC;IAEM,YAAY;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;CACJ"}
@@ -0,0 +1,14 @@
1
+ import { LocalDagStore } from './store.js';
2
+ import { DagBlock, DagNeighborhood } from './types.js';
3
+ export declare class DAGTopology {
4
+ private store;
5
+ constructor(store: LocalDagStore);
6
+ block(hash: string): Promise<DagBlock>;
7
+ parents(hash: string): Promise<DagBlock[]>;
8
+ children(hash: string): Promise<DagBlock[]>;
9
+ reachability(fromHash: string, toHash: string): Promise<boolean>;
10
+ neighborhood(hash: string, opts?: {
11
+ depth?: number;
12
+ }): Promise<DagNeighborhood>;
13
+ }
14
+ //# sourceMappingURL=topology.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology.d.ts","sourceRoot":"","sources":["../../src/dag/topology.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEvD,qBAAa,WAAW;IACR,OAAO,CAAC,KAAK;gBAAL,KAAK,EAAE,aAAa;IAE3B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAMtC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAK1C,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAM3C,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA2BhE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO,GAAG,OAAO,CAAC,eAAe,CAAC;CAyDnG"}
@@ -0,0 +1,98 @@
1
+ export class DAGTopology {
2
+ store;
3
+ constructor(store) {
4
+ this.store = store;
5
+ }
6
+ async block(hash) {
7
+ const b = this.store.getBlock(hash);
8
+ if (!b)
9
+ throw new Error(`Block not found: ${hash}`);
10
+ return b;
11
+ }
12
+ async parents(hash) {
13
+ const b = await this.block(hash);
14
+ return b.parents.map(p => this.store.getBlock(p)).filter(Boolean);
15
+ }
16
+ async children(hash) {
17
+ // Fast lookup via index instead of O(N) scan
18
+ const childrenHashes = this.store.getChildrenHashes(hash);
19
+ return childrenHashes.map(c => this.store.getBlock(c)).filter(Boolean);
20
+ }
21
+ async reachability(fromHash, toHash) {
22
+ if (fromHash === toHash)
23
+ return true;
24
+ const toBlock = this.store.getBlock(toHash);
25
+ if (!toBlock)
26
+ return false;
27
+ // DFS for reachability
28
+ const visited = new Set();
29
+ const stack = [toHash];
30
+ while (stack.length > 0) {
31
+ const current = stack.pop();
32
+ if (current === fromHash)
33
+ return true;
34
+ if (visited.has(current))
35
+ continue;
36
+ visited.add(current);
37
+ const b = this.store.getBlock(current);
38
+ if (b) {
39
+ for (const p of b.parents) {
40
+ stack.push(p);
41
+ }
42
+ }
43
+ }
44
+ return false;
45
+ }
46
+ async neighborhood(hash, opts = {}) {
47
+ const maxDepth = opts.depth || 1;
48
+ const baseBlock = await this.block(hash);
49
+ const ancestors = new Map();
50
+ const descendants = new Map();
51
+ // BFS for Ancestors
52
+ let aQueue = [{ hash, currentDepth: 0 }];
53
+ let aVisited = new Set([hash]);
54
+ while (aQueue.length > 0) {
55
+ const { hash: curr, currentDepth } = aQueue.shift();
56
+ if (currentDepth >= maxDepth)
57
+ continue;
58
+ const b = this.store.getBlock(curr);
59
+ if (!b)
60
+ continue;
61
+ for (const p of b.parents) {
62
+ if (!aVisited.has(p)) {
63
+ aVisited.add(p);
64
+ const parentBlock = this.store.getBlock(p);
65
+ if (parentBlock) {
66
+ ancestors.set(p, parentBlock);
67
+ aQueue.push({ hash: p, currentDepth: currentDepth + 1 });
68
+ }
69
+ }
70
+ }
71
+ }
72
+ // BFS for Descendants
73
+ let dQueue = [{ hash, currentDepth: 0 }];
74
+ let dVisited = new Set([hash]);
75
+ while (dQueue.length > 0) {
76
+ const { hash: curr, currentDepth } = dQueue.shift();
77
+ if (currentDepth >= maxDepth)
78
+ continue;
79
+ const children = this.store.getChildrenHashes(curr);
80
+ for (const c of children) {
81
+ if (!dVisited.has(c)) {
82
+ dVisited.add(c);
83
+ const childBlock = this.store.getBlock(c);
84
+ if (childBlock) {
85
+ descendants.set(c, childBlock);
86
+ dQueue.push({ hash: c, currentDepth: currentDepth + 1 });
87
+ }
88
+ }
89
+ }
90
+ }
91
+ return {
92
+ hash,
93
+ ancestors: Array.from(ancestors.values()),
94
+ descendants: Array.from(descendants.values())
95
+ };
96
+ }
97
+ }
98
+ //# sourceMappingURL=topology.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology.js","sourceRoot":"","sources":["../../src/dag/topology.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface DagBlock {
2
+ hash: string;
3
+ parents: string[];
4
+ blueScore?: number;
5
+ transactions?: {
6
+ id: string;
7
+ payload?: any;
8
+ }[];
9
+ [key: string]: any;
10
+ }
11
+ export interface DagNeighborhood {
12
+ hash: string;
13
+ ancestors: DagBlock[];
14
+ descendants: DagBlock[];
15
+ }
16
+ export interface DagStatistics {
17
+ totalBlocks: number;
18
+ totalTips: number;
19
+ highestBlueScore: number;
20
+ }
21
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dag/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,GAAG,CAAA;KAAE,EAAE,CAAC;IAE/C,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,WAAW,EAAE,QAAQ,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC5B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/dag/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ export * from './wallet.js';
2
+ export * from './payment.js';
3
+ export * from './indexer.js';
4
+ export * from './jobs.js';
5
+ export * from './utxos.js';
6
+ export * from './dag/index.js';
7
+ export * from './snapshot/index.js';
8
+ export * from './silver/index.js';
9
+ export * from './silver/types.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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,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"}
package/dist/index.js ADDED
@@ -0,0 +1,10 @@
1
+ export * from './wallet.js';
2
+ export * from './payment.js';
3
+ export * from './indexer.js';
4
+ export * from './jobs.js';
5
+ export * from './utxos.js';
6
+ export * from './dag/index.js';
7
+ export * from './snapshot/index.js';
8
+ export * from './silver/index.js';
9
+ export * from './silver/types.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,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"}
@@ -0,0 +1,34 @@
1
+ import { BackendPlugin } from '@hardkas/core';
2
+ import { DagApi } from './dag/index.js';
3
+ import { SnapshotParticipant } from './snapshot/types.js';
4
+ export interface IndexerBackendPlugin extends BackendPlugin {
5
+ balance?(address: string): Promise<bigint>;
6
+ history?(address: string): Promise<unknown[]>;
7
+ utxos?(address: string): Promise<unknown[]>;
8
+ }
9
+ export interface IndexerToolkitOptions {
10
+ dataDir?: string;
11
+ backend?: IndexerBackendPlugin;
12
+ }
13
+ export declare class IndexerToolkit implements SnapshotParticipant {
14
+ private readonly options;
15
+ private subscriber;
16
+ private projection?;
17
+ private artifactIndex?;
18
+ readonly dag: DagApi;
19
+ readonly backend?: IndexerBackendPlugin | undefined;
20
+ private constructor();
21
+ static open(options?: IndexerToolkitOptions): IndexerToolkit;
22
+ connect(): Promise<void>;
23
+ watch(address: string): Promise<void>;
24
+ balance(address: string): Promise<bigint>;
25
+ history(address: string): Promise<any[]>;
26
+ findReceipts(opts: {
27
+ tags: string[];
28
+ }): Promise<any[]>;
29
+ ingestArtifact(artifact: any): Promise<void>;
30
+ snapshot(): Promise<any>;
31
+ restore(state: any): Promise<void>;
32
+ reload(): Promise<void>;
33
+ }
34
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +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,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,OAAO,CAAC,IAAI,CAAC;IAarC,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"}