@maci-protocol/coordinator 0.0.0-ci.a577366 → 0.0.0-ci.a73cfa9

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 (232) hide show
  1. package/LICENSE +1 -2
  2. package/README.md +71 -10
  3. package/build/hardhat.config.cjs +9 -3
  4. package/build/hardhat.config.cjs.map +1 -1
  5. package/build/hardhat.config.d.cts +9 -4
  6. package/build/scripts/generateKeypair.js +2 -2
  7. package/build/scripts/generateKeypair.js.map +1 -1
  8. package/build/scripts/generateMaciKeyPair.js +2 -2
  9. package/build/scripts/generateMaciKeyPair.js.map +1 -1
  10. package/build/tests/constants.d.ts +3 -4
  11. package/build/tests/constants.d.ts.map +1 -1
  12. package/build/tests/constants.js +5 -4
  13. package/build/tests/constants.js.map +1 -1
  14. package/build/tests/e2e.deploy.test.js +132 -102
  15. package/build/tests/e2e.deploy.test.js.map +1 -1
  16. package/build/tests/e2e.redis.test.d.ts +2 -0
  17. package/build/tests/e2e.redis.test.d.ts.map +1 -0
  18. package/build/tests/e2e.redis.test.js +118 -0
  19. package/build/tests/e2e.redis.test.js.map +1 -0
  20. package/build/tests/utils.d.ts +7 -1
  21. package/build/tests/utils.d.ts.map +1 -1
  22. package/build/tests/utils.js +17 -6
  23. package/build/tests/utils.js.map +1 -1
  24. package/build/ts/app.module.d.ts.map +1 -1
  25. package/build/ts/app.module.js +6 -0
  26. package/build/ts/app.module.js.map +1 -1
  27. package/build/ts/common/__tests__/common.test.js +44 -46
  28. package/build/ts/common/__tests__/common.test.js.map +1 -1
  29. package/build/ts/common/accountAbstraction.d.ts +7 -24
  30. package/build/ts/common/accountAbstraction.d.ts.map +1 -1
  31. package/build/ts/common/accountAbstraction.js +22 -49
  32. package/build/ts/common/accountAbstraction.js.map +1 -1
  33. package/build/ts/common/chain.d.ts +22 -0
  34. package/build/ts/common/chain.d.ts.map +1 -0
  35. package/build/ts/common/chain.js +37 -0
  36. package/build/ts/common/chain.js.map +1 -0
  37. package/build/ts/common/coordinatorKeypair.d.ts +7 -0
  38. package/build/ts/common/coordinatorKeypair.d.ts.map +1 -0
  39. package/build/ts/common/coordinatorKeypair.js +14 -0
  40. package/build/ts/common/coordinatorKeypair.js.map +1 -0
  41. package/build/ts/common/errors.d.ts +13 -10
  42. package/build/ts/common/errors.d.ts.map +1 -1
  43. package/build/ts/common/errors.js +12 -9
  44. package/build/ts/common/errors.js.map +1 -1
  45. package/build/ts/common/http.d.ts +6 -0
  46. package/build/ts/common/http.d.ts.map +1 -0
  47. package/build/ts/common/http.js +49 -0
  48. package/build/ts/common/http.js.map +1 -0
  49. package/build/ts/common/index.d.ts +3 -1
  50. package/build/ts/common/index.d.ts.map +1 -1
  51. package/build/ts/common/index.js +3 -1
  52. package/build/ts/common/index.js.map +1 -1
  53. package/build/ts/common/networks.d.ts +2 -21
  54. package/build/ts/common/networks.d.ts.map +1 -1
  55. package/build/ts/common/networks.js +39 -48
  56. package/build/ts/common/networks.js.map +1 -1
  57. package/build/ts/common/types.d.ts +3 -4
  58. package/build/ts/common/types.d.ts.map +1 -1
  59. package/build/ts/deployer/__tests__/deployer.controller.test.js +23 -25
  60. package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
  61. package/build/ts/deployer/__tests__/deployer.service.test.js +182 -337
  62. package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
  63. package/build/ts/deployer/__tests__/utils.d.ts +31 -6
  64. package/build/ts/deployer/__tests__/utils.d.ts.map +1 -1
  65. package/build/ts/deployer/__tests__/utils.js +47 -16
  66. package/build/ts/deployer/__tests__/utils.js.map +1 -1
  67. package/build/ts/deployer/deployer.controller.d.ts.map +1 -1
  68. package/build/ts/deployer/deployer.controller.js +19 -6
  69. package/build/ts/deployer/deployer.controller.js.map +1 -1
  70. package/build/ts/deployer/deployer.service.d.ts +26 -53
  71. package/build/ts/deployer/deployer.service.d.ts.map +1 -1
  72. package/build/ts/deployer/deployer.service.js +343 -468
  73. package/build/ts/deployer/deployer.service.js.map +1 -1
  74. package/build/ts/deployer/dto.d.ts +7 -7
  75. package/build/ts/deployer/dto.d.ts.map +1 -1
  76. package/build/ts/deployer/dto.js +14 -6
  77. package/build/ts/deployer/dto.js.map +1 -1
  78. package/build/ts/deployer/types.d.ts +83 -46
  79. package/build/ts/deployer/types.d.ts.map +1 -1
  80. package/build/ts/file/__tests__/file.service.test.js +12 -11
  81. package/build/ts/file/__tests__/file.service.test.js.map +1 -1
  82. package/build/ts/file/file.service.d.ts +4 -3
  83. package/build/ts/file/file.service.d.ts.map +1 -1
  84. package/build/ts/file/file.service.js +16 -10
  85. package/build/ts/file/file.service.js.map +1 -1
  86. package/build/ts/file/types.d.ts +2 -2
  87. package/build/ts/file/types.d.ts.map +1 -1
  88. package/build/ts/health/__tests__/health.controller.test.d.ts +2 -0
  89. package/build/ts/health/__tests__/health.controller.test.d.ts.map +1 -0
  90. package/build/ts/health/__tests__/health.controller.test.js +52 -0
  91. package/build/ts/health/__tests__/health.controller.test.js.map +1 -0
  92. package/build/ts/health/__tests__/health.service.test.d.ts +2 -0
  93. package/build/ts/health/__tests__/health.service.test.d.ts.map +1 -0
  94. package/build/ts/health/__tests__/health.service.test.js +101 -0
  95. package/build/ts/health/__tests__/health.service.test.js.map +1 -0
  96. package/build/ts/health/health.controller.d.ts +16 -0
  97. package/build/ts/health/health.controller.d.ts.map +1 -0
  98. package/build/ts/health/health.controller.js +43 -0
  99. package/build/ts/health/health.controller.js.map +1 -0
  100. package/build/ts/health/health.module.d.ts +3 -0
  101. package/build/ts/health/health.module.d.ts.map +1 -0
  102. package/build/ts/health/health.module.js +22 -0
  103. package/build/ts/health/health.module.js.map +1 -0
  104. package/build/ts/health/health.service.d.ts +42 -0
  105. package/build/ts/health/health.service.d.ts.map +1 -0
  106. package/build/ts/health/health.service.js +176 -0
  107. package/build/ts/health/health.service.js.map +1 -0
  108. package/build/ts/health/types.d.ts +87 -0
  109. package/build/ts/health/types.d.ts.map +1 -0
  110. package/build/ts/health/types.js +2 -0
  111. package/build/ts/health/types.js.map +1 -0
  112. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.d.ts +11 -0
  113. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.d.ts.map +1 -0
  114. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.js +12 -0
  115. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.js.map +1 -0
  116. package/build/ts/proof/__tests__/proof.controller.test.js +8 -7
  117. package/build/ts/proof/__tests__/proof.controller.test.js.map +1 -1
  118. package/build/ts/proof/__tests__/proof.gateway.test.js +5 -3
  119. package/build/ts/proof/__tests__/proof.gateway.test.js.map +1 -1
  120. package/build/ts/proof/__tests__/proof.service.test.js +31 -75
  121. package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
  122. package/build/ts/proof/dto.d.ts +15 -18
  123. package/build/ts/proof/dto.d.ts.map +1 -1
  124. package/build/ts/proof/dto.js +55 -49
  125. package/build/ts/proof/dto.js.map +1 -1
  126. package/build/ts/proof/proof.controller.d.ts +3 -2
  127. package/build/ts/proof/proof.controller.d.ts.map +1 -1
  128. package/build/ts/proof/proof.controller.js +38 -15
  129. package/build/ts/proof/proof.controller.js.map +1 -1
  130. package/build/ts/proof/proof.module.d.ts.map +1 -1
  131. package/build/ts/proof/proof.module.js +1 -0
  132. package/build/ts/proof/proof.module.js.map +1 -1
  133. package/build/ts/proof/proof.service.d.ts +4 -6
  134. package/build/ts/proof/proof.service.d.ts.map +1 -1
  135. package/build/ts/proof/proof.service.js +48 -130
  136. package/build/ts/proof/proof.service.js.map +1 -1
  137. package/build/ts/proof/types.d.ts +21 -17
  138. package/build/ts/proof/types.d.ts.map +1 -1
  139. package/build/ts/proof/types.js.map +1 -1
  140. package/build/ts/redis/__tests__/redis.service.test.d.ts +2 -0
  141. package/build/ts/redis/__tests__/redis.service.test.d.ts.map +1 -0
  142. package/build/ts/redis/__tests__/redis.service.test.js +148 -0
  143. package/build/ts/redis/__tests__/redis.service.test.js.map +1 -0
  144. package/build/ts/redis/redis.module.d.ts +3 -0
  145. package/build/ts/redis/redis.module.d.ts.map +1 -0
  146. package/build/ts/redis/redis.module.js +18 -0
  147. package/build/ts/redis/redis.module.js.map +1 -0
  148. package/build/ts/redis/redis.service.d.ts +53 -0
  149. package/build/ts/redis/redis.service.d.ts.map +1 -0
  150. package/build/ts/redis/redis.service.js +99 -0
  151. package/build/ts/redis/redis.service.js.map +1 -0
  152. package/build/ts/redis/types.d.ts +66 -0
  153. package/build/ts/redis/types.d.ts.map +1 -0
  154. package/build/ts/redis/types.js +2 -0
  155. package/build/ts/redis/types.js.map +1 -0
  156. package/build/ts/redis/utils.d.ts +20 -0
  157. package/build/ts/redis/utils.d.ts.map +1 -0
  158. package/build/ts/redis/utils.js +27 -0
  159. package/build/ts/redis/utils.js.map +1 -0
  160. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts +2 -0
  161. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts.map +1 -0
  162. package/build/ts/scheduler/__tests__/scheduler.controller.test.js +62 -0
  163. package/build/ts/scheduler/__tests__/scheduler.controller.test.js.map +1 -0
  164. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts +2 -0
  165. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts.map +1 -0
  166. package/build/ts/scheduler/__tests__/scheduler.service.test.js +369 -0
  167. package/build/ts/scheduler/__tests__/scheduler.service.test.js.map +1 -0
  168. package/build/ts/scheduler/dto.d.ts +41 -0
  169. package/build/ts/scheduler/dto.d.ts.map +1 -0
  170. package/build/ts/scheduler/dto.js +115 -0
  171. package/build/ts/scheduler/dto.js.map +1 -0
  172. package/build/ts/scheduler/scheduler.controller.d.ts +32 -0
  173. package/build/ts/scheduler/scheduler.controller.d.ts.map +1 -0
  174. package/build/ts/scheduler/scheduler.controller.js +118 -0
  175. package/build/ts/scheduler/scheduler.controller.js.map +1 -0
  176. package/build/ts/scheduler/scheduler.module.d.ts +3 -0
  177. package/build/ts/scheduler/scheduler.module.d.ts.map +1 -0
  178. package/build/ts/scheduler/scheduler.module.js +24 -0
  179. package/build/ts/scheduler/scheduler.module.js.map +1 -0
  180. package/build/ts/scheduler/scheduler.service.d.ts +71 -0
  181. package/build/ts/scheduler/scheduler.service.d.ts.map +1 -0
  182. package/build/ts/scheduler/scheduler.service.js +297 -0
  183. package/build/ts/scheduler/scheduler.service.js.map +1 -0
  184. package/build/ts/scheduler/types.d.ts +65 -0
  185. package/build/ts/scheduler/types.d.ts.map +1 -0
  186. package/build/ts/scheduler/types.js +2 -0
  187. package/build/ts/scheduler/types.js.map +1 -0
  188. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +2 -2
  189. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -1
  190. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js +34 -19
  191. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js.map +1 -1
  192. package/build/ts/sessionKeys/__tests__/utils.d.ts +1 -1
  193. package/build/ts/sessionKeys/__tests__/utils.d.ts.map +1 -1
  194. package/build/ts/sessionKeys/__tests__/utils.js +7 -6
  195. package/build/ts/sessionKeys/__tests__/utils.js.map +1 -1
  196. package/build/ts/sessionKeys/provider/KernelEIP1193Provider.d.ts +53 -0
  197. package/build/ts/sessionKeys/provider/KernelEIP1193Provider.d.ts.map +1 -0
  198. package/build/ts/sessionKeys/provider/KernelEIP1193Provider.js +105 -0
  199. package/build/ts/sessionKeys/provider/KernelEIP1193Provider.js.map +1 -0
  200. package/build/ts/sessionKeys/sessionKeys.service.d.ts +16 -4
  201. package/build/ts/sessionKeys/sessionKeys.service.d.ts.map +1 -1
  202. package/build/ts/sessionKeys/sessionKeys.service.js +23 -6
  203. package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -1
  204. package/build/ts/subgraph/__tests__/subgraph.controller.test.js +3 -3
  205. package/build/ts/subgraph/__tests__/subgraph.controller.test.js.map +1 -1
  206. package/build/ts/subgraph/__tests__/subgraph.gateway.test.js +2 -2
  207. package/build/ts/subgraph/__tests__/subgraph.gateway.test.js.map +1 -1
  208. package/build/ts/subgraph/__tests__/subgraph.service.test.js +5 -5
  209. package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
  210. package/build/ts/subgraph/dto.d.ts +2 -2
  211. package/build/ts/subgraph/dto.d.ts.map +1 -1
  212. package/build/ts/subgraph/dto.js +3 -3
  213. package/build/ts/subgraph/dto.js.map +1 -1
  214. package/build/ts/subgraph/subgraph.controller.d.ts.map +1 -1
  215. package/build/ts/subgraph/subgraph.controller.js +8 -3
  216. package/build/ts/subgraph/subgraph.controller.js.map +1 -1
  217. package/build/ts/subgraph/subgraph.service.d.ts +4 -0
  218. package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
  219. package/build/ts/subgraph/subgraph.service.js +23 -10
  220. package/build/ts/subgraph/subgraph.service.js.map +1 -1
  221. package/build/ts/subgraph/types.d.ts +2 -2
  222. package/build/ts/subgraph/types.d.ts.map +1 -1
  223. package/build/tsconfig.build.tsbuildinfo +1 -1
  224. package/package.json +45 -38
  225. package/build/tests/e2e.aa.test.d.ts +0 -2
  226. package/build/tests/e2e.aa.test.d.ts.map +0 -1
  227. package/build/tests/e2e.aa.test.js +0 -103
  228. package/build/tests/e2e.aa.test.js.map +0 -1
  229. package/build/ts/deployer/utils.d.ts +0 -8
  230. package/build/ts/deployer/utils.d.ts.map +0 -1
  231. package/build/ts/deployer/utils.js +0 -9
  232. package/build/ts/deployer/utils.js.map +0 -1
@@ -8,23 +8,21 @@ var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
10
  var ProofGeneratorService_1;
11
- import { Keypair, PrivKey, PubKey } from "@maci-protocol/domainobjs";
12
- import { Deployment, EContracts, ProofGenerator, Poll__factory as PollFactory, MACI__factory as MACIFactory, Prover, getPoll, mergeSignups, } from "@maci-protocol/sdk";
11
+ import { PublicKey } from "@maci-protocol/domainobjs";
12
+ import { Deployment, EContracts, getPoll, mergeSignups, EMode, } from "@maci-protocol/sdk";
13
+ import { generateProofs, proveOnChain } from "@maci-protocol/sdk";
13
14
  import { Logger, Injectable } from "@nestjs/common";
14
- import { ZeroAddress } from "ethers";
15
15
  import hre from "hardhat";
16
16
  import fs from "fs";
17
17
  import path from "path";
18
18
  import { ErrorCodes } from "../common";
19
- import { getPublicClient } from "../common/accountAbstraction";
20
- import { CryptoService } from "../crypto/crypto.service";
19
+ import { getCoordinatorKeypair } from "../common/coordinatorKeypair";
21
20
  import { FileService } from "../file/file.service";
22
21
  import { SessionKeysService } from "../sessionKeys/sessionKeys.service";
23
22
  /**
24
23
  * ProofGeneratorService is responsible for generating message processing and tally proofs.
25
24
  */
26
25
  let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorService {
27
- cryptoService;
28
26
  fileService;
29
27
  sessionKeysService;
30
28
  /**
@@ -38,8 +36,7 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
38
36
  /**
39
37
  * Proof generator initialization
40
38
  */
41
- constructor(cryptoService, fileService, sessionKeysService) {
42
- this.cryptoService = cryptoService;
39
+ constructor(fileService, sessionKeysService) {
43
40
  this.fileService = fileService;
44
41
  this.sessionKeysService = sessionKeysService;
45
42
  this.deployment = Deployment.getInstance({ hre });
@@ -65,13 +62,9 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
65
62
  * @param args - generate proofs arguments
66
63
  * @returns - generated proofs for message processing and tally
67
64
  */
68
- async generate({ poll, maciContractAddress, tallyContractAddress, useQuadraticVoting, encryptedCoordinatorPrivateKey, startBlock, endBlock, blocksPerBatch, }, options) {
65
+ async generate({ approval, sessionKeyAddress, chain, poll, maciContractAddress, mode, startBlock, endBlock, blocksPerBatch, useWasm, }, options) {
69
66
  try {
70
- const maciContract = await this.deployment.getContract({
71
- name: EContracts.MACI,
72
- address: maciContractAddress,
73
- });
74
- const signer = await this.deployment.getDeployer();
67
+ const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
75
68
  const pollData = await getPoll({
76
69
  maciAddress: maciContractAddress,
77
70
  pollId: poll,
@@ -81,58 +74,41 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
81
74
  name: EContracts.Poll,
82
75
  address: pollData.address,
83
76
  });
84
- const [coordinatorPublicKey, isStateAqMerged] = await Promise.all([
85
- pollContract.coordinatorPubKey(),
86
- pollContract.stateMerged(),
87
- ]);
88
- if (!isStateAqMerged) {
89
- this.logger.error(`Error: ${ErrorCodes.NOT_MERGED_STATE_TREE}, state tree is not merged`);
90
- throw new Error(ErrorCodes.NOT_MERGED_STATE_TREE.toString());
91
- }
92
- const { privateKey } = await this.fileService.getPrivateKey();
93
- const maciPrivateKey = PrivKey.deserialize(this.cryptoService.decrypt(privateKey, encryptedCoordinatorPrivateKey));
94
- const coordinatorKeypair = new Keypair(maciPrivateKey);
95
- const publicKey = new PubKey([
96
- BigInt(coordinatorPublicKey.x.toString()),
97
- BigInt(coordinatorPublicKey.y.toString()),
77
+ const publicKeyOnChain = await pollContract.coordinatorPublicKey();
78
+ const coordinatorPublicKeyOnChain = new PublicKey([
79
+ BigInt(publicKeyOnChain.x.toString()),
80
+ BigInt(publicKeyOnChain.y.toString()),
98
81
  ]);
99
- if (!coordinatorKeypair.pubKey.equals(publicKey)) {
82
+ const coordinatorKeypair = getCoordinatorKeypair();
83
+ if (!coordinatorKeypair.publicKey.equals(coordinatorPublicKeyOnChain)) {
100
84
  this.logger.error(`Error: ${ErrorCodes.PRIVATE_KEY_MISMATCH}, wrong private key`);
101
85
  throw new Error(ErrorCodes.PRIVATE_KEY_MISMATCH.toString());
102
86
  }
103
- const outputDir = path.resolve("./proofs");
104
- const maciState = await ProofGenerator.prepareState({
105
- maciContract,
106
- pollContract,
107
- maciPrivateKey,
108
- coordinatorKeypair,
109
- pollId: poll,
87
+ // There are only QV and Non-QV modes available for tally circuit
88
+ const tally = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME,
89
+ // if FULL use NON_QV because there are only VoteTallyQV and VoteTallyNonQV zkeys
90
+ mode === EMode.FULL ? EMode.NON_QV : mode);
91
+ const messageProcessor = this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, mode);
92
+ const { processProofs, tallyProofs, tallyData } = await generateProofs({
93
+ outputDir: path.resolve("./proofs"),
94
+ coordinatorPrivateKey: coordinatorKeypair.privateKey.serialize(),
110
95
  signer,
111
- outputDir,
112
- options: {
113
- startBlock,
114
- endBlock,
115
- blocksPerBatch,
116
- },
117
- });
118
- const foundPoll = maciState.polls.get(BigInt(poll));
119
- if (!foundPoll) {
120
- this.logger.error(`Error: ${ErrorCodes.POLL_NOT_FOUND}, Poll ${poll} not found in maci state`);
121
- throw new Error(ErrorCodes.POLL_NOT_FOUND.toString());
122
- }
123
- const proofGenerator = new ProofGenerator({
124
- poll: foundPoll,
125
- maciContractAddress,
126
- tallyContractAddress,
127
- tally: this.fileService.getZkeyFilePaths(process.env.COORDINATOR_TALLY_ZKEY_NAME, useQuadraticVoting),
128
- mp: this.fileService.getZkeyFilePaths(process.env.COORDINATOR_MESSAGE_PROCESS_ZKEY_NAME, useQuadraticVoting),
96
+ maciAddress: maciContractAddress,
97
+ pollId: BigInt(poll),
98
+ startBlock,
99
+ endBlock,
100
+ blocksPerBatch,
101
+ useWasm,
129
102
  rapidsnark: process.env.COORDINATOR_RAPIDSNARK_EXE,
130
- outputDir,
131
- tallyOutputFile: path.resolve("./tally.json"),
132
- useQuadraticVoting,
103
+ mode,
104
+ voteTallyZkey: tally.zkey,
105
+ voteTallyWitnessGenerator: tally.witnessGenerator,
106
+ voteTallyWasm: tally.wasm,
107
+ messageProcessorZkey: messageProcessor.zkey,
108
+ messageProcessorWitnessGenerator: messageProcessor.witnessGenerator,
109
+ messageProcessorWasm: messageProcessor.wasm,
110
+ tallyFile: path.resolve("./tally.json"),
133
111
  });
134
- const processProofs = await proofGenerator.generateMpProofs(options);
135
- const { proofs: tallyProofs, tallyData } = await proofGenerator.generateTallyProofs(hre.network.name, String(hre.network.config.chainId || 1), options);
136
112
  return {
137
113
  processProofs,
138
114
  tallyProofs,
@@ -151,9 +127,7 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
151
127
  * @returns whether the proofs were successfully merged
152
128
  */
153
129
  async merge({ maciContractAddress, pollId, approval, sessionKeyAddress, chain }) {
154
- // get a kernel client
155
- const kernelClient = await this.sessionKeysService.generateClientFromSessionKey(sessionKeyAddress, approval, chain);
156
- const signer = await this.sessionKeysService.getKernelClientSigner(kernelClient);
130
+ const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
157
131
  await mergeSignups({
158
132
  maciAddress: maciContractAddress,
159
133
  pollId: BigInt(pollId),
@@ -166,80 +140,24 @@ let ProofGeneratorService = ProofGeneratorService_1 = class ProofGeneratorServic
166
140
  *
167
141
  * @param args - submit proofs on-chain arguments
168
142
  */
169
- async submit({ maciContractAddress, pollId, chain }) {
170
- const publicClient = getPublicClient(chain);
171
- // get the poll address
172
- const pollContracts = await publicClient.readContract({
173
- address: maciContractAddress,
174
- abi: MACIFactory.abi,
175
- functionName: "getPoll",
176
- args: [BigInt(pollId)],
177
- });
178
- const pollAddress = pollContracts.poll;
179
- if (pollAddress.toLowerCase() === ZeroAddress.toLowerCase()) {
180
- this.logger.error(`Error: ${ErrorCodes.POLL_NOT_FOUND}, Poll ${pollId} not found`);
181
- throw new Error(ErrorCodes.POLL_NOT_FOUND.toString());
182
- }
183
- // check if state tree has been merged
184
- const isStateMerged = await publicClient.readContract({
185
- address: pollAddress,
186
- abi: PollFactory.abi,
187
- functionName: "stateMerged",
143
+ async submit({ maciContractAddress, pollId, sessionKeyAddress, approval, chain, }) {
144
+ const signer = await this.sessionKeysService.getCoordinatorSigner(chain, sessionKeyAddress, approval);
145
+ const tallyData = await proveOnChain({
146
+ pollId: BigInt(pollId),
147
+ maciAddress: maciContractAddress,
148
+ proofDir: "./proofs",
149
+ tallyFile: "./tally.json",
150
+ signer,
188
151
  });
189
- if (!isStateMerged) {
190
- this.logger.error(`Error: ${ErrorCodes.NOT_MERGED_STATE_TREE}, state tree is not merged`);
191
- throw new Error(ErrorCodes.NOT_MERGED_STATE_TREE.toString());
152
+ if (!tallyData) {
153
+ throw new Error("Tally data is undefined");
192
154
  }
193
- const [maciContract, mpContract, pollContract, tallyContract, vkRegistryContract, verifierContract] = await Promise.all([
194
- this.deployment.getContract({
195
- name: EContracts.MACI,
196
- address: maciContractAddress,
197
- }),
198
- this.deployment.getContract({
199
- name: EContracts.MessageProcessor,
200
- address: pollContracts.messageProcessor,
201
- }),
202
- this.deployment.getContract({
203
- name: EContracts.Poll,
204
- address: pollContracts.poll,
205
- }),
206
- this.deployment.getContract({
207
- name: EContracts.Tally,
208
- address: pollContracts.tally,
209
- }),
210
- this.deployment.getContract({ name: EContracts.VkRegistry }),
211
- this.deployment.getContract({ name: EContracts.Verifier }),
212
- ]);
213
- const prover = new Prover({
214
- maciContract,
215
- mpContract,
216
- pollContract,
217
- tallyContract,
218
- vkRegistryContract,
219
- verifierContract,
220
- });
221
- const data = {
222
- processProofs: await this.readProofs(path.resolve("./proofs"), "process"),
223
- tallyProofs: await this.readProofs(path.resolve("./proofs"), "tally"),
224
- };
225
- // prove message processing
226
- await prover.proveMessageProcessing(data.processProofs);
227
- // read tally data
228
- const tallyData = await fs.promises
229
- .readFile("./tally.json", "utf8")
230
- .then((result) => JSON.parse(result));
231
- // prove tally
232
- await prover.proveTally(data.tallyProofs);
233
- // submit results
234
- const voteOptions = Number(await pollContract.voteOptions());
235
- await prover.submitResults(tallyData, voteOptions);
236
- return true;
155
+ return tallyData;
237
156
  }
238
157
  };
239
158
  ProofGeneratorService = ProofGeneratorService_1 = __decorate([
240
159
  Injectable(),
241
- __metadata("design:paramtypes", [CryptoService,
242
- FileService,
160
+ __metadata("design:paramtypes", [FileService,
243
161
  SessionKeysService])
244
162
  ], ProofGeneratorService);
245
163
  export { ProofGeneratorService };
@@ -1 +1 @@
1
- {"version":3,"file":"proof.service.js","sourceRoot":"","sources":["../../../ts/proof/proof.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proof.service.js","sourceRoot":"","sources":["../../../ts/proof/proof.service.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
- import type { ITallyData, IProof } from "@maci-protocol/sdk";
1
+ import type { ITallyData, IProof, EMode, ESupportedChains } from "@maci-protocol/sdk";
2
2
  import type { Hex } from "viem";
3
- import { ESupportedNetworks } from "../common";
4
3
  /**
5
4
  * WS events for proof generation
6
5
  */
@@ -24,6 +23,18 @@ export interface IReadProofsResults {
24
23
  * Interface that represents generate proofs arguments
25
24
  */
26
25
  export interface IGenerateArgs {
26
+ /**
27
+ * Approval for the session key
28
+ */
29
+ approval?: string;
30
+ /**
31
+ * Session key address
32
+ */
33
+ sessionKeyAddress?: Hex;
34
+ /**
35
+ * Chain
36
+ */
37
+ chain: ESupportedChains;
27
38
  /**
28
39
  * Poll id
29
40
  */
@@ -32,18 +43,10 @@ export interface IGenerateArgs {
32
43
  * Maci contract address
33
44
  */
34
45
  maciContractAddress: string;
35
- /**
36
- * Tally contract address
37
- */
38
- tallyContractAddress: string;
39
46
  /**
40
47
  * Whether to use Qv or NonQv
41
48
  */
42
- useQuadraticVoting: boolean;
43
- /**
44
- * Encrypted coordinator private key with RSA public key (see .env.example)
45
- */
46
- encryptedCoordinatorPrivateKey: string;
49
+ mode: EMode;
47
50
  /**
48
51
  * Start block for event processing
49
52
  */
@@ -56,6 +59,7 @@ export interface IGenerateArgs {
56
59
  * Blocks per batch for event processing
57
60
  */
58
61
  blocksPerBatch?: number;
62
+ useWasm?: boolean;
59
63
  }
60
64
  /**
61
65
  * Interface that represents generated proofs data
@@ -102,15 +106,15 @@ export interface IMergeArgs {
102
106
  /**
103
107
  * Approval for the session key
104
108
  */
105
- approval: string;
109
+ approval?: string;
106
110
  /**
107
111
  * Session key address
108
112
  */
109
- sessionKeyAddress: Hex;
113
+ sessionKeyAddress?: Hex;
110
114
  /**
111
115
  * Chain
112
116
  */
113
- chain: ESupportedNetworks;
117
+ chain: ESupportedChains;
114
118
  }
115
119
  /**
116
120
  * Submit proofs on-chain arguments
@@ -127,14 +131,14 @@ export interface ISubmitProofsArgs {
127
131
  /**
128
132
  * Approval for the session key
129
133
  */
130
- approval: string;
134
+ approval?: string;
131
135
  /**
132
136
  * Session key address
133
137
  */
134
- sessionKeyAddress: Hex;
138
+ sessionKeyAddress?: Hex;
135
139
  /**
136
140
  * Chain
137
141
  */
138
- chain: ESupportedNetworks;
142
+ chain: ESupportedChains;
139
143
  }
140
144
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE/C;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,qBAAqB;IAC1B,QAAQ,wBAAwB;IAChC,MAAM,sBAAsB;IAC5B,KAAK,cAAc;CACpB;AAKD,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,8BAA8B,EAAE,MAAM,CAAC;IAEvC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,iBAAiB,EAAE,GAAG,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,iBAAiB,EAAE,GAAG,CAAC;IACvB;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;CAC3B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;GAEG;AACH,oBAAY,sBAAsB;IAChC,KAAK,qBAAqB;IAC1B,QAAQ,wBAAwB;IAChC,MAAM,sBAAsB;IAC5B,KAAK,cAAc;CACpB;AAKD,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB;;OAEG;IACH,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;IAExB;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAKxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,aAAa,EAAE,MAAM,EAAE,CAAC;IAExB;;OAEG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IAEtB;;OAEG;IACH,SAAS,EAAE,UAAU,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,mBAAmB,EAAE,MAAM,CAAC;IAE5B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IACH,KAAK,EAAE,gBAAgB,CAAC;CACzB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAKX;AALD,WAAY,sBAAsB;IAChC,oDAA0B,CAAA;IAC1B,0DAAgC,CAAA;IAChC,sDAA4B,CAAA;IAC5B,6CAAmB,CAAA;AACrB,CAAC,EALW,sBAAsB,KAAtB,sBAAsB,QAKjC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/proof/types.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,CAAN,IAAY,sBAKX;AALD,WAAY,sBAAsB;IAChC,oDAA0B,CAAA;IAC1B,0DAAgC,CAAA;IAChC,sDAA4B,CAAA;IAC5B,6CAAmB,CAAA;AACrB,CAAC,EALW,sBAAsB,KAAtB,sBAAsB,QAKjC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=redis.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.test.d.ts","sourceRoot":"","sources":["../../../../ts/redis/__tests__/redis.service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ import { ESupportedChains, EMode } from "@maci-protocol/sdk";
2
+ import { createClient } from "@redis/client";
3
+ import { RedisService } from "../redis.service";
4
+ import { getPollKeyFromObject } from "../utils";
5
+ const REDIS__GET_ALL_PREFIX = "*-test";
6
+ const scheduledPoll = {
7
+ maciAddress: "0xb83074Ac11fc569AC12F1b7D0C0a6809c3dc355b",
8
+ pollId: "5",
9
+ mode: EMode.NON_QV,
10
+ chain: ESupportedChains.OptimismSepolia,
11
+ endDate: 1752534000,
12
+ deploymentBlockNumber: 1,
13
+ merged: false,
14
+ proofsGenerated: false,
15
+ };
16
+ jest.mock("@redis/client", () => {
17
+ const mockRedisClient = {
18
+ connect: jest.fn().mockResolvedValue(undefined),
19
+ set: jest.fn().mockResolvedValue("OK"),
20
+ get: jest.fn().mockResolvedValue(null),
21
+ scan: jest.fn().mockResolvedValue({ cursor: "0", keys: ["1", "2", "3"] }),
22
+ del: jest.fn().mockResolvedValue(1),
23
+ quit: jest.fn().mockResolvedValue("OK"),
24
+ isOpen: true,
25
+ };
26
+ return {
27
+ createClient: jest.fn(() => mockRedisClient),
28
+ };
29
+ });
30
+ describe("RedisService", () => {
31
+ let service;
32
+ let mockRedisClient;
33
+ beforeAll(async () => {
34
+ service = new RedisService();
35
+ await service.onModuleInit();
36
+ mockRedisClient = createClient();
37
+ });
38
+ afterAll(() => {
39
+ jest.clearAllMocks();
40
+ });
41
+ test("should connect to Redis without issues", () => {
42
+ expect(service.isOpen()).toBe(true);
43
+ });
44
+ test("should set and get a value, and parse it as IScheduledPoll", async () => {
45
+ const key = getPollKeyFromObject(scheduledPoll, true);
46
+ const value = JSON.stringify(scheduledPoll);
47
+ await service.set(key, value);
48
+ mockRedisClient.get.mockResolvedValueOnce(value);
49
+ const stored = await service.get(key);
50
+ expect(stored).not.toBeNull();
51
+ const parsed = JSON.parse(stored);
52
+ expect(parsed).toEqual(scheduledPoll);
53
+ });
54
+ test("should return null when non-existent key is requested", async () => {
55
+ const nonExistentKey = "non-existent-key";
56
+ const result = await service.get(nonExistentKey);
57
+ expect(result).toBeNull();
58
+ });
59
+ test("should set and get multiple values", async () => {
60
+ const pollOne = { ...scheduledPoll };
61
+ pollOne.pollId = "1";
62
+ const pollKeyOne = getPollKeyFromObject(pollOne, true);
63
+ await service.set(pollKeyOne, JSON.stringify(pollOne));
64
+ mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollOne));
65
+ const pollTwo = { ...scheduledPoll };
66
+ pollTwo.pollId = "2";
67
+ const pollKeyTwo = getPollKeyFromObject(pollTwo, true);
68
+ await service.set(pollKeyTwo, JSON.stringify(pollTwo));
69
+ mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollTwo));
70
+ const pollThree = { ...scheduledPoll };
71
+ pollThree.pollId = "3";
72
+ const pollKeyThree = getPollKeyFromObject(pollThree, true);
73
+ await service.set(pollKeyThree, JSON.stringify(pollThree));
74
+ mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollThree));
75
+ const [storedPollOne, storedPollTwo, storedPollThree] = await Promise.all([
76
+ service.get(pollKeyOne),
77
+ service.get(pollKeyTwo),
78
+ service.get(pollKeyThree),
79
+ ]);
80
+ expect(pollOne).toEqual(JSON.parse(storedPollOne || "{}"));
81
+ expect(pollTwo).toEqual(JSON.parse(storedPollTwo || "{}"));
82
+ expect(pollThree).toEqual(JSON.parse(storedPollThree || "{}"));
83
+ });
84
+ test("should retrieve all values using getAll", async () => {
85
+ const pollOne = { ...scheduledPoll };
86
+ pollOne.pollId = "1";
87
+ const pollKeyOne = getPollKeyFromObject(pollOne, true);
88
+ await service.set(pollKeyOne, JSON.stringify(pollOne));
89
+ const pollTwo = { ...scheduledPoll };
90
+ pollTwo.pollId = "2";
91
+ const pollKeyTwo = getPollKeyFromObject(pollTwo, true);
92
+ await service.set(pollKeyTwo, JSON.stringify(pollTwo));
93
+ const pollThree = { ...scheduledPoll };
94
+ pollThree.pollId = "3";
95
+ const pollKeyThree = getPollKeyFromObject(pollThree, true);
96
+ await service.set(pollKeyThree, JSON.stringify(pollThree));
97
+ mockRedisClient.get.mockImplementation(async (key) => {
98
+ if (["1", "2", "3"].includes(String(key))) {
99
+ return Promise.resolve("{}");
100
+ }
101
+ return Promise.resolve(null);
102
+ });
103
+ const all = await service.getAll(REDIS__GET_ALL_PREFIX);
104
+ expect(all.length).toBe(3);
105
+ });
106
+ test("should delete a value and return one as confirmation", async () => {
107
+ const key = "delete-me";
108
+ await service.set(key, '{"bye":"now"}');
109
+ const deleted = await service.delete(key);
110
+ const value = await service.get(key);
111
+ expect(deleted).toBe(1);
112
+ expect(value).toBeNull();
113
+ });
114
+ test("should not throw and return zero when deleting non-existent value", async () => {
115
+ mockRedisClient.del.mockResolvedValueOnce(0);
116
+ const key = "non-existent-key";
117
+ const deleted = await service.delete(key);
118
+ expect(deleted).toBe(0);
119
+ });
120
+ test("should update a value using set with same key", async () => {
121
+ const key = getPollKeyFromObject(scheduledPoll, true);
122
+ const valuePoll = JSON.stringify(scheduledPoll);
123
+ await service.set(key, valuePoll);
124
+ const updatedPoll = { ...scheduledPoll, endDate: 1 };
125
+ const updatedPollValue = JSON.stringify(updatedPoll);
126
+ await service.set(key, updatedPollValue);
127
+ mockRedisClient.get.mockResolvedValueOnce(updatedPollValue);
128
+ const stored = await service.get(key);
129
+ const parsed = JSON.parse(stored);
130
+ expect(parsed.endDate).toBe(updatedPoll.endDate);
131
+ });
132
+ test("should return production key name when test is not specified", () => {
133
+ const originalEnv = process.env.NODE_ENV;
134
+ process.env.NODE_ENV = "production";
135
+ try {
136
+ const key = getPollKeyFromObject(scheduledPoll, false);
137
+ expect(key).toBe(`${scheduledPoll.chain}-${scheduledPoll.maciAddress}-poll-${scheduledPoll.pollId}`);
138
+ }
139
+ finally {
140
+ process.env.NODE_ENV = originalEnv;
141
+ }
142
+ });
143
+ test("should return test key name when test is specified", () => {
144
+ const key = getPollKeyFromObject(scheduledPoll, true);
145
+ expect(key).toBe(`${scheduledPoll.chain}-${scheduledPoll.maciAddress}-poll-${scheduledPoll.pollId}-test`);
146
+ });
147
+ });
148
+ //# sourceMappingURL=redis.service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.test.js","sourceRoot":"","sources":["../../../../ts/redis/__tests__/redis.service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class RedisModule {
2
+ }
3
+ //# sourceMappingURL=redis.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.module.d.ts","sourceRoot":"","sources":["../../../ts/redis/redis.module.ts"],"names":[],"mappings":"AAIA,qBAIa,WAAW;CAAG"}
@@ -0,0 +1,18 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Module } from "@nestjs/common";
8
+ import { RedisService } from "./redis.service";
9
+ let RedisModule = class RedisModule {
10
+ };
11
+ RedisModule = __decorate([
12
+ Module({
13
+ exports: [RedisService],
14
+ providers: [RedisService],
15
+ })
16
+ ], RedisModule);
17
+ export { RedisModule };
18
+ //# sourceMappingURL=redis.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.module.js","sourceRoot":"","sources":["../../../ts/redis/redis.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAMxC,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,WAAW;IAJvB,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,YAAY,CAAC;QACvB,SAAS,EAAE,CAAC,YAAY,CAAC;KAC1B,CAAC;GACW,WAAW,CAAG"}
@@ -0,0 +1,53 @@
1
+ import { OnModuleInit } from "@nestjs/common";
2
+ import { IGetAllSingleObject } from "./types";
3
+ /**
4
+ * Redis service to interact with the Redis database.
5
+ */
6
+ export declare class RedisService implements OnModuleInit {
7
+ /**
8
+ * Client instance used to interact with the Redis database.
9
+ */
10
+ private client;
11
+ /**
12
+ * Create a new instance of the RedisService.
13
+ * The Redis configuration is set up here
14
+ */
15
+ constructor();
16
+ /**
17
+ * Initializes the Redis client connection when the module has been uploaded.
18
+ * @dev it is a lifecycle hook provided by NestJS that is called after all dependencies
19
+ * are injected and the module is fully initialized.
20
+ * This ensures your service is ready and all dependencies are available.
21
+ */
22
+ onModuleInit(): Promise<void>;
23
+ /**
24
+ * Saves a new key-value pair in Redis.
25
+ * @param key key for the Redis entry
26
+ * @param value value to be stored in Redis
27
+ */
28
+ set(key: string, value: string): Promise<void>;
29
+ /**
30
+ * Retrieves a value from Redis by its key.
31
+ * @param key key for the Redis entry
32
+ * @returns the value stored as string in Redis or null if the key does not exist
33
+ */
34
+ get(key: string): Promise<string | null>;
35
+ /**
36
+ * Retrieves all keys from Redis that match a specific pattern.
37
+ * @param match optional pattern to match keys in Redis
38
+ * @dev if no match is provided, it will return all keys
39
+ * @returns the array of string values stored in Redis that match the pattern
40
+ */
41
+ getAll(match?: string): Promise<IGetAllSingleObject[]>;
42
+ /**
43
+ * Deletes a key from Redis.
44
+ * @param key key to be deleted from Redis
45
+ */
46
+ delete(key: string): Promise<number>;
47
+ /**
48
+ * Check if the connection to Redis is open
49
+ * @return true if the connection is open, false otherwise
50
+ */
51
+ isOpen(): boolean;
52
+ }
53
+ //# sourceMappingURL=redis.service.d.ts.map