servicemeow

A Javascript client for the ServiceNOW REST API.

Usage no npm install needed!

<script type="module">
  import servicemeow from 'https://cdn.skypack.dev/servicemeow';
</script>

README

CI Coverage Status

ServiceMeow

A Node.js client for the ServiceNOW REST API.

Installation

Run npm install servicemeow to install the package.

Basic Usage

const ServiceMeow = require('servicemeow');

const sm = new ServiceMeow('https://<INSTANCE>.service-now.com','<USERNAME>','<PASSWORD>');

const record = await sm.getSingleRecord('<TABLE_NAME>', <SYS_ID>);

Supported Actions

// returns JSON of record
getSingleRecord('<TABLE_NAME>', '<SYS_ID>');

// returns sys_id of created record
createRecord('<TABLE_NAME>', { /* <JSON_RECORD_BODY> */ });

// returns true if success, false otherwise
deleteSingleRecord('<TABLE_NAME>', '<SYS_ID_OF_RECORD_TO_BE_DELETED>');

// returns sys_id of updated record
updateSingleRecord('<TABLE_NAME>', { /* <JSON_RECORD_BODY> */ }, '<SYS_ID_OF_RECORD_TO_BE_DELETED>');

// Returns JSON of list of record(s). Use query builder for building advanced serviceNOW  encoded query
getRecords('<TABLE_NAME>', '<ENCODED_QUERY>');

// returns count of records matching given query
getRecordCount('<TABLE_NAME>', '<ENCODED_QUERY>');

Example Usage of Above Actions

const record = await sm.getSingleRecord('<TABLE_NAME>', '<SYS_ID>');

const id = await sm.createRecord('<TABLE_NAME>', {'endpoint': 'published'});

const deleted = await sm.deleteSingleRecord('<TABLE_NAME>', '<SYS_ID>');

const id = await servicenowClient.updateSingleRecord('<TABLE_NAME>', { /* <JSON_RECORD_BODY> */ }, '<SYS_ID>');

// Consider using QueryBuilder to create encoded queries
const records = await servicenowClient.getRecords('<TABLE_NAME>', '<ENCODED_QUERY>');

const count = await sm.getRecordCount('<TABLE_NAME>', '<ENCODED_QUERY>');

Query Builder Example Usage

const { QueryBuilder } = require('servicemeow');
const queryBuilder = new QueryBuilder();

// Less than '<'
const query = queryBuilder.field('sys_created_on').lessThan('2019-02-15 14:30:18');

// Less than using Date object
const query = queryBuilder.field('sys_created_on').lessThan(new Date());

// Greater than using Date object
const query = queryBuilder.field('sys_created_on').lessThan(new Date());


// compound query using and, lessThan, greaterThan
const query = queryBuilder.field('number').greaterThan('S').and().field('sys_created_on').lessThan(new Date());

// Between two dates, numbers, Strings 
const query = queryBuilder.field('sys_created_on').between('2015-02-15 14:30:18', '2019-02-18 14:30:18');
const query = queryBuilder.field('risk_score').between(47, 52);
const query = queryBuilder.field('number').between('A', 'Z');

// Empty String query
const query = queryBuilder.field('description').isEmptyString();

// Example of 'IN' operator
const query = queryBuilder.field('number').isOneOf(['INC0010122','INC0010120']);

// Is anything operator
const query = queryBuilder.field('number').isAnything();

// Contains operator
const query = queryBuilder.field('number').contains('<YOUR_STRING>');

// Order ascending/descending
const query = queryBuilder.field('number').contains('<YOUR_STRING>').or().contains('<OTHER_STRING>').orderAscending();

// Multiple conditions on a single field
const query = queryBuilder.field('number').contains('<YOUR_STRING>').and().contains('<OTHER_STRING>').orderDescending();

// Ends with operator
const query = queryBuilder.field('number').endsWith('<YOUR_STRING>');

// Does not contain
const query = queryBuilder.field('number').doesNotContain('<YOUR_STRING>');

// equals
const query = queryBuilder.field('number').equals('<YOUR_STRING>/<ARRAY>');

// isEmpty
const query = queryBuilder.field('number').isEmpty();

// isNotEmpty
const query = queryBuilder.field('number').isNotEmpty();

Acknowledgements

ServiceMeow was forked from ServiceNOW-Client by Kaushal Shah.