From b161c4cb52ed535c4829114b4bfe2011e36c30d1 Mon Sep 17 00:00:00 2001 From: Michael Kim Date: Thu, 14 Sep 2023 10:17:48 +0900 Subject: [PATCH] Add a timeout to the registration's response --- packages/client/src/interfaces.ts | 29 ++++++++++++++++--- .../client/src/internal/client/methods.ts | 27 ++++++++++++++--- packages/client/test/methods.test.ts | 4 +-- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/packages/client/src/interfaces.ts b/packages/client/src/interfaces.ts index 5334061..c8db8eb 100644 --- a/packages/client/src/interfaces.ts +++ b/packages/client/src/interfaces.ts @@ -57,15 +57,36 @@ export enum AddRequestSteps { } export type RegisterValue = - | { key: RegisterSteps.DOING; requestId: string; email: string; address: string } + | { key: RegisterSteps.SENDING; requestId: string; email: string; address: string } | { - key: RegisterSteps.DONE; + key: RegisterSteps.REQUESTED; + requestId: string; + email: string; + address: string; + } + | { + key: RegisterSteps.ACCEPTED; + requestId: string; + email: string; + address: string; + } + | { + key: RegisterSteps.REJECTED; + requestId: string; + email: string; + address: string; + } + | { + key: RegisterSteps.TIMEOUT; requestId: string; email: string; address: string; }; export enum RegisterSteps { - DOING = "doing", - DONE = "done", + SENDING = "sending", + REQUESTED = "requested", + ACCEPTED = "accepted", + REJECTED = "rejected", + TIMEOUT = "timeout", } diff --git a/packages/client/src/internal/client/methods.ts b/packages/client/src/internal/client/methods.ts index 1b9e440..c03f209 100644 --- a/packages/client/src/internal/client/methods.ts +++ b/packages/client/src/internal/client/methods.ts @@ -162,7 +162,7 @@ export class ClientMethods extends ClientCore implements IClientMethods { } yield { - key: RegisterSteps.DOING, + key: RegisterSteps.SENDING, requestId: response.data.requestId, email, address, @@ -170,17 +170,36 @@ export class ClientMethods extends ClientCore implements IClientMethods { const start = ContractUtils.getTimeStamp(); let done = false; + let status: number = 0; while (!done) { - const status = await this.getRegisterStatus(response.data.requestId); - if (status !== 0 || ContractUtils.getTimeStamp() - start > 60) { + status = await this.getRegisterStatus(response.data.requestId); + if (status !== 0) { + done = true; + } else if (ContractUtils.getTimeStamp() - start > 60) { done = true; } else { await ContractUtils.delay(3000); } } + let key: RegisterSteps; + switch (status) { + case 0: + key = RegisterSteps.TIMEOUT; + break; + case 1: + key = RegisterSteps.REQUESTED; + break; + case 2: + key = RegisterSteps.ACCEPTED; + break; + default: + key = RegisterSteps.REJECTED; + break; + } + yield { - key: RegisterSteps.DONE, + key, requestId: response.data.requestId, email, address, diff --git a/packages/client/test/methods.test.ts b/packages/client/test/methods.test.ts index c991c1a..fc17523 100644 --- a/packages/client/test/methods.test.ts +++ b/packages/client/test/methods.test.ts @@ -96,12 +96,12 @@ describe("SDK Client", () => { it("register", async () => { for await (const step of client.methods.register(userEmail)) { switch (step.key) { - case RegisterSteps.DOING: + case RegisterSteps.SENDING: expect(step.requestId).toMatch(/^0x[A-Fa-f0-9]{64}$/i); expect(step.email).toEqual(userEmail); expect(step.address).toEqual(await user2.getAddress()); break; - case RegisterSteps.DONE: + case RegisterSteps.REQUESTED: expect(step.requestId).toMatch(/^0x[A-Fa-f0-9]{64}$/i); expect(step.email).toEqual(userEmail); expect(step.address).toEqual(await user2.getAddress());