serverless-spy
Version:
CDK-based library for writing elegant integration tests on AWS serverless architecture and an additional web console to monitor events in real time.
64 lines (52 loc) • 1.57 kB
text/typescript
import { fromNodeProviderChain } from '@aws-sdk/credential-providers';
import { device } from 'aws-iot-device-sdk';
export type fragment = { id: string; index: number; count: number; data: any };
function createLog(debugMode: boolean) {
return (message: string, ...optionalParams: any[]) => {
if (debugMode) {
console.debug('SSPY', message, ...optionalParams);
}
};
}
function createErrorLog() {
return (message: string, ...optionalParams: any[]) => {
console.error('SSPY', message, ...optionalParams);
};
}
export async function getConnection(
debugMode: boolean,
iotEndpoint: string
): Promise<device> {
const log = createLog(debugMode);
const logError = createErrorLog();
log('Using IoT endpoint:', iotEndpoint);
if (!iotEndpoint) {
logError('No IoT endpoint could be found');
throw new Error('IoT Endpoint address not found');
}
const region = iotEndpoint.split('.')[2];
const provider = fromNodeProviderChain();
const credentials = await provider();
const connection = new device({
protocol: 'wss',
host: iotEndpoint,
region,
reconnectPeriod: 1,
accessKeyId: credentials.accessKeyId,
secretKey: credentials.secretAccessKey,
sessionToken: credentials.sessionToken,
});
connection.on('connect', () => {
log('IoT connected');
});
connection.on('error', (err) => {
logError('IoT error', err);
});
connection.on('close', () => {
log('IoT closed');
});
connection.on('reconnect', () => {
log('IoT reconnected');
});
return connection;
}