UNPKG

aws-mqtt

Version:
58 lines (47 loc) 1.84 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.signUrl = exports.signedUrl = undefined; var _awsSignatureV = require('aws-signature-v4'); var _awsSignatureV2 = _interopRequireDefault(_awsSignatureV); var _crypto = require('crypto'); var _crypto2 = _interopRequireDefault(_crypto); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var signedUrl = exports.signedUrl = function signedUrl(_ref) { var credentials = _ref.credentials, endpoint = _ref.endpoint, region = _ref.region, expires = _ref.expires; var payload = _crypto2.default.createHash('sha256').update('', 'utf8').digest('hex'); return _awsSignatureV2.default.createPresignedURL('GET', endpoint, '/mqtt', 'iotdevicegateway', payload, { key: credentials.accessKeyId, secret: credentials.secretAccessKey, sessionToken: credentials.sessionToken, protocol: 'wss', region: region, expires: expires }); }; var hasProtocol = function hasProtocol(endpoint) { return new RegExp("^wss?://").test(endpoint); }; // This method is used when you don't pass in credentials var unsignedUrl = function unsignedUrl(endpoint) { var url = '' + endpoint; return hasProtocol(url) ? url : 'wss://' + url; }; // aws parameter has shape { credentials, endpoint, region, expires } var signUrl = exports.signUrl = function signUrl(aws, callback) { // Need to refresh AWS credentials, which expire after initial creation. // For example CognitoIdentity credentials expire after an hour if (aws.credentials) { aws.credentials.get(function (err) { if (err) return callback(err); // console.log('Credentials', aws.credentials) callback(null, signedUrl(aws)); }); } else { callback(null, unsignedUrl(aws.endpoint)); } };