From 9d7076acc7e5bea6015bf90b6e9526508471cccb Mon Sep 17 00:00:00 2001 From: cedoor Date: Mon, 15 May 2023 15:35:53 +0100 Subject: [PATCH 1/2] feat(data): create function to check if a member exists re #321 --- packages/data/README.md | 6 ++++++ packages/data/src/subgraph.test.ts | 27 +++++++++++++++++++++++++++ packages/data/src/subgraph.ts | 26 ++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) diff --git a/packages/data/README.md b/packages/data/README.md index 0766b285b..d74f42e32 100644 --- a/packages/data/README.md +++ b/packages/data/README.md @@ -118,6 +118,12 @@ const group = await semaphoreSubgraph.getGroup("42") const { members, verifiedProofs } = semaphoreSubgraph.getGroup("42", { members: true, verifiedProofs: true }) ``` +\# **isGroupMember**(groupId: _string_, member: _string_): _Promise\_ + +```typescript +await semaphoreSubgraph.isGroupMember("42", "16948514235341957898454876473214737047419402240398321289450170535251226167324") +``` + \# **new Ethers**(networkOrEthereumURL: Network | string = "goerli", options: EthersOptions = {}): _SemaphoreEthers_ ```typescript diff --git a/packages/data/src/subgraph.test.ts b/packages/data/src/subgraph.test.ts index 390cf429f..83c825767 100644 --- a/packages/data/src/subgraph.test.ts +++ b/packages/data/src/subgraph.test.ts @@ -338,4 +338,31 @@ describe("SemaphoreSubgraph", () => { }) }) }) + + describe("# isGroupMember", () => { + it("Should throw an error if the member parameter type is wrong", async () => { + const fun = () => semaphore.isGroupMember("1", 1 as any) + + await expect(fun).rejects.toThrow("Parameter 'member' is not a string") + }) + + it("Should return true if a group member exist", async () => { + requestMocked.mockImplementationOnce(() => + Promise.resolve({ + groups: [ + { + id: "1" + } + ] + }) + ) + + const expectedValue = await semaphore.isGroupMember( + "1", + "19759682999141591121829027463339362582441675980174830329241909768001406603165" + ) + + expect(expectedValue).toBeTruthy() + }) + }) }) diff --git a/packages/data/src/subgraph.ts b/packages/data/src/subgraph.ts index 851f080e7..653d54474 100644 --- a/packages/data/src/subgraph.ts +++ b/packages/data/src/subgraph.ts @@ -195,4 +195,30 @@ export default class SemaphoreSubgraph { return groups[0] } + + /** + * Returns true if a member is part of group, and false otherwise. + * @param groupId Group id + * @param member Group member. + * @returns True if the member is part of the group, false otherwise. + */ + async isGroupMember(groupId: string, member: string): Promise { + checkParameter(groupId, "groupId", "string") + checkParameter(member, "member", "string") + + const config: AxiosRequestConfig = { + method: "post", + data: JSON.stringify({ + query: `{ + groups(where: { id: "${groupId}", members_: { identityCommitment: "${member}" } }) { + id + } + }` + }) + } + + const { groups } = await request(this._url, config) + + return groups.length !== 0 + } } From 2b430dace034499883d8e8867170b89cdfb0f245 Mon Sep 17 00:00:00 2001 From: cedoor Date: Mon, 15 May 2023 15:43:50 +0100 Subject: [PATCH 2/2] style(data): format code with prettier --- packages/data/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/data/README.md b/packages/data/README.md index d74f42e32..1944b7260 100644 --- a/packages/data/README.md +++ b/packages/data/README.md @@ -121,7 +121,10 @@ const { members, verifiedProofs } = semaphoreSubgraph.getGroup("42", { members: \# **isGroupMember**(groupId: _string_, member: _string_): _Promise\_ ```typescript -await semaphoreSubgraph.isGroupMember("42", "16948514235341957898454876473214737047419402240398321289450170535251226167324") +await semaphoreSubgraph.isGroupMember( + "42", + "16948514235341957898454876473214737047419402240398321289450170535251226167324" +) ``` \# **new Ethers**(networkOrEthereumURL: Network | string = "goerli", options: EthersOptions = {}): _SemaphoreEthers_