add(id, data, usesRemaining, nextReset) {
    if (this.tokenIds.has(id)) {
      return false
    }
    this.tokenIds.add(id)

    usesRemaining = usesRemaining === undefined ? this.batchSize : usesRemaining
    nextReset = nextReset === undefined ? Token.nextResetNever : nextReset

    const token = new Token(id, data, usesRemaining, nextReset)
    this.fifoQueue.push(token)

    return true
  }
Add a token with user-provided ID and data.

@param {string} id token string
@param {*} data reserved for future use
@param {number} usesRemaining
   Number of uses remaining until the token is exhausted
@param {number} nextReset
   Time when the token can be used again even if it's exhausted (unix timestamp)

@returns {boolean} Was the token added to the pool?