diff --git a/packages/waas/src/auth.ts b/packages/waas/src/auth.ts index 5ff4b606b..b10ac3873 100644 --- a/packages/waas/src/auth.ts +++ b/packages/waas/src/auth.ts @@ -18,7 +18,8 @@ import { SignedIntent, SignMessageArgs, getTimeDrift, - updateTimeDrift + updateTimeDrift, + getLocalTime } from './intents' import { FeeOptionsResponse, @@ -609,6 +610,7 @@ export class SequenceWaaS { session.clear() await this.waas.completeSignOut() await this.deviceName.set(undefined) + updateTimeDrift(undefined) } } @@ -672,9 +674,9 @@ export class SequenceWaaS { } async waitForSessionValid(timeout: number = 600000, pollRate: number = 2000) { - const start = Date.now() + const start = getLocalTime() - while (Date.now() - start < timeout) { + while (getLocalTime() - start < timeout) { if (await this.isSessionValid()) { return true } diff --git a/packages/waas/src/intents/base.ts b/packages/waas/src/intents/base.ts index 3076f4283..0f9caecbf 100644 --- a/packages/waas/src/intents/base.ts +++ b/packages/waas/src/intents/base.ts @@ -18,6 +18,10 @@ function isSessionStorageAvailable() { return typeof window === 'object' && typeof window.sessionStorage === 'object' } +export function getLocalTime() { + return new Date().getTime() +} + export function getTimeDrift() { if (isSessionStorageAvailable()) { const drift = window.sessionStorage.getItem(timeDriftKey) @@ -28,8 +32,16 @@ export function getTimeDrift() { return timeDrift } -export function updateTimeDrift(serverTime: Date) { - timeDrift = (Date.now() - serverTime.getTime()) / 1000 +export function updateTimeDrift(serverTime?: Date) { + if (!serverTime) { + timeDrift = undefined + if (isSessionStorageAvailable()) { + window.sessionStorage.removeItem(timeDriftKey) + } + return + } + + timeDrift = (getLocalTime() - serverTime.getTime()) / 1000 if (isSessionStorageAvailable()) { window.sessionStorage.setItem(timeDriftKey, timeDrift.toString(10)) } @@ -37,7 +49,7 @@ export function updateTimeDrift(serverTime: Date) { export function makeIntent(name: IntentName, lifespan: number, data: T): Intent { const drift = Math.abs(Math.floor(getTimeDrift() || 0)) - const issuedAt = Math.floor(Date.now() / 1000 - drift) + const issuedAt = Math.floor(getLocalTime() / 1000 - drift) const expiresAt = issuedAt + lifespan + 2 * drift return { version: VERSION, diff --git a/packages/waas/src/intents/utils.ts b/packages/waas/src/intents/utils.ts index 7a41587a5..2288e87b0 100644 --- a/packages/waas/src/intents/utils.ts +++ b/packages/waas/src/intents/utils.ts @@ -1,5 +1,7 @@ +import { getLocalTime } from "./base" + export function useLifespan(lifespan: number) { - const issuedAt = Math.floor(Date.now() / 1000) + const issuedAt = Math.floor(getLocalTime() / 1000) return { issuedAt, expiresAt: issuedAt + lifespan