Skip to content

Commit

Permalink
Add a timeout to the registration's response
Browse files Browse the repository at this point in the history
  • Loading branch information
MichaelKim20 committed Sep 14, 2023
1 parent bf4f6e0 commit b161c4c
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 10 deletions.
29 changes: 25 additions & 4 deletions packages/client/src/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
}
27 changes: 23 additions & 4 deletions packages/client/src/internal/client/methods.ts
Original file line number Diff line number Diff line change
Expand Up @@ -162,25 +162,44 @@ export class ClientMethods extends ClientCore implements IClientMethods {
}

yield {
key: RegisterSteps.DOING,
key: RegisterSteps.SENDING,
requestId: response.data.requestId,
email,
address,
};

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,
Expand Down
4 changes: 2 additions & 2 deletions packages/client/test/methods.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down

0 comments on commit b161c4c

Please sign in to comment.