import { GenericAuthArgs, ISingleEndpointOpts, ExpressSupport } from '@sphereon/ssi-express-support';
import { IStatusListPlugin } from '@sphereon/ssi-sdk.vc-status-list';
import { IAgentContext, TAgent } from '@veramo/core';
import express, { Express, Router } from 'express';
import { IRequiredPlugins } from '@sphereon/ssi-sdk.vc-status-list-issuer-drivers';
import { StatusListType } from '@sphereon/ssi-types';

type IRequiredContext = IAgentContext<IRequiredPlugins & IStatusListPlugin>;
interface IStatusListOpts {
    endpointOpts: IStatusListEndpointOpts;
    enableFeatures?: statusListFeatures[];
}
interface IStatusListEndpointOpts {
    basePath?: string;
    globalAuth?: GenericAuthArgs;
    vcApiCredentialStatus: IW3CredentialStatusEndpointOpts;
    createStatusList: ICredentialStatusListEndpointOpts;
    getStatusList: ICredentialStatusListEndpointOpts;
}
type statusListFeatures = 'w3c-vc-api-credential-status' | 'status-list-management' | 'status-list-hosting';
interface ICredentialStatusListEndpointOpts extends ISingleEndpointOpts {
    dbName: string;
}
interface IW3CredentialStatusEndpointOpts extends ICredentialStatusListEndpointOpts {
    statusListId?: string;
    correlationId?: string;
    keyRef?: string;
}
interface UpdateW3cCredentialStatusRequest extends UpdateCredentialStatusRequest {
    credentialId: string;
}
interface UpdateIndexedCredentialStatusRequest extends UpdateCredentialStatusRequest {
    statusListIndex?: number;
}
interface UpdateCredentialStatusRequest {
    credentialStatus: UpdateCredentialStatusItem[];
    statusListId?: string;
    statusListCorrelationId?: string;
    entryCorrelationId?: string;
}
interface UpdateCredentialStatusItem {
    type?: StatusListType;
    status: string;
}
declare enum StatusListIdType {
    StatusListId = "StatusListId",
    StatusListCorrelationId = "StatusListCorrelationId"
}
declare enum EntryIdType {
    StatusListIndex = "StatusListIndex",
    EntryCorrelationId = "StatusListCorrelationId"
}

declare class StatuslistManagementApiServer {
    get router(): express.Router;
    private readonly _express;
    private readonly _agent;
    private readonly _opts?;
    private readonly _router;
    constructor(args: {
        agent: TAgent<IRequiredPlugins & IStatusListPlugin>;
        expressSupport: ExpressSupport;
        opts: IStatusListOpts;
    });
    get agent(): TAgent<IRequiredPlugins>;
    get opts(): IStatusListOpts | undefined;
    get express(): Express;
}

declare function createNewStatusListEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
declare function getStatusListCredentialEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
declare function getStatusListCredentialIndexStatusEndpoint(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
declare function getStatusListCredentialIndexStatusEndpointLegacy(router: Router, context: IRequiredContext, opts: ICredentialStatusListEndpointOpts): void;
declare function updateStatusEndpoint(router: Router, context: IRequiredContext, opts: IW3CredentialStatusEndpointOpts): void;

export { EntryIdType, type ICredentialStatusListEndpointOpts, type IRequiredContext, type IStatusListEndpointOpts, type IStatusListOpts, type IW3CredentialStatusEndpointOpts, StatusListIdType, StatuslistManagementApiServer, type UpdateCredentialStatusItem, type UpdateIndexedCredentialStatusRequest, type UpdateW3cCredentialStatusRequest, createNewStatusListEndpoint, getStatusListCredentialEndpoint, getStatusListCredentialIndexStatusEndpoint, getStatusListCredentialIndexStatusEndpointLegacy, type statusListFeatures, updateStatusEndpoint };
