import * as jwt from 'jsonwebtoken';
import type { RedisClientType } from 'redis';
import * as factory from '../factory';
import { IPassportValidator } from '../factory/transaction';
export type IVerifiedPassport = factory.waiter.passport.IPassport & {
    /**
     * 許可証識別子(2024-07-06~)
     */
    identifier: string;
};
type ILockKey = IVerifiedPassport;
interface IOptions {
    /**
     * WAITER許可証発行者
     */
    issuers: string[];
    /**
     * WAITER許可証トークンシークレット
     */
    secret: string;
    passportValidator?: IPassportValidator;
}
type IStartParams = (factory.transaction.placeOrder.IStartParamsWithoutDetail | factory.transaction.moneyTransfer.IStartParamsWithoutDetail) & {};
/**
 * 取引許可証リポジトリ
 */
export declare class PassportRepo {
    private readonly concurrentLockRepo;
    private readonly options;
    constructor(redisClient: RedisClientType, options: IOptions);
    static CREATE_VERIFIED_PASSPORT(params: string | jwt.JwtPayload | undefined): IVerifiedPassport;
    static CREATE_REDIS_KEY(params: ILockKey): string;
    lock(params: ILockKey): Promise<void>;
    /**
     * 許可証トークンがあれば検証する
     */
    validatePassportTokenIfExist(params: Pick<IStartParams, 'object'>): Promise<{
        passport?: IVerifiedPassport;
        customerType?: string;
    }>;
    /**
     * 暗号化された許可証を検証する
     */
    private verify;
}
export {};
