@hardkas/toolkit 0.11.1-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 +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer.d.ts +3 -1
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +13 -2
- package/dist/indexer.js.map +1 -1
- package/dist/jobs.d.ts +3 -0
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +16 -1
- package/dist/jobs.js.map +1 -1
- package/dist/payment.d.ts +4 -2
- package/dist/payment.d.ts.map +1 -1
- package/dist/payment.js +30 -12
- package/dist/payment.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/stores/invoice-store.d.ts +15 -1
- package/dist/stores/invoice-store.d.ts.map +1 -1
- package/dist/stores/invoice-store.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 +81 -2
- package/dist/wallet.d.ts.map +1 -1
- package/dist/wallet.js +328 -13
- package/dist/wallet.js.map +1 -1
- package/package.json +27 -11
- 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 -9
- package/src/indexer.ts +0 -128
- package/src/jobs.ts +0 -46
- package/src/payment.ts +0 -81
- 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 -53
- package/src/stores/utxo-control-store.ts +0 -78
- package/src/utxos.ts +0 -451
- package/src/wallet.ts +0 -93
- package/test/silver.test.ts +0 -59
- package/test/snapshot.test.ts +0 -99
- package/test/toolkit.test.ts +0 -109
- 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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './wallet.js';
|
|
2
2
|
export * from './payment.js';
|
|
3
|
+
export * from './stores/invoice-store.js';
|
|
3
4
|
export * from './indexer.js';
|
|
4
5
|
export * from './jobs.js';
|
|
5
6
|
export * from './utxos.js';
|
|
@@ -7,4 +8,7 @@ export * from './dag/index.js';
|
|
|
7
8
|
export * from './snapshot/index.js';
|
|
8
9
|
export * from './silver/index.js';
|
|
9
10
|
export * from './silver/types.js';
|
|
11
|
+
export * from './subscriptions.js';
|
|
12
|
+
export * from './fee-estimator.js';
|
|
13
|
+
export * from './query-api.js';
|
|
10
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,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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export * from './wallet.js';
|
|
2
2
|
export * from './payment.js';
|
|
3
|
+
export * from './stores/invoice-store.js';
|
|
3
4
|
export * from './indexer.js';
|
|
4
5
|
export * from './jobs.js';
|
|
5
6
|
export * from './utxos.js';
|
|
@@ -7,4 +8,7 @@ export * from './dag/index.js';
|
|
|
7
8
|
export * from './snapshot/index.js';
|
|
8
9
|
export * from './silver/index.js';
|
|
9
10
|
export * from './silver/types.js';
|
|
11
|
+
export * from './subscriptions.js';
|
|
12
|
+
export * from './fee-estimator.js';
|
|
13
|
+
export * from './query-api.js';
|
|
10
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,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
|
@@ -10,6 +10,7 @@ export interface IndexerToolkitOptions {
|
|
|
10
10
|
dataDir?: string;
|
|
11
11
|
backend?: IndexerBackendPlugin;
|
|
12
12
|
}
|
|
13
|
+
export type WatchHandler = (evt: any) => Promise<void> | void;
|
|
13
14
|
export declare class IndexerToolkit implements SnapshotParticipant {
|
|
14
15
|
private readonly options;
|
|
15
16
|
private subscriber;
|
|
@@ -20,9 +21,10 @@ export declare class IndexerToolkit implements SnapshotParticipant {
|
|
|
20
21
|
private constructor();
|
|
21
22
|
static open(options?: IndexerToolkitOptions): IndexerToolkit;
|
|
22
23
|
connect(): Promise<void>;
|
|
23
|
-
watch(address: string): Promise<void>;
|
|
24
|
+
watch(address: string | string[], handler?: WatchHandler): Promise<void>;
|
|
24
25
|
balance(address: string): Promise<bigint>;
|
|
25
26
|
history(address: string): Promise<any[]>;
|
|
27
|
+
utxos(address: string): Promise<any[]>;
|
|
26
28
|
findReceipts(opts: {
|
|
27
29
|
tags: string[];
|
|
28
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,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;
|
|
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
|
@@ -32,15 +32,19 @@ export class IndexerToolkit {
|
|
|
32
32
|
await this.backend.connect();
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
|
-
async watch(address) {
|
|
35
|
+
async watch(address, handler) {
|
|
36
|
+
const addresses = Array.isArray(address) ? address : [address];
|
|
36
37
|
// Polling wrapper as per V1 rules.
|
|
37
38
|
this.subscriber.subscribe({
|
|
38
39
|
source: {}, // mock source for facade
|
|
39
40
|
type: "payment",
|
|
40
41
|
intervalMs: 1000,
|
|
41
|
-
watchedAddresses:
|
|
42
|
+
watchedAddresses: addresses,
|
|
42
43
|
handler: async (evt) => {
|
|
43
44
|
// Internally updates projections if address is involved
|
|
45
|
+
if (handler) {
|
|
46
|
+
await handler(evt);
|
|
47
|
+
}
|
|
44
48
|
}
|
|
45
49
|
});
|
|
46
50
|
}
|
|
@@ -58,6 +62,13 @@ export class IndexerToolkit {
|
|
|
58
62
|
const history = this.projection?.get('history') || {};
|
|
59
63
|
return history[address] || [];
|
|
60
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
|
+
}
|
|
61
72
|
async findReceipts(opts) {
|
|
62
73
|
if (!this.artifactIndex)
|
|
63
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;
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { JobHandler, JobRecord } from '@hardkas/jobs';
|
|
|
2
2
|
import { SnapshotParticipant, SnapshotState } from './snapshot/types.js';
|
|
3
3
|
export interface JobsToolkitOptions {
|
|
4
4
|
storePath?: string;
|
|
5
|
+
storage?: any;
|
|
5
6
|
}
|
|
6
7
|
export declare class JobsToolkit implements SnapshotParticipant {
|
|
7
8
|
private runner;
|
|
@@ -10,8 +11,10 @@ export declare class JobsToolkit implements SnapshotParticipant {
|
|
|
10
11
|
static open(options?: JobsToolkitOptions): JobsToolkit;
|
|
11
12
|
registerHandler(type: string, handler: JobHandler): void;
|
|
12
13
|
enqueue(type: string, args?: any): Promise<string>;
|
|
14
|
+
resumePendingJobs(): Promise<void>;
|
|
13
15
|
getJob(id: string): Promise<JobRecord | undefined>;
|
|
14
16
|
snapshot(): Promise<SnapshotState>;
|
|
17
|
+
resetAll(): void;
|
|
15
18
|
restore(state: SnapshotState): Promise<void>;
|
|
16
19
|
reload(): Promise<void>;
|
|
17
20
|
}
|
package/dist/jobs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,UAAU,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,UAAU,EAAE,SAAS,EAAY,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,qBAAa,WAAY,YAAW,mBAAmB;IACnD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAW;IAExB,OAAO;WASO,IAAI,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW;IAI1D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,IAAI;IAIlD,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlD,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIlD,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAIxC,QAAQ;IAQF,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAKvC"}
|
package/dist/jobs.js
CHANGED
|
@@ -3,7 +3,12 @@ export class JobsToolkit {
|
|
|
3
3
|
runner;
|
|
4
4
|
store;
|
|
5
5
|
constructor(options) {
|
|
6
|
-
|
|
6
|
+
if (options.storage) {
|
|
7
|
+
this.store = options.storage.createJobStore();
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
this.store = new JobStoreJson({ filePath: options.storePath || '.hardkas-data/jobs.json' });
|
|
11
|
+
}
|
|
7
12
|
this.runner = new JobRunner({ store: this.store });
|
|
8
13
|
}
|
|
9
14
|
static open(options = {}) {
|
|
@@ -15,12 +20,22 @@ export class JobsToolkit {
|
|
|
15
20
|
async enqueue(type, args) {
|
|
16
21
|
return this.runner.enqueue(type, args);
|
|
17
22
|
}
|
|
23
|
+
async resumePendingJobs() {
|
|
24
|
+
return this.runner.resumePendingJobs();
|
|
25
|
+
}
|
|
18
26
|
async getJob(id) {
|
|
19
27
|
return this.runner.getJob(id);
|
|
20
28
|
}
|
|
21
29
|
async snapshot() {
|
|
22
30
|
return this.store.getAll();
|
|
23
31
|
}
|
|
32
|
+
resetAll() {
|
|
33
|
+
// Not all stores support this, but if we really need it, we should add clear() to JobStore.
|
|
34
|
+
// For now, it's a test utility.
|
|
35
|
+
if ('setAll' in this.store) {
|
|
36
|
+
this.store.setAll({});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
24
39
|
async restore(state) {
|
|
25
40
|
this.store.setAll(state);
|
|
26
41
|
}
|
package/dist/jobs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAmC,MAAM,eAAe,CAAC;AAQzF,MAAM,OAAO,WAAW;IACZ,MAAM,CAAY;IAClB,KAAK,CAAW;IAExB,YAAoB,OAA2B;QAC3C,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,yBAAyB,EAAE,CAAC,CAAC;QAChG,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvD,CAAC;IAEM,MAAM,CAAC,IAAI,CAAC,UAA8B,EAAE;QAC/C,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IAEM,eAAe,CAAC,IAAY,EAAE,OAAmB;QACpD,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC/C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,IAAU;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAU;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,QAAQ;QACjB,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAEM,QAAQ;QACX,4FAA4F;QAC5F,gCAAgC;QAChC,IAAI,QAAQ,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,KAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,KAAoB;QACrC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAkC,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,MAAM;QACf,wEAAwE;QACxE,8DAA8D;QAC9D,kCAAkC;IACtC,CAAC;CACJ"}
|
package/dist/payment.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { InvoiceRecord } from './stores/invoice-store.js';
|
|
2
2
|
export interface PaymentToolkitOptions {
|
|
3
3
|
storePath?: string;
|
|
4
|
+
storage?: any;
|
|
4
5
|
}
|
|
5
6
|
export declare class PaymentToolkit {
|
|
6
7
|
readonly merchantId: string;
|
|
@@ -9,8 +10,9 @@ export declare class PaymentToolkit {
|
|
|
9
10
|
private constructor();
|
|
10
11
|
static openMerchant(merchantId: string, options?: PaymentToolkitOptions): PaymentToolkit;
|
|
11
12
|
createInvoice(opts: {
|
|
12
|
-
amount
|
|
13
|
-
|
|
13
|
+
amount?: bigint;
|
|
14
|
+
amountSompi?: bigint;
|
|
15
|
+
currency?: string;
|
|
14
16
|
}): Promise<InvoiceRecord>;
|
|
15
17
|
getInvoice(id: string): Promise<InvoiceRecord | undefined>;
|
|
16
18
|
listInvoices(): Promise<InvoiceRecord[]>;
|
package/dist/payment.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,aAAa,
|
|
1
|
+
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,aAAa,EAAgB,MAAM,2BAA2B,CAAC;AAE1F,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,GAAG,CAAC;CACjB;AAED,qBAAa,cAAc;aAIH,UAAU,EAAE,MAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ5B,OAAO,CAAC,KAAK,CAAe;IAE5B,OAAO;WAWO,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc;IAItF,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IA+BzG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC;IAI1D,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIxC,KAAK,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IAIjE,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKzC,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAiBxC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO7D"}
|
package/dist/payment.js
CHANGED
|
@@ -7,59 +7,77 @@ export class PaymentToolkit {
|
|
|
7
7
|
constructor(merchantId, options) {
|
|
8
8
|
this.merchantId = merchantId;
|
|
9
9
|
this.options = options;
|
|
10
|
-
|
|
10
|
+
if (options.storage) {
|
|
11
|
+
this.store = options.storage.createInvoiceStore();
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
this.store = new InvoiceStoreJson({ filePath: options.storePath || '.hardkas-data/invoices.json' });
|
|
15
|
+
}
|
|
11
16
|
}
|
|
12
17
|
static openMerchant(merchantId, options = {}) {
|
|
13
18
|
return new PaymentToolkit(merchantId, options);
|
|
14
19
|
}
|
|
15
20
|
async createInvoice(opts) {
|
|
21
|
+
if (opts.amount === undefined && opts.amountSompi === undefined) {
|
|
22
|
+
throw new Error("Must provide either amount or amountSompi");
|
|
23
|
+
}
|
|
24
|
+
const sompi = opts.amountSompi ?? (opts.amount * 100000000n);
|
|
25
|
+
const kas = opts.amount ?? (opts.amountSompi / 100000000n);
|
|
26
|
+
const curr = opts.currency ?? 'KAS';
|
|
16
27
|
const id = `inv_${Date.now()}`;
|
|
17
28
|
const result = buildKaspaUri({
|
|
18
29
|
address: `kaspa:${this.merchantId}`,
|
|
19
|
-
amountSompi:
|
|
30
|
+
amountSompi: sompi,
|
|
20
31
|
message: `Invoice ${id}`
|
|
21
32
|
});
|
|
22
33
|
const invoice = {
|
|
23
34
|
id,
|
|
24
35
|
merchantId: this.merchantId,
|
|
25
|
-
amount:
|
|
26
|
-
currency:
|
|
36
|
+
amount: kas,
|
|
37
|
+
currency: curr,
|
|
27
38
|
status: 'pending',
|
|
28
39
|
uri: result.uri,
|
|
29
40
|
createdAt: new Date().toISOString(),
|
|
30
41
|
updatedAt: new Date().toISOString()
|
|
31
42
|
};
|
|
32
|
-
this.store.save(invoice);
|
|
43
|
+
await this.store.save(invoice);
|
|
33
44
|
return invoice;
|
|
34
45
|
}
|
|
35
46
|
async getInvoice(id) {
|
|
36
|
-
return this.store.get(id);
|
|
47
|
+
return await this.store.get(id);
|
|
37
48
|
}
|
|
38
49
|
async listInvoices() {
|
|
39
|
-
return this.store.listByMerchant(this.merchantId);
|
|
50
|
+
return await this.store.listByMerchant(this.merchantId);
|
|
40
51
|
}
|
|
41
52
|
async stats() {
|
|
42
|
-
return this.store.stats(this.merchantId);
|
|
53
|
+
return await this.store.stats(this.merchantId);
|
|
43
54
|
}
|
|
44
55
|
async check(invoiceId) {
|
|
45
|
-
const inv = this.store.get(invoiceId);
|
|
56
|
+
const inv = await this.store.get(invoiceId);
|
|
46
57
|
return inv ? inv.status : 'not_found';
|
|
47
58
|
}
|
|
48
59
|
async receipt(invoiceId) {
|
|
60
|
+
const inv = await this.store.get(invoiceId);
|
|
61
|
+
if (!inv)
|
|
62
|
+
throw new Error("Invoice not found");
|
|
63
|
+
if (inv.status !== "paid")
|
|
64
|
+
throw new Error("Invoice is not paid");
|
|
49
65
|
return {
|
|
50
66
|
schema: "paymentReceipt.v1",
|
|
51
67
|
invoiceId,
|
|
52
68
|
merchantId: this.merchantId,
|
|
53
69
|
status: "paid",
|
|
54
|
-
timestamp: new Date().toISOString()
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
amount: inv.amount,
|
|
72
|
+
currency: inv.currency
|
|
55
73
|
};
|
|
56
74
|
}
|
|
57
75
|
// For lab testing/simulation manually paying an invoice
|
|
58
76
|
async simulatePay(invoiceId) {
|
|
59
|
-
const inv = this.store.get(invoiceId);
|
|
77
|
+
const inv = await this.store.get(invoiceId);
|
|
60
78
|
if (inv) {
|
|
61
79
|
inv.status = 'paid';
|
|
62
|
-
this.store.save(inv);
|
|
80
|
+
await this.store.save(inv);
|
|
63
81
|
}
|
|
64
82
|
}
|
|
65
83
|
}
|
package/dist/payment.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"payment.js","sourceRoot":"","sources":["../src/payment.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"}
|
|
@@ -8,7 +8,21 @@ export interface InvoiceRecord {
|
|
|
8
8
|
createdAt: string;
|
|
9
9
|
updatedAt: string;
|
|
10
10
|
}
|
|
11
|
-
export
|
|
11
|
+
export interface InvoiceStore {
|
|
12
|
+
save(invoice: InvoiceRecord): Promise<void> | void;
|
|
13
|
+
get(id: string): Promise<InvoiceRecord | undefined> | InvoiceRecord | undefined;
|
|
14
|
+
list(): Promise<InvoiceRecord[]> | InvoiceRecord[];
|
|
15
|
+
listByMerchant(merchantId: string): Promise<InvoiceRecord[]> | InvoiceRecord[];
|
|
16
|
+
listPaid(): Promise<InvoiceRecord[]> | InvoiceRecord[];
|
|
17
|
+
stats(merchantId?: string): Promise<{
|
|
18
|
+
totalInvoices: number;
|
|
19
|
+
paidInvoices: number;
|
|
20
|
+
}> | {
|
|
21
|
+
totalInvoices: number;
|
|
22
|
+
paidInvoices: number;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export declare class InvoiceStoreJson implements InvoiceStore {
|
|
12
26
|
private store;
|
|
13
27
|
constructor(options: {
|
|
14
28
|
filePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoice-store.d.ts","sourceRoot":"","sources":["../../src/stores/invoice-store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,
|
|
1
|
+
{"version":3,"file":"invoice-store.d.ts","sourceRoot":"","sources":["../../src/stores/invoice-store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,WAAW,CAAC;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACnD,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,GAAG,aAAa,GAAG,SAAS,CAAC;IAChF,IAAI,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC;IACnD,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC;IAC/E,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,aAAa,EAAE,CAAC;IACvD,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1I;AAED,qBAAa,gBAAiB,YAAW,YAAY;IACjD,OAAO,CAAC,KAAK,CAAiC;gBAElC,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE;IAIlC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAKlC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS;IAI1C,IAAI,IAAI,aAAa,EAAE;IAIvB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,aAAa,EAAE;IAInD,QAAQ,IAAI,aAAa,EAAE;IAI3B,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM;;;;CAWnC"}
|