/**
 * @file nano.d.ts
 *
 * Type definitions for nano 6.4
 *
 * Project: https://github.com/apache/couchdb-nano
 *
 * Definitions by: Tim Jacobi <https://github.com/timjacobi>
 *                 Kovács Vince <https://github.com/vincekovacs>
 *                 Glynn Bird <https://github.com/glynnbird>
 *                 Kyle Chine <https://github.com/kylechine>
 *                 Jean-Christophe Hoelt <https://github.com/j3k0>
 *
 * Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
 *
 * TypeScript Version: 2.3
 */

/// <reference types="node" />

import { EventEmitter } from "events";

/** nano entry function */
declare function nano(
  config: nano.Configuration | string
): nano.ServerScope;

declare namespace nano {
  /** RequestDefaults.auth options */
  interface RequestDefaultOptionsAuth {
    username: string,
    password: string
  }
  
  /** RequestDefaults options */
  interface RequestDefaultsOptions {
    timeout?: number;
    agent?: any;
    headers?: object;
    auth?: RequestDefaultOptionsAuth;
    jar?: boolean;
  }

  /** Nano configuration */
  interface Configuration {
    /** The URL of the CouchDB service, including username and password if required e.g.
     * http://username:password@hostname:port
     */
    url: string;
    /** For cookie authentication */
    cookie?: string;
    /** HTTP request options
     * @see README: {@link https://www.npmjs.com/package/nano#pool-size-and-open-sockets}
     */
    requestDefaults?: RequestDefaultsOptions;
    /** Logging function 
     * @see README: {@link https://www.npmjs.com/package/nano#logging}
     */
    log?(id: string, args: any): void;
    /** Set to false to prevent parsing of url 
     * @see README: {@link https://www.npmjs.com/package/nano#configuration}
     */
    parseUrl?: boolean;
  }

  type Callback<R> = (error: RequestError | null, response: R, headers?: any) => void;

  /** An error triggered by nano */
  interface RequestError extends Error {
    /** An error code. */
    error?: string; // 'not_found', 'file_exists'
    /** Human readable reason for the error. */
    reason?: string; // 'missing', 'The database could not be created, the file already exists.';
    /** Was the problem at the socket or couch level */
    scope?: 'couch'  | 'socket';
    /** Status code returned by the server */
    statusCode?: number; // 404;
    /** Request sent to Couch */
    request?: {
      method?: 'GET' | 'POST' | 'PUT' | 'DELETE';
      headers?: { [key: string]: string | number };
      uri?: string; // 'http://couchhost:5984/db/tsp2',
      qs?: any; // { revs_info: true }
    };
    /** Response headers */
    headers?: { [key: string]: string | number };
    /** Error identifier */
    errid?: 'non_200' | 'request'; // string; // 'non_200'
    description?: string;
  }

  /** Server scope */
  interface ServerScope {
    /**
     * An object containing the nano configurations.
     * @see README: {@link https://www.npmjs.com/package/nano#nanoconfig}
     */
    readonly config: ServerConfig;
    db: DatabaseScope;
    /**
     * Returns a database object that allows you to perform operations against that database.
     * @see README: {@link https://www.npmjs.com/package/nano#nanousename}
     */
    use<D>(db: string): DocumentScope<D>;
    /**
     * Returns a database object that allows you to perform operations against that database.
     * @see README: {@link https://www.npmjs.com/package/nano#nanoscopename}
     */
    scope<D>(db: string): DocumentScope<D>;
    /** 
     * Initiates a custom request
     * @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}
     **/
    request(opts: RequestOptions | string, callback?: Callback<any>): Promise<any>;
    /** 
     * Initiates a custom request
     * @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}
     **/
    relax(opts: RequestOptions | string, callback?: Callback<any>): Promise<any>;
    /** 
     * Initiates a custom request
     * @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}
     **/
    dinosaur(opts: RequestOptions | string, callback?: Callback<any>): Promise<any>;
    /** 
     * Initiates new session for specified user credentials by providing Cookie value.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
    auth(username: string, userpass: string, callback?: Callback<DatabaseAuthResponse>): Promise<DatabaseAuthResponse>;
    /** 
     * Returns information about the authenticated user, including a User Context Object, the authentication method and database that were used, and a list of configured authentication handlers on the server.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
    session(callback?: Callback<DatabaseSessionResponse>): Promise<DatabaseSessionResponse>;
    /** 
     * Returns a list of all database events in the CouchDB instance.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
    updates(callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
    /**
     * Returns a list of all database events in the CouchDB instance.
     *  @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
    updates(params: UpdatesParams, callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
    /**
     * Requests one or more Universally Unique Identifiers (UUIDs) from the CouchDB instance.
     * @see Docs: {@link https://docs.couchdb.org/en/stable/api/server/common.html#uuids}
     */
    uuids(num?: number, callback?: Callback<any>): Promise<UUIDObject>;
    /** 
    * Accessing the root of a CouchDB instance returns meta information about the instance.
    * @see Docs: {@link https://docs.couchdb.org/en/stable/api/server/common.html#api-server-root} */
    info(callback?: Callback<InfoResponse>): Promise<InfoResponse>;
  }

  interface UUIDObject {
    uuids: string[];
  }

  /** 
   * Response to CouchDB root API call - cluster information.
   * @see Docs: {@link https://docs.couchdb.org/en/stable/api/server/common.html#api-server-root} */
  interface InfoResponse {
    couchdb: string;
    version: string;
    git_sha: string;
    uuid: string;
    features: string[];
    vendor: { name: string }
  }

  /** 
   * Database creation options
   * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/common.html#put--db} */
  interface DatabaseCreateParams {
    n?: number;
    partitioned?: boolean;
    q?: number;
  }

  /** Database scope */
  interface DatabaseScope {
    replication: {
        enable(source: string, target: string, opts0: object, callback0?: Callback<DatabaseCreateResponse>): Promise<DatabaseCreateResponse>;
        disable(id:string, rev: string, opts0: object, callback0?: Callback<DatabaseCreateResponse>): Promise<DatabaseCreateResponse>;
        query(id: string, opts0: object, callback0?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
    };
    /** 
     * Create database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#put--db} */
    create(name: string, params?: DatabaseCreateParams, callback?: Callback<DatabaseCreateResponse>): Promise<DatabaseCreateResponse>;
    /** Get database information.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
    get(name: string, callback?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
    /** Delete database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#delete--db} */
    destroy(name: string, callback?: Callback<OkResponse>): Promise<OkResponse>;
    /** List databases. 
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_all_dbs} */
    list(callback?: Callback<string[]>): Promise<string[]>;
    /** List databases as a stream.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_all_dbs} */
    listAsStream(): NodeJS.ReadStream;
    /** Use a specific database.
     * @see README: {@link https://www.npmjs.com/package/nano#nanousename} */
    use<D>(db: string): DocumentScope<D>;
    /** Request compaction on a database.
     * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/compact.html} */
    compact(name: string, callback?: Callback<OkResponse>): Promise<OkResponse>;
    /** Request compaction of a database's view indexes.
     * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/compact.html} */
    compact(name: string, designname: string, callback?: Callback<OkResponse>): Promise<OkResponse>;
    /** Request a replication operation. 
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
    replicate<D>(
      source: string | DocumentScope<D>,
      target: string | DocumentScope<D>,
      callback?: Callback<DatabaseReplicateResponse>
    ): Promise<DatabaseReplicateResponse>;
    /** Reqiest a replication 
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
    replicate<D>(
      source: string | DocumentScope<D>,
      target: string | DocumentScope<D>,
      options: DatabaseReplicateOptions,
      callback?: Callback<DatabaseReplicateResponse>
    ): Promise<DatabaseReplicateResponse>;
    /** Return sorted list of changes to a database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
    changes(name: string, callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
    /**  Return sorted list of changes to a database with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
    changes(name: string, params: DatabaseChangesParams, callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
    /**  Return sorted list of changes to a database as a stream.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
    changesAsStream(name: string): NodeJS.ReadStream;
    /**  Return sorted list of changes to a database with options as a stream.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
    changesAsStream(name: string, params: DatabaseChangesParams): NodeJS.ReadStream;
    /** Return a list of all database events.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
    updates(callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
    /** Return a list of all database event with options
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
    updates(params: UpdatesParams, callback?: Callback<DatabaseUpdatesResponse>): Promise<DatabaseUpdatesResponse>;
  }

  /** ChangesReader options */
  interface ChangesReaderOptions {
    /** number of changes per API call */
    batchSize?: number;
    /** whether to get a faster changes feed by supplying 'seq_interval'   */
    fastChanges?: boolean;
    /** where to begin the changes feed: 0, now or a sequence token */
    since?: string;
    /** whether to return document bodies too */
    includeDocs?: boolean;
    /** number of milliseconds when the longpoll request will timeout */
    timeout?: number;
    /** whether to require a callback before performing the next request (get/start only) */
    wait?: boolean;
    /** additional query string parameters */
    qs?: object;
    /** a MangoSelector defining the slice of the changes feed to return */
    selector?: MangoSelector;
  }

  /** ChangesReader functions */
  interface ChangesReaderScope {
    /** fetch changes forever */
    start(opts: ChangesReaderOptions): EventEmitter;
    /** fetch changes and stop when an empty batch is received */
    get(opts: ChangesReaderOptions): EventEmitter;
    /** spool the change in one long feed, instead of batches */
    spool(opts: ChangesReaderOptions): EventEmitter;
    /** stop consuming the changes feed */
    stop(): void;
  }

  /** Documents scope */
  interface DocumentScope<D> {
    /**
     * An object containing the nano configurations.
     * @see README: {@link https://www.npmjs.com/package/nano#nanoconfig} */
    readonly config: ServerConfig;
    /** Get database info
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
    info(callback?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
    /** Request a replication opertation with this datbase as the target.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
    replicate<D>(
      target: string | DocumentScope<D>,
      callback?: Callback<DatabaseReplicateResponse>
    ): Promise<DatabaseReplicateResponse>;
    /** Request a replication opertation with this datbase as the target with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
    replicate(
      target: string | DocumentScope<D>,
      options: any,
      callback?: Callback<DatabaseReplicateResponse>
    ): Promise<DatabaseReplicateResponse>;
    /** Request compaction on this database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
    compact(callback?: Callback<OkResponse>): Promise<OkResponse>;
    /** Return sorted list of changes to this database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
    changes(callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
    /** Return sorted list of changes to this database with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
    changes(params: DatabaseChangesParams, callback?: Callback<DatabaseChangesResponse>): Promise<DatabaseChangesResponse>;
    /**  Changes feed follower. 
     * @see README: {@link https://www.npmjs.com/package/nano#reading-changes-feed} */
    changesReader: ChangesReaderScope;
    /** Initiates new session for specified user credentials by providing Cookie value.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
    auth(username: string, userpass: string, callback?: Callback<DatabaseAuthResponse>): Promise<DatabaseAuthResponse>;
    /** Returns information about the authenticated user, including a User Context Object, the authentication method and database that were used, and a list of configured authentication handlers on the server.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
    session(callback?: Callback<DatabaseSessionResponse>): Promise<DatabaseSessionResponse>;
    /** Insert a document into this database.
     * @see POST Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
     * @see PUT Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
    insert(document: ViewDocument<D> | D & MaybeDocument, callback?: Callback<DocumentInsertResponse>): Promise<DocumentInsertResponse>;
    /** 
     * Insert a document into this database with options.
     * @see POST Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
     * @see PUT Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
    insert(
      document: ViewDocument<D> | D & MaybeDocument,
      params: DocumentInsertParams | string | null,
      callback?: Callback<DocumentInsertResponse>
    ): Promise<DocumentInsertResponse>;
    /** Fetch a document from this database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
    get(docname: string, callback?: Callback<DocumentGetResponse & D>): Promise<DocumentGetResponse & D>;
    /** Fetch a document from this database with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
    get(docname: string, params?: DocumentGetParams, callback?: Callback<DocumentGetResponse & D>): Promise<DocumentGetResponse & D>;
    /** Fetch document meta data, useful for fetching a document's current revision.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#head--db-docid} */
    head(docname: string, callback?: Callback<any>): Promise<any>;
    /** Delete a document from this database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid} */
    destroy(docname: string, rev: string, callback?: Callback<DocumentDestroyResponse>): Promise<DocumentDestroyResponse>;
    /** Bulk insert/update/delete multiple documents in this database.
     * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/bulk-api.html#db-bulk-docs} */
    bulk(docs: BulkModifyDocsWrapper, callback?: Callback<DocumentBulkResponse[]>): Promise<DocumentBulkResponse[]>;
    /** Bulk insert/update/delete multiple documents in this database, with options.
     * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/bulk-api.html#db-bulk-docs} */
    bulk(docs: BulkModifyDocsWrapper, params: any, callback?: Callback<DocumentInsertResponse[]>): Promise<DocumentInsertResponse[]>;
    /** List documents from this database.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
    list(callback?: Callback<DocumentListResponse<D>>): Promise<DocumentListResponse<D>>;
    /** List documents from this database with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
    list(params: DocumentListParams, callback?: Callback<DocumentListResponse<D>>): Promise<DocumentListResponse<D>>;
    /** List document from this database as a stream.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
    listAsStream(): NodeJS.ReadStream;
    /** List document from this database as a stream with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
    listAsStream(params: DocumentListParams): NodeJS.ReadStream;
    /** Fetch a list of documents by _id.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
    fetch(docnames: BulkFetchDocsWrapper, callback?: Callback<DocumentFetchResponse<D>>): Promise<DocumentFetchResponse<D>>;
    /** Fetch a list of documents by _id with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
    fetch(
      docnames: BulkFetchDocsWrapper,
      params: DocumentFetchParams,
      callback?: Callback<DocumentFetchResponse<D>>
    ): Promise<DocumentFetchResponse<D>>;
    /** Fetch revisions of a list of document _ids.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
    fetchRevs(docnames: BulkFetchDocsWrapper, callback?: Callback<DocumentFetchRevsResponse<D>>): Promise<DocumentFetchRevsResponse<D>>;
    /** Fetch revisions of a list of document _ids with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
    fetchRevs(
      docnames: BulkFetchDocsWrapper,
      params: DocumentFetchParams,
      callback?: Callback<DocumentFetchRevsResponse<D>>
    ): Promise<DocumentFetchRevsResponse<D>>;
    /** Create a Mango index.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
    createIndex(indexDef: CreateIndexRequest,
                callback?:  Callback<CreateIndexResponse>
    ): Promise<CreateIndexResponse>;
    /** Multipart HTTP functions */
    multipart: Multipart<D>;
    /** Attachment functions */
    attachment: Attachment;
    /** Apply a show function to a document.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#get--db-_design-ddoc-_show-func} */
    show(
      designname: string,
      showname: string,
      doc_id: string,
      callback?: Callback<any>
    ): Promise<any>;
    /** Apply a show function to a document.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#get--db-_design-ddoc-_show-func} */
    show(
      designname: string,
      showname: string,
      doc_id: string,
      params: any,
      callback?: Callback<any>
    ): Promise<any>;
    /** Executes an update function on the server side for the supplied document id.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
    atomic<R>(
      designname: string,
      updatename: string,
      docname: string,
      callback?: Callback<R>
    ): Promise<R>;
    /** Executes an update function on the server side for the supplied document id with body.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
    atomic<R>(
      designname: string,
      updatename: string,
      docname: string,
      body: any,
      callback?: Callback<R>
    ): Promise<R>;
    /** Executes an update function on the server side for the supplied document id.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
    updateWithHandler(
      designname: string,
      updatename: string,
      docname: string,
      callback?: Callback<OkResponse>
    ): Promise<OkResponse>;
    /** Executes an update function on the server side for the supplied document id with body.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
    updateWithHandler(
      designname: string,
      updatename: string,
      docname: string,
      body: any,
      callback?: Callback<OkResponse>
    ): Promise<OkResponse>;
    /** Executes a search request against the named index.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/ddoc/search.html#db-design-design-doc-search-index-name} */
    search<V>(
      designname: string,
      searchname: string,
      params: DocumentSearchParams,
      callback?: Callback<DocumentSearchResponse<V>>
    ): Promise<DocumentSearchResponse<V>>;
    /** Executes a search request against the named index as a stream.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/ddoc/search.html#db-design-design-doc-search-index-name} */
    searchAsStream<V>(
      designname: string,
      searchname: string,
      params: DocumentSearchParams
    ): NodeJS.ReadStream;
    /** Low-level wrapper that executes a view from a Design Document.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
    baseView<V>(
      designname: string,
      viewname: string,
      meta: any,
      params?: any,
      callback?: Callback<any>
    ): Promise<any>;
    /** Executes a view from a Design Document.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
    view<V>(
      designname: string,
      viewname: string,
      callback?: Callback<DocumentViewResponse<V,D>>
    ): Promise<DocumentViewResponse<V,D>>;
    /**  Executes a view from a Design Document, with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
    view<V>(
      designname: string,
      viewname: string,
      params: DocumentViewParams,
      callback?: Callback<DocumentViewResponse<V,D>>
    ): Promise<DocumentViewResponse<V,D>>;
    /** Executes a view from a Design Document as a stream
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
    viewAsStream<V>(
      designname: string,
      viewname: string
    ): NodeJS.ReadStream;
    /** Executes a view from a Design Document, with options as a stream
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
    viewAsStream<V>(
      designname: string,
      viewname: string,
      params: DocumentViewParams
    ): NodeJS.ReadStream;
    /** Applies a list function to a view.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
    viewWithList(
      designname: string,
      viewname: string,
      listname: string,
      callback?: Callback<any>
    ): Promise<any>;
    /** Applies a list function to a view with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
    viewWithList(
      designname: string,
      viewname: string,
      listname: string,
      params: DocumentViewParams,
      callback?: Callback<any>
    ): Promise<any>;
    /** Applies a list function to a view as a stream.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
    viewWithListAsStream(
        designname: string,
        viewname: string,
        listname: string,
        callback?: Callback<any>
    ): NodeJS.ReadStream;
    /** Applies a list function to a view with options as a stream.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
    viewWithListAsStream(
        designname: string,
        viewname: string,
        listname: string,
        params: DocumentViewParams,
        callback?: Callback<any>
    ): NodeJS.ReadStream;
    /** Run Mango query.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-find} */
    find(query: MangoQuery, callback?: Callback<MangoResponse<D>>): Promise <MangoResponse<D>>;
    /** Server scope */
    server: ServerScope;
    /** Fetch information about a single partition in this database.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition} */
    partitionInfo(partitionKey: string, callback?: Callback<PartitionInfoResponse>): Promise <PartitionInfoResponse>;
    /** List documents in a single partition in this database.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-all-docs} */
    partitionedList(partitionKey: string, params?: DocumentFetchParams, callback?: Callback<DocumentListResponse<D>>): Promise<DocumentListResponse<D>>;
    /** List documents in a single partition in this database as a stream.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-all-docs} */
    partitionedListAsStream(partitionKey: string, params?: DocumentFetchParams): NodeJS.ReadStream;
    /** Run Mango query a single partition in this database.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-id-find} */
    partitionedFind(partitionKey: string, query: MangoQuery, callback?: Callback<MangoResponse<D>>): Promise <MangoResponse<D>>;
    /** Run Mango query a single partition in this database, as a stream.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-id-find} */
    partitionedFindAsStream(partitionKey: string, query: MangoQuery): NodeJS.ReadStream;
    /** Run a full-text search in a single partition in this database. */
    partitionedSearch<V>(
      partitionKey: string,
      designname: string,
      searchname: string,
      params: DocumentSearchParams,
      callback?: Callback<DocumentSearchResponse<V>>
    ): Promise<DocumentSearchResponse<V>>;
    /** Run a full-text search in a single partition in this database, as a stream. */
    partitionedSearchAsStream(
      partitionKey: string,
      designname: string,
      searchname: string,
      params: DocumentSearchParams
    ): NodeJS.ReadStream;
    /** Executes the specified view function in a single partition from the specified design document.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-design-design-doc-view-view-name} */
    partitionedView<V>(
      partitionKey: string,
      designname: string,
      viewname: string,
      params: DocumentViewParams,
      callback?: Callback<DocumentViewResponse<V,D>>
    ): Promise<DocumentViewResponse<V,D>>;
    /** Executes the specified view function in a single partition from the specified design document, as a stream
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/partitioned-dbs.html#db-partition-partition-design-design-doc-view-view-name} */
    partitionedViewAsStream<V>(
      partitionKey: string,
      designname: string,
      viewname: string,
      params: DocumentViewParams
    ): NodeJS.ReadStream;
  }

  /** attachment data */
  interface AttachmentData {
    name: string;
    data: any;
    content_type: any;
  }

  /** Multi-part HTTP functions */
  interface Multipart<D> {
    /** Create doc with multiple attachments using mutlipart HTTP request.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments} */
    insert(doc: D, attachments: AttachmentData[], callback?: Callback<DocumentInsertResponse>): Promise<DocumentInsertResponse>;
    /** Create doc with multiple attachments using mutlipart HTTP request with options.
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments} */
    insert(doc: D, attachments: AttachmentData[], params: any, callback?: Callback<DocumentInsertResponse>): Promise<DocumentInsertResponse>;
    /** Fetch document and its attachments as a multipart HTTP request. 
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/common.html#efficient-multiple-attachments-retrieving} */
    get(docname: string, callback?: Callback<any>): Promise<any>;
    /** Fetch document and its attachments as a multipart HTTP request with options.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/common.html#efficient-multiple-attachments-retrieving} */
     get(docname: string, params: any, callback?: Callback<any>): Promise<any>;
  }

  /** Attachment functions */
  interface Attachment {
    /** Insert an attachment.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname} */
    insert(
      docname: string,
      attname: string,
      att: any,
      contenttype: string,
      callback?: Callback<DocumentInsertResponse>
    ): Promise<DocumentInsertResponse>;
    /** Insert an attachment with options.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#put--db-docid-attname} */
    insert(
      docname: string,
      attname: string,
      att: any,
      contenttype: string,
      params: any,
      callback?: Callback<DocumentInsertResponse>
    ): Promise<DocumentInsertResponse>;
    /** Get an attachment.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#get--db-docid-attname} */
    get(docname: string, attname: string, callback?: Callback<Buffer>): Promise<Buffer>;
    /** Get an attachment as a stream.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#get--db-docid-attname} */
    getAsStream(docname: string, attname: string): NodeJS.ReadStream;
    /** Get an attachment with options.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#get--db-docid-attname} */
    get(
      docname: string,
      attname: string,
      params: any,
      callback?: Callback<Buffer>
    ): Promise<Buffer>;
    /** Delete an attachment.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#delete--db-docid-attname} */
    destroy(docname: string, attname: string, callback?: Callback<any>): Promise<any>;
    /** Delete an attachment with options.
     * @see Docs: {@link https://docs.couchdb.org/en/latest/api/document/attachments.html#delete--db-docid-attname} */
    destroy(
      docname: string,
      attname: string,
      params: any,
      callback?: Callback<any>
    ): Promise<any>;
  }

  /** Server configuration */
  interface ServerConfig {
    url: string;
    db: string;
  }

  /** Custom request options 
   * @see README: {@link https://www.npmjs.com/package/nano#nanorequestopts-callback}*/
  interface RequestOptions {
    db?: string;
    method?: string;
    path?: string;
    doc?: string;
    att?: string;
    qs?: any;
    content_type?: string;
    headers?: any;
    body?: any;
    encoding?: string;
    multipart?: any[];
  }

  /** Global changes feed paramters.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
  interface UpdatesParams {
    feed: "longpoll" | "continuous" | "eventsource";
    timeout: number;
    heartbeat: boolean;
    since: string;
  }

  interface BulkModifyDocsWrapper {
    docs: any[];
  }

  interface BulkFetchDocsWrapper {
    keys: string[];
  }

  // -------------------------------------
  // Document
  // -------------------------------------

  interface MaybeIdentifiedDocument {
    _id?: string;
  }

  interface IdentifiedDocument {
    _id: string;
  }

  interface MaybeRevisionedDocument {
    _rev?: string;
  }

  interface RevisionedDocument {
    _rev: string;
  }

  interface MaybeDocument extends MaybeIdentifiedDocument, MaybeRevisionedDocument {
  }

  interface Document extends IdentifiedDocument, RevisionedDocument {
  }

  // -------------------------------------
  // View
  // -------------------------------------

  type DocumentInfer<D> = (doc: D & Document) => void
  interface View<D> {
    map?: string | DocumentInfer<D>;
    reduce?: string | DocumentInfer<D>

  }

  interface ViewDocument<D> extends IdentifiedDocument {
    views: {
      [name: string]: View<D>
    };
  }

  // -------------------------------------
  // Database scope request and response
  // -------------------------------------

  /** Database creation options
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#put--db} */
  interface DatabaseCreateResponse {
    /** Operation status. Available in case of success */
    ok?: boolean;

    /** Error type. Available if response code is 4xx */
    error?: string;

    /** Error description. Available if response code is 4xx */
    reason?: string;
  }

  /** Database information response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
  interface DatabaseGetResponse {
    /** Set to true if the database compaction routine is operating on this database. */
    compact_running: boolean;

    /** The name of the database. */
    db_name: string;

    /** The version of the physical format used for the data when it is stored on disk. */
    disk_format_version: number;

    /** The number of bytes of live data inside the database file. */
    data_size: number;

    /** The length of the database file on disk. Views indexes are not included in the calculation. */
    disk_size: number;

    /** A count of the documents in the specified database. */
    doc_count: number;

    /** Number of deleted documents */
    doc_del_count: number;

    /** Timestamp of when the database was opened, expressed in microseconds since the epoch. */
    instance_start_time: string;

    /** The number of purge operations on the database. */
    purge_seq: number;

    sizes: {
      /** The size of live data inside the database, in bytes. */
      active: number;

      /** The uncompressed size of database contents in bytes. */
      external: number;

      /** The size of the database file on disk in bytes. Views indexes */
      file: number;
    };

    /** The current number of updates to the database. */
    update_seq: number;
  }

  /** OK response
   * @see Delete docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#delete--db}
   * @see Compaction docs: {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
  interface OkResponse {
    /** Operation status */
    ok: boolean;
  }

  /** Database _replicate options.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
  interface DatabaseReplicateOptions {
    /** Cancels the replication */
    cancel?: boolean;

    /** Configure the replication to be continuous */
    continuous?: boolean;

    /** Creates the target database. Required administrator’s privileges on target server. */
    create_target?: boolean;

    /** Array of document IDs to be synchronized */
    doc_ids?: string[];

    /** The name of a filter function. */
    filter?: string;

    /** Address of a proxy server through which replication should occur (protocol can be “http” or “socks5”) */
    proxy?: string;

    /** Source database name or URL */
    source?: string;

    /** Target database name or URL */
    target?: string;
  }

  /** Database replication history.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
  interface DatabaseReplicationHistoryItem {
    /** Number of document write failures */
    doc_write_failures: number;

    /** Number of documents read */
    docs_read: number;

    /** Number of documents written to target */
    docs_written: number;

    /** Last sequence number in changes stream */
    end_last_seq: number;

    /** Date/Time replication operation completed in RFC 2822 format */
    end_time: string;

    /** Number of missing documents checked */
    missing_checked: number;

    /** Number of missing documents found */
    missing_found: number;

    /** Last recorded sequence number */
    recorded_seq: number;

    /** Session ID for this replication operation */
    session_id: string;

    /** First sequence number in changes stream */
    start_last_seq: number;

    /** Date/Time replication operation started in RFC 2822 format */
    start_time: string;
  }

  /** Database _replicate response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
  interface DatabaseReplicateResponse {
    /** Replication history */
    history: DatabaseReplicationHistoryItem[];

    /** Replication status */
    ok: boolean;

    /** Replication protocol version */
    replication_id_version: number;

    /** Unique session ID */
    session_id: string;

    /** Last sequence number read from source database */
    source_last_seq: number;
  }

  /** Database _changes parameters.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
  interface DatabaseChangesParams {
    /** List of document IDs to filter the changes feed as valid JSON array.
     *
     * Used with _doc_ids filter. Since length of URL is limited, it is better to use POST /{db}/_changes instead. */
    doc_ids?: string[];

    /** Includes conflicts information in response.
     *
     * Ignored if `include_docs` isn’t true.
     *
     * @default false */
    conflicts?: boolean;

    /** Return the change results in descending sequence order (most recent change first).
     *
     * @default false */
    descending?: boolean;

    /** Polling mode.
     *
     * - `"normal"` Specifies Normal Polling Mode. All past changes are returned immediately. Default.
     * - `"longpoll"` Specifies Long Polling Mode. Waits until at least one change has occurred, sends the change, then
     *   closes the connection. Most commonly used in conjunction with since=now, to wait for the next change.
     * - `"continuous"` Sets Continuous Mode. Sends a line of JSON per event. Keeps the socket open until timeout.
     * - `"eventsource"` Sets Event Source Mode. Works the same as Continuous Mode, but sends the events in EventSource
     *   format.
     *
     * @detault "normal" */
    feed?: "normal" | "longpoll" | "continuous" | "eventsource";

    /** Reference to a filter function from a design document.
     * 
     * The filter function will filter whole stream emitting only filtered events. See the section Change Notifications
     * in the book CouchDB The Definitive Guide for more information. */
    filter?: string;

    /** Period in milliseconds after which an empty line is sent in the results.
     * 
     * Only applicable for longpoll, continuous, and eventsource feeds. Overrides any timeout to keep the feed alive
     * indefinitely. May be true to use default value.
     *
     * @default 60000 */
    heartbeat?: number;

    /** Include the associated document with each result.
     *
     * If there are conflicts, only the winning revision is returned.
     *
     * @default false */
    include_docs?: boolean;

    /** Include the Base64-encoded content of attachments in the documents that are included if include_docs is true.
     *
     * Ignored if include_docs isn’t true.
     *
     * @default false */
    attachments?: boolean;

    /** Include encoding information in attachment stubs.
     * 
     * Only used if include_docs is true and the particular attachment is compressed. Ignored if include_docs isn’t
     * true.
     *
     * @default false */
    att_encoding_info?: boolean;

    /** Limit number of result rows to the specified value.
     *
     * Note that using 0 here has the same effect as 1. */
    limit?: number;

    /** Start the results from the change immediately after the given update sequence.
     *
     * Can be valid update sequence or now value.
     *
     * @default 0 */
    since?: number;

    /** Specifies how many revisions are returned in the changes array.
     * 
     * The default, `"main_only"`, will only return the current “winning” revision; `"all_docs"` will return all leaf
     * revisions (including conflicts and deleted former conflicts).
     *
     * @default "main_only" */
    style?: string;

    /** Maximum period in milliseconds to wait for a change before the response is sent, even if there are no results.
     *
     * Only applicable for longpoll or continuous feeds. Default value is specified by httpd/changes_timeout
     * configuration option. Note that 60000 value is also the default maximum timeout to prevent undetected dead
     * connections. */
    timeout?: number;

    /** Allows to use view functions as filters.
     *
     * Documents counted as “passed” for view filter in case if map function emits at least one record for them.
     *
     * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/changes.html#changes-filter-view|_view} for more info. */
    view?: string;
  }

  /** Database change item.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
  interface DatabaseChangesResultItem {
    /** List of document’s leaves with single field rev. */
    changes: Array<{ rev: string }>;

    /** Document ID. */
    id: string;

    /** Update sequence. */
    seq: any;

    /** true if the document is deleted. */
    deleted: boolean;
  }

  /** Database _changes response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
  interface DatabaseChangesResponse {
    /** Last change update sequence */
    last_seq: any;

    /** Count of remaining items in the feed */
    pending: number;

    /** Changes made to a database */
    results: DatabaseChangesResultItem[];
  }

  /** Database authentication response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
  interface DatabaseAuthResponse {
    /** Operation status */
    ok: boolean;

    /** Username */
    name: string;

    /** List of user roles */
    roles: string[];
  }

  /** Database _session response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
  interface DatabaseSessionResponse {
    /** Operation status */
    ok: boolean;

    /** User context for the current user */
    userCtx: any;

    /** Server authentication configuration */
    info: any;
  }

  /** Database global changes result item.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
  interface DatabaseUpdatesResultItem {
    /** Database name. */
    db_name: string;

    /** A database event is one of created, updated, deleted. */
    type: string;

    /** Update sequence of the event. */
    seq: any;
  }

  /** Global changes response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
  interface DatabaseUpdatesResponse {
    /** An array of database events.
     *
     * For longpoll and continuous modes, the entire response is the contents of the results array. */
    results: DatabaseUpdatesResultItem[];

    /** The last sequence ID reported. */
    last_seq: string;
  }

  // -------------------------------------
  // Document scope request and response
  // -------------------------------------

  /** Bulk API per-document response. */
  interface DocumentResponseRowMeta {
    id: string;
    key: string;
    value: {
      rev: string;
    };
    error?: string;
  }

  /** Bulk API per-document response with document body. */
  interface DocumentResponseRow<D> extends DocumentResponseRowMeta {
    doc?: D & Document;
  }

  /** Bulk API response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_bulk_docs} */
  interface DocumentBulkResponse {
    /** Document ID. Available in all cases */
    id: string;

    /** New document revision token. Available if document has saved without errors. */
    rev?: string;

    /** Error type. Available if response code is 4xx */
    error?: string;

    /** Error reason. Available if response code is 4xx */
    reason?: string;
  }

  /** Document insert parameters.
   * @see POST docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
   * @see PUT docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
  interface DocumentInsertParams {
    /** Document’s revision if updating an existing document. Alternative to If-Match header or document key. */
    rev?: string;

    /** Stores document in batch mode. */
    batch?: "ok";

    /** Prevents insertion of a conflicting document.
     * 
     * If false, a well-formed `_rev` must be included in the document. `new_edits=false` is used by the replicator to
     * insert documents into the target database even if that leads to the creation of conflicts.
     *
     * @default true */
    new_edits?: boolean;
  }

  /** Document insert response: 
   * @see POST docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
   * @see PUT docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
  interface DocumentInsertResponse {
    /** Document ID */
    id: string;

    /** Operation status */
    ok: boolean;

    /** Revision MVCC token */
    rev: string;
  }

  /** Document delete response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid} */
  interface DocumentDestroyResponse {
    /** Document ID */
    id: string;

    /** Operation status */
    ok: boolean;

    /** Revision MVCC token */
    rev: string;
  }

  /** Document get parameters.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
  interface DocumentGetParams {
    /** Includes attachments bodies in response.
     *
     * @default false */
    attachments?: boolean;

    /** Includes encoding information in attachment stubs if the particular attachment is compressed.
     *
     * @default false */
    att_encoding_info?: boolean;

    /** Includes attachments only since specified revisions.
     *
     * Doesn’t includes attachments for specified revisions. */
    atts_since?: any[];

    /** Includes information about conflicts in document.
     *
     * @default false */
    conflicts?: boolean;

    /** Includes information about deleted conflicted revisions.
     *
     * @default false */
    deleted_conflicts?: boolean;

    /** Forces retrieving latest “leaf” revision, no matter what rev was requested.
     *
     * @default false */
    latest?: boolean;

    /** Includes last update sequence for the document.
     *
     * @default false */
    local_seq?: boolean;

    /** Acts same as specifying all conflicts, deleted_conflicts and revs_info query parameters.
     *
     * @default false */
    meta?: boolean;

    /** Retrieves documents of specified leaf revisions.
     *
     * Additionally, it accepts value as all to return all leaf revisions. */
    open_revs?: any[];

    /** Retrieves document of specified revision. */
    rev?: string;

    /** Includes list of all known document revisions. */
    revs?: boolean;

    /** Includes detailed information for all known document revisions.
     *
     * @default false */
    revs_info?: boolean;
  }

  /** Document get response: 
   * @see docs: {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
  interface DocumentGetResponse {
    /** Document ID. */
    _id: string;

    /** Revision MVCC token. */
    _rev: string;

    /** Deletion flag. Available if document was removed. */
    _deleted?: boolean;

    /** Attachment’s stubs. Available if document has any attachments. */
    _attachments?: any;

    /** List of conflicted revisions. Available if requested with conflicts=true query parameter. */
    _conflicts?: any[];

    /** List of deleted conflicted revisions. Available if requested with deleted_conflicts=true query parameter. */
    _deleted_conflicts?: any[];

    /** Document’s update sequence in current database. Available if requested with local_seq=true query parameter. */
    _local_seq?: string;

    /** List of objects with information about local revisions and their status.
     *
     * Available if requested with open_revs query parameter. */
    _revs_info?: any[];

    /** List of local revision tokens without.
     *
     * Available if requested with revs=true query parameter. */
    _revisions?: any;
  }

  /** _all_docs parameters
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
  interface DocumentListParams {
    /** Includes conflicts information in response.
     *
     * Ignored if include_docs isn’t true.
     *
     * @default false */
    conflicts?: boolean;

    /** Return the documents in descending by key order.
     *
     * @default false */
    descending?: boolean;

    /** Stop returning records when the specified key is reached. */
    endkey?: string;

    /** Stop returning records when the specified key is reached.
     *
     * end_key is an alias for endkey */
    end_key?: string;

    /** Stop returning records when the specified document ID is reached. */
    end_key_doc_id?: string;

    /** Include the full content of the documents in the return.
     *
     * @default false */
    include_docs?: boolean;

    /** Specifies whether the specified end key should be included in the result.
     *
     * @default true */
    inclusive_end?: boolean;

    /** Return only documents that match the specified key. */
    key?: string;

    /** Return only documents that match the specified keys. */
    keys?: string | string[];

    /** Limit the number of the returned documents to the specified number. */
    limit?: number;

    /** Skip this number of records before starting to return the results.
     *
     * @default 0 */
    skip?: number;

    /** Allow the results from a stale view to be used.
     *
     * Using a stale view wont trigger a rebuild of all views within the encompassing design doc.
     *
     * Supported values: "ok" and "update_after". */
    stale?: string;

    /** Return records starting with the specified key. */
    startkey?: string;

    /** Return records starting with the specified key.
     *
     * start_key is an alias for startkey */
    start_key?: string;

    /** Return records starting with the specified document ID. */
    start_key_doc_id?: string;

    /** Response includes an update_seq value indicating which sequence id of the underlying database the view reflects.
     *
     * @default false */
    update_seq?: boolean;
  }

  /** _all_docs response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
  interface DocumentListResponse<D> {
    /** Offset where the document list started. */
    offset: number;

    /** Array of view row objects.
     *
     * By default the information returned contains only the document ID and revision. */
    rows: Array<DocumentResponseRow<D>>;

    /** Number of documents in the database/view.
     *
     * Note that this is not the number of rows returned in the actual query.  */
    total_rows: number;

    /** Current update sequence for the database. */
    update_seq?: number;
  }

  /** Fetch with POST _all_docs parameters.
   * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
  interface DocumentFetchParams {
    conflicts?: boolean;
    descending?: boolean;
    end_key?: string;
    end_key_doc_id?: string;
    inclusive_end?: boolean;
    key?: string;
    keys?: string | string[]; 
    limit?: number;
    skip?: number;
    stale?: string;
    start_key?: string;
    start_key_doc_id?: string;
    update_seq?: boolean;
  }

  /** Document fetch error */
  interface DocumentLookupFailure {
    key: string;
    error: string;
  }

  /** Fetch with POST _all_docs response
   * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
  interface DocumentFetchResponse<D> {
    offset: number;
    rows: Array<DocumentResponseRow<D> | DocumentLookupFailure>;
    total_rows: number;
    update_seq?: number;
  }

  /** Fetch revisions response
   * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
  interface DocumentFetchRevsResponse<D> {
    offset: number;
    rows: Array<DocumentResponseRow<D> | DocumentLookupFailure>;
    total_rows: number;
    update_seq?: number;
  }

  /** Search response
   * @see Docs: {@link https://docs.couchdb.org/en/latest/ddocs/search.html#queries} */
  interface DocumentSearchResponse<V> {

    /**  Array of search results */
    rows: Array<{
      id: string;
      order: number[];
      fields: object;
      key: string;
      doc?: V;
    }>;

    /** Number of documents in the search resykts */
    total_rows: number;

    /** token which if supplied to a subsequent search will return the next page of results. */
    bookmark: string;

    /** facet counts */
    counts?: object;

    /** facet range results */
    ranges?: object;

    highlights?: object;

  }


  /** Partitioned database info response.
   * @see Docs: {@link https://docs.couchdb.org/en/latest/partitioned-dbs/index.html} */
  interface PartitionInfoResponse {
    /** Database name */
    db_name:  string;

    /** Partition sizes */
    sizes: {
      active: number;
      external: number;
    }

    /** Partition name */
    partition: string;

    /** Document count */
    doc_count: number;

    /** Deleted document count */
    doc_del_count: number;
  }

  /** Document search parameters: 
   * @see Docs: {@link https://docs.couchdb.org/en/latest/ddocs/search.html#queries} */
  interface DocumentSearchParams {
    /** A bookmark that was received from a previous search. Used for pagination. */
    bookmark?: string;

    /** An array of field names for which facet counts are requested. */
    counts?: string[];

    /** Filters the result set using key value pairs supplied to the drilldown parameter. */
    drilldown?: string[];

    /** The name of a string field to group results by. */
    group_field?: string;

    /** The maximum group count when used in conjunction with group_field. */
    group_limit?: number;

    /** Defines the order of the groups in a search when used with group_field. */
    group_sort?: string | string[];

    /** Which fields are to be highlighted. */
    highlight_fields?: string[];

    /** String used before a highlighted word.
     *
     * @default <em> */
    highlight_pre_tag?: string;

    /** String used after a highlighted word.
     *
     * @default </em> */
    highlight_post_tag?: string;

    /** The number of gradments that are returned in highlights.
     *
     * @default 1 */
    highlight_number?: number;

    /** The number of characters in each fragment for highlight.
     *
     * @default 100 */
    highlight_size?: number;

    /** Include the full document bodies in the response.
     *
     * @default false */
    include_docs?: boolean;

    /** An array of fields to include in the search results */
    include_fields?: string[];

    /** The maximum number of returned documents.
     *
     * Positive integer up to 200. */
    limit?: number;

    /** Alias of 'query'.
     *
     * One of q or query must be present. */
    q?: string;

    /** The Lucene query to perform.
     *
     * One of q or query must be present. */
    query?: string;

    /** Defines ranges for faceted numeric search fields. */
    ranges?: object;

    /** Specifies the sort order of the results. */
    sort?: string | string[];

    /** Do not wait for the index to finish building to return results. */
    stale?: boolean;
  }

  /** View query parameters.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
  interface DocumentViewParams {
    /** Includes conflicts information in response.
     *
     * Ignored if include_docs isn’t true.
     *
     * @default false */
    conflicts?: boolean;

    /** Return the documents in descending by key order.
     *
     * @default false */
    descending?: boolean;

    /** Stop returning records when the specified key is reached. */
    endkey?: any;

    /** Alias for endkey param. */
    end_key?: any;

    /** Stop returning records when the specified document ID is reached.
     *
     * Requires endkey to be specified for this to have any effect. */
    endkey_docid?: string;

    /** Alias for endkey_docid param. */
    end_key_doc_id?: string;

    /** Group the results using the reduce function to a group or single row.
     *
     * @default false */
    group?: boolean;

    /** Specify the group level to be used. */
    group_level?: number;

    /** Include the associated document with each row.
     *
     * @default false */
    include_docs?: boolean;

    /** Include the Base64-encoded content of attachments in the documents that are included if include_docs is true.
     *
     * Ignored if include_docs isn’t true.
     *
     * @default false */
    attachments?: boolean;

    /** Include encoding information in attachment stubs.
     *
     * Only if include_docs is true and the particular attachment is compressed.
     *
     * Ignored if include_docs isn’t true.
     *
     * @default false */
    att_encoding_info?: boolean;

    /** Specifies whether the specified end key should be included in the result.
     *
     * @default true */
    inclusive_end?: boolean;

    /** Return only documents that match the specified key. */
    key?: any;

    /** Return only documents where the key matches one of the keys specified in the array. */
    keys?: any[];

    /** Limit the number of the returned documents to the specified number. */
    limit?: number;

    /** Use the reduction function.
     *
     * @default true */
    reduce?: boolean;

    /** Skip this number of records before starting to return the results.
     *
     * @default 0 */
    skip?: number;

    /** Sort returned rows.
     * 
     * Setting this to false offers a performance boost. The total_rows and offset fields are not available when this is
     * set to false.
     *
     * @default true */
    sorted?: boolean;

    /** Whether or not the view results should be returned from a stable set of shards.
     *
     * @default false */
    stable?: boolean;

    /** Allow the results from a stale view to be used.
     * 
     * Supported values: ok, update_after and false.
     * 
     * - ok is equivalent to stable=true&update=false.  
     * - update_after is equivalent to stable=true&update=lazy.
     * - false is equivalent to stable=false&update=true.
     */
    stale?: string;

    /** Return records starting with the specified key. */
    startkey?: any;

    /** Alias for startkey param */
    start_key?: any;

    /** Return records starting with the specified document ID.
     *
     * Requires startkey to be specified for this to have any effect. */
    startkey_docid?: string;

    /** Alias for startkey_docid param */
    start_key_doc_id?: string;

    /**  Whether or not the view in question should be updated prior to responding to the user.
     *
     * Supported values: true, false, lazy.
     *
     * @default true */
    update?: string;

    /** Response includes an update_seq value indicating which sequence id of the database the view reflects.
     *
     * @default false */
    update_seq?: boolean;
  }

  /** View response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
  interface DocumentViewResponse<V,D> {
    /** Offset where the document list started. */
    offset: number;

    /** Array of view row objects.
     *
     * By default the information returned contains only the document ID and revision. */
    rows: Array<{
      id: string;
      key: string;
      value: V;
      doc?: D & Document;
    }>;

    /** Number of documents in the database/view. */
    total_rows: number;

    /** Current update sequence for the database */
    update_seq: any;
  }


  type MangoValue = number | string | Date | boolean | object | null;
  type MangoOperator = '$lt' | '$lte' | '$eq' | '$ne' | '$gte' | '$gt' |
                    '$exists' | '$type' |
                    '$in' | '$nin' | '$size' | '$mod' | '$regex' |
                    '$or' | '$and' | '$nor' | '$not' | '$all' | '$allMatch' | '$elemMatch';
  /** Mango selector syntax.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#selector-syntax} */
  type MangoSelector = {
    [K in MangoOperator | string]: MangoSelector| MangoSelector[] | MangoValue | MangoValue[];
  }

  /** Mango sort syntax
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#sort-syntax} */
  type SortOrder = string | string[] | { [key: string]: 'asc' | 'desc' };

  /** Mango query syntax.
   * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/find.html#db-find}  */
  interface MangoQuery {
    /** JSON object describing criteria used to select documents. */
    selector: MangoSelector;

    /** Maximum number of results returned. @default 25 */
    limit?: number;

    /** Skip the first 'n' results, where 'n' is the value specified. */
    skip?: number;

    /** JSON array following sort syntax. */
    sort?: SortOrder[];

    /** JSON array specifying which fields of each object should be returned.
     * 
     * If it is omitted, the entire object is returned.
     *
     * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#filtering-fields} */
    fields?: string[];

    /* Instruct a query to use a specific index.
     *
     * Specified either as "<design_document>" or ["<design_document>", "<index_name>"]. */
    use_index?: string | [string, string];

    /** Read quorum needed for the result.
     *
     * @default 1 */
    r?: number;

    /** A string that enables you to specify which page of results you require.
     *
     * Used for paging through result sets. */
    bookmark?: string;

    /** Whether to update the index prior to returning the result.
     *
     * @default true */
    update?: boolean;

    /** Whether or not the view results should be returned from a “stable” set of shards. */
    stable?: boolean;

    /** Combination of update = false and stable = true options.
     *
     * Possible options: "ok", false (default). */
    stale?: 'ok' | false;

    /** Include execution statistics in the query response.
     *
     * Optional, default: false. */
    execution_stats?: boolean;
  }

  /** Mango response.
   * @see Docs: {@link https://docs.couchdb.org/en/latest/api/database/find.html#db-find}  */
  interface MangoResponse<D> {
    /** Array of documents matching the search.
     * 
     * In each matching document, the fields specified in the fields part of the request body are listed, along with
     * their values. */
    docs: (D & {_id: string, _rev:string})[];

    /** A string that enables you to specify which page of results you require.
     *
     * Used for paging through result sets. */
    bookmark?: string;

    /** Execution warnings */
    warning?: string;

    /** Basic execution statistics for a specific request. */
    execution_stats?: MangoExecutionStats;
  }

  /** Mango execution stats.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#execution-statistics} */
  interface MangoExecutionStats {
    /** Number of index keys examined. Currently always 0. */
    total_keys_examined: number;

    /** Number of documents fetched from the database / index.
     *
     * Equivalent to using include_docs = true in a view. */
    total_docs_examined: number;

    /** Number of documents fetched from the database using an out-of-band document fetch.
     *
     * This is only non-zero when read quorum > 1 is specified in the query parameters. */
    total_quorum_docs_examined: number;

    /** Number of results returned from the query. */
    results_returned: number;

    /** Total execution time in milliseconds as measured by the database. */
    execution_time_ms: number;
  }

  /** Mango create index parameters.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
  interface CreateIndexRequest{
    /** JSON object describing the index to create */
    index: {
      /** Array of field names following the sort syntax. */
      fields: SortOrder[],

      /** A selector to apply to documents at indexing time, creating a partial index. */
      partial_filter_selector?: MangoSelector
    },

    /** Name of the design document in which the index will be created. */
    ddoc?: string

    /** Name of the index. If no name is provided, a name will be generated automatically. */
    name?: string,

    /** Can be "json" or "text".
     *
     * @default "json" */
    type?: 'json' | 'text',

    /** This field sets whether the created index will be a partitioned or global index. */
    partitioned?: boolean
  }

  /** Mango create index response.
   * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
  interface CreateIndexResponse {
    /** Flag to show whether the index was created or one already exists.
     *
     * Can be “created” or “exists”. */
    result: string,

    /** Id of the design document the index was created in. */
    id: string,

    /** Name of the index created. */
    name: string
  }
}

export = nano;
