@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.
- package/.turbo/turbo-build.log +4 -0
- package/LICENSE +21 -0
- package/dist/dag/consensus.d.ts +20 -0
- package/dist/dag/consensus.d.ts.map +1 -0
- package/dist/dag/consensus.js +131 -0
- package/dist/dag/consensus.js.map +1 -0
- package/dist/dag/index.d.ts +28 -0
- package/dist/dag/index.d.ts.map +1 -0
- package/dist/dag/index.js +57 -0
- package/dist/dag/index.js.map +1 -0
- package/dist/dag/store.d.ts +11 -0
- package/dist/dag/store.d.ts.map +1 -0
- package/dist/dag/store.js +32 -0
- package/dist/dag/store.js.map +1 -0
- package/dist/dag/topology.d.ts +14 -0
- package/dist/dag/topology.d.ts.map +1 -0
- package/dist/dag/topology.js +98 -0
- package/dist/dag/topology.js.map +1 -0
- package/dist/dag/types.d.ts +21 -0
- package/dist/dag/types.d.ts.map +1 -0
- package/dist/dag/types.js +2 -0
- package/dist/dag/types.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer.d.ts +34 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +111 -0
- package/dist/indexer.js.map +1 -0
- package/dist/jobs.d.ts +18 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +33 -0
- package/dist/jobs.js.map +1 -0
- package/dist/payment.d.ts +25 -0
- package/dist/payment.d.ts.map +1 -0
- package/dist/payment.js +66 -0
- package/dist/payment.js.map +1 -0
- package/dist/silver/index.d.ts +20 -0
- package/dist/silver/index.d.ts.map +1 -0
- package/dist/silver/index.js +94 -0
- package/dist/silver/index.js.map +1 -0
- package/dist/silver/templates.d.ts +2 -0
- package/dist/silver/templates.d.ts.map +1 -0
- package/dist/silver/templates.js +28 -0
- package/dist/silver/templates.js.map +1 -0
- package/dist/silver/types.d.ts +34 -0
- package/dist/silver/types.d.ts.map +1 -0
- package/dist/silver/types.js +2 -0
- package/dist/silver/types.js.map +1 -0
- package/dist/snapshot/backends/FsSnapshotBackend.d.ts +14 -0
- package/dist/snapshot/backends/FsSnapshotBackend.d.ts.map +1 -0
- package/dist/snapshot/backends/FsSnapshotBackend.js +82 -0
- package/dist/snapshot/backends/FsSnapshotBackend.js.map +1 -0
- package/dist/snapshot/backends/MemorySnapshotBackend.d.ts +13 -0
- package/dist/snapshot/backends/MemorySnapshotBackend.d.ts.map +1 -0
- package/dist/snapshot/backends/MemorySnapshotBackend.js +55 -0
- package/dist/snapshot/backends/MemorySnapshotBackend.js.map +1 -0
- package/dist/snapshot/index.d.ts +19 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +84 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/snapshot/serialization.d.ts +18 -0
- package/dist/snapshot/serialization.d.ts.map +1 -0
- package/dist/snapshot/serialization.js +31 -0
- package/dist/snapshot/serialization.js.map +1 -0
- package/dist/snapshot/types.d.ts +44 -0
- package/dist/snapshot/types.d.ts.map +1 -0
- package/dist/snapshot/types.js +2 -0
- package/dist/snapshot/types.js.map +1 -0
- package/dist/stores/invoice-store.d.ts +26 -0
- package/dist/stores/invoice-store.d.ts.map +1 -0
- package/dist/stores/invoice-store.js +34 -0
- package/dist/stores/invoice-store.js.map +1 -0
- package/dist/stores/utxo-control-store.d.ts +23 -0
- package/dist/stores/utxo-control-store.d.ts.map +1 -0
- package/dist/stores/utxo-control-store.js +64 -0
- package/dist/stores/utxo-control-store.js.map +1 -0
- package/dist/utxos.d.ts +128 -0
- package/dist/utxos.d.ts.map +1 -0
- package/dist/utxos.js +331 -0
- package/dist/utxos.js.map +1 -0
- package/dist/wallet.d.ts +34 -0
- package/dist/wallet.d.ts.map +1 -0
- package/dist/wallet.js +72 -0
- package/dist/wallet.js.map +1 -0
- package/package.json +28 -0
- package/src/dag/consensus.ts +150 -0
- package/src/dag/index.ts +73 -0
- package/src/dag/store.ts +40 -0
- package/src/dag/topology.ts +108 -0
- package/src/dag/types.ts +20 -0
- package/src/index.ts +9 -0
- package/src/indexer.ts +128 -0
- package/src/jobs.ts +46 -0
- package/src/payment.ts +81 -0
- package/src/silver/index.ts +102 -0
- package/src/silver/templates.ts +27 -0
- package/src/silver/types.ts +37 -0
- package/src/snapshot/backends/FsSnapshotBackend.ts +100 -0
- package/src/snapshot/backends/MemorySnapshotBackend.ts +65 -0
- package/src/snapshot/index.ts +102 -0
- package/src/snapshot/serialization.ts +35 -0
- package/src/snapshot/types.ts +45 -0
- package/src/stores/invoice-store.ts +53 -0
- package/src/stores/utxo-control-store.ts +78 -0
- package/src/utxos.ts +451 -0
- package/src/wallet.ts +93 -0
- package/test/silver.test.ts +59 -0
- package/test/snapshot.test.ts +99 -0
- package/test/toolkit.test.ts +109 -0
- package/tsconfig.json +9 -0
- package/vitest.config.ts +8 -0
package/dist/indexer.js
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { EventSubscriber } from '@hardkas/core';
|
|
2
|
+
import { ProjectionStoreJson } from '@hardkas/query-store';
|
|
3
|
+
import { ArtifactIndexStoreJson } from '@hardkas/artifacts';
|
|
4
|
+
import { DagApi } from './dag/index.js';
|
|
5
|
+
export class IndexerToolkit {
|
|
6
|
+
options;
|
|
7
|
+
subscriber;
|
|
8
|
+
projection;
|
|
9
|
+
artifactIndex;
|
|
10
|
+
dag;
|
|
11
|
+
backend;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.options = options;
|
|
14
|
+
this.subscriber = new EventSubscriber();
|
|
15
|
+
this.backend = options.backend;
|
|
16
|
+
if (!this.backend || !this.backend.capabilities.externalState) {
|
|
17
|
+
this.projection = new ProjectionStoreJson({
|
|
18
|
+
dirPath: options.dataDir ? `${options.dataDir}/projections` : '.hardkas/indexer/projections',
|
|
19
|
+
namespace: 'indexer'
|
|
20
|
+
});
|
|
21
|
+
this.artifactIndex = new ArtifactIndexStoreJson({
|
|
22
|
+
filePath: options.dataDir ? `${options.dataDir}/artifacts.json` : '.hardkas/indexer/artifacts.json'
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
this.dag = new DagApi();
|
|
26
|
+
}
|
|
27
|
+
static open(options = {}) {
|
|
28
|
+
return new IndexerToolkit(options);
|
|
29
|
+
}
|
|
30
|
+
async connect() {
|
|
31
|
+
if (this.backend?.connect) {
|
|
32
|
+
await this.backend.connect();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async watch(address) {
|
|
36
|
+
// Polling wrapper as per V1 rules.
|
|
37
|
+
this.subscriber.subscribe({
|
|
38
|
+
source: {}, // mock source for facade
|
|
39
|
+
type: "payment",
|
|
40
|
+
intervalMs: 1000,
|
|
41
|
+
watchedAddresses: [address],
|
|
42
|
+
handler: async (evt) => {
|
|
43
|
+
// Internally updates projections if address is involved
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async balance(address) {
|
|
48
|
+
if (this.backend?.balance) {
|
|
49
|
+
return this.backend.balance(address);
|
|
50
|
+
}
|
|
51
|
+
const balances = this.projection?.get('balances') || {};
|
|
52
|
+
return BigInt(balances[address] || 0);
|
|
53
|
+
}
|
|
54
|
+
async history(address) {
|
|
55
|
+
if (this.backend?.history) {
|
|
56
|
+
return this.backend.history(address);
|
|
57
|
+
}
|
|
58
|
+
const history = this.projection?.get('history') || {};
|
|
59
|
+
return history[address] || [];
|
|
60
|
+
}
|
|
61
|
+
async findReceipts(opts) {
|
|
62
|
+
if (!this.artifactIndex)
|
|
63
|
+
return [];
|
|
64
|
+
return this.artifactIndex.find(opts);
|
|
65
|
+
}
|
|
66
|
+
async ingestArtifact(artifact) {
|
|
67
|
+
if (!this.artifactIndex)
|
|
68
|
+
return;
|
|
69
|
+
this.artifactIndex.index({
|
|
70
|
+
hash: artifact.id || 'mock_hash',
|
|
71
|
+
schema: artifact.schema || 'unknown.v1',
|
|
72
|
+
timestamp: new Date().toISOString(),
|
|
73
|
+
filePath: `/mock/path/${artifact.id}.json`,
|
|
74
|
+
tags: artifact.tags || []
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async snapshot() {
|
|
78
|
+
if (this.backend && !this.backend.capabilities.snapshots && this.backend.capabilities.externalState) {
|
|
79
|
+
return {
|
|
80
|
+
backend: this.backend.name,
|
|
81
|
+
externalState: true,
|
|
82
|
+
snapshots: false,
|
|
83
|
+
dag: await this.dag.snapshot()
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
projection: this.projection?.getAll() || {},
|
|
88
|
+
artifactIndex: this.artifactIndex?.getAll() || [],
|
|
89
|
+
dag: await this.dag.snapshot()
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
async restore(state) {
|
|
93
|
+
if (state.externalState) {
|
|
94
|
+
// Cannot restore local state over an external backend. Just restore DAG.
|
|
95
|
+
if (state.dag)
|
|
96
|
+
await this.dag.restore(state.dag);
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (state.projection && this.projection)
|
|
100
|
+
this.projection.setAll(state.projection);
|
|
101
|
+
if (state.artifactIndex && this.artifactIndex)
|
|
102
|
+
this.artifactIndex.setAll(state.artifactIndex);
|
|
103
|
+
if (state.dag)
|
|
104
|
+
await this.dag.restore(state.dag);
|
|
105
|
+
}
|
|
106
|
+
async reload() {
|
|
107
|
+
await this.dag.reload();
|
|
108
|
+
// Projection and artifactIndex read synchronously from memory in this version
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
//# sourceMappingURL=indexer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.js","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"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"}
|
package/dist/jobs.d.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { JobHandler, JobRecord } from '@hardkas/jobs';
|
|
2
|
+
import { SnapshotParticipant, SnapshotState } from './snapshot/types.js';
|
|
3
|
+
export interface JobsToolkitOptions {
|
|
4
|
+
storePath?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class JobsToolkit implements SnapshotParticipant {
|
|
7
|
+
private runner;
|
|
8
|
+
private store;
|
|
9
|
+
private constructor();
|
|
10
|
+
static open(options?: JobsToolkitOptions): JobsToolkit;
|
|
11
|
+
registerHandler(type: string, handler: JobHandler): void;
|
|
12
|
+
enqueue(type: string, args?: any): Promise<string>;
|
|
13
|
+
getJob(id: string): Promise<JobRecord | undefined>;
|
|
14
|
+
snapshot(): Promise<SnapshotState>;
|
|
15
|
+
restore(state: SnapshotState): Promise<void>;
|
|
16
|
+
reload(): Promise<void>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzE,MAAM,WAAW,kBAAkB;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,WAAY,YAAW,mBAAmB;IACnD,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAe;IAE5B,OAAO;WAKO,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,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAIlD,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAIlC,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAKvC"}
|
package/dist/jobs.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { JobRunner, JobStoreJson } from '@hardkas/jobs';
|
|
2
|
+
export class JobsToolkit {
|
|
3
|
+
runner;
|
|
4
|
+
store;
|
|
5
|
+
constructor(options) {
|
|
6
|
+
this.store = new JobStoreJson({ filePath: options.storePath || '.hardkas-data/jobs.json' });
|
|
7
|
+
this.runner = new JobRunner({ store: this.store });
|
|
8
|
+
}
|
|
9
|
+
static open(options = {}) {
|
|
10
|
+
return new JobsToolkit(options);
|
|
11
|
+
}
|
|
12
|
+
registerHandler(type, handler) {
|
|
13
|
+
this.runner.registerHandler(type, handler);
|
|
14
|
+
}
|
|
15
|
+
async enqueue(type, args) {
|
|
16
|
+
return this.runner.enqueue(type, args);
|
|
17
|
+
}
|
|
18
|
+
async getJob(id) {
|
|
19
|
+
return this.runner.getJob(id);
|
|
20
|
+
}
|
|
21
|
+
async snapshot() {
|
|
22
|
+
return this.store.getAll();
|
|
23
|
+
}
|
|
24
|
+
async restore(state) {
|
|
25
|
+
this.store.setAll(state);
|
|
26
|
+
}
|
|
27
|
+
async reload() {
|
|
28
|
+
// Runner reads from store on each operation natively in current design,
|
|
29
|
+
// but if it had internal queues/caches, we'd clear them here.
|
|
30
|
+
// E.g., this.runner.clearCache();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=jobs.js.map
|
package/dist/jobs.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../src/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,YAAY,EAAyB,MAAM,eAAe,CAAC;AAO/E,MAAM,OAAO,WAAW;IACZ,MAAM,CAAY;IAClB,KAAK,CAAe;IAE5B,YAAoB,OAA2B;QAC3C,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,yBAAyB,EAAE,CAAC,CAAC;QAC5F,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,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,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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { InvoiceRecord } from './stores/invoice-store.js';
|
|
2
|
+
export interface PaymentToolkitOptions {
|
|
3
|
+
storePath?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare class PaymentToolkit {
|
|
6
|
+
readonly merchantId: string;
|
|
7
|
+
private readonly options;
|
|
8
|
+
private store;
|
|
9
|
+
private constructor();
|
|
10
|
+
static openMerchant(merchantId: string, options?: PaymentToolkitOptions): PaymentToolkit;
|
|
11
|
+
createInvoice(opts: {
|
|
12
|
+
amount: bigint;
|
|
13
|
+
currency: string;
|
|
14
|
+
}): Promise<InvoiceRecord>;
|
|
15
|
+
getInvoice(id: string): Promise<InvoiceRecord | undefined>;
|
|
16
|
+
listInvoices(): Promise<InvoiceRecord[]>;
|
|
17
|
+
stats(): Promise<{
|
|
18
|
+
totalInvoices: number;
|
|
19
|
+
paidInvoices: number;
|
|
20
|
+
}>;
|
|
21
|
+
check(invoiceId: string): Promise<string>;
|
|
22
|
+
receipt(invoiceId: string): Promise<any>;
|
|
23
|
+
simulatePay(invoiceId: string): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=payment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"payment.d.ts","sourceRoot":"","sources":["../src/payment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE5E,MAAM,WAAW,qBAAqB;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;aAIH,UAAU,EAAE,MAAM;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO;IAJ5B,OAAO,CAAC,KAAK,CAAmB;IAEhC,OAAO;WAOO,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc;IAItF,aAAa,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;IAuBjF,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;IAWxC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAO7D"}
|
package/dist/payment.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { buildKaspaUri } from '@hardkas/tx-builder';
|
|
2
|
+
import { InvoiceStoreJson } from './stores/invoice-store.js';
|
|
3
|
+
export class PaymentToolkit {
|
|
4
|
+
merchantId;
|
|
5
|
+
options;
|
|
6
|
+
store;
|
|
7
|
+
constructor(merchantId, options) {
|
|
8
|
+
this.merchantId = merchantId;
|
|
9
|
+
this.options = options;
|
|
10
|
+
this.store = new InvoiceStoreJson({ filePath: options.storePath || '.hardkas-data/invoices.json' });
|
|
11
|
+
}
|
|
12
|
+
static openMerchant(merchantId, options = {}) {
|
|
13
|
+
return new PaymentToolkit(merchantId, options);
|
|
14
|
+
}
|
|
15
|
+
async createInvoice(opts) {
|
|
16
|
+
const id = `inv_${Date.now()}`;
|
|
17
|
+
const result = buildKaspaUri({
|
|
18
|
+
address: `kaspa:${this.merchantId}`,
|
|
19
|
+
amountSompi: opts.amount * 100000000n, // convert to sompi
|
|
20
|
+
message: `Invoice ${id}`
|
|
21
|
+
});
|
|
22
|
+
const invoice = {
|
|
23
|
+
id,
|
|
24
|
+
merchantId: this.merchantId,
|
|
25
|
+
amount: opts.amount,
|
|
26
|
+
currency: opts.currency,
|
|
27
|
+
status: 'pending',
|
|
28
|
+
uri: result.uri,
|
|
29
|
+
createdAt: new Date().toISOString(),
|
|
30
|
+
updatedAt: new Date().toISOString()
|
|
31
|
+
};
|
|
32
|
+
this.store.save(invoice);
|
|
33
|
+
return invoice;
|
|
34
|
+
}
|
|
35
|
+
async getInvoice(id) {
|
|
36
|
+
return this.store.get(id);
|
|
37
|
+
}
|
|
38
|
+
async listInvoices() {
|
|
39
|
+
return this.store.listByMerchant(this.merchantId);
|
|
40
|
+
}
|
|
41
|
+
async stats() {
|
|
42
|
+
return this.store.stats(this.merchantId);
|
|
43
|
+
}
|
|
44
|
+
async check(invoiceId) {
|
|
45
|
+
const inv = this.store.get(invoiceId);
|
|
46
|
+
return inv ? inv.status : 'not_found';
|
|
47
|
+
}
|
|
48
|
+
async receipt(invoiceId) {
|
|
49
|
+
return {
|
|
50
|
+
schema: "paymentReceipt.v1",
|
|
51
|
+
invoiceId,
|
|
52
|
+
merchantId: this.merchantId,
|
|
53
|
+
status: "paid",
|
|
54
|
+
timestamp: new Date().toISOString()
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// For lab testing/simulation manually paying an invoice
|
|
58
|
+
async simulatePay(invoiceId) {
|
|
59
|
+
const inv = this.store.get(invoiceId);
|
|
60
|
+
if (inv) {
|
|
61
|
+
inv.status = 'paid';
|
|
62
|
+
this.store.save(inv);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=payment.js.map
|
|
@@ -0,0 +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,EAAiB,MAAM,2BAA2B,CAAC;AAM5E,MAAM,OAAO,cAAc;IAIH;IACC;IAJb,KAAK,CAAmB;IAEhC,YACoB,UAAkB,EACjB,OAA8B;QAD/B,eAAU,GAAV,UAAU,CAAQ;QACjB,YAAO,GAAP,OAAO,CAAuB;QAE/C,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAgB,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,SAAS,IAAI,6BAA6B,EAAE,CAAC,CAAC;IACxG,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,UAAkB,EAAE,UAAiC,EAAE;QAC9E,OAAO,IAAI,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,IAA0C;QACjE,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,aAAa,CAAC;YACzB,OAAO,EAAE,SAAS,IAAI,CAAC,UAAU,EAAE;YACnC,WAAW,EAAE,IAAI,CAAC,MAAM,GAAG,UAAY,EAAE,mBAAmB;YAC5D,OAAO,EAAE,WAAW,EAAE,EAAE;SAC3B,CAAC,CAAC;QAEH,MAAM,OAAO,GAAkB;YAC3B,EAAE;YACF,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,SAAS;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,OAAO,OAAO,CAAC;IACnB,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,EAAU;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAEM,KAAK,CAAC,YAAY;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,KAAK;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,SAAiB;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,SAAiB;QAClC,OAAO;YACH,MAAM,EAAE,mBAAmB;YAC3B,SAAS;YACT,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;IACN,CAAC;IAED,wDAAwD;IACjD,KAAK,CAAC,WAAW,CAAC,SAAiB;QACtC,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACtC,IAAI,GAAG,EAAE,CAAC;YACN,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;YACpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;IACL,CAAC;CACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { SilverArtifact, SilverBuildResult, SilverEvidence, SilverSimulationResult } from './types.js';
|
|
2
|
+
export declare class SilverTemplate {
|
|
3
|
+
readonly name: string;
|
|
4
|
+
private readonly rawSource;
|
|
5
|
+
constructor(name: string, rawSource: string);
|
|
6
|
+
parameters(): string[];
|
|
7
|
+
fill(params: Record<string, string | number>): string;
|
|
8
|
+
}
|
|
9
|
+
export declare class SilverToolkit {
|
|
10
|
+
private constructor();
|
|
11
|
+
static open(): SilverToolkit;
|
|
12
|
+
private getClaims;
|
|
13
|
+
templates(): string[];
|
|
14
|
+
template(name: string): SilverTemplate;
|
|
15
|
+
build(source: string): Promise<SilverBuildResult>;
|
|
16
|
+
simulate(build: SilverBuildResult, args?: string[]): Promise<SilverSimulationResult>;
|
|
17
|
+
artifact(build: SilverBuildResult, name?: string): Promise<SilverArtifact>;
|
|
18
|
+
evidence(build: SilverBuildResult, simulation: SilverSimulationResult): Promise<SilverEvidence>;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/silver/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAgB,cAAc,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAErH,qBAAa,cAAc;aACK,IAAI,EAAE,MAAM;IAAE,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAxC,IAAI,EAAE,MAAM,EAAmB,SAAS,EAAE,MAAM;IAErE,UAAU,IAAI,MAAM,EAAE;IAMtB,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,MAAM;CAY/D;AAED,qBAAa,aAAa;IACtB,OAAO;WAEO,IAAI,IAAI,aAAa;IAInC,OAAO,CAAC,SAAS;IAUV,SAAS,IAAI,MAAM,EAAE;IAIrB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc;IAOhC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAUjD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAUpF,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAc1E,QAAQ,CAAC,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC;CAa/G"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { SILVER_TEMPLATES } from './templates.js';
|
|
2
|
+
export class SilverTemplate {
|
|
3
|
+
name;
|
|
4
|
+
rawSource;
|
|
5
|
+
constructor(name, rawSource) {
|
|
6
|
+
this.name = name;
|
|
7
|
+
this.rawSource = rawSource;
|
|
8
|
+
}
|
|
9
|
+
parameters() {
|
|
10
|
+
const regex = /<([^>]+)>/g;
|
|
11
|
+
const matches = [...this.rawSource.matchAll(regex)];
|
|
12
|
+
return Array.from(new Set(matches.map(m => m[1])));
|
|
13
|
+
}
|
|
14
|
+
fill(params) {
|
|
15
|
+
let filledSource = this.rawSource;
|
|
16
|
+
const requiredParams = this.parameters();
|
|
17
|
+
for (const req of requiredParams) {
|
|
18
|
+
if (!(req in params)) {
|
|
19
|
+
throw new Error(`Missing parameter for template '${this.name}': <${req}>`);
|
|
20
|
+
}
|
|
21
|
+
filledSource = filledSource.replace(new RegExp(`<${req}>`, 'g'), String(params[req]));
|
|
22
|
+
}
|
|
23
|
+
return filledSource;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export class SilverToolkit {
|
|
27
|
+
constructor() { }
|
|
28
|
+
static open() {
|
|
29
|
+
return new SilverToolkit();
|
|
30
|
+
}
|
|
31
|
+
getClaims() {
|
|
32
|
+
return {
|
|
33
|
+
realSilverCompiler: false,
|
|
34
|
+
vmConsensusEquivalence: false,
|
|
35
|
+
mainnetReady: false,
|
|
36
|
+
productionSafe: false,
|
|
37
|
+
simulatedOnly: true
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
templates() {
|
|
41
|
+
return Object.keys(SILVER_TEMPLATES);
|
|
42
|
+
}
|
|
43
|
+
template(name) {
|
|
44
|
+
if (!SILVER_TEMPLATES[name]) {
|
|
45
|
+
throw new Error(`Silver template not found: ${name}`);
|
|
46
|
+
}
|
|
47
|
+
return new SilverTemplate(name, SILVER_TEMPLATES[name]);
|
|
48
|
+
}
|
|
49
|
+
async build(source) {
|
|
50
|
+
// Mock bytecode compilation
|
|
51
|
+
const mockBytecode = Buffer.from(source).toString('hex');
|
|
52
|
+
return {
|
|
53
|
+
source,
|
|
54
|
+
bytecode: mockBytecode,
|
|
55
|
+
claims: this.getClaims()
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
async simulate(build, args) {
|
|
59
|
+
// Mock VM execution
|
|
60
|
+
return {
|
|
61
|
+
success: true,
|
|
62
|
+
executionTrace: ["OP_TRUE", "OP_CHECKSIG"],
|
|
63
|
+
gasConsumed: 1000,
|
|
64
|
+
claims: this.getClaims()
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
async artifact(build, name) {
|
|
68
|
+
const art = {
|
|
69
|
+
id: `silver-${Date.now()}`,
|
|
70
|
+
source: build.source,
|
|
71
|
+
bytecode: build.bytecode,
|
|
72
|
+
createdAt: new Date().toISOString(),
|
|
73
|
+
claims: this.getClaims()
|
|
74
|
+
};
|
|
75
|
+
if (name !== undefined) {
|
|
76
|
+
art.name = name;
|
|
77
|
+
}
|
|
78
|
+
return art;
|
|
79
|
+
}
|
|
80
|
+
async evidence(build, simulation) {
|
|
81
|
+
return {
|
|
82
|
+
schema: "hardkas.script-evidence.v1",
|
|
83
|
+
artifactId: `silver-${Date.now()}`,
|
|
84
|
+
simulationResult: {
|
|
85
|
+
success: simulation.success,
|
|
86
|
+
executionTrace: simulation.executionTrace,
|
|
87
|
+
gasConsumed: simulation.gasConsumed
|
|
88
|
+
},
|
|
89
|
+
timestamp: new Date().toISOString(),
|
|
90
|
+
claims: this.getClaims()
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/silver/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/silver/templates.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA0BnD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export const SILVER_TEMPLATES = {
|
|
2
|
+
"op-true": `OP_TRUE`,
|
|
3
|
+
"timelock": `<locktime> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
|
4
|
+
<pubkey> OP_CHECKSIG`,
|
|
5
|
+
"escrow": `OP_IF
|
|
6
|
+
<buyer_pubkey> OP_CHECKSIGVERIFY
|
|
7
|
+
<arbiter_pubkey> OP_CHECKSIG
|
|
8
|
+
OP_ELSE
|
|
9
|
+
<seller_pubkey> OP_CHECKSIGVERIFY
|
|
10
|
+
<arbiter_pubkey> OP_CHECKSIG
|
|
11
|
+
OP_ENDIF`,
|
|
12
|
+
"htlc": `OP_IF
|
|
13
|
+
OP_SHA256 <secret_hash> OP_EQUALVERIFY
|
|
14
|
+
<receiver_pubkey> OP_CHECKSIG
|
|
15
|
+
OP_ELSE
|
|
16
|
+
<locktime> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
|
17
|
+
<sender_pubkey> OP_CHECKSIG
|
|
18
|
+
OP_ENDIF`,
|
|
19
|
+
"atomic-swap": `OP_IF
|
|
20
|
+
OP_SHA256 <secret_hash> OP_EQUALVERIFY
|
|
21
|
+
<participant_b_pubkey> OP_CHECKSIG
|
|
22
|
+
OP_ELSE
|
|
23
|
+
<locktime> OP_CHECKLOCKTIMEVERIFY OP_DROP
|
|
24
|
+
<participant_a_pubkey> OP_CHECKSIG
|
|
25
|
+
OP_ENDIF`,
|
|
26
|
+
"multisig": `OP_2 <pubkey1> <pubkey2> <pubkey3> OP_3 OP_CHECKMULTISIG`
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/silver/templates.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAA2B;IACpD,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE;qBACK;IACjB,QAAQ,EAAE;;;;;;SAML;IACL,MAAM,EAAE;;;;;;SAMH;IACL,aAAa,EAAE;;;;;;SAMV;IACL,UAAU,EAAE,0DAA0D;CACzE,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export interface SilverClaims {
|
|
2
|
+
realSilverCompiler: boolean;
|
|
3
|
+
vmConsensusEquivalence: boolean;
|
|
4
|
+
mainnetReady: boolean;
|
|
5
|
+
productionSafe: boolean;
|
|
6
|
+
simulatedOnly: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface SilverBuildResult {
|
|
9
|
+
source: string;
|
|
10
|
+
bytecode: string;
|
|
11
|
+
claims: SilverClaims;
|
|
12
|
+
}
|
|
13
|
+
export interface SilverSimulationResult {
|
|
14
|
+
success: boolean;
|
|
15
|
+
executionTrace: string[];
|
|
16
|
+
gasConsumed: number;
|
|
17
|
+
claims: SilverClaims;
|
|
18
|
+
}
|
|
19
|
+
export interface SilverArtifact {
|
|
20
|
+
id: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
source: string;
|
|
23
|
+
bytecode: string;
|
|
24
|
+
createdAt: string;
|
|
25
|
+
claims: SilverClaims;
|
|
26
|
+
}
|
|
27
|
+
export interface SilverEvidence {
|
|
28
|
+
schema: string;
|
|
29
|
+
artifactId: string;
|
|
30
|
+
simulationResult: Omit<SilverSimulationResult, 'claims'>;
|
|
31
|
+
timestamp: string;
|
|
32
|
+
claims: SilverClaims;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/silver/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IACzB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,sBAAsB,EAAE,OAAO,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAC;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/silver/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { SnapshotBackend, SnapshotManifest, SnapshotState } from "../types.js";
|
|
2
|
+
export declare class FsSnapshotBackend implements SnapshotBackend {
|
|
3
|
+
private baseDir;
|
|
4
|
+
constructor(baseDir?: string);
|
|
5
|
+
save(id: string, name: string, state: Record<string, SnapshotState>): Promise<SnapshotManifest>;
|
|
6
|
+
load(id: string): Promise<{
|
|
7
|
+
manifest: SnapshotManifest;
|
|
8
|
+
state: Record<string, SnapshotState>;
|
|
9
|
+
}>;
|
|
10
|
+
list(): Promise<SnapshotManifest[]>;
|
|
11
|
+
delete(id: string): Promise<void>;
|
|
12
|
+
branch(baseId: string, newId: string, newName: string): Promise<SnapshotManifest>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=FsSnapshotBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FsSnapshotBackend.d.ts","sourceRoot":"","sources":["../../../src/snapshot/backends/FsSnapshotBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAM/E,qBAAa,iBAAkB,YAAW,eAAe;IACrD,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAA6B;IAI5C,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAoC/F,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;KAAE,CAAC;IAkB/F,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAqBnC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAI1F"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import fs from "fs-extra";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import crypto from "crypto";
|
|
4
|
+
import { snapshotReplacer, snapshotReviver } from "../serialization.js";
|
|
5
|
+
export class FsSnapshotBackend {
|
|
6
|
+
baseDir;
|
|
7
|
+
constructor(baseDir = ".hardkas-snapshots") {
|
|
8
|
+
this.baseDir = baseDir;
|
|
9
|
+
}
|
|
10
|
+
async save(id, name, state) {
|
|
11
|
+
const snapshotDir = path.join(this.baseDir, id);
|
|
12
|
+
await fs.ensureDir(snapshotDir);
|
|
13
|
+
const stateHashes = {};
|
|
14
|
+
const participants = Object.keys(state);
|
|
15
|
+
// Write each participant's state to a separate file
|
|
16
|
+
for (const [pId, pState] of Object.entries(state)) {
|
|
17
|
+
const data = JSON.stringify(pState, snapshotReplacer, 2);
|
|
18
|
+
stateHashes[pId] = crypto.createHash("sha256").update(data).digest("hex");
|
|
19
|
+
await fs.writeFile(path.join(snapshotDir, `${pId}.json`), data);
|
|
20
|
+
}
|
|
21
|
+
const manifest = {
|
|
22
|
+
schema: "hardkas.snapshot.v1",
|
|
23
|
+
snapshotId: id,
|
|
24
|
+
name,
|
|
25
|
+
createdAt: Date.now(),
|
|
26
|
+
backend: "filesystem",
|
|
27
|
+
path: snapshotDir,
|
|
28
|
+
participants,
|
|
29
|
+
stateHashes,
|
|
30
|
+
claims: {
|
|
31
|
+
containsFullStateInline: false,
|
|
32
|
+
restorableLocalState: true,
|
|
33
|
+
networkStateCaptured: false
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
// Write manifest
|
|
37
|
+
await fs.writeFile(path.join(snapshotDir, "manifest.json"), JSON.stringify(manifest, null, 2));
|
|
38
|
+
return manifest;
|
|
39
|
+
}
|
|
40
|
+
async load(id) {
|
|
41
|
+
const snapshotDir = path.join(this.baseDir, id);
|
|
42
|
+
if (!await fs.pathExists(snapshotDir)) {
|
|
43
|
+
throw new Error(`Snapshot ${id} not found in filesystem backend at ${snapshotDir}`);
|
|
44
|
+
}
|
|
45
|
+
const manifestData = await fs.readFile(path.join(snapshotDir, "manifest.json"), "utf8");
|
|
46
|
+
const manifest = JSON.parse(manifestData);
|
|
47
|
+
const state = {};
|
|
48
|
+
for (const pId of manifest.participants) {
|
|
49
|
+
const stateData = await fs.readFile(path.join(snapshotDir, `${pId}.json`), "utf8");
|
|
50
|
+
state[pId] = JSON.parse(stateData, snapshotReviver);
|
|
51
|
+
}
|
|
52
|
+
return { manifest, state };
|
|
53
|
+
}
|
|
54
|
+
async list() {
|
|
55
|
+
if (!await fs.pathExists(this.baseDir)) {
|
|
56
|
+
return [];
|
|
57
|
+
}
|
|
58
|
+
const entries = await fs.readdir(this.baseDir, { withFileTypes: true });
|
|
59
|
+
const manifests = [];
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
if (entry.isDirectory()) {
|
|
62
|
+
const manifestPath = path.join(this.baseDir, entry.name, "manifest.json");
|
|
63
|
+
if (await fs.pathExists(manifestPath)) {
|
|
64
|
+
const data = await fs.readFile(manifestPath, "utf8");
|
|
65
|
+
manifests.push(JSON.parse(data));
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return manifests;
|
|
70
|
+
}
|
|
71
|
+
async delete(id) {
|
|
72
|
+
const snapshotDir = path.join(this.baseDir, id);
|
|
73
|
+
if (await fs.pathExists(snapshotDir)) {
|
|
74
|
+
await fs.remove(snapshotDir);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async branch(baseId, newId, newName) {
|
|
78
|
+
const { state } = await this.load(baseId);
|
|
79
|
+
return this.save(newId, newName, state);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=FsSnapshotBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FsSnapshotBackend.js","sourceRoot":"","sources":["../../../src/snapshot/backends/FsSnapshotBackend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { SnapshotBackend, SnapshotManifest, SnapshotState } from "../types.js";
|
|
2
|
+
export declare class MemorySnapshotBackend implements SnapshotBackend {
|
|
3
|
+
private snapshots;
|
|
4
|
+
save(id: string, name: string, state: Record<string, SnapshotState>): Promise<SnapshotManifest>;
|
|
5
|
+
load(id: string): Promise<{
|
|
6
|
+
manifest: SnapshotManifest;
|
|
7
|
+
state: Record<string, SnapshotState>;
|
|
8
|
+
}>;
|
|
9
|
+
list(): Promise<SnapshotManifest[]>;
|
|
10
|
+
delete(id: string): Promise<void>;
|
|
11
|
+
branch(baseId: string, newId: string, newName: string): Promise<SnapshotManifest>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=MemorySnapshotBackend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemorySnapshotBackend.d.ts","sourceRoot":"","sources":["../../../src/snapshot/backends/MemorySnapshotBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI/E,qBAAa,qBAAsB,YAAW,eAAe;IACzD,OAAO,CAAC,SAAS,CAA2F;IAEtG,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA8B/F,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,QAAQ,EAAE,gBAAgB,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;KAAE,CAAC;IAY/F,IAAI,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAInC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAO1F"}
|