UNPKG

nano

Version:

The official CouchDB client for Node.js

1,208 lines (1,071 loc) 69 kB
/** * @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 | number; /** 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; /** pause consuming the changes feed */ pause(): void; /** resume consuming the changes feed */ resume(): 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<DocumentHeadResponseHeaders>): Promise<DocumentHeadResponseHeaders>; /** 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 | string; 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 | string; } /** 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?: string | 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 ID */ docName?: string; /** 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; /*