@alwaysai/device-agent 2.1.0-1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/lib/cloud-connection/bootstrap-agent.d.ts +16 -0
  2. package/lib/cloud-connection/bootstrap-agent.d.ts.map +1 -0
  3. package/lib/cloud-connection/{device-agent.js → bootstrap-agent.js} +47 -24
  4. package/lib/cloud-connection/bootstrap-agent.js.map +1 -0
  5. package/lib/cloud-connection/connection-manager.d.ts +18 -6
  6. package/lib/cloud-connection/connection-manager.d.ts.map +1 -1
  7. package/lib/cloud-connection/connection-manager.js +108 -41
  8. package/lib/cloud-connection/connection-manager.js.map +1 -1
  9. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
  10. package/lib/cloud-connection/device-agent-cloud-connection.js +10 -4
  11. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
  12. package/lib/cloud-connection/passthrough-handler.d.ts.map +1 -1
  13. package/lib/cloud-connection/passthrough-handler.js +50 -46
  14. package/lib/cloud-connection/passthrough-handler.js.map +1 -1
  15. package/lib/cloud-connection/publisher.d.ts +1 -1
  16. package/lib/cloud-connection/publisher.d.ts.map +1 -1
  17. package/lib/cloud-connection/publisher.js +22 -20
  18. package/lib/cloud-connection/publisher.js.map +1 -1
  19. package/package.json +2 -2
  20. package/src/cloud-connection/{device-agent.ts → bootstrap-agent.ts} +70 -39
  21. package/src/cloud-connection/connection-manager.ts +180 -54
  22. package/src/cloud-connection/device-agent-cloud-connection.ts +11 -9
  23. package/src/cloud-connection/passthrough-handler.ts +61 -56
  24. package/src/cloud-connection/publisher.ts +30 -28
  25. package/lib/cloud-connection/bootstrap-provision.d.ts +0 -2
  26. package/lib/cloud-connection/bootstrap-provision.d.ts.map +0 -1
  27. package/lib/cloud-connection/bootstrap-provision.js +0 -35
  28. package/lib/cloud-connection/bootstrap-provision.js.map +0 -1
  29. package/lib/cloud-connection/device-agent.d.ts +0 -21
  30. package/lib/cloud-connection/device-agent.d.ts.map +0 -1
  31. package/lib/cloud-connection/device-agent.js.map +0 -1
  32. package/lib/util/clean-certs.d.ts +0 -2
  33. package/lib/util/clean-certs.d.ts.map +0 -1
  34. package/lib/util/clean-certs.js +0 -17
  35. package/lib/util/clean-certs.js.map +0 -1
  36. package/src/cloud-connection/bootstrap-provision.ts +0 -43
  37. package/src/util/clean-certs.ts +0 -16
@@ -0,0 +1,16 @@
1
+ import { MessageHandler } from './message-dispatcher';
2
+ export declare class BootstrapAgent implements MessageHandler {
3
+ private connectionManager;
4
+ private publisher;
5
+ private readonly clientId;
6
+ private readonly host;
7
+ private readonly port;
8
+ constructor();
9
+ hardwareId: () => Promise<string>;
10
+ deviceId: string;
11
+ deviceType: string;
12
+ publishMessage(topic: string, message: string): void;
13
+ handle(payload: any, topic: string): Promise<void>;
14
+ bootstrapProvision(): Promise<void>;
15
+ }
16
+ //# sourceMappingURL=bootstrap-agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-agent.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/bootstrap-agent.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAsBtD,qBAAa,cAAe,YAAW,cAAc;IACnD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;;IAoBtB,UAAU,wBAAwD;IAClE,QAAQ,SAAmB;IAC3B,UAAU,SAAgB;IAE1B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAIvC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM;IAwDlC,kBAAkB;CA6BhC"}
@@ -1,43 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.BootstrapAgent = exports.DeviceAgent = void 0;
4
- // eslint-disable-next-line
5
- const awsIot = require('aws-iot-device-sdk');
3
+ exports.BootstrapAgent = void 0;
6
4
  const app_1 = require("alwaysai/lib/core/app");
7
5
  const infrastructure_1 = require("alwaysai/lib/infrastructure");
8
6
  const util_1 = require("alwaysai/lib/util");
9
7
  const device_certificate_1 = require("../infrastructure/device-certificate");
10
8
  const get_device_id_1 = require("../util/get-device-id");
11
9
  const logger_1 = require("../util/logger");
10
+ const connection_manager_1 = require("./connection-manager");
11
+ const publisher_1 = require("./publisher");
12
+ const device_certificate_2 = require("../infrastructure/device-certificate");
13
+ const urls_1 = require("../infrastructure/urls");
14
+ ``;
15
+ const directories_1 = require("../util/directories");
12
16
  // eslint-disable-next-line
13
17
  const process = require('process');
14
- class DeviceAgent {
15
- constructor(config) {
16
- this.deviceType = 'aai-device';
17
- this.device = awsIot.device;
18
+ class BootstrapAgent {
19
+ constructor() {
20
+ this.clientId = (0, get_device_id_1.getDeviceUuid)();
21
+ this.host = (0, urls_1.getIoTCoreEndpointUrl)();
22
+ this.port = 8883;
18
23
  this.hardwareId = async () => await (0, app_1.getTargetHardwareUuid)((0, util_1.JsSpawner)());
19
24
  this.deviceId = (0, get_device_id_1.getDeviceUuid)();
20
- this.device = awsIot.device(config);
25
+ this.deviceType = 'aai-device';
26
+ // Initialize & setup the connection
27
+ const bootstrapAgentConfig = {
28
+ clientId: this.clientId,
29
+ host: this.host,
30
+ port: this.port,
31
+ keyPath: (0, device_certificate_2.getBootstrapPrivateKeyFilePath)(),
32
+ certPath: (0, device_certificate_2.getBootstrapCertificateFilePath)(),
33
+ caPath: directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH
34
+ };
35
+ this.connectionManager = new connection_manager_1.ConnectionManager(bootstrapAgentConfig);
36
+ this.publisher = new publisher_1.Publisher(this.connectionManager, bootstrapAgentConfig.clientId);
21
37
  }
22
38
  publishMessage(topic, message) {
23
- this.device.publish(topic, message);
24
- }
25
- }
26
- exports.DeviceAgent = DeviceAgent;
27
- class BootstrapAgent extends DeviceAgent {
28
- async subscribeToAllTopics() {
29
- const AWS_CERTIFICATE_ACCEPT_TOPIC = '$aws/certificates/create/json/accepted';
30
- const PROVISIONING_ACCEPTED_TOPIC = '$aws/provisioning-templates/FleetProvisionTemplate/provision/json/accepted';
31
- const topics = [AWS_CERTIFICATE_ACCEPT_TOPIC, PROVISIONING_ACCEPTED_TOPIC];
32
- const resp = this.device.subscribe(topics, function (err, granted) {
33
- logger_1.logger.debug(`Bootstrap Agent: ${JSON.stringify(granted, null, 2)}`);
34
- });
39
+ this.publisher.publish(topic, message);
35
40
  }
36
- async handleAwsCertificateTopics(topic, payload) {
41
+ async handle(payload, topic) {
37
42
  switch (topic) {
38
43
  case '$aws/certificates/create/json/accepted': {
39
- logger_1.logger.debug(`Received Certs: ${JSON.stringify(JSON.parse(payload), null, 2)}`);
40
- const { certificateId, certificatePem, privateKey, certificateOwnershipToken } = JSON.parse(payload);
44
+ logger_1.logger.debug(`Received Certs: ${JSON.stringify(payload, null, 2)}`);
45
+ const { certificateId, certificatePem, privateKey, certificateOwnershipToken } = payload;
41
46
  const certSpawner = (0, util_1.JsSpawner)({ path: infrastructure_1.LOCAL_CERT_AND_KEY_DIR });
42
47
  await certSpawner.writeFile(infrastructure_1.DEVICE_CERTIFICATE_FILE_NAME, certificatePem);
43
48
  await certSpawner.writeFile(infrastructure_1.DEVICE_PRIVATE_KEY_FILE_NAME, privateKey);
@@ -63,6 +68,24 @@ class BootstrapAgent extends DeviceAgent {
63
68
  }
64
69
  }
65
70
  }
71
+ async bootstrapProvision() {
72
+ const rmBootstrapCertsAndClose = async () => {
73
+ const deviceCertificates = new infrastructure_1.LocalDeviceCertificates();
74
+ const spawner = (0, util_1.JsSpawner)();
75
+ await spawner.rimraf((0, device_certificate_1.getBootstrapCertificateDirectoryPath)());
76
+ await spawner.rimraf(deviceCertificates.getCertificateDirectoryPath());
77
+ logger_1.logger.error('Could not provision device. Try again.');
78
+ process.exit(1);
79
+ };
80
+ setTimeout(rmBootstrapCertsAndClose, 60000);
81
+ this.connectionManager.initConnectionHandlers(() => {
82
+ logger_1.logger.info('Your device is being provisioned');
83
+ });
84
+ await this.connectionManager.waitForConnection();
85
+ this.connectionManager.registerHandler('$aws/certificates/create/json/accepted', this);
86
+ this.connectionManager.registerHandler('$aws/provisioning-templates/FleetProvisionTemplate/provision/json/accepted', this);
87
+ this.publishMessage('$aws/certificates/create/json', '{}');
88
+ }
66
89
  }
67
90
  exports.BootstrapAgent = BootstrapAgent;
68
- //# sourceMappingURL=device-agent.js.map
91
+ //# sourceMappingURL=bootstrap-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap-agent.js","sourceRoot":"","sources":["../../src/cloud-connection/bootstrap-agent.ts"],"names":[],"mappings":"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"}
@@ -1,19 +1,31 @@
1
+ import { mqtt5 } from 'aws-iot-device-sdk-v2';
1
2
  import { MessageDispatcher, MessageHandler } from './message-dispatcher';
3
+ export interface DeviceAgentConfigType {
4
+ clientId: string;
5
+ host: string;
6
+ port: number;
7
+ keyPath?: string;
8
+ certPath?: string;
9
+ caPath?: string;
10
+ }
2
11
  export declare class ConnectionManager extends MessageDispatcher<any> {
3
12
  private clientId;
4
13
  private host;
5
14
  private port;
6
- private device;
15
+ private config;
16
+ private client;
7
17
  private subscribedTopics;
8
18
  private connected;
9
- constructor(clientId: string, host: string, port: number);
10
- getIoTDevice(): awsIot.device;
19
+ readonly qos: mqtt5.QoS;
20
+ constructor(deviceAgentConfig: DeviceAgentConfigType);
21
+ getIoTDevice(): mqtt5.Mqtt5Client;
11
22
  isConnected(): boolean;
12
23
  registerHandler(topic: string, handler: MessageHandler): void;
13
- disconnect(): void;
14
- subscribe(topic: string): void;
15
- unsubscribe(topic: string): void;
24
+ disconnect(): Promise<void>;
25
+ subscribe(topic: string): Promise<void>;
26
+ unsubscribe(topic: string): Promise<void>;
16
27
  initConnectionHandlers(connectCallback: () => void): void;
28
+ waitForConnection(timeoutMs?: number): Promise<void>;
17
29
  private logConnectionInfo;
18
30
  }
19
31
  //# sourceMappingURL=connection-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIzE,qBAAa,iBAAkB,SAAQ,iBAAiB,CAAC,GAAG,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,SAAS,CAAS;gBAEd,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAgBjD,YAAY;IAIZ,WAAW,IAAI,OAAO;IAItB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAKtD,UAAU,IAAI,IAAI;IAKlB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQhC,sBAAsB,CAAC,eAAe,EAAE,MAAM,IAAI,GAAG,IAAI;YAiDlD,iBAAiB;CAoDhC"}
1
+ {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAO,MAAM,uBAAuB,CAAC;AAUnD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAMzE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,iBAAkB,SAAQ,iBAAiB,CAAC,GAAG,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,SAAS,CAAS;IAC1B,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;gBAEZ,iBAAiB,EAAE,qBAAqB;IAgC7C,YAAY;IAIZ,WAAW,IAAI,OAAO;IAItB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAKhD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgCvC,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C,sBAAsB,CAAC,eAAe,EAAE,MAAM,IAAI,GAAG,IAAI;IAwFzD,iBAAiB,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;YA4B5C,iBAAiB;CAoDhC"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectionManager = void 0;
4
- const awsIot = require("aws-iot-device-sdk");
4
+ const aws_iot_device_sdk_v2_1 = require("aws-iot-device-sdk-v2");
5
5
  const infrastructure_1 = require("alwaysai/lib/infrastructure");
6
6
  const directories_1 = require("../util/directories");
7
7
  const util_1 = require("alwaysai/lib/util");
@@ -9,88 +9,155 @@ const logger_1 = require("../util/logger");
9
9
  const util_2 = require("util");
10
10
  const child_process_1 = require("child_process");
11
11
  const message_dispatcher_1 = require("./message-dispatcher");
12
+ const events_1 = require("events");
12
13
  const exec_promise = (0, util_2.promisify)(child_process_1.exec);
13
14
  class ConnectionManager extends message_dispatcher_1.MessageDispatcher {
14
- constructor(clientId, host, port) {
15
+ constructor(deviceAgentConfig) {
15
16
  super();
16
17
  this.subscribedTopics = new Set();
17
18
  this.connected = false;
18
- this.clientId = clientId;
19
- this.host = host;
20
- this.port = port;
21
- this.device = awsIot.device({
22
- keyPath: infrastructure_1.DEVICE_PRIVATE_KEY_FILE_PATH,
23
- certPath: infrastructure_1.DEVICE_CERTIFICATE_FILE_PATH,
24
- caPath: directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH,
19
+ // Use config values if provided, otherwise use defaults
20
+ this.clientId = deviceAgentConfig.clientId;
21
+ this.host = deviceAgentConfig.host;
22
+ this.port = deviceAgentConfig.port;
23
+ this.qos = aws_iot_device_sdk_v2_1.mqtt5.QoS.AtLeastOnce;
24
+ const certPath = deviceAgentConfig.certPath || infrastructure_1.DEVICE_CERTIFICATE_FILE_PATH;
25
+ const keyPath = deviceAgentConfig.keyPath || infrastructure_1.DEVICE_PRIVATE_KEY_FILE_PATH;
26
+ const caPath = deviceAgentConfig.caPath || directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH;
27
+ const builder = aws_iot_device_sdk_v2_1.iot.AwsIotMqtt5ClientConfigBuilder.newDirectMqttBuilderWithMtlsFromPath(this.host, certPath, keyPath);
28
+ builder.withConnectProperties({
25
29
  clientId: this.clientId,
26
- host: this.host,
27
- port: this.port,
28
- keepalive: 10 // time before re-connect attempt on dropped connection, default is 400 seconds
30
+ keepAliveIntervalSeconds: 10
29
31
  });
32
+ builder.withCertificateAuthorityFromPath(undefined, caPath);
33
+ this.config = builder.build();
34
+ this.client = new aws_iot_device_sdk_v2_1.mqtt5.Mqtt5Client(this.config);
35
+ this.client.start();
30
36
  }
31
37
  getIoTDevice() {
32
- return this.device;
38
+ return this.client;
33
39
  }
34
40
  isConnected() {
35
41
  return this.connected;
36
42
  }
37
43
  registerHandler(topic, handler) {
38
44
  super.registerHandler(topic, handler);
39
- this.subscribe(topic);
45
+ void this.subscribe(topic);
40
46
  }
41
- disconnect() {
42
- this.device.end();
43
- logger_1.logger.debug(`Device Agent has been disconnected from the AWS IoT Core.`);
47
+ async disconnect() {
48
+ const stopped = (0, events_1.once)(this.client, aws_iot_device_sdk_v2_1.mqtt5.Mqtt5Client.STOPPED);
49
+ this.client.stop();
50
+ await stopped;
51
+ logger_1.logger.info(`Device Agent has been disconnected from the AWS IoT Core.`);
44
52
  }
45
- subscribe(topic) {
53
+ async subscribe(topic) {
46
54
  if (!this.subscribedTopics.has(topic)) {
47
- this.device.subscribe(topic);
48
- this.subscribedTopics.add(topic);
49
- logger_1.logger.debug(`Subscribed to topic: ${topic}`);
55
+ try {
56
+ const suback = await this.client.subscribe({
57
+ subscriptions: [{ qos: aws_iot_device_sdk_v2_1.mqtt5.QoS.AtLeastOnce, topicFilter: topic }]
58
+ });
59
+ this.subscribedTopics.add(topic);
60
+ logger_1.logger.debug(`Subscribed to topic: ${topic}, result: ${JSON.stringify(suback)}`);
61
+ // Based on documentation here: https://docs.oasis-open.org/mqtt/mqtt/v5.0/os/mqtt-v5.0-os.html#_Toc3901178
62
+ suback.reasonCodes.forEach((code, index) => {
63
+ if ([0, 1, 2].includes(code)) {
64
+ logger_1.logger.debug(`SUBACK success for topic index ${index}: reason code ${code}`);
65
+ }
66
+ else {
67
+ logger_1.logger.error(`SUBACK error for topic index ${index}: unexpected reason code ${code}`);
68
+ }
69
+ });
70
+ }
71
+ catch (error) {
72
+ logger_1.logger.error(`Failed to subscribe to topic: ${topic}. Error: ${(0, util_1.stringifyError)(error)}`);
73
+ }
50
74
  }
51
75
  }
52
- unsubscribe(topic) {
76
+ async unsubscribe(topic) {
53
77
  if (this.subscribedTopics.has(topic)) {
54
- this.device.unsubscribe(topic);
78
+ const unsuback = await this.client.unsubscribe({
79
+ topicFilters: [topic]
80
+ });
81
+ logger_1.logger.debug(`Unsubscribed from topic: ${topic}, result: ${JSON.stringify(unsuback)}`);
55
82
  this.subscribedTopics.delete(topic);
56
- logger_1.logger.debug(`Unsubscribed from topic: ${topic}`);
57
83
  }
58
84
  }
59
85
  initConnectionHandlers(connectCallback) {
60
- this.device.on('connect', (connack) => {
86
+ this.client.on('attemptingConnect', () => {
87
+ logger_1.logger.debug(`Device Agent is attempting connection`);
88
+ });
89
+ this.client.on('connectionSuccess', (eventData) => {
61
90
  logger_1.logger.info('Device Agent has connected to the cloud.');
91
+ logger_1.logger.debug(`Connack: ${JSON.stringify(eventData.connack)}`);
92
+ logger_1.logger.debug(`Settings: ${JSON.stringify(eventData.settings)}`);
62
93
  this.connected = true;
63
94
  connectCallback();
64
95
  });
65
- this.device.on('disconnect', () => {
66
- logger_1.logger.warn('Device Agent has been disconnected from the cloud');
96
+ this.client.on('disconnection', (eventData) => {
97
+ logger_1.logger.info('Device Agent has been disconnected from the cloud');
98
+ logger_1.logger.info(`Disconnection event: ${eventData.error.toString()}`);
99
+ if (eventData.disconnect !== undefined) {
100
+ logger_1.logger.debug('Disconnect packet: ' + JSON.stringify(eventData.disconnect));
101
+ }
67
102
  this.connected = false;
68
103
  });
69
- this.device.on('reconnect', () => {
70
- logger_1.logger.info(`Device Agent attempting to re-connect ${new Date().toLocaleString()}`);
71
- });
72
- this.device.on('error', function (e) {
73
- logger_1.logger.error(`Error connecting to the AWS IoT Core! Error:\n${(0, util_1.stringifyError)(e)}`);
104
+ this.client.on('connectionFailure', (eventData) => {
105
+ logger_1.logger.error(`Error connecting to the AWS IoT Core! Disconnection event: ${eventData.error.toString()}`);
106
+ if (eventData.connack) {
107
+ logger_1.logger.debug('Disconnect packet: ' + JSON.stringify(eventData.connack));
108
+ }
74
109
  this.connected = false;
75
110
  });
76
- this.device.on('close', () => {
77
- logger_1.logger.warn('Device Agent AWS IoT Core connection closed.');
111
+ this.client.on('error', (error) => {
112
+ logger_1.logger.error(`Error connecting to the AWS IoT Core! Error:\n${(0, util_1.stringifyError)(error)}`);
78
113
  this.connected = false;
79
114
  });
80
- this.device.on('offline', () => {
81
- logger_1.logger.warn(`Device Agent is offline ${new Date().toLocaleString()}`);
115
+ this.client.on('stopped', () => {
116
+ logger_1.logger.warn(`Device Agent has stopped ${new Date().toLocaleString()}`);
82
117
  void this.logConnectionInfo();
83
118
  this.connected = false;
84
119
  });
85
- this.device.on('message', async (topic, payload) => {
86
- logger_1.logger.debug(`Message received on topic: ${topic}:\n${payload.toString()}`);
120
+ this.client.on('messageReceived', (eventData) => {
121
+ const topic = eventData.message.topicName;
122
+ const payloadBuffer = eventData.message.payload;
87
123
  try {
88
- const jsonPacket = JSON.parse(payload);
89
- this.dispatch(topic, jsonPacket);
124
+ const payloadString = payloadBuffer
125
+ ? Buffer.from(new Uint8Array(payloadBuffer)).toString('utf-8')
126
+ : null;
127
+ logger_1.logger.debug(`Message received on topic: ${topic}:\n${payloadString}`);
128
+ if (payloadString) {
129
+ const parsed = JSON.parse(payloadString);
130
+ this.dispatch(eventData.message.topicName, parsed);
131
+ }
132
+ else {
133
+ logger_1.logger.warn(`Empty payload received on topic: ${topic}`);
134
+ }
90
135
  }
91
136
  catch (e) {
92
- logger_1.logger.error(`Error parsing message! Error:\n${(0, util_1.stringifyError)(e)}`);
137
+ logger_1.logger.error(`Error parsing message on topic ${eventData.message.topicName}!:\n${(0, util_1.stringifyError)(e)}`);
138
+ }
139
+ });
140
+ }
141
+ waitForConnection(timeoutMs = 10000) {
142
+ return new Promise((resolve, reject) => {
143
+ if (this.connected) {
144
+ return resolve(); // already connected
93
145
  }
146
+ const timeout = setTimeout(() => {
147
+ reject(new Error('Timed out waiting for MQTT connection'));
148
+ }, timeoutMs);
149
+ this.client.on('connectionSuccess', () => {
150
+ clearTimeout(timeout);
151
+ this.connected = true;
152
+ resolve();
153
+ });
154
+ this.client.on('disconnection', (event) => {
155
+ const errorString = event.error
156
+ ? event.error.toString()
157
+ : 'Unknown reason';
158
+ logger_1.logger.warn(`Disconnected while waiting for connection: ${errorString}`);
159
+ reject(new Error(`Disconnected: ${errorString}`));
160
+ });
94
161
  });
95
162
  }
96
163
  async logConnectionInfo() {
@@ -1 +1 @@
1
- {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"device-agent-cloud-connection.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAA+B,MAAM,kBAAkB,CAAC;AAO9E,qBAAa,0BAA0B;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACS;;IAsGtC,WAAW,IAAI,MAAM;IAIrB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIrC,IAAI;IAUJ,iBAAiB;IAMjB,UAAU,CAAC,SAAS,EAAE,MAAM;IAM5B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;CAGpD;AAED,wBAAsB,4BAA4B,kBA2BjD"}
1
+ {"version":3,"file":"device-agent-cloud-connection.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAA+B,MAAM,kBAAkB,CAAC;AAQ9E,qBAAa,0BAA0B;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACS;;IAuGtC,WAAW,IAAI,MAAM;IAIrB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIrC,IAAI;IAUJ,iBAAiB;IAMjB,UAAU,CAAC,SAAS,EAAE,MAAM;IAM5B,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;CAGpD;AAED,wBAAsB,4BAA4B,kBA4BjD"}
@@ -13,7 +13,6 @@ const check_for_updates_1 = require("../util/check-for-updates");
13
13
  const get_device_id_1 = require("../util/get-device-id");
14
14
  const logger_1 = require("../util/logger");
15
15
  const sleep_1 = require("../util/sleep");
16
- const bootstrap_provision_1 = require("./bootstrap-provision");
17
16
  const live_updates_handler_1 = require("./live-updates-handler");
18
17
  const passthrough_handler_1 = require("./passthrough-handler");
19
18
  const publisher_1 = require("./publisher");
@@ -22,6 +21,7 @@ const job_handler_1 = require("../jobs/job-handler");
22
21
  const transaction_manager_1 = require("./transaction-manager");
23
22
  const connection_manager_1 = require("./connection-manager");
24
23
  const device_agent_message_handler_1 = require("./device-agent-message-handler");
24
+ const bootstrap_agent_1 = require("./bootstrap-agent");
25
25
  class DeviceAgentCloudConnection {
26
26
  constructor() {
27
27
  this.clientId = (0, get_device_id_1.getDeviceUuid)();
@@ -30,7 +30,12 @@ class DeviceAgentCloudConnection {
30
30
  this.toDeviceTopic = (0, device_agent_schemas_1.getToDeviceTopic)(this.clientId);
31
31
  this.secureTunnelHandler = secure_tunneling_1.SecureTunnelHandlerSingleton.getInstance();
32
32
  // Initialize & setup the connection
33
- this.connectionManager = new connection_manager_1.ConnectionManager(this.clientId, this.host, this.port);
33
+ const deviceAgentConfig = {
34
+ clientId: this.clientId,
35
+ host: this.host,
36
+ port: this.port
37
+ };
38
+ this.connectionManager = new connection_manager_1.ConnectionManager(deviceAgentConfig);
34
39
  this.publisher = new publisher_1.Publisher(this.connectionManager, this.clientId);
35
40
  this.shadowHandler = new shadow_handler_1.ShadowHandler(this.clientId, this.publisher);
36
41
  this.liveUpdatesHandler = new live_updates_handler_1.LiveUpdatesHandler();
@@ -87,7 +92,7 @@ class DeviceAgentCloudConnection {
87
92
  // lost since we aren't waiting for responses so sleep for a short time to
88
93
  // receive them
89
94
  await (0, sleep_1.default)(1000);
90
- this.connectionManager.disconnect();
95
+ await this.connectionManager.disconnect();
91
96
  }
92
97
  // CLI methods
93
98
  async waitForConnection() {
@@ -108,7 +113,8 @@ exports.DeviceAgentCloudConnection = DeviceAgentCloudConnection;
108
113
  async function runDeviceAgentCloudInterface() {
109
114
  logger_1.logger.info(`Starting alwaysAI Device Agent v${await (0, check_for_updates_1.getDeviceAgentVersion)()}`);
110
115
  if ((0, fs_1.existsSync)((0, device_certificate_1.getBootstrapPrivateKeyFilePath)())) {
111
- await (0, bootstrap_provision_1.bootstrapProvision)();
116
+ const bootstrapAgent = new bootstrap_agent_1.BootstrapAgent();
117
+ await bootstrapAgent.bootstrapProvision();
112
118
  return;
113
119
  }
114
120
  const filesAlreadyMigrated = await (0, required_config_checks_1.requiredConfigFilesPresentAndValid)();
@@ -1 +1 @@
1
- {"version":3,"file":"device-agent-cloud-connection.js","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"device-agent-cloud-connection.js","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"passthrough-handler.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/passthrough-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAahC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAWjD,qBAAa,kBAAkB;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;IACtB,WAAW,MAAC;gBAEP,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa;YAKhD,yBAAyB;YAsEzB,wBAAwB;YAwExB,8BAA8B;IAetC,GAAG;CAoCV"}
1
+ {"version":3,"file":"passthrough-handler.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/passthrough-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAahC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AASjD,qBAAa,kBAAkB;IACtB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC;IACtB,WAAW,MAAC;gBAEP,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa;YAKhD,yBAAyB;YA6EzB,wBAAwB;YAwExB,8BAA8B;IAetC,GAAG;CAoCV"}
@@ -8,8 +8,6 @@ const constants_1 = require("../local-connection/constants");
8
8
  const rabbitmq_container_1 = require("../local-connection/rabbitmq-container");
9
9
  const logger_1 = require("../util/logger");
10
10
  const sleep_1 = require("../util/sleep");
11
- const messageQueue = [];
12
- const ackQueue = [];
13
11
  const MAX_LOCAL_CONNECTION_ATTEMPTS = 10;
14
12
  /*
15
13
  Responsible for managing the lifecycle of the Local Connection container
@@ -23,58 +21,64 @@ class PassthroughHandler {
23
21
  }
24
22
  async runLocalConnectionChannel() {
25
23
  logger_1.logger.debug('Beginning to consume packets from Local Connection');
26
- await this.channel.consume(this.packetQueue, (msg) => {
27
- // NOTE: this needs to be an arrow function and then the whole contents of processPublish are below
28
- if ((msg === null || msg === void 0 ? void 0 : msg.content) !== undefined) {
29
- const packet = JSON.parse(msg.content.toString());
30
- messageQueue.push({ packet, msg });
31
- while (messageQueue.length > 0) {
32
- const entry = messageQueue.shift();
33
- const { packet, msg } = entry;
24
+ await this.channel.consume(this.packetQueue, async (msg) => {
25
+ var _a;
26
+ if (!(msg === null || msg === void 0 ? void 0 : msg.content))
27
+ return;
28
+ let packet;
29
+ try {
30
+ const raw = msg.content.toString();
31
+ // Currently, edgeIQ is calling json.dumps twice, so a single JSON.parse
32
+ // results in a string return value, which is needed by publishToCloudWithAck.
33
+ // We will update the edgeIQ implementation in the future.
34
+ packet = JSON.parse(raw);
35
+ }
36
+ catch (err) {
37
+ logger_1.logger.error(`Error parsing RabbitMQ packet: ${(0, util_1.stringifyError)(err)}`);
38
+ this.channel.ack(msg);
39
+ logger_1.logger.debug('Problematic packet was acknowledged');
40
+ return;
41
+ }
42
+ // We do a second call to JSON.parse here only to retrieve the 'action' field
43
+ // NOTE: this second call to JSON.parse seems to alter the packet contents
44
+ // (at least when a rounded floating point value is included)
45
+ const action = (_a = JSON.parse(packet)) === null || _a === void 0 ? void 0 : _a['action'];
46
+ switch (action) {
47
+ case 'status':
48
+ case 'analytics': {
34
49
  try {
35
- const parsedPacket = JSON.parse(packet);
36
- if (parsedPacket === null || parsedPacket === void 0 ? void 0 : parsedPacket['action']) {
37
- switch (parsedPacket['action']) {
38
- case 'analytics':
39
- ackQueue.push(msg);
40
- // FIXME: put real topic here
41
- this.publisher.publishToCloudWithAck(packet, (errOrResp) => {
42
- while (ackQueue.length > 0) {
43
- const msg = ackQueue.shift();
44
- if (errOrResp === true) {
45
- this.channel.ack(msg); // acknowledge, allow queue to discard
46
- }
47
- else if (errOrResp === false) {
48
- this.channel.reject(msg, true); // reject and requeue
49
- }
50
- }
51
- });
52
- break;
53
- case 'heartbeat':
54
- this.channel.ack(msg);
55
- logger_1.logger.silly(`Heartbeat package received & acknowledged: ${packet}`);
56
- break;
57
- default:
58
- this.channel.ack(msg);
59
- logger_1.logger.debug(`Unknown 'action' package received & acknowledged: ${packet}`);
60
- break;
61
- }
50
+ const success = await this.publisher.publishToCloudWithAck(packet);
51
+ if (success) {
52
+ this.channel.ack(msg);
62
53
  }
63
54
  else {
64
- this.channel.ack(msg);
65
- logger_1.logger.debug(`Received & acknowledged a RabbitMQ packet of unknown structure: ${parsedPacket}`);
55
+ this.channel.reject(msg, true); // requeue on failure
66
56
  }
67
57
  }
68
- catch (e) {
69
- logger_1.logger.error(`There was a problem parsing RabbitMQ packet! Error:\n${(0, util_1.stringifyError)(e)}`);
70
- this.channel.ack(msg);
71
- logger_1.logger.debug('Problematic packet was acknowledged');
58
+ catch (err) {
59
+ logger_1.logger.error(`Error publishing analytics packet: ${(0, util_1.stringifyError)(err)}`);
60
+ this.channel.reject(msg, true);
61
+ }
62
+ break;
63
+ }
64
+ case 'heartbeat': {
65
+ this.channel.ack(msg);
66
+ logger_1.logger.silly(`Heartbeat packet received & acknowledged:\n${packet}`);
67
+ break;
68
+ }
69
+ default: {
70
+ this.channel.ack(msg);
71
+ if (action) {
72
+ logger_1.logger.debug(`Unknown 'action' packet received & acknowledged:\n${packet}`);
73
+ }
74
+ else {
75
+ logger_1.logger.debug(`Received & acknowledged a RabbitMQ packet of unknown structure:\n${packet}`);
72
76
  }
77
+ break;
73
78
  }
74
79
  }
75
- }, {
76
- noAck: false // When true, RabbitMQ deletes message as soon as it is consumed
77
- });
80
+ }, { noAck: false } // message must be explicitly acked/rejected
81
+ );
78
82
  }
79
83
  async establishLocalConnection() {
80
84
  let connectAttempts = 0;