edge-impulse-linux 1.9.2 → 1.9.3

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 (71) hide show
  1. package/README.md +5 -0
  2. package/build/cli/aws-iotcore-connector.d.ts +62 -0
  3. package/build/cli/aws-iotcore-connector.js +255 -0
  4. package/build/cli/aws-iotcore-connector.js.map +1 -0
  5. package/build/cli/aws-sm-utils.d.ts +18 -0
  6. package/build/cli/aws-sm-utils.js +52 -0
  7. package/build/cli/aws-sm-utils.js.map +1 -0
  8. package/build/cli/init-cli-app.d.ts +10 -0
  9. package/build/cli/init-cli-app.js +62 -1
  10. package/build/cli/init-cli-app.js.map +1 -1
  11. package/build/cli/linux/linux.js +3 -0
  12. package/build/cli/linux/linux.js.map +1 -1
  13. package/build/cli/linux/runner.js +121 -7
  14. package/build/cli/linux/runner.js.map +1 -1
  15. package/build/sdk/studio/sdk/api/rawDataApi.d.ts +4 -0
  16. package/build/sdk/studio/sdk/api/rawDataApi.js +8 -0
  17. package/build/sdk/studio/sdk/api/rawDataApi.js.map +1 -1
  18. package/build/sdk/studio/sdk/model/aIActionLastPreviewStateProposedChanges.d.ts +1 -0
  19. package/build/sdk/studio/sdk/model/aIActionLastPreviewStateProposedChanges.js +5 -0
  20. package/build/sdk/studio/sdk/model/aIActionLastPreviewStateProposedChanges.js.map +1 -1
  21. package/build/sdk/studio/sdk/model/aIActionsConfig.d.ts +2 -10
  22. package/build/sdk/studio/sdk/model/aIActionsConfig.js +3 -8
  23. package/build/sdk/studio/sdk/model/aIActionsConfig.js.map +1 -1
  24. package/build/sdk/studio/sdk/model/aIActionsConfigStep.d.ts +34 -0
  25. package/build/sdk/studio/sdk/model/aIActionsConfigStep.js +34 -0
  26. package/build/sdk/studio/sdk/model/aIActionsConfigStep.js.map +1 -0
  27. package/build/sdk/studio/sdk/model/aIActionsOperatesOn.d.ts +13 -0
  28. package/build/sdk/studio/sdk/model/aIActionsOperatesOn.js +16 -0
  29. package/build/sdk/studio/sdk/model/aIActionsOperatesOn.js.map +1 -0
  30. package/build/sdk/studio/sdk/model/addOrganizationTransformationBlockRequest.d.ts +6 -1
  31. package/build/sdk/studio/sdk/model/addOrganizationTransformationBlockRequest.js +5 -0
  32. package/build/sdk/studio/sdk/model/addOrganizationTransformationBlockRequest.js.map +1 -1
  33. package/build/sdk/studio/sdk/model/createPreviewAIActionsJobRequest.d.ts +2 -10
  34. package/build/sdk/studio/sdk/model/createPreviewAIActionsJobRequest.js +3 -8
  35. package/build/sdk/studio/sdk/model/createPreviewAIActionsJobRequest.js.map +1 -1
  36. package/build/sdk/studio/sdk/model/dSPGroupItem.d.ts +8 -0
  37. package/build/sdk/studio/sdk/model/dSPGroupItem.js +10 -0
  38. package/build/sdk/studio/sdk/model/dSPGroupItem.js.map +1 -1
  39. package/build/sdk/studio/sdk/model/models.d.ts +4 -2
  40. package/build/sdk/studio/sdk/model/models.js +11 -6
  41. package/build/sdk/studio/sdk/model/models.js.map +1 -1
  42. package/build/sdk/studio/sdk/model/organizationTransformationBlock.d.ts +6 -1
  43. package/build/sdk/studio/sdk/model/organizationTransformationBlock.js +5 -0
  44. package/build/sdk/studio/sdk/model/organizationTransformationBlock.js.map +1 -1
  45. package/build/sdk/studio/sdk/model/profileModelInfoMemory.d.ts +4 -5
  46. package/build/sdk/studio/sdk/model/profileModelInfoMemory.js +3 -3
  47. package/build/sdk/studio/sdk/model/profileModelInfoMemory.js.map +1 -1
  48. package/build/sdk/studio/sdk/model/{profileModelInfoMemoryTflite.d.ts → profileModelInfoMemoryDetails.d.ts} +10 -1
  49. package/build/sdk/studio/sdk/model/{profileModelInfoMemoryTflite.js → profileModelInfoMemoryDetails.js} +7 -7
  50. package/build/sdk/studio/sdk/model/profileModelInfoMemoryDetails.js.map +1 -0
  51. package/build/sdk/studio/sdk/model/profileModelTableMcuMemory.d.ts +4 -4
  52. package/build/sdk/studio/sdk/model/profileModelTableMcuMemory.js +3 -3
  53. package/build/sdk/studio/sdk/model/profileModelTableMcuMemory.js.map +1 -1
  54. package/build/sdk/studio/sdk/model/{profileModelInfoMemoryEon.d.ts → profileModelTableMcuMemoryTflite.d.ts} +1 -1
  55. package/build/sdk/studio/sdk/model/{profileModelInfoMemoryEon.js → profileModelTableMcuMemoryTflite.js} +7 -7
  56. package/build/sdk/studio/sdk/model/profileModelTableMcuMemoryTflite.js.map +1 -0
  57. package/build/sdk/studio/sdk/model/publicOrganizationTransformationBlock.d.ts +6 -1
  58. package/build/sdk/studio/sdk/model/publicOrganizationTransformationBlock.js +5 -0
  59. package/build/sdk/studio/sdk/model/publicOrganizationTransformationBlock.js.map +1 -1
  60. package/build/sdk/studio/sdk/model/updateAIActionRequest.d.ts +2 -10
  61. package/build/sdk/studio/sdk/model/updateAIActionRequest.js +3 -8
  62. package/build/sdk/studio/sdk/model/updateAIActionRequest.js.map +1 -1
  63. package/build/sdk/studio/sdk/model/updateOrganizationTransformationBlockRequest.d.ts +6 -1
  64. package/build/sdk/studio/sdk/model/updateOrganizationTransformationBlockRequest.js +5 -0
  65. package/build/sdk/studio/sdk/model/updateOrganizationTransformationBlockRequest.js.map +1 -1
  66. package/build/shared/viewmodels/init.d.ts +4 -1
  67. package/build/shared/viewmodels/init.js +4 -1
  68. package/build/shared/viewmodels/init.js.map +1 -1
  69. package/package.json +4 -1
  70. package/build/sdk/studio/sdk/model/profileModelInfoMemoryEon.js.map +0 -1
  71. package/build/sdk/studio/sdk/model/profileModelInfoMemoryTflite.js.map +0 -1
package/README.md CHANGED
@@ -42,8 +42,13 @@ You can pass in options to the CLI. Here are the key ones:
42
42
  * `--disable-microphone` - disable the microphone.
43
43
  * `--clean` - clear credentials, and re-authenticate. Use this to switch projects or devices.
44
44
  * `--api-key <apikey>` - set an API key, useful for automatic authentication with a new project.
45
+ * `--greengrass` - utilize the AWS IoT Greengrass authentication context and AWS Secrets Manager to authenticate with a new project. See additional Greegrass notes below.
45
46
  * `--help` - see all options.
46
47
 
48
+ #### Greengrass Integration Note
49
+
50
+ edge-impulse-linux and edge-impulse-linux-runner can be run as a service via a custom AWS IoT Greengrass component(s). When provided with the "--greengrass" option, both services will utilize the AWS IoT Greengrass authentication context (ONLY present when launched as a AWS IoT Greengrass custom component) as well as AWS Secrets Manager to extract the api key to be used to authenticate to a new project. If the authentication context is abscent and/or incorrect, both services will simply ignore the "--greengrass" option that was provided and continue with any of the other provided options normally.
51
+
47
52
  ## Classifying data
48
53
 
49
54
  To classify data (whether this is from the camera, the microphone, or a custom sensor) you'll need a model file. This model file contains all signal processing code, classical ML algorithms and neural networks - and typically contains hardware optimizations to run as fast as possible. To grab a model file:
@@ -0,0 +1,62 @@
1
+ type ClassificationResult = {
2
+ [k: string]: string | number;
3
+ };
4
+ type BoundingBox = {
5
+ label: string;
6
+ value: number;
7
+ x: number;
8
+ y: number;
9
+ width: number;
10
+ height: number;
11
+ };
12
+ type BasePayload = {
13
+ time_ms: number;
14
+ info?: string;
15
+ id: string;
16
+ ts: number;
17
+ inference_count: number;
18
+ total_inferences: number;
19
+ };
20
+ type DynamicPayload = {
21
+ [key in AwsResultKey]?: AwsResult;
22
+ };
23
+ export type AwsResult = ClassificationResult | BoundingBox[];
24
+ export type AwsResultKey = 'c' | 'box' | 'grid';
25
+ export type Payload = BasePayload & DynamicPayload;
26
+ export declare class AWSIoTCoreConnector {
27
+ private _notSilent;
28
+ private _inferenceOutputTopic;
29
+ private _metricsOutputTopic;
30
+ private _commandInputTopic;
31
+ private _commandOutputTopic;
32
+ private _iot;
33
+ private _clientConfig;
34
+ private _iotcoreQoS;
35
+ private _connected;
36
+ private _delayCountdown;
37
+ private _delayInferences;
38
+ private _poolSleepTimeMS;
39
+ private _opts;
40
+ constructor(opts: {
41
+ appName: string;
42
+ silentArgv: boolean;
43
+ cleanArgv: boolean;
44
+ apiKeyArgv: string | undefined;
45
+ greengrassArgv: boolean;
46
+ devArgv: boolean;
47
+ hmacKeyArgv: string | undefined;
48
+ connectProjectMsg: string;
49
+ });
50
+ createTopics(): void;
51
+ connect(): Promise<boolean>;
52
+ isConnected(): boolean;
53
+ isEmptyInference(payload: Payload, key: AwsResultKey): boolean;
54
+ launchCommandReceiver(): Promise<void>;
55
+ clearRetainedQueue(cmd_topic: string): Promise<void>;
56
+ isRestartCommand(command: string): boolean;
57
+ processRestartCommand(): void;
58
+ listenForCommands(commandInputTopic: string, longPollSleepMS: number): Promise<void>;
59
+ sendModelMetrics(payload: object): Promise<void>;
60
+ sendInference(payload: Payload, key: AwsResultKey): Promise<void>;
61
+ }
62
+ export {};
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AWSIoTCoreConnector = void 0;
4
+ const client_iot_data_plane_1 = require("@aws-sdk/client-iot-data-plane");
5
+ const PREFIX = '\x1b[34m[AWS_IOTCORE]\x1b[0m';
6
+ class AWSIoTCoreConnector {
7
+ constructor(opts) {
8
+ this._notSilent = (!opts.silentArgv);
9
+ this._inferenceOutputTopic = "";
10
+ this._metricsOutputTopic = "";
11
+ this._commandInputTopic = "";
12
+ this._commandOutputTopic = "";
13
+ this._clientConfig = { region: process.env.AWS_REGION };
14
+ this._iot = undefined;
15
+ this._connected = false;
16
+ this._delayCountdown = 0;
17
+ this._iotcoreQoS = Number(process.env.EI_IOTCORE_QOS);
18
+ this._poolSleepTimeMS = Number(process.env.EI_IOTCORE_POLL_SLEEP_TIME_MS);
19
+ this._opts = opts;
20
+ // We can slow down the publication to IoTCore to save IoTCore message cost$.
21
+ // set "iotcore_backoff" in Greengrass component config to "n" > 0 to enable
22
+ // countdown backoff... "-1" to disable... (default: "10")
23
+ this._delayInferences = Number(process.env.EI_OUTPUT_BACKOFF_COUNT);
24
+ }
25
+ createTopics() {
26
+ // Inference result topic
27
+ this._inferenceOutputTopic = process.env.EI_INFERENCE_OUTPUT_TOPIC;
28
+ // Model metrics status topic
29
+ this._metricsOutputTopic = process.env.EI_METRICS_OUTPUT_TOPIC;
30
+ // Command/control topics
31
+ this._commandInputTopic = process.env.EI_COMMAND_INPUT_TOPIC;
32
+ this._commandOutputTopic = process.env.EI_COMMAND_OUTPUT_TOPIC;
33
+ }
34
+ async connect() {
35
+ if (this._iot === undefined) {
36
+ if (this._notSilent) {
37
+ // not connected.. so connect to IoTCore
38
+ console.log(PREFIX + " EI: Connecting to IoTCore...");
39
+ }
40
+ try {
41
+ // create topics
42
+ this.createTopics();
43
+ // allocate...
44
+ this._iot = await new client_iot_data_plane_1.IoTDataPlaneClient(this._clientConfig);
45
+ // we are connected!
46
+ this._connected = true;
47
+ }
48
+ catch (err) {
49
+ // unable to allocate
50
+ if (this._notSilent) {
51
+ // not connected.. so connect to IoTCore
52
+ console.log(PREFIX + " EI: ERROR - Unable to allocate IoTDataPlaneClient with exception: " + err);
53
+ }
54
+ this._iot = undefined;
55
+ this._connected = false;
56
+ }
57
+ }
58
+ else {
59
+ // already connected... OK
60
+ this._connected = true;
61
+ }
62
+ return this.isConnected();
63
+ }
64
+ isConnected() {
65
+ return this._connected;
66
+ }
67
+ isEmptyInference(payload, key) {
68
+ if (payload && key in payload) {
69
+ const value = payload[key];
70
+ if (Array.isArray(value) && value.length > 0) {
71
+ return false;
72
+ }
73
+ // Check if it's an object and not empty
74
+ if (typeof value === 'object' && value !== null && Object.keys(value).length > 0) {
75
+ return false;
76
+ }
77
+ }
78
+ return true;
79
+ }
80
+ async launchCommandReceiver() {
81
+ await this.listenForCommands(this._commandInputTopic, this._poolSleepTimeMS);
82
+ }
83
+ async clearRetainedQueue(cmd_topic) {
84
+ try {
85
+ if (this._iot !== undefined) {
86
+ // publish... do not proceed until this message has been cleared...
87
+ await this._iot.send(new client_iot_data_plane_1.PublishCommand({
88
+ topic: cmd_topic,
89
+ retain: true
90
+ }));
91
+ }
92
+ }
93
+ catch (err) {
94
+ // ignore
95
+ }
96
+ }
97
+ isRestartCommand(command) {
98
+ return (command === "restart");
99
+ }
100
+ processRestartCommand() {
101
+ // announce
102
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
103
+ console.log("EI: Restarting Service: " + this._opts.appName + "...");
104
+ // send ourselves a single to gracefully shutdown...
105
+ process.kill(process.pid, "SIGINT");
106
+ }
107
+ async listenForCommands(commandInputTopic, longPollSleepMS) {
108
+ while (this.isConnected() === true) {
109
+ // Long Poll via GetRetainedMessageCommand()...
110
+ try {
111
+ if (this._iot !== undefined) {
112
+ const response = await this._iot.send(new client_iot_data_plane_1.GetRetainedMessageCommand({ topic: commandInputTopic }));
113
+ if (response !== undefined) {
114
+ // Retrieve the command
115
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
116
+ const rcvdCmd = JSON.parse(new TextDecoder().decode(response.payload));
117
+ // Clear Retained Messages
118
+ await this.clearRetainedQueue(commandInputTopic);
119
+ // ensure we have a received command...
120
+ if (rcvdCmd !== undefined) {
121
+ // Process the received command
122
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
123
+ if (this.isRestartCommand((rcvdCmd.cmd)) === true) {
124
+ // process the restart command...
125
+ this.processRestartCommand();
126
+ }
127
+ // more commands supported here over time...
128
+ // default case
129
+ else {
130
+ // command not supported/understood... so ignore
131
+ if (this._notSilent === true) {
132
+ console.log("EI: listenForCommands() Command: " + JSON.stringify(rcvdCmd) + " not supported/understood. Ignoring...");
133
+ }
134
+ }
135
+ }
136
+ else {
137
+ // empty/null command... just ignore
138
+ if (this._notSilent === true) {
139
+ console.log("EI: listenForCommands() Command is empty/null. Ignoring...");
140
+ }
141
+ }
142
+ }
143
+ }
144
+ else {
145
+ if (this._notSilent === true) {
146
+ // Connected but null command object
147
+ console.log("listenForCommands(): WARNING Status states connected() but iotcore handle is NULL!");
148
+ }
149
+ }
150
+ }
151
+ catch (err) {
152
+ // ignore
153
+ }
154
+ // Sleep
155
+ await new Promise(resolve => setTimeout(resolve, longPollSleepMS));
156
+ }
157
+ }
158
+ // FUTURE: XXX
159
+ async sendModelMetrics(payload) {
160
+ if (this._iot !== undefined && this.isConnected() === true &&
161
+ this._metricsOutputTopic !== undefined && this._metricsOutputTopic.length > 0) {
162
+ // publish!
163
+ try {
164
+ // send the publication
165
+ await this._iot.send(new client_iot_data_plane_1.PublishCommand({
166
+ topic: this._metricsOutputTopic,
167
+ qos: this._iotcoreQoS,
168
+ retain: false,
169
+ payload: Buffer.from(JSON.stringify(payload))
170
+ }));
171
+ }
172
+ catch (err) {
173
+ if (this._notSilent === true) {
174
+ // exception during send()...
175
+ console.log(PREFIX + " EI: sendModelMetrics() ERROR - IoTDataPlaneClient.send() errored with exception: " + err);
176
+ }
177
+ }
178
+ }
179
+ else if (this._iot !== undefined && this.isConnected() === true) {
180
+ // no model metrics topic
181
+ if (this._notSilent) {
182
+ console.log(PREFIX + " EI: ERROR - No model metrics topic specified in configuration... not sending inference.");
183
+ }
184
+ }
185
+ else {
186
+ // not connected
187
+ if (this._notSilent) {
188
+ console.log(PREFIX + " EI: ERROR - Not connected to IoTCore... not sending mdoel metrics.");
189
+ }
190
+ }
191
+ }
192
+ async sendInference(payload, key) {
193
+ if (this._iot !== undefined && this.isConnected() === true &&
194
+ this._inferenceOutputTopic !== undefined && this._inferenceOutputTopic.length > 0) {
195
+ if (this.isEmptyInference(payload, key)) {
196
+ // empty inference ... so save money and don't publish
197
+ }
198
+ else {
199
+ if (this._delayInferences > 0) {
200
+ ++this._delayCountdown;
201
+ if (this._delayCountdown >= this._delayInferences) {
202
+ // reset:
203
+ this._delayCountdown = 0;
204
+ // publish!
205
+ try {
206
+ // send the publication
207
+ await this._iot.send(new client_iot_data_plane_1.PublishCommand({
208
+ topic: this._inferenceOutputTopic,
209
+ qos: this._iotcoreQoS,
210
+ payload: Buffer.from(JSON.stringify(payload))
211
+ }));
212
+ }
213
+ catch (err) {
214
+ if (this._notSilent) {
215
+ // exception during send()...
216
+ console.log(PREFIX + " EI: sendInference() ERROR - IoTDataPlaneClient.send() errored with exception: " + err);
217
+ }
218
+ }
219
+ }
220
+ }
221
+ else {
222
+ // publish!
223
+ try {
224
+ // send the publication
225
+ await this._iot.send(new client_iot_data_plane_1.PublishCommand({
226
+ topic: this._inferenceOutputTopic,
227
+ qos: this._iotcoreQoS,
228
+ payload: Buffer.from(JSON.stringify(payload))
229
+ }));
230
+ }
231
+ catch (err) {
232
+ if (this._notSilent) {
233
+ // exception during send()...
234
+ console.log(PREFIX + " EI: ERROR - IoTDataPlaneClient.send() errored with exception: " + err);
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+ else if (this._iot !== undefined && this.isConnected() === true) {
241
+ // no publication topic
242
+ if (this._notSilent) {
243
+ console.log(PREFIX + " EI: ERROR - No model inference publication topic specified in configuration... not sending inference results.");
244
+ }
245
+ }
246
+ else {
247
+ // not connected
248
+ if (this._notSilent) {
249
+ console.log(PREFIX + " EI: ERROR - Not connected to IoTCore... not sending inference.");
250
+ }
251
+ }
252
+ }
253
+ }
254
+ exports.AWSIoTCoreConnector = AWSIoTCoreConnector;
255
+ //# sourceMappingURL=aws-iotcore-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-iotcore-connector.js","sourceRoot":"","sources":["../../cli/aws-iotcore-connector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ export declare class AWSSecretsManagerUtils {
2
+ private _smInput;
3
+ private _smName;
4
+ private _notSilent;
5
+ private _client;
6
+ private _clientConfig;
7
+ constructor(opts: {
8
+ appName: string;
9
+ silentArgv: boolean;
10
+ cleanArgv: boolean;
11
+ apiKeyArgv: string | undefined;
12
+ greengrassArgv: boolean;
13
+ devArgv: boolean;
14
+ hmacKeyArgv: string | undefined;
15
+ connectProjectMsg: string;
16
+ });
17
+ getEdgeImpulseAPIKeyFromSecretsManager(): Promise<any>;
18
+ }
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AWSSecretsManagerUtils = void 0;
4
+ const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
5
+ const PREFIX = '\x1b[34m[AWS_SECRET_MANAGER]\x1b[0m';
6
+ class AWSSecretsManagerUtils {
7
+ constructor(opts) {
8
+ this._notSilent = (!opts.silentArgv);
9
+ this._smInput = { SecretId: process.env.EI_AWS_SECRET_ID };
10
+ this._clientConfig = { region: process.env.AWS_REGION };
11
+ this._smName = process.env.EI_AWS_SECRET_NAME;
12
+ this._client = new client_secrets_manager_1.SecretsManagerClient(this._clientConfig);
13
+ }
14
+ async getEdgeImpulseAPIKeyFromSecretsManager() {
15
+ const command = new client_secrets_manager_1.GetSecretValueCommand(this._smInput);
16
+ let name = this._smName;
17
+ if (name === undefined) {
18
+ name = "";
19
+ }
20
+ try {
21
+ const response = await this._client.send(command);
22
+ if (response !== undefined && response.SecretString !== undefined && name.length > 0 &&
23
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
24
+ JSON.parse(response.SecretString)[name] !== undefined) {
25
+ // return the API Key
26
+ if (this._notSilent) {
27
+ // runtime: show status only...
28
+ console.log(PREFIX + " EI: API Key FOUND within AWS Secrets Manager. Continuing...");
29
+ }
30
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
31
+ return JSON.parse(response.SecretString)[name];
32
+ }
33
+ else {
34
+ if (this._notSilent) {
35
+ // Unable to find the API Key... invalid SecretId more than likely...
36
+ console.log(PREFIX +
37
+ " EI: ERROR - Unable to retrieve API Key from AWS Secrets Manager with greengrass option selected. Check ID in configuration: NAME: " +
38
+ name + " ID: " + process.env.EI_AWS_SECRET_ID);
39
+ }
40
+ }
41
+ }
42
+ catch (err) {
43
+ if (this._notSilent) {
44
+ console.log(PREFIX + " EI: ERROR - Unable to retrieve API Key from AWS Secrets Manager with greengrass option selected. Caught Exception: " +
45
+ err + " NAME: " + name + " ID: " + process.env.EI_AWS_SECRET_ID);
46
+ }
47
+ }
48
+ return undefined;
49
+ }
50
+ }
51
+ exports.AWSSecretsManagerUtils = AWSSecretsManagerUtils;
52
+ //# sourceMappingURL=aws-sm-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-sm-utils.js","sourceRoot":"","sources":["../../cli/aws-sm-utils.ts"],"names":[],"mappings":";;;AAAA,4EAA8F;AAE9F,MAAM,MAAM,GAAG,qCAAqC,CAAC;AAErD,MAAa,sBAAsB;IAQ/B,YAAY,IASX;QACG,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAC3D,IAAI,CAAC,aAAa,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACxD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC9C,IAAI,CAAC,OAAO,GAAG,IAAI,6CAAoB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAChE,CAAC;IAED,KAAK,CAAC,sCAAsC;QACxC,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzD,IAAI,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;QACxB,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,IAAI,GAAG,EAAE,CAAC;SACb;QACD,IAAI;YACA,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,YAAY,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAChF,sEAAsE;gBACtE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;gBACvD,qBAAqB;gBACrB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,+BAA+B;oBAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,8DAA8D,CAAC,CAAC;iBACxF;gBAED,sEAAsE;gBACtE,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,CAAC;aAClD;iBACI;gBACD,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,qEAAqE;oBACrE,OAAO,CAAC,GAAG,CAAC,MAAM;wBACd,qIAAqI;wBACrI,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;iBACtD;aACJ;SACJ;QACD,OAAM,GAAG,EAAE;YACP,IAAI,IAAI,CAAC,UAAU,EAAE;gBACjB,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,sHAAsH;oBAC/H,GAAG,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;aAChF;SACJ;QACD,OAAO,SAAS,CAAC;IACrB,CAAC;CACJ;AA9DD,wDA8DC"}
@@ -1,16 +1,26 @@
1
1
  import { Config, EdgeImpulseConfig } from "./config";
2
+ import { AWSSecretsManagerUtils } from "./aws-sm-utils";
3
+ import { AWSIoTCoreConnector } from "./aws-iotcore-connector";
2
4
  export declare function getCliVersion(): string;
3
5
  export declare function initCliApp(opts: {
4
6
  appName: string;
5
7
  silentArgv: boolean;
6
8
  cleanArgv: boolean;
7
9
  apiKeyArgv: string | undefined;
10
+ greengrassArgv: boolean;
8
11
  devArgv: boolean;
9
12
  hmacKeyArgv: string | undefined;
10
13
  connectProjectMsg: string;
11
14
  }): Promise<{
12
15
  configFactory: Config;
13
16
  config: EdgeImpulseConfig;
17
+ awsSM: AWSSecretsManagerUtils;
18
+ awsIOT: AWSIoTCoreConnector;
19
+ } | {
20
+ configFactory: Config;
21
+ config: EdgeImpulseConfig;
22
+ awsSM?: undefined;
23
+ awsIOT?: undefined;
14
24
  }>;
15
25
  export declare function setupCliApp(configFactory: Config, config: EdgeImpulseConfig, opts: {
16
26
  appName: string;
@@ -9,6 +9,8 @@ const check_new_version_1 = __importDefault(require("./check-new-version"));
9
9
  const fs_1 = __importDefault(require("fs"));
10
10
  const path_1 = __importDefault(require("path"));
11
11
  const inquirer_1 = __importDefault(require("inquirer"));
12
+ const aws_sm_utils_1 = require("./aws-sm-utils");
13
+ const aws_iotcore_connector_1 = require("./aws-iotcore-connector");
12
14
  const version = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', '..', 'package.json'), 'utf-8')).version;
13
15
  function getCliVersion() {
14
16
  return version;
@@ -20,11 +22,61 @@ async function initCliApp(opts) {
20
22
  }
21
23
  const configFactory = new config_1.Config();
22
24
  let config;
25
+ // AWS Support
26
+ let awsSM;
27
+ let awsIOT;
23
28
  try {
24
29
  if (opts.cleanArgv) {
25
30
  await configFactory.clean();
26
31
  }
27
- else if (opts.apiKeyArgv) {
32
+ // AWS: Secrets Manager + IoTCore Connect Integration
33
+ if (opts.greengrassArgv) {
34
+ if (awsSM === undefined) {
35
+ awsSM = await new aws_sm_utils_1.AWSSecretsManagerUtils(opts);
36
+ }
37
+ let smApiKey;
38
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
39
+ smApiKey = await awsSM.getEdgeImpulseAPIKeyFromSecretsManager();
40
+ if (smApiKey !== undefined && smApiKey.length > 0) {
41
+ // assign if we capture the API key via SM...
42
+ opts.apiKeyArgv = smApiKey;
43
+ // we only need AWS IoTCore connectivity for the runner app...
44
+ if (opts.appName === "Edge Impulse Linux runner") {
45
+ // success - allocate the AWS IoT Helper
46
+ awsIOT = new aws_iotcore_connector_1.AWSIoTCoreConnector(opts);
47
+ if (awsIOT !== undefined) {
48
+ if (!opts.silentArgv) {
49
+ console.log(opts.appName + ": Connecting to IoTCore...");
50
+ }
51
+ const connected = await awsIOT.connect();
52
+ if (!opts.silentArgv) {
53
+ if (connected) {
54
+ // success
55
+ console.log(opts.appName + ": Connected to IoTCore Successfully!");
56
+ // launch the command poller
57
+ console.log(opts.appName + ": launching command receiver...");
58
+ // eslint-disable-next-line @typescript-eslint/no-floating-promises
59
+ awsIOT.launchCommandReceiver();
60
+ }
61
+ else {
62
+ // failure
63
+ console.log(opts.appName + ": FAILED to connect to IoTCore");
64
+ }
65
+ }
66
+ }
67
+ }
68
+ // continue...
69
+ await configFactory.removeProjectReferences();
70
+ }
71
+ else {
72
+ if (!opts.silentArgv) {
73
+ // unable to continue as no API key was found in Secrets Manager
74
+ console.log(opts.appName + " ERROR: Unable to find EI API Key within AWS Secrets Manager. Check AWS configuration. Continuing...");
75
+ }
76
+ }
77
+ }
78
+ // AWS: Secrets Manager + IoTCore Connect Integration
79
+ if (opts.apiKeyArgv) {
28
80
  await configFactory.removeProjectReferences();
29
81
  }
30
82
  try {
@@ -73,6 +125,15 @@ async function initCliApp(opts) {
73
125
  }
74
126
  process.exit(1);
75
127
  }
128
+ // AWS Integration additions
129
+ if (awsSM !== undefined && awsIOT !== undefined) {
130
+ return {
131
+ configFactory,
132
+ config,
133
+ awsSM,
134
+ awsIOT
135
+ };
136
+ }
76
137
  return {
77
138
  configFactory,
78
139
  config
@@ -1 +1 @@
1
- {"version":3,"file":"init-cli-app.js","sourceRoot":"","sources":["../../cli/init-cli-app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init-cli-app.js","sourceRoot":"","sources":["../../cli/init-cli-app.ts"],"names":[],"mappings":";;;;;;AAAA,qCAAqD;AACrD,4EAAmD;AACnD,4CAAoB;AACpB,gDAAwB;AACxB,wDAAgC;AAChC,iDAAwD;AACxD,mEAA8D;AAE9D,MAAM,OAAO,GAAyB,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAE,CAAC,OAAO,CAAC;AAEtI,SAAgB,aAAa;IACzB,OAAO,OAAO,CAAC;AACnB,CAAC;AAFD,sCAEC;AAEM,KAAK,UAAU,UAAU,CAAC,IAShC;IACG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC;KAC9C;IAED,MAAM,aAAa,GAAG,IAAI,eAAM,EAAE,CAAC;IACnC,IAAI,MAAqC,CAAC;IAE1C,cAAc;IACd,IAAI,KAAyC,CAAC;IAC9C,IAAI,MAAuC,CAAC;IAE5C,IAAI;QACA,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;SAC/B;QAED,qDAAqD;QACrD,IAAI,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,KAAK,KAAK,SAAS,EAAE;gBACrB,KAAK,GAAG,MAAM,IAAI,qCAAsB,CAAC,IAAI,CAAC,CAAC;aAClD;YACD,IAAI,QAAgB,CAAC;YACrB,mEAAmE;YACnE,QAAQ,GAAG,MAAM,KAAK,CAAC,sCAAsC,EAAE,CAAC;YAChE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/C,6CAA6C;gBAC7C,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;gBAE3B,8DAA8D;gBAC9D,IAAI,IAAI,CAAC,OAAO,KAAK,2BAA2B,EAAG;oBAC/C,wCAAwC;oBACxC,MAAM,GAAG,IAAI,2CAAmB,CAAC,IAAI,CAAC,CAAC;oBACvC,IAAI,MAAM,KAAK,SAAS,EAAE;wBACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;4BAClB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,4BAA4B,CAAC,CAAC;yBAC5D;wBACD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;wBACzC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;4BAClB,IAAI,SAAS,EAAE;gCACX,UAAU;gCACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,sCAAsC,CAAC,CAAC;gCAEnE,4BAA4B;gCAC5B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,iCAAiC,CAAC,CAAC;gCAC9D,mEAAmE;gCACnE,MAAM,CAAC,qBAAqB,EAAE,CAAC;6BAClC;iCACI;gCACD,UAAU;gCACV,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,gCAAgC,CAAC,CAAC;6BAChE;yBACJ;qBACJ;iBACJ;gBAED,cAAc;gBACd,MAAM,aAAa,CAAC,uBAAuB,EAAE,CAAC;aACjD;iBACI;gBACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;oBAClB,gEAAgE;oBAChE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,sGAAsG,CAAC,CAAC;iBACtI;aACJ;SACJ;QACD,qDAAqD;QAErD,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,MAAM,aAAa,CAAC,uBAAuB,EAAE,CAAC;SACjD;QAED,IAAI;YACA,MAAM,IAAA,2BAAgB,EAAC,aAAa,CAAC,CAAC;SACzC;QACD,OAAO,EAAE,EAAE;YACP,UAAU;SACb;QAED,yDAAyD;QACzD,IAAI;YACA,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3E;QACD,OAAO,GAAG,EAAE;YACR,IAAI,EAAE,GAAU,GAAG,CAAC;YACpB,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,GAAG,CAAC,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC,EAAE;gBAC5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACnB;iBACI,IAAI,GAAG,CAAC,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC;gBACzC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,EAAE;gBACzC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;gBAC/C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACnB;iBACI;gBACD,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;aAC3B;YACD,MAAM,aAAa,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;SAC3E;KACJ;IACD,OAAO,GAAG,EAAE;QACR,IAAI,EAAE,GAAU,GAAG,CAAC;QACpB,sEAAsE;QACtE,IAAU,EAAG,CAAC,UAAU,EAAE;YACtB,OAAO,CAAC,KAAK,CAAC,0CAA0C;YACpD,sEAAsE;YAChE,EAAG,CAAC,UAAU,EAAc,EAAG,CAAC,QAAS,CAAC,IAAI,CAAC,CAAC;SAC7D;aACI;YACD,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC1F;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;KACnB;IAED,4BAA4B;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;QAC7C,OAAO;YACH,aAAa;YACb,MAAM;YACN,KAAK;YACL,MAAM;SACT,CAAC;KACL;IAED,OAAO;QACH,aAAa;QACb,MAAM;KACT,CAAC;AACN,CAAC;AA/ID,gCA+IC;AAEM,KAAK,UAAU,WAAW,CAAC,aAAqB,EAAE,MAAyB,EAAE,IASnF,EAAE,QAA4B;IAC3B,IAAI,SAAS,GAAG,MAAM,aAAa,CAAC,oBAAoB,EAAE,CAAC;IAE3D,IAAI,SAAS,EAAE;QACX,IAAI;YACA,IAAI,cAAc,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,EAAG,CAAC,CAAC,CAAC;YAChF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAClB,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,cAAc,CAAC,OAAO,CAAC,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC,CAAC;gBAC1F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACnB;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,EAAE,GAAU,GAAG,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,8BAA8B,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;YACnF,SAAS,GAAG,SAAS,CAAC;SACzB;KACJ;IAED,IAAI,CAAC,SAAS,EAAE;QACZ,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;YAClB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;SACnB;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC;YACxC,MAAM,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,SAAS,CAAC;QAEd,IAAI,WAAW,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAC5D,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACnB;aACI,IAAI,UAAU,EAAE;YACjB,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;SACpC;aACI,IAAI,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAChE,SAAS,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C;aACI;YACD,IAAI,MAAM,GAAG,MAAM,kBAAQ,CAAC,MAAM,CAAC,CAAC;oBAChC,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACjG,IAAI,EAAE,SAAS;oBACf,OAAO,EAAE,IAAI,CAAC,iBAAiB;oBAC/B,QAAQ,EAAE,EAAE;iBACf,CAAC,CAAC,CAAC;YACJ,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;SACtC;QAED,IAAI,CAAC,SAAS,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;SACxC;KACJ;IAED,IAAI,OAAO,GAAwC;QAC/C,MAAM,EAAE,IAAI,CAAC,UAAU,IAAI,EAAE;QAC7B,OAAO,EAAE,IAAI,CAAC,WAAW,IAAI,GAAG;KACnC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;QAClB,IAAI;YACA,IAAI,EAAE,GAAG,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YAE5D,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,6EAA6E;oBACzF,sFAAsF,CAAC,CAAC;aAC/F;YAED,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,OAAO,EAAE;gBACjC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;aAChC;SACJ;QACD,OAAO,GAAG,EAAE;YACR,IAAI,EAAE,GAAU,GAAG,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SACxF;KACJ;IAED,OAAO;QACH,SAAS;QACT,OAAO;KACV,CAAC;AACN,CAAC;AA5FD,kCA4FC"}
@@ -38,6 +38,7 @@ commander_1.default
38
38
  .option('--dev', 'List development servers, alternatively you can use the EI_HOST environmental variable ' +
39
39
  'to specify the Edge Impulse instance.')
40
40
  .option('--verbose', 'Enable debug logs')
41
+ .option('--greengrass', 'Enable AWS IoT greengrass integration mode')
41
42
  .allowUnknownOption(true)
42
43
  .parse(process.argv);
43
44
  const devArgv = !!commander_1.default.dev;
@@ -45,6 +46,7 @@ const cleanArgv = !!commander_1.default.clean;
45
46
  const silentArgv = !!commander_1.default.silent;
46
47
  const verboseArgv = !!commander_1.default.verbose;
47
48
  const apiKeyArgv = commander_1.default.apiKey;
49
+ const greengrassArgv = !!commander_1.default.greengrass;
48
50
  const hmacKeyArgv = commander_1.default.hmacKey;
49
51
  const gstLaunchArgsArgv = commander_1.default.gstLaunchArgs;
50
52
  const noCamera = !!commander_1.default.disableCamera;
@@ -63,6 +65,7 @@ const SERIAL_PREFIX = '\x1b[33m[SER]\x1b[0m';
63
65
  const cliOptions = {
64
66
  appName: 'Edge Impulse Linux client',
65
67
  apiKeyArgv: apiKeyArgv,
68
+ greengrassArgv: greengrassArgv,
66
69
  cleanArgv: cleanArgv,
67
70
  devArgv: devArgv,
68
71
  hmacKeyArgv: hmacKeyArgv,