Skip to content

Latest commit

 

History

History

examples

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

README.md

Examples for node

getServerInformation

GET /

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getServerInformation().then(response => {
    console.log(response.result);
});

getActiveTasks

GET /_active_tasks

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getActiveTasks().then(response => {
  console.log(response.result);
});

getAllDbs

GET /_all_dbs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getAllDbs().then(response => {
  console.log(response.result);
});

postApiKeys

POST /_api/v2/api_keys

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postApiKeys().then(response => {
  console.log(response.result);
});

putCloudantSecurity

PUT /_api/v2/db/{db}/_security

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.putCloudantSecurityConfiguration({
  db: 'products',
  cloudant: {'nobody': ['_reader']}
}).then(response => {
  console.log(response.result);
});
// section: markdown
// The `nobody` username applies to all unauthenticated connection attempts. For example, if an application tries to read data from a database, but didn't identify itself, the task can continue only if the `nobody` user has the role `_reader`.
// section: markdown
// If instead of using Cloudant's security model for managing permissions you opt to use the Apache CouchDB `_users` database (that is using legacy credentials _and_ the `couchdb_auth_only:true` option) then be aware that the user must already exist in `_users` database before adding permissions. For information on the `_users` database, see <a href="https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-work-with-your-account#using-the-users-database-with-cloudant-nosql-db">Using the `_users` database with Cloudant</a>.

getActivityTrackerEvents

GET /_api/v2/user/activity_tracker/events

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getActivityTrackerEvents().then(response => {
  console.log(response.result);
});

postActivityTrackerEvents

POST /_api/v2/user/activity_tracker/events

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postActivityTrackerEvents({
  types: [
    CloudantV1.ActivityTrackerEvents.Constants.Types.MANAGEMENT,
    CloudantV1.ActivityTrackerEvents.Constants.Types.DATA
  ],
}).then(response => {
  console.log(response.result);
});

getCapacityThroughputInformation

GET /_api/v2/user/capacity/throughput

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getCapacityThroughputInformation().then(response => {
  console.log(response.result);
});

putCapacityThroughputConfiguration

PUT /_api/v2/user/capacity/throughput

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.putCapacityThroughputConfiguration({
  blocks: 1,
}).then(response => {
  console.log(response.result);
});

getCorsInformation

GET /_api/v2/user/config/cors

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getCorsInformation().then(response => {
  console.log(response.result);
});

putCorsConfiguration

PUT /_api/v2/user/config/cors

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.putCorsConfiguration({
  enableCors: true,
  origins: ['https://example.com']
}).then(response => {
  console.log(response.result);
});

getCurrentThroughputInformation

GET /_api/v2/user/current/throughput

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getCurrentThroughputInformation().then(response => {
  console.log(response.result);
});

getDbUpdates

GET /_db_updates

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getDbUpdates({
  feed: 'normal',
  since: 'now'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This request requires `server_admin` access.

postDbsInfo

POST /_dbs_info

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postDbsInfo({
  keys: ['products', 'users', 'orders']
}).then(response => {
  console.log(response.result);
});

getMembershipInformation

GET /_membership

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getMembershipInformation().then(response => {
  console.log(response.result);
});

deleteReplicationDocument

DELETE /_replicator/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.deleteReplicationDocument({
  docId: 'repldoc-example',
  rev: '1-00000000000000000000000000000000'
}).then(response => {
  console.log(response.result);
});

getReplicationDocument

GET /_replicator/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getReplicationDocument({
  docId: 'repldoc-example'
}).then(response => {
  console.log(response.result);
});

headReplicationDocument

HEAD /_replicator/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.headReplicationDocument({
  docId: 'repldoc-example'
}).then(response => {
  console.log(response.status);
  console.log(response.headers['ETag']);
});

putReplicationDocument

PUT /_replicator/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const sourceDb: CloudantV1.ReplicationDatabase = {
  url: 'https://~replace-with-source-host~.cloudantnosqldb.appdomain.cloud/animaldb'
};

const targetDb: CloudantV1.ReplicationDatabase = {
  auth: {
    iam: {
      'apiKey': 'a1b2c3d4e5f6f1g4h7j3k6l9m2p5q8s1t4v7x0z3' //use your own IAM API key
    }
  },
  url: 'https://~replace-with-target-host~.cloudantnosqldb.appdomain.cloud/animaldb-target'
};

const replDocument: CloudantV1.ReplicationDocument = {
  id: 'repldoc-example',
  createTarget: true,
  source: sourceDb,
  target: targetDb
}

service.putReplicationDocument({
  docId: 'repldoc-example',
  replicationDocument: replDocument
}).then(response => {
  console.log(response.result);
});

getSchedulerDocs

GET /_scheduler/docs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});

service.getSchedulerDocs({
  limit: 100,
  states: ['completed']
}).then(response => {
  console.log(response.result);
})

getSchedulerDocument

GET /_scheduler/docs/_replicator/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getSchedulerDocument({
  docId: 'repldoc-example'
}).then(response => {
  console.log(response.result);
});

getSchedulerJobs

GET /_scheduler/jobs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getSchedulerJobs({
  limit: 100
}).then(response => {
  console.log(response.result);
});

getSchedulerJob

GET /_scheduler/jobs/{job_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getSchedulerJob({
  jobId: '7b94915cd8c4a0173c77c55cd0443939+continuous'
}).then(response => {
  console.log(response.result);
});

headSchedulerJob

HEAD /_scheduler/jobs/{job_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.headSchedulerJob({
  jobId: '7b94915cd8c4a0173c77c55cd0443939+continuous'
}).then(response => {
  console.log(response.status);
});

postSearchAnalyze

POST /_search_analyze

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postSearchAnalyze({
  analyzer: 'english',
  text: 'running is fun',
}).then(response => {
  console.log(response.result);
});

getSessionInformation

GET /_session

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getSessionInformation().then(response => {
  console.log(response.result);
});
// section: markdown
// For more details on Session Authentication, see [Authentication.](#authentication)

getUpInformation

GET /_up

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getUpInformation().then(response => {
  console.log('Service is up and healthy');
  console.log(response.result);
})
  .catch(err => {
    if (err.code === 503) {
      console.error(`Service is unavailable, status code: ${err.code}, ${err.message}`);
    }
    else {
      console.error(`Issue checking service health, status: ${err.code}, ${err.message}`);
    }
  });

getUuids

GET /_uuids

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const uuidsParams: CloudantV1.GetUuidsParams = {
  count: 10
};

service.getUuids(uuidsParams).then(response => {
  console.log(response.result);
});

deleteDatabase

DELETE /{db}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.deleteDatabase({db: 'products'}).then(response => {
  console.log(response.result);
});

getDatabaseInformation

GET /{db}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getDatabaseInformation({db: 'products'}).then(response => {
  console.log(response.result);
});

headDatabase

HEAD /{db}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.headDatabase({db: 'products'}).then(response => {
  console.log(response.status);
});

postDocument

POST /{db}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const productsDoc: CloudantV1.Document = {
  _id: '1000042',
  type: 'product',
  productId: '1000042',
  brand: 'Salter',
  name: 'Digital Kitchen Scales',
  description: 'Slim Colourful Design Electronic Cooking Appliance for Home / Kitchen, Weigh up to 5kg + Aquatronic for Liquids ml + fl. oz. 15Yr Guarantee - Green',
  price: 14.99,
  image: 'assets/img/0gmsnghhew.jpg'
};

service.postDocument({
  db: 'products',
  document: productsDoc
}).then(response => {
  console.log(response.result);
});
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
import { createReadStream } from 'node:fs'

const service = CloudantV1.newInstance({});

const productsDocStream = createReadStream('products_doc.json')

service.postDocument({
  db: 'products',
  contentType: 'application/json',
  document: productsDocStream
}).then(response => {
  console.log(response.result);
});

putDatabase

PUT /{db}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.putDatabase({
  db: 'events',
  partitioned: true
}).then(response => {
  console.log(response.result);
});

postAllDocs

POST /{db}/_all_docs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postAllDocs({
  db: 'orders',
  includeDocs: true,
  startKey: 'abc',
  limit: 10
}).then(response => {
  console.log(response.result);
});
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
import { createWriteStream } from 'node:fs'

const service = CloudantV1.newInstance({});

service.postAllDocsAsStream({
  db: 'orders',
  includeDocs: true,
  startKey: 'abc',
  limit: 10
}).then(response => {
  const stream = createWriteStream("result.json");
  response.result.pipe(stream);
  response.result.on('end', () => stream.end());
});

postAllDocsQueries

POST /{db}/_all_docs/queries

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const allDocsQueries: CloudantV1.AllDocsQuery[] = [{
    keys: ['1000042', '1000043'],
  },
  {
    limit: 3,
    skip: 2
}];

service.postAllDocsQueries({
  db: 'products',
  queries: allDocsQueries
}).then(response => {
  console.log(response.result);
});

postBulkDocs

POST /{db}/_bulk_docs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const eventDoc1: CloudantV1.Document = {
  _id: 'ns1HJS13AMkK:0007241142412418284',
  type: 'event',
  userId: 'abc123',
  eventType:'addedToBasket',
  productId: '1000042',
  date: '2019-01-28T10:44:22.000Z'
}
const eventDoc2: CloudantV1.Document = {
  _id: 'H8tDIwfadxp9:0007241142412418285',
  type: 'event',
  userId: 'abc234',
  eventType: 'addedToBasket',
  productId: '1000050',
  date: '2019-01-25T20:00:00.000Z'
}

const bulkDocs: CloudantV1.BulkDocs = {  docs: [eventDoc1, eventDoc2]
}

service.postBulkDocs({
  db: 'events',
  bulkDocs: bulkDocs
}).then(response => {
  console.log(response.result);
});
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const eventDoc1: CloudantV1.Document = {
  _id: 'ns1HJS13AMkK:0007241142412418284',
  _rev: '1-00000000000000000000000000000000',
  _deleted: true,
}
const eventDoc2: CloudantV1.Document = {
  _id: 'H8tDIwfadxp9:0007241142412418285',
  _rev: '1-00000000000000000000000000000000',
  _deleted: true,
}

const bulkDocs: CloudantV1.BulkDocs = {  docs: [eventDoc1, eventDoc2]
}

service.postBulkDocs({
  db: 'events',
  bulkDocs: bulkDocs
}).then(response => {
  console.log(response.result);
});
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
import { createReadStream } from 'node:fs'

const service = CloudantV1.newInstance({});

const stream = createReadStream("upload.json");

service.postBulkDocs({
  db: 'events',
  bulkDocs: stream
}).then(response => {
  console.log(response.result);
});
// section: markdown
// Content of upload.json
// section: code
{
  "docs": [
    {
      "_id": "ns1HJS13AMkK:0007241142412418284",
      "type": "event",
      "userId": "abc123",
      "eventType": "addedToBasket",
      "productId": "1000042",
      "date": "2019-01-28T10:44:22.000Z"
    },
    {
      "_id": "H8tDIwfadxp9:0007241142412418285",
      "type": "event",
      "userId": "abc234",
      "eventType": "addedToBasket",
      "productId": "1000050",
      "date": "2019-01-25T20:00:00.000Z"
    }
  ]
}

postBulkGet

POST /{db}/_bulk_get

// section: code
const service = CloudantV1.newInstance({});

const docId = 'order00067';

const bulkGetDoc1: CloudantV1.BulkGetQueryDocument = {
  id: docId,
  rev: '3-22222222222222222222222222222222'
};
const bulkGetDoc2: CloudantV1.BulkGetQueryDocument = {
  id: docId,
  rev: '4-33333333333333333333333333333333'
};

const bulkGetDocs: CloudantV1.BulkGetQueryDocument[] = [bulkGetDoc1, bulkGetDoc2];

const postBulkGetParams: CloudantV1.PostBulkGetParams = {
  db: 'orders',
  docs: bulkGetDocs,
};

service.postBulkGet(postBulkGetParams)
  .then(response => {
    console.log(response.result);
  });
// section: code
const service = CloudantV1.newInstance({});

const bulkGetDocs: CloudantV1.BulkGetQueryDocument[] = [
  {
    id: 'order00067',
  },
];

const postBulkGetParams: CloudantV1.PostBulkGetParams = {
  db: 'orders',
  docs: bulkGetDocs,
};

service.postBulkGet(postBulkGetParams)
  .then(response => {
    console.log(response.result);
});
// section: code
const service = CloudantV1.newInstance({});

const bulkGetQueryDocuments: CloudantV1.BulkGetQueryDocument[] = [
  {
    id: 'order00058',
    attsSince: ['1-00000000000000000000000000000000']
  },
];

const postBulkGetParams: CloudantV1.PostBulkGetParams = {
  db: 'orders',
  docs: bulkGetQueryDocuments,
};

service.postBulkGet(postBulkGetParams)
  .then(response => {
    console.log(response.result);
});

postChanges

POST /{db}/_changes

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postChanges({
  db: 'orders'
}).then(response => {
  console.log(response.result);
});
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
import { createWriteStream } from 'node:fs'

const service = CloudantV1.newInstance({});

service.postChangesAsStream({
  db: 'orders'
}).then(response => {
  const stream = createWriteStream("result.json");
  response.result.pipe(stream);
  response.result.on('end', () => stream.end());
});

deleteDesignDocument

DELETE /{db}/_design/{ddoc}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.deleteDesignDocument({
  db: 'products',
  ddoc: 'appliances',
  rev: '1-00000000000000000000000000000000'
}).then(response => {
  console.log(response.result);
});

getDesignDocument

GET /{db}/_design/{ddoc}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getDesignDocument({
  db: 'products',
  ddoc: 'appliances'
}).then(response => {
  console.log(response.result);
});

headDesignDocument

HEAD /{db}/_design/{ddoc}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.headDesignDocument({
  db: 'events',
  ddoc: 'checkout'
}).then(response => {
  console.log(response.status);
  console.log(response.headers['ETag']);
});

putDesignDocument

PUT /{db}/_design/{ddoc}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const emailViewMapReduce: CloudantV1.DesignDocumentViewsMapReduce = {
  map: 'function(doc) { if(doc.email_verified === true) { emit(doc.email, [doc.name, doc.email_verified, doc.joined]); }}'
}

const userIndex: CloudantV1.SearchIndexDefinition = {
  index: 'function(doc) { index("name", doc.name); index("active", doc.active); }'
}

const designDocument: CloudantV1.DesignDocument = {
  views: {'getVerifiedEmails': emailViewMapReduce},
  indexes: {'activeUsers': userIndex}}

service.putDesignDocument({
  db: 'users',
  designDocument: designDocument,
  ddoc: 'allusers'
}).then(response => {
  console.log(response.result);
});

const productMap: CloudantV1.DesignDocumentViewsMapReduce = {
  map: 'function(doc) { emit(doc.productId, [doc.date, doc.eventType, doc.userId]); }'
}

const dateIndex: CloudantV1.SearchIndexDefinition = {
  index: 'function(doc) { index("date", doc.date); }'
}

const partitionedDesignDoc: CloudantV1.DesignDocument = {
  views: {'byProductId': productMap},
  indexes: {'findByDate': dateIndex}}

service.putDesignDocument({
  db: 'events',
  designDocument: partitionedDesignDoc,
  ddoc: 'checkout'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example creates `allusers` design document in the `users` database and `checkout` design document in the partitioned `events` database.

getDesignDocumentInformation

GET /{db}/_design/{ddoc}/_info

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getDesignDocumentInformation({
  db: 'products',
  ddoc: 'appliances'
}).then(response => {
  console.log(response.result);
});

postSearch

POST /{db}/_design/{ddoc}/_search/{index}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postSearch({
  db: 'users',
  ddoc: 'allusers',
  index: 'activeUsers',
  query: 'name:Jane* AND active:True'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `activeUsers` Cloudant Search index to exist. To create the design document with this index, see [Create or modify a design document.](#putdesigndocument)

getSearchInfo

GET /{db}/_design/{ddoc}/_search_info/{index}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getSearchInfo({
  db: 'events',
  ddoc: 'checkout',
  index: 'findByDate'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `findByDate` Cloudant Search partitioned index to exist. To create the design document with this index, see [Create or modify a design document.](#putdesigndocument)

postView

POST /{db}/_design/{ddoc}/_view/{view}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postView({
  db: 'users',
  ddoc: 'allusers',
  view: 'getVerifiedEmails'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `getVerifiedEmails` view to exist. To create the design document with this view, see [Create or modify a design document.](#putdesigndocument)

postViewQueries

POST /{db}/_design/{ddoc}/_view/{view}/queries

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const viewQueries: CloudantV1.ViewQuery[] = [
  {
    includeDocs: true,
    limit: 5
  },
  {
    descending: true,
    skip: 1
  }
];
service.postViewQueries({
  db: 'users',
  ddoc: 'allusers',
  queries: viewQueries,
  view: 'getVerifiedEmails'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `getVerifiedEmails` view to exist. To create the design document with this view, see [Create or modify a design document.](#putdesigndocument)

postDesignDocs

POST /{db}/_design_docs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postDesignDocs({
  descending: true,
  db: 'users'
}).then(response => {
  console.log(response.result);
});

postDesignDocsQueries

POST /{db}/_design_docs/queries

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const doc1: CloudantV1.AllDocsQuery = {
  descending: true,
  includeDocs: true,
  limit: 10
};
const doc2: CloudantV1.AllDocsQuery = {
  inclusiveEnd: true,
  startKey: '_design/allusers',
  skip: 1
};

const allDocsQueries: CloudantV1.AllDocsQuery[] = [doc1, doc2];

service.postDesignDocsQueries({
  db: 'users',
  queries: allDocsQueries
}).then(response => {
  console.log(response.result);
});

postExplain

POST /{db}/_explain

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const selector = {
  type: {
    "$eq": "user"
  }
};

service.postExplain({
  db: 'users',
  executionStats: true,
  limit: 10,
  selector: selector
}).then(response => {
  console.log(response.result);
});

postFind

POST /{db}/_find

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});

const selector: CloudantV1.JsonObject = {
  email_verified: {
    '$eq': true
  }
};

const sort: CloudantV1.JsonObject = {
  email: 'desc'
};

service.postFind({
  db: 'users',
  selector: selector,
  fields: ['_id', 'type', 'name', 'email'],
  sort: [sort],
  limit: 3
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `getUserByEmail` Cloudant Query "json" index to exist. To create the index, see [Create a new index on a database.](#postindex)
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});

const selector: CloudantV1.JsonObject = {
  address: {
    '$exists': true
  }
};

service.postFind({
  db: 'users',
  selector: selector,
  fields: ['_id', 'type', 'name', 'email', 'address'],
  limit: 3
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `getUserByAddress` Cloudant Query "text" index to exist. To create the index, see [Create a new index on a database.](#postindex)

getIndexesInformation

GET /{db}/_index

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getIndexesInformation({
  db: 'users'
}).then(response => {
  console.log(response.result);
});

postIndex

POST /{db}/_index

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

// Type "json" index fields require an object that maps the name of a field to a sort direction.
const indexField: CloudantV1.IndexField = {
  email: 'asc'
}

const index: CloudantV1.IndexDefinition = {
  fields: [indexField]
}

service.postIndex({
  db: 'users',
  ddoc: 'json-index',
  name: 'getUserByEmail',
  index: index,
  type: 'json'
}).then(response => {
  console.log(response.result);
});
// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

// Type "text" index fields require an object with a name and type properties for the field.
const indexField: CloudantV1.IndexField = {
  name: 'address',
  type: CloudantV1.IndexField.Constants.Type.STRING
}

const index: CloudantV1.IndexDefinition = {
  fields: [indexField]
}

service.postIndex({
  db: 'users',
  ddoc: 'text-index',
  name: 'getUserByAddress',
  index: index,
  type: 'text'
}).then(response => {
  console.log(response.result);
});

deleteIndex

DELETE /{db}/_index/_design/{ddoc}/{type}/{index}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.deleteIndex({
  db: 'users',
  ddoc: 'json-index',
  index: 'getUserByName',
  type: 'json'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example will fail if `getUserByName` index doesn't exist. To create the index, see [Create a new index on a database.](#postindex)

deleteLocalDocument

DELETE /{db}/_local/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.deleteLocalDocument({
  db: 'orders',
  docId: 'local-0007741142412418284'
}).then(response => {
  console.log(response.result);
});

getLocalDocument

GET /{db}/_local/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getLocalDocument({
  db: 'orders',
  docId: 'local-0007741142412418284'
}).then(response => {
  console.log(response.result);
});

putLocalDocument

PUT /{db}/_local/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const localDocument: CloudantV1.Document = {
  type: 'order',
  user: 'Bob Smith',
  orderId: '0007741142412418284',
  userId: 'abc123',
  total: 214.98,
  deliveryAddress: '19 Front Street, Darlington, DL5 1TY',
  delivered: 'true',
  courier: 'UPS',
  courierId: '15125425151261289',
  date: '2019-01-28T10:44:22.000Z'
}

service.putLocalDocument({
  db: 'orders',
  docId: 'local-0007741142412418284',
  document: localDocument
}).then(response => {
  console.log(response.result);
});

getPartitionInformation

GET /{db}/_partition/{partition_key}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getPartitionInformation({
  db: 'events',
  partitionKey: 'ns1HJS13AMkK'
}).then(response => {
  console.log(response.result);
});

postPartitionAllDocs

POST /{db}/_partition/{partition_key}/_all_docs

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postPartitionAllDocs({
  db: 'events',
  partitionKey: 'ns1HJS13AMkK',
  includeDocs: true
}).then(response => {
  console.log(response.result);
});

postPartitionSearch

POST /{db}/_partition/{partition_key}/_design/{ddoc}/_search/{index}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postPartitionSearch({
  db: 'events',
  partitionKey: 'ns1HJS13AMkK',
  ddoc: 'checkout',
  index: 'findByDate',
  query: 'date:[2019-01-01T12:00:00.000Z TO 2019-01-31T12:00:00.000Z]'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `findByDate` Cloudant Search partitioned index to exist. To create the design document with this index, see [Create or modify a design document.](#putdesigndocument)

postPartitionView

POST /{db}/_partition/{partition_key}/_design/{ddoc}/_view/{view}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.postPartitionView({
  db: 'events',
  ddoc: 'checkout',
  includeDocs: true,
  limit: 10,
  partitionKey: 'ns1HJS13AMkK',
  view: 'byProductId'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `byProductId` partitioned view to exist. To create the design document with this view, see [Create or modify a design document.](#putdesigndocument)

postPartitionExplain

POST /{db}/_partition/{partition_key}/_explain

postPartitionFind

POST /{db}/_partition/{partition_key}/_find

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const selector: CloudantV1.Selector = {
  userId: {'$eq': 'abc123'}
}
service.postPartitionFind({
  db: 'events',
  partitionKey: 'ns1HJS13AMkK',
  fields: ['productId', 'eventType', 'date'],
  selector: selector
}).then(response => {
  console.log(response.result);
});

postRevsDiff

POST /{db}/_revs_diff

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const revsDiff: CloudantV1.DocumentRevisions = {
  order00077: [
    "1-00000000000000000000000000000000", // missing revision
    "2-11111111111111111111111111111111", // missing revision
    "3-22222222222222222222222222222222"  // possible ancestor revision
  ]
}

service.postRevsDiff({
  db: 'orders',
  revsDiffRequest: revsDiff
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the example revisions in the POST body to be replaced with valid revisions.

getSecurity

GET /{db}/_security

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getSecurity({
  db: 'products'
}).then(response => {
  console.log(response.result);
});

putSecurity

PUT /{db}/_security

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const members: CloudantV1.SecurityObject = {
  names: ['user1', 'user2'],
  roles: ['developers']
};

service.putSecurity({
  db: 'products',
  members: members
}).then(response => {
  console.log(response.result);
});
// section: markdown
// The `nobody` username applies to all unauthenticated connection attempts. For example, if an application tries to read data from a database, but didn't identify itself, the task can continue only if the `nobody` user has the role `_reader`.
// section: markdown
// If instead of using Cloudant's security model for managing permissions you opt to use the Apache CouchDB `_users` database (that is using legacy credentials _and_ the `couchdb_auth_only:true` option) then be aware that the user must already exist in `_users` database before adding permissions. For information on the `_users` database, see <a href="https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-work-with-your-account#using-the-users-database-with-cloudant-nosql-db">Using the `_users` database with Cloudant</a>.

getShardsInformation

GET /{db}/_shards

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getShardsInformation({
  db: 'products'
}).then(response => {
  console.log(response.result);
});

getDocumentShardsInfo

GET /{db}/_shards/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getDocumentShardsInfo({
  db: 'products',
  docId: '1000042'
}).then(response => {
  console.log(response.result);
});

deleteDocument

DELETE /{db}/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';
const service = CloudantV1.newInstance({});

service.deleteDocument({
  db: 'orders',
  docId: 'order00058',
  rev: '1-00000000000000000000000000000000'
}).then(response => {
  console.log(response.result);
});

getDocument

GET /{db}/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getDocument({
  db: 'products',
  docId: '1000042'
}).then(response => {
  console.log(response.result);
});

headDocument

HEAD /{db}/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.headDocument({
  db: 'orders',
  docId: 'order00058'
}).then(response => {
  console.log(response.status);
  console.log(response.headers['ETag']);
});

putDocument

PUT /{db}/{doc_id}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const eventDoc: CloudantV1.Document = {
  type: 'event',
  userId: 'abc123',
  eventType: 'addedToBasket',
  productId: '1000042',
  date: '2019-01-28T10:44:22.000Z'
};

service.putDocument({
  db: 'events',
  docId: 'ns1HJS13AMkK:0007241142412418284',
  document: eventDoc
}).then(response => {
  console.log(response.result);
});

deleteAttachment

DELETE /{db}/{doc_id}/{attachment_name}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.deleteAttachment({
  db: 'products',
  docId: '1000042',
  attachmentName: 'product_details.txt',
  rev: '4-33333333333333333333333333333333'
}).then(response => {
  console.log(response.result);
});
// section: markdown
// This example requires the `product_details.txt` attachment in `1000042` document to exist. To create the attachment, see [Create or modify an attachment.](#putattachment)

getAttachment

GET /{db}/{doc_id}/{attachment_name}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.getAttachment({
  db: 'products',
  docId: '1000042',
  attachmentName: 'product_details.txt'
}).then(response => {
  let attachment = response.result as Readable;
  attachment.pipe(process.stdout);
});
// section: markdown
// This example requires the `product_details.txt` attachment in `1000042` document to exist. To create the attachment, see [Create or modify an attachment.](#putattachment)

headAttachment

HEAD /{db}/{doc_id}/{attachment_name}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

service.headAttachment({
  db: 'products',
  docId: '1000042',
  attachmentName: 'product_details.txt'
}).then(response => {
  console.log(response.status);
  console.log(response.headers['Content-Length']);
  console.log(response.headers['Content-Type']);
});
// section: markdown
// This example requires the `product_details.txt` attachment in `1000042` document to exist. To create the attachment, see [Create or modify an attachment.](#putattachment)

putAttachment

PUT /{db}/{doc_id}/{attachment_name}

// section: code
import { CloudantV1 } from '@ibm-cloud/cloudant';

const service = CloudantV1.newInstance({});

const stream = new Readable();
stream.push('This appliance includes...');
stream.push(null);

service.putAttachment({
  db: 'products',
  docId: '1000042',
  attachmentName: 'product_details.txt',
  attachment: stream,
  contentType: 'text/plain'
}).then(response => {
  console.log(response.result);
});