import type { Algorithm } from 'jsonwebtoken';
import { IndexDefinition, IndexOptions, Model, Schema, SchemaDefinition } from 'mongoose';
import * as factory from '../../../factory';
interface IOnOrderStatusChanged {
    /**
     * AggService通知先
     */
    informOrder?: factory.project.IInformParams[];
}
interface IOnReservationStatusChanged {
    /**
     * AggService通知先
     */
    informReservation?: factory.project.IInformParams[];
}
interface IOnEventChanged {
    informEvent2agg?: factory.project.IInformParams[];
}
interface IOnTransactionStatusChanged {
    /**
     * AggService通知先
     */
    informTransaction?: factory.project.IInformParams[];
}
interface IStorageSettings {
    /**
     * 取引保管期間(Confirmed)
     * default:365
     */
    transactionConfirmedInDays?: number;
    /**
     * 取引保管期間(Canceled)
     * default:7
     */
    transactionCanceledInDays?: number;
    authorizationInDays?: number;
    actionInDays?: number;
    assetTransactionInDays?: number;
    taskInDays?: number;
    eventInDays?: number;
    /**
     * イベント終了日時からn日後まで座席をロックする
     */
    stockHoldAfterEventEndInDays?: number;
}
interface IQuotaSettings {
    codeExpiresInSecondsDefault?: number;
    codeExpiresInSecondsMax?: number;
    placeOrderExpiresInSecondsMax?: number;
    placeOrderExpiresInSecondsMin?: number;
}
interface ITriggerWebhookSettings {
    /**
     * リクエストタイムアウト
     */
    timeout?: number;
    useFetchAPI?: boolean;
    /**
     * 通知署名の鍵
     */
    secretKey?: string;
    /**
     * 固有署名ヘッダー識別子
     */
    headerIdentifier?: string;
    retryCountMax?: number;
    retryIntervalInMS?: number;
}
interface IWaiterSettings {
    disabled?: boolean;
    passportUnavailable?: boolean;
    passportIssuers: string[];
    secret: string;
}
export interface IJWTSetting {
    /**
     * トークン生成鍵
     */
    secret: string;
    /**
     * トークン検証時の発行者リスト
     */
    issuers: string[];
    version: string;
    payloadTypPrefix: string;
    /**
     * auth.apisによるトークン発行時のissuer
     */
    issuer: string;
    /**
     * auth.apisのトークン発行エンドポイント
     */
    issueEndpoint: string;
    /**
     * トークン署名アルゴリズム
     */
    algorithm: Algorithm;
}
export interface ISetting {
    defaultSenderEmail?: string;
    jwt?: IJWTSetting;
    onEventChanged?: IOnEventChanged;
    onOrderStatusChanged: IOnOrderStatusChanged;
    onReservationStatusChanged?: IOnReservationStatusChanged;
    onResourceUpdated?: {
        informResource?: factory.project.IInformParams[];
    };
    onTransactionStatusChanged?: IOnTransactionStatusChanged;
    project: {
        id: string;
        typeOf: factory.organizationType.Project;
    };
    quota?: IQuotaSettings;
    storage?: IStorageSettings;
    /**
     * 通知設定
     */
    triggerWebhook?: ITriggerWebhookSettings;
    useInformResourceTypes?: string[];
    userPoolIdOld?: string;
    userPoolIdNew?: string;
    waiter?: IWaiterSettings;
    useMongoAsStockHolder?: boolean;
    useMongoAsStockHolderProjects?: string[];
    useMongo4confirmationNumberFrom?: Date;
    useMongo4orderNumberFrom?: Date;
    useMongo4transactionNumberFrom?: Date;
}
type IDocType = ISetting;
type IModel = Model<IDocType>;
type ISchemaDefinition = SchemaDefinition<IDocType>;
type ISchema = Schema<IDocType, IModel, {}, {}, {}, {}, ISchemaDefinition, IDocType>;
declare const modelName = "Setting";
declare const indexes: [d: IndexDefinition, o: IndexOptions][];
declare function createSchema(): ISchema;
export { createSchema, IModel, indexes, modelName };
