@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.
Files changed (99) hide show
  1. package/README.md +4 -4
  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 +28 -17
  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 +4 -0
  14. package/build/ts/app.module.js.map +1 -1
  15. package/build/ts/common/__tests__/common.test.js +1 -11
  16. package/build/ts/common/__tests__/common.test.js.map +1 -1
  17. package/build/ts/common/chain.d.ts.map +1 -1
  18. package/build/ts/common/chain.js +4 -3
  19. package/build/ts/common/chain.js.map +1 -1
  20. package/build/ts/common/errors.d.ts +12 -11
  21. package/build/ts/common/errors.d.ts.map +1 -1
  22. package/build/ts/common/errors.js +12 -11
  23. package/build/ts/common/errors.js.map +1 -1
  24. package/build/ts/deployer/__tests__/deployer.controller.test.js +7 -7
  25. package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
  26. package/build/ts/deployer/__tests__/deployer.service.test.js +71 -11
  27. package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
  28. package/build/ts/deployer/__tests__/utils.d.ts +0 -1
  29. package/build/ts/deployer/__tests__/utils.d.ts.map +1 -1
  30. package/build/ts/deployer/__tests__/utils.js +4 -4
  31. package/build/ts/deployer/__tests__/utils.js.map +1 -1
  32. package/build/ts/deployer/deployer.service.d.ts +17 -7
  33. package/build/ts/deployer/deployer.service.d.ts.map +1 -1
  34. package/build/ts/deployer/deployer.service.js +207 -54
  35. package/build/ts/deployer/deployer.service.js.map +1 -1
  36. package/build/ts/deployer/types.d.ts +18 -11
  37. package/build/ts/deployer/types.d.ts.map +1 -1
  38. package/build/ts/file/file.service.js +2 -2
  39. package/build/ts/file/file.service.js.map +1 -1
  40. package/build/ts/health/__tests__/health.controller.test.d.ts +2 -0
  41. package/build/ts/health/__tests__/health.controller.test.d.ts.map +1 -0
  42. package/build/ts/health/__tests__/health.controller.test.js +28 -0
  43. package/build/ts/health/__tests__/health.controller.test.js.map +1 -0
  44. package/build/ts/health/__tests__/health.service.test.d.ts +2 -0
  45. package/build/ts/health/__tests__/health.service.test.d.ts.map +1 -0
  46. package/build/ts/health/__tests__/health.service.test.js +88 -0
  47. package/build/ts/health/__tests__/health.service.test.js.map +1 -0
  48. package/build/ts/health/health.controller.d.ts +16 -0
  49. package/build/ts/health/health.controller.d.ts.map +1 -0
  50. package/build/ts/health/health.controller.js +43 -0
  51. package/build/ts/health/health.controller.js.map +1 -0
  52. package/build/ts/health/health.module.d.ts +3 -0
  53. package/build/ts/health/health.module.d.ts.map +1 -0
  54. package/build/ts/health/health.module.js +22 -0
  55. package/build/ts/health/health.module.js.map +1 -0
  56. package/build/ts/health/health.service.d.ts +42 -0
  57. package/build/ts/health/health.service.d.ts.map +1 -0
  58. package/build/ts/health/health.service.js +182 -0
  59. package/build/ts/health/health.service.js.map +1 -0
  60. package/build/ts/health/types.d.ts +83 -0
  61. package/build/ts/health/types.d.ts.map +1 -0
  62. package/build/ts/health/types.js +2 -0
  63. package/build/ts/health/types.js.map +1 -0
  64. package/build/ts/proof/__tests__/proof.service.test.js +28 -54
  65. package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
  66. package/build/ts/redis/__tests__/redis.service.test.d.ts +2 -0
  67. package/build/ts/redis/__tests__/redis.service.test.d.ts.map +1 -0
  68. package/build/ts/redis/__tests__/redis.service.test.js +149 -0
  69. package/build/ts/redis/__tests__/redis.service.test.js.map +1 -0
  70. package/build/ts/redis/redis.module.d.ts +3 -0
  71. package/build/ts/redis/redis.module.d.ts.map +1 -0
  72. package/build/ts/redis/redis.module.js +18 -0
  73. package/build/ts/redis/redis.module.js.map +1 -0
  74. package/build/ts/redis/redis.service.d.ts +52 -0
  75. package/build/ts/redis/redis.service.d.ts.map +1 -0
  76. package/build/ts/redis/redis.service.js +97 -0
  77. package/build/ts/redis/redis.service.js.map +1 -0
  78. package/build/ts/redis/types.d.ts +54 -0
  79. package/build/ts/redis/types.d.ts.map +1 -0
  80. package/build/ts/redis/types.js +2 -0
  81. package/build/ts/redis/types.js.map +1 -0
  82. package/build/ts/redis/utils.d.ts +20 -0
  83. package/build/ts/redis/utils.d.ts.map +1 -0
  84. package/build/ts/redis/utils.js +27 -0
  85. package/build/ts/redis/utils.js.map +1 -0
  86. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js +2 -2
  87. package/build/ts/sessionKeys/__tests__/sessionKeys.controller.test.js.map +1 -1
  88. package/build/ts/subgraph/__tests__/subgraph.service.test.js +2 -3
  89. package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
  90. package/build/ts/subgraph/subgraph.service.d.ts +4 -0
  91. package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
  92. package/build/ts/subgraph/subgraph.service.js +16 -5
  93. package/build/ts/subgraph/subgraph.service.js.map +1 -1
  94. package/build/tsconfig.build.tsbuildinfo +1 -1
  95. package/package.json +24 -23
  96. package/build/tests/e2e.aa.test.d.ts +0 -2
  97. package/build/tests/e2e.aa.test.d.ts.map +0 -1
  98. package/build/tests/e2e.aa.test.js +0 -96
  99. package/build/tests/e2e.aa.test.js.map +0 -1
@@ -1,36 +1,30 @@
1
1
  import { Keypair, PrivateKey } from "@maci-protocol/domainobjs";
2
- import { Deployment, EMode, ProofGenerator } from "@maci-protocol/sdk";
2
+ import { Deployment, EMode } from "@maci-protocol/sdk";
3
3
  import dotenv from "dotenv";
4
4
  import { zeroAddress } from "viem";
5
5
  import { ErrorCodes, ESupportedNetworks } from "../../common";
6
+ import { getCoordinatorKeypair } from "../../common/coordinatorKeypair";
6
7
  import { FileService } from "../../file/file.service";
8
+ import { generateApproval } from "../../sessionKeys/__tests__/utils";
7
9
  import { SessionKeysService } from "../../sessionKeys/sessionKeys.service";
8
10
  import { ProofGeneratorService } from "../proof.service";
9
11
  dotenv.config();
10
- jest.mock("hardhat", () => ({
11
- network: {
12
- name: "localhost",
13
- config: {
14
- chain: { id: 0x1 },
15
- },
16
- },
17
- }));
18
- jest.mock("@maci-protocol/contracts", () => ({
19
- ...jest.requireActual("@maci-protocol/contracts"),
12
+ jest.mock("@maci-protocol/sdk", () => ({
13
+ ...jest.requireActual("@maci-protocol/sdk"),
20
14
  Deployment: {
21
15
  getInstance: jest.fn(),
22
16
  },
23
- ProofGenerator: jest.fn(),
17
+ getPoll: jest.fn().mockResolvedValue({
18
+ address: "0x123",
19
+ }),
20
+ generateProofs: jest.fn().mockResolvedValue({
21
+ processProofs: [1],
22
+ tallyProofs: [1],
23
+ tallyData: {},
24
+ }),
24
25
  }));
25
26
  describe("ProofGeneratorService", () => {
26
- const defaultProofArgs = {
27
- poll: 1,
28
- maciContractAddress: zeroAddress,
29
- mode: EMode.NON_QV,
30
- sessionKeyAddress: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e",
31
- approval: "0xB7f8BC63BbcaD18155201308C8f3540b07f84F5e",
32
- chain: ESupportedNetworks.LOCALHOST,
33
- };
27
+ let defaultProofArgs;
34
28
  let mockContract = {
35
29
  polls: jest.fn(),
36
30
  getMainRoot: jest.fn(),
@@ -39,18 +33,26 @@ describe("ProofGeneratorService", () => {
39
33
  stateMerged: jest.fn(),
40
34
  coordinatorPublicKey: jest.fn(),
41
35
  };
42
- let defaultProofGenerator = {
43
- generateMpProofs: jest.fn(),
44
- generateTallyProofs: jest.fn(),
45
- merge: jest.fn(),
46
- };
47
36
  const defaultDeploymentService = {
48
37
  setHre: jest.fn(),
49
38
  getDeployer: jest.fn(() => Promise.resolve({})),
50
39
  getContract: jest.fn(() => Promise.resolve(mockContract)),
51
40
  };
41
+ const coordinatorPublicKey = getCoordinatorKeypair().publicKey.asContractParam();
52
42
  const fileService = new FileService();
53
43
  const sessionKeysService = new SessionKeysService(fileService);
44
+ beforeAll(async () => {
45
+ const { sessionKeyAddress } = await sessionKeysService.generateSessionKey();
46
+ const approval = await generateApproval(sessionKeyAddress);
47
+ defaultProofArgs = {
48
+ poll: 1,
49
+ maciContractAddress: zeroAddress,
50
+ mode: EMode.NON_QV,
51
+ sessionKeyAddress,
52
+ approval,
53
+ chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
54
+ };
55
+ });
54
56
  beforeEach(() => {
55
57
  mockContract = {
56
58
  polls: jest.fn(() => Promise.resolve({ poll: zeroAddress.replace("0x0", "0x1"), messageProcessor: zeroAddress, tally: zeroAddress })),
@@ -58,47 +60,19 @@ describe("ProofGeneratorService", () => {
58
60
  treeDepths: jest.fn(() => Promise.resolve([1, 2, 3])),
59
61
  extContracts: jest.fn(() => Promise.resolve({ messageAq: zeroAddress })),
60
62
  stateMerged: jest.fn(() => Promise.resolve(true)),
61
- coordinatorPublicKey: jest.fn(() => Promise.resolve({
62
- x: 21424602586933317770306541383681754745261216801634012235464162098738462892814n,
63
- y: 11917647526382221762393892566678210317414189429046519403585863973939713533473n,
64
- })),
65
- };
66
- defaultProofGenerator = {
67
- generateMpProofs: jest.fn(() => Promise.resolve([1])),
68
- generateTallyProofs: jest.fn(() => Promise.resolve({ proofs: [1], tallyData: {} })),
69
- merge: jest.fn(() => Promise.resolve(true)),
63
+ coordinatorPublicKey: jest.fn(() => Promise.resolve(coordinatorPublicKey)),
70
64
  };
71
65
  Deployment.getInstance.mockReturnValue(defaultDeploymentService);
72
- ProofGenerator.mockReturnValue(defaultProofGenerator);
73
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
74
- // @ts-expect-error
75
- ProofGenerator.prepareState = jest.fn(() => Promise.resolve({
76
- polls: new Map([[1n, {}]]),
77
- }));
78
66
  });
79
67
  afterEach(() => {
80
68
  jest.clearAllMocks();
81
69
  });
82
- test("should throw error if state is not merged yet", async () => {
83
- mockContract.stateMerged.mockResolvedValue(false);
84
- const service = new ProofGeneratorService(fileService, sessionKeysService);
85
- await expect(service.generate(defaultProofArgs)).rejects.toThrow(ErrorCodes.NOT_MERGED_STATE_TREE.toString());
86
- });
87
70
  test("should throw error if private key is wrong", async () => {
88
71
  const keypair = new Keypair(new PrivateKey(0n));
89
72
  mockContract.coordinatorPublicKey.mockResolvedValue(keypair.publicKey.asContractParam());
90
73
  const service = new ProofGeneratorService(fileService, sessionKeysService);
91
74
  await expect(service.generate(defaultProofArgs)).rejects.toThrow(ErrorCodes.PRIVATE_KEY_MISMATCH.toString());
92
75
  });
93
- test("should throw error if poll is not found", async () => {
94
- const service = new ProofGeneratorService(fileService, sessionKeysService);
95
- await expect(service.generate({ ...defaultProofArgs, poll: 2 })).rejects.toThrow(ErrorCodes.POLL_NOT_FOUND.toString());
96
- });
97
- test("should throw error if poll is not found in maci contract", async () => {
98
- mockContract.polls.mockResolvedValue({ poll: zeroAddress });
99
- const service = new ProofGeneratorService(fileService, sessionKeysService);
100
- await expect(service.generate({ ...defaultProofArgs, poll: 2 })).rejects.toThrow(ErrorCodes.POLL_NOT_FOUND.toString());
101
- });
102
76
  test("should generate proofs properly for NonQv", async () => {
103
77
  const service = new ProofGeneratorService(fileService, sessionKeysService);
104
78
  const data = await service.generate(defaultProofArgs);
@@ -1 +1 @@
1
- {"version":3,"file":"proof.service.test.js","sourceRoot":"","sources":["../../../../ts/proof/__tests__/proof.service.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"proof.service.test.js","sourceRoot":"","sources":["../../../../ts/proof/__tests__/proof.service.test.ts"],"names":[],"mappings":"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"}
@@ -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,149 @@
1
+ import { EMode } from "@maci-protocol/sdk";
2
+ import { createClient } from "@redis/client";
3
+ import { ESupportedNetworks } from "../../common";
4
+ import { RedisService } from "../redis.service";
5
+ import { getPollKeyFromObject } from "../utils";
6
+ const REDIS__GET_ALL_PREFIX = "*-test";
7
+ const scheduledPoll = {
8
+ maciAddress: "0xb83074Ac11fc569AC12F1b7D0C0a6809c3dc355b",
9
+ pollId: "5",
10
+ mode: EMode.NON_QV,
11
+ chain: ESupportedNetworks.OPTIMISM_SEPOLIA,
12
+ endDate: 1752534000,
13
+ deploymentBlockNumber: 1,
14
+ merged: false,
15
+ proofsGenerated: false,
16
+ };
17
+ jest.mock("@redis/client", () => {
18
+ const mockRedisClient = {
19
+ connect: jest.fn().mockResolvedValue(undefined),
20
+ set: jest.fn().mockResolvedValue("OK"),
21
+ get: jest.fn().mockResolvedValue(null),
22
+ scan: jest.fn().mockResolvedValue({ cursor: "0", keys: ["1", "2", "3"] }),
23
+ del: jest.fn().mockResolvedValue(1),
24
+ quit: jest.fn().mockResolvedValue("OK"),
25
+ isOpen: true,
26
+ };
27
+ return {
28
+ createClient: jest.fn(() => mockRedisClient),
29
+ };
30
+ });
31
+ describe("RedisService", () => {
32
+ let service;
33
+ let mockRedisClient;
34
+ beforeAll(async () => {
35
+ service = new RedisService();
36
+ await service.onModuleInit();
37
+ mockRedisClient = createClient();
38
+ });
39
+ afterAll(() => {
40
+ jest.clearAllMocks();
41
+ });
42
+ it("should connect to Redis without issues", () => {
43
+ expect(service.isOpen()).toBe(true);
44
+ });
45
+ it("should set and get a value, and parse it as IScheduledPoll", async () => {
46
+ const key = getPollKeyFromObject(scheduledPoll, true);
47
+ const value = JSON.stringify(scheduledPoll);
48
+ await service.set(key, value);
49
+ mockRedisClient.get.mockResolvedValueOnce(value);
50
+ const stored = await service.get(key);
51
+ expect(stored).not.toBeNull();
52
+ const parsed = JSON.parse(stored);
53
+ expect(parsed).toEqual(scheduledPoll);
54
+ });
55
+ it("should return null when non-existent key is requested", async () => {
56
+ const nonExistentKey = "non-existent-key";
57
+ const result = await service.get(nonExistentKey);
58
+ expect(result).toBeNull();
59
+ });
60
+ it("should set and get multiple values", async () => {
61
+ const pollOne = { ...scheduledPoll };
62
+ pollOne.pollId = "1";
63
+ const pollKeyOne = getPollKeyFromObject(pollOne, true);
64
+ await service.set(pollKeyOne, JSON.stringify(pollOne));
65
+ mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollOne));
66
+ const pollTwo = { ...scheduledPoll };
67
+ pollTwo.pollId = "2";
68
+ const pollKeyTwo = getPollKeyFromObject(pollTwo, true);
69
+ await service.set(pollKeyTwo, JSON.stringify(pollTwo));
70
+ mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollTwo));
71
+ const pollThree = { ...scheduledPoll };
72
+ pollThree.pollId = "3";
73
+ const pollKeyThree = getPollKeyFromObject(pollThree, true);
74
+ await service.set(pollKeyThree, JSON.stringify(pollThree));
75
+ mockRedisClient.get.mockResolvedValueOnce(JSON.stringify(pollThree));
76
+ const [storedPollOne, storedPollTwo, storedPollThree] = await Promise.all([
77
+ service.get(pollKeyOne),
78
+ service.get(pollKeyTwo),
79
+ service.get(pollKeyThree),
80
+ ]);
81
+ expect(pollOne).toEqual(JSON.parse(storedPollOne || "{}"));
82
+ expect(pollTwo).toEqual(JSON.parse(storedPollTwo || "{}"));
83
+ expect(pollThree).toEqual(JSON.parse(storedPollThree || "{}"));
84
+ });
85
+ it("should retrieve all values using getAll", async () => {
86
+ const pollOne = { ...scheduledPoll };
87
+ pollOne.pollId = "1";
88
+ const pollKeyOne = getPollKeyFromObject(pollOne, true);
89
+ await service.set(pollKeyOne, JSON.stringify(pollOne));
90
+ const pollTwo = { ...scheduledPoll };
91
+ pollTwo.pollId = "2";
92
+ const pollKeyTwo = getPollKeyFromObject(pollTwo, true);
93
+ await service.set(pollKeyTwo, JSON.stringify(pollTwo));
94
+ const pollThree = { ...scheduledPoll };
95
+ pollThree.pollId = "3";
96
+ const pollKeyThree = getPollKeyFromObject(pollThree, true);
97
+ await service.set(pollKeyThree, JSON.stringify(pollThree));
98
+ mockRedisClient.get.mockImplementation(async (key) => {
99
+ if (["1", "2", "3"].includes(String(key))) {
100
+ return Promise.resolve("{}");
101
+ }
102
+ return Promise.resolve(null);
103
+ });
104
+ const all = await service.getAll(REDIS__GET_ALL_PREFIX);
105
+ expect(all.length).toBe(3);
106
+ });
107
+ it("should delete a value and return one as confirmation", async () => {
108
+ const key = "delete-me";
109
+ await service.set(key, '{"bye":"now"}');
110
+ const deleted = await service.delete(key);
111
+ const value = await service.get(key);
112
+ expect(deleted).toBe(1);
113
+ expect(value).toBeNull();
114
+ });
115
+ it("should not throw and return zero when deleting non-existent value", async () => {
116
+ mockRedisClient.del.mockResolvedValueOnce(0);
117
+ const key = "non-existent-key";
118
+ const deleted = await service.delete(key);
119
+ expect(deleted).toBe(0);
120
+ });
121
+ it("should update a value using set with same key", async () => {
122
+ const key = getPollKeyFromObject(scheduledPoll, true);
123
+ const valuePoll = JSON.stringify(scheduledPoll);
124
+ await service.set(key, valuePoll);
125
+ const updatedPoll = { ...scheduledPoll, endDate: 1 };
126
+ const updatedPollValue = JSON.stringify(updatedPoll);
127
+ await service.set(key, updatedPollValue);
128
+ mockRedisClient.get.mockResolvedValueOnce(updatedPollValue);
129
+ const stored = await service.get(key);
130
+ const parsed = JSON.parse(stored);
131
+ expect(parsed.endDate).toBe(updatedPoll.endDate);
132
+ });
133
+ it("should return production key name when test is not specified", () => {
134
+ const originalEnv = process.env.NODE_ENV;
135
+ process.env.NODE_ENV = "production";
136
+ try {
137
+ const key = getPollKeyFromObject(scheduledPoll, false);
138
+ expect(key).toBe(`${scheduledPoll.chain}-${scheduledPoll.maciAddress}-poll-${scheduledPoll.pollId}`);
139
+ }
140
+ finally {
141
+ process.env.NODE_ENV = originalEnv;
142
+ }
143
+ });
144
+ it("should return test key name when test is specified", () => {
145
+ const key = getPollKeyFromObject(scheduledPoll, true);
146
+ expect(key).toBe(`${scheduledPoll.chain}-${scheduledPoll.maciAddress}-poll-${scheduledPoll.pollId}-test`);
147
+ });
148
+ });
149
+ //# 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,52 @@
1
+ import { OnModuleInit } from "@nestjs/common";
2
+ /**
3
+ * Redis service to interact with the Redis database.
4
+ */
5
+ export declare class RedisService implements OnModuleInit {
6
+ /**
7
+ * Client instance used to interact with the Redis database.
8
+ */
9
+ private client;
10
+ /**
11
+ * Create a new instance of the RedisService.
12
+ * The Redis configuration is set up here
13
+ */
14
+ constructor();
15
+ /**
16
+ * Initializes the Redis client connection when the module has been uploaded.
17
+ * @dev it is a lifecycle hook provided by NestJS that is called after all dependencies
18
+ * are injected and the module is fully initialized.
19
+ * This ensures your service is ready and all dependencies are available.
20
+ */
21
+ onModuleInit(): Promise<void>;
22
+ /**
23
+ * Saves a new key-value pair in Redis.
24
+ * @param key key for the Redis entry
25
+ * @param value value to be stored in Redis
26
+ */
27
+ set(key: string, value: string): Promise<void>;
28
+ /**
29
+ * Retrieves a value from Redis by its key.
30
+ * @param key key for the Redis entry
31
+ * @returns the value stored as string in Redis or null if the key does not exist
32
+ */
33
+ get(key: string): Promise<string | null>;
34
+ /**
35
+ * Retrieves all keys from Redis that match a specific pattern.
36
+ * @param match optional pattern to match keys in Redis
37
+ * @dev if no match is provided, it will return all keys
38
+ * @returns the array of string values stored in Redis that match the pattern
39
+ */
40
+ getAll(match?: string): Promise<string[]>;
41
+ /**
42
+ * Deletes a key from Redis.
43
+ * @param key key to be deleted from Redis
44
+ */
45
+ delete(key: string): Promise<number>;
46
+ /**
47
+ * Check if the connection to Redis is open
48
+ * @return true if the connection is open, false otherwise
49
+ */
50
+ isOpen(): boolean;
51
+ }
52
+ //# sourceMappingURL=redis.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.d.ts","sourceRoot":"","sources":["../../../ts/redis/redis.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG1D;;GAEG;AACH,qBACa,YAAa,YAAW,YAAY;IAC/C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAkB;IAEhC;;;OAGG;;IAQH;;;;;OAKG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpD;;;;OAIG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAI9C;;;;;OAKG;IACG,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB/C;;;OAGG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1C;;;OAGG;IACH,MAAM,IAAI,OAAO;CAGlB"}
@@ -0,0 +1,97 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Injectable } from "@nestjs/common";
11
+ import { createClient } from "@redis/client";
12
+ /**
13
+ * Redis service to interact with the Redis database.
14
+ */
15
+ let RedisService = class RedisService {
16
+ /**
17
+ * Client instance used to interact with the Redis database.
18
+ */
19
+ client;
20
+ /**
21
+ * Create a new instance of the RedisService.
22
+ * The Redis configuration is set up here
23
+ */
24
+ constructor() {
25
+ this.client = createClient({
26
+ url: `redis://${process.env.COORDINATOR_REDIS_HOST}:${process.env.COORDINATOR_REDIS_PORT}`,
27
+ disableOfflineQueue: true,
28
+ });
29
+ }
30
+ /**
31
+ * Initializes the Redis client connection when the module has been uploaded.
32
+ * @dev it is a lifecycle hook provided by NestJS that is called after all dependencies
33
+ * are injected and the module is fully initialized.
34
+ * This ensures your service is ready and all dependencies are available.
35
+ */
36
+ async onModuleInit() {
37
+ await this.client.connect();
38
+ }
39
+ /**
40
+ * Saves a new key-value pair in Redis.
41
+ * @param key key for the Redis entry
42
+ * @param value value to be stored in Redis
43
+ */
44
+ async set(key, value) {
45
+ // we are not using @redis/json because we dont need complex search capabilities
46
+ // we store a string (lightweight) and parse it to use the object
47
+ await this.client.set(key, value);
48
+ }
49
+ /**
50
+ * Retrieves a value from Redis by its key.
51
+ * @param key key for the Redis entry
52
+ * @returns the value stored as string in Redis or null if the key does not exist
53
+ */
54
+ async get(key) {
55
+ return this.client.get(key);
56
+ }
57
+ /**
58
+ * Retrieves all keys from Redis that match a specific pattern.
59
+ * @param match optional pattern to match keys in Redis
60
+ * @dev if no match is provided, it will return all keys
61
+ * @returns the array of string values stored in Redis that match the pattern
62
+ */
63
+ async getAll(match) {
64
+ let result = [];
65
+ let currentCursor = "0";
66
+ do {
67
+ // using a cursor is recommended to be use in production environment
68
+ // eslint-disable-next-line no-await-in-loop
69
+ const { cursor, keys } = await this.client.scan(currentCursor, { MATCH: match || "*", COUNT: 100 });
70
+ // eslint-disable-next-line no-await-in-loop
71
+ const values = await Promise.all(keys.map((key) => this.get(key)));
72
+ result = result.concat(values.filter((value) => value !== null));
73
+ currentCursor = cursor;
74
+ } while (currentCursor !== "0");
75
+ return result;
76
+ }
77
+ /**
78
+ * Deletes a key from Redis.
79
+ * @param key key to be deleted from Redis
80
+ */
81
+ async delete(key) {
82
+ return this.client.del(key);
83
+ }
84
+ /**
85
+ * Check if the connection to Redis is open
86
+ * @return true if the connection is open, false otherwise
87
+ */
88
+ isOpen() {
89
+ return this.client.isOpen;
90
+ }
91
+ };
92
+ RedisService = __decorate([
93
+ Injectable(),
94
+ __metadata("design:paramtypes", [])
95
+ ], RedisService);
96
+ export { RedisService };
97
+ //# sourceMappingURL=redis.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.service.js","sourceRoot":"","sources":["../../../ts/redis/redis.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAmB,MAAM,eAAe,CAAC;AAE9D;;GAEG;AAEI,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB;;OAEG;IACK,MAAM,CAAkB;IAEhC;;;OAGG;IACH;QACE,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YACzB,GAAG,EAAE,WAAW,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE;YAC1F,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,YAAY;QAChB,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW,EAAE,KAAa;QAClC,gFAAgF;QAChF,iEAAiE;QACjE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,KAAc;QACzB,IAAI,MAAM,GAAa,EAAE,CAAC;QAC1B,IAAI,aAAa,GAAG,GAAG,CAAC;QAExB,GAAG,CAAC;YACF,oEAAoE;YACpE,4CAA4C;YAC5C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,KAAK,IAAI,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;YAEpG,4CAA4C;YAC5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACnE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC;YAEjE,aAAa,GAAG,MAAM,CAAC;QACzB,CAAC,QAAQ,aAAa,KAAK,GAAG,EAAE;QAEhC,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,MAAM;QACJ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC5B,CAAC;CACF,CAAA;AAvFY,YAAY;IADxB,UAAU,EAAE;;GACA,YAAY,CAuFxB"}
@@ -0,0 +1,54 @@
1
+ import type { ESupportedNetworks } from "../common";
2
+ import type { EMode } from "@maci-protocol/sdk";
3
+ /**
4
+ * Interface of the minimal properties to identify a scheduled poll
5
+ */
6
+ export interface IIdentityScheduledPoll {
7
+ /**
8
+ * Maci contract address
9
+ */
10
+ maciAddress: string;
11
+ /**
12
+ * Poll id (unique identifier)
13
+ */
14
+ pollId: string;
15
+ /**
16
+ * Chain in which the poll is deployed
17
+ */
18
+ chain: ESupportedNetworks;
19
+ }
20
+ /**
21
+ * Interface for scheduled polls stored in Redis
22
+ */
23
+ export interface IScheduledPoll extends IIdentityScheduledPoll {
24
+ /**
25
+ * Deployment block number
26
+ */
27
+ deploymentBlockNumber: number;
28
+ /**
29
+ * Voting mode
30
+ */
31
+ mode: EMode;
32
+ /**
33
+ * End date in seconds
34
+ */
35
+ endDate: number;
36
+ /**
37
+ * Whether the MACI contract's state root has been merged
38
+ */
39
+ merged: boolean;
40
+ /**
41
+ * Whether the proofs has been generated
42
+ */
43
+ proofsGenerated: boolean;
44
+ }
45
+ /**
46
+ * getPollKeyForRedis parameters
47
+ */
48
+ export interface IGetPollKeyForRedisParams extends IIdentityScheduledPoll {
49
+ /**
50
+ * Test environment flag (optional)
51
+ */
52
+ test?: boolean;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../ts/redis/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,sBAAsB;IAC5D;;OAEG;IACH,qBAAqB,EAAE,MAAM,CAAC;IAE9B;;OAEG;IACH,IAAI,EAAE,KAAK,CAAC;IAEZ;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,sBAAsB;IACvE;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../ts/redis/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import type { IGetPollKeyForRedisParams, IIdentityScheduledPoll } from "./types";
2
+ /**
3
+ * Generates a Redis key for a poll based on its attributes
4
+ *
5
+ * @param chain - chain where the poll is deployed
6
+ * @param maciAddress - maci contract where the poll was created
7
+ * @param pollId - poll ID
8
+ * @param test - Optional flag to indicate if this is a test environment
9
+ * @returns key for Redis
10
+ */
11
+ export declare const getPollKeyForRedis: ({ chain, maciAddress, pollId, test }: IGetPollKeyForRedisParams) => string;
12
+ /**
13
+ * Generates a Redis key for a poll object
14
+ *
15
+ * @param scheduledPoll - poll object to generate the key from
16
+ * @param test - Optional flag to indicate if this is a test environment
17
+ * @returns key for Redis
18
+ */
19
+ export declare const getPollKeyFromObject: (scheduledPoll: IIdentityScheduledPoll, test?: boolean) => string;
20
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../ts/redis/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAAI,sCAA8C,yBAAyB,KAAG,MAG5G,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,eAAe,sBAAsB,EAAE,OAAO,OAAO,KAAG,MAMzF,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Generates a Redis key for a poll based on its attributes
3
+ *
4
+ * @param chain - chain where the poll is deployed
5
+ * @param maciAddress - maci contract where the poll was created
6
+ * @param pollId - poll ID
7
+ * @param test - Optional flag to indicate if this is a test environment
8
+ * @returns key for Redis
9
+ */
10
+ export const getPollKeyForRedis = ({ chain, maciAddress, pollId, test = false }) => {
11
+ const isTest = test || process.env.NODE_ENV === "test";
12
+ return `${chain}-${maciAddress}-poll-${pollId}${isTest ? `-test` : ""}`;
13
+ };
14
+ /**
15
+ * Generates a Redis key for a poll object
16
+ *
17
+ * @param scheduledPoll - poll object to generate the key from
18
+ * @param test - Optional flag to indicate if this is a test environment
19
+ * @returns key for Redis
20
+ */
21
+ export const getPollKeyFromObject = (scheduledPoll, test) => getPollKeyForRedis({
22
+ chain: scheduledPoll.chain,
23
+ maciAddress: scheduledPoll.maciAddress,
24
+ pollId: scheduledPoll.pollId,
25
+ test,
26
+ });
27
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../ts/redis/utils.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAG,KAAK,EAA6B,EAAU,EAAE;IACpH,MAAM,MAAM,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;IACvD,OAAO,GAAG,KAAK,IAAI,WAAW,SAAS,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1E,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,aAAqC,EAAE,IAAc,EAAU,EAAE,CACpG,kBAAkB,CAAC;IACjB,KAAK,EAAE,aAAa,CAAC,KAAK;IAC1B,WAAW,EAAE,aAAa,CAAC,WAAW;IACtC,MAAM,EAAE,aAAa,CAAC,MAAM;IAC5B,IAAI;CACL,CAAC,CAAC"}