import { AuthorizationServerMetadata, ClientMetadata, CredentialIssuerMetadataOpts, IssuerMetadata } from '@sphereon/oid4vci-common';
import { IDIDOptions, ResolveOpts } from '@sphereon/ssi-sdk-ext.did-utils';
import { ManagedIdentifierOptsOrResult } from '@sphereon/ssi-sdk-ext.identifier-resolution';
import { IKeyValueStore, IValueData } from '@sphereon/ssi-sdk.kv-store-temp';
import { IPluginMethodMap } from '@veramo/core';
import { CreateNewStatusListArgs } from '@sphereon/ssi-sdk.vc-status-list';
export type MetadataTypeMap = {
    issuer: IssuerMetadata;
    authorizationServer: AuthorizationServerMetadata;
};
export type OptionalIssuerMetadata = IssuerMetadata | AuthorizationServerMetadata | undefined;
export type OptionalIssuerMetadataValue = IValueData<IssuerMetadata | AuthorizationServerMetadata> | undefined;
export interface IOID4VCIStore extends IPluginMethodMap {
    oid4vciStoreDefaultMetadata(): Promise<IKeyValueStore<IssuerMetadata>>;
    oid4vciStoreDefaultIssuerOptions(): Promise<IKeyValueStore<IIssuerOptions>>;
    oid4vciStoreDefaultStoreId(): Promise<string>;
    oid4vciStoreDefaultNamespace(): Promise<string>;
    oid4vciStoreGetIssuerOpts({ correlationId, storeId, namespace }: IOid4vciStoreGetArgs): Promise<IIssuerOptions | undefined>;
    oid4vciStoreHasIssuerOpts({ correlationId, storeId, namespace }: Ioid4vciStoreExistsArgs): Promise<boolean>;
    oid4vciStorePersistIssuerOpts(args: IIssuerOptsPersistArgs): Promise<IValueData<IIssuerOptions>>;
    oid4vciStoreRemoveIssuerOpts({ storeId, correlationId, namespace }: Ioid4vciStoreRemoveArgs): Promise<boolean>;
    oid4vciStoreClearAllIssuerOpts({ storeId }: Ioid4vciStoreClearArgs): Promise<boolean>;
    oid4vciStoreGetMetadata({ metadataType, correlationId, storeId, namespace, }: IOid4vciStoreGetArgs): Promise<IssuerMetadata | AuthorizationServerMetadata | undefined>;
    oid4vciStoreListMetadata({ metadataType, storeId, namespace }: IOid4vciStoreListArgs): Promise<Array<OptionalIssuerMetadata>>;
    oid4vciStoreHasMetadata({ metadataType, correlationId, storeId, namespace }: Ioid4vciStoreExistsArgs): Promise<boolean>;
    oid4vciStorePersistMetadata(args: IMetadataPersistArgs): Promise<OptionalIssuerMetadataValue>;
    oid4vciStoreRemoveMetadata({ metadataType, storeId, correlationId, namespace }: Ioid4vciStoreRemoveArgs): Promise<boolean>;
    oid4vciStoreClearAllMetadata({ metadataType, storeId }: Ioid4vciStoreClearArgs): Promise<boolean>;
}
export interface IOID4VCIStoreOpts {
    defaultStore?: string;
    defaultNamespace?: string;
    issuerMetadataStores?: Map<string, IKeyValueStore<IssuerMetadata>> | IKeyValueStore<IssuerMetadata>;
    authorizationServerMetadataStores?: Map<string, IKeyValueStore<AuthorizationServerMetadata>> | IKeyValueStore<AuthorizationServerMetadata>;
    issuerOptsStores?: Map<string, IKeyValueStore<IIssuerOptions>> | IKeyValueStore<IIssuerOptions>;
    importMetadatas?: IMetadataImportArgs[];
    importIssuerOpts?: IIssuerOptsImportArgs[];
    defaultOpts?: IIssuerDefaultOpts;
    instanceOpts?: IIssuerInstanceOptions[];
}
export interface IIssuerDefaultOpts extends IIssuerOptions {
}
export interface IIssuerInstanceOptions extends IMetadataOptions {
    issuerOpts?: IIssuerOptions;
    metadata?: CredentialIssuerMetadataOpts;
}
export interface IIssuerOptions {
    asClientOpts?: ClientMetadata;
    idOpts?: ManagedIdentifierOptsOrResult;
    resolveOpts?: ResolveOpts;
    /**
     * @deprecated use idOpts which is more capable and supports x5c and jwks next to dids
     */
    didOpts?: IDIDOptions;
    userPinRequired?: boolean;
    cNonceExpiresIn?: number;
    /**
     * Used in the callbacks for the first party flow
     */
    presentationDefinitionId?: string;
}
export interface IMetadataOptions {
    credentialIssuer: string;
    storeId?: string;
    storeNamespace?: string;
}
export type MetadataType = 'issuer' | 'authorizationServer' | 'openidFederation';
export interface IOid4vciStoreListArgs {
    metadataType: MetadataType;
    storeId?: string;
    namespace?: string;
}
export interface IOid4vciStoreGetArgs extends IOid4vciStoreListArgs {
    correlationId: string;
}
export type Ioid4vciStoreExistsArgs = IOid4vciStoreGetArgs;
export type Ioid4vciStoreRemoveArgs = IOid4vciStoreGetArgs;
export interface IMetadataImportArgs {
    metadataType: MetadataType;
}
export type IIssuerMetadataImportArgs = IMetadataPersistArgs;
export type IIssuerOptsImportArgs = IIssuerOptsPersistArgs;
export interface IMetadataPersistArgs extends Ioid4vciStorePersistArgs, IMetadataImportArgs {
    metadata: IssuerMetadata | AuthorizationServerMetadata;
}
export interface IIssuerOptsPersistArgs extends Ioid4vciStorePersistArgs {
    issuerOpts: IIssuerOptions;
    endpointOpts: unknown;
    statusLists: Array<CreateNewStatusListArgs>;
}
export interface Ioid4vciStorePersistArgs {
    correlationId: string;
    overwriteExisting?: boolean;
    validation?: boolean;
    ttl?: number;
    storeId?: string;
    namespace?: string;
}
export interface Ioid4vciStoreClearArgs {
    metadataType: MetadataType;
    storeId?: string;
}
//# sourceMappingURL=IOID4VCIStore.d.ts.map