@maci-protocol/coordinator 0.0.0-ci.f1b50d5 → 0.0.0-ci.f2b591f

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 (142) hide show
  1. package/build/hardhat.config.cjs +2 -3
  2. package/build/hardhat.config.cjs.map +1 -1
  3. package/build/hardhat.config.d.cts +2 -4
  4. package/build/tests/e2e.deploy.test.js +7 -7
  5. package/build/tests/e2e.deploy.test.js.map +1 -1
  6. package/build/tests/e2e.redis.test.js +10 -11
  7. package/build/tests/e2e.redis.test.js.map +1 -1
  8. package/build/tests/utils.d.ts.map +1 -1
  9. package/build/tests/utils.js +3 -3
  10. package/build/tests/utils.js.map +1 -1
  11. package/build/ts/app.module.d.ts.map +1 -1
  12. package/build/ts/app.module.js +2 -0
  13. package/build/ts/app.module.js.map +1 -1
  14. package/build/ts/common/__tests__/common.test.js +38 -28
  15. package/build/ts/common/__tests__/common.test.js.map +1 -1
  16. package/build/ts/common/accountAbstraction.d.ts +5 -5
  17. package/build/ts/common/accountAbstraction.d.ts.map +1 -1
  18. package/build/ts/common/accountAbstraction.js +8 -8
  19. package/build/ts/common/accountAbstraction.js.map +1 -1
  20. package/build/ts/common/chain.d.ts +3 -3
  21. package/build/ts/common/chain.d.ts.map +1 -1
  22. package/build/ts/common/chain.js +8 -8
  23. package/build/ts/common/chain.js.map +1 -1
  24. package/build/ts/common/errors.d.ts +4 -1
  25. package/build/ts/common/errors.d.ts.map +1 -1
  26. package/build/ts/common/errors.js +3 -0
  27. package/build/ts/common/errors.js.map +1 -1
  28. package/build/ts/common/index.d.ts +0 -1
  29. package/build/ts/common/index.d.ts.map +1 -1
  30. package/build/ts/common/index.js +0 -1
  31. package/build/ts/common/index.js.map +1 -1
  32. package/build/ts/common/networks.d.ts +2 -21
  33. package/build/ts/common/networks.d.ts.map +1 -1
  34. package/build/ts/common/networks.js +39 -48
  35. package/build/ts/common/networks.js.map +1 -1
  36. package/build/ts/deployer/__tests__/deployer.controller.test.js +17 -19
  37. package/build/ts/deployer/__tests__/deployer.controller.test.js.map +1 -1
  38. package/build/ts/deployer/__tests__/deployer.service.test.js +136 -114
  39. package/build/ts/deployer/__tests__/deployer.service.test.js.map +1 -1
  40. package/build/ts/deployer/deployer.service.d.ts +4 -5
  41. package/build/ts/deployer/deployer.service.d.ts.map +1 -1
  42. package/build/ts/deployer/deployer.service.js +2 -2
  43. package/build/ts/deployer/deployer.service.js.map +1 -1
  44. package/build/ts/deployer/dto.d.ts +3 -3
  45. package/build/ts/deployer/dto.d.ts.map +1 -1
  46. package/build/ts/deployer/dto.js +5 -5
  47. package/build/ts/deployer/dto.js.map +1 -1
  48. package/build/ts/deployer/types.d.ts +3 -4
  49. package/build/ts/deployer/types.d.ts.map +1 -1
  50. package/build/ts/file/file.service.d.ts.map +1 -1
  51. package/build/ts/file/file.service.js +2 -1
  52. package/build/ts/file/file.service.js.map +1 -1
  53. package/build/ts/health/__tests__/health.controller.test.js +34 -10
  54. package/build/ts/health/__tests__/health.controller.test.js.map +1 -1
  55. package/build/ts/health/__tests__/health.service.test.js +34 -21
  56. package/build/ts/health/__tests__/health.service.test.js.map +1 -1
  57. package/build/ts/health/health.service.d.ts.map +1 -1
  58. package/build/ts/health/health.service.js +23 -29
  59. package/build/ts/health/health.service.js.map +1 -1
  60. package/build/ts/health/types.d.ts +9 -5
  61. package/build/ts/health/types.d.ts.map +1 -1
  62. package/build/ts/jest/__mocks__/@excubiae/contracts.d.ts +3 -0
  63. package/build/ts/jest/__mocks__/@excubiae/contracts.d.ts.map +1 -0
  64. package/build/ts/jest/__mocks__/@excubiae/contracts.js +4 -0
  65. package/build/ts/jest/__mocks__/@excubiae/contracts.js.map +1 -0
  66. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.d.ts +11 -0
  67. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.d.ts.map +1 -0
  68. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.js +12 -0
  69. package/build/ts/jest/__mocks__/@openzeppelin/merkle-tree.js.map +1 -0
  70. package/build/ts/proof/__tests__/proof.controller.test.js +3 -4
  71. package/build/ts/proof/__tests__/proof.controller.test.js.map +1 -1
  72. package/build/ts/proof/__tests__/proof.gateway.test.js +2 -3
  73. package/build/ts/proof/__tests__/proof.gateway.test.js.map +1 -1
  74. package/build/ts/proof/__tests__/proof.service.test.js +4 -9
  75. package/build/ts/proof/__tests__/proof.service.test.js.map +1 -1
  76. package/build/ts/proof/dto.d.ts +4 -5
  77. package/build/ts/proof/dto.d.ts.map +1 -1
  78. package/build/ts/proof/dto.js +7 -8
  79. package/build/ts/proof/dto.js.map +1 -1
  80. package/build/ts/proof/proof.service.d.ts.map +1 -1
  81. package/build/ts/proof/proof.service.js.map +1 -1
  82. package/build/ts/proof/types.d.ts +4 -5
  83. package/build/ts/proof/types.d.ts.map +1 -1
  84. package/build/ts/proof/types.js.map +1 -1
  85. package/build/ts/redis/__tests__/redis.service.test.js +12 -13
  86. package/build/ts/redis/__tests__/redis.service.test.js.map +1 -1
  87. package/build/ts/redis/types.d.ts +2 -3
  88. package/build/ts/redis/types.d.ts.map +1 -1
  89. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts +2 -0
  90. package/build/ts/scheduler/__tests__/scheduler.controller.test.d.ts.map +1 -0
  91. package/build/ts/scheduler/__tests__/scheduler.controller.test.js +62 -0
  92. package/build/ts/scheduler/__tests__/scheduler.controller.test.js.map +1 -0
  93. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts +2 -0
  94. package/build/ts/scheduler/__tests__/scheduler.service.test.d.ts.map +1 -0
  95. package/build/ts/scheduler/__tests__/scheduler.service.test.js +264 -0
  96. package/build/ts/scheduler/__tests__/scheduler.service.test.js.map +1 -0
  97. package/build/ts/scheduler/dto.d.ts +41 -0
  98. package/build/ts/scheduler/dto.d.ts.map +1 -0
  99. package/build/ts/scheduler/dto.js +115 -0
  100. package/build/ts/scheduler/dto.js.map +1 -0
  101. package/build/ts/scheduler/scheduler.controller.d.ts +32 -0
  102. package/build/ts/scheduler/scheduler.controller.d.ts.map +1 -0
  103. package/build/ts/scheduler/scheduler.controller.js +111 -0
  104. package/build/ts/scheduler/scheduler.controller.js.map +1 -0
  105. package/build/ts/scheduler/scheduler.module.d.ts +3 -0
  106. package/build/ts/scheduler/scheduler.module.d.ts.map +1 -0
  107. package/build/ts/scheduler/scheduler.module.js +23 -0
  108. package/build/ts/scheduler/scheduler.module.js.map +1 -0
  109. package/build/ts/scheduler/scheduler.service.d.ts +63 -0
  110. package/build/ts/scheduler/scheduler.service.d.ts.map +1 -0
  111. package/build/ts/scheduler/scheduler.service.js +239 -0
  112. package/build/ts/scheduler/scheduler.service.js.map +1 -0
  113. package/build/ts/scheduler/types.d.ts +61 -0
  114. package/build/ts/scheduler/types.d.ts.map +1 -0
  115. package/build/ts/scheduler/types.js +2 -0
  116. package/build/ts/scheduler/types.js.map +1 -0
  117. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js +34 -19
  118. package/build/ts/sessionKeys/__tests__/sessionKeys.service.test.js.map +1 -1
  119. package/build/ts/sessionKeys/__tests__/utils.d.ts.map +1 -1
  120. package/build/ts/sessionKeys/__tests__/utils.js +5 -6
  121. package/build/ts/sessionKeys/__tests__/utils.js.map +1 -1
  122. package/build/ts/sessionKeys/sessionKeys.service.d.ts +4 -3
  123. package/build/ts/sessionKeys/sessionKeys.service.d.ts.map +1 -1
  124. package/build/ts/sessionKeys/sessionKeys.service.js +1 -2
  125. package/build/ts/sessionKeys/sessionKeys.service.js.map +1 -1
  126. package/build/ts/subgraph/__tests__/subgraph.controller.test.js +2 -2
  127. package/build/ts/subgraph/__tests__/subgraph.controller.test.js.map +1 -1
  128. package/build/ts/subgraph/__tests__/subgraph.gateway.test.js +2 -2
  129. package/build/ts/subgraph/__tests__/subgraph.gateway.test.js.map +1 -1
  130. package/build/ts/subgraph/__tests__/subgraph.service.test.js +3 -2
  131. package/build/ts/subgraph/__tests__/subgraph.service.test.js.map +1 -1
  132. package/build/ts/subgraph/dto.d.ts +2 -2
  133. package/build/ts/subgraph/dto.d.ts.map +1 -1
  134. package/build/ts/subgraph/dto.js +3 -3
  135. package/build/ts/subgraph/dto.js.map +1 -1
  136. package/build/ts/subgraph/subgraph.service.d.ts.map +1 -1
  137. package/build/ts/subgraph/subgraph.service.js +3 -2
  138. package/build/ts/subgraph/subgraph.service.js.map +1 -1
  139. package/build/ts/subgraph/types.d.ts +2 -2
  140. package/build/ts/subgraph/types.d.ts.map +1 -1
  141. package/build/tsconfig.build.tsbuildinfo +1 -1
  142. package/package.json +28 -21
@@ -0,0 +1,264 @@
1
+ import { EMode, ESupportedChains, getPoll, isTallied } from "@maci-protocol/sdk";
2
+ import { SchedulerRegistry } from "@nestjs/schedule";
3
+ import { ErrorCodes } from "../../common";
4
+ import { FileService } from "../../file/file.service";
5
+ import { getPollKeyFromObject } from "../../redis/utils";
6
+ import { SessionKeysService } from "../../sessionKeys/sessionKeys.service";
7
+ import { SchedulerService } from "../scheduler.service";
8
+ const scheduledPoll = {
9
+ maciAddress: "0x0",
10
+ pollId: "5",
11
+ mode: EMode.NON_QV,
12
+ chain: ESupportedChains.OptimismSepolia,
13
+ endDate: 1752534000,
14
+ deploymentBlockNumber: 1,
15
+ merged: false,
16
+ proofsGenerated: false,
17
+ };
18
+ jest.mock("@maci-protocol/sdk", () => ({
19
+ ...jest.requireActual("@maci-protocol/sdk"),
20
+ getPoll: jest.fn().mockResolvedValue({
21
+ address: "0x123",
22
+ endDate: 1752534000,
23
+ isMerged: false,
24
+ }),
25
+ isTallied: jest.fn().mockResolvedValue(false),
26
+ }));
27
+ describe("SchedulerService", () => {
28
+ let fileService;
29
+ let sessionKeysService;
30
+ let redisService;
31
+ let schedulerRegistry;
32
+ let service;
33
+ beforeAll(async () => {
34
+ fileService = new FileService();
35
+ sessionKeysService = new SessionKeysService(fileService);
36
+ // Mock RedisService methods as needed
37
+ redisService = {
38
+ get: jest.fn().mockResolvedValue(JSON.stringify(scheduledPoll)),
39
+ set: jest.fn(),
40
+ delete: jest.fn(),
41
+ getAll: jest.fn().mockResolvedValue([]),
42
+ };
43
+ schedulerRegistry = new SchedulerRegistry();
44
+ service = new SchedulerService(sessionKeysService, redisService, schedulerRegistry);
45
+ await service.onModuleInit();
46
+ });
47
+ afterAll(() => {
48
+ jest.clearAllMocks();
49
+ });
50
+ afterEach(() => {
51
+ jest.clearAllMocks();
52
+ const timeouts = schedulerRegistry.getTimeouts();
53
+ // Clear all timeouts in the mock scheduler registry
54
+ timeouts.forEach((timeout) => {
55
+ if (timeout.includes("-test")) {
56
+ schedulerRegistry.deleteTimeout(timeout);
57
+ }
58
+ });
59
+ });
60
+ describe(`isPollScheduled`, () => {
61
+ test("should return true if poll is saved, scheduled and not tallied", async () => {
62
+ await service.registerPoll(scheduledPoll);
63
+ const isPollScheduled = await service.isPollScheduled(scheduledPoll);
64
+ expect(isPollScheduled.isScheduled).toBe(true);
65
+ });
66
+ test("should return false if poll is not saved", async () => {
67
+ redisService.get.mockResolvedValueOnce(null);
68
+ const isPollScheduled = await service.isPollScheduled(scheduledPoll);
69
+ expect(isPollScheduled.isScheduled).toBe(false);
70
+ });
71
+ test("should return false if poll is saved and timeout not scheduled", async () => {
72
+ await service.registerPoll(scheduledPoll);
73
+ schedulerRegistry.deleteTimeout(getPollKeyFromObject(scheduledPoll));
74
+ const isPollScheduled = await service.isPollScheduled(scheduledPoll);
75
+ expect(isPollScheduled.isScheduled).toBe(false);
76
+ });
77
+ test("should return false if poll is scheduled but not saved", async () => {
78
+ redisService.get.mockResolvedValueOnce(null);
79
+ const isPollScheduled = await service.isPollScheduled(scheduledPoll);
80
+ expect(isPollScheduled.isScheduled).toBe(false);
81
+ });
82
+ test("should throw an error if poll is already tallied", async () => {
83
+ await service.registerPoll(scheduledPoll);
84
+ getPoll.mockResolvedValueOnce({
85
+ isMerged: true,
86
+ });
87
+ isTallied.mockResolvedValueOnce(true);
88
+ await expect(service.isPollScheduled(scheduledPoll)).rejects.toThrow(ErrorCodes.POLL_ALREADY_TALLIED.toString());
89
+ });
90
+ });
91
+ describe("getPollFinalizationData", () => {
92
+ test("should return the end date and tallied status of a poll", async () => {
93
+ getPoll.mockResolvedValueOnce({
94
+ isMerged: false,
95
+ endDate: scheduledPoll.endDate,
96
+ });
97
+ isTallied.mockResolvedValueOnce(false);
98
+ const { endDate, isPollTallied } = await service.getPollFinalizationData({
99
+ maciAddress: scheduledPoll.maciAddress,
100
+ pollId: scheduledPoll.pollId,
101
+ chain: scheduledPoll.chain,
102
+ });
103
+ expect(endDate).toBe(scheduledPoll.endDate);
104
+ expect(isPollTallied).toBe(false);
105
+ });
106
+ test("should return isPollTallied as false if poll is not merged and is not tallied", async () => {
107
+ getPoll.mockResolvedValueOnce({
108
+ isMerged: false,
109
+ });
110
+ isTallied.mockResolvedValueOnce(false);
111
+ const { isPollTallied } = await service.getPollFinalizationData({
112
+ maciAddress: scheduledPoll.maciAddress,
113
+ pollId: scheduledPoll.pollId,
114
+ chain: scheduledPoll.chain,
115
+ });
116
+ expect(isPollTallied).toBe(false);
117
+ });
118
+ test("should return isPollTallied as false if poll is merged and is not tallied", async () => {
119
+ getPoll.mockResolvedValueOnce({
120
+ isMerged: true,
121
+ });
122
+ isTallied.mockResolvedValueOnce(false);
123
+ const { isPollTallied } = await service.getPollFinalizationData({
124
+ maciAddress: scheduledPoll.maciAddress,
125
+ pollId: scheduledPoll.pollId,
126
+ chain: scheduledPoll.chain,
127
+ });
128
+ expect(isPollTallied).toBe(false);
129
+ });
130
+ test("should return isPollTallied as false if poll is not merged and is tallied (it is impossible)", async () => {
131
+ getPoll.mockResolvedValueOnce({
132
+ isMerged: false,
133
+ });
134
+ isTallied.mockResolvedValueOnce(true);
135
+ const { isPollTallied } = await service.getPollFinalizationData({
136
+ maciAddress: scheduledPoll.maciAddress,
137
+ pollId: scheduledPoll.pollId,
138
+ chain: scheduledPoll.chain,
139
+ });
140
+ expect(isPollTallied).toBe(false);
141
+ });
142
+ });
143
+ describe("registerPoll", () => {
144
+ test("should register a poll for finalization", async () => {
145
+ const { isScheduled } = await service.registerPoll(scheduledPoll);
146
+ const isPollScheduled = await service.isPollScheduled(scheduledPoll);
147
+ const isPollTimeoutScheduled = schedulerRegistry.doesExist("timeout", getPollKeyFromObject(scheduledPoll));
148
+ expect(isScheduled).toBe(true);
149
+ expect(isPollScheduled.isScheduled).toBe(true);
150
+ expect(isPollTimeoutScheduled).toBe(true);
151
+ });
152
+ test("should register 2 polls and schedule their finalization", async () => {
153
+ const pollOne = { ...scheduledPoll, pollId: "1" };
154
+ const pollTwo = { ...scheduledPoll, pollId: "2" };
155
+ const { isScheduled: isScheduledOne } = await service.registerPoll(pollOne);
156
+ const { isScheduled: isScheduledTwo } = await service.registerPoll(pollTwo);
157
+ const [isPollScheduledOne, isPollScheduledTwo] = await Promise.all([
158
+ service.isPollScheduled(pollOne),
159
+ service.isPollScheduled(pollTwo),
160
+ ]);
161
+ const isPollOneTimeoutScheduled = schedulerRegistry.doesExist("timeout", getPollKeyFromObject(pollOne));
162
+ const isPollTwoTimeoutScheduled = schedulerRegistry.doesExist("timeout", getPollKeyFromObject(pollTwo));
163
+ expect(isScheduledOne).toBe(true);
164
+ expect(isScheduledTwo).toBe(true);
165
+ expect(isPollScheduledOne.isScheduled).toBe(true);
166
+ expect(isPollScheduledTwo.isScheduled).toBe(true);
167
+ expect(isPollOneTimeoutScheduled).toBe(true);
168
+ expect(isPollTwoTimeoutScheduled).toBe(true);
169
+ });
170
+ test("should schedule finalization after the poll has ended", async () => {
171
+ const endedPoll = { ...scheduledPoll, endDate: 1 };
172
+ const { isScheduled } = await service.registerPoll(endedPoll);
173
+ const isPollScheduled = await service.isPollScheduled(endedPoll);
174
+ const isPollTimeoutScheduled = schedulerRegistry.doesExist("timeout", getPollKeyFromObject(endedPoll));
175
+ expect(isScheduled).toBe(true);
176
+ expect(isPollScheduled.isScheduled).toBe(true);
177
+ expect(isPollTimeoutScheduled).toBe(true);
178
+ });
179
+ test("should throw an error if poll is already tallied", async () => {
180
+ getPoll.mockResolvedValueOnce({
181
+ isMerged: true,
182
+ });
183
+ isTallied.mockResolvedValueOnce(true);
184
+ await expect(service.registerPoll(scheduledPoll)).rejects.toThrow(ErrorCodes.POLL_ALREADY_TALLIED.toString());
185
+ });
186
+ test("should throw an error if poll is already scheduled", async () => {
187
+ await service.registerPoll(scheduledPoll);
188
+ await expect(service.registerPoll(scheduledPoll)).rejects.toThrow(ErrorCodes.POLL_ALREADY_SCHEDULED.toString());
189
+ });
190
+ });
191
+ describe("deleteScheduledPoll", () => {
192
+ test("should delete a scheduled poll", async () => {
193
+ await service.registerPoll(scheduledPoll);
194
+ const isPollScheduled = await service.isPollScheduled(scheduledPoll);
195
+ const { isScheduled } = await service.deleteScheduledPoll(scheduledPoll);
196
+ const isPollDeleted = await service.isPollScheduled(scheduledPoll);
197
+ expect(isPollScheduled.isScheduled).toBe(true);
198
+ expect(isScheduled).toBe(false);
199
+ expect(isPollDeleted.isScheduled).toBe(false);
200
+ });
201
+ test("should return isPollScheduled as false if poll was not scheduled", async () => {
202
+ const { isScheduled } = await service.deleteScheduledPoll(scheduledPoll);
203
+ expect(isScheduled).toBe(false);
204
+ });
205
+ });
206
+ describe("restoreTimeouts", () => {
207
+ const polls = [
208
+ { ...scheduledPoll, pollId: "1" },
209
+ { ...scheduledPoll, pollId: "2" },
210
+ { ...scheduledPoll, pollId: "3" },
211
+ ];
212
+ beforeEach(async () => {
213
+ await Promise.all([
214
+ service.registerPoll(polls[0]),
215
+ service.registerPoll(polls[1]),
216
+ service.registerPoll(polls[2]),
217
+ ]);
218
+ schedulerRegistry.deleteTimeout(getPollKeyFromObject(polls[0]));
219
+ schedulerRegistry.deleteTimeout(getPollKeyFromObject(polls[1]));
220
+ schedulerRegistry.deleteTimeout(getPollKeyFromObject(polls[2]));
221
+ redisService.getAll.mockResolvedValue(polls.map((poll) => getPollKeyFromObject(poll)));
222
+ redisService.get.mockImplementation((key) => {
223
+ const poll = polls.find((p) => getPollKeyFromObject(p) === key);
224
+ const result = poll ? JSON.stringify(poll) : null;
225
+ return Promise.resolve(result);
226
+ });
227
+ });
228
+ afterEach(() => {
229
+ jest.clearAllMocks();
230
+ getPoll.mockReset().mockResolvedValue({
231
+ address: "0x123",
232
+ endDate: 1752534000,
233
+ isMerged: false,
234
+ });
235
+ isTallied.mockReset().mockResolvedValue(false);
236
+ });
237
+ test("should restore scheduled polls from Redis", async () => {
238
+ await service.onModuleInit();
239
+ const timeouts = schedulerRegistry.getTimeouts();
240
+ timeouts.forEach((timeout, i) => {
241
+ expect(timeout).toBe(getPollKeyFromObject(polls[i]));
242
+ });
243
+ expect(timeouts.length).toBe(polls.length);
244
+ });
245
+ test("should not restore timeouts for tallied polls", async () => {
246
+ getPoll.mockImplementation(({ pollId }) => Promise.resolve({ isMerged: pollId === 2n }));
247
+ isTallied.mockImplementation(({ pollId }) => Promise.resolve(pollId === "2"));
248
+ await service.onModuleInit();
249
+ const timeouts = schedulerRegistry.getTimeouts();
250
+ expect(timeouts.length).toBe(polls.length - 1);
251
+ });
252
+ test("should not throw if Redis returns null for a key and should delete register", async () => {
253
+ redisService.get.mockImplementation((key) => {
254
+ const poll = polls.find((p) => getPollKeyFromObject(p) === key && key !== getPollKeyFromObject(polls[1])); // null to simulate missing poll 2 key
255
+ const result = poll ? JSON.stringify(poll) : null;
256
+ return Promise.resolve(result);
257
+ });
258
+ await service.onModuleInit();
259
+ const timeouts = schedulerRegistry.getTimeouts();
260
+ expect(timeouts.length).toBe(polls.length - 1);
261
+ });
262
+ });
263
+ });
264
+ //# sourceMappingURL=scheduler.service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.service.test.js","sourceRoot":"","sources":["../../../../ts/scheduler/__tests__/scheduler.service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { EMode, ESupportedChains } from "@maci-protocol/sdk";
2
+ import type { Hex } from "viem";
3
+ /**
4
+ * Data transfer object for scheduled poll
5
+ */
6
+ export declare class IdentityScheduledPollDto {
7
+ /**
8
+ * MACI contract address
9
+ */
10
+ maciAddress: Hex;
11
+ /**
12
+ * Poll id
13
+ */
14
+ pollId: number;
15
+ /**
16
+ * Chain Name
17
+ */
18
+ chain: ESupportedChains;
19
+ }
20
+ /**
21
+ * Data transfer object for registering a poll for finalization
22
+ */
23
+ export declare class SchedulePollWithSignerDto extends IdentityScheduledPollDto {
24
+ /**
25
+ * Deployment block number
26
+ */
27
+ deploymentBlockNumber: number;
28
+ /**
29
+ * Voting mode
30
+ */
31
+ mode: EMode;
32
+ /**
33
+ * Session key address for Account Abstraction signer
34
+ */
35
+ sessionKeyAddress?: Hex;
36
+ /**
37
+ * Approval for Account Abstraction signer
38
+ */
39
+ approval?: string;
40
+ }
41
+ //# sourceMappingURL=dto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.d.ts","sourceRoot":"","sources":["../../../ts/scheduler/dto.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAI7D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC;;GAEG;AACH,qBAAa,wBAAwB;IACnC;;OAEG;IAMH,WAAW,EAAG,GAAG,CAAC;IAElB;;OAEG;IAQH,MAAM,EAAG,MAAM,CAAC;IAEhB;;OAEG;IAMH,KAAK,EAAG,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,wBAAwB;IACrE;;OAEG;IAOH,qBAAqB,EAAG,MAAM,CAAC;IAE/B;;OAEG;IAOH,IAAI,EAAG,KAAK,CAAC;IAEb;;OAEG;IAQH,iBAAiB,CAAC,EAAE,GAAG,CAAC;IAExB;;OAEG;IAQH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,115 @@
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 { EMode, ESupportedChains } from "@maci-protocol/sdk";
11
+ import { ApiProperty } from "@nestjs/swagger";
12
+ import { IsEnum, IsEthereumAddress, IsInt, IsOptional, IsString, Min } from "class-validator";
13
+ /**
14
+ * Data transfer object for scheduled poll
15
+ */
16
+ export class IdentityScheduledPollDto {
17
+ /**
18
+ * MACI contract address
19
+ */
20
+ maciAddress;
21
+ /**
22
+ * Poll id
23
+ */
24
+ pollId;
25
+ /**
26
+ * Chain Name
27
+ */
28
+ chain;
29
+ }
30
+ __decorate([
31
+ ApiProperty({
32
+ description: "MACI contract address",
33
+ type: String,
34
+ }),
35
+ IsEthereumAddress(),
36
+ __metadata("design:type", String)
37
+ ], IdentityScheduledPollDto.prototype, "maciAddress", void 0);
38
+ __decorate([
39
+ ApiProperty({
40
+ description: "Poll id",
41
+ minimum: 0,
42
+ type: Number,
43
+ }),
44
+ IsInt(),
45
+ Min(0),
46
+ __metadata("design:type", Number)
47
+ ], IdentityScheduledPollDto.prototype, "pollId", void 0);
48
+ __decorate([
49
+ ApiProperty({
50
+ description: "Chain to which to deploy the contract(s)",
51
+ enum: ESupportedChains,
52
+ }),
53
+ IsEnum(ESupportedChains),
54
+ __metadata("design:type", String)
55
+ ], IdentityScheduledPollDto.prototype, "chain", void 0);
56
+ /**
57
+ * Data transfer object for registering a poll for finalization
58
+ */
59
+ export class SchedulePollWithSignerDto extends IdentityScheduledPollDto {
60
+ /**
61
+ * Deployment block number
62
+ */
63
+ deploymentBlockNumber;
64
+ /**
65
+ * Voting mode
66
+ */
67
+ mode;
68
+ /**
69
+ * Session key address for Account Abstraction signer
70
+ */
71
+ sessionKeyAddress;
72
+ /**
73
+ * Approval for Account Abstraction signer
74
+ */
75
+ approval;
76
+ }
77
+ __decorate([
78
+ ApiProperty({
79
+ description: "Deployment block number",
80
+ type: Number,
81
+ }),
82
+ IsInt(),
83
+ Min(0),
84
+ __metadata("design:type", Number)
85
+ ], SchedulePollWithSignerDto.prototype, "deploymentBlockNumber", void 0);
86
+ __decorate([
87
+ ApiProperty({
88
+ description: "Voting mode",
89
+ enum: EMode,
90
+ type: String,
91
+ }),
92
+ IsEnum(EMode),
93
+ __metadata("design:type", Number)
94
+ ], SchedulePollWithSignerDto.prototype, "mode", void 0);
95
+ __decorate([
96
+ ApiProperty({
97
+ description: "Session key address",
98
+ type: String,
99
+ required: false,
100
+ }),
101
+ IsOptional(),
102
+ IsEthereumAddress(),
103
+ __metadata("design:type", String)
104
+ ], SchedulePollWithSignerDto.prototype, "sessionKeyAddress", void 0);
105
+ __decorate([
106
+ ApiProperty({
107
+ description: "Approval",
108
+ type: String,
109
+ required: false,
110
+ }),
111
+ IsOptional(),
112
+ IsString(),
113
+ __metadata("design:type", String)
114
+ ], SchedulePollWithSignerDto.prototype, "approval", void 0);
115
+ //# sourceMappingURL=dto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dto.js","sourceRoot":"","sources":["../../../ts/scheduler/dto.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAI9F;;GAEG;AACH,MAAM,OAAO,wBAAwB;IACnC;;OAEG;IAMH,WAAW,CAAO;IAElB;;OAEG;IAQH,MAAM,CAAU;IAEhB;;OAEG;IAMH,KAAK,CAAoB;CAC1B;AAvBC;IALC,WAAW,CAAC;QACX,WAAW,EAAE,uBAAuB;QACpC,IAAI,EAAE,MAAM;KACb,CAAC;IACD,iBAAiB,EAAE;;6DACF;AAYlB;IAPC,WAAW,CAAC;QACX,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,MAAM;KACb,CAAC;IACD,KAAK,EAAE;IACP,GAAG,CAAC,CAAC,CAAC;;wDACS;AAUhB;IALC,WAAW,CAAC;QACX,WAAW,EAAE,0CAA0C;QACvD,IAAI,EAAE,gBAAgB;KACvB,CAAC;IACD,MAAM,CAAC,gBAAgB,CAAC;;uDACA;AAG3B;;GAEG;AACH,MAAM,OAAO,yBAA0B,SAAQ,wBAAwB;IACrE;;OAEG;IAOH,qBAAqB,CAAU;IAE/B;;OAEG;IAOH,IAAI,CAAS;IAEb;;OAEG;IAQH,iBAAiB,CAAO;IAExB;;OAEG;IAQH,QAAQ,CAAU;CACnB;AApCC;IANC,WAAW,CAAC;QACX,WAAW,EAAE,yBAAyB;QACtC,IAAI,EAAE,MAAM;KACb,CAAC;IACD,KAAK,EAAE;IACP,GAAG,CAAC,CAAC,CAAC;;wEACwB;AAW/B;IANC,WAAW,CAAC;QACX,WAAW,EAAE,aAAa;QAC1B,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,MAAM;KACb,CAAC;IACD,MAAM,CAAC,KAAK,CAAC;;uDACD;AAYb;IAPC,WAAW,CAAC;QACX,WAAW,EAAE,qBAAqB;QAClC,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;KAChB,CAAC;IACD,UAAU,EAAE;IACZ,iBAAiB,EAAE;;oEACI;AAYxB;IAPC,WAAW,CAAC;QACX,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,KAAK;KAChB,CAAC;IACD,UAAU,EAAE;IACZ,QAAQ,EAAE;;2DACO"}
@@ -0,0 +1,32 @@
1
+ import type { IIsPollScheduledResponse } from "./types";
2
+ import { IdentityScheduledPollDto, SchedulePollWithSignerDto } from "./dto";
3
+ import { SchedulerService } from "./scheduler.service";
4
+ export declare class SchedulerController {
5
+ private readonly schedulerService;
6
+ /**
7
+ * Logger
8
+ */
9
+ private readonly logger;
10
+ /**
11
+ * Initialize SchedulerController
12
+ *
13
+ * @param schedulerService - scheduler service
14
+ */
15
+ constructor(schedulerService: SchedulerService);
16
+ /**
17
+ * Register poll for finalization
18
+ */
19
+ register(args: SchedulePollWithSignerDto): Promise<IIsPollScheduledResponse>;
20
+ /**
21
+ * Check if poll is scheduled for finalization
22
+ * @param args - poll id to check
23
+ * @returns true if poll is scheduled, false otherwise
24
+ */
25
+ status(args: IdentityScheduledPollDto): Promise<IIsPollScheduledResponse>;
26
+ /**
27
+ * Delete scheduled poll
28
+ * @param args - poll id to delete
29
+ */
30
+ delete(args: IdentityScheduledPollDto): Promise<IIsPollScheduledResponse>;
31
+ }
32
+ //# sourceMappingURL=scheduler.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.controller.d.ts","sourceRoot":"","sources":["../../../ts/scheduler/scheduler.controller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,wBAAwB,EAA+B,MAAM,SAAS,CAAC;AAGrF,OAAO,EAAE,wBAAwB,EAAE,yBAAyB,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,qBAEa,mBAAmB;IAWlB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAV7C;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwC;IAE/D;;;;OAIG;gBAC0B,gBAAgB,EAAE,gBAAgB;IAE/D;;OAEG;IAIG,QAAQ,CAAS,IAAI,EAAE,yBAAyB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAe1F;;;;OAIG;IAIG,MAAM,CAAS,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAYvF;;;OAGG;IAIG,MAAM,CAAS,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,wBAAwB,CAAC;CAWxF"}
@@ -0,0 +1,111 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ var SchedulerController_1;
14
+ import { Body, Controller, HttpException, HttpStatus, Logger, Post } from "@nestjs/common";
15
+ import { ApiResponse, ApiTags } from "@nestjs/swagger";
16
+ import { IdentityScheduledPollDto, SchedulePollWithSignerDto } from "./dto";
17
+ import { SchedulerService } from "./scheduler.service";
18
+ let SchedulerController = SchedulerController_1 = class SchedulerController {
19
+ schedulerService;
20
+ /**
21
+ * Logger
22
+ */
23
+ logger = new Logger(SchedulerController_1.name);
24
+ /**
25
+ * Initialize SchedulerController
26
+ *
27
+ * @param schedulerService - scheduler service
28
+ */
29
+ constructor(schedulerService) {
30
+ this.schedulerService = schedulerService;
31
+ }
32
+ /**
33
+ * Register poll for finalization
34
+ */
35
+ async register(args) {
36
+ const schedulePollWithSignerArgs = {
37
+ ...args,
38
+ pollId: args.pollId.toString(),
39
+ endDate: 0,
40
+ merged: false,
41
+ proofsGenerated: false,
42
+ };
43
+ return this.schedulerService.registerPoll(schedulePollWithSignerArgs).catch((error) => {
44
+ this.logger.error(`Error:`, error);
45
+ throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
46
+ });
47
+ }
48
+ /**
49
+ * Check if poll is scheduled for finalization
50
+ * @param args - poll id to check
51
+ * @returns true if poll is scheduled, false otherwise
52
+ */
53
+ async status(args) {
54
+ const identityScheduledPoll = {
55
+ ...args,
56
+ pollId: args.pollId.toString(),
57
+ };
58
+ return this.schedulerService.isPollScheduled(identityScheduledPoll).catch((error) => {
59
+ this.logger.error(`Error:`, error);
60
+ throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
61
+ });
62
+ }
63
+ /**
64
+ * Delete scheduled poll
65
+ * @param args - poll id to delete
66
+ */
67
+ async delete(args) {
68
+ const identityScheduledPoll = {
69
+ ...args,
70
+ pollId: args.pollId.toString(),
71
+ };
72
+ return this.schedulerService.deleteScheduledPoll(identityScheduledPoll).catch((error) => {
73
+ this.logger.error(`Error:`, error);
74
+ throw new HttpException(error.message, HttpStatus.BAD_REQUEST);
75
+ });
76
+ }
77
+ };
78
+ __decorate([
79
+ ApiResponse({ status: HttpStatus.OK, description: "Poll finalization has been scheduled" }),
80
+ ApiResponse({ status: HttpStatus.BAD_REQUEST, description: "BadRequest" }),
81
+ Post("register"),
82
+ __param(0, Body()),
83
+ __metadata("design:type", Function),
84
+ __metadata("design:paramtypes", [SchedulePollWithSignerDto]),
85
+ __metadata("design:returntype", Promise)
86
+ ], SchedulerController.prototype, "register", null);
87
+ __decorate([
88
+ ApiResponse({ status: HttpStatus.OK, description: "Poll finalization status" }),
89
+ ApiResponse({ status: HttpStatus.NOT_FOUND, description: "BadRequest" }),
90
+ Post("status"),
91
+ __param(0, Body()),
92
+ __metadata("design:type", Function),
93
+ __metadata("design:paramtypes", [IdentityScheduledPollDto]),
94
+ __metadata("design:returntype", Promise)
95
+ ], SchedulerController.prototype, "status", null);
96
+ __decorate([
97
+ ApiResponse({ status: HttpStatus.OK, description: "Poll finalization has been deleted" }),
98
+ ApiResponse({ status: HttpStatus.NOT_FOUND, description: "BadRequest" }),
99
+ Post("delete"),
100
+ __param(0, Body()),
101
+ __metadata("design:type", Function),
102
+ __metadata("design:paramtypes", [IdentityScheduledPollDto]),
103
+ __metadata("design:returntype", Promise)
104
+ ], SchedulerController.prototype, "delete", null);
105
+ SchedulerController = SchedulerController_1 = __decorate([
106
+ ApiTags("v1/scheduler"),
107
+ Controller("v1/scheduler"),
108
+ __metadata("design:paramtypes", [SchedulerService])
109
+ ], SchedulerController);
110
+ export { SchedulerController };
111
+ //# sourceMappingURL=scheduler.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.controller.js","sourceRoot":"","sources":["../../../ts/scheduler/scheduler.controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare class SchedulerModule {
2
+ }
3
+ //# sourceMappingURL=scheduler.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.module.d.ts","sourceRoot":"","sources":["../../../ts/scheduler/scheduler.module.ts"],"names":[],"mappings":"AASA,qBAKa,eAAe;CAAG"}
@@ -0,0 +1,23 @@
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 { ScheduleModule } from "@nestjs/schedule";
9
+ import { RedisModule } from "../redis/redis.module";
10
+ import { SessionKeysModule } from "../sessionKeys/sessionKeys.module";
11
+ import { SchedulerController } from "./scheduler.controller";
12
+ import { SchedulerService } from "./scheduler.service";
13
+ let SchedulerModule = class SchedulerModule {
14
+ };
15
+ SchedulerModule = __decorate([
16
+ Module({
17
+ imports: [SessionKeysModule, RedisModule, ScheduleModule.forRoot()],
18
+ providers: [SchedulerService],
19
+ controllers: [SchedulerController],
20
+ })
21
+ ], SchedulerModule);
22
+ export { SchedulerModule };
23
+ //# sourceMappingURL=scheduler.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.module.js","sourceRoot":"","sources":["../../../ts/scheduler/scheduler.module.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAOhD,IAAM,eAAe,GAArB,MAAM,eAAe;CAAG,CAAA;AAAlB,eAAe;IAL3B,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,iBAAiB,EAAE,WAAW,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC;QACnE,SAAS,EAAE,CAAC,gBAAgB,CAAC;QAC7B,WAAW,EAAE,CAAC,mBAAmB,CAAC;KACnC,CAAC;GACW,eAAe,CAAG"}