/*
 * Copyright (C) Sapphirecode - All Rights Reserved
 * This file is part of Auth-Server-Helper which is released under MIT.
 * See file 'LICENSE' for full license details.
 * Created by Timo Hocker <timo@scode.ovh>, December 2020
 */

import { create_salt } from '@sapphirecode/crypto-helper';

class KeyStore {
  private _keys: Record<string, string> = {};

  public get_key (iat: number, valid_for = 0): string {
    const key = Math.floor (iat / 60)
      .toFixed (0);

    if (typeof this._keys[key] === 'string')
      return this._keys[key];

    if (valid_for !== 0) {
      if ((iat + valid_for) * 1000 < (new Date)
        .getTime ())
        throw new Error ('cannot create already expired keys');

      this._keys[key] = create_salt ();
      setTimeout (() => {
        delete this._keys[key];
      }, (valid_for + 5) * 1000);
      return this._keys[key];
    }

    throw new Error ('key could not be found');
  }
}

const ks: KeyStore = (new KeyStore);
export default ks;