@alwaysai/device-agent 0.0.2 → 0.0.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 (47) hide show
  1. package/lib/application-control/application-control.d.ts +7 -2
  2. package/lib/application-control/application-control.d.ts.map +1 -1
  3. package/lib/application-control/application-control.js +41 -4
  4. package/lib/application-control/application-control.js.map +1 -1
  5. package/lib/cloud-connection/device-agent-cloud-connection.d.ts +10 -0
  6. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -0
  7. package/lib/cloud-connection/device-agent-cloud-connection.js +46 -0
  8. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -0
  9. package/lib/constants.d.ts +2 -0
  10. package/lib/constants.d.ts.map +1 -1
  11. package/lib/constants.js +3 -1
  12. package/lib/constants.js.map +1 -1
  13. package/lib/index.js +7 -3
  14. package/lib/index.js.map +1 -1
  15. package/lib/subcommands/app/app.d.ts +7 -1
  16. package/lib/subcommands/app/app.d.ts.map +1 -1
  17. package/lib/subcommands/app/app.js +49 -6
  18. package/lib/subcommands/app/app.js.map +1 -1
  19. package/lib/subcommands/app/index.d.ts.map +1 -1
  20. package/lib/subcommands/app/index.js +2 -0
  21. package/lib/subcommands/app/index.js.map +1 -1
  22. package/lib/subcommands/index.js +2 -2
  23. package/lib/subcommands/index.js.map +1 -1
  24. package/lib/subcommands/test-app.d.ts +1 -4
  25. package/lib/subcommands/test-app.d.ts.map +1 -1
  26. package/lib/subcommands/test-app.js +25 -29
  27. package/lib/subcommands/test-app.js.map +1 -1
  28. package/lib/util/directories.d.ts +5 -0
  29. package/lib/util/directories.d.ts.map +1 -0
  30. package/lib/util/directories.js +27 -0
  31. package/lib/util/directories.js.map +1 -0
  32. package/lib/util/urls.d.ts +2 -0
  33. package/lib/util/urls.d.ts.map +1 -0
  34. package/lib/util/urls.js +25 -0
  35. package/lib/util/urls.js.map +1 -0
  36. package/package.json +3 -2
  37. package/readme.md +16 -5
  38. package/src/application-control/application-control.ts +45 -5
  39. package/src/cloud-connection/device-agent-cloud-connection.ts +53 -0
  40. package/src/constants.ts +4 -1
  41. package/src/index.ts +7 -3
  42. package/src/subcommands/app/app.ts +52 -5
  43. package/src/subcommands/app/index.ts +4 -0
  44. package/src/subcommands/index.ts +2 -2
  45. package/src/subcommands/test-app.ts +26 -26
  46. package/src/util/directories.ts +30 -0
  47. package/src/util/urls.ts +21 -0
@@ -7,10 +7,15 @@ export declare function getInstalledApps(): Promise<AppDetails[]>;
7
7
  export declare function rollbackApp(props: {
8
8
  projectId: string;
9
9
  }): Promise<void>;
10
+ export declare function listAppReleases(props: {
11
+ projectId: string;
12
+ }): Promise<import("alwaysai/lib/util/rest-client").ReleaseHistoryArray>;
13
+ export declare function listAppLatestRelease(props: {
14
+ projectId: string;
15
+ }): Promise<string | undefined>;
10
16
  export declare function installApp(props: {
11
17
  projectId: string;
12
- appPkg: NodeJS.ReadableStream;
13
- version: string;
18
+ releaseHash: string;
14
19
  }): Promise<void>;
15
20
  export declare type ServiceState = 'Stopped' | 'Up' | 'Restarting';
16
21
  export declare type ServiceStatus = {
@@ -1 +1 @@
1
- {"version":3,"file":"application-control.d.ts","sourceRoot":"","sources":["../../src/application-control/application-control.ts"],"names":[],"mappings":";AAkBA,oBAAY,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAc9D;AAUD,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAW7D;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBhB;AAED,oBAAY,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,CAAC;AAC3D,oBAAY,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAClE,oBAAY,SAAS,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAE9E,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CA8CnF;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAyBjC;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhB;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzE;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB9E"}
1
+ {"version":3,"file":"application-control.d.ts","sourceRoot":"","sources":["../../src/application-control/application-control.ts"],"names":[],"mappings":";AAqBA,oBAAY,UAAU,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhE,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAkB9D;AAUD,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAW7D;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,wEAIjE;AAED,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,+BAOtE;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0ChB;AAED,oBAAY,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,YAAY,CAAC;AAC3D,oBAAY,aAAa,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,YAAY,CAAA;CAAE,CAAC;AAClE,oBAAY,SAAS,GAAG;IAAE,UAAU,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAAC;AAE9E,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CnF;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAyBjC;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBhB;AAED,wBAAsB,OAAO,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBzE;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAgB9E"}
@@ -1,15 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.uninstallApp = exports.stopApp = exports.startApp = exports.getAppLogs = exports.getAppStatus = exports.installApp = exports.rollbackApp = exports.getInstalledApps = void 0;
3
+ exports.uninstallApp = exports.stopApp = exports.startApp = exports.getAppLogs = exports.getAppStatus = exports.installApp = exports.listAppLatestRelease = exports.listAppReleases = exports.rollbackApp = exports.getInstalledApps = void 0;
4
4
  const docker_compose_1 = require("docker-compose");
5
5
  const rimraf = require("rimraf");
6
6
  const fs = require("fs");
7
+ const alwaysai_1 = require("alwaysai");
8
+ const path_1 = require("path");
9
+ const run_cli_cmd_1 = require("../util/run-cli-cmd");
7
10
  const docker_cmd_1 = require("../docker/docker-cmd");
8
11
  const js_spawner_1 = require("../util/spawner/js-spawner");
9
12
  const copy_dir_1 = require("../util/copy-dir");
10
13
  const utils_1 = require("./utils");
11
14
  const BACKUP_EXT = '.bak';
12
15
  async function getInstalledApps() {
16
+ if (!fs.existsSync(utils_1.APP_ROOT)) {
17
+ return [];
18
+ }
13
19
  const projectIds = fs.readdirSync(utils_1.APP_ROOT).filter(file => {
14
20
  const isDir = fs.statSync(`${utils_1.APP_ROOT}/${file}`).isDirectory();
15
21
  const isBak = `${utils_1.APP_ROOT}/${file}`.includes(BACKUP_EXT);
@@ -44,11 +50,28 @@ async function rollbackApp(props) {
44
50
  console.log(`Rolled back app ${projectId} to previous version`);
45
51
  }
46
52
  exports.rollbackApp = rollbackApp;
53
+ async function listAppReleases(props) {
54
+ const { projectId } = props;
55
+ const releaseHistory = await (0, alwaysai_1.fetchAppReleaseHistory)(projectId);
56
+ return releaseHistory;
57
+ }
58
+ exports.listAppReleases = listAppReleases;
59
+ async function listAppLatestRelease(props) {
60
+ const { projectId } = props;
61
+ const releaseHistory = await (0, alwaysai_1.fetchAppReleaseHistory)(projectId);
62
+ if (releaseHistory.length >= 1) {
63
+ return releaseHistory[0]['releaseHash'];
64
+ }
65
+ return undefined;
66
+ }
67
+ exports.listAppLatestRelease = listAppLatestRelease;
47
68
  async function installApp(props) {
48
- const { projectId, appPkg, version } = props;
69
+ const { projectId, releaseHash } = props;
49
70
  console.log(`Installing ${projectId}`);
50
71
  const appDir = (0, utils_1.getAppDir)(projectId);
72
+ const TEMP_DIR = (0, path_1.join)(utils_1.APP_ROOT, 'temp');
51
73
  const spawner = (0, js_spawner_1.JsSpawner)();
74
+ await spawner.mkdirp(TEMP_DIR);
52
75
  // TODO Check valid projectId
53
76
  // Check if app is installed
54
77
  if (await (0, utils_1.isAppInstalled)({ appDir })) {
@@ -58,11 +81,25 @@ async function installApp(props) {
58
81
  }
59
82
  // Create app directory
60
83
  await spawner.mkdirp(appDir);
84
+ // download the application
85
+ await (0, run_cli_cmd_1.runCliCmd)({
86
+ cmd: [
87
+ 'release',
88
+ 'pull',
89
+ '--yes',
90
+ '--project',
91
+ projectId,
92
+ '--releaseHash',
93
+ releaseHash,
94
+ ],
95
+ cwd: TEMP_DIR,
96
+ });
61
97
  // Unpack app package and move to install dir
62
- await spawner.untar(appPkg, appDir);
98
+ await spawner.untar(fs.createReadStream((0, path_1.join)(TEMP_DIR, `${releaseHash}.tgz`)), appDir);
63
99
  console.log(`Unpacked application to ${appDir}`);
64
- await (0, utils_1.setAppVersion)({ appDir, version });
100
+ await (0, utils_1.setAppVersion)({ appDir, version: releaseHash });
65
101
  await (0, utils_1.buildApp)({ appDir });
102
+ await spawner.rimraf(TEMP_DIR);
66
103
  console.log(`Installed ${projectId} to ${appDir}`);
67
104
  }
68
105
  exports.installApp = installApp;
@@ -1 +1 @@
1
- {"version":3,"file":"application-control.js","sourceRoot":"","sources":["../../src/application-control/application-control.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"application-control.js","sourceRoot":"","sources":["../../src/application-control/application-control.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare class DeviceAgentCloudConnection {
2
+ device: any;
3
+ private clientId;
4
+ private host;
5
+ constructor();
6
+ getClientId(): string;
7
+ publishMessage(topic: string, message: string): void;
8
+ }
9
+ export declare function runDeviceAgentCloudInterface(): void;
10
+ //# sourceMappingURL=device-agent-cloud-connection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-agent-cloud-connection.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"AAQA,qBAAa,0BAA0B;IAC9B,MAAM,MAAiB;IAC9B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,IAAI,CAA2B;;IAehC,WAAW;IAIX,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAIrD;AAED,wBAAgB,4BAA4B,SAgB3C"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDeviceAgentCloudInterface = exports.DeviceAgentCloudConnection = void 0;
4
+ const awsIot = require('aws-iot-device-sdk');
5
+ const urls_1 = require("../util/urls");
6
+ const directories_1 = require("../util/directories");
7
+ class DeviceAgentCloudConnection {
8
+ constructor() {
9
+ this.device = awsIot.device;
10
+ this.clientId = 'DEVICE_AGENT'; // TODO: use CLI to get either the username or the device ID? how do we determine the device ID in this case?
11
+ this.host = (0, urls_1.getIoTCoreEndpointUrl)();
12
+ this.device = awsIot.device({
13
+ keyPath: (0, directories_1.getPrivateKeyFilePath)(),
14
+ certPath: (0, directories_1.getCertificateFilePath)(),
15
+ caPath: (0, directories_1.getRootCertificateFilePath)(),
16
+ clientId: this.clientId,
17
+ host: this.host,
18
+ });
19
+ // TODO: subscribe to topics here
20
+ this.device.subscribe('command');
21
+ }
22
+ getClientId() {
23
+ return this.clientId;
24
+ }
25
+ publishMessage(topic, message) {
26
+ console.log('publishing message ', message);
27
+ this.device.publish(topic, JSON.stringify({ message }));
28
+ }
29
+ }
30
+ exports.DeviceAgentCloudConnection = DeviceAgentCloudConnection;
31
+ function runDeviceAgentCloudInterface() {
32
+ const deviceAgent = new DeviceAgentCloudConnection();
33
+ deviceAgent.device.on('connect', function () {
34
+ deviceAgent.publishMessage('connection', deviceAgent.getClientId());
35
+ console.log('Device Agent has connected to the cloud');
36
+ });
37
+ deviceAgent.device.on('disconnect', function () {
38
+ console.log('Device Agent has been disconnected from the cloud');
39
+ });
40
+ deviceAgent.device.on('message', function (topic, payload) {
41
+ // TODO: parse/determine action based on topic/payload here
42
+ console.log('message', topic, payload.toString());
43
+ });
44
+ }
45
+ exports.runDeviceAgentCloudInterface = runDeviceAgentCloudInterface;
46
+ //# sourceMappingURL=device-agent-cloud-connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"device-agent-cloud-connection.js","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":";;;AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAC7C,uCAAqD;AACrD,qDAI6B;AAE7B,MAAa,0BAA0B;IAKrC;QAJO,WAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QACtB,aAAQ,GAAG,cAAc,CAAC,CAAC,6GAA6G;QACxI,SAAI,GAAG,IAAA,4BAAqB,GAAE,CAAC;QAGrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;YAC1B,OAAO,EAAE,IAAA,mCAAqB,GAAE;YAChC,QAAQ,EAAE,IAAA,oCAAsB,GAAE;YAClC,MAAM,EAAE,IAAA,wCAA0B,GAAE;YACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;SAChB,CAAC,CAAC;QAEH,iCAAiC;QACjC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,cAAc,CAAC,KAAa,EAAE,OAAe;QAClD,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AA1BD,gEA0BC;AAED,SAAgB,4BAA4B;IAC1C,MAAM,WAAW,GAAG,IAAI,0BAA0B,EAAE,CAAC;IAErD,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE;QAC/B,WAAW,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE;QAClC,OAAO,CAAC,GAAG,CAAC,mDAAmD,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,UAAS,KAAK,EAAE,OAAO;QACtD,2DAA2D;QAC3D,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC;AAhBD,oEAgBC"}
@@ -3,7 +3,9 @@ export declare const DOT_ALWAYSAI_DIR: string;
3
3
  export declare const AAI_DIR: any;
4
4
  export declare const DEVICE_TOKEN_FILE_NAME = "alwaysai.credentials.json";
5
5
  export declare const DEVICE_CONFIG_FILE_NAME = "alwaysai.config.json";
6
+ export declare const DEV_HOST_TOKEN_DIR: string;
6
7
  export declare const DEVICE_TOKEN_DIR_LINUX: string;
8
+ export declare const DEV_HOST_CERT_AND_KEY_DIR: string;
7
9
  export declare const DEVICE_CERT_AND_KEY_DIR_LINUX: string;
8
10
  export declare const DEVICE_CERTIFICATE_FILE_NAME = "alwaysai.certificate.pem.crt";
9
11
  export declare const DEVICE_PRIVATE_KEY_FILE_NAME = "alwaysai.private.pem.key";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAC7D,eAAO,MAAM,OAAO,KAAuC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,8BAA8B,CAAC;AAClE,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAE9D,eAAO,MAAM,sBAAsB,QAAyC,CAAC;AAC7E,eAAO,MAAM,6BAA6B,QAGzC,CAAC;AAEF,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AACrE,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAE9D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,kBAAkB,8DAC8B,CAAC;AAE9D,eAAO,MAAM,gCAAgC,4DACc,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,4BAA4B,cAAc,CAAC;AACxD,eAAO,MAAM,gBAAgB,QAA+B,CAAC;AAC7D,eAAO,MAAM,OAAO,KAAuC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,8BAA8B,CAAC;AAClE,eAAO,MAAM,uBAAuB,yBAAyB,CAAC;AAE9D,eAAO,MAAM,kBAAkB,QAAyC,CAAC;AACzE,eAAO,MAAM,sBAAsB,QAAyC,CAAC;AAE7E,eAAO,MAAM,yBAAyB,QAA2C,CAAC;AAClF,eAAO,MAAM,6BAA6B,QAGzC,CAAC;AAEF,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAC3E,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,eAAO,MAAM,2BAA2B,4BAA4B,CAAC;AACrE,eAAO,MAAM,0BAA0B,sBAAsB,CAAC;AAE9D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,kBAAkB,8DAC8B,CAAC;AAE9D,eAAO,MAAM,gCAAgC,4DACc,CAAC"}
package/lib/constants.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PLEASE_REPORT_THIS_ERROR_MESSAGE = exports.JETPACK_IMAGE_LINK = exports.SUPPORTED_JETPACK_VERSION = exports.DEVICE_ROOT_CERT_FILE_NAME = exports.DEVICE_PUBLIC_KEY_FILE_NAME = exports.DEVICE_PRIVATE_KEY_FILE_NAME = exports.DEVICE_CERTIFICATE_FILE_NAME = exports.DEVICE_CERT_AND_KEY_DIR_LINUX = exports.DEVICE_TOKEN_DIR_LINUX = exports.DEVICE_CONFIG_FILE_NAME = exports.DEVICE_TOKEN_FILE_NAME = exports.AAI_DIR = exports.DOT_ALWAYSAI_DIR = exports.ALWAYSAI_CLI_EXECUTABLE_NAME = void 0;
3
+ exports.PLEASE_REPORT_THIS_ERROR_MESSAGE = exports.JETPACK_IMAGE_LINK = exports.SUPPORTED_JETPACK_VERSION = exports.DEVICE_ROOT_CERT_FILE_NAME = exports.DEVICE_PUBLIC_KEY_FILE_NAME = exports.DEVICE_PRIVATE_KEY_FILE_NAME = exports.DEVICE_CERTIFICATE_FILE_NAME = exports.DEVICE_CERT_AND_KEY_DIR_LINUX = exports.DEV_HOST_CERT_AND_KEY_DIR = exports.DEVICE_TOKEN_DIR_LINUX = exports.DEV_HOST_TOKEN_DIR = exports.DEVICE_CONFIG_FILE_NAME = exports.DEVICE_TOKEN_FILE_NAME = exports.AAI_DIR = exports.DOT_ALWAYSAI_DIR = exports.ALWAYSAI_CLI_EXECUTABLE_NAME = void 0;
4
4
  const path_1 = require("path");
5
5
  const os_1 = require("os");
6
6
  const os = require('os');
@@ -10,7 +10,9 @@ exports.DOT_ALWAYSAI_DIR = (0, path_1.join)((0, os_1.homedir)(), '.alwaysai');
10
10
  exports.AAI_DIR = path.join(os.homedir(), '.alwaysai');
11
11
  exports.DEVICE_TOKEN_FILE_NAME = 'alwaysai.credentials.json';
12
12
  exports.DEVICE_CONFIG_FILE_NAME = 'alwaysai.config.json';
13
+ exports.DEV_HOST_TOKEN_DIR = (0, path_1.join)((0, os_1.homedir)(), '.config', 'alwaysai');
13
14
  exports.DEVICE_TOKEN_DIR_LINUX = path_1.posix.join('~', '.config', 'alwaysai');
15
+ exports.DEV_HOST_CERT_AND_KEY_DIR = (0, path_1.join)(exports.DEV_HOST_TOKEN_DIR, 'certificates');
14
16
  exports.DEVICE_CERT_AND_KEY_DIR_LINUX = path_1.posix.join(exports.DEVICE_TOKEN_DIR_LINUX, 'certificates');
15
17
  exports.DEVICE_CERTIFICATE_FILE_NAME = 'alwaysai.certificate.pem.crt';
16
18
  exports.DEVICE_PRIVATE_KEY_FILE_NAME = 'alwaysai.private.pem.key';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,+BAA4C;AAC5C,2BAA6B;AAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhB,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAC3C,QAAA,gBAAgB,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,WAAW,CAAC,CAAC;AAChD,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAE/C,QAAA,sBAAsB,GAAG,2BAA2B,CAAC;AACrD,QAAA,uBAAuB,GAAG,sBAAsB,CAAC;AAEjD,QAAA,sBAAsB,GAAG,YAAK,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAChE,QAAA,6BAA6B,GAAG,YAAK,CAAC,IAAI,CACrD,8BAAsB,EACtB,cAAc,CACf,CAAC;AAEW,QAAA,4BAA4B,GAAG,8BAA8B,CAAC;AAC9D,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAC1D,QAAA,2BAA2B,GAAG,yBAAyB,CAAC;AACxD,QAAA,0BAA0B,GAAG,mBAAmB,CAAC;AAEjD,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAChC,QAAA,kBAAkB,GAC7B,2DAA2D,CAAC;AAEjD,QAAA,gCAAgC,GAC3C,yDAAyD,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAA,+BAAmC;AACnC,2BAA6B;AAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhB,QAAA,4BAA4B,GAAG,WAAW,CAAC;AAC3C,QAAA,gBAAgB,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,WAAW,CAAC,CAAC;AAChD,QAAA,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC;AAE/C,QAAA,sBAAsB,GAAG,2BAA2B,CAAC;AACrD,QAAA,uBAAuB,GAAG,sBAAsB,CAAC;AAEjD,QAAA,kBAAkB,GAAG,IAAA,WAAI,EAAC,IAAA,YAAO,GAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAC5D,QAAA,sBAAsB,GAAG,YAAK,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAEhE,QAAA,yBAAyB,GAAG,IAAA,WAAI,EAAC,0BAAkB,EAAE,cAAc,CAAC,CAAC;AACrE,QAAA,6BAA6B,GAAG,YAAK,CAAC,IAAI,CACrD,8BAAsB,EACtB,cAAc,CACf,CAAC;AAEW,QAAA,4BAA4B,GAAG,8BAA8B,CAAC;AAC9D,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAC1D,QAAA,2BAA2B,GAAG,yBAAyB,CAAC;AACxD,QAAA,0BAA0B,GAAG,mBAAmB,CAAC;AAEjD,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAChC,QAAA,kBAAkB,GAC7B,2DAA2D,CAAC;AAEjD,QAAA,gCAAgC,GAC3C,yDAAyD,CAAC"}
package/lib/index.js CHANGED
@@ -7,13 +7,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const alwayscli_1 = require("@alwaysai/alwayscli");
8
8
  const root_1 = require("./root");
9
9
  const web_interface_1 = require("./web/web-interface");
10
+ const device_agent_cloud_connection_1 = require("./cloud-connection/device-agent-cloud-connection");
10
11
  if (module === require.main) {
11
12
  console.log('Starting alwaysAI Device Agent');
12
- if (process.env.ALWAYSAI_DEVICE_AGENT_MODE === 'cli') {
13
- (0, alwayscli_1.runCliAndExit)(root_1.root, {});
13
+ if (process.env.ALWAYSAI_DEVICE_AGENT_MODE === 'cloud') {
14
+ (0, device_agent_cloud_connection_1.runDeviceAgentCloudInterface)();
14
15
  }
15
- else {
16
+ else if (process.env.ALWAYSAI_DEVICE_AGENT_MODE === 'web') {
16
17
  (0, web_interface_1.runWebInterface)();
17
18
  }
19
+ else {
20
+ (0, alwayscli_1.runCliAndExit)(root_1.root, {});
21
+ }
18
22
  }
19
23
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;;AAE/E,mDAAoD;AACpD,iCAA8B;AAC9B,uDAAsD;AAEtD,IAAI,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,KAAK,EAAE;QACpD,IAAA,yBAAa,EAAC,WAAI,EAAE,EAAE,CAAC,CAAC;KACzB;SAAM;QACL,IAAA,+BAAe,GAAE,CAAC;KACnB;CACF"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA,6EAA6E;AAC7E,2EAA2E;AAC3E,+EAA+E;;AAE/E,mDAAoD;AACpD,iCAA8B;AAC9B,uDAAsD;AACtD,oGAAgG;AAEhG,IAAI,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE;IAC3B,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAE9C,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,OAAO,EAAE;QACtD,IAAA,4DAA4B,GAAE,CAAC;KAChC;SAAM,IAAI,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,KAAK,EAAE;QAC3D,IAAA,+BAAe,GAAE,CAAC;KACnB;SAAM;QACL,IAAA,yBAAa,EAAC,WAAI,EAAE,EAAE,CAAC,CAAC;KACzB;CACF"}
@@ -1,7 +1,13 @@
1
1
  export declare const listAppsCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {}, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
2
+ export declare const listAppReleasesCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
3
+ project: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
4
+ }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
5
+ export declare const listAppLatestReleaseCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
6
+ project: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
7
+ }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
2
8
  export declare const installAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
3
9
  project: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
4
- dockerComposeFile: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
10
+ releaseHash: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
5
11
  }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
6
12
  export declare const getAppStatusCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
7
13
  project: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/app.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,eAAe,yKAQ1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;4DAmB5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAgB9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;4DAkB1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;4DAmB5B,CAAC;AAEH,eAAO,MAAM,cAAc;;4DAezB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAe9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;4DAe7B,CAAC;AAEH,eAAO,MAAM,eAAe;;;4DAqB1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;4DAqB7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAe9B,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/app.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,eAAe,yKAQ1B,CAAC;AAEH,eAAO,MAAM,sBAAsB;;4DAgBjC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;4DAmBtC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;4DAyB5B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAgB9B,CAAC;AAEH,eAAO,MAAM,eAAe;;;4DAkB1B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;4DAmB5B,CAAC;AAEH,eAAO,MAAM,cAAc;;4DAezB,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAe9B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;4DAe7B,CAAC;AAEH,eAAO,MAAM,eAAe;;;4DAqB1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;4DAqB7B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;4DAe9B,CAAC"}
@@ -7,7 +7,7 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
7
7
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
8
8
  };
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.updateModelsCliLeaf = exports.removeModelCliLeaf = exports.addModelCliLeaf = exports.rollbackAppCliLeaf = exports.uninstallAppCliLeaf = exports.stopAppCliLeaf = exports.getAppLogsCliLeaf = exports.startAppCliLeaf = exports.getAppStatusCliLeaf = exports.installAppCliLeaf = exports.listAppsCliLeaf = void 0;
10
+ exports.updateModelsCliLeaf = exports.removeModelCliLeaf = exports.addModelCliLeaf = exports.rollbackAppCliLeaf = exports.uninstallAppCliLeaf = exports.stopAppCliLeaf = exports.getAppLogsCliLeaf = exports.startAppCliLeaf = exports.getAppStatusCliLeaf = exports.installAppCliLeaf = exports.listAppLatestReleaseCliLeaf = exports.listAppReleasesCliLeaf = exports.listAppsCliLeaf = void 0;
11
11
  const alwayscli_1 = require("@alwaysai/alwayscli");
12
12
  const application_control_1 = require("../../application-control/application-control");
13
13
  const models_1 = require("../../application-control/models");
@@ -20,6 +20,43 @@ exports.listAppsCliLeaf = (0, alwayscli_1.CliLeaf)({
20
20
  console.table(apps);
21
21
  },
22
22
  });
23
+ exports.listAppReleasesCliLeaf = (0, alwayscli_1.CliLeaf)({
24
+ name: 'list-releases',
25
+ description: 'List all releases for a given app',
26
+ namedInputs: {
27
+ project: (0, alwayscli_1.CliStringInput)({
28
+ description: 'Project Id',
29
+ }),
30
+ },
31
+ async action(_, opts) {
32
+ const { project } = opts;
33
+ if (project === undefined) {
34
+ throw new alwayscli_1.CliTerseError('--project is required');
35
+ }
36
+ const releaseHistory = await (0, application_control_1.listAppReleases)({ projectId: project });
37
+ console.log(releaseHistory);
38
+ },
39
+ });
40
+ exports.listAppLatestReleaseCliLeaf = (0, alwayscli_1.CliLeaf)({
41
+ name: 'list-latest-release',
42
+ description: 'List the latest release hash for a given app',
43
+ namedInputs: {
44
+ project: (0, alwayscli_1.CliStringInput)({
45
+ description: 'Project Id',
46
+ }),
47
+ },
48
+ async action(_, opts) {
49
+ const { project } = opts;
50
+ if (project === undefined) {
51
+ throw new alwayscli_1.CliTerseError('--project is required');
52
+ }
53
+ const latestReleaseHash = await (0, application_control_1.listAppLatestRelease)({ projectId: project });
54
+ if (latestReleaseHash === undefined) {
55
+ throw new alwayscli_1.CliTerseError('This application has not been published yet');
56
+ }
57
+ console.log(latestReleaseHash);
58
+ },
59
+ });
23
60
  exports.installAppCliLeaf = (0, alwayscli_1.CliLeaf)({
24
61
  name: 'install',
25
62
  description: 'Install an alwaysAI app from a project',
@@ -27,17 +64,23 @@ exports.installAppCliLeaf = (0, alwayscli_1.CliLeaf)({
27
64
  project: (0, alwayscli_1.CliStringInput)({
28
65
  description: 'Project Id',
29
66
  }),
30
- dockerComposeFile: (0, alwayscli_1.CliStringInput)({
31
- description: 'Contents of the docker compose file',
67
+ releaseHash: (0, alwayscli_1.CliStringInput)({
68
+ description: 'Release Hash',
32
69
  }),
33
70
  },
34
71
  async action(_, opts) {
35
- const { project } = opts;
72
+ const project = opts.project;
73
+ let releaseHash = opts.releaseHash;
36
74
  if (project === undefined) {
37
75
  throw new alwayscli_1.CliTerseError('--project is required');
38
76
  }
39
- // await installApp({ projectId: project, appPkg });
40
- throw new alwayscli_1.CliTerseError('Install not yet implemented!');
77
+ if (releaseHash === undefined) {
78
+ releaseHash = await (0, application_control_1.listAppLatestRelease)({ projectId: project });
79
+ }
80
+ if (releaseHash === undefined) {
81
+ throw new alwayscli_1.CliTerseError('This application has not been published yet');
82
+ }
83
+ await (0, application_control_1.installApp)({ projectId: project, releaseHash });
41
84
  },
42
85
  });
43
86
  exports.getAppStatusCliLeaf = (0, alwayscli_1.CliLeaf)({
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/subcommands/app/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/subcommands/app/app.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,mDAA6E;AAC7E,uFAWuD;AACvD,6DAAuF;AAE1E,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,yBAAyB;IACtC,WAAW,EAAE,EAAE;IACf,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,IAAI,GAAG,MAAM,IAAA,sCAAgB,GAAE,CAAC;QACtC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,sBAAsB,GAAG,IAAA,mBAAO,EAAC;IAC5C,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,mCAAmC;IAChD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,MAAM,cAAc,GAAG,MAAM,IAAA,qCAAe,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,2BAA2B,GAAG,IAAA,mBAAO,EAAC;IACjD,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,8CAA8C;IAC3D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,MAAM,iBAAiB,GAAG,MAAM,IAAA,0CAAoB,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7E,IAAI,iBAAiB,KAAK,SAAS,EAAE;YACnC,MAAM,IAAI,yBAAa,CAAC,6CAA6C,CAAC,CAAC;SACxE;QACD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACjC,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,SAAS;IACf,WAAW,EAAE,wCAAwC;IACrD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;QACF,WAAW,EAAE,IAAA,0BAAc,EAAC;YAC1B,WAAW,EAAE,cAAc;SAC5B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,IAAI,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACnC,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,WAAW,GAAG,MAAM,IAAA,0CAAoB,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;SAClE;QACD,IAAI,WAAW,KAAK,SAAS,EAAE;YAC7B,MAAM,IAAI,yBAAa,CAAC,6CAA6C,CAAC,CAAC;SACxE;QACD,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,QAAQ;IACd,WAAW,EAAE,6CAA6C;IAC1D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,MAAM,SAAS,GAAG,MAAM,IAAA,kCAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACzB,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,iCAAiC;IAC9C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;QACF,gBAAgB,EAAE,IAAA,0BAAc,EAAC;YAC/B,WAAW,EAAE,oBAAoB;SAClC,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC;QAC3C,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,MAAM,IAAA,8BAAQ,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC3D,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,iBAAiB,GAAG,IAAA,mBAAO,EAAC;IACvC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,MAAM,QAAQ,GAAG,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;;YAC7B,KAA0B,IAAA,aAAA,cAAA,QAAQ,CAAA,cAAA;gBAAvB,MAAM,KAAK,qBAAA,CAAA;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aACpB;;;;;;;;;IACH,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,cAAc,GAAG,IAAA,mBAAO,EAAC;IACpC,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,wBAAwB,CAAC,CAAC;SACnD;QACD,MAAM,IAAA,6BAAO,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IACxC,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,wBAAwB,CAAC,CAAC;SACnD;QACD,MAAM,IAAA,kCAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,mBAAO,EAAC;IACxC,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,kDAAkD;IAC/D,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,wBAAwB,CAAC,CAAC;SACnD;QACD,MAAM,IAAA,iCAAW,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,eAAe,GAAG,IAAA,mBAAO,EAAC;IACrC,IAAI,EAAE,WAAW;IACjB,WAAW,EAAE,gCAAgC;IAC7C,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;QACF,KAAK,EAAE,IAAA,0BAAc,EAAC;YACpB,WAAW,EAAE,UAAU;SACxB,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,MAAM,IAAI,yBAAa,CAAC,qBAAqB,CAAC,CAAC;SAChD;QACD,MAAM,IAAA,iBAAQ,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,kBAAkB,GAAG,IAAA,mBAAO,EAAC;IACxC,IAAI,EAAE,cAAc;IACpB,WAAW,EAAE,qCAAqC;IAClD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;QACF,KAAK,EAAE,IAAA,0BAAc,EAAC;YACpB,WAAW,EAAE,UAAU;SACxB,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;QAChC,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,IAAI,KAAK,KAAK,SAAS,EAAE;YACvB,MAAM,IAAI,yBAAa,CAAC,qBAAqB,CAAC,CAAC;SAChD;QACD,MAAM,IAAA,oBAAW,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF,CAAC,CAAC;AAEU,QAAA,mBAAmB,GAAG,IAAA,mBAAO,EAAC;IACzC,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,uCAAuC;IACpD,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,EAAE;YACzB,MAAM,IAAI,yBAAa,CAAC,uBAAuB,CAAC,CAAC;SAClD;QACD,MAAM,IAAA,qBAAY,EAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":"AAeA,eAAO,MAAM,YAAY,mDAgBvB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,YAAY,mDAkBvB,CAAC"}
@@ -8,6 +8,8 @@ exports.appCliBranch = (0, alwayscli_1.CliBranch)({
8
8
  description: 'Manage alwaysAI applications',
9
9
  subcommands: [
10
10
  app_1.listAppsCliLeaf,
11
+ app_1.listAppReleasesCliLeaf,
12
+ app_1.listAppLatestReleaseCliLeaf,
11
13
  app_1.installAppCliLeaf,
12
14
  app_1.getAppStatusCliLeaf,
13
15
  app_1.startAppCliLeaf,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAChD,+BAYe;AAEF,QAAA,YAAY,GAAG,IAAA,qBAAS,EAAC;IACpC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE;QACX,qBAAe;QACf,uBAAiB;QACjB,yBAAmB;QACnB,qBAAe;QACf,uBAAiB;QACjB,oBAAc;QACd,yBAAmB;QACnB,wBAAkB;QAClB,qBAAe;QACf,wBAAkB;QAClB,yBAAmB;KACpB;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/subcommands/app/index.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAChD,+BAce;AAEF,QAAA,YAAY,GAAG,IAAA,qBAAS,EAAC;IACpC,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE;QACX,qBAAe;QACf,4BAAsB;QACtB,iCAA2B;QAC3B,uBAAiB;QACjB,yBAAmB;QACnB,qBAAe;QACf,uBAAiB;QACjB,oBAAc;QACd,yBAAmB;QACnB,wBAAkB;QAClB,qBAAe;QACf,wBAAkB;QAClB,yBAAmB;KACpB;CACF,CAAC,CAAC"}
@@ -4,11 +4,11 @@ exports.subcommands = void 0;
4
4
  const index_1 = require("./app/index");
5
5
  const device_control_1 = require("./device-control");
6
6
  const login_1 = require("./login");
7
- const test_app_1 = require("./test-app");
7
+ // import { installTestAppCliLeaf } from './test-app';
8
8
  exports.subcommands = [
9
9
  login_1.loginCliLeaf,
10
10
  index_1.appCliBranch,
11
11
  device_control_1.getDeviceInfoCliLeaf,
12
- test_app_1.installTestAppCliLeaf,
12
+ // installTestAppCliLeaf,
13
13
  ];
14
14
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subcommands/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAC3C,qDAAwD;AACxD,mCAAuC;AACvC,yCAAmD;AAEtC,QAAA,WAAW,GAAG;IACzB,oBAAY;IACZ,oBAAY;IACZ,qCAAoB;IACpB,gCAAqB;CACtB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/subcommands/index.ts"],"names":[],"mappings":";;;AAAA,uCAA2C;AAC3C,qDAAwD;AACxD,mCAAuC;AACvC,sDAAsD;AAEzC,QAAA,WAAW,GAAG;IACzB,oBAAY;IACZ,oBAAY;IACZ,qCAAoB;IACpB,yBAAyB;CAC1B,CAAC"}
@@ -1,5 +1,2 @@
1
- export declare const installTestAppCliLeaf: import("@alwaysai/alwayscli/lib/types").CliLeaf<import("@alwaysai/alwayscli").CliInput<undefined, false>, {
2
- project: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
3
- version: import("@alwaysai/alwayscli").CliInput<string | undefined, false>;
4
- }, import("@alwaysai/alwayscli").CliInput<undefined, false>>;
1
+ export {};
5
2
  //# sourceMappingURL=test-app.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-app.d.ts","sourceRoot":"","sources":["../../src/subcommands/test-app.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qBAAqB;;;4DAwBhC,CAAC"}
1
+ {"version":3,"file":"test-app.d.ts","sourceRoot":"","sources":["../../src/subcommands/test-app.ts"],"names":[],"mappings":""}
@@ -1,33 +1,29 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.installTestAppCliLeaf = void 0;
4
- const alwayscli_1 = require("@alwaysai/alwayscli");
5
3
  const path = require('path');
6
- const application_control_1 = require("../application-control/application-control");
7
- const js_spawner_1 = require("../util/spawner/js-spawner");
8
- exports.installTestAppCliLeaf = (0, alwayscli_1.CliLeaf)({
9
- name: 'install-test-app',
10
- description: 'Install a test application',
11
- namedInputs: {
12
- project: (0, alwayscli_1.CliStringInput)({
13
- description: 'Project Id',
14
- }),
15
- version: (0, alwayscli_1.CliStringInput)({
16
- description: 'Version',
17
- }),
18
- },
19
- async action(_, opts) {
20
- const { project, version } = opts;
21
- const postfix = Math.random()
22
- .toString()
23
- .slice(2, 14);
24
- const projectId = project ? project : `16ad11bb-8c3a-4a15-923e-${postfix}`;
25
- const releaseVersion = version ? version : 'f43e816b30aa612f103fe73314f9716a436ce4f5';
26
- // Package test app
27
- const appDir = path.join('test', 'test-app');
28
- const spawner = (0, js_spawner_1.JsSpawner)({ path: appDir });
29
- const appPkg = await spawner.tar(...(await spawner.readdir()));
30
- await (0, application_control_1.installApp)({ projectId, appPkg, version: releaseVersion });
31
- },
32
- });
4
+ // export const installTestAppCliLeaf = CliLeaf({
5
+ // name: 'install-test-app',
6
+ // description: 'Install a test application',
7
+ // namedInputs: {
8
+ // project: CliStringInput({
9
+ // description: 'Project Id',
10
+ // }),
11
+ // version: CliStringInput({
12
+ // description: 'Version',
13
+ // }),
14
+ // },
15
+ // async action(_, opts) {
16
+ // const { project, version } = opts;
17
+ // const postfix = Math.random()
18
+ // .toString()
19
+ // .slice(2, 14);
20
+ // const projectId = project ? project : `16ad11bb-8c3a-4a15-923e-${postfix}`;
21
+ // const releaseVersion = version ? version : 'f43e816b30aa612f103fe73314f9716a436ce4f5';
22
+ // // Package test app
23
+ // const appDir = path.join('test', 'test-app');
24
+ // const spawner = JsSpawner({ path: appDir });
25
+ // const appPkg = await spawner.tar(...(await spawner.readdir()));
26
+ // await installApp({ projectId, appPkg, version: releaseVersion });
27
+ // },
28
+ // });
33
29
  //# sourceMappingURL=test-app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"test-app.js","sourceRoot":"","sources":["../../src/subcommands/test-app.ts"],"names":[],"mappings":";;;AAAA,mDAA8D;AAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7B,oFAAwE;AACxE,2DAAuD;AAE1C,QAAA,qBAAqB,GAAG,IAAA,mBAAO,EAAC;IAC3C,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,4BAA4B;IACzC,WAAW,EAAE;QACX,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,YAAY;SAC1B,CAAC;QACF,OAAO,EAAE,IAAA,0BAAc,EAAC;YACtB,WAAW,EAAE,SAAS;SACvB,CAAC;KACH;IACD,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI;QAClB,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;aAC1B,QAAQ,EAAE;aACV,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAChB,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,OAAO,EAAE,CAAC;QAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0CAA0C,CAAC;QACtF,mBAAmB;QACnB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAA,sBAAS,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,IAAA,gCAAU,EAAC,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACnE,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"test-app.js","sourceRoot":"","sources":["../../src/subcommands/test-app.ts"],"names":[],"mappings":";;AACA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAI7B,iDAAiD;AACjD,8BAA8B;AAC9B,+CAA+C;AAC/C,mBAAmB;AACnB,gCAAgC;AAChC,mCAAmC;AACnC,UAAU;AACV,gCAAgC;AAChC,gCAAgC;AAChC,UAAU;AACV,OAAO;AACP,4BAA4B;AAC5B,yCAAyC;AACzC,oCAAoC;AACpC,oBAAoB;AACpB,uBAAuB;AACvB,kFAAkF;AAClF,6FAA6F;AAC7F,0BAA0B;AAC1B,oDAAoD;AACpD,mDAAmD;AACnD,sEAAsE;AACtE,wEAAwE;AACxE,OAAO;AACP,MAAM"}
@@ -0,0 +1,5 @@
1
+ export declare function getCertAndKeyDir(): string;
2
+ export declare function getPrivateKeyFilePath(): string;
3
+ export declare function getCertificateFilePath(): string;
4
+ export declare function getRootCertificateFilePath(): string;
5
+ //# sourceMappingURL=directories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directories.d.ts","sourceRoot":"","sources":["../../src/util/directories.ts"],"names":[],"mappings":"AAYA,wBAAgB,gBAAgB,WAK/B;AAED,wBAAgB,qBAAqB,WAEpC;AAED,wBAAgB,sBAAsB,WAErC;AAED,wBAAgB,0BAA0B,WAEzC"}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getRootCertificateFilePath = exports.getCertificateFilePath = exports.getPrivateKeyFilePath = exports.getCertAndKeyDir = void 0;
4
+ const os = require('os');
5
+ const path_1 = require("path");
6
+ const constants_1 = require("../constants");
7
+ const certAndKeyDir = getCertAndKeyDir();
8
+ function getCertAndKeyDir() {
9
+ if (os.type() === 'Darwin' || os.type() === 'Windows_NT') {
10
+ return constants_1.DEV_HOST_CERT_AND_KEY_DIR;
11
+ }
12
+ return constants_1.DEVICE_CERT_AND_KEY_DIR_LINUX;
13
+ }
14
+ exports.getCertAndKeyDir = getCertAndKeyDir;
15
+ function getPrivateKeyFilePath() {
16
+ return (0, path_1.join)(certAndKeyDir, constants_1.DEVICE_PRIVATE_KEY_FILE_NAME);
17
+ }
18
+ exports.getPrivateKeyFilePath = getPrivateKeyFilePath;
19
+ function getCertificateFilePath() {
20
+ return (0, path_1.join)(certAndKeyDir, constants_1.DEVICE_CERTIFICATE_FILE_NAME);
21
+ }
22
+ exports.getCertificateFilePath = getCertificateFilePath;
23
+ function getRootCertificateFilePath() {
24
+ return (0, path_1.join)(certAndKeyDir, constants_1.DEVICE_ROOT_CERT_FILE_NAME);
25
+ }
26
+ exports.getRootCertificateFilePath = getRootCertificateFilePath;
27
+ //# sourceMappingURL=directories.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directories.js","sourceRoot":"","sources":["../../src/util/directories.ts"],"names":[],"mappings":";;;AAAA,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AACzB,+BAA4B;AAC5B,4CAMsB;AAEtB,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;AAEzC,SAAgB,gBAAgB;IAC9B,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,YAAY,EAAE;QACxD,OAAO,qCAAyB,CAAC;KAClC;IACD,OAAO,yCAA6B,CAAC;AACvC,CAAC;AALD,4CAKC;AAED,SAAgB,qBAAqB;IACnC,OAAO,IAAA,WAAI,EAAC,aAAa,EAAE,wCAA4B,CAAC,CAAC;AAC3D,CAAC;AAFD,sDAEC;AAED,SAAgB,sBAAsB;IACpC,OAAO,IAAA,WAAI,EAAC,aAAa,EAAE,wCAA4B,CAAC,CAAC;AAC3D,CAAC;AAFD,wDAEC;AAED,SAAgB,0BAA0B;IACxC,OAAO,IAAA,WAAI,EAAC,aAAa,EAAE,sCAA0B,CAAC,CAAC;AACzD,CAAC;AAFD,gEAEC"}
@@ -0,0 +1,2 @@
1
+ export declare function getIoTCoreEndpointUrl(): string;
2
+ //# sourceMappingURL=urls.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../../src/util/urls.ts"],"names":[],"mappings":"AAGA,wBAAgB,qBAAqB,WAiBpC"}
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getIoTCoreEndpointUrl = void 0;
4
+ const alwaysai_1 = require("alwaysai");
5
+ const alwayscli_1 = require("@alwaysai/alwayscli");
6
+ function getIoTCoreEndpointUrl() {
7
+ let iotCoreEndpointUrl = '';
8
+ switch ((0, alwaysai_1.getSystemId)()) {
9
+ case 'local':
10
+ case 'development':
11
+ iotCoreEndpointUrl = 'a170opbva29ts8-ats.iot.us-west-2.amazonaws.com';
12
+ break;
13
+ case 'qa':
14
+ iotCoreEndpointUrl = 'a3bff3qyyopgws-ats.iot.us-west-2.amazonaws.com';
15
+ break;
16
+ case 'production':
17
+ iotCoreEndpointUrl = 'a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com';
18
+ break;
19
+ default:
20
+ throw new alwayscli_1.CliTerseError(`Remote deployment not supported on ${(0, alwaysai_1.getSystemId)()}!`);
21
+ }
22
+ return iotCoreEndpointUrl;
23
+ }
24
+ exports.getIoTCoreEndpointUrl = getIoTCoreEndpointUrl;
25
+ //# sourceMappingURL=urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/util/urls.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AACvC,mDAAoD;AAEpD,SAAgB,qBAAqB;IACnC,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAC5B,QAAQ,IAAA,sBAAW,GAAE,EAAE;QACrB,KAAK,OAAO,CAAC;QACb,KAAK,aAAa;YAChB,kBAAkB,GAAG,gDAAgD,CAAC;YACtE,MAAM;QACR,KAAK,IAAI;YACP,kBAAkB,GAAG,gDAAgD,CAAC;YACtE,MAAM;QACR,KAAK,YAAY;YACf,kBAAkB,GAAG,gDAAgD,CAAC;YACtE,MAAM;QACR;YACE,MAAM,IAAI,yBAAa,CAAC,sCAAsC,IAAA,sBAAW,GAAE,GAAG,CAAC,CAAC;KACnF;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAjBD,sDAiBC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@alwaysai/device-agent",
3
3
  "description": "The alwaysAI Device Agent",
4
- "version": "0.0.2",
4
+ "version": "0.0.3",
5
5
  "main": "lib/exports.js",
6
6
  "types": "lib/exports.d.ts",
7
7
  "bin": {
@@ -33,7 +33,8 @@
33
33
  "@types/rimraf": "3.0.2",
34
34
  "@types/signal-exit": "3.0.1",
35
35
  "@types/tar": "6.1.1",
36
- "alwaysai": "1.4.5",
36
+ "aws-iot-device-sdk": "2.2.12",
37
+ "alwaysai": "1.5.1",
37
38
  "docker-compose": "0.23.17",
38
39
  "express": "4.17.3",
39
40
  "fp-ts": "2.11.5",
package/readme.md CHANGED
@@ -16,14 +16,19 @@ $ npm run build
16
16
 
17
17
  ## Usage
18
18
 
19
- There are two modes of operation, CLI which is great for testing new features, and the device-hosted web dashboard.
19
+ There are three modes of operation: CLI, which is great for testing new features, the device-hosted web dashboard, and the IoT Core cloud connection.
20
20
 
21
- To enable the CLI, set the following environment variable:
21
+ To enable the cloud IoT Core connection, set the following environment variable:
22
22
  ```
23
- export ALWAYSAI_DEVICE_AGENT_MODE="cli"
23
+ export ALWAYSAI_DEVICE_AGENT_MODE="cloud"
24
24
  ```
25
25
 
26
- Any other value will run the device-hosted web dashboard
26
+ To enable the device-hosted web dashboard, set the following environment variable:
27
+ ```
28
+ export ALWAYSAI_DEVICE_AGENT_MODE="web"
29
+ ```
30
+
31
+ Any other value will run the CLI.
27
32
 
28
33
  On Mac you need to override the OS to remove some usage restrictions:
29
34
  ```
@@ -101,4 +106,10 @@ You can start the web dashboard by running:
101
106
  node lib
102
107
  ```
103
108
 
104
- And clicking the link that comes up.
109
+ And clicking the link that comes up.
110
+
111
+ If you are developing new functionality for the cli in tandem with the device agent, you can run
112
+ ```
113
+ npm i --save /path/to/your/cli/repo
114
+ ```
115
+ Remember to not commit the package.json, or revert it when you are done developing a feature
@@ -1,7 +1,10 @@
1
1
  import compose from 'docker-compose';
2
2
  import * as rimraf from 'rimraf';
3
3
  import * as fs from 'fs';
4
+ import { fetchAppReleaseHistory } from 'alwaysai';
5
+ import { join } from 'path';
4
6
 
7
+ import { runCliCmd } from '../util/run-cli-cmd';
5
8
  import { runDockerLogin } from '../docker/docker-cmd';
6
9
  import { JsSpawner } from '../util/spawner/js-spawner';
7
10
  import { copyDir } from '../util/copy-dir';
@@ -19,6 +22,10 @@ const BACKUP_EXT = '.bak';
19
22
  export type AppDetails = { projectId: string; version: string };
20
23
 
21
24
  export async function getInstalledApps(): Promise<AppDetails[]> {
25
+ if (!fs.existsSync(APP_ROOT)) {
26
+ return [];
27
+ }
28
+
22
29
  const projectIds = fs.readdirSync(APP_ROOT).filter(file => {
23
30
  const isDir = fs.statSync(`${APP_ROOT}/${file}`).isDirectory();
24
31
  const isBak = `${APP_ROOT}/${file}`.includes(BACKUP_EXT);
@@ -55,15 +62,31 @@ export async function rollbackApp(props: { projectId: string }) {
55
62
  console.log(`Rolled back app ${projectId} to previous version`);
56
63
  }
57
64
 
65
+ export async function listAppReleases(props: { projectId: string }) {
66
+ const { projectId } = props;
67
+ const releaseHistory = await fetchAppReleaseHistory(projectId);
68
+ return releaseHistory;
69
+ }
70
+
71
+ export async function listAppLatestRelease(props: { projectId: string }) {
72
+ const { projectId } = props;
73
+ const releaseHistory = await fetchAppReleaseHistory(projectId);
74
+ if (releaseHistory.length >= 1) {
75
+ return releaseHistory[0]['releaseHash'];
76
+ }
77
+ return undefined;
78
+ }
79
+
58
80
  export async function installApp(props: {
59
81
  projectId: string;
60
- appPkg: NodeJS.ReadableStream;
61
- version: string;
82
+ releaseHash: string;
62
83
  }): Promise<void> {
63
- const { projectId, appPkg, version } = props;
84
+ const { projectId, releaseHash } = props;
64
85
  console.log(`Installing ${projectId}`);
65
86
  const appDir = getAppDir(projectId);
87
+ const TEMP_DIR = join(APP_ROOT, 'temp');
66
88
  const spawner = JsSpawner();
89
+ await spawner.mkdirp(TEMP_DIR);
67
90
  // TODO Check valid projectId
68
91
  // Check if app is installed
69
92
  if (await isAppInstalled({ appDir })) {
@@ -74,14 +97,30 @@ export async function installApp(props: {
74
97
  // Create app directory
75
98
  await spawner.mkdirp(appDir);
76
99
 
100
+ // download the application
101
+ await runCliCmd({
102
+ cmd: [
103
+ 'release',
104
+ 'pull',
105
+ '--yes',
106
+ '--project',
107
+ projectId,
108
+ '--releaseHash',
109
+ releaseHash,
110
+ ],
111
+ cwd: TEMP_DIR,
112
+ });
113
+
77
114
  // Unpack app package and move to install dir
78
- await spawner.untar(appPkg, appDir);
115
+ await spawner.untar(fs.createReadStream(join(TEMP_DIR, `${releaseHash}.tgz`)), appDir);
79
116
  console.log(`Unpacked application to ${appDir}`);
80
117
 
81
- await setAppVersion({ appDir, version });
118
+ await setAppVersion({ appDir, version: releaseHash });
82
119
 
83
120
  await buildApp({ appDir });
84
121
 
122
+ await spawner.rimraf(TEMP_DIR);
123
+
85
124
  console.log(`Installed ${projectId} to ${appDir}`);
86
125
  }
87
126
 
@@ -99,6 +138,7 @@ export async function getAppStatus(props: { projectId: string }): Promise<AppSta
99
138
 
100
139
  // Check if app is running
101
140
  const output = await compose.ps({ cwd: appDir });
141
+
102
142
  if (output.exitCode !== 0) {
103
143
  throw new Error(
104
144
  `Failed to get application status! stdout=${output.out} stderr=${output.err}`,
@@ -0,0 +1,53 @@
1
+ const awsIot = require('aws-iot-device-sdk');
2
+ import { getIoTCoreEndpointUrl } from '../util/urls';
3
+ import {
4
+ getPrivateKeyFilePath,
5
+ getCertificateFilePath,
6
+ getRootCertificateFilePath,
7
+ } from '../util/directories';
8
+
9
+ export class DeviceAgentCloudConnection {
10
+ public device = awsIot.device;
11
+ private clientId = 'DEVICE_AGENT'; // TODO: use CLI to get either the username or the device ID? how do we determine the device ID in this case?
12
+ private host = getIoTCoreEndpointUrl();
13
+
14
+ constructor() {
15
+ this.device = awsIot.device({
16
+ keyPath: getPrivateKeyFilePath(),
17
+ certPath: getCertificateFilePath(),
18
+ caPath: getRootCertificateFilePath(),
19
+ clientId: this.clientId,
20
+ host: this.host,
21
+ });
22
+
23
+ // TODO: subscribe to topics here
24
+ this.device.subscribe('command');
25
+ }
26
+
27
+ public getClientId() {
28
+ return this.clientId;
29
+ }
30
+
31
+ public publishMessage(topic: string, message: string) {
32
+ console.log('publishing message ', message);
33
+ this.device.publish(topic, JSON.stringify({ message }));
34
+ }
35
+ }
36
+
37
+ export function runDeviceAgentCloudInterface() {
38
+ const deviceAgent = new DeviceAgentCloudConnection();
39
+
40
+ deviceAgent.device.on('connect', function() {
41
+ deviceAgent.publishMessage('connection', deviceAgent.getClientId());
42
+ console.log('Device Agent has connected to the cloud');
43
+ });
44
+
45
+ deviceAgent.device.on('disconnect', function() {
46
+ console.log('Device Agent has been disconnected from the cloud');
47
+ });
48
+
49
+ deviceAgent.device.on('message', function(topic, payload) {
50
+ // TODO: parse/determine action based on topic/payload here
51
+ console.log('message', topic, payload.toString());
52
+ });
53
+ }
package/src/constants.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { resolve, join, posix } from 'path';
1
+ import { join, posix } from 'path';
2
2
  import { homedir } from 'os';
3
3
  const os = require('os');
4
4
  const path = require('path');
@@ -10,7 +10,10 @@ export const AAI_DIR = path.join(os.homedir(), '.alwaysai');
10
10
  export const DEVICE_TOKEN_FILE_NAME = 'alwaysai.credentials.json';
11
11
  export const DEVICE_CONFIG_FILE_NAME = 'alwaysai.config.json';
12
12
 
13
+ export const DEV_HOST_TOKEN_DIR = join(homedir(), '.config', 'alwaysai');
13
14
  export const DEVICE_TOKEN_DIR_LINUX = posix.join('~', '.config', 'alwaysai');
15
+
16
+ export const DEV_HOST_CERT_AND_KEY_DIR = join(DEV_HOST_TOKEN_DIR, 'certificates');
14
17
  export const DEVICE_CERT_AND_KEY_DIR_LINUX = posix.join(
15
18
  DEVICE_TOKEN_DIR_LINUX,
16
19
  'certificates',
package/src/index.ts CHANGED
@@ -7,12 +7,16 @@
7
7
  import { runCliAndExit } from '@alwaysai/alwayscli';
8
8
  import { root } from './root';
9
9
  import { runWebInterface } from './web/web-interface';
10
+ import { runDeviceAgentCloudInterface } from './cloud-connection/device-agent-cloud-connection';
10
11
 
11
12
  if (module === require.main) {
12
13
  console.log('Starting alwaysAI Device Agent');
13
- if (process.env.ALWAYSAI_DEVICE_AGENT_MODE === 'cli') {
14
- runCliAndExit(root, {});
15
- } else {
14
+
15
+ if (process.env.ALWAYSAI_DEVICE_AGENT_MODE === 'cloud') {
16
+ runDeviceAgentCloudInterface();
17
+ } else if (process.env.ALWAYSAI_DEVICE_AGENT_MODE === 'web') {
16
18
  runWebInterface();
19
+ } else {
20
+ runCliAndExit(root, {});
17
21
  }
18
22
  }
@@ -8,6 +8,8 @@ import {
8
8
  startApp,
9
9
  stopApp,
10
10
  uninstallApp,
11
+ listAppReleases,
12
+ listAppLatestRelease,
11
13
  } from '../../application-control/application-control';
12
14
  import { addModel, removeModel, updateModels } from '../../application-control/models';
13
15
 
@@ -21,6 +23,45 @@ export const listAppsCliLeaf = CliLeaf({
21
23
  },
22
24
  });
23
25
 
26
+ export const listAppReleasesCliLeaf = CliLeaf({
27
+ name: 'list-releases',
28
+ description: 'List all releases for a given app',
29
+ namedInputs: {
30
+ project: CliStringInput({
31
+ description: 'Project Id',
32
+ }),
33
+ },
34
+ async action(_, opts) {
35
+ const { project } = opts;
36
+ if (project === undefined) {
37
+ throw new CliTerseError('--project is required');
38
+ }
39
+ const releaseHistory = await listAppReleases({ projectId: project });
40
+ console.log(releaseHistory);
41
+ },
42
+ });
43
+
44
+ export const listAppLatestReleaseCliLeaf = CliLeaf({
45
+ name: 'list-latest-release',
46
+ description: 'List the latest release hash for a given app',
47
+ namedInputs: {
48
+ project: CliStringInput({
49
+ description: 'Project Id',
50
+ }),
51
+ },
52
+ async action(_, opts) {
53
+ const { project } = opts;
54
+ if (project === undefined) {
55
+ throw new CliTerseError('--project is required');
56
+ }
57
+ const latestReleaseHash = await listAppLatestRelease({ projectId: project });
58
+ if (latestReleaseHash === undefined) {
59
+ throw new CliTerseError('This application has not been published yet');
60
+ }
61
+ console.log(latestReleaseHash);
62
+ },
63
+ });
64
+
24
65
  export const installAppCliLeaf = CliLeaf({
25
66
  name: 'install',
26
67
  description: 'Install an alwaysAI app from a project',
@@ -28,17 +69,23 @@ export const installAppCliLeaf = CliLeaf({
28
69
  project: CliStringInput({
29
70
  description: 'Project Id',
30
71
  }),
31
- dockerComposeFile: CliStringInput({
32
- description: 'Contents of the docker compose file',
72
+ releaseHash: CliStringInput({
73
+ description: 'Release Hash',
33
74
  }),
34
75
  },
35
76
  async action(_, opts) {
36
- const { project } = opts;
77
+ const project = opts.project;
78
+ let releaseHash = opts.releaseHash;
37
79
  if (project === undefined) {
38
80
  throw new CliTerseError('--project is required');
39
81
  }
40
- // await installApp({ projectId: project, appPkg });
41
- throw new CliTerseError('Install not yet implemented!');
82
+ if (releaseHash === undefined) {
83
+ releaseHash = await listAppLatestRelease({ projectId: project });
84
+ }
85
+ if (releaseHash === undefined) {
86
+ throw new CliTerseError('This application has not been published yet');
87
+ }
88
+ await installApp({ projectId: project, releaseHash });
42
89
  },
43
90
  });
44
91
 
@@ -11,6 +11,8 @@ import {
11
11
  removeModelCliLeaf,
12
12
  updateModelsCliLeaf,
13
13
  getAppLogsCliLeaf,
14
+ listAppReleasesCliLeaf,
15
+ listAppLatestReleaseCliLeaf,
14
16
  } from './app';
15
17
 
16
18
  export const appCliBranch = CliBranch({
@@ -18,6 +20,8 @@ export const appCliBranch = CliBranch({
18
20
  description: 'Manage alwaysAI applications',
19
21
  subcommands: [
20
22
  listAppsCliLeaf,
23
+ listAppReleasesCliLeaf,
24
+ listAppLatestReleaseCliLeaf,
21
25
  installAppCliLeaf,
22
26
  getAppStatusCliLeaf,
23
27
  startAppCliLeaf,
@@ -1,11 +1,11 @@
1
1
  import { appCliBranch } from './app/index';
2
2
  import { getDeviceInfoCliLeaf } from './device-control';
3
3
  import { loginCliLeaf } from './login';
4
- import { installTestAppCliLeaf } from './test-app';
4
+ // import { installTestAppCliLeaf } from './test-app';
5
5
 
6
6
  export const subcommands = [
7
7
  loginCliLeaf,
8
8
  appCliBranch,
9
9
  getDeviceInfoCliLeaf,
10
- installTestAppCliLeaf,
10
+ // installTestAppCliLeaf,
11
11
  ];
@@ -1,30 +1,30 @@
1
- import { CliLeaf, CliStringInput } from '@alwaysai/alwayscli';
1
+ import { CliLeaf, CliStringInput, CliTerseError } from '@alwaysai/alwayscli';
2
2
  const path = require('path');
3
3
  import { installApp } from '../application-control/application-control';
4
4
  import { JsSpawner } from '../util/spawner/js-spawner';
5
5
 
6
- export const installTestAppCliLeaf = CliLeaf({
7
- name: 'install-test-app',
8
- description: 'Install a test application',
9
- namedInputs: {
10
- project: CliStringInput({
11
- description: 'Project Id',
12
- }),
13
- version: CliStringInput({
14
- description: 'Version',
15
- }),
16
- },
17
- async action(_, opts) {
18
- const { project, version } = opts;
19
- const postfix = Math.random()
20
- .toString()
21
- .slice(2, 14);
22
- const projectId = project ? project : `16ad11bb-8c3a-4a15-923e-${postfix}`;
23
- const releaseVersion = version ? version : 'f43e816b30aa612f103fe73314f9716a436ce4f5';
24
- // Package test app
25
- const appDir = path.join('test', 'test-app');
26
- const spawner = JsSpawner({ path: appDir });
27
- const appPkg = await spawner.tar(...(await spawner.readdir()));
28
- await installApp({ projectId, appPkg, version: releaseVersion });
29
- },
30
- });
6
+ // export const installTestAppCliLeaf = CliLeaf({
7
+ // name: 'install-test-app',
8
+ // description: 'Install a test application',
9
+ // namedInputs: {
10
+ // project: CliStringInput({
11
+ // description: 'Project Id',
12
+ // }),
13
+ // version: CliStringInput({
14
+ // description: 'Version',
15
+ // }),
16
+ // },
17
+ // async action(_, opts) {
18
+ // const { project, version } = opts;
19
+ // const postfix = Math.random()
20
+ // .toString()
21
+ // .slice(2, 14);
22
+ // const projectId = project ? project : `16ad11bb-8c3a-4a15-923e-${postfix}`;
23
+ // const releaseVersion = version ? version : 'f43e816b30aa612f103fe73314f9716a436ce4f5';
24
+ // // Package test app
25
+ // const appDir = path.join('test', 'test-app');
26
+ // const spawner = JsSpawner({ path: appDir });
27
+ // const appPkg = await spawner.tar(...(await spawner.readdir()));
28
+ // await installApp({ projectId, appPkg, version: releaseVersion });
29
+ // },
30
+ // });
@@ -0,0 +1,30 @@
1
+ const os = require('os');
2
+ import { join } from 'path';
3
+ import {
4
+ DEVICE_CERT_AND_KEY_DIR_LINUX,
5
+ DEV_HOST_CERT_AND_KEY_DIR,
6
+ DEVICE_CERTIFICATE_FILE_NAME,
7
+ DEVICE_PRIVATE_KEY_FILE_NAME,
8
+ DEVICE_ROOT_CERT_FILE_NAME,
9
+ } from '../constants';
10
+
11
+ const certAndKeyDir = getCertAndKeyDir();
12
+
13
+ export function getCertAndKeyDir() {
14
+ if (os.type() === 'Darwin' || os.type() === 'Windows_NT') {
15
+ return DEV_HOST_CERT_AND_KEY_DIR;
16
+ }
17
+ return DEVICE_CERT_AND_KEY_DIR_LINUX;
18
+ }
19
+
20
+ export function getPrivateKeyFilePath() {
21
+ return join(certAndKeyDir, DEVICE_PRIVATE_KEY_FILE_NAME);
22
+ }
23
+
24
+ export function getCertificateFilePath() {
25
+ return join(certAndKeyDir, DEVICE_CERTIFICATE_FILE_NAME);
26
+ }
27
+
28
+ export function getRootCertificateFilePath() {
29
+ return join(certAndKeyDir, DEVICE_ROOT_CERT_FILE_NAME);
30
+ }
@@ -0,0 +1,21 @@
1
+ import { getSystemId } from 'alwaysai';
2
+ import { CliTerseError } from '@alwaysai/alwayscli';
3
+
4
+ export function getIoTCoreEndpointUrl() {
5
+ let iotCoreEndpointUrl = '';
6
+ switch (getSystemId()) {
7
+ case 'local':
8
+ case 'development':
9
+ iotCoreEndpointUrl = 'a170opbva29ts8-ats.iot.us-west-2.amazonaws.com';
10
+ break;
11
+ case 'qa':
12
+ iotCoreEndpointUrl = 'a3bff3qyyopgws-ats.iot.us-west-2.amazonaws.com';
13
+ break;
14
+ case 'production':
15
+ iotCoreEndpointUrl = 'a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com';
16
+ break;
17
+ default:
18
+ throw new CliTerseError(`Remote deployment not supported on ${getSystemId()}!`);
19
+ }
20
+ return iotCoreEndpointUrl;
21
+ }