export interface ITokenizer { create(): Promise; hash(plaintoken: string): Promise; check(actual: string, received: string): Promise; } export interface ITokenProps { id: string; tokenable_type: string; tokenable_id: string; name: string; token: string; abilities: Array; metadata: Record; last_used_at: Date; created_at: Date; updated_at: Date; } export type TokenRepoFind = { id: string; } | { token: string; } | { id: string; token: string; }; export interface ITokenRepo { create(token: Partial): Promise; find(props: TokenRepoFind): Promise; used(props: TokenRepoFind): Promise; delete(props: TokenRepoFind): Promise; } export interface IIdAdapter { from(id: string): any; tokenable?(id: any): any; } export interface IRedisIdAdapter extends Omit { create(): Promise; } export interface ITokenableContext { create(): IToken; } export interface TokenizedContext { token(): Promise; } export interface IToken { plaintoken: string; props: ITokenProps; } export interface IHasToken extends IToken { can(abilities: string | string[]): boolean; } export type TimeUnit = 'sec' | 'min' | 'hr' | 'day' | 'month' | 'year';