@mainsail/evm-service 0.0.1-evm.1 → 0.0.1-evm.2
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/distribution/instances/evm.d.ts +3 -1
- package/distribution/instances/evm.d.ts.map +1 -1
- package/distribution/instances/evm.js +8 -2
- package/distribution/instances/evm.js.map +1 -1
- package/distribution/instances/mock.d.ts +3 -1
- package/distribution/instances/mock.d.ts.map +1 -1
- package/distribution/instances/mock.js +7 -1
- package/distribution/instances/mock.js.map +1 -1
- package/package.json +18 -18
|
@@ -8,7 +8,9 @@ export declare class EvmInstance implements Contracts.Evm.Instance {
|
|
|
8
8
|
getAccountInfo(address: string): Promise<Contracts.Evm.AccountInfo>;
|
|
9
9
|
updateAccountInfo(context: Contracts.Evm.AccountUpdateContext): Promise<void>;
|
|
10
10
|
onCommit(unit: Contracts.Processor.ProcessableUnit): Promise<void>;
|
|
11
|
-
|
|
11
|
+
codeAt(address: string): Promise<string>;
|
|
12
|
+
storageAt(address: string, slot: bigint): Promise<string>;
|
|
13
|
+
stateHash(commitKey: Contracts.Evm.CommitKey, currentHash: string): Promise<string>;
|
|
12
14
|
mode(): Contracts.Evm.EvmMode;
|
|
13
15
|
}
|
|
14
16
|
//# sourceMappingURL=evm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../source/instances/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAe,MAAM,qBAAqB,CAAC;AAG7D,qBACa,WAAY,YAAW,SAAS,CAAC,GAAG,CAAC,QAAQ;;IAEzD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;IAK/C,UAAU;IAIJ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;IAI1F,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;IAI1F,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IAInE,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7E,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"evm.d.ts","sourceRoot":"","sources":["../../source/instances/evm.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAe,MAAM,qBAAqB,CAAC;AAG7D,qBACa,WAAY,YAAW,SAAS,CAAC,GAAG,CAAC,QAAQ;;IAEzD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAG,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC;IAK/C,UAAU;IAIJ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;IAI1F,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;IAI1F,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IAInE,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7E,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzD,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIzF,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO;CAGpC"}
|
|
@@ -45,8 +45,14 @@ let EvmInstance = class EvmInstance {
|
|
|
45
45
|
const { height, round } = unit;
|
|
46
46
|
await __classPrivateFieldGet(this, _EvmInstance_evm, "f").commit({ height: BigInt(height), round: BigInt(round) });
|
|
47
47
|
}
|
|
48
|
-
async
|
|
49
|
-
return __classPrivateFieldGet(this, _EvmInstance_evm, "f").
|
|
48
|
+
async codeAt(address) {
|
|
49
|
+
return __classPrivateFieldGet(this, _EvmInstance_evm, "f").codeAt(address);
|
|
50
|
+
}
|
|
51
|
+
async storageAt(address, slot) {
|
|
52
|
+
return __classPrivateFieldGet(this, _EvmInstance_evm, "f").storageAt(address, slot);
|
|
53
|
+
}
|
|
54
|
+
async stateHash(commitKey, currentHash) {
|
|
55
|
+
return __classPrivateFieldGet(this, _EvmInstance_evm, "f").stateHash(commitKey, currentHash);
|
|
50
56
|
}
|
|
51
57
|
mode() {
|
|
52
58
|
return Contracts.Evm.EvmMode.Persistent;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../source/instances/evm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAG7B,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QAIN,mCAAW;
|
|
1
|
+
{"version":3,"file":"evm.js","sourceRoot":"","sources":["../../source/instances/evm.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAG7B,IAAM,WAAW,GAAjB,MAAM,WAAW;IAAjB;QAIN,mCAAW;IA2CZ,CAAC;IAxCO,UAAU;QAChB,uBAAA,IAAI,oBAAQ,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,MAAA,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAiD;QAClE,OAAO,uBAAA,IAAI,wBAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,SAA2C;QAC/D,OAAO,uBAAA,IAAI,wBAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAAe;QAC1C,OAAO,uBAAA,IAAI,wBAAK,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAA2C;QACzE,OAAO,uBAAA,IAAI,wBAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,IAAyC;QAC9D,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAC/B,MAAM,uBAAA,IAAI,wBAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAe;QAClC,OAAO,uBAAA,IAAI,wBAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,IAAY;QACnD,OAAO,uBAAA,IAAI,wBAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,SAAkC,EAAE,WAAmB;QAC7E,OAAO,uBAAA,IAAI,wBAAK,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACpD,CAAC;IAEM,IAAI;QACV,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;IACzC,CAAC;CACD,CAAA;;AA7CmB;IADlB,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC;;wCACa;AAK/C;IADN,aAAa,EAAE;;;;6CAGf;AATW,WAAW;IADvB,UAAU,EAAE;GACA,WAAW,CA+CvB"}
|
|
@@ -6,7 +6,9 @@ export declare class MockInstance implements Contracts.Evm.Instance {
|
|
|
6
6
|
getAccountInfo(address: string): Promise<Contracts.Evm.AccountInfo>;
|
|
7
7
|
configure(height: bigint, round: bigint): Promise<void>;
|
|
8
8
|
onCommit(_: Contracts.Processor.ProcessableUnit): Promise<void>;
|
|
9
|
-
stateHash(_: string): Promise<string>;
|
|
9
|
+
stateHash(_: Contracts.Evm.CommitKey, __: string): Promise<string>;
|
|
10
|
+
codeAt(address: string): Promise<string>;
|
|
11
|
+
storageAt(address: string, slot: BigInt): Promise<string>;
|
|
10
12
|
mode(): Contracts.Evm.EvmMode;
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=mock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../source/instances/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBACa,YAAa,YAAW,SAAS,CAAC,GAAG,CAAC,QAAQ;IAC7C,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;IAW1F,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;IAM1F,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7E,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACvD,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/D,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../../source/instances/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBACa,YAAa,YAAW,SAAS,CAAC,GAAG,CAAC,QAAQ;IAC7C,OAAO,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,CAAC,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;IAW1F,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC;IAM1F,iBAAiB,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,CAAC,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC;IAC7E,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC;IAInE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACvD,QAAQ,CAAC,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAC/D,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIlE,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAIxC,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI/D,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO;CAGpC"}
|
|
@@ -28,7 +28,13 @@ let MockInstance = class MockInstance {
|
|
|
28
28
|
}
|
|
29
29
|
async configure(height, round) { }
|
|
30
30
|
async onCommit(_) { }
|
|
31
|
-
async stateHash(_) {
|
|
31
|
+
async stateHash(_, __) {
|
|
32
|
+
return "";
|
|
33
|
+
}
|
|
34
|
+
async codeAt(address) {
|
|
35
|
+
return "";
|
|
36
|
+
}
|
|
37
|
+
async storageAt(address, slot) {
|
|
32
38
|
return "";
|
|
33
39
|
}
|
|
34
40
|
mode() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../source/instances/mock.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGzC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACjB,KAAK,CAAC,OAAO,CAAC,SAA2C;QAC/D,OAAO;YACN,OAAO,EAAE;gBACR,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClB,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,IAAI;aACb;SACD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAiD;QAClE,OAAO;YACN,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAA2C,IAAkB,CAAC;IACtF,KAAK,CAAC,cAAc,CAAC,OAAe;QAC1C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,KAAa,IAAkB,CAAC;IAChE,KAAK,CAAC,QAAQ,CAAC,CAAsC,IAAkB,CAAC;IACxE,KAAK,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../../source/instances/mock.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAGzC,IAAM,YAAY,GAAlB,MAAM,YAAY;IACjB,KAAK,CAAC,OAAO,CAAC,SAA2C;QAC/D,OAAO;YACN,OAAO,EAAE;gBACR,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;gBACtB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClB,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,IAAI;aACb;SACD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAiD;QAClE,OAAO;YACN,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAA2C,IAAkB,CAAC;IACtF,KAAK,CAAC,cAAc,CAAC,OAAe;QAC1C,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,KAAa,IAAkB,CAAC;IAChE,KAAK,CAAC,QAAQ,CAAC,CAAsC,IAAkB,CAAC;IACxE,KAAK,CAAC,SAAS,CAAC,CAA0B,EAAE,EAAU;QAC5D,OAAO,EAAE,CAAC;IACX,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,OAAe;QAClC,OAAO,EAAE,CAAC;IACX,CAAC;IAEM,KAAK,CAAC,SAAS,CAAC,OAAe,EAAE,IAAY;QACnD,OAAO,EAAE,CAAC;IACX,CAAC;IAEM,IAAI;QACV,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,CAAC;CACD,CAAA;AAxCY,YAAY;IADxB,UAAU,EAAE;GACA,YAAY,CAwCxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mainsail/evm-service",
|
|
3
|
-
"version": "0.0.1-evm.
|
|
3
|
+
"version": "0.0.1-evm.2",
|
|
4
4
|
"description": "EVM Service for Mainsail blockchain",
|
|
5
5
|
"license": "GPL-3.0-only",
|
|
6
6
|
"contributors": [],
|
|
@@ -11,29 +11,29 @@
|
|
|
11
11
|
"/distribution"
|
|
12
12
|
],
|
|
13
13
|
"dependencies": {
|
|
14
|
-
"@mainsail/
|
|
15
|
-
"@mainsail/
|
|
16
|
-
"@mainsail/evm": "0.0.1-evm.
|
|
17
|
-
"@mainsail/kernel": "0.0.1-evm.
|
|
14
|
+
"@mainsail/container": "0.0.1-evm.2",
|
|
15
|
+
"@mainsail/contracts": "0.0.1-evm.2",
|
|
16
|
+
"@mainsail/evm": "0.0.1-evm.2",
|
|
17
|
+
"@mainsail/kernel": "0.0.1-evm.2"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@types/tmp": "0.2.6",
|
|
21
21
|
"ethers": "6.11.0",
|
|
22
22
|
"tmp": "0.2.3",
|
|
23
23
|
"uvu": "^0.5.6",
|
|
24
|
-
"@mainsail/crypto-address-keccak256": "0.0.1-evm.
|
|
25
|
-
"@mainsail/crypto-block": "0.0.1-evm.
|
|
26
|
-
"@mainsail/crypto-
|
|
27
|
-
"@mainsail/crypto-
|
|
28
|
-
"@mainsail/crypto-
|
|
29
|
-
"@mainsail/crypto-
|
|
30
|
-
"@mainsail/crypto-validation": "0.0.1-evm.
|
|
31
|
-
"@mainsail/crypto-transaction": "0.0.1-evm.
|
|
32
|
-
"@mainsail/
|
|
33
|
-
"@mainsail/
|
|
34
|
-
"@mainsail/test-framework": "0.0.1-evm.
|
|
35
|
-
"@mainsail/
|
|
36
|
-
"@mainsail/
|
|
24
|
+
"@mainsail/crypto-address-keccak256": "0.0.1-evm.2",
|
|
25
|
+
"@mainsail/crypto-block": "0.0.1-evm.2",
|
|
26
|
+
"@mainsail/crypto-config": "0.0.1-evm.2",
|
|
27
|
+
"@mainsail/crypto-hash-bcrypto": "0.0.1-evm.2",
|
|
28
|
+
"@mainsail/crypto-key-pair-ecdsa": "0.0.1-evm.2",
|
|
29
|
+
"@mainsail/crypto-signature-schnorr": "0.0.1-evm.2",
|
|
30
|
+
"@mainsail/crypto-validation": "0.0.1-evm.2",
|
|
31
|
+
"@mainsail/crypto-transaction": "0.0.1-evm.2",
|
|
32
|
+
"@mainsail/crypto-wif": "0.0.1-evm.2",
|
|
33
|
+
"@mainsail/serializer": "0.0.1-evm.2",
|
|
34
|
+
"@mainsail/test-framework": "0.0.1-evm.2",
|
|
35
|
+
"@mainsail/validation": "0.0.1-evm.2",
|
|
36
|
+
"@mainsail/transactions": "0.0.1-evm.2"
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
39
|
"node": ">=20.x"
|