type SocketEvent<EventName extends string> = {
    [key in EventName]: string;
};
declare const __serverEvents__: SocketEvent<'handshakeInstantiated' | 'handshakeInterrupted' | 'sessionCreated' | 'sessionUpdated' | 'sessionPaired' | 'sessionUnpaired' | 'sessionDestroyed' | 'referenceOpenedRequested'>;
declare const __webEvents__: SocketEvent<'openReference'>;
type OpenReferenceStandaloneRequest = {
    kind: 'standalone';
    sessionId: number;
    referenceId: number;
};
type OpenReferenceDocumentRequest = {
    kind: 'document';
    sessionId: number;
    referenceId: number;
    documentId: number;
};
type OpenReferenceRequest = OpenReferenceStandaloneRequest | OpenReferenceDocumentRequest;

type Session = {
    id: number;
    pairingKey: string;
    createdAt: Date;
    updatedAt: Date;
    connection?: SessionConnection | null;
    references?: SessionReference[];
};
type SessionConnection = {
    id: number;
    clientIp: string;
    userAgent: string;
    isPaired: boolean;
    pairedAt?: Date;
    sessionId: Session['id'];
};
type SessionReference = {
    id: number;
    type: 'standalone' | 'document';
    name: string;
    documentPlaceholder?: string | null;
    signatures?: SessionSignature[];
    documents?: SessionDocument[];
    sessionId: Session['id'];
};
type SessionSignature = {
    id: number;
    signatureData: string;
    metadata?: string;
    referenceId: SessionReference['id'];
};
type SessionSignatureMetadata = {
    ingest: Record<string, string>;
};
type SessionDocument = {
    id: number;
    rawContent: string;
    metadata?: string;
    referenceId: SessionReference['id'];
};
type SessionDocumentMetadata = {
    ingest: Record<string, string>;
};
type SessionDocumentSignature = {
    signatureName: string;
    signatureData: string;
};

export { OpenReferenceRequest, Session, SessionConnection, SessionDocument, SessionDocumentMetadata, SessionDocumentSignature, SessionReference, SessionSignature, SessionSignatureMetadata, SocketEvent, __serverEvents__, __webEvents__ };
