att-dhs
Version:
AT&T Developer Hosted Server Library
197 lines (171 loc) • 5.74 kB
JavaScript
/*jslint browser: true, devel: true, node: true, debug: true, todo: true, indent: 2, maxlen: 150, unparam: true*/
/*global require, exports*/
;
var restify = require('restify'),
config = require('./att.dhs.config.js').config;
/**
* @public
* @function
* createE911Id
* @summary
* Creates a new E911 Id using an <code>e911</code> scope access token and an address
* @desc
* E911 Id is required for mobile number and virtual number user for creating enhanced webrtc session.
* Use this function to create an E911 Id that can be used for creating the enhanced webrtc session
* for mobile number and virtual number users.
* This method requires an access token obtained using `E911` auth_scope and a physical address with
* these `string` fields:
*
* * First Name
* * Last Name
* * House Number
* * Street
* * Unit (optional)
* * City
* * State
* * Zip Code
* * Is Confirmed (True or False)
*
* @param {object} options
* @param {string} options.token - Access Token
* @param {object} options.address - The user's address
* @param {string} options.address.first_name - The user's first name
* @param {string} options.address.last_name - The user's last name
* @param {string} options.address.house_number - The user's house number
* @param {string} [options.address.unit] - Unit/Apt./Suite number
* @param {string} options.address.street - The user's street
* @param {string} options.address.city - The user's city
* @param {string} options.address.state - The user's state
* @param {string} options.address.zip - The user's zip code
* @param {boolean} options.is_confirmed - Confirm that the address exists (even if not found in the database)
* @param {function} options.success - The callback that handles the successful response after creating an AT&T E911 Id
* @param {function} options.error - The callback that handles the generated error.
*
* @example
* // Create E911 id using DHS
* var myDHS = require("att-dhs"),
* options = {
* token: 'token',
* address: {
* first_name: 'John',
* last_name: 'Doe',
* house_number: '1111',
* street: 'ABC Street',
* city: 'My City',
* state: 'My State',
* zip: '12345'
* },
* is_confirmed: 'false',
* success: function (result) {
* // do something
* },
* error: function (err) {
* // do something
* }
* };
*
* myDHS.createE911Id(options);
*/
function createE911Id(options) {
var envConfig,
restClient,
payload,
logger;
envConfig = config.getAppConfiguration();
logger = config.getLogger();
logger.logInfo('dhs.e911: createE911Id');
logger.logTrace('options:', options);
if (undefined === envConfig.app_key
|| undefined === envConfig.app_secret) {
throw new Error('DHS not configured. ' +
'Please invoke ATT.dhs.configure with your app_key and app_secret');
}
if (undefined === options
|| 0 === Object.keys(options).length) {
throw new Error('No options provided');
}
if (undefined === options.token) {
throw new Error('No access token provided');
}
if (undefined === options.address) {
throw new Error('No address provided');
}
if ('object' !== typeof options.address
|| 0 === Object.keys(options.address).length) {
throw new Error('Invalid address provided');
}
if (undefined === options.address.first_name) {
throw new Error('No first name provided');
}
if (undefined === options.address.last_name) {
throw new Error('No last name provided');
}
if (undefined === options.address.house_number) {
throw new Error('No house number provided');
}
if (undefined === options.address.street) {
throw new Error('No street provided');
}
if (undefined === options.address.city) {
throw new Error('No city provided');
}
if (undefined === options.address.state) {
throw new Error('No state provided');
}
if (undefined === options.address.zip) {
throw new Error('No zip code provided');
}
if (undefined === options.is_confirmed) {
options.is_confirmed = "false";
logger.logInfo('No is_confirmed provided, setting to false');
}
if (undefined === options.success) {
throw new Error('No success callback provided');
}
if (undefined === options.error) {
throw new Error('No error callback provided');
}
restClient = restify.createJsonClient({
url: envConfig.api_endpoint,
userAgent: envConfig.info.dhs_name,
accept: 'application/json',
headers: {
Authorization: 'bearer ' + options.token
},
rejectUnauthorized: false
});
payload = {
e911Context: {
address: {
name: options.address.first_name + ' ' + options.address.last_name,
houseNumber: options.address.house_number,
houseNumExt: options.address.house_number_ext,
streetDir: options.address.street_dir,
streetDirSuffix: options.address.street_dir_suffix,
street: options.address.street,
streetNameSuffix: options.address.street_suffix,
unit: options.address.unit,
city: options.address.city,
state: options.address.state,
zip: options.address.zip,
addressAdditional: options.address.address_additional,
comments: options.address.comments
},
isAddressConfirmed: options.is_confirmed
}
};
logger.logTrace('payload:', payload);
restClient.post(envConfig.info.e911id_uri, payload,
function (error, req, res, result) {
if (undefined !== error &&
null !== error) {
logger.logError('error:', error);
options.error(error);
return;
}
options.success(result);
});
}
exports.e911 = {
createE911Id: createE911Id
};