@alwaysai/device-agent 2.1.0-0 → 2.1.0-1
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.
- package/lib/cloud-connection/bootstrap-provision.d.ts +2 -0
- package/lib/cloud-connection/bootstrap-provision.d.ts.map +1 -0
- package/lib/cloud-connection/bootstrap-provision.js +35 -0
- package/lib/cloud-connection/bootstrap-provision.js.map +1 -0
- package/lib/cloud-connection/connection-manager.d.ts +6 -18
- package/lib/cloud-connection/connection-manager.d.ts.map +1 -1
- package/lib/cloud-connection/connection-manager.js +38 -85
- package/lib/cloud-connection/connection-manager.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +4 -10
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/device-agent.d.ts +21 -0
- package/lib/cloud-connection/device-agent.d.ts.map +1 -0
- package/lib/cloud-connection/{bootstrap-agent.js → device-agent.js} +22 -45
- package/lib/cloud-connection/device-agent.js.map +1 -0
- package/lib/cloud-connection/passthrough-handler.d.ts.map +1 -1
- package/lib/cloud-connection/passthrough-handler.js +46 -49
- package/lib/cloud-connection/passthrough-handler.js.map +1 -1
- package/lib/cloud-connection/publisher.d.ts +1 -1
- package/lib/cloud-connection/publisher.d.ts.map +1 -1
- package/lib/cloud-connection/publisher.js +20 -22
- package/lib/cloud-connection/publisher.js.map +1 -1
- package/lib/util/clean-certs.d.ts +2 -0
- package/lib/util/clean-certs.d.ts.map +1 -0
- package/lib/util/clean-certs.js +17 -0
- package/lib/util/clean-certs.js.map +1 -0
- package/package.json +2 -2
- package/src/cloud-connection/bootstrap-provision.ts +43 -0
- package/src/cloud-connection/connection-manager.ts +51 -151
- package/src/cloud-connection/device-agent-cloud-connection.ts +9 -11
- package/src/cloud-connection/{bootstrap-agent.ts → device-agent.ts} +35 -68
- package/src/cloud-connection/passthrough-handler.ts +56 -60
- package/src/cloud-connection/publisher.ts +28 -30
- package/src/util/clean-certs.ts +16 -0
- package/lib/cloud-connection/bootstrap-agent.d.ts +0 -16
- package/lib/cloud-connection/bootstrap-agent.d.ts.map +0 -1
- package/lib/cloud-connection/bootstrap-agent.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-provision.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/bootstrap-provision.ts"],"names":[],"mappings":"AAWA,wBAAsB,kBAAkB,kBA+BvC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bootstrapProvision = void 0;
|
|
4
|
+
const device_certificate_1 = require("../infrastructure/device-certificate");
|
|
5
|
+
const urls_1 = require("../infrastructure/urls");
|
|
6
|
+
const clean_certs_1 = require("../util/clean-certs");
|
|
7
|
+
const directories_1 = require("../util/directories");
|
|
8
|
+
const get_device_id_1 = require("../util/get-device-id");
|
|
9
|
+
const logger_1 = require("../util/logger");
|
|
10
|
+
const device_agent_1 = require("./device-agent");
|
|
11
|
+
async function bootstrapProvision() {
|
|
12
|
+
setTimeout(clean_certs_1.rmBootstrapCertsAndClose, 60000);
|
|
13
|
+
const clientId = (0, get_device_id_1.getDeviceUuid)();
|
|
14
|
+
const bootstrapConfig = {
|
|
15
|
+
keyPath: (0, device_certificate_1.getBootstrapPrivateKeyFilePath)(),
|
|
16
|
+
certPath: (0, device_certificate_1.getBootstrapCertificateFilePath)(),
|
|
17
|
+
caPath: directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH,
|
|
18
|
+
clientId,
|
|
19
|
+
host: (0, urls_1.getIoTCoreEndpointUrl)()
|
|
20
|
+
};
|
|
21
|
+
const bootstrapAgent = new device_agent_1.BootstrapAgent(bootstrapConfig);
|
|
22
|
+
await bootstrapAgent.subscribeToAllTopics();
|
|
23
|
+
bootstrapAgent.publishMessage('$aws/certificates/create/json', '');
|
|
24
|
+
bootstrapAgent.device.on('connect', () => {
|
|
25
|
+
logger_1.logger.info('Your device is being provisioned');
|
|
26
|
+
});
|
|
27
|
+
bootstrapAgent.device.on('message', async (topic, payload) => {
|
|
28
|
+
await bootstrapAgent.handleAwsCertificateTopics(topic, payload);
|
|
29
|
+
});
|
|
30
|
+
bootstrapAgent.device.on('packetsend', (packet) => {
|
|
31
|
+
logger_1.logger.debug(`Sending packet: ${JSON.stringify({ packet }, null, 2)}`);
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
exports.bootstrapProvision = bootstrapProvision;
|
|
35
|
+
//# sourceMappingURL=bootstrap-provision.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap-provision.js","sourceRoot":"","sources":["../../src/cloud-connection/bootstrap-provision.ts"],"names":[],"mappings":";;;AAAA,6EAG8C;AAC9C,iDAA+D;AAC/D,qDAA+D;AAC/D,qDAAqE;AACrE,yDAAsD;AACtD,2CAAwC;AACxC,iDAAgD;AAEzC,KAAK,UAAU,kBAAkB;IACtC,UAAU,CAAC,sCAAwB,EAAE,KAAK,CAAC,CAAC;IAE5C,MAAM,QAAQ,GAAG,IAAA,6BAAa,GAAE,CAAC;IACjC,MAAM,eAAe,GAAG;QACtB,OAAO,EAAE,IAAA,mDAA8B,GAAE;QACzC,QAAQ,EAAE,IAAA,oDAA+B,GAAE;QAC3C,MAAM,EAAE,4CAA8B;QACtC,QAAQ;QACR,IAAI,EAAE,IAAA,4BAAqB,GAAE;KAC9B,CAAC;IAEF,MAAM,cAAc,GAAG,IAAI,6BAAc,CAAC,eAAe,CAAC,CAAC;IAC3D,MAAM,cAAc,CAAC,oBAAoB,EAAE,CAAC;IAE5C,cAAc,CAAC,cAAc,CAAC,+BAA+B,EAAE,EAAE,CAAC,CAAC;IAEnE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;QACvC,eAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,cAAc,CAAC,MAAM,CAAC,EAAE,CACtB,SAAS,EACT,KAAK,EAAE,KAAa,EAAE,OAAe,EAAE,EAAE;QACvC,MAAM,cAAc,CAAC,0BAA0B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;IAEF,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAW,EAAE,EAAE;QACrD,eAAM,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;AACL,CAAC;AA/BD,gDA+BC"}
|
|
@@ -1,31 +1,19 @@
|
|
|
1
|
-
import { mqtt5 } from 'aws-iot-device-sdk-v2';
|
|
2
1
|
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
|
-
}
|
|
11
2
|
export declare class ConnectionManager extends MessageDispatcher<any> {
|
|
12
3
|
private clientId;
|
|
13
4
|
private host;
|
|
14
5
|
private port;
|
|
15
|
-
private
|
|
16
|
-
private client;
|
|
6
|
+
private device;
|
|
17
7
|
private subscribedTopics;
|
|
18
8
|
private connected;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
getIoTDevice(): mqtt5.Mqtt5Client;
|
|
9
|
+
constructor(clientId: string, host: string, port: number);
|
|
10
|
+
getIoTDevice(): awsIot.device;
|
|
22
11
|
isConnected(): boolean;
|
|
23
12
|
registerHandler(topic: string, handler: MessageHandler): void;
|
|
24
|
-
disconnect():
|
|
25
|
-
subscribe(topic: string):
|
|
26
|
-
unsubscribe(topic: string):
|
|
13
|
+
disconnect(): void;
|
|
14
|
+
subscribe(topic: string): void;
|
|
15
|
+
unsubscribe(topic: string): void;
|
|
27
16
|
initConnectionHandlers(connectCallback: () => void): void;
|
|
28
|
-
waitForConnection(timeoutMs?: number): Promise<void>;
|
|
29
17
|
private logConnectionInfo;
|
|
30
18
|
}
|
|
31
19
|
//# 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":"
|
|
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,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ConnectionManager = void 0;
|
|
4
|
-
const
|
|
4
|
+
const awsIot = require("aws-iot-device-sdk");
|
|
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,137 +9,90 @@ 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");
|
|
13
12
|
const exec_promise = (0, util_2.promisify)(child_process_1.exec);
|
|
14
13
|
class ConnectionManager extends message_dispatcher_1.MessageDispatcher {
|
|
15
|
-
constructor(
|
|
14
|
+
constructor(clientId, host, port) {
|
|
16
15
|
super();
|
|
17
16
|
this.subscribedTopics = new Set();
|
|
18
17
|
this.connected = false;
|
|
19
|
-
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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({
|
|
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,
|
|
29
25
|
clientId: this.clientId,
|
|
30
|
-
|
|
26
|
+
host: this.host,
|
|
27
|
+
port: this.port,
|
|
28
|
+
keepalive: 10 // time before re-connect attempt on dropped connection, default is 400 seconds
|
|
31
29
|
});
|
|
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();
|
|
36
30
|
}
|
|
37
31
|
getIoTDevice() {
|
|
38
|
-
return this.
|
|
32
|
+
return this.device;
|
|
39
33
|
}
|
|
40
34
|
isConnected() {
|
|
41
35
|
return this.connected;
|
|
42
36
|
}
|
|
43
37
|
registerHandler(topic, handler) {
|
|
44
38
|
super.registerHandler(topic, handler);
|
|
45
|
-
|
|
39
|
+
this.subscribe(topic);
|
|
46
40
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.client.stop();
|
|
50
|
-
await stopped;
|
|
41
|
+
disconnect() {
|
|
42
|
+
this.device.end();
|
|
51
43
|
logger_1.logger.debug(`Device Agent has been disconnected from the AWS IoT Core.`);
|
|
52
44
|
}
|
|
53
|
-
|
|
45
|
+
subscribe(topic) {
|
|
54
46
|
if (!this.subscribedTopics.has(topic)) {
|
|
55
|
-
|
|
56
|
-
subscriptions: [{ qos: aws_iot_device_sdk_v2_1.mqtt5.QoS.AtLeastOnce, topicFilter: topic }]
|
|
57
|
-
});
|
|
47
|
+
this.device.subscribe(topic);
|
|
58
48
|
this.subscribedTopics.add(topic);
|
|
59
|
-
logger_1.logger.debug(`Subscribed to topic: ${topic}
|
|
49
|
+
logger_1.logger.debug(`Subscribed to topic: ${topic}`);
|
|
60
50
|
}
|
|
61
51
|
}
|
|
62
|
-
|
|
52
|
+
unsubscribe(topic) {
|
|
63
53
|
if (this.subscribedTopics.has(topic)) {
|
|
64
|
-
|
|
65
|
-
topicFilters: [topic]
|
|
66
|
-
});
|
|
67
|
-
logger_1.logger.debug(`Unsubscribed from topic: ${topic}, result: ${JSON.stringify(unsuback)}`);
|
|
54
|
+
this.device.unsubscribe(topic);
|
|
68
55
|
this.subscribedTopics.delete(topic);
|
|
56
|
+
logger_1.logger.debug(`Unsubscribed from topic: ${topic}`);
|
|
69
57
|
}
|
|
70
58
|
}
|
|
71
59
|
initConnectionHandlers(connectCallback) {
|
|
72
|
-
this.
|
|
73
|
-
logger_1.logger.debug(`Device Agent is attempting connection`);
|
|
74
|
-
});
|
|
75
|
-
this.client.on('connectionSuccess', (eventData) => {
|
|
60
|
+
this.device.on('connect', (connack) => {
|
|
76
61
|
logger_1.logger.info('Device Agent has connected to the cloud.');
|
|
77
|
-
logger_1.logger.debug(`Connack: ${JSON.stringify(eventData.connack)}`);
|
|
78
|
-
logger_1.logger.debug(`Settings: ${JSON.stringify(eventData.settings)}`);
|
|
79
62
|
this.connected = true;
|
|
80
63
|
connectCallback();
|
|
81
64
|
});
|
|
82
|
-
this.
|
|
65
|
+
this.device.on('disconnect', () => {
|
|
83
66
|
logger_1.logger.warn('Device Agent has been disconnected from the cloud');
|
|
84
|
-
logger_1.logger.warn(`Disconnection event: ${eventData.error.toString()}`);
|
|
85
|
-
if (eventData.disconnect !== undefined) {
|
|
86
|
-
logger_1.logger.debug('Disconnect packet: ' + JSON.stringify(eventData.disconnect));
|
|
87
|
-
}
|
|
88
67
|
this.connected = false;
|
|
89
68
|
});
|
|
90
|
-
this.
|
|
91
|
-
logger_1.logger.
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
}
|
|
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)}`);
|
|
95
74
|
this.connected = false;
|
|
96
75
|
});
|
|
97
|
-
this.
|
|
98
|
-
logger_1.logger.
|
|
76
|
+
this.device.on('close', () => {
|
|
77
|
+
logger_1.logger.warn('Device Agent AWS IoT Core connection closed.');
|
|
99
78
|
this.connected = false;
|
|
100
79
|
});
|
|
101
|
-
this.
|
|
102
|
-
logger_1.logger.warn(`Device Agent
|
|
80
|
+
this.device.on('offline', () => {
|
|
81
|
+
logger_1.logger.warn(`Device Agent is offline ${new Date().toLocaleString()}`);
|
|
103
82
|
void this.logConnectionInfo();
|
|
104
83
|
this.connected = false;
|
|
105
84
|
});
|
|
106
|
-
this.
|
|
107
|
-
|
|
108
|
-
const payloadBuffer = eventData.message.payload;
|
|
85
|
+
this.device.on('message', async (topic, payload) => {
|
|
86
|
+
logger_1.logger.debug(`Message received on topic: ${topic}:\n${payload.toString()}`);
|
|
109
87
|
try {
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
: null;
|
|
113
|
-
logger_1.logger.debug(`Message received on topic: ${topic}:\n${payloadString}`);
|
|
114
|
-
this.dispatch(eventData.message.topicName, payloadString);
|
|
88
|
+
const jsonPacket = JSON.parse(payload);
|
|
89
|
+
this.dispatch(topic, jsonPacket);
|
|
115
90
|
}
|
|
116
91
|
catch (e) {
|
|
117
|
-
logger_1.logger.error(`Error parsing message
|
|
92
|
+
logger_1.logger.error(`Error parsing message! Error:\n${(0, util_1.stringifyError)(e)}`);
|
|
118
93
|
}
|
|
119
94
|
});
|
|
120
95
|
}
|
|
121
|
-
waitForConnection(timeoutMs = 10000) {
|
|
122
|
-
return new Promise((resolve, reject) => {
|
|
123
|
-
if (this.connected) {
|
|
124
|
-
return resolve(); // already connected
|
|
125
|
-
}
|
|
126
|
-
const timeout = setTimeout(() => {
|
|
127
|
-
reject(new Error('Timed out waiting for MQTT connection'));
|
|
128
|
-
}, timeoutMs);
|
|
129
|
-
this.client.on('connectionSuccess', () => {
|
|
130
|
-
clearTimeout(timeout);
|
|
131
|
-
this.connected = true;
|
|
132
|
-
resolve();
|
|
133
|
-
});
|
|
134
|
-
this.client.on('disconnection', (event) => {
|
|
135
|
-
const errorString = event.error
|
|
136
|
-
? event.error.toString()
|
|
137
|
-
: 'Unknown reason';
|
|
138
|
-
logger_1.logger.warn(`Disconnected while waiting for connection: ${errorString}`);
|
|
139
|
-
reject(new Error(`Disconnected: ${errorString}`));
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
96
|
async logConnectionInfo() {
|
|
144
97
|
try {
|
|
145
98
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":";;;AAAA,
|
|
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":"
|
|
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"}
|
|
@@ -13,6 +13,7 @@ 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");
|
|
16
17
|
const live_updates_handler_1 = require("./live-updates-handler");
|
|
17
18
|
const passthrough_handler_1 = require("./passthrough-handler");
|
|
18
19
|
const publisher_1 = require("./publisher");
|
|
@@ -21,7 +22,6 @@ const job_handler_1 = require("../jobs/job-handler");
|
|
|
21
22
|
const transaction_manager_1 = require("./transaction-manager");
|
|
22
23
|
const connection_manager_1 = require("./connection-manager");
|
|
23
24
|
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,12 +30,7 @@ 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
|
-
|
|
34
|
-
clientId: this.clientId,
|
|
35
|
-
host: this.host,
|
|
36
|
-
port: this.port
|
|
37
|
-
};
|
|
38
|
-
this.connectionManager = new connection_manager_1.ConnectionManager(deviceAgentConfig);
|
|
33
|
+
this.connectionManager = new connection_manager_1.ConnectionManager(this.clientId, this.host, this.port);
|
|
39
34
|
this.publisher = new publisher_1.Publisher(this.connectionManager, this.clientId);
|
|
40
35
|
this.shadowHandler = new shadow_handler_1.ShadowHandler(this.clientId, this.publisher);
|
|
41
36
|
this.liveUpdatesHandler = new live_updates_handler_1.LiveUpdatesHandler();
|
|
@@ -92,7 +87,7 @@ class DeviceAgentCloudConnection {
|
|
|
92
87
|
// lost since we aren't waiting for responses so sleep for a short time to
|
|
93
88
|
// receive them
|
|
94
89
|
await (0, sleep_1.default)(1000);
|
|
95
|
-
|
|
90
|
+
this.connectionManager.disconnect();
|
|
96
91
|
}
|
|
97
92
|
// CLI methods
|
|
98
93
|
async waitForConnection() {
|
|
@@ -113,8 +108,7 @@ exports.DeviceAgentCloudConnection = DeviceAgentCloudConnection;
|
|
|
113
108
|
async function runDeviceAgentCloudInterface() {
|
|
114
109
|
logger_1.logger.info(`Starting alwaysAI Device Agent v${await (0, check_for_updates_1.getDeviceAgentVersion)()}`);
|
|
115
110
|
if ((0, fs_1.existsSync)((0, device_certificate_1.getBootstrapPrivateKeyFilePath)())) {
|
|
116
|
-
|
|
117
|
-
await bootstrapAgent.bootstrapProvision();
|
|
111
|
+
await (0, bootstrap_provision_1.bootstrapProvision)();
|
|
118
112
|
return;
|
|
119
113
|
}
|
|
120
114
|
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":";;;AAAA,yEAIwC;AACxC,2BAAgC;AAEhC,6EAAsF;AACtF,0FAAsG;AACtG,qFAA8F;AAC9F,iDAA+D;AAC/D,2EAAoF;AACpF,qGAA+F;AAC/F,iEAAkE;AAClE,yDAAsD;AACtD,2CAAwC;AACxC,yCAAkC;AAClC,iEAA4D;AAC5D,+DAA2D;AAC3D,2CAAwC;AACxC,qDAA8E;AAC9E,qDAAiD;AACjD,+DAA2D;AAC3D,
|
|
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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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface DeviceAgentConfigType {
|
|
2
|
+
keyPath: string;
|
|
3
|
+
certPath: string;
|
|
4
|
+
caPath: string;
|
|
5
|
+
clientId: string;
|
|
6
|
+
host: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class DeviceAgent {
|
|
9
|
+
constructor(config: DeviceAgentConfigType);
|
|
10
|
+
deviceType: string;
|
|
11
|
+
device: any;
|
|
12
|
+
hardwareId: () => Promise<string>;
|
|
13
|
+
deviceId: string;
|
|
14
|
+
publishMessage(topic: string, message: string): void;
|
|
15
|
+
}
|
|
16
|
+
export declare class BootstrapAgent extends DeviceAgent {
|
|
17
|
+
subscribeToAllTopics(): Promise<void>;
|
|
18
|
+
handleAwsCertificateTopics(topic: string, payload: any): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=device-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-agent.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/device-agent.ts"],"names":[],"mappings":"AAoBA,UAAU,qBAAqB;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAYD,qBAAa,WAAW;gBACV,MAAM,EAAE,qBAAqB;IAIlC,UAAU,SAAgB;IAC1B,MAAM,MAAiB;IACvB,UAAU,wBAAwD;IAClE,QAAQ,SAAmB;IAE3B,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAGrD;AAED,qBAAa,cAAe,SAAQ,WAAW;IAChC,oBAAoB;IAepB,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;CAyDpE"}
|
|
@@ -1,44 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BootstrapAgent = void 0;
|
|
3
|
+
exports.BootstrapAgent = exports.DeviceAgent = void 0;
|
|
4
|
+
// eslint-disable-next-line
|
|
5
|
+
const awsIot = require('aws-iot-device-sdk');
|
|
4
6
|
const app_1 = require("alwaysai/lib/core/app");
|
|
5
7
|
const infrastructure_1 = require("alwaysai/lib/infrastructure");
|
|
6
8
|
const util_1 = require("alwaysai/lib/util");
|
|
7
9
|
const device_certificate_1 = require("../infrastructure/device-certificate");
|
|
8
10
|
const get_device_id_1 = require("../util/get-device-id");
|
|
9
11
|
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");
|
|
16
12
|
// eslint-disable-next-line
|
|
17
13
|
const process = require('process');
|
|
18
|
-
class
|
|
19
|
-
constructor() {
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.port = 8883;
|
|
14
|
+
class DeviceAgent {
|
|
15
|
+
constructor(config) {
|
|
16
|
+
this.deviceType = 'aai-device';
|
|
17
|
+
this.device = awsIot.device;
|
|
23
18
|
this.hardwareId = async () => await (0, app_1.getTargetHardwareUuid)((0, util_1.JsSpawner)());
|
|
24
19
|
this.deviceId = (0, get_device_id_1.getDeviceUuid)();
|
|
25
|
-
this.
|
|
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);
|
|
20
|
+
this.device = awsIot.device(config);
|
|
37
21
|
}
|
|
38
22
|
publishMessage(topic, message) {
|
|
39
|
-
this.
|
|
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
|
+
});
|
|
40
35
|
}
|
|
41
|
-
async
|
|
36
|
+
async handleAwsCertificateTopics(topic, payload) {
|
|
42
37
|
switch (topic) {
|
|
43
38
|
case '$aws/certificates/create/json/accepted': {
|
|
44
39
|
logger_1.logger.debug(`Received Certs: ${JSON.stringify(JSON.parse(payload), null, 2)}`);
|
|
@@ -68,24 +63,6 @@ class BootstrapAgent {
|
|
|
68
63
|
}
|
|
69
64
|
}
|
|
70
65
|
}
|
|
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
|
-
}
|
|
89
66
|
}
|
|
90
67
|
exports.BootstrapAgent = BootstrapAgent;
|
|
91
|
-
//# sourceMappingURL=
|
|
68
|
+
//# sourceMappingURL=device-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-agent.js","sourceRoot":"","sources":["../../src/cloud-connection/device-agent.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;
|
|
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"}
|