/// <reference types="node" />
import { Observable, ObservedValueOf } from 'rxjs';
import { Auth, Apps } from '@aimee-blue/ab-contracts';
import { IJwt, decodeJwt } from '@aimee-blue/ab-auth';
import { ISocketEpicAttributes, ISocketEpicContext } from '../kit';
import { IAction } from '../action';
export interface IInjectedAuthDetails {
    id: string;
    auth?: IJwt;
}
export interface ISocketEpicWithAuth<I extends IAction = IAction, O extends IAction | Buffer = IAction | Buffer, D = {}, R extends unknown[] = unknown[]> extends ISocketEpicAttributes<O, D> {
    (commands: Observable<IAction | I>, ctx: ISocketEpicContext & IInjectedAuthDetails & D, ...rest: R): Observable<O>;
}
export declare function epicWithAuth<E extends ISocketEpicWithAuth>(allow: Auth.Role[], epic: E, deps?: {
    verifyToken: (param: Auth.IVerifyParams) => Observable<Auth.IVerifyResult>;
    decodeJwt: typeof decodeJwt;
}): (...[cmd, ctx, ...rest]: Parameters<E>) => Observable<Apps.IErrorAction | ObservedValueOf<ReturnType<E>>>;
