async refreshSession()

in src/providers/session.ts [72:112]


  async refreshSession(): Promise<void> {
    try {
      const session = await this.refresher();
      const now = Date.now() / 1000;
      const oldSessionAvailable = this.staleTimestamp > now;
      const oldSession = this.session;
      this.expirationTimestamp = parseUTC(session.expiration) / 1000;
      this.session = session;
      this.refreshFaliure = 0;
      this.refreshTimestamp();
      // 过期时间大于15分钟,不用管
      if (this.staleTimestamp > now) {
        return;
      }
      // 不足或等于15分钟,但未过期,下次会再次刷新
      if (now < (this.staleTimestamp  + this.staleTime)) {
        this.expirationTimestamp = now + this.staleTime;
      }
      // 已过期,看缓存,缓存若大于15分钟,返回缓存,若小于15分钟,则根据策略判断是立刻重试还是稍后重试
      if (now > (this.staleTimestamp  + this.staleTime)) {
        if(oldSessionAvailable) {
          this.session = oldSession;
          this.expirationTimestamp = parseUTC(oldSession.expiration) / 1000;
          this.refreshTimestamp();
          return;
        }
        const waitUntilNextRefresh = 50 + getRandomInt(20);
        this.expirationTimestamp = now + waitUntilNextRefresh + this.staleTime;
      }
    } catch(err) {
      if (!this.session) {
        throw err;
      }
      const now = Date.now() / 1000;
      if (now < this.staleTimestamp) {
        return;
      }
      this.refreshFaliure++;
      this.expirationTimestamp = this.jitterTime(now, 1, this.maxStaleFailureJitter()) + this.staleTime;
    }
  }