@maci-protocol/coordinator 0.0.0-ci.752ce71 → 0.0.0-ci.75ef321

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 (158) hide show
  1. package/README.md +18 -0
  2. package/build/scripts/generateKeypair.js +2 -2
  3. package/build/scripts/generateKeypair.js.map +1 -1
  4. package/build/tests/e2e.deploy.test.js +54 -36
  5. package/build/tests/e2e.deploy.test.js.map +1 -1
  6. package/build/tests/e2e.redis.test.d.ts +2 -0
  7. package/build/tests/e2e.redis.test.d.ts.map +1 -0
  8. package/build/tests/e2e.redis.test.js +119 -0
  9. package/build/tests/e2e.redis.test.js.map +1 -0
  10. package/build/tests/utils.d.ts.map +1 -1
  11. package/build/tests/utils.js.map +1 -1
  12. package/build/ts/app.module.d.ts.map +1 -1
  13. package/build/ts/app.module.js +6 -0
  14. package/build/ts/app.module.js.map +1 -1
  15. package/build/ts/common/__tests__/common.test.js +6 -16
  16. package/build/ts/common/__tests__/common.test.js.map +1 -1
  17. package/build/ts/common/accountAbstraction.js +2 -2
  18. package/build/ts/common/accountAbstraction.js.map +1 -1
  19. package/build/ts/common/chain.d.ts +3 -3
  20. package/build/ts/common/chain.d.ts.map +1 -1
  21. package/build/ts/common/chain.js +13 -15
  22. package/build/ts/common/chain.js.map +1 -1
  23. package/build/ts/common/coordinatorKeypair.d.ts +7 -0
  24. package/build/ts/common/coordinatorKeypair.d.ts.map +1 -0
  25. package/build/ts/common/coordinatorKeypair.js +14 -0
  26. package/build/ts/common/coordinatorKeypair.js.map +1 -0
  27. package/build/ts/common/errors.d.ts +16 -12
  28. package/build/ts/common/errors.d.ts.map +1 -1
  29. package/build/ts/common/errors.js +16 -12
  30. package/build/ts/common/errors.js.map +1 -1
  31. package/build/ts/deployer/__tests__/deployer.controller.test.js +7 -7
  32. package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
  33. package/build/ts/deployer/__tests__/deployer.service.test.js +71 -11
  34. package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
  35. package/build/ts/deployer/__tests__/utils.d.ts +2 -6
  36. package/build/ts/deployer/__tests__/utils.d.ts.map +1 -1
  37. package/build/ts/deployer/__tests__/utils.js +6 -10
  38. package/build/ts/deployer/__tests__/utils.js.map +1 -1
  39. package/build/ts/deployer/deployer.service.d.ts +17 -7
  40. package/build/ts/deployer/deployer.service.d.ts.map +1 -1
  41. package/build/ts/deployer/deployer.service.js +213 -56
  42. package/build/ts/deployer/deployer.service.js.map +1 -1
  43. package/build/ts/deployer/types.d.ts +18 -14
  44. package/build/ts/deployer/types.d.ts.map +1 -1
  45. package/build/ts/file/__tests__/file.service.test.js +9 -9
  46. package/build/ts/file/__tests__/file.service.test.js.map +1 -1
  47. package/build/ts/file/file.service.d.ts +2 -2
  48. package/build/ts/file/file.service.d.ts.map +1 -1
  49. package/build/ts/file/file.service.js +9 -8
  50. package/build/ts/file/file.service.js.map +1 -1
  51. package/build/ts/file/types.d.ts +2 -2
  52. package/build/ts/file/types.d.ts.map +1 -1
  53. package/build/ts/health/__tests__/health.controller.test.d.ts +2 -0
  54. package/build/ts/health/__tests__/health.controller.test.d.ts.map +1 -0
  55. package/build/ts/health/__tests__/health.controller.test.js +28 -0
  56. package/build/ts/health/__tests__/health.controller.test.js.map +1 -0
  57. package/build/ts/health/__tests__/health.service.test.d.ts +2 -0
  58. package/build/ts/health/__tests__/health.service.test.d.ts.map +1 -0
  59. package/build/ts/health/__tests__/health.service.test.js +88 -0
  60. package/build/ts/health/__tests__/health.service.test.js.map +1 -0
  61. package/build/ts/health/health.controller.d.ts +16 -0
  62. package/build/ts/health/health.controller.d.ts.map +1 -0
  63. package/build/ts/health/health.controller.js +43 -0
  64. package/build/ts/health/health.controller.js.map +1 -0
  65. package/build/ts/health/health.module.d.ts +3 -0
  66. package/build/ts/health/health.module.d.ts.map +1 -0
  67. package/build/ts/health/health.module.js +22 -0
  68. package/build/ts/health/health.module.js.map +1 -0
  69. package/build/ts/health/health.service.d.ts +42 -0
  70. package/build/ts/health/health.service.d.ts.map +1 -0
  71. package/build/ts/health/health.service.js +182 -0
  72. package/build/ts/health/health.service.js.map +1 -0
  73. package/build/ts/health/types.d.ts +83 -0
  74. package/build/ts/health/types.d.ts.map +1 -0
  75. package/build/ts/health/types.js +2 -0
  76. package/build/ts/health/types.js.map +1 -0
  77. package/build/ts/proof/__tests__/proof.controller.test.js +0 -1
  78. package/build/ts/proof/__tests__/proof.controller.test.js.map +1 -1
  79. package/build/ts/proof/__tests__/proof.gateway.test.js +0 -1
  80. package/build/ts/proof/__tests__/proof.gateway.test.js.map +1 -1
  81. package/build/ts/proof/__tests__/proof.service.test.js +31 -72
  82. package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
  83. package/build/ts/proof/dto.d.ts +0 -4
  84. package/build/ts/proof/dto.d.ts.map +1 -1
  85. package/build/ts/proof/dto.js +1 -16
  86. package/build/ts/proof/dto.js.map +1 -1
  87. package/build/ts/proof/proof.controller.d.ts.map +1 -1
  88. package/build/ts/proof/proof.controller.js +1 -4
  89. package/build/ts/proof/proof.controller.js.map +1 -1
  90. package/build/ts/proof/proof.service.d.ts +2 -4
  91. package/build/ts/proof/proof.service.d.ts.map +1 -1
  92. package/build/ts/proof/proof.service.js +22 -24
  93. package/build/ts/proof/proof.service.js.map +1 -1
  94. package/build/ts/proof/types.d.ts +1 -4
  95. package/build/ts/proof/types.d.ts.map +1 -1
  96. package/build/ts/redis/__tests__/redis.service.test.d.ts +2 -0
  97. package/build/ts/redis/__tests__/redis.service.test.d.ts.map +1 -0
  98. package/build/ts/redis/__tests__/redis.service.test.js +149 -0
  99. package/build/ts/redis/__tests__/redis.service.test.js.map +1 -0
  100. package/build/ts/redis/redis.module.d.ts +3 -0
  101. package/build/ts/redis/redis.module.d.ts.map +1 -0
  102. package/build/ts/redis/redis.module.js +18 -0
  103. package/build/ts/redis/redis.module.js.map +1 -0
  104. package/build/ts/redis/redis.service.d.ts +52 -0
  105. package/build/ts/redis/redis.service.d.ts.map +1 -0
  106. package/build/ts/redis/redis.service.js +97 -0
  107. package/build/ts/redis/redis.service.js.map +1 -0
  108. package/build/ts/redis/types.d.ts +54 -0
  109. package/build/ts/redis/types.d.ts.map +1 -0
  110. package/build/ts/redis/types.js +2 -0
  111. package/build/ts/redis/types.js.map +1 -0
  112. package/build/ts/redis/utils.d.ts +20 -0
  113. package/build/ts/redis/utils.d.ts.map +1 -0
  114. package/build/ts/redis/utils.js +27 -0
  115. package/build/ts/redis/utils.js.map +1 -0
  116. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts +2 -0
  117. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts.map +1 -0
  118. package/build/ts/scheduler/__tests__/scheduler.controller.test.js +63 -0
  119. package/build/ts/scheduler/__tests__/scheduler.controller.test.js.map +1 -0
  120. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts +2 -0
  121. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts.map +1 -0
  122. package/build/ts/scheduler/__tests__/scheduler.service.test.js +264 -0
  123. package/build/ts/scheduler/__tests__/scheduler.service.test.js.map +1 -0
  124. package/build/ts/scheduler/dto.d.ts +42 -0
  125. package/build/ts/scheduler/dto.d.ts.map +1 -0
  126. package/build/ts/scheduler/dto.js +116 -0
  127. package/build/ts/scheduler/dto.js.map +1 -0
  128. package/build/ts/scheduler/scheduler.controller.d.ts +32 -0
  129. package/build/ts/scheduler/scheduler.controller.d.ts.map +1 -0
  130. package/build/ts/scheduler/scheduler.controller.js +111 -0
  131. package/build/ts/scheduler/scheduler.controller.js.map +1 -0
  132. package/build/ts/scheduler/scheduler.module.d.ts +3 -0
  133. package/build/ts/scheduler/scheduler.module.d.ts.map +1 -0
  134. package/build/ts/scheduler/scheduler.module.js +23 -0
  135. package/build/ts/scheduler/scheduler.module.js.map +1 -0
  136. package/build/ts/scheduler/scheduler.service.d.ts +63 -0
  137. package/build/ts/scheduler/scheduler.service.d.ts.map +1 -0
  138. package/build/ts/scheduler/scheduler.service.js +239 -0
  139. package/build/ts/scheduler/scheduler.service.js.map +1 -0
  140. package/build/ts/scheduler/types.d.ts +61 -0
  141. package/build/ts/scheduler/types.d.ts.map +1 -0
  142. package/build/ts/scheduler/types.js +2 -0
  143. package/build/ts/scheduler/types.js.map +1 -0
  144. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +2 -2
  145. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -1
  146. package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -1
  147. package/build/ts/subgraph/__tests__/subgraph.service.test.js +2 -3
  148. package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
  149. package/build/ts/subgraph/subgraph.service.d.ts +4 -0
  150. package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
  151. package/build/ts/subgraph/subgraph.service.js +16 -5
  152. package/build/ts/subgraph/subgraph.service.js.map +1 -1
  153. package/build/tsconfig.build.tsbuildinfo +1 -1
  154. package/package.json +33 -31
  155. package/build/tests/e2e.aa.test.d.ts +0 -2
  156. package/build/tests/e2e.aa.test.d.ts.map +0 -1
  157. package/build/tests/e2e.aa.test.js +0 -98
  158. 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.752ce71",
3
+ "version": "0.0.0-ci.75ef321",
4
4
  "private": false,
5
5
  "description": "Coordinator service for MACI",
6
6
  "main": "build/ts/main.js",
@@ -22,39 +22,41 @@
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
- "test:e2e": "jest ./tests/*.test.ts --forceExit",
27
+ "test:e2e": "jest ./tests/*.test.ts --forceExit --runInBand",
28
28
  "types": "tsc -p tsconfig.json --noEmit",
29
29
  "generate-maci-keypair": "pnpm run run:node ./scripts/generateMaciKeypair.ts",
30
30
  "generate-keypair": "pnpm run run:node ./scripts/generateKeypair.ts",
31
31
  "get-auth-header": "pnpm run run:node ./scripts/getAuthHeader.ts"
32
32
  },
33
33
  "dependencies": {
34
- "@graphprotocol/graph-cli": "^0.97.0",
35
- "@maci-protocol/contracts": "0.0.0-ci.752ce71",
36
- "@maci-protocol/crypto": "0.0.0-ci.752ce71",
37
- "@maci-protocol/domainobjs": "0.0.0-ci.752ce71",
38
- "@maci-protocol/sdk": "0.0.0-ci.752ce71",
39
- "@maci-protocol/subgraph": "0.0.0-ci.752ce71",
40
- "@nestjs/common": "^11.1.0",
41
- "@nestjs/core": "^11.1.0",
42
- "@nestjs/platform-express": "^11.1.0",
43
- "@nestjs/platform-socket.io": "^11.1.0",
34
+ "@graphprotocol/graph-cli": "^0.97.1",
35
+ "@maci-protocol/contracts": "0.0.0-ci.75ef321",
36
+ "@maci-protocol/crypto": "0.0.0-ci.75ef321",
37
+ "@maci-protocol/domainobjs": "0.0.0-ci.75ef321",
38
+ "@maci-protocol/sdk": "0.0.0-ci.75ef321",
39
+ "@maci-protocol/subgraph": "0.0.0-ci.75ef321",
40
+ "@nestjs/common": "^11.1.5",
41
+ "@nestjs/core": "^11.1.3",
42
+ "@nestjs/platform-express": "^11.1.3",
43
+ "@nestjs/platform-socket.io": "^11.1.3",
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.0",
47
- "@nomicfoundation/hardhat-ethers": "^3.0.8",
48
- "@nomicfoundation/hardhat-toolbox": "^5.0.0",
47
+ "@nestjs/websockets": "^11.1.3",
48
+ "@nomicfoundation/hardhat-ethers": "^3.0.9",
49
+ "@nomicfoundation/hardhat-toolbox": "^6.0.0",
50
+ "@redis/client": "^5.6.0",
49
51
  "@zerodev/ecdsa-validator": "5.4.9",
50
- "@zerodev/permissions": "5.5.5",
51
- "@zerodev/sdk": "5.4.34",
52
+ "@zerodev/permissions": "5.5.12",
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": "^16.5.0",
56
- "ethers": "^6.14.0",
57
- "hardhat": "^2.24.0",
57
+ "dotenv": "^17.2.0",
58
+ "ethers": "^6.15.0",
59
+ "hardhat": "^2.25.0",
58
60
  "helmet": "^8.1.0",
59
61
  "lowdb": "^1.0.0",
60
62
  "mustache": "^4.2.0",
@@ -63,22 +65,22 @@
63
65
  "socket.io": "^4.7.5",
64
66
  "tar": "^7.4.1",
65
67
  "ts-node": "^10.9.1",
66
- "viem": "^2.29.2"
68
+ "viem": "^2.31.7"
67
69
  },
68
70
  "devDependencies": {
69
71
  "@nestjs/cli": "^11.0.7",
70
72
  "@nestjs/schematics": "^11.0.5",
71
- "@nestjs/testing": "^11.1.0",
72
- "@types/express": "^5.0.1",
73
- "@types/jest": "^29.5.2",
73
+ "@nestjs/testing": "^11.1.3",
74
+ "@types/express": "^5.0.3",
75
+ "@types/jest": "^30.0.0",
74
76
  "@types/lowdb": "^1.0.15",
75
- "@types/node": "^22.15.17",
77
+ "@types/node": "^24.0.13",
76
78
  "@types/supertest": "^6.0.2",
77
- "fast-check": "^4.1.1",
78
- "jest": "^29.5.0",
79
+ "fast-check": "^4.2.0",
80
+ "jest": "^30.0.4",
79
81
  "socket.io-client": "^4.7.5",
80
- "supertest": "^7.1.1",
81
- "ts-jest": "^29.3.2",
82
+ "supertest": "^7.1.3",
83
+ "ts-jest": "^29.4.0",
82
84
  "typescript": "^5.8.3"
83
85
  },
84
86
  "jest": {
@@ -120,5 +122,5 @@
120
122
  "coverageDirectory": "<rootDir>/coverage",
121
123
  "testEnvironment": "node"
122
124
  },
123
- "gitHead": "8d7c521fdeec695705232ec083e6cd70d34c7e84"
125
+ "gitHead": "bf5073ee655484a0df3ea49675976a0f2788faeb"
124
126
  }
@@ -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,98 +0,0 @@
1
- import { sleep } from "@maci-protocol/sdk";
2
- import { zeroAddress } from "viem";
3
- import { ErrorCodes, ESupportedNetworks } from "../ts/common";
4
- import { CryptoService } from "../ts/crypto/crypto.service";
5
- import { testMaciDeploymentConfig, testPollDeploymentConfig } from "../ts/deployer/__tests__/utils";
6
- import { DeployerService } from "../ts/deployer/deployer.service";
7
- import { FileService } from "../ts/file/file.service";
8
- import { ProofGeneratorService } from "../ts/proof/proof.service";
9
- import { ENTRY_POINT, generateApproval, KERNEL_VERSION } from "../ts/sessionKeys/__tests__/utils";
10
- import { SessionKeysService } from "../ts/sessionKeys/sessionKeys.service";
11
- describe("E2E Account Abstraction Tests", () => {
12
- const fileService = new FileService();
13
- const sessionKeyService = new SessionKeysService(fileService);
14
- const cryptoService = new CryptoService();
15
- const proofService = new ProofGeneratorService(cryptoService, fileService, sessionKeyService);
16
- const deployerService = new DeployerService(sessionKeyService, fileService);
17
- // using an already deployed maci contract
18
- let maciContract = "";
19
- let pollId;
20
- let approval;
21
- let sessionKeyAddress;
22
- beforeAll(async () => {
23
- sessionKeyAddress = (await sessionKeyService.generateSessionKey()).sessionKeyAddress;
24
- approval = await generateApproval(sessionKeyAddress);
25
- });
26
- describe("deploy", () => {
27
- describe("deployMaci", () => {
28
- it("should deploy all maci related contracts", async () => {
29
- const { address: maciAddress } = await deployerService.deployMaci({
30
- chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
31
- config: testMaciDeploymentConfig,
32
- });
33
- maciContract = maciAddress;
34
- expect(maciAddress).not.toBe(zeroAddress);
35
- });
36
- });
37
- describe("deployPoll", () => {
38
- it("should deploy a poll", async () => {
39
- const { pollId: poll } = await deployerService.deployPoll({
40
- chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
41
- config: {
42
- ...testPollDeploymentConfig,
43
- startDate: Math.floor(Date.now() / 1000) + 50,
44
- endDate: Math.floor(Date.now() / 1000) + 85,
45
- },
46
- });
47
- expect(poll).toBeDefined();
48
- pollId = Number.parseInt(poll, 10);
49
- });
50
- });
51
- });
52
- describe("merge", () => {
53
- test("should return true when there are no errors", async () => {
54
- // wait until we can complete a poll
55
- await sleep(40000);
56
- const merged = await proofService.merge({
57
- maciContractAddress: maciContract,
58
- pollId,
59
- chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
60
- });
61
- expect(merged).toBe(true);
62
- });
63
- test("should throw when given an invalid pollId", async () => {
64
- const invalidPollId = 50000;
65
- await expect(proofService.merge({
66
- maciContractAddress: maciContract,
67
- pollId: invalidPollId,
68
- chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
69
- })).rejects.toThrow(`MACI contract doesn't have any deployed poll ${invalidPollId}`);
70
- });
71
- });
72
- describe("sessionKeys", () => {
73
- it("should create a client from a session key and an approval", async () => {
74
- const client = await sessionKeyService.generateClientFromSessionKey(sessionKeyAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA);
75
- expect(client).toBeDefined();
76
- expect(client.transport.key).toBe("http");
77
- expect(client.key).toBe("Account");
78
- expect(client.account.address).not.toBe(zeroAddress);
79
- expect(client.account.kernelVersion).toBe(KERNEL_VERSION);
80
- expect(client.account.entryPoint.version).toBe(ENTRY_POINT.version);
81
- // this is an account with limited permissions so no sudo validator
82
- expect(client.account.kernelPluginManager.address).toBe(zeroAddress);
83
- expect(client.account.kernelPluginManager.sudoValidator).toBe(undefined);
84
- // send a transaction
85
- const tx = await client.sendTransaction({
86
- to: zeroAddress,
87
- value: 0n,
88
- data: "0x",
89
- });
90
- expect(tx.length).toBeGreaterThan(0);
91
- });
92
- it("should not allow to create a client after the session key has been deactivated", async () => {
93
- sessionKeyService.deactivateSessionKey(sessionKeyAddress);
94
- await expect(sessionKeyService.generateClientFromSessionKey(sessionKeyAddress, approval, ESupportedNetworks.OPTIMISM_SEPOLIA)).rejects.toThrow(ErrorCodes.SESSION_KEY_NOT_FOUND.toString());
95
- });
96
- });
97
- });
98
- //# 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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"}