aws-mqtt
Version:
AWS IoT MQTT broker client
44 lines (39 loc) • 1.28 kB
JavaScript
import v4 from 'aws-signature-v4'
import crypto from 'crypto'
export const signedUrl = ({ credentials, endpoint, region, expires }) => {
const payload = crypto
.createHash('sha256')
.update('', 'utf8')
.digest('hex')
return v4.createPresignedURL('GET', endpoint, '/mqtt', 'iotdevicegateway', payload, {
key: credentials.accessKeyId,
secret: credentials.secretAccessKey,
sessionToken: credentials.sessionToken,
protocol: 'wss',
region: region,
expires: expires,
})
}
const hasProtocol = (endpoint) =>
new RegExp("^wss?://").test(endpoint)
// This method is used when you don't pass in credentials
const unsignedUrl = (endpoint) => {
const url = `${endpoint}`
return hasProtocol(url)
? url
: `wss://${url}`
}
// aws parameter has shape { credentials, endpoint, region, expires }
export const 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((err) => {
if (err) return callback(err)
// console.log('Credentials', aws.credentials)
callback(null, signedUrl(aws))
})
} else {
callback(null, unsignedUrl(aws.endpoint))
}
}