This is an automated email from the ASF dual-hosted git repository.

garren pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb-nano.git


The following commit(s) were added to refs/heads/master by this push:
     new da10874  add TypeScript definition in this repo - issue #77 (#96)
da10874 is described below

commit da10874cf014a76191c1d36c12d1c3d28e4de586
Author: Glynn Bird <[email protected]>
AuthorDate: Mon Jul 2 14:08:08 2018 +0100

    add TypeScript definition in this repo - issue #77 (#96)
    
    * add typescript definition in this repo - issue #77
    
    * add package-lock.json too
---
 lib/nano.d.ts     | 1143 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 package-lock.json |  682 +++++++++++++++++---------------
 package.json      |    2 +
 3 files changed, 1503 insertions(+), 324 deletions(-)

diff --git a/lib/nano.d.ts b/lib/nano.d.ts
new file mode 100644
index 0000000..ec6142c
--- /dev/null
+++ b/lib/nano.d.ts
@@ -0,0 +1,1143 @@
+// 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>
+// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
+// TypeScript Version: 2.3
+
+/// <reference types="node" />
+
+import { EventEmitter } from "events";
+import { CoreOptions, Request } from "request";
+
+declare function nano(
+  config: nano.Configuration | string
+): nano.ServerScope | nano.DocumentScope<any>;
+
+declare namespace nano {
+  interface Configuration {
+    url: string;
+    cookie?: string;
+    requestDefaults?: CoreOptions;
+    log?(id: string, args: any): void;
+    parseUrl?: boolean;
+    request?(params: any): void;
+  }
+
+  type Callback<R> = (error: any, response: R, headers?: any) => void;
+
+  interface ServerScope {
+    readonly config: ServerConfig;
+    db: DatabaseScope;
+    use<D>(db: string): DocumentScope<D>;
+    scope<D>(db: string): DocumentScope<D>;
+    request: RequestFunction;
+    relax: RequestFunction;
+    dinosaur: RequestFunction;
+    // 
http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication
+    auth(username: string, userpass: string, callback?: 
Callback<DatabaseAuthResponse>): Request;
+    // http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session
+    session(callback?: Callback<DatabaseSessionResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates
+    updates(callback?: Callback<DatabaseUpdatesResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates
+    updates(params: UpdatesParams, callback?: 
Callback<DatabaseUpdatesResponse>): Request;
+    followUpdates(callback?: Callback<any>): EventEmitter;
+    followUpdates(params: any, callback?: Callback<any>): EventEmitter;
+    uuids(num: number, callback: Callback<any>): Request;
+  }
+
+  interface DatabaseScope {
+    // http://docs.couchdb.org/en/latest/api/database/common.html#put--db
+    create(name: string, callback?: Callback<DatabaseCreateResponse>): Request;
+    // http://docs.couchdb.org/en/latest/api/database/common.html#get--db
+    get(name: string, callback?: Callback<DatabaseGetResponse>): Request;
+    // http://docs.couchdb.org/en/latest/api/database/common.html#delete--db
+    destroy(name: string, callback?: Callback<OkResponse>): Request;
+    // http://docs.couchdb.org/en/latest/api/server/common.html#get--_all_dbs
+    list(callback?: Callback<string[]>): Request;
+    use<D>(db: string): DocumentScope<D>;
+    compact(name: string, callback?: Callback<OkResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact
+    compact(name: string, designname: string, callback?: 
Callback<OkResponse>): Request;
+    // 
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>
+    ): Request;
+    // 
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>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes
+    changes(name: string, callback?: Callback<DatabaseChangesResponse>): 
Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact
+    changes(name: string, params: DatabaseChangesParams, callback?: 
Callback<DatabaseChangesResponse>): Request;
+    follow(source: string, callback?: Callback<any>): EventEmitter;
+    follow(source: string, params: DatabaseScopeFollowUpdatesParams, 
callback?: Callback<any>): EventEmitter;
+    followUpdates(params?: any, callback?: Callback<any>): EventEmitter;
+    // 
http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates
+    updates(callback?: Callback<DatabaseUpdatesResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/server/common.html#get--_db_updates
+    updates(params: UpdatesParams, callback?: 
Callback<DatabaseUpdatesResponse>): Request;
+  }
+
+  interface DocumentScope<D> {
+    readonly config: ServerConfig;
+    // http://docs.couchdb.org/en/latest/api/database/common.html#get--db
+    info(callback?: Callback<DatabaseGetResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate
+    replicate<D>(
+      target: string | DocumentScope<D>,
+      callback?: Callback<DatabaseReplicateResponse>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/server/common.html#post--_replicate
+    replicate(
+      target: string | DocumentScope<D>,
+      options: any,
+      callback?: Callback<DatabaseReplicateResponse>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact
+    compact(callback?: Callback<any>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes
+    changes(callback?: Callback<DatabaseChangesResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/changes.html#get--db-_changes
+    changes(params: DatabaseChangesParams, callback?: 
Callback<DatabaseChangesResponse>): Request;
+    follow(callback?: Callback<any>): EventEmitter;
+    follow(params: DocumentScopeFollowUpdatesParams, callback?: 
Callback<any>): EventEmitter;
+    // 
http://docs.couchdb.org/en/latest/api/server/authn.html#cookie-authentication
+    auth(username: string, userpass: string, callback?: 
Callback<DatabaseAuthResponse>): Request;
+    // http://docs.couchdb.org/en/latest/api/server/authn.html#get--_session
+    session(callback?: Callback<any>): Request;
+    // http://docs.couchdb.org/en/latest/api/database/common.html#post--db
+    // http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid
+    insert(document: ViewDocument<D> | D & MaybeDocument, callback?: 
Callback<DocumentInsertResponse>): Request;
+    // http://docs.couchdb.org/en/latest/api/database/common.html#post--db
+    // 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>
+    ): Request;
+    // http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid
+    get(docname: string, callback?: Callback<DocumentGetResponse & D>): 
Request;
+    // http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid
+    get(docname: string, params?: DocumentGetParams, callback?: 
Callback<DocumentGetResponse & D>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/document/common.html#head--db-docid
+    head(docname: string, callback: Callback<any>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/document/common.html#copy--db-docid
+    copy(src_document: string, dst_document: string, callback?: 
Callback<DocumentCopyResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/document/common.html#copy--db-docid
+    copy(
+      src_document: string,
+      dst_document: string,
+      options: DocumentCopyOptions,
+      callback?: Callback<DocumentCopyResponse>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/document/common.html#delete--db-docid
+    destroy(docname: string, rev: string, callback?: 
Callback<DocumentDestroyResponse>): Request;
+    bulk(docs: BulkModifyDocsWrapper, callback?: Callback<any>): Request;
+    bulk(docs: BulkModifyDocsWrapper, params: any, callback?: Callback<any>): 
Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs
+    list(callback?: Callback<DocumentListResponse<D>>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs
+    list(params: DocumentListParams, callback?: 
Callback<DocumentListResponse<D>>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs
+    fetch(docnames: BulkFetchDocsWrapper, callback?: 
Callback<DocumentFetchResponse<D>>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs
+    fetch(
+      docnames: BulkFetchDocsWrapper,
+      params: DocumentFetchParams,
+      callback?: Callback<DocumentFetchResponse<D>>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs
+    fetchRevs(docnames: BulkFetchDocsWrapper, callback?: 
Callback<DocumentFetchRevsResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#post--db-_all_docs
+    fetchRevs(
+      docnames: BulkFetchDocsWrapper,
+      params: DocumentFetchParams,
+      callback?: Callback<DocumentFetchRevsResponse>
+    ): Request;
+    multipart: Multipart<D>;
+    attachment: Attachment;
+    // 
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>
+    ): Request;
+    // 
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>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid
+    atomic(
+      designname: string,
+      updatename: string,
+      docname: string,
+      callback?: Callback<OkResponse>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/ddoc/render.html#put--db-_design-ddoc-_update-func-docid
+    atomic(
+      designname: string,
+      updatename: string,
+      docname: string,
+      body: any,
+      callback?: Callback<OkResponse>
+    ): Request;
+    // 
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>
+    ): Request;
+    // 
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>
+    ): Request;
+    search(
+      designname: string,
+      searchname: string,
+      callback?: Callback<any>
+    ): Request;
+    search(
+      designname: string,
+      searchname: string,
+      params: any,
+      callback?: Callback<any>
+    ): Request;
+    spatial(
+      ddoc: string,
+      viewname: string,
+      callback?: Callback<any>
+    ): Request;
+    spatial(
+      ddoc: string,
+      viewname: string,
+      params: any,
+      callback?: Callback<any>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view
+    // 
http://docs.couchdb.org/en/latest/api/ddoc/views.html#post--db-_design-ddoc-_view-view
+    view<V>(
+      designname: string,
+      viewname: string,
+      callback?: Callback<DocumentViewResponse<V>>
+    ): Request;
+    // 
http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view
+    // 
http://docs.couchdb.org/en/latest/api/ddoc/views.html#post--db-_design-ddoc-_view-view
+    view<V>(
+      designname: string,
+      viewname: string,
+      params: DocumentViewParams,
+      callback?: Callback<DocumentViewResponse<V>>
+    ): Request;
+    // 
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>
+    ): Request;
+    // 
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>
+    ): Request;
+    // http://docs.couchdb.org/en/latest/api/database/find.html#db-find
+    find(query: MangoQuery, callback?: Callback<MangoResponse<D>>): Request;
+    server: ServerScope;
+  }
+
+  interface AttachmentData {
+    name: string;
+    data: any;
+    content_type: any;
+  }
+
+  interface Multipart<D> {
+    // 
http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments
+    insert(doc: D, attachments: AttachmentData[], callback?: 
Callback<DocumentInsertResponse>): Request;
+    // 
http://docs.couchdb.org/en/latest/api/document/common.html#creating-multiple-attachments
+    insert(doc: D, attachments: AttachmentData[], params: any, callback?: 
Callback<DocumentInsertResponse>): Request;
+    get(docname: string, callback?: Callback<any>): Request;
+    get(docname: string, params: any, callback?: Callback<any>): Request;
+  }
+
+  interface Attachment {
+    insert(docname: string, attname: string, att: null, contenttype: string, 
params?: any): NodeJS.WritableStream;
+    insert(
+      docname: string,
+      attname: string,
+      att: any,
+      contenttype: string,
+      callback?: Callback<DocumentInsertResponse>
+    ): Request;
+    insert(
+      docname: string,
+      attname: string,
+      att: any,
+      contenttype: string,
+      params: any,
+      callback?: Callback<DocumentInsertResponse>
+    ): Request;
+    get(docname: string, attname: string): NodeJS.ReadableStream;
+    get(docname: string, attname: string, callback?: Callback<any>): Request;
+    get(
+      docname: string,
+      attname: string,
+      params: any,
+      callback?: Callback<any>
+    ): Request;
+    destroy(docname: string, attname: string, callback?: Callback<any>): 
Request;
+    destroy(
+      docname: string,
+      attname: string,
+      params: any,
+      callback?: Callback<any>
+    ): Request;
+  }
+
+  interface ServerConfig {
+    url: string;
+    db: string;
+  }
+
+  type RequestFunction = (
+    options?: RequestOptions | string,
+    callback?: Callback<any>
+  ) => void;
+
+  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[];
+  }
+
+  // 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 DocumentScopeFollowUpdatesParams {
+    include_docs?: boolean;
+    since?: string;
+    heartbeat?: number;
+    feed?: "continuous";
+    filter?: string | FollowUpdatesParamsFilterFunction;
+    query_params?: any;
+    headers?: any;
+    inactivity_ms?: number;
+    max_retry_seconds?: number;
+    initial_retry_delay?: number;
+    response_grace_time?: number;
+  }
+
+  interface DatabaseScopeFollowUpdatesParams
+    extends DocumentScopeFollowUpdatesParams {
+    db: string;
+  }
+
+  type FollowUpdatesParamsFilterFunction = (doc: any, req: any) => boolean;
+
+  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
+  // -------------------------------------
+
+  interface View<D> {
+    map?(doc: D & Document): void;
+    reduce?(doc: D & Document): void;
+  }
+
+  interface ViewDocument<D> extends IdentifiedDocument {
+    views: {
+      [name: string]: View<D>
+    };
+  }
+
+  // -------------------------------------
+  // Database scope request and response
+  // -------------------------------------
+
+  // 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;
+  }
+
+  // http://docs.couchdb.org/en/latest/api/database/common.html#get--db
+  interface DatabaseGetResponse {
+    // Set to true if the database compaction routine is operating on this 
database.
+    compact_running: boolean;
+
+    // The name of the database.
+    db_name: string;
+
+    // The version of the physical format used for the data when it is stored 
on disk.
+    disk_format_version: number;
+
+    // The number of bytes of live data inside the database file.
+    data_size: number;
+
+    // The length of the database file on disk. Views indexes are not included 
in the calculation.
+    disk_size: number;
+
+    // A count of the documents in the specified database.
+    doc_count: number;
+
+    // Number of deleted documents
+    doc_del_count: number;
+
+    // Timestamp of when the database was opened, expressed in microseconds 
since the epoch.
+    instance_start_time: string;
+
+    // The number of purge operations on the database.
+    purge_seq: number;
+
+    sizes: {
+      // The size of live data inside the database, in bytes.
+      active: number;
+
+      // The uncompressed size of database contents in bytes.
+      external: number;
+
+      // The size of the database file on disk in bytes. Views indexes
+      file: number;
+    };
+
+    // The current number of updates to the database.
+    update_seq: number;
+  }
+
+  // http://docs.couchdb.org/en/latest/api/database/common.html#delete--db
+  // 
http://docs.couchdb.org/en/latest/api/database/compact.html#post--db-_compact
+  interface OkResponse {
+    // Operation status
+    ok: boolean;
+  }
+
+  // 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;
+  }
+
+  // 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;
+  }
+
+  // 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;
+  }
+
+  // 
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 is false.
+    conflicts?: boolean;
+
+    // Return the change results in descending sequence order (most recent 
change first). Default is false.
+    descending?: boolean;
+
+    // - 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.
+    feed?: "normal" | "longpoll" | "continuous" | "eventsource";
+
+    // Reference to a filter function from a design document that 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. Default is 60000.
+    // May be true to use default value.
+    heartbeat?: number;
+
+    // Include the associated document with each result. If there are 
conflicts, only the winning revision is returned.
+    // Default is 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 is false.
+    attachments?: boolean;
+
+    // Include encoding information in attachment stubs if include_docs is 
true and the particular attachment is
+    // compressed. Ignored if include_docs isn’t true. Default is 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 is 0.
+    since?: number;
+
+    // Specifies how many revisions are returned in the changes array. The 
default, main_only, will only return the
+    // current “winning” revision; all_docs will return all leaf revisions 
(including conflicts and deleted former
+    // conflicts).
+    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 _view for more info.
+    view?: string;
+  }
+
+  // 
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;
+  }
+
+  // 
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[];
+  }
+
+  // 
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[];
+  }
+
+  // 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;
+  }
+
+  // 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;
+  }
+
+  // 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
+  // -------------------------------------
+
+  interface DocumentResponseRowMeta {
+    id: string;
+    key: string;
+    value: {
+      rev: string;
+    };
+  }
+
+  interface DocumentResponseRow<D> extends DocumentResponseRowMeta {
+    doc?: D & Document;
+  }
+
+  // http://docs.couchdb.org/en/latest/api/database/common.html#post--db
+  // http://docs.couchdb.org/en/latest/api/document/common.html#put--db-docid
+  interface DocumentInsertParams {
+    // Document’s revision if updating an existing document. Alternative to 
If-Match header or document key.
+    rev?: string;
+
+    // Stores document in batch mode.
+    batch?: "ok";
+
+    // Prevents insertion of a conflicting document. Possible values: true 
(default) and false. 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.
+    new_edits?: boolean;
+  }
+
+  // http://docs.couchdb.org/en/latest/api/database/common.html#post--db
+  // 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;
+  }
+
+  // 
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;
+  }
+
+  // http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid
+  interface DocumentGetParams {
+    // Includes attachments bodies in response. Default is false.
+    attachments?: boolean;
+
+    // Includes encoding information in attachment stubs if the particular 
attachment is compressed. Default is
+    // 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 is false.
+    conflicts?: boolean;
+
+    // Includes information about deleted conflicted revisions. Default is 
false.
+    deleted_conflicts?: boolean;
+
+    // Forces retrieving latest “leaf” revision, no matter what rev was 
requested. Default is false.
+    latest?: boolean;
+
+    // Includes last update sequence for the document. Default is false.
+    local_seq?: boolean;
+
+    // Acts same as specifying all conflicts, deleted_conflicts and revs_info 
query parameters. Default is false.
+    meta?: boolean;
+
+    // Retrieves documents of specified leaf revisions. Additionally, it 
accepts value as all to return all leaf
+    // revisions.
+    open_revs?: any[];
+
+    // Retrieves document of specified revision.
+    rev?: string;
+
+    // Includes list of all known document revisions.
+    revs?: boolean;
+
+    // Includes detailed information for all known document revisions. Default 
is false.
+    revs_info?: boolean;
+  }
+
+  // http://docs.couchdb.org/en/latest/api/document/common.html#get--db-docid
+  interface DocumentGetResponse {
+    // Document ID.
+    _id: string;
+
+    // Revision MVCC token.
+    _rev: string;
+
+    // Deletion flag. Available if document was removed.
+    _deleted?: boolean;
+
+    // Attachment’s stubs. Available if document has any attachments.
+    _attachments?: any;
+
+    // List of conflicted revisions. Available if requested with 
conflicts=true query parameter.
+    _conflicts?: any[];
+
+    // List of deleted conflicted revisions. Available if requested with 
deleted_conflicts=true query parameter.
+    _deleted_conflicts?: any[];
+
+    // Document’s update sequence in current database. Available if requested 
with local_seq=true query parameter.
+    _local_seq?: string;
+
+    // List of objects with information about local revisions and their 
status. Available if requested with
+    // open_revs query parameter.
+    _revs_info?: any[];
+
+    // List of local revision tokens without. Available if requested with 
revs=true query parameter.
+    _revisions?: any;
+  }
+
+  interface DocumentCopyOptions {
+    overwrite?: boolean;
+  }
+
+  // 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;
+  }
+
+  // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs
+  interface DocumentListParams {
+    // Includes conflicts information in response. Ignored if include_docs 
isn’t true. Default is false.
+    conflicts?: boolean;
+
+    // Return the documents in descending by key order. Default is false.
+    descending?: boolean;
+
+    // Stop returning records when the specified key is reached.
+    endkey?: string;
+
+    // Stop returning records when the specified key is reached. end_key is an 
alias for endkey
+    end_key?: string;
+
+    // Stop returning records when the specified document ID is reached.
+    end_key_doc_id?: string;
+
+    // Include the full content of the documents in the return. Default is 
false.
+    include_docs?: boolean;
+
+    // Specifies whether the specified end key should be included in the 
result. Default is true.
+    inclusive_end?: boolean;
+
+    // Return only documents that match the specified key.
+    key?: string;
+
+    // Return only documents that match the specified keys.
+    keys?: string; // This can be string[] too ???
+
+    // Limit the number of the returned documents to the specified number.
+    limit?: number;
+
+    // Skip this number of records before starting to return the results. 
Default is 0.
+    skip?: number;
+
+    // Allow the results from a stale view to be used, without triggering a 
rebuild of all views within the
+    // encompassing design doc. Supported values: ok and update_after.
+    stale?: string;
+
+    // Return records starting with the specified key.
+    startkey?: string;
+
+    // Return records starting with the specified key. start_key is an alias 
for startkey
+    start_key?: string;
+
+    // Return records starting with the specified document ID.
+    start_key_doc_id?: string;
+
+    // Response includes an update_seq value indicating which sequence id of 
the underlying database the view
+    // reflects. Default is false.
+    update_seq?: boolean;
+  }
+
+  // 
http://docs.couchdb.org/en/latest/api/database/bulk-api.html#get--db-_all_docs
+  interface DocumentListResponse<D> {
+    // Offset where the document list started.
+    offset: number;
+
+    // Array of view row objects. By default the information returned contains 
only the document ID and revision.
+    rows: Array<DocumentResponseRow<D>>;
+
+    // Number of documents in the database/view. Note that this is not the 
number of rows returned in the actual
+    // query.
+    total_rows: number;
+
+    // Current update sequence for the database.
+    update_seq?: number;
+  }
+
+  interface DocumentFetchParams {
+    conflicts?: boolean;
+    descending?: boolean;
+    end_key?: string;
+    end_key_doc_id?: string;
+    inclusive_end?: boolean;
+    key?: string;
+    keys?: string; // This can be string[] too ???
+    limit?: number;
+    skip?: number;
+    stale?: string;
+    start_key?: string;
+    start_key_doc_id?: string;
+    update_seq?: boolean;
+  }
+
+  interface DocumentFetchResponse<D> {
+    offset: number;
+    rows: Array<DocumentResponseRow<D>>;
+    total_rows: number;
+    update_seq?: number;
+  }
+
+  interface DocumentFetchRevsResponse {
+    offset: number;
+    rows: DocumentResponseRowMeta[];
+    total_rows: number;
+    update_seq?: number;
+  }
+
+  // 
http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view
+  interface DocumentViewParams {
+    // Includes conflicts information in response. Ignored if include_docs 
isn’t true. Default is false.
+    conflicts?: boolean;
+
+    // Return the documents in descending by key order. Default is false.
+    descending?: boolean;
+
+    // Stop returning records when the specified key is reached.
+    endkey?: any;
+
+    // Alias for endkey param.
+    end_key?: any;
+
+    // Stop returning records when the specified document ID is reached. 
Requires endkey to be specified for this
+    // to have any effect.
+    endkey_docid?: string;
+
+    // Alias for endkey_docid param.
+    end_key_doc_id?: string;
+
+    // Group the results using the reduce function to a group or single row. 
Default is false.
+    group?: boolean;
+
+    // Specify the group level to be used.
+    group_level?: number;
+
+    // Include the associated document with each row. Default is 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 is false.
+    attachments?: boolean;
+
+    // Include encoding information in attachment stubs if include_docs is 
true and the particular attachment is
+    // compressed. Ignored if include_docs isn’t true. Default is false.
+    att_encoding_info?: boolean;
+
+    // Specifies whether the specified end key should be included in the 
result. Default is true.
+    inclusive_end?: boolean;
+
+    // Return only documents that match the specified key.
+    key?: any;
+
+    // Return only documents where the key matches one of the keys specified 
in the array.
+    keys?: any[];
+
+    // Limit the number of the returned documents to the specified number.
+    limit?: number;
+
+    // Use the reduction function. Default is true.
+    reduce?: boolean;
+
+    // Skip this number of records before starting to return the results. 
Default is 0.
+    skip?: number;
+
+    // Sort returned rows. Setting this to false offers a performance boost. 
The total_rows and offset fields are
+    // not available when this is set to false. Default is true.
+    sorted?: boolean;
+
+    // Whether or not the view results should be returned from a stable set of 
shards. Default is false.
+    stable?: boolean;
+    // Allow the results from a stale view to be used. Supported values: ok, 
update_after and false. ok is
+    // equivalent to stable=true&update=false. update_after is equivalent to 
stable=true&update=lazy. false is
+    // equivalent to stable=false&update=true.
+    stale?: string;
+
+    // Return records starting with the specified key.
+    startkey?: any;
+
+    // Alias for startkey param
+    start_key?: any;
+
+    // Return records starting with the specified document ID. Requires 
startkey to be specified for this to have
+    // any effect.
+    startkey_docid?: string;
+
+    // Alias for startkey_docid param
+    start_key_doc_id?: string;
+
+    //  Whether or not the view in question should be updated prior to 
responding to the user. Supported values:
+    // true, false, lazy. Default is true.
+    update?: string;
+
+    // Response includes an update_seq value indicating which sequence id of 
the database the view reflects.
+    // Default is false.
+    update_seq?: boolean;
+  }
+
+  // 
http://docs.couchdb.org/en/latest/api/ddoc/views.html#get--db-_design-ddoc-_view-view
+  interface DocumentViewResponse<V> {
+    // Offset where the document list started.
+    offset: number;
+
+    //  Array of view row objects. By default the information returned 
contains only the document ID and revision.
+    rows: Array<{
+      id: string;
+      key: string;
+      value: V;
+    }>;
+
+    // Number of documents in the database/view.
+    total_rows: number;
+
+    // Current update sequence for the database
+    update_seq: any;
+  }
+
+  type MangoValue = number | string | Date | boolean;
+
+  // http://docs.couchdb.org/en/latest/api/database/find.html#selector-syntax
+  interface MangoSelector {
+    [key: string]: MangoSelector | MangoValue | MangoValue[];
+  }
+
+  // http://docs.couchdb.org/en/latest/api/database/find.html#sort-syntax
+  type SortOrder = string | string[] | { [key: string]: 'asc' | 'desc' };
+
+  interface MangoQuery {
+    // JSON object describing criteria used to select documents.
+    selector: MangoSelector;
+
+    // Maximum number of results returned. Default is 25.
+    limit?: number;
+
+    // Skip the first 'n' results, where 'n' is the value specified.
+    skip?: number;
+
+    // JSON array following sort syntax.
+    sort?: SortOrder[];
+
+    // JSON array specifying which fields of each object should be returned. 
If it is omitted,
+    // the entire object is returned.
+    // 
http://docs.couchdb.org/en/latest/api/database/find.html#filtering-fields
+    fields?: string[];
+
+    // Instruct a query to use a specific index.
+    // Specified either as "<design_document>" or ["<design_document>", 
"<index_name>"].
+    use_index?: string | [string, string];
+
+    // Read quorum needed for the result. This defaults to 1.
+    r?: number;
+
+    // A string that enables you to specify which page of results you require. 
Used for paging through result sets.
+    bookmark?: string;
+
+    // Whether to update the index prior to returning the result. Default is 
true.
+    update?: boolean;
+
+    // Whether or not the view results should be returned from a “stable” set 
of shards.
+    stable?: boolean;
+
+    // Combination of update = false and stable = true options.Possible 
options: "ok", false (default).
+    stale?: 'ok' | false;
+
+    // Include execution statistics in the query response. Optional, default: 
false.
+    execution_stats?: boolean;
+  }
+
+  interface MangoResponse<D> {
+    // Array of documents matching the search. In each matching document, the 
fields specified in
+    // the fields part of the request body are listed, along with their values.
+    docs: D[];
+
+    // A string that enables you to specify which page of results you require. 
Used for paging through result sets.
+    bookmark?: string;
+
+    // Execution warnings
+    warning?: string;
+
+    // Basic execution statistics for a specific request.
+    execution_stats?: MangoExecutionStats;
+  }
+
+  // 
http://docs.couchdb.org/en/latest/api/database/find.html#execution-statistics
+  interface MangoExecutionStats {
+    // Number of index keys examined. Currently always 0.
+    total_keys_examined: number;
+
+    // Number of documents fetched from the database / index, equivalent to 
using include_docs = true in a view.
+    total_docs_examined: number;
+
+    // Number of documents fetched from the database using an out - of - band 
document fetch.
+    // This is only non - zero when read quorum > 1 is specified in the query 
parameters.
+    total_quorum_docs_examined: number;
+
+    // Number of results returned from the query.
+    results_returned: number;
+
+    // Total execution time in milliseconds as measured by the database.
+    execution_time_ms: number;
+  }
+}
+
+export = nano;
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index edd7148..5f9754b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4,6 +4,40 @@
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@types/caseless": {
+      "version": "0.12.1",
+      "resolved": 
"https://registry.npmjs.org/@types/caseless/-/caseless-0.12.1.tgz";,
+      "integrity": 
"sha512-FhlMa34NHp9K5MY1Uz8yb+ZvuX0pnvn3jScRSNAb75KHGB8d3rEU6hqMs3Z2vjuytcMfRg6c5CHMc3wtYyD2/A=="
+    },
+    "@types/form-data": {
+      "version": "2.2.1",
+      "resolved": 
"https://registry.npmjs.org/@types/form-data/-/form-data-2.2.1.tgz";,
+      "integrity": 
"sha512-JAMFhOaHIciYVh8fb5/83nmuO/AHwmto+Hq7a9y8FzLDcC1KCU344XDOMEmahnrTFlHjgh4L0WJFczNIX2GxnQ==",
+      "requires": {
+        "@types/node": "*"
+      }
+    },
+    "@types/node": {
+      "version": "10.3.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.3.5.tgz";,
+      "integrity": 
"sha512-6lRwZN0Y3TuglwaaZN2XPocobmzLlhxcqDjKFjNYSsXG/TFAGYkCqkzZh4+ms8iTHHQE6gJXLHPV7TziVGeWhg=="
+    },
+    "@types/request": {
+      "version": "2.47.1",
+      "resolved": 
"https://registry.npmjs.org/@types/request/-/request-2.47.1.tgz";,
+      "integrity": 
"sha512-TV3XLvDjQbIeVxJ1Z3oCTDk/KuYwwcNKVwz2YaT0F5u86Prgc4syDAp6P96rkTQQ4bIdh+VswQIC9zS6NjY7/g==",
+      "requires": {
+        "@types/caseless": "*",
+        "@types/form-data": "*",
+        "@types/node": "*",
+        "@types/tough-cookie": "*"
+      }
+    },
+    "@types/tough-cookie": {
+      "version": "2.3.3",
+      "resolved": 
"https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-2.3.3.tgz";,
+      "integrity": 
"sha512-MDQLxNFRLasqS4UlkWMSACMKeSm1x4Q3TxzUC7KQUsh6RK1ZrQ0VEyE3yzXcBu+K8ejVj4wuX32eUG02yNp+YQ=="
+    },
     "JSV": {
       "version": "4.0.2",
       "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz";,
@@ -21,10 +55,10 @@
       "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz";,
       "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
       "requires": {
-        "co": "4.6.0",
-        "fast-deep-equal": "1.1.0",
-        "fast-json-stable-stringify": "2.0.0",
-        "json-schema-traverse": "0.3.1"
+        "co": "^4.6.0",
+        "fast-deep-equal": "^1.0.0",
+        "fast-json-stable-stringify": "^2.0.0",
+        "json-schema-traverse": "^0.3.0"
       }
     },
     "align-text": {
@@ -33,9 +67,9 @@
       "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
       "dev": true,
       "requires": {
-        "kind-of": "3.2.2",
-        "longest": "1.0.1",
-        "repeat-string": "1.6.1"
+        "kind-of": "^3.0.2",
+        "longest": "^1.0.1",
+        "repeat-string": "^1.5.2"
       }
     },
     "amdefine": {
@@ -62,7 +96,7 @@
       "integrity": 
"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
       "dev": true,
       "requires": {
-        "sprintf-js": "1.0.3"
+        "sprintf-js": "~1.0.2"
       }
     },
     "asn1": {
@@ -87,7 +121,7 @@
       "integrity": 
"sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
       "dev": true,
       "requires": {
-        "lodash": "4.17.10"
+        "lodash": "^4.14.0"
       }
     },
     "asynckit": {
@@ -111,8 +145,8 @@
       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
       "dev": true,
       "requires": {
-        "core-js": "2.5.6",
-        "regenerator-runtime": "0.11.1"
+        "core-js": "^2.4.0",
+        "regenerator-runtime": "^0.11.0"
       }
     },
     "babylon": {
@@ -133,7 +167,7 @@
       "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
       "optional": true,
       "requires": {
-        "tweetnacl": "0.14.5"
+        "tweetnacl": "^0.14.3"
       }
     },
     "boom": {
@@ -141,7 +175,7 @@
       "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz";,
       "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=",
       "requires": {
-        "hoek": "4.2.1"
+        "hoek": "4.x.x"
       }
     },
     "brace-expansion": {
@@ -150,7 +184,7 @@
       "integrity": 
"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
       "dev": true,
       "requires": {
-        "balanced-match": "1.0.0",
+        "balanced-match": "^1.0.0",
         "concat-map": "0.0.1"
       }
     },
@@ -178,8 +212,8 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "align-text": "0.1.4",
-        "lazy-cache": "1.0.4"
+        "align-text": "^0.1.3",
+        "lazy-cache": "^1.0.3"
       }
     },
     "chai": {
@@ -188,12 +222,12 @@
       "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
       "dev": true,
       "requires": {
-        "assertion-error": "1.1.0",
-        "check-error": "1.0.2",
-        "deep-eql": "3.0.1",
-        "get-func-name": "2.0.0",
-        "pathval": "1.1.0",
-        "type-detect": "4.0.8"
+        "assertion-error": "^1.0.1",
+        "check-error": "^1.0.1",
+        "deep-eql": "^3.0.0",
+        "get-func-name": "^2.0.0",
+        "pathval": "^1.0.0",
+        "type-detect": "^4.0.0"
       },
       "dependencies": {
         "pathval": {
@@ -210,11 +244,11 @@
       "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
       "dev": true,
       "requires": {
-        "ansi-styles": "2.2.1",
-        "escape-string-regexp": "1.0.5",
-        "has-ansi": "2.0.0",
-        "strip-ansi": "3.0.1",
-        "supports-color": "2.0.0"
+        "ansi-styles": "^2.2.1",
+        "escape-string-regexp": "^1.0.2",
+        "has-ansi": "^2.0.0",
+        "strip-ansi": "^3.0.0",
+        "supports-color": "^2.0.0"
       },
       "dependencies": {
         "supports-color": {
@@ -238,7 +272,7 @@
       "dev": true,
       "requires": {
         "exit": "0.1.2",
-        "glob": "7.1.2"
+        "glob": "^7.1.1"
       },
       "dependencies": {
         "glob": {
@@ -247,12 +281,12 @@
           "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -273,8 +307,8 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "center-align": "0.1.3",
-        "right-align": "0.1.3",
+        "center-align": "^0.1.1",
+        "right-align": "^0.1.1",
         "wordwrap": "0.0.2"
       },
       "dependencies": {
@@ -292,9 +326,9 @@
       "resolved": 
"https://registry.npmjs.org/cloudant-follow/-/cloudant-follow-0.17.0.tgz";,
       "integrity": 
"sha512-JQ1xvKAHh8rsnSVBjATLCjz/vQw1sWBGadxr2H69yFMwD7hShUGDwwEefdypaxroUJ/w6t1cSwilp/hRUxEW8w==",
       "requires": {
-        "browser-request": "0.3.3",
-        "debug": "3.1.0",
-        "request": "2.85.0"
+        "browser-request": "~0.3.0",
+        "debug": "^3.0.0",
+        "request": "^2.83.0"
       },
       "dependencies": {
         "debug": {
@@ -323,7 +357,7 @@
       "resolved": 
"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz";,
       "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
       "requires": {
-        "delayed-stream": "1.0.0"
+        "delayed-stream": "~1.0.0"
       }
     },
     "commander": {
@@ -332,7 +366,7 @@
       "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
       "dev": true,
       "requires": {
-        "graceful-readlink": "1.0.1"
+        "graceful-readlink": ">= 1.0.0"
       }
     },
     "comment-parser": {
@@ -341,7 +375,7 @@
       "integrity": "sha1-PAPwd2uGo239mgosl8YwfzMggv4=",
       "dev": true,
       "requires": {
-        "readable-stream": "2.3.6"
+        "readable-stream": "^2.0.4"
       },
       "dependencies": {
         "isarray": {
@@ -356,13 +390,13 @@
           "integrity": 
"sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
           "dev": true,
           "requires": {
-            "core-util-is": "1.0.2",
-            "inherits": "2.0.3",
-            "isarray": "1.0.0",
-            "process-nextick-args": "2.0.0",
-            "safe-buffer": "5.1.2",
-            "string_decoder": "1.1.1",
-            "util-deprecate": "1.0.2"
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
           }
         },
         "string_decoder": {
@@ -371,7 +405,7 @@
           "integrity": 
"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
           "dev": true,
           "requires": {
-            "safe-buffer": "5.1.2"
+            "safe-buffer": "~5.1.0"
           }
         }
       }
@@ -388,7 +422,7 @@
       "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=",
       "dev": true,
       "requires": {
-        "date-now": "0.1.4"
+        "date-now": "^0.1.4"
       }
     },
     "core-js": {
@@ -407,7 +441,7 @@
       "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz";,
       "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=",
       "requires": {
-        "boom": "5.2.0"
+        "boom": "5.x.x"
       },
       "dependencies": {
         "boom": {
@@ -415,7 +449,7 @@
           "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz";,
           "integrity": 
"sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==",
           "requires": {
-            "hoek": "4.2.1"
+            "hoek": "4.x.x"
           }
         }
       }
@@ -426,9 +460,9 @@
       "integrity": 
"sha512-U5ETe1IOjq2h56ZcBE3oe9rT7XryCH6IKgPMv0L7sSk6w29yR3p5egCK0T3BDNHHV95OoUBgXsqiVG+3a900Ag==",
       "dev": true,
       "requires": {
-        "babel-runtime": "6.26.0",
-        "babylon": "6.18.0",
-        "source-map-support": "0.4.18"
+        "babel-runtime": "^6.9.2",
+        "babylon": "^6.8.1",
+        "source-map-support": "^0.4.0"
       }
     },
     "cycle": {
@@ -442,7 +476,7 @@
       "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz";,
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       }
     },
     "date-now": {
@@ -472,7 +506,7 @@
       "integrity": 
"sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
       "dev": true,
       "requires": {
-        "type-detect": "4.0.8"
+        "type-detect": "^4.0.0"
       }
     },
     "deep-equal": {
@@ -493,8 +527,8 @@
       "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=",
       "dev": true,
       "requires": {
-        "foreach": "2.0.5",
-        "object-keys": "1.0.11"
+        "foreach": "^2.0.5",
+        "object-keys": "^1.0.8"
       }
     },
     "defined": {
@@ -514,8 +548,8 @@
       "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.1.3",
-        "entities": "1.1.1"
+        "domelementtype": "~1.1.1",
+        "entities": "~1.1.1"
       },
       "dependencies": {
         "domelementtype": {
@@ -544,7 +578,7 @@
       "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.3.0"
+        "domelementtype": "1"
       }
     },
     "domutils": {
@@ -553,8 +587,8 @@
       "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
       "dev": true,
       "requires": {
-        "dom-serializer": "0.1.0",
-        "domelementtype": "1.3.0"
+        "dom-serializer": "0",
+        "domelementtype": "1"
       }
     },
     "ecc-jsbn": {
@@ -563,7 +597,7 @@
       "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
       "optional": true,
       "requires": {
-        "jsbn": "0.1.1"
+        "jsbn": "~0.1.0"
       }
     },
     "endswith": {
@@ -589,11 +623,11 @@
       "integrity": 
"sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==",
       "dev": true,
       "requires": {
-        "es-to-primitive": "1.1.1",
-        "function-bind": "1.1.1",
-        "has": "1.0.1",
-        "is-callable": "1.1.3",
-        "is-regex": "1.0.4"
+        "es-to-primitive": "^1.1.1",
+        "function-bind": "^1.1.1",
+        "has": "^1.0.1",
+        "is-callable": "^1.1.3",
+        "is-regex": "^1.0.4"
       }
     },
     "es-to-primitive": {
@@ -602,9 +636,9 @@
       "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
       "dev": true,
       "requires": {
-        "is-callable": "1.1.3",
-        "is-date-object": "1.0.1",
-        "is-symbol": "1.0.1"
+        "is-callable": "^1.1.1",
+        "is-date-object": "^1.0.1",
+        "is-symbol": "^1.0.1"
       }
     },
     "escape-string-regexp": {
@@ -619,11 +653,11 @@
       "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=",
       "dev": true,
       "requires": {
-        "esprima": "2.7.3",
-        "estraverse": "1.9.3",
-        "esutils": "2.0.2",
-        "optionator": "0.8.2",
-        "source-map": "0.2.0"
+        "esprima": "^2.7.1",
+        "estraverse": "^1.9.1",
+        "esutils": "^2.0.2",
+        "optionator": "^0.8.1",
+        "source-map": "~0.2.0"
       }
     },
     "esprima": {
@@ -688,7 +722,7 @@
       "integrity": "sha1-LEBFC5NI6X8oEyJZO6lnBLmr1NQ=",
       "dev": true,
       "requires": {
-        "is-function": "1.0.1"
+        "is-function": "~1.0.0"
       }
     },
     "foreach": {
@@ -707,9 +741,9 @@
       "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz";,
       "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
       "requires": {
-        "asynckit": "0.4.0",
+        "asynckit": "^0.4.0",
         "combined-stream": "1.0.6",
-        "mime-types": "2.1.18"
+        "mime-types": "^2.1.12"
       }
     },
     "fs.realpath": {
@@ -735,7 +769,7 @@
       "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz";,
       "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
       "requires": {
-        "assert-plus": "1.0.0"
+        "assert-plus": "^1.0.0"
       }
     },
     "glob": {
@@ -744,11 +778,11 @@
       "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=",
       "dev": true,
       "requires": {
-        "inflight": "1.0.6",
-        "inherits": "2.0.3",
-        "minimatch": "3.0.4",
-        "once": "1.4.0",
-        "path-is-absolute": "1.0.1"
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "2 || 3",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
       }
     },
     "graceful-readlink": {
@@ -763,10 +797,10 @@
       "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
       "dev": true,
       "requires": {
-        "async": "1.5.2",
-        "optimist": "0.6.1",
-        "source-map": "0.4.4",
-        "uglify-js": "2.8.29"
+        "async": "^1.4.0",
+        "optimist": "^0.6.1",
+        "source-map": "^0.4.4",
+        "uglify-js": "^2.6"
       },
       "dependencies": {
         "async": {
@@ -781,7 +815,7 @@
           "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
           "dev": true,
           "requires": {
-            "amdefine": "1.0.1"
+            "amdefine": ">=0.0.4"
           }
         }
       }
@@ -796,8 +830,8 @@
       "resolved": 
"https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz";,
       "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
       "requires": {
-        "ajv": "5.5.2",
-        "har-schema": "2.0.0"
+        "ajv": "^5.1.0",
+        "har-schema": "^2.0.0"
       }
     },
     "has": {
@@ -806,7 +840,7 @@
       "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=",
       "dev": true,
       "requires": {
-        "function-bind": "1.1.1"
+        "function-bind": "^1.0.2"
       }
     },
     "has-ansi": {
@@ -815,7 +849,7 @@
       "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
       "dev": true,
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       }
     },
     "has-color": {
@@ -835,10 +869,10 @@
       "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz";,
       "integrity": 
"sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==",
       "requires": {
-        "boom": "4.3.1",
-        "cryptiles": "3.1.2",
-        "hoek": "4.2.1",
-        "sntp": "2.1.0"
+        "boom": "4.x.x",
+        "cryptiles": "3.x.x",
+        "hoek": "4.x.x",
+        "sntp": "2.x.x"
       }
     },
     "hoek": {
@@ -852,11 +886,11 @@
       "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
       "dev": true,
       "requires": {
-        "domelementtype": "1.3.0",
-        "domhandler": "2.3.0",
-        "domutils": "1.5.1",
-        "entities": "1.0.0",
-        "readable-stream": "1.1.14"
+        "domelementtype": "1",
+        "domhandler": "2.3",
+        "domutils": "1.5",
+        "entities": "1.0",
+        "readable-stream": "1.1"
       }
     },
     "http-signature": {
@@ -864,9 +898,9 @@
       "resolved": 
"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz";,
       "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
       "requires": {
-        "assert-plus": "1.0.0",
-        "jsprim": "1.4.1",
-        "sshpk": "1.14.1"
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
       }
     },
     "i": {
@@ -881,8 +915,8 @@
       "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "dev": true,
       "requires": {
-        "once": "1.4.0",
-        "wrappy": "1.0.2"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
     "inherit": {
@@ -927,7 +961,7 @@
       "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=",
       "dev": true,
       "requires": {
-        "has": "1.0.1"
+        "has": "^1.0.1"
       }
     },
     "is-symbol": {
@@ -970,20 +1004,20 @@
       "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=",
       "dev": true,
       "requires": {
-        "abbrev": "1.0.9",
-        "async": "1.5.2",
-        "escodegen": "1.8.1",
-        "esprima": "2.7.3",
-        "glob": "5.0.15",
-        "handlebars": "4.0.11",
-        "js-yaml": "3.11.0",
-        "mkdirp": "0.5.1",
-        "nopt": "3.0.6",
-        "once": "1.4.0",
-        "resolve": "1.1.7",
-        "supports-color": "3.2.3",
-        "which": "1.3.0",
-        "wordwrap": "1.0.0"
+        "abbrev": "1.0.x",
+        "async": "1.x",
+        "escodegen": "1.8.x",
+        "esprima": "2.7.x",
+        "glob": "^5.0.15",
+        "handlebars": "^4.0.1",
+        "js-yaml": "3.x",
+        "mkdirp": "0.5.x",
+        "nopt": "3.x",
+        "once": "1.x",
+        "resolve": "1.1.x",
+        "supports-color": "^3.1.0",
+        "which": "^1.1.1",
+        "wordwrap": "^1.0.0"
       },
       "dependencies": {
         "async": {
@@ -1000,8 +1034,8 @@
       "integrity": 
"sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==",
       "dev": true,
       "requires": {
-        "argparse": "1.0.10",
-        "esprima": "4.0.0"
+        "argparse": "^1.0.7",
+        "esprima": "^4.0.0"
       },
       "dependencies": {
         "esprima": {
@@ -1024,32 +1058,32 @@
       "integrity": "sha1-cUG03/W4bjLQ6Z12S4NnZ8MNIBo=",
       "dev": true,
       "requires": {
-        "chalk": "1.1.3",
-        "cli-table": "0.3.1",
-        "commander": "2.9.0",
-        "cst": "0.4.10",
-        "estraverse": "4.2.0",
-        "exit": "0.1.2",
-        "glob": "5.0.15",
+        "chalk": "~1.1.0",
+        "cli-table": "~0.3.1",
+        "commander": "~2.9.0",
+        "cst": "^0.4.3",
+        "estraverse": "^4.1.0",
+        "exit": "~0.1.2",
+        "glob": "^5.0.1",
         "htmlparser2": "3.8.3",
-        "js-yaml": "3.4.6",
-        "jscs-jsdoc": "2.0.0",
-        "jscs-preset-wikimedia": "1.0.1",
-        "jsonlint": "1.6.3",
-        "lodash": "3.10.1",
-        "minimatch": "3.0.4",
-        "natural-compare": "1.2.2",
-        "pathval": "0.1.1",
-        "prompt": "0.2.14",
-        "reserved-words": "0.1.2",
-        "resolve": "1.1.7",
-        "strip-bom": "2.0.0",
-        "strip-json-comments": "1.0.4",
-        "to-double-quotes": "2.0.0",
-        "to-single-quotes": "2.0.1",
-        "vow": "0.4.17",
-        "vow-fs": "0.3.6",
-        "xmlbuilder": "3.1.0"
+        "js-yaml": "~3.4.0",
+        "jscs-jsdoc": "^2.0.0",
+        "jscs-preset-wikimedia": "~1.0.0",
+        "jsonlint": "~1.6.2",
+        "lodash": "~3.10.0",
+        "minimatch": "~3.0.0",
+        "natural-compare": "~1.2.2",
+        "pathval": "~0.1.1",
+        "prompt": "~0.2.14",
+        "reserved-words": "^0.1.1",
+        "resolve": "^1.1.6",
+        "strip-bom": "^2.0.0",
+        "strip-json-comments": "~1.0.2",
+        "to-double-quotes": "^2.0.0",
+        "to-single-quotes": "^2.0.0",
+        "vow": "~0.4.8",
+        "vow-fs": "~0.3.4",
+        "xmlbuilder": "^3.1.0"
       },
       "dependencies": {
         "estraverse": {
@@ -1064,9 +1098,9 @@
           "integrity": "sha1-a+GyP2JJ9T0pM3D9TRqqY84bTrA=",
           "dev": true,
           "requires": {
-            "argparse": "1.0.10",
-            "esprima": "2.7.3",
-            "inherit": "2.2.6"
+            "argparse": "^1.0.2",
+            "esprima": "^2.6.0",
+            "inherit": "^2.2.2"
           }
         },
         "lodash": {
@@ -1083,8 +1117,8 @@
       "integrity": "sha1-9T684CmqMSW9iCkLpQ1k1FEKSHE=",
       "dev": true,
       "requires": {
-        "comment-parser": "0.3.2",
-        "jsdoctypeparser": "1.2.0"
+        "comment-parser": "^0.3.1",
+        "jsdoctypeparser": "~1.2.0"
       }
     },
     "jscs-preset-wikimedia": {
@@ -1099,7 +1133,7 @@
       "integrity": "sha1-597cFToRhJ/8UUEUSuhqfvDCU5I=",
       "dev": true,
       "requires": {
-        "lodash": "3.10.1"
+        "lodash": "^3.7.0"
       },
       "dependencies": {
         "lodash": {
@@ -1116,14 +1150,14 @@
       "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=",
       "dev": true,
       "requires": {
-        "cli": "1.0.1",
-        "console-browserify": "1.1.0",
-        "exit": "0.1.2",
-        "htmlparser2": "3.8.3",
-        "lodash": "3.7.0",
-        "minimatch": "3.0.4",
-        "shelljs": "0.3.0",
-        "strip-json-comments": "1.0.4"
+        "cli": "~1.0.0",
+        "console-browserify": "1.1.x",
+        "exit": "0.1.x",
+        "htmlparser2": "3.8.x",
+        "lodash": "3.7.x",
+        "minimatch": "~3.0.2",
+        "shelljs": "0.3.x",
+        "strip-json-comments": "1.0.x"
       },
       "dependencies": {
         "lodash": {
@@ -1155,8 +1189,8 @@
       "integrity": 
"sha512-jMVTMzP+7gU/IyC6hvKyWpUU8tmTkK5b3BPNuMI9U8Sit+YAWLlZwB6Y6YrdCxfg2kNz05p3XY3Bmm4m26Nv3A==",
       "dev": true,
       "requires": {
-        "JSV": "4.0.2",
-        "nomnom": "1.8.1"
+        "JSV": "^4.0.x",
+        "nomnom": "^1.5.x"
       }
     },
     "jsprim": {
@@ -1176,7 +1210,7 @@
       "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
       "dev": true,
       "requires": {
-        "is-buffer": "1.1.6"
+        "is-buffer": "^1.1.5"
       }
     },
     "lazy-cache": {
@@ -1192,8 +1226,8 @@
       "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "dev": true,
       "requires": {
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2"
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
       }
     },
     "lodash": {
@@ -1229,7 +1263,7 @@
       "resolved": 
"https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz";,
       "integrity": 
"sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
       "requires": {
-        "mime-db": "1.33.0"
+        "mime-db": "~1.33.0"
       }
     },
     "minimatch": {
@@ -1238,7 +1272,7 @@
       "integrity": 
"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
       "dev": true,
       "requires": {
-        "brace-expansion": "1.1.11"
+        "brace-expansion": "^1.1.7"
       }
     },
     "minimist": {
@@ -1293,15 +1327,15 @@
       "integrity": 
"sha512-ciCpyEq72Ws6/yhdayDfd0mAb3eQ7/533xKmFlBQZ5CDwrL0/bddtSicfL7R07oyvPAuegQrR+9ctrlPEp0EjQ==",
       "dev": true,
       "requires": {
-        "chai": "4.1.2",
-        "debug": "3.1.0",
-        "deep-equal": "1.0.1",
-        "json-stringify-safe": "5.0.1",
-        "lodash": "4.17.10",
-        "mkdirp": "0.5.1",
-        "propagate": "1.0.0",
-        "qs": "6.5.2",
-        "semver": "5.5.0"
+        "chai": "^4.1.2",
+        "debug": "^3.1.0",
+        "deep-equal": "^1.0.0",
+        "json-stringify-safe": "^5.0.1",
+        "lodash": "^4.17.5",
+        "mkdirp": "^0.5.0",
+        "propagate": "^1.0.0",
+        "qs": "^6.5.1",
+        "semver": "^5.5.0"
       },
       "dependencies": {
         "debug": {
@@ -1321,8 +1355,8 @@
       "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
       "dev": true,
       "requires": {
-        "chalk": "0.4.0",
-        "underscore": "1.6.0"
+        "chalk": "~0.4.0",
+        "underscore": "~1.6.0"
       },
       "dependencies": {
         "ansi-styles": {
@@ -1337,9 +1371,9 @@
           "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
           "dev": true,
           "requires": {
-            "ansi-styles": "1.0.0",
-            "has-color": "0.1.7",
-            "strip-ansi": "0.1.1"
+            "ansi-styles": "~1.0.0",
+            "has-color": "~0.1.0",
+            "strip-ansi": "~0.1.0"
           }
         },
         "strip-ansi": {
@@ -1356,7 +1390,7 @@
       "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
       "dev": true,
       "requires": {
-        "abbrev": "1.0.9"
+        "abbrev": "1"
       }
     },
     "oauth-sign": {
@@ -1382,7 +1416,7 @@
       "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
       "dev": true,
       "requires": {
-        "wrappy": "1.0.2"
+        "wrappy": "1"
       }
     },
     "optimist": {
@@ -1391,8 +1425,8 @@
       "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
       "dev": true,
       "requires": {
-        "minimist": "0.0.10",
-        "wordwrap": "0.0.3"
+        "minimist": "~0.0.1",
+        "wordwrap": "~0.0.2"
       },
       "dependencies": {
         "wordwrap": {
@@ -1409,12 +1443,12 @@
       "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
       "dev": true,
       "requires": {
-        "deep-is": "0.1.3",
-        "fast-levenshtein": "2.0.6",
-        "levn": "0.3.0",
-        "prelude-ls": "1.1.2",
-        "type-check": "0.3.2",
-        "wordwrap": "1.0.0"
+        "deep-is": "~0.1.3",
+        "fast-levenshtein": "~2.0.4",
+        "levn": "~0.3.0",
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2",
+        "wordwrap": "~1.0.0"
       }
     },
     "path-is-absolute": {
@@ -1464,11 +1498,11 @@
       "integrity": "sha1-V3VPZPVD/XsIRXB8gY7OYY8F/9w=",
       "dev": true,
       "requires": {
-        "pkginfo": "0.4.1",
-        "read": "1.0.7",
-        "revalidator": "0.1.8",
-        "utile": "0.2.1",
-        "winston": "0.8.3"
+        "pkginfo": "0.x.x",
+        "read": "1.0.x",
+        "revalidator": "0.1.x",
+        "utile": "0.2.x",
+        "winston": "0.8.x"
       }
     },
     "propagate": {
@@ -1493,7 +1527,7 @@
       "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=",
       "dev": true,
       "requires": {
-        "mute-stream": "0.0.7"
+        "mute-stream": "~0.0.4"
       }
     },
     "readable-stream": {
@@ -1502,10 +1536,10 @@
       "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
       "dev": true,
       "requires": {
-        "core-util-is": "1.0.2",
-        "inherits": "2.0.3",
+        "core-util-is": "~1.0.0",
+        "inherits": "~2.0.1",
         "isarray": "0.0.1",
-        "string_decoder": "0.10.31"
+        "string_decoder": "~0.10.x"
       }
     },
     "regenerator-runtime": {
@@ -1525,28 +1559,28 @@
       "resolved": "https://registry.npmjs.org/request/-/request-2.85.0.tgz";,
       "integrity": 
"sha512-8H7Ehijd4js+s6wuVPLjwORxD4zeuyjYugprdOXlPSqaApmL/QOy+EB/beICHVCHkGMKNh5rvihb5ov+IDw4mg==",
       "requires": {
-        "aws-sign2": "0.7.0",
-        "aws4": "1.7.0",
-        "caseless": "0.12.0",
-        "combined-stream": "1.0.6",
-        "extend": "3.0.1",
-        "forever-agent": "0.6.1",
-        "form-data": "2.3.2",
-        "har-validator": "5.0.3",
-        "hawk": "6.0.2",
-        "http-signature": "1.2.0",
-        "is-typedarray": "1.0.0",
-        "isstream": "0.1.2",
-        "json-stringify-safe": "5.0.1",
-        "mime-types": "2.1.18",
-        "oauth-sign": "0.8.2",
-        "performance-now": "2.1.0",
-        "qs": "6.5.2",
-        "safe-buffer": "5.1.2",
-        "stringstream": "0.0.5",
-        "tough-cookie": "2.3.4",
-        "tunnel-agent": "0.6.0",
-        "uuid": "3.2.1"
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.6.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.5",
+        "extend": "~3.0.1",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.1",
+        "har-validator": "~5.0.3",
+        "hawk": "~6.0.2",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.17",
+        "oauth-sign": "~0.8.2",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.1",
+        "safe-buffer": "^5.1.1",
+        "stringstream": "~0.0.5",
+        "tough-cookie": "~2.3.3",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.1.0"
       }
     },
     "reserved-words": {
@@ -1567,7 +1601,7 @@
       "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=",
       "dev": true,
       "requires": {
-        "through": "2.3.8"
+        "through": "~2.3.4"
       }
     },
     "revalidator": {
@@ -1583,7 +1617,7 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "align-text": "0.1.4"
+        "align-text": "^0.1.1"
       }
     },
     "rimraf": {
@@ -1592,7 +1626,7 @@
       "integrity": 
"sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
       "dev": true,
       "requires": {
-        "glob": "7.1.2"
+        "glob": "^7.0.5"
       },
       "dependencies": {
         "glob": {
@@ -1601,12 +1635,12 @@
           "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         }
       }
@@ -1639,7 +1673,7 @@
       "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz";,
       "integrity": 
"sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==",
       "requires": {
-        "hoek": "4.2.1"
+        "hoek": "4.x.x"
       }
     },
     "source-map": {
@@ -1649,7 +1683,7 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "amdefine": "1.0.1"
+        "amdefine": ">=0.0.4"
       }
     },
     "source-map-support": {
@@ -1658,7 +1692,7 @@
       "integrity": 
"sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",
       "dev": true,
       "requires": {
-        "source-map": "0.5.7"
+        "source-map": "^0.5.6"
       },
       "dependencies": {
         "source-map": {
@@ -1680,14 +1714,14 @@
       "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.1.tgz";,
       "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=",
       "requires": {
-        "asn1": "0.2.3",
-        "assert-plus": "1.0.0",
-        "bcrypt-pbkdf": "1.0.1",
-        "dashdash": "1.14.1",
-        "ecc-jsbn": "0.1.1",
-        "getpass": "0.1.7",
-        "jsbn": "0.1.1",
-        "tweetnacl": "0.14.5"
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "tweetnacl": "~0.14.0"
       }
     },
     "stack-trace": {
@@ -1702,9 +1736,9 @@
       "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
       "dev": true,
       "requires": {
-        "define-properties": "1.1.2",
-        "es-abstract": "1.11.0",
-        "function-bind": "1.1.1"
+        "define-properties": "^1.1.2",
+        "es-abstract": "^1.5.0",
+        "function-bind": "^1.0.2"
       }
     },
     "string_decoder": {
@@ -1724,7 +1758,7 @@
       "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
       "dev": true,
       "requires": {
-        "ansi-regex": "2.1.1"
+        "ansi-regex": "^2.0.0"
       }
     },
     "strip-bom": {
@@ -1733,7 +1767,7 @@
       "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
       "dev": true,
       "requires": {
-        "is-utf8": "0.2.1"
+        "is-utf8": "^0.2.0"
       }
     },
     "strip-json-comments": {
@@ -1748,7 +1782,7 @@
       "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
       "dev": true,
       "requires": {
-        "has-flag": "1.0.0"
+        "has-flag": "^1.0.0"
       }
     },
     "tape": {
@@ -1757,19 +1791,19 @@
       "integrity": 
"sha512-j0jO9BiScfqtPBb9QmPLL0qvxXMz98xjkMb7x8lKipFlJZwNJkqkWPou+NU4V6T9RnVh1kuSthLE8gLrN8bBfw==",
       "dev": true,
       "requires": {
-        "deep-equal": "1.0.1",
-        "defined": "1.0.0",
-        "for-each": "0.3.2",
-        "function-bind": "1.1.1",
-        "glob": "7.1.2",
-        "has": "1.0.1",
-        "inherits": "2.0.3",
-        "minimist": "1.2.0",
-        "object-inspect": "1.5.0",
-        "resolve": "1.5.0",
-        "resumer": "0.0.0",
-        "string.prototype.trim": "1.1.2",
-        "through": "2.3.8"
+        "deep-equal": "~1.0.1",
+        "defined": "~1.0.0",
+        "for-each": "~0.3.2",
+        "function-bind": "~1.1.1",
+        "glob": "~7.1.2",
+        "has": "~1.0.1",
+        "inherits": "~2.0.3",
+        "minimist": "~1.2.0",
+        "object-inspect": "~1.5.0",
+        "resolve": "~1.5.0",
+        "resumer": "~0.0.0",
+        "string.prototype.trim": "~1.1.2",
+        "through": "~2.3.8"
       },
       "dependencies": {
         "glob": {
@@ -1778,12 +1812,12 @@
           "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "minimist": {
@@ -1798,7 +1832,7 @@
           "integrity": 
"sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw==",
           "dev": true,
           "requires": {
-            "path-parse": "1.0.5"
+            "path-parse": "^1.0.5"
           }
         }
       }
@@ -1809,7 +1843,7 @@
       "integrity": "sha1-vT8d4M7YsgKnnNWsfYnYJzyGQJQ=",
       "dev": true,
       "requires": {
-        "tape": "3.6.1"
+        "tape": "^3.0.1"
       },
       "dependencies": {
         "deep-equal": {
@@ -1830,8 +1864,8 @@
           "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=",
           "dev": true,
           "requires": {
-            "inherits": "2.0.3",
-            "minimatch": "0.3.0"
+            "inherits": "2",
+            "minimatch": "0.3"
           }
         },
         "minimatch": {
@@ -1840,8 +1874,8 @@
           "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=",
           "dev": true,
           "requires": {
-            "lru-cache": "2.7.3",
-            "sigmund": "1.0.1"
+            "lru-cache": "2",
+            "sigmund": "~1.0.0"
           }
         },
         "object-inspect": {
@@ -1856,13 +1890,13 @@
           "integrity": "sha1-SJPdU+KApfWMDOswwsDrs7zVHh8=",
           "dev": true,
           "requires": {
-            "deep-equal": "0.2.2",
-            "defined": "0.0.0",
-            "glob": "3.2.11",
-            "inherits": "2.0.3",
-            "object-inspect": "0.4.0",
-            "resumer": "0.0.0",
-            "through": "2.3.8"
+            "deep-equal": "~0.2.0",
+            "defined": "~0.0.0",
+            "glob": "~3.2.9",
+            "inherits": "~2.0.1",
+            "object-inspect": "~0.4.0",
+            "resumer": "~0.0.0",
+            "through": "~2.3.4"
           }
         }
       }
@@ -1890,7 +1924,7 @@
       "resolved": 
"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz";,
       "integrity": 
"sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
       "requires": {
-        "punycode": "1.4.1"
+        "punycode": "^1.4.1"
       }
     },
     "tunnel-agent": {
@@ -1898,7 +1932,7 @@
       "resolved": 
"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz";,
       "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
       "requires": {
-        "safe-buffer": "5.1.2"
+        "safe-buffer": "^5.0.1"
       }
     },
     "tweetnacl": {
@@ -1913,7 +1947,7 @@
       "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
       "dev": true,
       "requires": {
-        "prelude-ls": "1.1.2"
+        "prelude-ls": "~1.1.2"
       }
     },
     "type-detect": {
@@ -1929,9 +1963,9 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "source-map": "0.5.7",
-        "uglify-to-browserify": "1.0.2",
-        "yargs": "3.10.0"
+        "source-map": "~0.5.1",
+        "uglify-to-browserify": "~1.0.0",
+        "yargs": "~3.10.0"
       },
       "dependencies": {
         "source-map": {
@@ -1968,12 +2002,12 @@
       "integrity": "sha1-kwyI6ZCY1iIINMNWy9mncFItkNc=",
       "dev": true,
       "requires": {
-        "async": "0.2.10",
-        "deep-equal": "1.0.1",
-        "i": "0.3.6",
-        "mkdirp": "0.5.1",
-        "ncp": "0.4.2",
-        "rimraf": "2.6.2"
+        "async": "~0.2.9",
+        "deep-equal": "*",
+        "i": "0.3.x",
+        "mkdirp": "0.x.x",
+        "ncp": "0.4.x",
+        "rimraf": "2.x.x"
       },
       "dependencies": {
         "async": {
@@ -1994,9 +2028,9 @@
       "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz";,
       "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
       "requires": {
-        "assert-plus": "1.0.0",
+        "assert-plus": "^1.0.0",
         "core-util-is": "1.0.2",
-        "extsprintf": "1.3.0"
+        "extsprintf": "^1.2.0"
       }
     },
     "vow": {
@@ -2011,10 +2045,10 @@
       "integrity": "sha1-LUxZviLivyYY3fWXq0uqkjvnIA0=",
       "dev": true,
       "requires": {
-        "glob": "7.1.2",
-        "uuid": "2.0.3",
-        "vow": "0.4.17",
-        "vow-queue": "0.4.3"
+        "glob": "^7.0.5",
+        "uuid": "^2.0.2",
+        "vow": "^0.4.7",
+        "vow-queue": "^0.4.1"
       },
       "dependencies": {
         "glob": {
@@ -2023,12 +2057,12 @@
           "integrity": 
"sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
           "dev": true,
           "requires": {
-            "fs.realpath": "1.0.0",
-            "inflight": "1.0.6",
-            "inherits": "2.0.3",
-            "minimatch": "3.0.4",
-            "once": "1.4.0",
-            "path-is-absolute": "1.0.1"
+            "fs.realpath": "^1.0.0",
+            "inflight": "^1.0.4",
+            "inherits": "2",
+            "minimatch": "^3.0.4",
+            "once": "^1.3.0",
+            "path-is-absolute": "^1.0.0"
           }
         },
         "uuid": {
@@ -2045,7 +2079,7 @@
       "integrity": 
"sha512-/poAKDTFL3zYbeQg7cl4BGcfP4sGgXKrHnRFSKj97dteUFu8oyXMwIcdwu8NSx/RmPGIuYx1Bik/y5vU4H/VKw==",
       "dev": true,
       "requires": {
-        "vow": "0.4.17"
+        "vow": "^0.4.17"
       }
     },
     "which": {
@@ -2054,7 +2088,7 @@
       "integrity": 
"sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==",
       "dev": true,
       "requires": {
-        "isexe": "2.0.0"
+        "isexe": "^2.0.0"
       }
     },
     "window-size": {
@@ -2070,13 +2104,13 @@
       "integrity": "sha1-ZLar9M0Brcrv1QCTk7HY6L7BnbA=",
       "dev": true,
       "requires": {
-        "async": "0.2.10",
-        "colors": "0.6.2",
-        "cycle": "1.0.3",
-        "eyes": "0.1.8",
-        "isstream": "0.1.2",
-        "pkginfo": "0.3.1",
-        "stack-trace": "0.0.10"
+        "async": "0.2.x",
+        "colors": "0.6.x",
+        "cycle": "1.0.x",
+        "eyes": "0.1.x",
+        "isstream": "0.1.x",
+        "pkginfo": "0.3.x",
+        "stack-trace": "0.0.x"
       },
       "dependencies": {
         "async": {
@@ -2117,7 +2151,7 @@
       "integrity": "sha1-LIaIjy1OrehQ+jjKf3Ij9yCVFuE=",
       "dev": true,
       "requires": {
-        "lodash": "3.10.1"
+        "lodash": "^3.5.0"
       },
       "dependencies": {
         "lodash": {
@@ -2135,9 +2169,9 @@
       "dev": true,
       "optional": true,
       "requires": {
-        "camelcase": "1.2.1",
-        "cliui": "2.1.0",
-        "decamelize": "1.2.0",
+        "camelcase": "^1.0.2",
+        "cliui": "^2.1.0",
+        "decamelize": "^1.0.0",
         "window-size": "0.1.0"
       }
     }
diff --git a/package.json b/package.json
index 3d8dabf..83938b7 100644
--- a/package.json
+++ b/package.json
@@ -17,6 +17,7 @@
     "database"
   ],
   "dependencies": {
+    "@types/request": "^2.47.1",
     "cloudant-follow": "~0.17.0",
     "debug": "^2.2.0",
     "errs": "^0.3.2",
@@ -44,6 +45,7 @@
     "checkcoverage": "istanbul check-coverage --statements 100 --functions 100 
--lines 100 --branches 100"
   },
   "main": "./lib/nano.js",
+  "types": "./lib/nano.d.ts",
   "engines": {
     "node": ">=6"
   },

Reply via email to