interface ResultStream {
    close: () => Promise<void>;
    read: () => Promise<string>;
}
interface StatementWrap {
    isQuerySync: () => boolean;
    close: () => Promise<void>;
    updated: () => Promise<number>;
    getMetaData: () => Promise<string>;
    asStreamSync: (bufferSize: number) => ResultStream;
    asArray: () => Promise<string>;
    next: () => Promise<string>;
}
interface TablesReadStream {
    close: () => Promise<void>;
    read: () => Promise<string>;
    getMetaData: () => Promise<string>;
}
interface JDBCConnection {
    query: (sql: string, jsonParams: string, trim: boolean) => Promise<string>;
    queryAsStream: (sql: string, jsonParams: string, bufferSize: number) => Promise<ResultStream>;
    execute: (sql: string, jsonParams: string) => Promise<StatementWrap>;
    getTablesAsStreamSync: (catalog: string, schema: string, tableName: string) => TablesReadStream;
    getColumns: (catalog: string, schema: string, tableNamePattern: string, columnNamePattern: string) => Promise<string>;
    update: (sql: string, jsonParams: string) => Promise<number>;
    batchUpdate: (sql: string, jsonParams: string) => Promise<number[]>;
    insertAndGetId: (sql: string, jsonParams: string) => Promise<number>;
}
interface Transaction extends JDBCConnection {
    commit: () => Promise<void>;
    rollback: () => Promise<void>;
    end: () => Promise<void>;
}
interface Pgm {
    run: (jsonParams: string, timeout: number) => Promise<string>;
}
interface MessageQ {
    read: (wait: number) => Promise<string>;
    sendInformational: (message: string) => Promise<void>;
}
interface KeyedDataQueueResponse {
    getData: () => Promise<string>;
    write: (data: string) => Promise<void>;
}
interface KeyedDataQ {
    read: (key: string, wait: number) => Promise<string>;
    readResponse: (key: string, wait: number, writeKeyLength: number) => Promise<KeyedDataQueueResponse>;
    write: (key: string, data: string) => Promise<void>;
}
interface AS400Message {
    getText: () => Promise<string>;
}
interface MessageFileHandler {
    read: (messageId: string) => Promise<AS400Message>;
}
interface IfsReadStream {
    read: () => Promise<Buffer>;
}
interface IfsWriteStream {
    write: (data: Buffer) => Promise<void>;
    flush: () => Promise<void>;
}
interface JT400 extends JDBCConnection {
    createTransactionSync: () => Transaction;
    getPrimaryKeys: (catalog: string, schema: string, table: string) => Promise<string>;
    pgmSync: (programName: string, paramsSchemaJsonStr: string, libraryName?: string, ccsid?: number) => Pgm;
    openMessageQ: (name: string, isPath: boolean) => Promise<MessageQ>;
    createKeyedDataQSync: (name: string) => KeyedDataQ;
    openMessageFile: (path: string) => Promise<MessageFileHandler>;
    createIfsReadStream: (fileName: string) => Promise<IfsReadStream>;
    createIfsWriteStream: (folderPath: string, fileName: string, append: boolean, ccsid?: number) => Promise<IfsWriteStream>;
    listIfsFiles: (folderName: string) => Promise<string[]>;
    moveIfsFile: (fileName: string, newFileName: string) => Promise<boolean>;
    deleteIfsFile: (fileName: string) => Promise<boolean>;
    getIfsFileMetadata: (fileName: string) => Promise<string>;
    close: () => Promise<void>;
}

export type { AS400Message, IfsReadStream, IfsWriteStream, JDBCConnection, JT400, KeyedDataQ, KeyedDataQueueResponse, MessageFileHandler, MessageQ, Pgm, ResultStream, StatementWrap, TablesReadStream, Transaction };
