@maci-protocol/coordinator 0.0.0-ci.db88479 → 0.0.0-ci.de6bbd5
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/README.md +4 -4
- package/build/scripts/generateKeypair.js +2 -2
- package/build/scripts/generateKeypair.js.map +1 -1
- package/build/tests/e2e.deploy.test.js +28 -17
- package/build/tests/e2e.deploy.test.js.map +1 -1
- package/build/tests/e2e.redis.test.d.ts +2 -0
- package/build/tests/e2e.redis.test.d.ts.map +1 -0
- package/build/tests/e2e.redis.test.js +119 -0
- package/build/tests/e2e.redis.test.js.map +1 -0
- package/build/tests/utils.d.ts.map +1 -1
- package/build/tests/utils.js.map +1 -1
- package/build/ts/app.module.d.ts.map +1 -1
- package/build/ts/app.module.js +4 -0
- package/build/ts/app.module.js.map +1 -1
- package/build/ts/common/__tests__/common.test.js +1 -11
- package/build/ts/common/__tests__/common.test.js.map +1 -1
- package/build/ts/common/chain.d.ts.map +1 -1
- package/build/ts/common/chain.js +4 -3
- package/build/ts/common/chain.js.map +1 -1
- package/build/ts/common/errors.d.ts +12 -11
- package/build/ts/common/errors.d.ts.map +1 -1
- package/build/ts/common/errors.js +12 -11
- package/build/ts/common/errors.js.map +1 -1
- package/build/ts/deployer/__tests__/deployer.controller.test.js +7 -7
- package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
- package/build/ts/deployer/__tests__/deployer.service.test.js +71 -11
- package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
- package/build/ts/deployer/__tests__/utils.d.ts +0 -1
- package/build/ts/deployer/__tests__/utils.d.ts.map +1 -1
- package/build/ts/deployer/__tests__/utils.js +4 -4
- package/build/ts/deployer/__tests__/utils.js.map +1 -1
- package/build/ts/deployer/deployer.service.d.ts +17 -7
- package/build/ts/deployer/deployer.service.d.ts.map +1 -1
- package/build/ts/deployer/deployer.service.js +207 -54
- package/build/ts/deployer/deployer.service.js.map +1 -1
- package/build/ts/deployer/types.d.ts +18 -11
- package/build/ts/deployer/types.d.ts.map +1 -1
- package/build/ts/file/file.service.js +2 -2
- package/build/ts/file/file.service.js.map +1 -1
- package/build/ts/health/__tests__/health.controller.test.d.ts +2 -0
- package/build/ts/health/__tests__/health.controller.test.d.ts.map +1 -0
- package/build/ts/health/__tests__/health.controller.test.js +28 -0
- package/build/ts/health/__tests__/health.controller.test.js.map +1 -0
- package/build/ts/health/__tests__/health.service.test.d.ts +2 -0
- package/build/ts/health/__tests__/health.service.test.d.ts.map +1 -0
- package/build/ts/health/__tests__/health.service.test.js +88 -0
- package/build/ts/health/__tests__/health.service.test.js.map +1 -0
- package/build/ts/health/health.controller.d.ts +16 -0
- package/build/ts/health/health.controller.d.ts.map +1 -0
- package/build/ts/health/health.controller.js +43 -0
- package/build/ts/health/health.controller.js.map +1 -0
- package/build/ts/health/health.module.d.ts +3 -0
- package/build/ts/health/health.module.d.ts.map +1 -0
- package/build/ts/health/health.module.js +22 -0
- package/build/ts/health/health.module.js.map +1 -0
- package/build/ts/health/health.service.d.ts +42 -0
- package/build/ts/health/health.service.d.ts.map +1 -0
- package/build/ts/health/health.service.js +182 -0
- package/build/ts/health/health.service.js.map +1 -0
- package/build/ts/health/types.d.ts +83 -0
- package/build/ts/health/types.d.ts.map +1 -0
- package/build/ts/health/types.js +2 -0
- package/build/ts/health/types.js.map +1 -0
- package/build/ts/proof/__tests__/proof.service.test.js +28 -54
- package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
- package/build/ts/redis/__tests__/redis.service.test.d.ts +2 -0
- package/build/ts/redis/__tests__/redis.service.test.d.ts.map +1 -0
- package/build/ts/redis/__tests__/redis.service.test.js +149 -0
- package/build/ts/redis/__tests__/redis.service.test.js.map +1 -0
- package/build/ts/redis/redis.module.d.ts +3 -0
- package/build/ts/redis/redis.module.d.ts.map +1 -0
- package/build/ts/redis/redis.module.js +18 -0
- package/build/ts/redis/redis.module.js.map +1 -0
- package/build/ts/redis/redis.service.d.ts +52 -0
- package/build/ts/redis/redis.service.d.ts.map +1 -0
- package/build/ts/redis/redis.service.js +97 -0
- package/build/ts/redis/redis.service.js.map +1 -0
- package/build/ts/redis/types.d.ts +54 -0
- package/build/ts/redis/types.d.ts.map +1 -0
- package/build/ts/redis/types.js +2 -0
- package/build/ts/redis/types.js.map +1 -0
- package/build/ts/redis/utils.d.ts +20 -0
- package/build/ts/redis/utils.d.ts.map +1 -0
- package/build/ts/redis/utils.js +27 -0
- package/build/ts/redis/utils.js.map +1 -0
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +2 -2
- package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -1
- package/build/ts/subgraph/__tests__/subgraph.service.test.js +2 -3
- package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
- package/build/ts/subgraph/subgraph.service.d.ts +4 -0
- package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
- package/build/ts/subgraph/subgraph.service.js +16 -5
- package/build/ts/subgraph/subgraph.service.js.map +1 -1
- package/build/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +24 -23
- package/build/tests/e2e.aa.test.d.ts +0 -2
- package/build/tests/e2e.aa.test.d.ts.map +0 -1
- package/build/tests/e2e.aa.test.js +0 -96
- package/build/tests/e2e.aa.test.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@maci-protocol/coordinator",
|
|
3
|
-
"version": "0.0.0-ci.
|
|
3
|
+
"version": "0.0.0-ci.de6bbd5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Coordinator service for MACI",
|
|
6
6
|
"main": "build/ts/main.js",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"run:node": "node --import 'data:text/javascript,import { register } from \"node:module\"; import { pathToFileURL } from \"node:url\"; register(\"ts-node/esm\", pathToFileURL(\"./\"));'",
|
|
23
23
|
"start": "pnpm run run:node ./ts/main.ts",
|
|
24
24
|
"start:prod": "pnpm run run:node build/ts/main.js",
|
|
25
|
-
"test": "jest --testPathIgnorePatterns=
|
|
25
|
+
"test": "jest --testPathIgnorePatterns=tests/ --forceExit",
|
|
26
26
|
"test:coverage": "jest --coverage --forceExit",
|
|
27
27
|
"test:e2e": "jest ./tests/*.test.ts --forceExit --runInBand",
|
|
28
28
|
"types": "tsc -p tsconfig.json --noEmit",
|
|
@@ -31,30 +31,31 @@
|
|
|
31
31
|
"get-auth-header": "pnpm run run:node ./scripts/getAuthHeader.ts"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@graphprotocol/graph-cli": "^0.97.
|
|
35
|
-
"@maci-protocol/contracts": "0.0.0-ci.
|
|
36
|
-
"@maci-protocol/crypto": "0.0.0-ci.
|
|
37
|
-
"@maci-protocol/domainobjs": "0.0.0-ci.
|
|
38
|
-
"@maci-protocol/sdk": "0.0.0-ci.
|
|
39
|
-
"@maci-protocol/subgraph": "0.0.0-ci.
|
|
40
|
-
"@nestjs/common": "^11.1.
|
|
34
|
+
"@graphprotocol/graph-cli": "^0.97.1",
|
|
35
|
+
"@maci-protocol/contracts": "0.0.0-ci.de6bbd5",
|
|
36
|
+
"@maci-protocol/crypto": "0.0.0-ci.de6bbd5",
|
|
37
|
+
"@maci-protocol/domainobjs": "0.0.0-ci.de6bbd5",
|
|
38
|
+
"@maci-protocol/sdk": "0.0.0-ci.de6bbd5",
|
|
39
|
+
"@maci-protocol/subgraph": "0.0.0-ci.de6bbd5",
|
|
40
|
+
"@nestjs/common": "^11.1.5",
|
|
41
41
|
"@nestjs/core": "^11.1.3",
|
|
42
|
-
"@nestjs/platform-express": "^11.1.
|
|
42
|
+
"@nestjs/platform-express": "^11.1.3",
|
|
43
43
|
"@nestjs/platform-socket.io": "^11.1.3",
|
|
44
44
|
"@nestjs/swagger": "^11.2.0",
|
|
45
45
|
"@nestjs/throttler": "^6.4.0",
|
|
46
46
|
"@nestjs/websockets": "^11.1.3",
|
|
47
47
|
"@nomicfoundation/hardhat-ethers": "^3.0.9",
|
|
48
|
-
"@nomicfoundation/hardhat-toolbox": "^
|
|
48
|
+
"@nomicfoundation/hardhat-toolbox": "^6.0.0",
|
|
49
|
+
"@redis/client": "^5.6.0",
|
|
49
50
|
"@zerodev/ecdsa-validator": "5.4.9",
|
|
50
|
-
"@zerodev/permissions": "5.5.
|
|
51
|
-
"@zerodev/sdk": "5.4.
|
|
51
|
+
"@zerodev/permissions": "5.5.12",
|
|
52
|
+
"@zerodev/sdk": "5.4.41",
|
|
52
53
|
"class-transformer": "^0.5.1",
|
|
53
54
|
"class-validator": "^0.14.2",
|
|
54
55
|
"date-fns": "^4.1.0",
|
|
55
|
-
"dotenv": "^
|
|
56
|
-
"ethers": "^6.
|
|
57
|
-
"hardhat": "^2.
|
|
56
|
+
"dotenv": "^17.2.0",
|
|
57
|
+
"ethers": "^6.15.0",
|
|
58
|
+
"hardhat": "^2.25.0",
|
|
58
59
|
"helmet": "^8.1.0",
|
|
59
60
|
"lowdb": "^1.0.0",
|
|
60
61
|
"mustache": "^4.2.0",
|
|
@@ -63,21 +64,21 @@
|
|
|
63
64
|
"socket.io": "^4.7.5",
|
|
64
65
|
"tar": "^7.4.1",
|
|
65
66
|
"ts-node": "^10.9.1",
|
|
66
|
-
"viem": "^2.31.
|
|
67
|
+
"viem": "^2.31.7"
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
70
|
"@nestjs/cli": "^11.0.7",
|
|
70
71
|
"@nestjs/schematics": "^11.0.5",
|
|
71
72
|
"@nestjs/testing": "^11.1.3",
|
|
72
73
|
"@types/express": "^5.0.3",
|
|
73
|
-
"@types/jest": "^
|
|
74
|
+
"@types/jest": "^30.0.0",
|
|
74
75
|
"@types/lowdb": "^1.0.15",
|
|
75
|
-
"@types/node": "^
|
|
76
|
+
"@types/node": "^24.0.13",
|
|
76
77
|
"@types/supertest": "^6.0.2",
|
|
77
|
-
"fast-check": "^4.
|
|
78
|
-
"jest": "^30.0.
|
|
78
|
+
"fast-check": "^4.2.0",
|
|
79
|
+
"jest": "^30.0.4",
|
|
79
80
|
"socket.io-client": "^4.7.5",
|
|
80
|
-
"supertest": "^7.1.
|
|
81
|
+
"supertest": "^7.1.3",
|
|
81
82
|
"ts-jest": "^29.4.0",
|
|
82
83
|
"typescript": "^5.8.3"
|
|
83
84
|
},
|
|
@@ -120,5 +121,5 @@
|
|
|
120
121
|
"coverageDirectory": "<rootDir>/coverage",
|
|
121
122
|
"testEnvironment": "node"
|
|
122
123
|
},
|
|
123
|
-
"gitHead": "
|
|
124
|
+
"gitHead": "b1ed6c9c3a7dc3ca3081242d67438b96779c285a"
|
|
124
125
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"e2e.aa.test.d.ts","sourceRoot":"","sources":["../../tests/e2e.aa.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import { sleep } from "@maci-protocol/sdk";
|
|
2
|
-
import { zeroAddress } from "viem";
|
|
3
|
-
import { ErrorCodes, ESupportedNetworks } from "../ts/common";
|
|
4
|
-
import { testMaciDeploymentConfig, testPollDeploymentConfig } from "../ts/deployer/__tests__/utils";
|
|
5
|
-
import { DeployerService } from "../ts/deployer/deployer.service";
|
|
6
|
-
import { FileService } from "../ts/file/file.service";
|
|
7
|
-
import { ProofGeneratorService } from "../ts/proof/proof.service";
|
|
8
|
-
import { ENTRY_POINT, generateApproval, KERNEL_VERSION } from "../ts/sessionKeys/__tests__/utils";
|
|
9
|
-
import { SessionKeysService } from "../ts/sessionKeys/sessionKeys.service";
|
|
10
|
-
describe("E2E Account Abstraction Tests", () => {
|
|
11
|
-
const fileService = new FileService();
|
|
12
|
-
const sessionKeyService = new SessionKeysService(fileService);
|
|
13
|
-
const proofService = new ProofGeneratorService(fileService, sessionKeyService);
|
|
14
|
-
const deployerService = new DeployerService(sessionKeyService, fileService);
|
|
15
|
-
// using an already deployed maci contract
|
|
16
|
-
let maciContract = "";
|
|
17
|
-
let pollId;
|
|
18
|
-
let approval;
|
|
19
|
-
let sessionKeyAddress;
|
|
20
|
-
beforeAll(async () => {
|
|
21
|
-
sessionKeyAddress = (await sessionKeyService.generateSessionKey()).sessionKeyAddress;
|
|
22
|
-
approval = await generateApproval(sessionKeyAddress);
|
|
23
|
-
});
|
|
24
|
-
describe("deploy", () => {
|
|
25
|
-
describe("deployMaci", () => {
|
|
26
|
-
it("should deploy all maci related contracts", async () => {
|
|
27
|
-
const { address: maciAddress } = await deployerService.deployMaci({
|
|
28
|
-
chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
|
|
29
|
-
config: testMaciDeploymentConfig,
|
|
30
|
-
});
|
|
31
|
-
maciContract = maciAddress;
|
|
32
|
-
expect(maciAddress).not.toBe(zeroAddress);
|
|
33
|
-
});
|
|
34
|
-
});
|
|
35
|
-
describe("deployPoll", () => {
|
|
36
|
-
it("should deploy a poll", async () => {
|
|
37
|
-
const { pollId: poll } = await deployerService.deployPoll({
|
|
38
|
-
chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
|
|
39
|
-
config: {
|
|
40
|
-
...testPollDeploymentConfig,
|
|
41
|
-
startDate: Math.floor(Date.now() / 1000) + 50,
|
|
42
|
-
endDate: Math.floor(Date.now() / 1000) + 85,
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
expect(poll).toBeDefined();
|
|
46
|
-
pollId = Number.parseInt(poll, 10);
|
|
47
|
-
});
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
describe("merge", () => {
|
|
51
|
-
test("should return true when there are no errors", async () => {
|
|
52
|
-
// wait until we can complete a poll
|
|
53
|
-
await sleep(90 * 1000); // 50 start + 35 end + 5 seconds of grace time
|
|
54
|
-
const merged = await proofService.merge({
|
|
55
|
-
maciContractAddress: maciContract,
|
|
56
|
-
pollId,
|
|
57
|
-
chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
|
|
58
|
-
});
|
|
59
|
-
expect(merged).toBe(true);
|
|
60
|
-
});
|
|
61
|
-
test("should throw when given an invalid pollId", async () => {
|
|
62
|
-
const invalidPollId = 50000;
|
|
63
|
-
await expect(proofService.merge({
|
|
64
|
-
maciContractAddress: maciContract,
|
|
65
|
-
pollId: invalidPollId,
|
|
66
|
-
chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
|
|
67
|
-
})).rejects.toThrow(`MACI contract doesn't have any deployed poll ${invalidPollId}`);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
describe("sessionKeys", () => {
|
|
71
|
-
it("should create a client from a session key and an approval", async () => {
|
|
72
|
-
const client = await sessionKeyService.generateClientFromSessionKey(sessionKeyAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA);
|
|
73
|
-
expect(client).toBeDefined();
|
|
74
|
-
expect(client.transport.key).toBe("http");
|
|
75
|
-
expect(client.key).toBe("Account");
|
|
76
|
-
expect(client.account.address).not.toBe(zeroAddress);
|
|
77
|
-
expect(client.account.kernelVersion).toBe(KERNEL_VERSION);
|
|
78
|
-
expect(client.account.entryPoint.version).toBe(ENTRY_POINT.version);
|
|
79
|
-
// this is an account with limited permissions so no sudo validator
|
|
80
|
-
expect(client.account.kernelPluginManager.address).toBe(zeroAddress);
|
|
81
|
-
expect(client.account.kernelPluginManager.sudoValidator).toBe(undefined);
|
|
82
|
-
// send a transaction
|
|
83
|
-
const tx = await client.sendTransaction({
|
|
84
|
-
to: zeroAddress,
|
|
85
|
-
value: 0n,
|
|
86
|
-
data: "0x",
|
|
87
|
-
});
|
|
88
|
-
expect(tx.length).toBeGreaterThan(0);
|
|
89
|
-
});
|
|
90
|
-
it("should not allow to create a client after the session key has been deactivated", async () => {
|
|
91
|
-
sessionKeyService.deactivateSessionKey(sessionKeyAddress);
|
|
92
|
-
await expect(sessionKeyService.generateClientFromSessionKey(sessionKeyAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA)).rejects.toThrow(ErrorCodes.SESSION_KEY_NOT_FOUND.toString());
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
});
|
|
96
|
-
//# sourceMappingURL=e2e.aa.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"e2e.aa.test.js","sourceRoot":"","sources":["../../tests/e2e.aa.test.ts"],"names":[],"mappings":"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"}
|