import { PathEvent, Unsubscribe } from '@ztimson/utils';
import { Meta, PathEventEmitter } from './core';
import { Momentum } from './momentum';
export type Token = Meta & {
    /** Token value */
    readonly token?: string;
    /** User defined name */
    readonly name: string;
    /** Assigned to */
    readonly owner: string;
    /** Expiration */
    readonly expire?: Date;
};
/** Manage user tokens */
export declare class Tokens extends PathEventEmitter {
    protected momentum: Momentum;
    private controller;
    get cache(): import('@ztimson/utils').Cache<string, Token>;
    constructor(momentum: Momentum);
    /**
     * Fetch all tokens for user
     * @param {string} username User to search
     * @param reload Force reload instead of using cache
     * @return {Promise<Token[]>} List of tokens
     */
    all(username: string, reload?: boolean): Promise<Token[]>;
    /**
     * Create a new user token
     * @param {{name: string, owner: string, expire: null | Date}} token Token settings
     * @return {Promise<Token>} Crated token
     */
    create(token: Token): Promise<Token>;
    /**
     * Delete an existing token
     * @param {string} id Token ID
     * @return {Promise<void>} Resolves once complete
     */
    delete(id: string): Promise<number>;
    /**
     * Subscribe to token changes for user
     * @param {(value: Product[]) => any | null} callback Received changes
     * @param opts Scope to single user
     * @return {() => void} Function to unsubscribe
     */
    sync(callback: (event: PathEvent, value: Token[]) => any | null, opts?: {
        username?: string;
        reload?: boolean;
    }): Unsubscribe;
}
//# sourceMappingURL=tokens.d.ts.map