9.0.2prep (#251)
* more verbose TypeScript descriptions and links
* ensure creds are scrubbed from logged messages
* improved README
* convert examples to async/await style
Co-authored-by: Glynn Bird <glynnbird@apache.org>
diff --git a/README.md b/README.md
index 49e4ffb..5fc3d69 100644
--- a/README.md
+++ b/README.md
@@ -61,7 +61,7 @@
- [db.fetch(docnames, [params], [callback])](#dbfetchdocnames-params-callback)
- [db.fetchRevs(docnames, [params], [callback])](#dbfetchrevsdocnames-params-callback)
- [db.createIndex(indexDef, [callback])](#dbcreateindexindexdef-callback)
- - [db.changesReader...](#reading-changes-feed)
+ - [db.changesReader](#reading-changes-feed)
- [Partitioned database functions](#partition-functions)
- [db.partitionInfo(partitionKey, [callback])](#dbpartitioninfopartitionkey-callback))
- [db.partitionedList(partitionKey, [params], [callback])](#dbpartitionedlistpartitionkey-params-callback)
@@ -108,7 +108,7 @@
const nano = require('nano')('http://localhost:5984');
```
-The URL you supply may also contain authentication credentials e.g. `http://admin:mypassword@localhost:5984`.
+> Note: The URL you supply may also contain authentication credentials e.g. `http://admin:mypassword@localhost:5984`.
To create a new database:
@@ -134,6 +134,19 @@
})
```
+or in the async/await style:
+
+```js
+try {
+ const response = await nano.db.create('alice')
+ // succeeded
+ console.log(response)
+} catch (e) {
+ // failed
+ console.error(e)
+}
+```
+
2) Callbacks
```js
@@ -149,7 +162,7 @@
JSON parsed body, binary for non JSON responses.
* `header` - The HTTP _response header_ from CouchDB, if no error.
-The documentation will now follow the *Promises* style.
+The documentation will follow the *async/await* style.
------------------
@@ -167,24 +180,7 @@
asyncCall()
```
-or in the raw Promises-style
-
-```js
-const nano = require('nano')('http://localhost:5984');
-let alice;
-
-nano.db.destroy('alice').then((response) => {
- return nano.db.create('alice')
-}).then((response) => {
- alice = nano.use('alice')
- return alice.insert({ happy: true }, 'rabbit')
-}).then((response) => {
- console.log('you have inserted a document with an _id of rabbit')
- console.log(response);
-})
-```
-
-If you run either of these examples (after starting CouchDB) you will see:
+Running this example will produce:
```
you have inserted a document with an _id of rabbit.
@@ -216,13 +212,13 @@
```js
// nano parses the URL and knows this is a database
const opts = {
- url: "http://localhost:5984/foo",
- requestDefaults: { "proxy" : "http://someproxy" }
+ url: 'http://localhost:5984/foo',
+ requestDefaults: { proxy: { 'protocol': 'http', 'host': 'myproxy.net' } }
};
const db = require('nano')(opts);
```
-Please check [request] for more information on the defaults. They support features like cookie jar, proxies, ssl, etc.
+Please check [axios] for more information on the defaults. They support features like proxies, timeout etc.
You can tell nano to not parse the URL (maybe the server is behind a proxy, is accessed through a rewrite rule or other):
@@ -238,28 +234,21 @@
### Pool size and open sockets
-A very important configuration parameter if you have a high traffic website and are using `nano` is setting up the `pool.size`. By default, the Node.js HTTP global agent (client) has a certain size of active connections that can run simultaneously, while others are kept in a queue. Pooling can be disabled by setting the `agent` property in `requestDefaults` to `false`, or adjust the global pool size using:
+A very important configuration parameter if you have a high traffic website and are using `nano` is the HTTP pool size. By default, the Node.js HTTP global agent has a infinite number of active connections that can run simultaneously. This can be limited to user-defined number (`maxSockets`) of requests that are "in flight", while others are kept in a queue. Here's an example explicitly using the Node.js HTTP agent configured with [custom options](https://nodejs.org/api/http.html#http_new_agent_options):
```js
-http.globalAgent.maxSockets = 20;
-```
+const http = require('http')
+const myagent = new http.Agent({
+ keepAlive: true,
+ maxSockets: 25
+})
-You can also increase the size in your calling context using `requestDefaults` if this is problematic. Refer to the [request] documentation and examples for further clarification.
-
-Here's an example explicitly using the keep alive agent (installed using `npm install agentkeepalive`), especially useful to limit your open sockets when doing high-volume access to CouchDB on localhost:
-
-```js
-const agentkeepalive = require('agentkeepalive');
-const myagent = new agentkeepalive({
- maxSockets: 50,
- maxKeepAliveRequests: 0,
- maxKeepAliveTime: 30000
+const db = require('nano')({
+ url: 'http://localhost:5984/foo',
+ requestDefaults : {
+ agent : myagent
+ }
});
-
-const db = require('nano')(
- { url: "http://localhost:5984/foo",
- requestDefaults : { "agent" : myagent }
- });
```
## TypeScript
@@ -312,9 +301,7 @@
Creates a CouchDB database with the given `name`:
```js
-nano.db.create('alice').then((body) => {
- console.log('database alice created!');
-})
+await nano.db.create('alice')
```
### nano.db.get(name, [callback])
@@ -322,9 +309,7 @@
Get information about the database `name`:
```js
-nano.db.get('alice').then((body) => {
- console.log(body);
-})
+const info = await nano.db.get('alice')
```
### nano.db.destroy(name, [callback])
@@ -332,9 +317,7 @@
Destroys the database `name`:
```js
-nano.db.destroy('alice').then((body) => {
- // database destroyed
-})
+await nano.db.destroy('alice')
```
### nano.db.list([callback])
@@ -342,12 +325,7 @@
Lists all the CouchDB databases:
```js
-nano.db.list().then((body) => {
- // body is an array
- body.forEach((db) => {
- console.log(db);
- });
-});
+const dblist = await nano.db.list()
```
### nano.db.listAsStream()
@@ -371,10 +349,9 @@
replication:
```js
-nano.db.replicate('alice', 'http://admin:password@otherhost.com:5984/alice',
- { create_target:true }).then((body) => {
- console.log(body);
-});
+const response = await nano.db.replicate('alice',
+ 'http://admin:password@otherhost.com:5984/alice',
+ { create_target:true })
```
### nano.db.replication.enable(source, target, [opts], [callback])
@@ -384,10 +361,9 @@
`opts` to create it prior to replication. Replication will survive server restarts.
```js
-nano.db.replication.enable('alice', 'http://admin:password@otherhost.com:5984/alice',
- { create_target:true }).then((body) => {
- console.log(body);
-});
+const response = await nano.db.replication.enable('alice',
+ 'http://admin:password@otherhost.com:5984/alice',
+ { create_target:true })
```
### nano.db.replication.query(id, [opts], [callback])
@@ -396,12 +372,10 @@
given by the call to `replication.enable`:
```js
-nano.db.replication.enable('alice', 'http://admin:password@otherhost.com:5984/alice',
- { create_target:true }).then((body) => {
- return nano.db.replication.query(body.id);
-}).then((response) => {
- console.log(response);
-});
+const r = await nano.db.replication.enable('alice',
+ 'http://admin:password@otherhost.com:5984/alice',
+ { create_target:true })
+const q = await nano.db.replication.query(r.id)
```
### nano.db.replication.disable(id, [opts], [callback])
@@ -410,12 +384,10 @@
by the call to `replication.enable`:
```js
-nano.db.replication.enable('alice', 'http://admin:password@otherhost.com:5984/alice',
- { create_target:true }).then((body) => {
- return nano.db.replication.disable(body.id);
-}).then((response) => {
- console.log(response);
-});
+const r = await nano.db.replication.enable('alice',
+ 'http://admin:password@otherhost.com:5984/alice',
+ { create_target:true })
+await nano.db.replication.disable(r.id);
```
### nano.db.changes(name, [params], [callback])
@@ -424,9 +396,7 @@
to the query string.
```js
-nano.db.changes('alice').then((body) => {
- console.log(body);
-});
+const c = await nano.db.changes('alice')
```
### nano.db.changesAsStream(name, [params])
@@ -442,9 +412,7 @@
Gets database information:
```js
-nano.db.info().then((body) => {
- console.log('got database info', body);
-});
+const info = await nano.db.info()
```
### nano.use(name)
@@ -453,11 +421,11 @@
```js
const alice = nano.use('alice');
-alice.insert({ happy: true }, 'rabbit').then((body) => {
- // do something
-});
+await alice.insert({ happy: true }, 'rabbit')
```
+The database object can be used to access the [Document Functions](#document-functions).
+
### nano.db.use(name)
Alias for `nano.use`
@@ -519,27 +487,21 @@
```js
const alice = nano.use('alice');
-alice.insert({ happy: true }, 'rabbit').then((body) => {
- console.log(body);
-});
+const response = await alice.insert({ happy: true }, 'rabbit')
```
The `insert` function can also be used with the method signature `db.insert(doc,[callback])`, where the `doc` contains the `_id` field e.g.
```js
const alice = nano.use('alice')
-alice.insert({ _id: 'myid', happy: true }).then((body) => {
- console.log(body)
-})
+const response alice.insert({ _id: 'myid', happy: true })
```
and also used to update an existing document, by including the `_rev` token in the document being saved:
```js
const alice = nano.use('alice')
-alice.insert({ _id: 'myid', _rev: '1-23202479633c2b380f79507a776743d5', happy: false }).then((body) => {
- console.log(body)
-})
+const response = await alice.insert({ _id: 'myid', _rev: '1-23202479633c2b380f79507a776743d5', happy: false })
```
### db.destroy(docname, rev, [callback])
@@ -547,9 +509,7 @@
Removes a document from CouchDB whose `_id` is `docname` and who's revision is `_rev`:
```js
-alice.destroy('rabbit', '3-66c01cdf99e84c83a9b3fe65b88db8c0').then((body) => {
- console.log(body);
-});
+const response = await alice.destroy('rabbit', '3-66c01cdf99e84c83a9b3fe65b88db8c0')
```
### db.get(docname, [params], [callback])
@@ -557,17 +517,13 @@
Gets a document from CouchDB whose `_id` is `docname`:
```js
-alice.get('rabbit').then((body) => {
- console.log(body);
-});
+const doc = await alice.get('rabbit')
```
or with optional query string `params`:
```js
-alice.get('rabbit', { revs_info: true }).then((body) => {
- console.log(body);
-});
+const doc = await alice.get('rabbit', { revs_info: true })
```
### db.head(docname, [callback])
@@ -575,9 +531,7 @@
Same as `get` but lightweight version that returns headers only:
```js
-alice.head('rabbit').then((headers) => {
- console.log(headers);
-});
+const headers = await alice.head('rabbit')
```
*Note:* if you call `alice.head` in the callback style, the headers are returned to you as the third argument of the callback function.
@@ -592,9 +546,7 @@
{ a:1, b:2 },
{ _id: 'tiger', striped: true}
];
-alice.bulk({docs:documents}).then((body) => {
- console.log(body);
-});
+const response = await alice.bulk({ docs: documents })
```
### db.list([params], [callback])
@@ -602,22 +554,16 @@
List all the docs in the database .
```js
-alice.list().then((body) => {
- body.rows.forEach((doc) => {
- console.log(doc);
- });
+const doclist = await alice.list().then((body)
+doclist.rows.forEach((doc) => {
+ console.log(doc);
});
```
or with optional query string additions `params`:
```js
-alice.list({include_docs: true}).then((body) => {
- body.rows.forEach((doc) => {
- // output each document's body
- console.log(doc.doc);
- });
-});
+const doclist = await alice.list({include_docs: true})
```
### db.listAsStream([params])
@@ -639,9 +585,7 @@
```js
const keys = ['tiger', 'zebra', 'donkey'];
-alice.fetch({keys: keys}).then((data) => {
- console.log(data);
-});
+const datat = await alice.fetch({keys: keys})
```
### db.fetchRevs(docnames, [params], [callback])
@@ -663,9 +607,7 @@
index: { fields: ['foo'] },
name: 'fooindex'
};
-alice.createIndex(indexDef).then((result) => {
- console.log(result);
-});
+const response = await alice.createIndex(indexDef)
```
## Reading Changes Feed
@@ -983,9 +925,7 @@
fs.readFile('rabbit.png', (err, data) => {
if (!err) {
- alice.multipart.insert({ foo: 'bar' }, [{name: 'rabbit.png', data: data, content_type: 'image/png'}], 'mydoc').then((body) => {
- console.log(body);
- });
+ await alice.multipart.insert({ foo: 'bar' }, [{name: 'rabbit.png', data: data, content_type: 'image/png'}], 'mydoc')
}
});
```
@@ -996,9 +936,7 @@
[doc](http://wiki.apache.org/couchdb/HTTP_Document_API#Getting_Attachments_With_a_Document) for more details. The multipart response body is a `Buffer`.
```js
-alice.multipart.get('rabbit').then((buffer) => {
- console.log(buffer.toString());
-});
+const response = await alice.multipart.get('rabbit')
```
## Attachments functions
@@ -1014,10 +952,11 @@
fs.readFile('rabbit.png', (err, data) => {
if (!err) {
- alice.attachment.insert('rabbit', 'rabbit.png', data, 'image/png',
- { rev: '12-150985a725ec88be471921a54ce91452' }).then((body) => {
- console.log(body);
- });
+ await alice.attachment.insert('rabbit',
+ 'rabbit.png',
+ data,
+ 'image/png',
+ { rev: '12-150985a725ec88be471921a54ce91452' })
}
});
```
@@ -1035,18 +974,16 @@
```js
const fs = require('fs');
-alice.attachment.get('rabbit', 'rabbit.png').then((body) => {
- fs.writeFile('rabbit.png', body);
-});
+const body = await alice.attachment.get('rabbit', 'rabbit.png')
+fs.writeFile('rabbit.png', body)
```
### db.attachment.getAsStream(docname, attname, [params])
```js
const fs = require('fs');
-
alice.attachment.getAsStream('rabbit', 'rabbit.png')
- .on('error', (e) => console.error('error', e))
+ .on('error', e => console.error)
.pipe(fs.createWriteStream('rabbit.png'));
```
@@ -1057,10 +994,7 @@
Destroy attachment `attname` of `docname`'s revision `rev`.
```js
-alice.attachment.destroy('rabbit', 'rabbit.png',
- {rev: '1-4701d73a08ce5c2f2983bf7c9ffd3320'}).then((body) => {
- console.log(body);
-});
+const response = await alice.attachment.destroy('rabbit', 'rabbit.png', {rev: '1-4701d73a08ce5c2f2983bf7c9ffd3320'})
```
## Views and design functions
@@ -1071,44 +1005,26 @@
`{ keys: ['key1', 'key2', 'key_n'] }`, as `params`.
```js
-alice.view('characters', 'happy_ones', {
- 'key': 'Tea Party',
- 'include_docs': true
-}).then((body) => {
- body.rows.forEach((doc) => {
- console.log(doc.value);
- });
-});
+const body = await alice.view('characters', 'happy_ones', { key: 'Tea Party', include_docs: true })
+body.rows.forEach((doc) => {
+ console.log(doc.value)
+})
```
or
```js
-alice.view('characters', 'soldiers', {
- 'keys': ['Hearts', 'Clubs']
-}).then((body) => {
- body.rows.forEach((doc) => {
- console.log(doc.value);
- });
-});
+const body = await alice.view('characters', 'soldiers', { keys: ['Hearts', 'Clubs'] })
```
When `params` is not supplied, or no keys are specified, it will simply return all documents in the view:
```js
-alice.view('characters', 'happy_ones').then((body) => {
- body.rows.forEach((doc) => {
- console.log(doc.value);
- });
-});
+const body = await alice.view('characters', 'happy_ones')
```
```js
-alice.view('characters', 'happy_ones', { include_docs: true }).then((body) => {
- body.rows.forEach((doc) => {
- console.log(doc.value);
- });
-});
+const body = alice.view('characters', 'happy_ones', { include_docs: true })
```
### db.viewAsStream(designname, viewname, [params])
@@ -1126,9 +1042,7 @@
Calls a list function fed by the given view from the specified design document.
```js
-alice.viewWithList('characters', 'happy_ones', 'my_list').then((body) => {
- console.log(body);
-});
+const body = await alice.viewWithList('characters', 'happy_ones', 'my_list')
```
### db.viewWithListAsStream(designname, viewname, listname, [params], [callback])
@@ -1136,9 +1050,9 @@
Calls a list function fed by the given view from the specified design document as a stream.
```js
-alice.viewWithListAsStream('characters', 'happy_ones', 'my_list').then((body) => {
- console.log(body);
-});
+alice.viewWithListAsStream('characters', 'happy_ones', 'my_list')
+ .on('error', (e) => console.error('error', e))
+ .pipe(process.stdout);
```
### db.show(designname, showname, doc_id, [params], [callback])
@@ -1147,9 +1061,7 @@
optional query string additions `params`.
```js
-alice.show('characters', 'format_doc', '3621898430').then((doc) => {
- console.log(doc);
-});
+const doc = await alice.show('characters', 'format_doc', '3621898430')
```
Take a look at the [couchdb wiki](http://wiki.apache.org/CouchDB/Formatting_with_Show_and_List#Showing_Documents)
@@ -1160,10 +1072,7 @@
Calls the design's update function with the specified doc in input.
```js
-db.atomic("update", "inplace", "foobar",
-{field: "foo", value: "bar"}).then((response) => {
- console.log(response);
-});
+const response = await db.atomic('update', 'inplace', 'foobar', {field: 'foo', value: 'bar'})
```
Note that the data is sent in the body of the request.
@@ -1172,13 +1081,12 @@
```js
"updates": {
"in-place" : "function(doc, req) {
- var request_body = JSON.parse(req.body);
-
- var field = request_body.field;
- var value = request_body.value;
- var message = 'set ' + field + ' to ' + value;
- doc[field] = value;
- return [doc, message];
+ var request_body = JSON.parse(req.body)
+ var field = request_body.field
+ var value = request_body.value
+ var message = 'set ' + field + ' to ' + value
+ doc[field] = value
+ return [doc, message]
}"
}
```
@@ -1188,18 +1096,14 @@
Calls a view of the specified design with optional query string additions `params`.
```js
-alice.search('characters', 'happy_ones', { q: 'cat' }).then((doc) => {
- console.log(doc);
-});
+const response = await alice.search('characters', 'happy_ones', { q: 'cat' })
```
or
```js
const drilldown = [['author', 'Dickens']['publisher','Penguin']]
-alice.search('inventory', 'books', { q: '*:*', drilldown: drilldown }).then((doc) => {
- console.log(doc);
-});
+const response = await alice.search('inventory', 'books', { q: '*:*', drilldown: drilldown })
```
Check out the tests for a fully functioning example.
@@ -1226,9 +1130,7 @@
fields: [ "name", "age", "tags", "url" ],
limit:50
};
-alice.find(q).then((doc) => {
- console.log(doc);
-});
+const response = await alice.find(q)
```
### db.findAsStream(selector)
@@ -1255,16 +1157,22 @@
Nano supports making requests using CouchDB's [cookie authentication](http://guide.couchdb.org/editions/1/en/security.html#cookies) functionality. If you initialise *Nano* so that it is cookie-aware, you may call `nano.auth` first to get a session cookie. Nano will behave like a web browser, remembering your session cookie and refreshing it if a new one is received in a future HTTP response.
```js
-const nano = require('nano')({url: 'http://localhost:5984', requestDefaults: {jar:true}}),
- username = 'user',
- userpass = 'pass',
- db = nano.db.use('mydb');
+const nano = require('nano')({
+ url: 'http://localhost:5984',
+ requestDefaults: {
+ jar: true
+ }
+})
+const username = 'user'
+const userpass = 'pass'
+const db = nano.db.use('mydb')
-nano.auth(username, userpass).then((() => {
- return db.get('mydoc');
-}).then((doc) => {
- console.log(doc);
-});
+// authenticate
+await nano.auth(username, userpass)
+
+// requests from now on are authenticated
+const doc = await db.get('mydoc')
+console.log(doc)
```
The second request works because the `nano` library has remembered the `AuthSession` cookie that was invisibily returned by the `nano.auth` call.
@@ -1272,10 +1180,8 @@
When you have a session, you can see what permissions you have by calling the `nano.session` function
```js
-nano.session().then((doc) => {
- console.log(doc)
- // { userCtx: { roles: [ '_admin', '_reader', '_writer' ], name: 'rita' }, ok: true }
-});
+const doc = await nano.session()
+// { userCtx: { roles: [ '_admin', '_reader', '_writer' ], name: 'rita' }, ok: true }
```
## Advanced features
@@ -1285,9 +1191,7 @@
If your application needs to generate UUIDs, then CouchDB can provide some for you
```js
-nano.uuids(3).then((doc) => {
- console.log(doc);
-});
+const response = await nano.uuids(3)
// { uuids: [
// '5d1b3ef2bc7eea51f660c091e3dffa23',
// '5d1b3ef2bc7eea51f660c091e3e006ff',
@@ -1419,7 +1323,7 @@
[2]: http://github.com/apache/couchdb-nano/issues
[4]: https://github.com/apache/couchdb-nano/blob/main/cfg/couch.example.js
[8]: http://webchat.freenode.net?channels=%23couchdb-dev
-[request]: https://github.com/request/request
+[axios]: https://github.com/axios/axios
http://freenode.org/
diff --git a/lib/nano.d.ts b/lib/nano.d.ts
index 3f21d25..857a9d8 100644
--- a/lib/nano.d.ts
+++ b/lib/nano.d.ts
@@ -20,29 +20,47 @@
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;
+ 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;
- request?(params: any): void;
}
type Callback<R> = (error: RequestError | null, response: R, headers?: any) => void;
@@ -71,24 +89,63 @@
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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
+ /**
+ * 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
+ /**
+ * 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /**
+ * 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /**
+ * 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>;
- uuids(num: number, callback?: Callback<any>): Promise<UUIDObject>;
- /** @see {@link https://docs.couchdb.org/en/stable/api/server/common.html#api-server-root} */
+ /**
+ * 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>;
}
@@ -96,7 +153,9 @@
uuids: string[];
}
- /** @see {@link https://docs.couchdb.org/en/stable/api/server/common.html#api-server-root} */
+ /**
+ * 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;
@@ -106,59 +165,83 @@
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>;
};
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#put--db} */
+ /**
+ * 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#delete--db} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_all_dbs} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /** 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;
@@ -178,6 +261,7 @@
selector?: MangoSelector;
}
+ /** ChangesReader functions */
interface ChangesReaderScope {
/** fetch changes forever */
start(opts: ChangesReaderOptions): EventEmitter;
@@ -189,90 +273,128 @@
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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
+ /** Get database info
+ * @see Docs: {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
info(callback?: Callback<DatabaseGetResponse>): Promise<DatabaseGetResponse>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
- * @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
- * @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
+ /**
+ * 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#head--db-docid} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid} */
+ /** 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[]>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#get--db-_design-ddoc-_show-func} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#get--db-_design-ddoc-_show-func} */
+ /** 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,
@@ -280,14 +402,16 @@
params: any,
callback?: Callback<any>
): Promise<any>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
+ /** 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,
@@ -295,14 +419,16 @@
body: any,
callback?: Callback<R>
): Promise<R>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid} */
+ /** 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,
@@ -310,17 +436,23 @@
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,
@@ -328,42 +460,44 @@
params?: any,
callback?: Callback<any>
): Promise<any>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view}
- * @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#post--db-_design-ddoc-_view-view} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view}
- * @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#post--db-_design-ddoc-_view-view} */
+ /** 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>>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view}
- * @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#post--db-_design-ddoc-_view-view} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view}
- * @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#post--db-_design-ddoc-_view-view} */
+ /** 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;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
+ /** 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,
@@ -371,43 +505,60 @@
params: DocumentViewParams,
callback?: Callback<any>
): Promise<any>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
+ /** 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>
- ): Promise<any>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/render.html#db-design-design-doc-list-list-name-view-name} */
+ ): 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>
- ): Promise<any>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-find} */
+ ): 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;
- //https://docs.couchdb.org/en/latest/partitioned-dbs/index.html
+ /** 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;
- partitionedViewpartitionedSearch<V>(
+ /** 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,
@@ -415,6 +566,8 @@
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,
@@ -423,24 +576,33 @@
): NodeJS.ReadStream;
}
+ /** attachment data */
interface AttachmentData {
name: string;
data: any;
content_type: any;
}
+ /** Multi-part HTTP functions */
interface Multipart<D> {
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments} */
+ /** 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>;
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments} */
+ /** 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>;
- get(docname: string, params: any, 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 {
- // NodeJS.WritableStream
- insert(docname: string, attname: string, att: null, contenttype: string, params?: any): Promise<DocumentInsertResponse>;
+ /** 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,
@@ -448,6 +610,8 @@
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,
@@ -456,15 +620,25 @@
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,
@@ -473,11 +647,14 @@
): 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;
@@ -492,7 +669,8 @@
multipart?: any[];
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /** 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;
@@ -555,7 +733,8 @@
// Database scope request and response
// -------------------------------------
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#put--db} */
+ /** 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;
@@ -567,7 +746,8 @@
reason?: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#get--db} */
+ /** 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;
@@ -611,14 +791,16 @@
update_seq: number;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#delete--db}
- * @see {@link http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact} */
+ /** 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;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** 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;
@@ -645,7 +827,8 @@
target?: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** 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;
@@ -681,7 +864,8 @@
start_time: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
+ /** Database _replicate response.
+ * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate} */
interface DatabaseReplicateResponse {
/** Replication history */
history: DatabaseReplicationHistoryItem[];
@@ -699,7 +883,8 @@
source_last_seq: number;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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.
*
@@ -797,11 +982,12 @@
*
* Documents counted as “passed” for view filter in case if map function emits at least one record for them.
*
- * @see {@link https://docs.couchdb.org/en/stable/api/database/changes.html#changes-filter-view|_view} for more info. */
+ * @see Docs: {@link https://docs.couchdb.org/en/stable/api/database/changes.html#changes-filter-view|_view} for more info. */
view?: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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 }>;
@@ -816,7 +1002,8 @@
deleted: boolean;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes} */
+ /** 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;
@@ -828,7 +1015,8 @@
results: DatabaseChangesResultItem[];
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
+ /** Database authentication response.
+ * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication} */
interface DatabaseAuthResponse {
/** Operation status */
ok: boolean;
@@ -840,7 +1028,8 @@
roles: string[];
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
+ /** Database _session response.
+ * @see Docs: {@link http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session} */
interface DatabaseSessionResponse {
/** Operation status */
ok: boolean;
@@ -852,7 +1041,8 @@
info: any;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /** 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;
@@ -864,7 +1054,8 @@
seq: any;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates} */
+ /** 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.
*
@@ -879,6 +1070,7 @@
// Document scope request and response
// -------------------------------------
+ /** Bulk API per-document response. */
interface DocumentResponseRowMeta {
id: string;
key: string;
@@ -888,11 +1080,13 @@
error?: string;
}
+ /** Bulk API per-document response with document body. */
interface DocumentResponseRow<D> extends DocumentResponseRowMeta {
doc?: D & Document;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_bulk_docs} */
+ /** 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;
@@ -907,8 +1101,9 @@
reason?: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
- * @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
+ /** 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;
@@ -925,8 +1120,9 @@
new_edits?: boolean;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/common.html#post--db}
- * @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid} */
+ /** 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;
@@ -938,7 +1134,8 @@
rev: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid} */
+ /** 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;
@@ -950,7 +1147,8 @@
rev: string;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
+ /** 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.
*
@@ -1009,7 +1207,8 @@
revs_info?: boolean;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid} */
+ /** 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;
@@ -1043,23 +1242,8 @@
_revisions?: any;
}
- interface DocumentCopyOptions {
- overwrite?: boolean;
- }
-
- /** @see {@link http://docs.couchdb.org/en/latest/api/document/common.html#copy--db-docid} */
- interface DocumentCopyResponse {
- /** Document ID */
- id: string;
-
- /** Operation status */
- ok: boolean;
-
- /** Revision MVCC token */
- rev: string;
- }
-
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
+ /** _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.
*
@@ -1132,7 +1316,8 @@
update_seq?: boolean;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs} */
+ /** _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;
@@ -1151,6 +1336,8 @@
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;
@@ -1158,7 +1345,7 @@
end_key_doc_id?: string;
inclusive_end?: boolean;
key?: string;
- keys?: string; // This can be string[] too ???
+ keys?: string | string[];
limit?: number;
skip?: number;
stale?: string;
@@ -1166,11 +1353,15 @@
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>;
@@ -1178,6 +1369,8 @@
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>;
@@ -1185,6 +1378,8 @@
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 */
@@ -1213,7 +1408,8 @@
}
- /** @see {@link https://docs.couchdb.org/en/latest/partitioned-dbs/index.html} */
+ /** Partitioned database info response.
+ * @see Docs: {@link https://docs.couchdb.org/en/latest/partitioned-dbs/index.html} */
interface PartitionInfoResponse {
/** Database name */
db_name: string;
@@ -1234,7 +1430,8 @@
doc_del_count: number;
}
- /** @see {@link https://console.bluemix.net/docs/services/Cloudant/api/search.html#queries} */
+ /** 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;
@@ -1310,7 +1507,8 @@
stale?: boolean;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
+ /** 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.
*
@@ -1441,7 +1639,8 @@
update_seq?: boolean;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view} */
+ /** 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;
@@ -1463,19 +1662,24 @@
update_seq: any;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#selector-syntax} */
+
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[];
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#sort-syntax} */
+ /** 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;
@@ -1493,7 +1697,7 @@
*
* If it is omitted, the entire object is returned.
*
- * @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#filtering-fields} */
+ * @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.
@@ -1530,6 +1734,8 @@
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.
*
@@ -1549,7 +1755,8 @@
execution_stats?: MangoExecutionStats;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#execution-statistics} */
+ /** 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;
@@ -1571,7 +1778,8 @@
execution_time_ms: number;
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
+ /** 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: {
@@ -1597,7 +1805,8 @@
partitioned?: boolean
}
- /** @see {@link http://docs.couchdb.org/en/latest/api/database/find.html#db-index} */
+ /** 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.
*
diff --git a/lib/nano.js b/lib/nano.js
index 0d1c666..4abeacf 100644
--- a/lib/nano.js
+++ b/lib/nano.js
@@ -23,6 +23,7 @@
const https = require('https')
const pkg = require('../package.json')
const AGENT_DEFAULTS = { keepAlive: true, maxSockets: 50, keepAliveMsecs: 30000 }
+const SCRUBBED_STR = 'XXXXXX'
const defaultHttpAgent = new http.Agent(AGENT_DEFAULTS)
const defaultHttpsAgent = new https.Agent(AGENT_DEFAULTS)
const ChangesReader = require('./changesreader.js')
@@ -94,9 +95,9 @@
}
}
- function scrub (str) {
+ function scrubURL (str) {
if (str) {
- str = str.replace(/\/\/(.*)@/, '//XXXXXX:XXXXXX@')
+ str = str.replace(/\/\/(.*)@/, `//${SCRUBBED_STR}:${SCRUBBED_STR}@`)
}
return str
}
@@ -149,8 +150,6 @@
return
}
- log({ err: 'couch', body: body, headers: responseHeaders })
-
// cloudant stacktrace
if (typeof body === 'string') {
body = { message: body }
@@ -164,12 +163,14 @@
delete body.stack
// scrub credentials
- req.url = scrub(req.url)
- responseHeaders.url = scrub(responseHeaders.url)
+ req.url = scrubURL(req.url)
+ responseHeaders.uri = scrubURL(responseHeaders.uri)
if (req.headers.cookie) {
req.headers.cookie = 'XXXXXXX'
}
+ log({ err: 'couch', body: body, headers: responseHeaders })
+
const message = body.message || 'couch returned ' + statusCode
const errors = new Error(message)
errors.scope = 'couch'
@@ -251,7 +252,7 @@
}, cfg.requestDefaults)
// https://github.com/mikeal/request#requestjar
- const isJar = opts.jar || cfg.jar
+ const isJar = opts.jar || cfg.jar || (cfg.requestDefaults && cfg.requestDefaults.jar)
if (isJar) {
req.jar = cookieJar
@@ -343,7 +344,6 @@
// ?drilldown=["author","Dickens"]&drilldown=["publisher","Penguin"]
req.qsStringifyOptions = { arrayFormat: 'repeat' }
- log(req)
cfg.cookies = cookieJar.getCookiesSync(cfg.url)
// This where the HTTP request is made.
@@ -368,6 +368,15 @@
req.httpAgent = cfg.requestDefaults.agent || defaultHttpAgent
req.httpsAgent = cfg.requestDefaults.agent || defaultHttpsAgent
+ // scrub and log
+ const scrubbedReq = JSON.parse(JSON.stringify(req))
+ scrubbedReq.url = scrubURL(scrubbedReq.url)
+ if (scrubbedReq.auth) {
+ scrubbedReq.auth.username = SCRUBBED_STR
+ scrubbedReq.auth.password = SCRUBBED_STR
+ }
+ log(scrubbedReq)
+
// actually do the HTTP request
if (opts.stream) {
// return the Request object for streaming