@alwaysai/device-agent 0.0.1-2.1-beta-provision

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 (192) hide show
  1. package/lib/application-control/backup.d.ts +8 -0
  2. package/lib/application-control/backup.d.ts.map +1 -0
  3. package/lib/application-control/backup.js +37 -0
  4. package/lib/application-control/backup.js.map +1 -0
  5. package/lib/application-control/config.d.ts +17 -0
  6. package/lib/application-control/config.d.ts.map +1 -0
  7. package/lib/application-control/config.js +62 -0
  8. package/lib/application-control/config.js.map +1 -0
  9. package/lib/application-control/environment-variables.d.ts +9 -0
  10. package/lib/application-control/environment-variables.d.ts.map +1 -0
  11. package/lib/application-control/environment-variables.js +73 -0
  12. package/lib/application-control/environment-variables.js.map +1 -0
  13. package/lib/application-control/index.d.ts +10 -0
  14. package/lib/application-control/index.d.ts.map +1 -0
  15. package/lib/application-control/index.js +32 -0
  16. package/lib/application-control/index.js.map +1 -0
  17. package/lib/application-control/install.d.ts +22 -0
  18. package/lib/application-control/install.d.ts.map +1 -0
  19. package/lib/application-control/install.js +156 -0
  20. package/lib/application-control/install.js.map +1 -0
  21. package/lib/application-control/models.d.ts +23 -0
  22. package/lib/application-control/models.d.ts.map +1 -0
  23. package/lib/application-control/models.js +154 -0
  24. package/lib/application-control/models.js.map +1 -0
  25. package/lib/application-control/status.d.ts +27 -0
  26. package/lib/application-control/status.d.ts.map +1 -0
  27. package/lib/application-control/status.js +153 -0
  28. package/lib/application-control/status.js.map +1 -0
  29. package/lib/application-control/types.d.ts +5 -0
  30. package/lib/application-control/types.d.ts.map +1 -0
  31. package/lib/application-control/types.js +3 -0
  32. package/lib/application-control/types.js.map +1 -0
  33. package/lib/application-control/utils.d.ts +14 -0
  34. package/lib/application-control/utils.d.ts.map +1 -0
  35. package/lib/application-control/utils.js +82 -0
  36. package/lib/application-control/utils.js.map +1 -0
  37. package/lib/cloud-connection/device-agent-cloud-connection.d.ts +51 -0
  38. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -0
  39. package/lib/cloud-connection/device-agent-cloud-connection.js +490 -0
  40. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -0
  41. package/lib/cloud-connection/device-agent.d.ts +21 -0
  42. package/lib/cloud-connection/device-agent.d.ts.map +1 -0
  43. package/lib/cloud-connection/device-agent.js +65 -0
  44. package/lib/cloud-connection/device-agent.js.map +1 -0
  45. package/lib/device-control/device-control.d.ts +4 -0
  46. package/lib/device-control/device-control.d.ts.map +1 -0
  47. package/lib/device-control/device-control.js +20 -0
  48. package/lib/device-control/device-control.js.map +1 -0
  49. package/lib/docker/docker-cmd.d.ts +4 -0
  50. package/lib/docker/docker-cmd.d.ts.map +1 -0
  51. package/lib/docker/docker-cmd.js +16 -0
  52. package/lib/docker/docker-cmd.js.map +1 -0
  53. package/lib/docker/docker-compose-cmd.d.ts +5 -0
  54. package/lib/docker/docker-compose-cmd.d.ts.map +1 -0
  55. package/lib/docker/docker-compose-cmd.js +16 -0
  56. package/lib/docker/docker-compose-cmd.js.map +1 -0
  57. package/lib/endpoints.d.ts +3 -0
  58. package/lib/endpoints.d.ts.map +1 -0
  59. package/lib/endpoints.js +28 -0
  60. package/lib/endpoints.js.map +1 -0
  61. package/lib/environment.d.ts +7 -0
  62. package/lib/environment.d.ts.map +1 -0
  63. package/lib/environment.js +24 -0
  64. package/lib/environment.js.map +1 -0
  65. package/lib/index.d.ts +3 -0
  66. package/lib/index.d.ts.map +1 -0
  67. package/lib/index.js +26 -0
  68. package/lib/index.js.map +1 -0
  69. package/lib/infrastructure/agent-config.d.ts +73 -0
  70. package/lib/infrastructure/agent-config.d.ts.map +1 -0
  71. package/lib/infrastructure/agent-config.js +175 -0
  72. package/lib/infrastructure/agent-config.js.map +1 -0
  73. package/lib/infrastructure/agent-config.test.d.ts +2 -0
  74. package/lib/infrastructure/agent-config.test.d.ts.map +1 -0
  75. package/lib/infrastructure/agent-config.test.js +182 -0
  76. package/lib/infrastructure/agent-config.test.js.map +1 -0
  77. package/lib/infrastructure/certificates-and-tokens.d.ts +6 -0
  78. package/lib/infrastructure/certificates-and-tokens.d.ts.map +1 -0
  79. package/lib/infrastructure/certificates-and-tokens.js +37 -0
  80. package/lib/infrastructure/certificates-and-tokens.js.map +1 -0
  81. package/lib/infrastructure/urls.d.ts +2 -0
  82. package/lib/infrastructure/urls.d.ts.map +1 -0
  83. package/lib/infrastructure/urls.js +25 -0
  84. package/lib/infrastructure/urls.js.map +1 -0
  85. package/lib/root.d.ts +2 -0
  86. package/lib/root.d.ts.map +1 -0
  87. package/lib/root.js +12 -0
  88. package/lib/root.js.map +1 -0
  89. package/lib/subcommands/app/app.d.ts +59 -0
  90. package/lib/subcommands/app/app.d.ts.map +1 -0
  91. package/lib/subcommands/app/app.js +317 -0
  92. package/lib/subcommands/app/app.js.map +1 -0
  93. package/lib/subcommands/app/index.d.ts +2 -0
  94. package/lib/subcommands/app/index.d.ts.map +1 -0
  95. package/lib/subcommands/app/index.js +30 -0
  96. package/lib/subcommands/app/index.js.map +1 -0
  97. package/lib/subcommands/device/clean.d.ts +2 -0
  98. package/lib/subcommands/device/clean.d.ts.map +1 -0
  99. package/lib/subcommands/device/clean.js +20 -0
  100. package/lib/subcommands/device/clean.js.map +1 -0
  101. package/lib/subcommands/device/device.d.ts +6 -0
  102. package/lib/subcommands/device/device.d.ts.map +1 -0
  103. package/lib/subcommands/device/device.js +92 -0
  104. package/lib/subcommands/device/device.js.map +1 -0
  105. package/lib/subcommands/device/index.d.ts +2 -0
  106. package/lib/subcommands/device/index.d.ts.map +1 -0
  107. package/lib/subcommands/device/index.js +12 -0
  108. package/lib/subcommands/device/index.js.map +1 -0
  109. package/lib/subcommands/get-model-package.d.ts +5 -0
  110. package/lib/subcommands/get-model-package.d.ts.map +1 -0
  111. package/lib/subcommands/get-model-package.js +35 -0
  112. package/lib/subcommands/get-model-package.js.map +1 -0
  113. package/lib/subcommands/index.d.ts +9 -0
  114. package/lib/subcommands/index.d.ts.map +1 -0
  115. package/lib/subcommands/index.js +14 -0
  116. package/lib/subcommands/index.js.map +1 -0
  117. package/lib/subcommands/login.d.ts +6 -0
  118. package/lib/subcommands/login.d.ts.map +1 -0
  119. package/lib/subcommands/login.js +35 -0
  120. package/lib/subcommands/login.js.map +1 -0
  121. package/lib/util/clean-certs.d.ts +2 -0
  122. package/lib/util/clean-certs.d.ts.map +1 -0
  123. package/lib/util/clean-certs.js +16 -0
  124. package/lib/util/clean-certs.js.map +1 -0
  125. package/lib/util/copy-dir.d.ts +5 -0
  126. package/lib/util/copy-dir.d.ts.map +1 -0
  127. package/lib/util/copy-dir.js +16 -0
  128. package/lib/util/copy-dir.js.map +1 -0
  129. package/lib/util/directories.d.ts +23 -0
  130. package/lib/util/directories.d.ts.map +1 -0
  131. package/lib/util/directories.js +50 -0
  132. package/lib/util/directories.js.map +1 -0
  133. package/lib/util/get-device-id.d.ts +2 -0
  134. package/lib/util/get-device-id.d.ts.map +1 -0
  135. package/lib/util/get-device-id.js +24 -0
  136. package/lib/util/get-device-id.js.map +1 -0
  137. package/lib/util/http-client.d.ts +3 -0
  138. package/lib/util/http-client.d.ts.map +1 -0
  139. package/lib/util/http-client.js +30 -0
  140. package/lib/util/http-client.js.map +1 -0
  141. package/lib/util/logger.d.ts +4 -0
  142. package/lib/util/logger.d.ts.map +1 -0
  143. package/lib/util/logger.js +24 -0
  144. package/lib/util/logger.js.map +1 -0
  145. package/lib/util/run-in-dir.d.ts +2 -0
  146. package/lib/util/run-in-dir.d.ts.map +1 -0
  147. package/lib/util/run-in-dir.js +17 -0
  148. package/lib/util/run-in-dir.js.map +1 -0
  149. package/lib/util/sleep.d.ts +2 -0
  150. package/lib/util/sleep.d.ts.map +1 -0
  151. package/lib/util/sleep.js +9 -0
  152. package/lib/util/sleep.js.map +1 -0
  153. package/package.json +98 -0
  154. package/readme.md +219 -0
  155. package/src/application-control/backup.ts +36 -0
  156. package/src/application-control/config.ts +61 -0
  157. package/src/application-control/environment-variables.ts +74 -0
  158. package/src/application-control/index.ts +45 -0
  159. package/src/application-control/install.ts +206 -0
  160. package/src/application-control/models.ts +194 -0
  161. package/src/application-control/status.ts +187 -0
  162. package/src/application-control/types.ts +1 -0
  163. package/src/application-control/utils.ts +95 -0
  164. package/src/cloud-connection/device-agent-cloud-connection.ts +673 -0
  165. package/src/cloud-connection/device-agent.ts +120 -0
  166. package/src/device-control/device-control.ts +16 -0
  167. package/src/docker/docker-cmd.ts +12 -0
  168. package/src/docker/docker-compose-cmd.ts +12 -0
  169. package/src/endpoints.ts +24 -0
  170. package/src/environment.ts +28 -0
  171. package/src/index.ts +26 -0
  172. package/src/infrastructure/agent-config.test.ts +199 -0
  173. package/src/infrastructure/agent-config.ts +208 -0
  174. package/src/infrastructure/certificates-and-tokens.ts +47 -0
  175. package/src/infrastructure/urls.ts +21 -0
  176. package/src/root.ts +11 -0
  177. package/src/subcommands/app/app.ts +337 -0
  178. package/src/subcommands/app/index.ts +46 -0
  179. package/src/subcommands/device/clean.ts +16 -0
  180. package/src/subcommands/device/device.ts +126 -0
  181. package/src/subcommands/device/index.ts +9 -0
  182. package/src/subcommands/get-model-package.ts +33 -0
  183. package/src/subcommands/index.ts +11 -0
  184. package/src/subcommands/login.ts +33 -0
  185. package/src/util/clean-certs.ts +12 -0
  186. package/src/util/copy-dir.ts +12 -0
  187. package/src/util/directories.ts +82 -0
  188. package/src/util/get-device-id.ts +22 -0
  189. package/src/util/http-client.ts +35 -0
  190. package/src/util/logger.ts +28 -0
  191. package/src/util/run-in-dir.ts +15 -0
  192. package/src/util/sleep.ts +5 -0
@@ -0,0 +1,8 @@
1
+ export declare const BACKUP_EXT = ".bak";
2
+ export declare function createAppBackup(props: {
3
+ projectId: string;
4
+ }): Promise<void>;
5
+ export declare function rollbackApp(props: {
6
+ projectId: string;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/application-control/backup.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,SAAS,CAAC;AAEjC,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAQjE;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAe7D"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rollbackApp = exports.createAppBackup = exports.BACKUP_EXT = void 0;
4
+ const rimraf = require("rimraf");
5
+ const copy_dir_1 = require("../util/copy-dir");
6
+ const utils_1 = require("./utils");
7
+ const agent_config_1 = require("../infrastructure/agent-config");
8
+ const logger_1 = require("../util/logger");
9
+ exports.BACKUP_EXT = '.bak';
10
+ async function createAppBackup(props) {
11
+ const { projectId } = props;
12
+ const appDir = (0, utils_1.getAppDir)(projectId);
13
+ const backupAppDir = `${appDir}${exports.BACKUP_EXT}`;
14
+ rimraf.sync(backupAppDir);
15
+ await (0, copy_dir_1.copyDir)({ srcPath: appDir, destPath: backupAppDir });
16
+ await (0, agent_config_1.AgentConfigFile)().setAppBackup({ projectId });
17
+ logger_1.logger.info(`Backed up app ${projectId} to ${backupAppDir}`);
18
+ }
19
+ exports.createAppBackup = createAppBackup;
20
+ async function rollbackApp(props) {
21
+ const { projectId } = props;
22
+ const config = await (0, agent_config_1.AgentConfigFile)().getAppBackup({ projectId });
23
+ if (!config) {
24
+ throw new Error(`Backup doesn't exist for ${projectId}`);
25
+ }
26
+ logger_1.logger.info(`Rolling back app ${projectId} to ${config.version}`);
27
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalling({ projectId, version: config.version });
28
+ const appDir = (0, utils_1.getAppDir)(projectId);
29
+ const backupAppDir = `${appDir}${exports.BACKUP_EXT}`;
30
+ rimraf.sync(appDir);
31
+ await (0, copy_dir_1.copyDir)({ srcPath: backupAppDir, destPath: appDir });
32
+ await (0, utils_1.buildApp)({ appDir });
33
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalled({ projectId, version: config.version });
34
+ logger_1.logger.info(`Rolled back app ${projectId} to ${config.version}`);
35
+ }
36
+ exports.rollbackApp = rollbackApp;
37
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/application-control/backup.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,+CAA2C;AAC3C,mCAA8C;AAC9C,iEAAiE;AAEjE,2CAAwC;AAE3B,QAAA,UAAU,GAAG,MAAM,CAAC;AAE1B,KAAK,UAAU,eAAe,CAAC,KAA4B;IAChE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,kBAAU,EAAE,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1B,MAAM,IAAA,kBAAO,EAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAA,8BAAe,GAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACpD,eAAM,CAAC,IAAI,CAAC,iBAAiB,SAAS,OAAO,YAAY,EAAE,CAAC,CAAC;AAC/D,CAAC;AARD,0CAQC;AAEM,KAAK,UAAU,WAAW,CAAC,KAA4B;IAC5D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACnE,IAAI,CAAC,MAAM,EAAE;QACX,MAAM,IAAI,KAAK,CAAC,4BAA4B,SAAS,EAAE,CAAC,CAAC;KAC1D;IACD,eAAM,CAAC,IAAI,CAAC,oBAAoB,SAAS,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAClE,MAAM,IAAA,8BAAe,GAAE,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,YAAY,GAAG,GAAG,MAAM,GAAG,kBAAU,EAAE,CAAC;IAC9C,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,IAAA,kBAAO,EAAC,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3D,MAAM,IAAA,gBAAQ,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3B,MAAM,IAAA,8BAAe,GAAE,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAChF,eAAM,CAAC,IAAI,CAAC,mBAAmB,SAAS,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;AACnE,CAAC;AAfD,kCAeC"}
@@ -0,0 +1,17 @@
1
+ import { AppConfig } from 'alwaysai/lib/core/app';
2
+ export declare function readAppCfg(props: {
3
+ projectId: string;
4
+ }): Promise<AppConfig>;
5
+ export declare function writeAppCfg(props: {
6
+ projectId: string;
7
+ appCfg: AppConfig;
8
+ }): Promise<void>;
9
+ export declare function updateAppConfig(appDir: string, newAppCfg: AppConfig): Promise<void>;
10
+ export declare function readDockerCompose(props: {
11
+ projectId: string;
12
+ }): Promise<any>;
13
+ export declare function writeDockerCompose(props: {
14
+ projectId: string;
15
+ dockerCompose: any;
16
+ }): Promise<void>;
17
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAe,MAAM,uBAAuB,CAAC;AAQ/D,wBAAsB,UAAU,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAQjF;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,SAAS,CAAA;CAAE,iBAQhF;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,iBAIzE;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,gBAUnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,GAAG,CAAC;CACpB,iBAWA"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeDockerCompose = exports.readDockerCompose = exports.updateAppConfig = exports.writeAppCfg = exports.readAppCfg = void 0;
4
+ const app_1 = require("alwaysai/lib/core/app");
5
+ const agent_config_1 = require("../infrastructure/agent-config");
6
+ const yaml_1 = require("yaml");
7
+ const utils_1 = require("./utils");
8
+ const util_1 = require("alwaysai/lib/util");
9
+ const docker_compose_1 = require("docker-compose");
10
+ const lodash_1 = require("lodash");
11
+ async function readAppCfg(props) {
12
+ const { projectId } = props;
13
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
14
+ throw new Error(`App ${projectId} is not ready!`);
15
+ }
16
+ const appDir = (0, utils_1.getAppDir)(projectId);
17
+ const appJson = (0, app_1.AppJsonFile)(appDir);
18
+ return appJson.read();
19
+ }
20
+ exports.readAppCfg = readAppCfg;
21
+ async function writeAppCfg(props) {
22
+ const { projectId, appCfg } = props;
23
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
24
+ throw new Error(`App ${projectId} is not ready!`);
25
+ }
26
+ const appDir = (0, utils_1.getAppDir)(projectId);
27
+ const appJson = (0, app_1.AppJsonFile)(appDir);
28
+ appJson.write(appCfg);
29
+ }
30
+ exports.writeAppCfg = writeAppCfg;
31
+ async function updateAppConfig(appDir, newAppCfg) {
32
+ const existingAppCfg = await readAppCfg({ projectId: appDir });
33
+ const appCfg = (0, lodash_1.assign)(existingAppCfg, (0, lodash_1.merge)(existingAppCfg, newAppCfg));
34
+ await writeAppCfg({ projectId: appDir, appCfg });
35
+ }
36
+ exports.updateAppConfig = updateAppConfig;
37
+ async function readDockerCompose(props) {
38
+ const { projectId } = props;
39
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
40
+ throw new Error(`App ${projectId} is not ready!`);
41
+ }
42
+ const appDir = (0, utils_1.getAppDir)(projectId);
43
+ const spawner = (0, util_1.JsSpawner)({ path: appDir });
44
+ const composeContents = await spawner.readFile('docker-compose.yaml');
45
+ const composeParsed = (0, yaml_1.parse)(composeContents);
46
+ return composeParsed;
47
+ }
48
+ exports.readDockerCompose = readDockerCompose;
49
+ async function writeDockerCompose(props) {
50
+ const { projectId, dockerCompose } = props;
51
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
52
+ throw new Error(`App ${projectId} is not ready!`);
53
+ }
54
+ const appDir = (0, utils_1.getAppDir)(projectId);
55
+ const spawner = (0, util_1.JsSpawner)({ path: appDir });
56
+ const composeOutput = (0, yaml_1.stringify)(dockerCompose);
57
+ // Validate new contents
58
+ await docker_compose_1.default.config({ cwd: appDir, configAsString: composeOutput });
59
+ await spawner.writeFile('docker-compose.yaml', composeOutput);
60
+ }
61
+ exports.writeDockerCompose = writeDockerCompose;
62
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":";;;AAAA,+CAA+D;AAC/D,iEAAiE;AACjE,+BAAwC;AACxC,mCAAoC;AACpC,4CAA8C;AAC9C,mDAAqC;AACrC,mCAAuC;AAEhC,KAAK,UAAU,UAAU,CAAC,KAA4B;IAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;QACxD,MAAM,IAAI,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,CAAC;KACnD;IACD,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,iBAAW,EAAC,MAAM,CAAC,CAAC;IACpC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AARD,gCAQC;AAEM,KAAK,UAAU,WAAW,CAAC,KAA+C;IAC/E,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACpC,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;QACxD,MAAM,IAAI,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,CAAC;KACnD;IACD,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,iBAAW,EAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AARD,kCAQC;AAEM,KAAK,UAAU,eAAe,CAAC,MAAc,EAAE,SAAoB;IACxE,MAAM,cAAc,GAAG,MAAM,UAAU,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,IAAA,eAAM,EAAC,cAAc,EAAE,IAAA,cAAK,EAAC,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;IACxE,MAAM,WAAW,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACnD,CAAC;AAJD,0CAIC;AAEM,KAAK,UAAU,iBAAiB,CAAC,KAA4B;IAClE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;QACxD,MAAM,IAAI,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,CAAC;KACnD;IACD,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,gBAAS,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,IAAA,YAAK,EAAC,eAAe,CAAC,CAAC;IAC7C,OAAO,aAAa,CAAC;AACvB,CAAC;AAVD,8CAUC;AAEM,KAAK,UAAU,kBAAkB,CAAC,KAGxC;IACC,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAC3C,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;QACxD,MAAM,IAAI,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,CAAC;KACnD;IACD,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,OAAO,GAAG,IAAA,gBAAS,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,MAAM,aAAa,GAAG,IAAA,gBAAS,EAAC,aAAa,CAAC,CAAC;IAC/C,wBAAwB;IACxB,MAAM,wBAAO,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,CAAC;IACrE,MAAM,OAAO,CAAC,SAAS,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;AAChE,CAAC;AAdD,gDAcC"}
@@ -0,0 +1,9 @@
1
+ export declare function setEnv(props: {
2
+ projectId: string;
3
+ vars: string[];
4
+ service?: string;
5
+ }): Promise<void>;
6
+ export declare function getAllEnvs(props: {
7
+ projectId: string;
8
+ }): Promise<{}>;
9
+ //# sourceMappingURL=environment-variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAOA,wBAAsB,MAAM,CAAC,KAAK,EAAE;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,iBA4BA;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,eAgC5D"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAllEnvs = exports.setEnv = void 0;
4
+ const util_1 = require("alwaysai/lib/util");
5
+ const agent_config_1 = require("../infrastructure/agent-config");
6
+ const config_1 = require("./config");
7
+ const utils_1 = require("./utils");
8
+ async function setEnv(props) {
9
+ const { projectId, vars } = props;
10
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
11
+ throw new Error(`App ${projectId} is not ready!`);
12
+ }
13
+ const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
14
+ if ('services' in composeParsed) {
15
+ let services = Object.keys(composeParsed['services']);
16
+ if (props.service) {
17
+ if (services.includes(props.service)) {
18
+ services = [props.service];
19
+ }
20
+ else {
21
+ throw new Error(`Service ${props.service} not found in ${services}`);
22
+ }
23
+ }
24
+ for (const s of services) {
25
+ const service = composeParsed['services'][s];
26
+ // The environment field overrides the env files, so by appending to
27
+ // the environment list we can assure the value will be used
28
+ if ('environment' in service) {
29
+ const environment = service['environment'];
30
+ composeParsed['services'][s]['environment'] = environment.concat(vars);
31
+ }
32
+ else {
33
+ composeParsed['services'][s]['environment'] = vars;
34
+ }
35
+ }
36
+ }
37
+ await (0, config_1.writeDockerCompose)({ projectId, dockerCompose: composeParsed });
38
+ }
39
+ exports.setEnv = setEnv;
40
+ async function getAllEnvs(props) {
41
+ const { projectId } = props;
42
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
43
+ throw new Error(`App ${projectId} is not ready!`);
44
+ }
45
+ const appDir = (0, utils_1.getAppDir)(projectId);
46
+ const spawner = (0, util_1.JsSpawner)({ path: appDir });
47
+ const envVars = {};
48
+ const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
49
+ if ('services' in composeParsed) {
50
+ const services = Object.keys(composeParsed['services']);
51
+ for (const s of services) {
52
+ envVars[s] = [];
53
+ const service = composeParsed['services'][s];
54
+ if ('env_file' in service) {
55
+ const envFiles = service['env_file'];
56
+ for (const ef of envFiles) {
57
+ envVars[s] = envVars[s].concat((await spawner.readFile(ef)).split('\n'));
58
+ }
59
+ }
60
+ if ('environment' in service) {
61
+ const environment = service['environment'];
62
+ envVars[s] = envVars[s].concat(environment);
63
+ }
64
+ // Filter out empty lines and comment lines
65
+ envVars[s] = envVars[s].filter((v) => {
66
+ return v !== '' && !v.includes('#');
67
+ });
68
+ }
69
+ }
70
+ return envVars;
71
+ }
72
+ exports.getAllEnvs = getAllEnvs;
73
+ //# sourceMappingURL=environment-variables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { readAppCfg, writeAppCfg, readDockerCompose, writeDockerCompose } from './config';
2
+ import { installApp, uninstallApp } from './install';
3
+ import { rollbackApp } from './backup';
4
+ import { listAppReleases, listAppLatestRelease, getAppStatus, startApp, getAppLogs, stopApp, restartApp } from './status';
5
+ import { ModelDetails } from './types';
6
+ import { getAllEnvs, setEnv } from './environment-variables';
7
+ export { readAppCfg, writeAppCfg, readDockerCompose, writeDockerCompose, installApp, uninstallApp, rollbackApp, listAppReleases, listAppLatestRelease, getAppStatus, startApp, getAppLogs, stopApp, restartApp, ModelDetails, getAllEnvs, setEnv, };
8
+ import { addModel, getAppModels, removeModel, replaceModels, updateModels } from './models';
9
+ export { addModel, getAppModels, removeModel, replaceModels, updateModels };
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAE7D,OAAO,EACL,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,MAAM,GACP,CAAC;AAGF,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.addModel = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.listAppLatestRelease = exports.listAppReleases = exports.rollbackApp = exports.uninstallApp = exports.installApp = exports.writeDockerCompose = exports.readDockerCompose = exports.writeAppCfg = exports.readAppCfg = void 0;
4
+ const config_1 = require("./config");
5
+ Object.defineProperty(exports, "readAppCfg", { enumerable: true, get: function () { return config_1.readAppCfg; } });
6
+ Object.defineProperty(exports, "writeAppCfg", { enumerable: true, get: function () { return config_1.writeAppCfg; } });
7
+ Object.defineProperty(exports, "readDockerCompose", { enumerable: true, get: function () { return config_1.readDockerCompose; } });
8
+ Object.defineProperty(exports, "writeDockerCompose", { enumerable: true, get: function () { return config_1.writeDockerCompose; } });
9
+ const install_1 = require("./install");
10
+ Object.defineProperty(exports, "installApp", { enumerable: true, get: function () { return install_1.installApp; } });
11
+ Object.defineProperty(exports, "uninstallApp", { enumerable: true, get: function () { return install_1.uninstallApp; } });
12
+ const backup_1 = require("./backup");
13
+ Object.defineProperty(exports, "rollbackApp", { enumerable: true, get: function () { return backup_1.rollbackApp; } });
14
+ const status_1 = require("./status");
15
+ Object.defineProperty(exports, "listAppReleases", { enumerable: true, get: function () { return status_1.listAppReleases; } });
16
+ Object.defineProperty(exports, "listAppLatestRelease", { enumerable: true, get: function () { return status_1.listAppLatestRelease; } });
17
+ Object.defineProperty(exports, "getAppStatus", { enumerable: true, get: function () { return status_1.getAppStatus; } });
18
+ Object.defineProperty(exports, "startApp", { enumerable: true, get: function () { return status_1.startApp; } });
19
+ Object.defineProperty(exports, "getAppLogs", { enumerable: true, get: function () { return status_1.getAppLogs; } });
20
+ Object.defineProperty(exports, "stopApp", { enumerable: true, get: function () { return status_1.stopApp; } });
21
+ Object.defineProperty(exports, "restartApp", { enumerable: true, get: function () { return status_1.restartApp; } });
22
+ const environment_variables_1 = require("./environment-variables");
23
+ Object.defineProperty(exports, "getAllEnvs", { enumerable: true, get: function () { return environment_variables_1.getAllEnvs; } });
24
+ Object.defineProperty(exports, "setEnv", { enumerable: true, get: function () { return environment_variables_1.setEnv; } });
25
+ // CLI-mode only
26
+ const models_1 = require("./models");
27
+ Object.defineProperty(exports, "addModel", { enumerable: true, get: function () { return models_1.addModel; } });
28
+ Object.defineProperty(exports, "getAppModels", { enumerable: true, get: function () { return models_1.getAppModels; } });
29
+ Object.defineProperty(exports, "removeModel", { enumerable: true, get: function () { return models_1.removeModel; } });
30
+ Object.defineProperty(exports, "replaceModels", { enumerable: true, get: function () { return models_1.replaceModels; } });
31
+ Object.defineProperty(exports, "updateModels", { enumerable: true, get: function () { return models_1.updateModels; } });
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,qCAA0F;AAgBxF,2FAhBO,mBAAU,OAgBP;AACV,4FAjBmB,oBAAW,OAiBnB;AACX,kGAlBgC,0BAAiB,OAkBhC;AACjB,mGAnBmD,2BAAkB,OAmBnD;AAlBpB,uCAAqD;AAmBnD,2FAnBO,oBAAU,OAmBP;AACV,6FApBmB,sBAAY,OAoBnB;AAnBd,qCAAuC;AAoBrC,4FApBO,oBAAW,OAoBP;AAnBb,qCAQkB;AAYhB,gGAnBA,wBAAe,OAmBA;AACf,qGAnBA,6BAAoB,OAmBA;AACpB,6FAnBA,qBAAY,OAmBA;AACZ,yFAnBA,iBAAQ,OAmBA;AACR,2FAnBA,mBAAU,OAmBA;AACV,wFAnBA,gBAAO,OAmBA;AACP,2FAnBA,mBAAU,OAmBA;AAhBZ,mEAA6D;AAkB3D,2FAlBO,kCAAU,OAkBP;AACV,uFAnBmB,8BAAM,OAmBnB;AAGR,gBAAgB;AAChB,qCAMkB;AAET,yFAPP,iBAAQ,OAOO;AAAE,6FANjB,qBAAY,OAMiB;AAAE,4FAL/B,oBAAW,OAK+B;AAAE,8FAJ5C,sBAAa,OAI4C;AAAE,6FAH3D,qBAAY,OAG2D"}
@@ -0,0 +1,22 @@
1
+ import { AppDetailsPacket } from '@alwaysai/device-agent-schemas';
2
+ declare type SignedUrlPayloadType = {
3
+ appInstallPayload: {
4
+ appSignedUrl: string;
5
+ };
6
+ modelsInstallPayload: {
7
+ id: string;
8
+ version: number;
9
+ modelSignedUrl: string;
10
+ }[];
11
+ };
12
+ export declare function getInstalledApps(): Promise<AppDetailsPacket[]>;
13
+ export declare function installApp(props: {
14
+ projectId: string;
15
+ appReleaseHash: string;
16
+ signedUrlsPayload?: SignedUrlPayloadType;
17
+ }): Promise<void>;
18
+ export declare function uninstallApp(props: {
19
+ projectId: string;
20
+ }): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,gCAAgC,CAAC;AAqBvF,aAAK,oBAAoB,GAAG;IAC1B,iBAAiB,EAAE;QACjB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,oBAAoB,EAAE;QACpB,EAAE,EAAE,MAAM,CAAC;QACX,OAAO,EAAE,MAAM,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC;KACxB,EAAE,CAAC;CACL,CAAC;AAEF,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAQpE;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,oBAAoB,CAAC;CAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EhB;AA6DD,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB9E"}
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uninstallApp = exports.installApp = exports.getInstalledApps = void 0;
4
+ const rimraf = require("rimraf");
5
+ const fs = require("fs");
6
+ const path = require("path");
7
+ const util_1 = require("alwaysai/lib/util");
8
+ const utils_1 = require("./utils");
9
+ const backup_1 = require("./backup");
10
+ const status_1 = require("./status");
11
+ const agent_config_1 = require("../infrastructure/agent-config");
12
+ const project_1 = require("alwaysai/lib/core/project");
13
+ const app_1 = require("alwaysai/lib/core/app");
14
+ const app_2 = require("alwaysai/lib/components/app");
15
+ const app_install_component_1 = require("alwaysai/lib/components/app/app-install-component");
16
+ const constants_1 = require("alwaysai/lib/constants");
17
+ const release_1 = require("alwaysai/lib/components/release");
18
+ const run_in_dir_1 = require("../util/run-in-dir");
19
+ const models_1 = require("./models");
20
+ const logger_1 = require("../util/logger");
21
+ async function getInstalledApps() {
22
+ const apps = await (0, agent_config_1.AgentConfigFile)().getApps();
23
+ const appDetails = [];
24
+ for (const app of apps) {
25
+ const { projectId, version } = app;
26
+ appDetails.push({ projectId, version });
27
+ }
28
+ return appDetails;
29
+ }
30
+ exports.getInstalledApps = getInstalledApps;
31
+ async function installApp(props) {
32
+ const { projectId, appReleaseHash, signedUrlsPayload } = props;
33
+ const appDir = (0, utils_1.getAppDir)(projectId);
34
+ const spawner = (0, util_1.JsSpawner)();
35
+ if (await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId })) {
36
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
37
+ throw new Error('Application already has installation in progress!');
38
+ }
39
+ logger_1.logger.info('Application is already installed, updating');
40
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalling({ projectId, version: appReleaseHash });
41
+ await spawner.rimraf(appDir);
42
+ }
43
+ else {
44
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalling({ projectId, version: appReleaseHash });
45
+ }
46
+ await spawner.mkdirp(appDir);
47
+ // download app package
48
+ const localDest = path.join(appDir, `${path.basename(appReleaseHash)}.tgz`);
49
+ if (!signedUrlsPayload) {
50
+ await (0, run_in_dir_1.runInDir)(release_1.appReleasePullComponent, [
51
+ {
52
+ yes: true,
53
+ project: projectId,
54
+ releaseHash: appReleaseHash,
55
+ },
56
+ ], appDir);
57
+ }
58
+ else {
59
+ const { appSignedUrl } = signedUrlsPayload.appInstallPayload;
60
+ await (0, utils_1.downloadPackageUsingPresignedUrl)({ localDest, presignedUrl: appSignedUrl });
61
+ }
62
+ // Unpack app package and remove tar file
63
+ await unPackApp({ spawner, localDest, appDir });
64
+ // The following changes replace the runCliCmd for 'app configure'
65
+ // This part replaces findOrWriteProjectJsonFile() due to the
66
+ // calls that check the user is logged in and also for project collaboration
67
+ // NOTE: this process no longer checks project collaboration
68
+ await checkValidProjectFiles({ appDir });
69
+ // install models, python venv, and docker image
70
+ if (!signedUrlsPayload) {
71
+ await (0, run_in_dir_1.runInDir)(app_install_component_1.appInstallComponent, [
72
+ {
73
+ yes: true,
74
+ pull: true,
75
+ clean: true,
76
+ skipModels: false,
77
+ source: false,
78
+ },
79
+ ], appDir);
80
+ }
81
+ else {
82
+ await installAppBuildReqs({ appDir });
83
+ await (0, models_1.installModelsWithPresignedURLs)(signedUrlsPayload.modelsInstallPayload, path.join(appDir, 'models'));
84
+ }
85
+ await (0, utils_1.buildApp)({ appDir });
86
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalled({ projectId, version: appReleaseHash });
87
+ logger_1.logger.info(`Installed app version ${appReleaseHash} from project ${projectId} to ${appDir}.`);
88
+ }
89
+ exports.installApp = installApp;
90
+ async function installAppBuildReqs(props) {
91
+ const { appDir } = props;
92
+ const targetJsonFile = (0, app_1.TargetJsonFile)(appDir);
93
+ const targetJson = targetJsonFile.readIfExists();
94
+ if (!targetJson) {
95
+ throw new Error('Target json file does not exist!');
96
+ }
97
+ await (0, run_in_dir_1.runInDir)(async () => {
98
+ const targetHostSpawner = targetJsonFile.readHostSpawner();
99
+ await (0, app_2.appCleanDockerComponent)({ targetHostSpawner });
100
+ await (0, app_2.buildDocker)({
101
+ targetJson,
102
+ targetJsonFile,
103
+ targetHostSpawner,
104
+ pull: true,
105
+ });
106
+ await (0, app_install_component_1.installVenv)({
107
+ targetJson,
108
+ sourceSpawner: targetHostSpawner,
109
+ targetJsonFile,
110
+ });
111
+ }, [], appDir);
112
+ }
113
+ async function unPackApp(props) {
114
+ const { spawner, localDest, appDir } = props;
115
+ await spawner.untar(fs.createReadStream(localDest), appDir);
116
+ await spawner.rimraf(localDest);
117
+ }
118
+ async function checkValidProjectFiles({ appDir }) {
119
+ if (!(0, project_1.ProjectJsonFile)(appDir).readIfExists()) {
120
+ throw new Error('Project JSON file does not exist!');
121
+ }
122
+ // check for app json file and app.py files
123
+ if (!(0, app_1.AppJsonFile)(appDir).readIfExists()) {
124
+ throw new Error('App JSON file does not exist!');
125
+ }
126
+ // write target json
127
+ if (!fs.existsSync(path.join(appDir, constants_1.DOCKERFILE))) {
128
+ throw new Error('No Dockerfile found for application!');
129
+ }
130
+ (0, app_1.TargetJsonFile)(appDir).write({
131
+ targetProtocol: 'docker:',
132
+ dockerImageId: constants_1.DOCKER_IMAGE_ID_INITIAL_VALUE,
133
+ targetHardware: await (0, app_1.getTargetHardwareType)({}),
134
+ });
135
+ }
136
+ async function uninstallApp(props) {
137
+ const { projectId } = props;
138
+ if (!(await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId }))) {
139
+ logger_1.logger.info(`Application ${projectId} not installed`);
140
+ return;
141
+ }
142
+ try {
143
+ await (0, status_1.stopApp)({ projectId });
144
+ }
145
+ catch (_a) {
146
+ logger_1.logger.info('Failed to stop app, may be left running...');
147
+ }
148
+ await (0, agent_config_1.AgentConfigFile)().setAppUninstalled({ projectId });
149
+ // Delete application directory and backup
150
+ const appDir = (0, utils_1.getAppDir)(projectId);
151
+ rimraf.sync(appDir);
152
+ rimraf.sync(`${appDir}${backup_1.BACKUP_EXT}`);
153
+ logger_1.logger.info('Uninstalled', projectId);
154
+ }
155
+ exports.uninstallApp = uninstallApp;
156
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ModelInstallPayload } from '@alwaysai/device-agent-schemas';
2
+ import { ModelDetails } from './types';
3
+ export declare function getAppModels(props: {
4
+ projectId: string;
5
+ }): Promise<ModelDetails[]>;
6
+ export declare function addModel(props: {
7
+ projectId: string;
8
+ modelId: string;
9
+ }): Promise<void>;
10
+ export declare function removeModel(props: {
11
+ projectId: string;
12
+ modelId: string;
13
+ }): Promise<void>;
14
+ export declare function replaceModels(props: {
15
+ projectId: string;
16
+ modelIds: string[];
17
+ }): Promise<void>;
18
+ export declare function updateModels(props: {
19
+ projectId: string;
20
+ }): Promise<void>;
21
+ export declare function installModelsWithPresignedURLs(modelPayloads: ModelInstallPayload[], targetDir: string): Promise<void>;
22
+ export declare function updateModelsWithPresignedUrls(project: string, modelInstallPayloads: ModelInstallPayload[]): Promise<void>;
23
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAiBjF,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAQvC,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2BAoB9D;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,iBAY3E;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,iBAiB9E;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,iBAyBnF;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAU9D;AAED,wBAAsB,8BAA8B,CAClD,aAAa,EAAE,mBAAmB,EAAE,EACpC,SAAS,EAAE,MAAM,iBAgBlB;AAED,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,mBAAmB,EAAE,iBAoD5C"}