@maci-protocol/coordinator 0.0.0-ci.cd47f67 → 0.0.0-ci.cd626c3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/README.md +4 -4
  2. package/build/hardhat.config.cjs +2 -3
  3. package/build/hardhat.config.cjs.map +1 -1
  4. package/build/hardhat.config.d.cts +2 -4
  5. package/build/scripts/generateKeypair.js +2 -2
  6. package/build/scripts/generateKeypair.js.map +1 -1
  7. package/build/tests/e2e.deploy.test.js +30 -19
  8. package/build/tests/e2e.deploy.test.js.map +1 -1
  9. package/build/tests/e2e.redis.test.d.ts +2 -0
  10. package/build/tests/e2e.redis.test.d.ts.map +1 -0
  11. package/build/tests/e2e.redis.test.js +119 -0
  12. package/build/tests/e2e.redis.test.js.map +1 -0
  13. package/build/tests/utils.d.ts.map +1 -1
  14. package/build/tests/utils.js +2 -2
  15. package/build/tests/utils.js.map +1 -1
  16. package/build/ts/app.module.d.ts.map +1 -1
  17. package/build/ts/app.module.js +6 -0
  18. package/build/ts/app.module.js.map +1 -1
  19. package/build/ts/common/__tests__/common.test.js +8 -18
  20. package/build/ts/common/__tests__/common.test.js.map +1 -1
  21. package/build/ts/common/accountAbstraction.d.ts +1 -1
  22. package/build/ts/common/accountAbstraction.d.ts.map +1 -1
  23. package/build/ts/common/accountAbstraction.js +4 -5
  24. package/build/ts/common/accountAbstraction.js.map +1 -1
  25. package/build/ts/common/chain.d.ts +2 -2
  26. package/build/ts/common/chain.d.ts.map +1 -1
  27. package/build/ts/common/chain.js +10 -9
  28. package/build/ts/common/chain.js.map +1 -1
  29. package/build/ts/common/errors.d.ts +15 -11
  30. package/build/ts/common/errors.d.ts.map +1 -1
  31. package/build/ts/common/errors.js +15 -11
  32. package/build/ts/common/errors.js.map +1 -1
  33. package/build/ts/deployer/__tests__/deployer.controller.test.js +17 -20
  34. package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
  35. package/build/ts/deployer/__tests__/deployer.service.test.js +161 -79
  36. package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
  37. package/build/ts/deployer/__tests__/utils.d.ts +0 -1
  38. package/build/ts/deployer/__tests__/utils.d.ts.map +1 -1
  39. package/build/ts/deployer/__tests__/utils.js +4 -4
  40. package/build/ts/deployer/__tests__/utils.js.map +1 -1
  41. package/build/ts/deployer/deployer.service.d.ts +17 -7
  42. package/build/ts/deployer/deployer.service.d.ts.map +1 -1
  43. package/build/ts/deployer/deployer.service.js +209 -56
  44. package/build/ts/deployer/deployer.service.js.map +1 -1
  45. package/build/ts/deployer/types.d.ts +18 -11
  46. package/build/ts/deployer/types.d.ts.map +1 -1
  47. package/build/ts/file/file.service.d.ts.map +1 -1
  48. package/build/ts/file/file.service.js +4 -3
  49. package/build/ts/file/file.service.js.map +1 -1
  50. package/build/ts/health/__tests__/health.controller.test.d.ts +2 -0
  51. package/build/ts/health/__tests__/health.controller.test.d.ts.map +1 -0
  52. package/build/ts/health/__tests__/health.controller.test.js +52 -0
  53. package/build/ts/health/__tests__/health.controller.test.js.map +1 -0
  54. package/build/ts/health/__tests__/health.service.test.d.ts +2 -0
  55. package/build/ts/health/__tests__/health.service.test.d.ts.map +1 -0
  56. package/build/ts/health/__tests__/health.service.test.js +101 -0
  57. package/build/ts/health/__tests__/health.service.test.js.map +1 -0
  58. package/build/ts/health/health.controller.d.ts +16 -0
  59. package/build/ts/health/health.controller.d.ts.map +1 -0
  60. package/build/ts/health/health.controller.js +43 -0
  61. package/build/ts/health/health.controller.js.map +1 -0
  62. package/build/ts/health/health.module.d.ts +3 -0
  63. package/build/ts/health/health.module.d.ts.map +1 -0
  64. package/build/ts/health/health.module.js +22 -0
  65. package/build/ts/health/health.module.js.map +1 -0
  66. package/build/ts/health/health.service.d.ts +42 -0
  67. package/build/ts/health/health.service.d.ts.map +1 -0
  68. package/build/ts/health/health.service.js +176 -0
  69. package/build/ts/health/health.service.js.map +1 -0
  70. package/build/ts/health/types.d.ts +87 -0
  71. package/build/ts/health/types.d.ts.map +1 -0
  72. package/build/ts/health/types.js +2 -0
  73. package/build/ts/health/types.js.map +1 -0
  74. package/build/ts/proof/__tests__/proof.service.test.js +23 -54
  75. package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
  76. package/build/ts/proof/proof.service.d.ts.map +1 -1
  77. package/build/ts/proof/proof.service.js.map +1 -1
  78. package/build/ts/redis/__tests__/redis.service.test.d.ts +2 -0
  79. package/build/ts/redis/__tests__/redis.service.test.d.ts.map +1 -0
  80. package/build/ts/redis/__tests__/redis.service.test.js +149 -0
  81. package/build/ts/redis/__tests__/redis.service.test.js.map +1 -0
  82. package/build/ts/redis/redis.module.d.ts +3 -0
  83. package/build/ts/redis/redis.module.d.ts.map +1 -0
  84. package/build/ts/redis/redis.module.js +18 -0
  85. package/build/ts/redis/redis.module.js.map +1 -0
  86. package/build/ts/redis/redis.service.d.ts +52 -0
  87. package/build/ts/redis/redis.service.d.ts.map +1 -0
  88. package/build/ts/redis/redis.service.js +97 -0
  89. package/build/ts/redis/redis.service.js.map +1 -0
  90. package/build/ts/redis/types.d.ts +54 -0
  91. package/build/ts/redis/types.d.ts.map +1 -0
  92. package/build/ts/redis/types.js +2 -0
  93. package/build/ts/redis/types.js.map +1 -0
  94. package/build/ts/redis/utils.d.ts +20 -0
  95. package/build/ts/redis/utils.d.ts.map +1 -0
  96. package/build/ts/redis/utils.js +27 -0
  97. package/build/ts/redis/utils.js.map +1 -0
  98. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts +2 -0
  99. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts.map +1 -0
  100. package/build/ts/scheduler/__tests__/scheduler.controller.test.js +63 -0
  101. package/build/ts/scheduler/__tests__/scheduler.controller.test.js.map +1 -0
  102. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts +2 -0
  103. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts.map +1 -0
  104. package/build/ts/scheduler/__tests__/scheduler.service.test.js +264 -0
  105. package/build/ts/scheduler/__tests__/scheduler.service.test.js.map +1 -0
  106. package/build/ts/scheduler/dto.d.ts +42 -0
  107. package/build/ts/scheduler/dto.d.ts.map +1 -0
  108. package/build/ts/scheduler/dto.js +116 -0
  109. package/build/ts/scheduler/dto.js.map +1 -0
  110. package/build/ts/scheduler/scheduler.controller.d.ts +32 -0
  111. package/build/ts/scheduler/scheduler.controller.d.ts.map +1 -0
  112. package/build/ts/scheduler/scheduler.controller.js +111 -0
  113. package/build/ts/scheduler/scheduler.controller.js.map +1 -0
  114. package/build/ts/scheduler/scheduler.module.d.ts +3 -0
  115. package/build/ts/scheduler/scheduler.module.d.ts.map +1 -0
  116. package/build/ts/scheduler/scheduler.module.js +23 -0
  117. package/build/ts/scheduler/scheduler.module.js.map +1 -0
  118. package/build/ts/scheduler/scheduler.service.d.ts +63 -0
  119. package/build/ts/scheduler/scheduler.service.d.ts.map +1 -0
  120. package/build/ts/scheduler/scheduler.service.js +239 -0
  121. package/build/ts/scheduler/scheduler.service.js.map +1 -0
  122. package/build/ts/scheduler/types.d.ts +61 -0
  123. package/build/ts/scheduler/types.d.ts.map +1 -0
  124. package/build/ts/scheduler/types.js +2 -0
  125. package/build/ts/scheduler/types.js.map +1 -0
  126. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +2 -2
  127. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -1
  128. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js +30 -16
  129. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js.map +1 -1
  130. package/build/ts/sessionKeys/__tests__/utils.d.ts.map +1 -1
  131. package/build/ts/sessionKeys/__tests__/utils.js +4 -5
  132. package/build/ts/sessionKeys/__tests__/utils.js.map +1 -1
  133. package/build/ts/sessionKeys/sessionKeys.service.d.ts.map +1 -1
  134. package/build/ts/sessionKeys/sessionKeys.service.js +1 -2
  135. package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -1
  136. package/build/ts/subgraph/__tests__/subgraph.service.test.js +2 -3
  137. package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
  138. package/build/ts/subgraph/subgraph.service.d.ts +4 -0
  139. package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
  140. package/build/ts/subgraph/subgraph.service.js +16 -5
  141. package/build/ts/subgraph/subgraph.service.js.map +1 -1
  142. package/build/tsconfig.build.tsbuildinfo +1 -1
  143. package/package.json +32 -28
  144. package/build/tests/e2e.aa.test.d.ts +0 -2
  145. package/build/tests/e2e.aa.test.d.ts.map +0 -1
  146. package/build/tests/e2e.aa.test.js +0 -96
  147. 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.cd47f67",
3
+ "version": "0.0.0-ci.cd626c3",
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=e2e.deploy.test.ts --testPathIgnorePatterns=e2e.test.ts --forceExit",
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",
@@ -32,28 +32,30 @@
32
32
  },
33
33
  "dependencies": {
34
34
  "@graphprotocol/graph-cli": "^0.97.1",
35
- "@maci-protocol/contracts": "0.0.0-ci.cd47f67",
36
- "@maci-protocol/crypto": "0.0.0-ci.cd47f67",
37
- "@maci-protocol/domainobjs": "0.0.0-ci.cd47f67",
38
- "@maci-protocol/sdk": "0.0.0-ci.cd47f67",
39
- "@maci-protocol/subgraph": "0.0.0-ci.cd47f67",
40
- "@nestjs/common": "^11.1.3",
41
- "@nestjs/core": "^11.1.3",
42
- "@nestjs/platform-express": "^11.1.3",
43
- "@nestjs/platform-socket.io": "^11.1.3",
35
+ "@maci-protocol/contracts": "0.0.0-ci.cd626c3",
36
+ "@maci-protocol/crypto": "0.0.0-ci.cd626c3",
37
+ "@maci-protocol/domainobjs": "0.0.0-ci.cd626c3",
38
+ "@maci-protocol/sdk": "0.0.0-ci.cd626c3",
39
+ "@maci-protocol/subgraph": "0.0.0-ci.cd626c3",
40
+ "@nestjs/common": "^11.1.5",
41
+ "@nestjs/core": "^11.1.5",
42
+ "@nestjs/platform-express": "^11.1.5",
43
+ "@nestjs/platform-socket.io": "^11.1.5",
44
+ "@nestjs/schedule": "^6.0.0",
44
45
  "@nestjs/swagger": "^11.2.0",
45
46
  "@nestjs/throttler": "^6.4.0",
46
- "@nestjs/websockets": "^11.1.3",
47
- "@nomicfoundation/hardhat-ethers": "^3.0.9",
48
- "@nomicfoundation/hardhat-toolbox": "^6.0.0",
47
+ "@nestjs/websockets": "^11.1.5",
48
+ "@nomicfoundation/hardhat-ethers": "^3.1.0",
49
+ "@nomicfoundation/hardhat-toolbox": "^6.1.0",
50
+ "@redis/client": "^5.6.0",
49
51
  "@zerodev/ecdsa-validator": "5.4.9",
50
- "@zerodev/permissions": "5.5.10",
51
- "@zerodev/sdk": "5.4.39",
52
+ "@zerodev/permissions": "5.5.14",
53
+ "@zerodev/sdk": "5.4.41",
52
54
  "class-transformer": "^0.5.1",
53
55
  "class-validator": "^0.14.2",
54
56
  "date-fns": "^4.1.0",
55
- "dotenv": "^17.0.0",
56
- "ethers": "^6.14.4",
57
+ "dotenv": "^17.2.0",
58
+ "ethers": "^6.15.0",
57
59
  "hardhat": "^2.25.0",
58
60
  "helmet": "^8.1.0",
59
61
  "lowdb": "^1.0.0",
@@ -63,21 +65,21 @@
63
65
  "socket.io": "^4.7.5",
64
66
  "tar": "^7.4.1",
65
67
  "ts-node": "^10.9.1",
66
- "viem": "^2.31.4"
68
+ "viem": "^2.33.2"
67
69
  },
68
70
  "devDependencies": {
69
- "@nestjs/cli": "^11.0.7",
70
- "@nestjs/schematics": "^11.0.5",
71
- "@nestjs/testing": "^11.1.3",
71
+ "@nestjs/cli": "^11.0.10",
72
+ "@nestjs/schematics": "^11.0.7",
73
+ "@nestjs/testing": "^11.1.5",
72
74
  "@types/express": "^5.0.3",
73
75
  "@types/jest": "^30.0.0",
74
76
  "@types/lowdb": "^1.0.15",
75
- "@types/node": "^24.0.7",
77
+ "@types/node": "^24.2.0",
76
78
  "@types/supertest": "^6.0.2",
77
- "fast-check": "^4.1.1",
78
- "jest": "^30.0.3",
79
+ "fast-check": "^4.2.0",
80
+ "jest": "^30.0.4",
79
81
  "socket.io-client": "^4.7.5",
80
- "supertest": "^7.1.1",
82
+ "supertest": "^7.1.4",
81
83
  "ts-jest": "^29.4.0",
82
84
  "typescript": "^5.8.3"
83
85
  },
@@ -112,13 +114,15 @@
112
114
  "**/*.(t|j)s",
113
115
  "!<rootDir>/ts/main.ts",
114
116
  "!<rootDir>/ts/jest/*.js",
117
+ "!<rootDir>/tests/*.ts",
115
118
  "!<rootDir>/hardhat.config.js"
116
119
  ],
117
120
  "coveragePathIgnorePatterns": [
118
- "<rootDir>/ts/sessionKeys/__tests__/utils.ts"
121
+ "<rootDir>/ts/sessionKeys/__tests__/utils.ts",
122
+ "<rootDir>/tests/*.ts"
119
123
  ],
120
124
  "coverageDirectory": "<rootDir>/coverage",
121
125
  "testEnvironment": "node"
122
126
  },
123
- "gitHead": "6a848f269f1a409c8b251ffe53ce2f80ef3dcad5"
127
+ "gitHead": "f5aea4c8b9e8fec75d3f43d0a8bea33ab343e147"
124
128
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=e2e.aa.test.d.ts.map
@@ -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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"}