@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,109 @@
1
+ import { describe, it, expect, beforeAll, afterAll } from 'vitest';
2
+ import { WalletToolkit, PaymentToolkit, IndexerToolkit } from '../src/index.js';
3
+ import * as fs from 'node:fs/promises';
4
+ import * as path from 'node:path';
5
+
6
+ describe('@hardkas/toolkit V1', () => {
7
+ const tmpDir = path.join(process.cwd(), '.test-toolkit');
8
+
9
+ beforeAll(async () => {
10
+ try { await fs.mkdir(tmpDir, { recursive: true }); } catch (e) {}
11
+ });
12
+
13
+ afterAll(async () => {
14
+ try { await fs.rm(tmpDir, { recursive: true, force: true }); } catch (e) {}
15
+ });
16
+
17
+ describe('WalletToolkit', () => {
18
+ it('should instantiate and return address', async () => {
19
+ const wallet = WalletToolkit.open('alice', { storePath: path.join(tmpDir, 'wallets.json') });
20
+ await wallet.create();
21
+ const addr = await wallet.address();
22
+ expect(addr).toBeDefined();
23
+ expect(typeof addr).toBe('string');
24
+ expect(addr.startsWith('kaspasim:') || addr.startsWith('kaspa:')).toBe(true);
25
+ });
26
+
27
+ it('should estimate fee and plan send', async () => {
28
+ const wallet = WalletToolkit.open('alice', { storePath: path.join(tmpDir, 'wallets.json') });
29
+ // Mock the internal walletQuery for the test
30
+ (wallet as any).walletQuery.getUtxos = async () => [];
31
+
32
+ await wallet.create(); // Create it so we can fetch it
33
+
34
+ // This is a facade test, we just want to ensure it doesn't crash on wiring
35
+ const utxos = await wallet.utxos.list();
36
+ expect(Array.isArray(utxos)).toBe(true);
37
+
38
+ // To test estimateFee, CoinSelector might throw if not enough funds,
39
+ // but we at least know it wired up the query correctly.
40
+ });
41
+ });
42
+
43
+ describe('PaymentToolkit', () => {
44
+ it('should create invoice and receipt with persistence', async () => {
45
+ const pt = PaymentToolkit.openMerchant('store-1', { storePath: path.join(tmpDir, 'invoices.json') });
46
+ const inv = await pt.createInvoice({ amount: 150n, currency: 'KAS' });
47
+ expect(inv.id).toBeDefined();
48
+ expect(inv.uri).toContain('kaspa:store-1');
49
+ expect(inv.uri).toContain('amount=150');
50
+ expect(inv.status).toBe('pending');
51
+
52
+ const status = await pt.check(inv.id);
53
+ expect(status).toBe('pending');
54
+
55
+ // Simulate payment
56
+ await pt.simulatePay(inv.id);
57
+ const paidStatus = await pt.check(inv.id);
58
+ expect(paidStatus).toBe('paid');
59
+
60
+ const receipt = await pt.receipt(inv.id);
61
+ expect(receipt.schema).toBe('paymentReceipt.v1');
62
+ expect(receipt.merchantId).toBe('store-1');
63
+
64
+ const list = await pt.listInvoices();
65
+ expect(list.length).toBe(1);
66
+
67
+ const stats = await pt.stats();
68
+ expect(stats.totalInvoices).toBe(1);
69
+ expect(stats.paidInvoices).toBe(1);
70
+ });
71
+ });
72
+
73
+ describe('JobsToolkit', () => {
74
+ it('should initialize and enqueue jobs', async () => {
75
+ const { JobsToolkit } = await import('../src/index.js');
76
+ const jobs = JobsToolkit.open({ storePath: path.join(tmpDir, 'jobs.json') });
77
+ jobs.registerHandler('test-job', async (ctx) => {
78
+ ctx.progress.update({ total: 10, processed: 10 });
79
+ });
80
+ const id = await jobs.enqueue('test-job', {});
81
+ expect(id).toBeDefined();
82
+
83
+ // Allow a tick for async job to execute
84
+ await new Promise(r => setTimeout(r, 50));
85
+
86
+ const job = await jobs.getJob(id);
87
+ expect(job).toBeDefined();
88
+ expect(job?.type).toBe('test-job');
89
+ });
90
+ });
91
+
92
+ describe('IndexerToolkit', () => {
93
+ it('should ingest and find artifacts', async () => {
94
+ const idx = IndexerToolkit.open({ dataDir: tmpDir });
95
+
96
+ await idx.watch('kaspa:store-1'); // should just bind
97
+
98
+ await idx.ingestArtifact({
99
+ id: '123',
100
+ schema: 'test.v1',
101
+ tags: ['test:abc']
102
+ });
103
+
104
+ const found = await idx.findReceipts({ tags: ['test:abc'] });
105
+ expect(found.length).toBe(1);
106
+ expect(found[0].hash).toBe('123');
107
+ });
108
+ });
109
+ });
package/tsconfig.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "extends": "../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist",
5
+ "rootDir": "./src",
6
+ "declaration": true
7
+ },
8
+ "include": ["src/**/*"]
9
+ }
@@ -0,0 +1,8 @@
1
+ import { defineConfig } from 'vitest/config';
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ environment: 'node',
6
+ include: ['test/**/*.test.ts'],
7
+ }
8
+ });