import { ListActionsResult, ListOutputsResult } from '@bsv/sdk';
import { sdk } from '../index.all';
import { table } from './index.all';
import { Knex } from 'knex';
import { StorageProvider, StorageProviderOptions } from './StorageProvider';
import { DBType } from './StorageReader';
export interface StorageKnexOptions extends StorageProviderOptions {
    /**
     * Knex database interface initialized with valid connection configuration.
     */
    knex: Knex;
}
export declare class StorageKnex extends StorageProvider implements sdk.WalletStorageProvider {
    knex: Knex;
    constructor(options: StorageKnexOptions);
    readSettings(): Promise<table.Settings>;
    getProvenOrRawTx(txid: string, trx?: sdk.TrxToken): Promise<sdk.ProvenOrRawTx>;
    dbTypeSubstring(source: string, fromOffset: number, forLength?: number): string;
    getRawTxOfKnownValidTransaction(txid?: string, offset?: number, length?: number, trx?: sdk.TrxToken): Promise<number[] | undefined>;
    getProvenTxsForUserQuery(args: sdk.FindForUserSincePagedArgs): Knex.QueryBuilder;
    getProvenTxsForUser(args: sdk.FindForUserSincePagedArgs): Promise<table.ProvenTx[]>;
    getProvenTxReqsForUserQuery(args: sdk.FindForUserSincePagedArgs): Knex.QueryBuilder;
    getProvenTxReqsForUser(args: sdk.FindForUserSincePagedArgs): Promise<table.ProvenTxReq[]>;
    getTxLabelMapsForUserQuery(args: sdk.FindForUserSincePagedArgs): Knex.QueryBuilder;
    getTxLabelMapsForUser(args: sdk.FindForUserSincePagedArgs): Promise<table.TxLabelMap[]>;
    getOutputTagMapsForUserQuery(args: sdk.FindForUserSincePagedArgs): Knex.QueryBuilder;
    getOutputTagMapsForUser(args: sdk.FindForUserSincePagedArgs): Promise<table.OutputTagMap[]>;
    listActions(auth: sdk.AuthId, vargs: sdk.ValidListActionsArgs): Promise<ListActionsResult>;
    listOutputs(auth: sdk.AuthId, vargs: sdk.ValidListOutputsArgs): Promise<ListOutputsResult>;
    insertProvenTx(tx: table.ProvenTx, trx?: sdk.TrxToken): Promise<number>;
    insertProvenTxReq(tx: table.ProvenTxReq, trx?: sdk.TrxToken): Promise<number>;
    insertUser(user: table.User, trx?: sdk.TrxToken): Promise<number>;
    insertCertificateAuth(auth: sdk.AuthId, certificate: table.CertificateX): Promise<number>;
    insertCertificate(certificate: table.CertificateX, trx?: sdk.TrxToken): Promise<number>;
    insertCertificateField(certificateField: table.CertificateField, trx?: sdk.TrxToken): Promise<void>;
    insertOutputBasket(basket: table.OutputBasket, trx?: sdk.TrxToken): Promise<number>;
    insertTransaction(tx: table.Transaction, trx?: sdk.TrxToken): Promise<number>;
    insertCommission(commission: table.Commission, trx?: sdk.TrxToken): Promise<number>;
    insertOutput(output: table.Output, trx?: sdk.TrxToken): Promise<number>;
    insertOutputTag(tag: table.OutputTag, trx?: sdk.TrxToken): Promise<number>;
    insertOutputTagMap(tagMap: table.OutputTagMap, trx?: sdk.TrxToken): Promise<void>;
    insertTxLabel(label: table.TxLabel, trx?: sdk.TrxToken): Promise<number>;
    insertTxLabelMap(labelMap: table.TxLabelMap, trx?: sdk.TrxToken): Promise<void>;
    insertMonitorEvent(event: table.MonitorEvent, trx?: sdk.TrxToken): Promise<number>;
    insertSyncState(syncState: table.SyncState, trx?: sdk.TrxToken): Promise<number>;
    updateCertificateField(certificateId: number, fieldName: string, update: Partial<table.CertificateField>, trx?: sdk.TrxToken): Promise<number>;
    updateCertificate(id: number, update: Partial<table.Certificate>, trx?: sdk.TrxToken): Promise<number>;
    updateCommission(id: number, update: Partial<table.Commission>, trx?: sdk.TrxToken): Promise<number>;
    updateOutputBasket(id: number, update: Partial<table.OutputBasket>, trx?: sdk.TrxToken): Promise<number>;
    updateOutput(id: number, update: Partial<table.Output>, trx?: sdk.TrxToken): Promise<number>;
    updateOutputTagMap(outputId: number, tagId: number, update: Partial<table.OutputTagMap>, trx?: sdk.TrxToken): Promise<number>;
    updateOutputTag(id: number, update: Partial<table.OutputTag>, trx?: sdk.TrxToken): Promise<number>;
    updateProvenTxReq(id: number | number[], update: Partial<table.ProvenTxReq>, trx?: sdk.TrxToken): Promise<number>;
    updateProvenTx(id: number, update: Partial<table.ProvenTx>, trx?: sdk.TrxToken): Promise<number>;
    updateSyncState(id: number, update: Partial<table.SyncState>, trx?: sdk.TrxToken): Promise<number>;
    updateTransaction(id: number | number[], update: Partial<table.Transaction>, trx?: sdk.TrxToken): Promise<number>;
    updateTxLabelMap(transactionId: number, txLabelId: number, update: Partial<table.TxLabelMap>, trx?: sdk.TrxToken): Promise<number>;
    updateTxLabel(id: number, update: Partial<table.TxLabel>, trx?: sdk.TrxToken): Promise<number>;
    updateUser(id: number, update: Partial<table.User>, trx?: sdk.TrxToken): Promise<number>;
    updateMonitorEvent(id: number, update: Partial<table.MonitorEvent>, trx?: sdk.TrxToken): Promise<number>;
    setupQuery<T extends object>(table: string, args: sdk.FindPartialSincePagedArgs<T>): Knex.QueryBuilder;
    findCertificateFieldsQuery(args: sdk.FindCertificateFieldsArgs): Knex.QueryBuilder;
    findCertificatesQuery(args: sdk.FindCertificatesArgs): Knex.QueryBuilder;
    findCommissionsQuery(args: sdk.FindCommissionsArgs): Knex.QueryBuilder;
    findOutputBasketsQuery(args: sdk.FindOutputBasketsArgs): Knex.QueryBuilder;
    findOutputsQuery(args: sdk.FindOutputsArgs, count?: boolean): Knex.QueryBuilder;
    findOutputTagMapsQuery(args: sdk.FindOutputTagMapsArgs): Knex.QueryBuilder;
    findOutputTagsQuery(args: sdk.FindOutputTagsArgs): Knex.QueryBuilder;
    findProvenTxReqsQuery(args: sdk.FindProvenTxReqsArgs): Knex.QueryBuilder;
    findProvenTxsQuery(args: sdk.FindProvenTxsArgs): Knex.QueryBuilder;
    findSyncStatesQuery(args: sdk.FindSyncStatesArgs): Knex.QueryBuilder;
    findTransactionsQuery(args: sdk.FindTransactionsArgs, count?: boolean): Knex.QueryBuilder;
    findTxLabelMapsQuery(args: sdk.FindTxLabelMapsArgs): Knex.QueryBuilder;
    findTxLabelsQuery(args: sdk.FindTxLabelsArgs): Knex.QueryBuilder;
    findUsersQuery(args: sdk.FindUsersArgs): Knex.QueryBuilder;
    findMonitorEventsQuery(args: sdk.FindMonitorEventsArgs): Knex.QueryBuilder;
    findCertificatesAuth(auth: sdk.AuthId, args: sdk.FindCertificatesArgs): Promise<table.Certificate[]>;
    findOutputBasketsAuth(auth: sdk.AuthId, args: sdk.FindOutputBasketsArgs): Promise<table.OutputBasket[]>;
    findOutputsAuth(auth: sdk.AuthId, args: sdk.FindOutputsArgs): Promise<table.Output[]>;
    findCertificateFields(args: sdk.FindCertificateFieldsArgs): Promise<table.CertificateField[]>;
    findCertificates(args: sdk.FindCertificatesArgs): Promise<table.Certificate[]>;
    findCommissions(args: sdk.FindCommissionsArgs): Promise<table.Commission[]>;
    findOutputBaskets(args: sdk.FindOutputBasketsArgs): Promise<table.OutputBasket[]>;
    findOutputs(args: sdk.FindOutputsArgs): Promise<table.Output[]>;
    findOutputTagMaps(args: sdk.FindOutputTagMapsArgs): Promise<table.OutputTagMap[]>;
    findOutputTags(args: sdk.FindOutputTagsArgs): Promise<table.OutputTag[]>;
    findProvenTxReqs(args: sdk.FindProvenTxReqsArgs): Promise<table.ProvenTxReq[]>;
    findProvenTxs(args: sdk.FindProvenTxsArgs): Promise<table.ProvenTx[]>;
    findSyncStates(args: sdk.FindSyncStatesArgs): Promise<table.SyncState[]>;
    findTransactions(args: sdk.FindTransactionsArgs): Promise<table.Transaction[]>;
    findTxLabelMaps(args: sdk.FindTxLabelMapsArgs): Promise<table.TxLabelMap[]>;
    findTxLabels(args: sdk.FindTxLabelsArgs): Promise<table.TxLabel[]>;
    findUsers(args: sdk.FindUsersArgs): Promise<table.User[]>;
    findMonitorEvents(args: sdk.FindMonitorEventsArgs): Promise<table.MonitorEvent[]>;
    getCount<T extends object>(q: Knex.QueryBuilder<T, T[]>): Promise<number>;
    countCertificateFields(args: sdk.FindCertificateFieldsArgs): Promise<number>;
    countCertificates(args: sdk.FindCertificatesArgs): Promise<number>;
    countCommissions(args: sdk.FindCommissionsArgs): Promise<number>;
    countOutputBaskets(args: sdk.FindOutputBasketsArgs): Promise<number>;
    countOutputs(args: sdk.FindOutputsArgs): Promise<number>;
    countOutputTagMaps(args: sdk.FindOutputTagMapsArgs): Promise<number>;
    countOutputTags(args: sdk.FindOutputTagsArgs): Promise<number>;
    countProvenTxReqs(args: sdk.FindProvenTxReqsArgs): Promise<number>;
    countProvenTxs(args: sdk.FindProvenTxsArgs): Promise<number>;
    countSyncStates(args: sdk.FindSyncStatesArgs): Promise<number>;
    countTransactions(args: sdk.FindTransactionsArgs): Promise<number>;
    countTxLabelMaps(args: sdk.FindTxLabelMapsArgs): Promise<number>;
    countTxLabels(args: sdk.FindTxLabelsArgs): Promise<number>;
    countUsers(args: sdk.FindUsersArgs): Promise<number>;
    countMonitorEvents(args: sdk.FindMonitorEventsArgs): Promise<number>;
    destroy(): Promise<void>;
    migrate(storageName: string, storageIdentityKey: string): Promise<string>;
    dropAllData(): Promise<void>;
    transaction<T>(scope: (trx: sdk.TrxToken) => Promise<T>, trx?: sdk.TrxToken): Promise<T>;
    /**
     * Convert the standard optional `TrxToken` parameter into either a direct knex database instance,
     * or a Knex.Transaction as appropriate.
     */
    toDb(trx?: sdk.TrxToken): Knex<any, any[]>;
    validateRawTransaction(t: table.Transaction, trx?: sdk.TrxToken): Promise<void>;
    validateOutputScript(o: table.Output, trx?: sdk.TrxToken): Promise<void>;
    _verifiedReadyForDatabaseAccess: boolean;
    /**
     * Make sure database is ready for access:
     *
     * - dateScheme is known
     * - foreign key constraints are enabled
     *
     * @param trx
     */
    verifyReadyForDatabaseAccess(trx?: sdk.TrxToken): Promise<DBType>;
    /**
     * Helper to force uniform behavior across database engines.
     * Use to process the update template for entities being updated.
     */
    validatePartialForUpdate<T extends sdk.EntityTimeStamp>(update: Partial<T>, dateFields?: string[], booleanFields?: string[]): Partial<T>;
    /**
     * Helper to force uniform behavior across database engines.
     * Use to process new entities being inserted into the database.
     */
    validateEntityForInsert<T extends sdk.EntityTimeStamp>(entity: T, trx?: sdk.TrxToken, dateFields?: string[], booleanFields?: string[]): Promise<any>;
    getLabelsForTransactionId(transactionId?: number, trx?: sdk.TrxToken): Promise<table.TxLabel[]>;
    extendOutput(o: table.Output, includeBasket?: boolean, includeTags?: boolean, trx?: sdk.TrxToken): Promise<table.OutputX>;
    getTagsForOutputId(outputId: number, trx?: sdk.TrxToken): Promise<table.OutputTag[]>;
    purgeData(params: sdk.PurgeParams, trx?: sdk.TrxToken): Promise<sdk.PurgeResults>;
    reviewStatus(args: {
        agedLimit: Date;
        trx?: sdk.TrxToken;
    }): Promise<{
        log: string;
    }>;
    /**
     *  Finds closest matching available change output to use as input for new transaction.
     *
     * Transactionally allocate the output such that
     */
    countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number>;
    /**
     *  Finds closest matching available change output to use as input for new transaction.
     *
     * Transactionally allocate the output such that
     */
    allocateChangeInput(userId: number, basketId: number, targetSatoshis: number, exactSatoshis: number | undefined, excludeSending: boolean, transactionId: number): Promise<table.Output | undefined>;
    /**
     * Helper to force uniform behavior across database engines.
     * Use to process all individual records with time stamps retreived from database.
     */
    validateEntity<T extends sdk.EntityTimeStamp>(entity: T, dateFields?: string[], booleanFields?: string[]): T;
    /**
     * Helper to force uniform behavior across database engines.
     * Use to process all arrays of records with time stamps retreived from database.
     * @returns input `entities` array with contained values validated.
     */
    validateEntities<T extends sdk.EntityTimeStamp>(entities: T[], dateFields?: string[], booleanFields?: string[]): T[];
}
//# sourceMappingURL=StorageKnex.d.ts.map