@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,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDockerLogin = void 0;
4
+ const util_1 = require("alwaysai/lib/util");
5
+ async function runDockerLogin(props) {
6
+ const { token } = props;
7
+ const spawner = (0, util_1.JsSpawner)();
8
+ const server = '994534263224.dkr.ecr.us-west-2.amazonaws.com';
9
+ const output = await spawner.run({
10
+ exe: 'docker',
11
+ args: ['login', '--username', 'AWS', '--password', token, server],
12
+ });
13
+ return output;
14
+ }
15
+ exports.runDockerLogin = runDockerLogin;
16
+ //# sourceMappingURL=docker-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-cmd.js","sourceRoot":"","sources":["../../src/docker/docker-cmd.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAEvC,KAAK,UAAU,cAAc,CAAC,KAAwB;IAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,IAAA,gBAAS,GAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,8CAA8C,CAAC;IAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,GAAG,EAAE,QAAQ;QACb,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC;KAClE,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,wCASC"}
@@ -0,0 +1,5 @@
1
+ export declare function runDockerComposeCmd(props: {
2
+ args: string[];
3
+ dir: string;
4
+ }): Promise<string>;
5
+ //# sourceMappingURL=docker-compose-cmd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-compose-cmd.d.ts","sourceRoot":"","sources":["../../src/docker/docker-compose-cmd.ts"],"names":[],"mappings":"AAEA,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,mBAS/E"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runDockerComposeCmd = void 0;
4
+ const util_1 = require("alwaysai/lib/util");
5
+ async function runDockerComposeCmd(props) {
6
+ const { args, dir } = props;
7
+ const spawner = (0, util_1.JsSpawner)();
8
+ const output = await spawner.run({
9
+ exe: 'docker-compose',
10
+ args,
11
+ cwd: dir,
12
+ });
13
+ return output;
14
+ }
15
+ exports.runDockerComposeCmd = runDockerComposeCmd;
16
+ //# sourceMappingURL=docker-compose-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-compose-cmd.js","sourceRoot":"","sources":["../../src/docker/docker-compose-cmd.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAEvC,KAAK,UAAU,mBAAmB,CAAC,KAAsC;IAC9E,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,OAAO,GAAG,IAAA,gBAAS,GAAE,CAAC;IAC5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC/B,GAAG,EAAE,gBAAgB;QACrB,IAAI;QACJ,GAAG,EAAE,GAAG;KACT,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AATD,kDASC"}
@@ -0,0 +1,3 @@
1
+ export declare const getSecondLevelDomain: () => string;
2
+ export declare const serviceEndpointBuilder: (service: string, path: string) => string;
3
+ //# sourceMappingURL=endpoints.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.d.ts","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,cAiBhC,CAAC;AAEF,eAAO,MAAM,sBAAsB,YAAa,MAAM,QAAQ,MAAM,WAEnE,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serviceEndpointBuilder = exports.getSecondLevelDomain = void 0;
4
+ const infrastructure_1 = require("alwaysai/lib/infrastructure");
5
+ const getSecondLevelDomain = () => {
6
+ let domain = "";
7
+ switch ((0, infrastructure_1.getSystemId)()) {
8
+ case "development":
9
+ domain = "a6i0.net";
10
+ break;
11
+ case "qa":
12
+ domain = "a6i1.net";
13
+ break;
14
+ case "production":
15
+ domain = "alwaysai.co";
16
+ break;
17
+ default:
18
+ domain = "alwaysai.co";
19
+ break;
20
+ }
21
+ return domain;
22
+ };
23
+ exports.getSecondLevelDomain = getSecondLevelDomain;
24
+ const serviceEndpointBuilder = (service, path) => {
25
+ return `https://${service}.${(0, exports.getSecondLevelDomain)()}/${path}`;
26
+ };
27
+ exports.serviceEndpointBuilder = serviceEndpointBuilder;
28
+ //# sourceMappingURL=endpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"endpoints.js","sourceRoot":"","sources":["../src/endpoints.ts"],"names":[],"mappings":";;;AAAA,gEAA0D;AAEnD,MAAM,oBAAoB,GAAG,GAAG,EAAE;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,QAAQ,IAAA,4BAAW,GAAE,EAAE;QACrB,KAAK,aAAa;YAChB,MAAM,GAAG,UAAU,CAAC;YACpB,MAAM;QACR,KAAK,IAAI;YACP,MAAM,GAAG,UAAU,CAAC;YACpB,MAAM;QACR,KAAK,YAAY;YACf,MAAM,GAAG,aAAa,CAAC;YACvB,MAAM;QACR;YACE,MAAM,GAAG,aAAa,CAAC;YACvB,MAAM;KACT;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAjBW,QAAA,oBAAoB,wBAiB/B;AAEK,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAE,IAAY,EAAE,EAAE;IACtE,OAAO,WAAW,OAAO,IAAI,IAAA,4BAAoB,GAAE,IAAI,IAAI,EAAE,CAAC;AAChE,CAAC,CAAC;AAFW,QAAA,sBAAsB,0BAEjC"}
@@ -0,0 +1,7 @@
1
+ /// <reference types="node" />
2
+ export declare const ALWAYSAI_OS_PLATFORM: NodeJS.Platform;
3
+ export declare const ALWAYSAI_SHOW_HIDDEN: boolean;
4
+ export declare const ALWAYSAI_DEVICE_AGENT_MODE: string | undefined;
5
+ export declare const ALWAYSAI_LOG_LEVEL: string | undefined;
6
+ export declare const ALWAYSAI_LOG_TO_CONSOLE: string | undefined;
7
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":";AAEA,eAAO,MAAM,oBAAoB,iBAEhC,CAAC;AACF,eAAO,MAAM,oBAAoB,SAEhC,CAAC;AACF,eAAO,MAAM,0BAA0B,oBACC,CAAC;AACzC,eAAO,MAAM,kBAAkB,oBAA4B,CAAC;AAC5D,eAAO,MAAM,uBAAuB,oBAAsC,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ALWAYSAI_LOG_TO_CONSOLE = exports.ALWAYSAI_LOG_LEVEL = exports.ALWAYSAI_DEVICE_AGENT_MODE = exports.ALWAYSAI_SHOW_HIDDEN = exports.ALWAYSAI_OS_PLATFORM = void 0;
4
+ const os_1 = require("os");
5
+ exports.ALWAYSAI_OS_PLATFORM = parseOsPlatform(process.env.ALWAYSAI_OS_PLATFORM);
6
+ exports.ALWAYSAI_SHOW_HIDDEN = parseBoolean(process.env.ALWAYSAI_SHOW_HIDDEN);
7
+ exports.ALWAYSAI_DEVICE_AGENT_MODE = process.env.ALWAYSAI_DEVICE_AGENT_MODE;
8
+ exports.ALWAYSAI_LOG_LEVEL = process.env.AAI_LOG_LEVEL;
9
+ exports.ALWAYSAI_LOG_TO_CONSOLE = process.env.ALWAYSAI_LOG_TO_CONSOLE;
10
+ function parseOsPlatform(str) {
11
+ switch (str) {
12
+ case "win32":
13
+ case "darwin":
14
+ case "linux": {
15
+ return str;
16
+ }
17
+ default:
18
+ return (0, os_1.platform)();
19
+ }
20
+ }
21
+ function parseBoolean(str) {
22
+ return str === "1";
23
+ }
24
+ //# sourceMappingURL=environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.js","sourceRoot":"","sources":["../src/environment.ts"],"names":[],"mappings":";;;AAAA,2BAA8B;AAEjB,QAAA,oBAAoB,GAAG,eAAe,CACjD,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAC;AACW,QAAA,oBAAoB,GAAG,YAAY,CAC9C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CACjC,CAAC;AACW,QAAA,0BAA0B,GACrC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC5B,QAAA,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAC/C,QAAA,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;AAE3E,SAAS,eAAe,CAAC,GAAuB;IAC9C,QAAQ,GAAG,EAAE;QACX,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,OAAO,CAAC,CAAC;YACZ,OAAO,GAAG,CAAC;SACZ;QACD;YACE,OAAO,IAAA,aAAQ,GAAE,CAAC;KACrB;AACH,CAAC;AAED,SAAS,YAAY,CAAC,GAAuB;IAC3C,OAAO,GAAG,KAAK,GAAG,CAAC;AACrB,CAAC"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/lib/index.js ADDED
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /*
4
+ Though this file is not executable, the above "shebang" line is necessary as an
5
+ indicator to npm that this file is a Node.js script, not a shell script e.g.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const alwayscli_1 = require("@alwaysai/alwayscli");
9
+ const root_1 = require("./root");
10
+ const device_agent_cloud_connection_1 = require("./cloud-connection/device-agent-cloud-connection");
11
+ const agent_config_1 = require("./infrastructure/agent-config");
12
+ const environment_1 = require("./environment");
13
+ const logger_1 = require("./util/logger");
14
+ if (module === require.main) {
15
+ logger_1.logger.info("Starting alwaysAI Device Agent");
16
+ if (!(0, agent_config_1.AgentConfigFile)().exists()) {
17
+ (0, agent_config_1.AgentConfigFile)().initialize();
18
+ }
19
+ if (environment_1.ALWAYSAI_DEVICE_AGENT_MODE === "cloud") {
20
+ (0, device_agent_cloud_connection_1.runDeviceAgentCloudInterface)();
21
+ }
22
+ else {
23
+ (0, alwayscli_1.runCliAndExit)(root_1.root, {});
24
+ }
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAEA;;;EAGE;;AAEF,mDAAoD;AACpD,iCAA8B;AAC9B,oGAAgG;AAChG,gEAAgE;AAChE,+CAA2D;AAC3D,0CAAuC;AAEvC,IAAI,MAAM,KAAK,OAAO,CAAC,IAAI,EAAE;IAC3B,eAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAA,8BAAe,GAAE,CAAC,MAAM,EAAE,EAAE;QAC/B,IAAA,8BAAe,GAAE,CAAC,UAAU,EAAE,CAAC;KAChC;IAED,IAAI,wCAA0B,KAAK,OAAO,EAAE;QAC1C,IAAA,4DAA4B,GAAE,CAAC;KAChC;SAAM;QACL,IAAA,yBAAa,EAAC,WAAI,EAAE,EAAE,CAAC,CAAC;KACzB;CACF"}
@@ -0,0 +1,73 @@
1
+ export interface AppBackupConfig {
2
+ version: string;
3
+ }
4
+ export interface InstalledAppConfig {
5
+ projectId: string;
6
+ version: string;
7
+ ready: boolean;
8
+ backup?: AppBackupConfig;
9
+ }
10
+ export interface AgentConfig {
11
+ applications: InstalledAppConfig[];
12
+ }
13
+ export declare function AgentConfigFile(dir?: string): {
14
+ name: string;
15
+ getApps: () => Promise<InstalledAppConfig[]>;
16
+ getReadyApps: () => Promise<InstalledAppConfig[]>;
17
+ getApp: (props: {
18
+ projectId: string;
19
+ }) => Promise<InstalledAppConfig | null>;
20
+ isAppPresent: (props: {
21
+ projectId: string;
22
+ }) => Promise<boolean>;
23
+ isAppReady: (props: {
24
+ projectId: string;
25
+ }) => Promise<boolean>;
26
+ removeApp: (props: {
27
+ projectId: string;
28
+ }) => Promise<void>;
29
+ setAppInstalling: (props: {
30
+ projectId: string;
31
+ version: string;
32
+ }) => Promise<void>;
33
+ setAppInstalled: (props: {
34
+ projectId: string;
35
+ version: string;
36
+ }) => Promise<void>;
37
+ setAppUninstalled: (props: {
38
+ projectId: string;
39
+ }) => Promise<void>;
40
+ getAppVersion: (props: {
41
+ projectId: string;
42
+ }) => Promise<string>;
43
+ setAppBackup: (props: {
44
+ projectId: string;
45
+ }) => Promise<void>;
46
+ getAppBackup: (props: {
47
+ projectId: string;
48
+ }) => Promise<AppBackupConfig | null>;
49
+ path: string;
50
+ read: () => AgentConfig;
51
+ readIfExists: () => AgentConfig | undefined;
52
+ readRaw: () => string;
53
+ readParsed: () => any;
54
+ write: (config: AgentConfig) => {
55
+ serialized: string;
56
+ changed: boolean;
57
+ };
58
+ writeRaw: (serialized: string) => {
59
+ changed: boolean;
60
+ };
61
+ remove: () => {
62
+ changed: boolean;
63
+ };
64
+ update: (updater: (config: AgentConfig) => void) => {
65
+ serialized: string;
66
+ changed: boolean;
67
+ };
68
+ exists: () => boolean;
69
+ initialize: () => void;
70
+ validate: import("ajv").ValidateFunction<AgentConfig>;
71
+ getErrors: () => import("ajv").ErrorObject<string, Record<string, any>, unknown>[] | null | undefined;
72
+ };
73
+ //# sourceMappingURL=agent-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../src/infrastructure/agent-config.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAoCD,wBAAgB,eAAe,CAAC,GAAG,SAAsB;;;;oBAwC1B;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;0BAWf;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAG,QAAQ,OAAO,CAAC;wBAS1C;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,KAAG,QAAQ,OAAO,CAAC;uBASzC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;8BAUd;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;6BAsBvC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;+BAiBpC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;2BAKzB;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;0BAStB;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;0BAarB;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;EAQzD"}
@@ -0,0 +1,175 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AgentConfigFile = void 0;
4
+ const config_nodejs_1 = require("@alwaysai/config-nodejs");
5
+ const os_1 = require("os");
6
+ const path_1 = require("path");
7
+ const schema = {
8
+ type: 'object',
9
+ properties: {
10
+ applications: {
11
+ type: 'array',
12
+ items: {
13
+ type: 'object',
14
+ properties: {
15
+ projectId: { type: 'string' },
16
+ version: { type: 'string' },
17
+ ready: { type: 'boolean' },
18
+ backup: {
19
+ type: 'object',
20
+ nullable: true,
21
+ properties: {
22
+ version: { type: 'string' },
23
+ },
24
+ required: ['version'],
25
+ additionalProperties: true,
26
+ },
27
+ },
28
+ required: ['projectId', 'version', 'ready'],
29
+ additionalProperties: true,
30
+ },
31
+ },
32
+ },
33
+ required: ['applications'],
34
+ additionalProperties: true,
35
+ };
36
+ const ALWAYSAI_CONFIG_DIR = (0, path_1.join)((0, os_1.homedir)(), '.config', 'alwaysai');
37
+ const AGENT_CONFIG_FILE_NAME = 'alwaysai.agent.json';
38
+ function AgentConfigFile(dir = ALWAYSAI_CONFIG_DIR) {
39
+ const path = (0, path_1.join)(dir, AGENT_CONFIG_FILE_NAME);
40
+ const initialValue = {
41
+ applications: [],
42
+ };
43
+ const configFile = (0, config_nodejs_1.ConfigFileSchema)({
44
+ path,
45
+ schema,
46
+ initialValue,
47
+ });
48
+ return Object.assign(Object.assign({}, configFile), { name: AGENT_CONFIG_FILE_NAME, getApps,
49
+ getReadyApps,
50
+ getApp,
51
+ isAppPresent,
52
+ isAppReady,
53
+ removeApp,
54
+ setAppInstalling,
55
+ setAppInstalled,
56
+ setAppUninstalled,
57
+ getAppVersion,
58
+ setAppBackup,
59
+ getAppBackup });
60
+ async function getApps() {
61
+ const config = configFile.read();
62
+ return config.applications;
63
+ }
64
+ async function getReadyApps() {
65
+ const config = configFile.read();
66
+ return config.applications.filter((app) => {
67
+ return app.ready;
68
+ });
69
+ }
70
+ async function getApp(props) {
71
+ const { projectId } = props;
72
+ const apps = await getApps();
73
+ for (const app of apps) {
74
+ if (app.projectId === projectId) {
75
+ return app;
76
+ }
77
+ }
78
+ return null;
79
+ }
80
+ async function isAppPresent(props) {
81
+ const { projectId } = props;
82
+ const app = await getApp({ projectId });
83
+ if (app) {
84
+ return true;
85
+ }
86
+ return false;
87
+ }
88
+ async function isAppReady(props) {
89
+ const { projectId } = props;
90
+ const app = await getApp({ projectId });
91
+ if (app && app.ready) {
92
+ return true;
93
+ }
94
+ return false;
95
+ }
96
+ async function removeApp(props) {
97
+ const { projectId } = props;
98
+ const config = configFile.read();
99
+ const newList = config.applications.filter((app) => {
100
+ return app.projectId !== projectId;
101
+ });
102
+ config.applications = newList;
103
+ configFile.write(config);
104
+ }
105
+ async function setAppInstalling(props) {
106
+ const { projectId, version } = props;
107
+ const app = await getApp({ projectId });
108
+ if (app) {
109
+ await removeApp({ projectId });
110
+ const config = configFile.read();
111
+ // NOTE: do not update the version for an existing app until it is installed
112
+ config.applications.push(Object.assign(Object.assign({}, app), { ready: false }));
113
+ configFile.write(config);
114
+ }
115
+ else {
116
+ // NOTE: for a brand-new app, we need to specify the version
117
+ const config = configFile.read();
118
+ config.applications.push({
119
+ projectId,
120
+ version,
121
+ ready: false,
122
+ });
123
+ configFile.write(config);
124
+ }
125
+ }
126
+ async function setAppInstalled(props) {
127
+ const { projectId, version } = props;
128
+ const app = await getApp({ projectId });
129
+ if (app) {
130
+ await removeApp({ projectId });
131
+ const config = configFile.read();
132
+ config.applications.push(Object.assign(Object.assign({}, app), { version, ready: true }));
133
+ configFile.write(config);
134
+ }
135
+ else {
136
+ // NOTE: we should never be setting an app as installed
137
+ // if it doesn't exist (setAppInstalling was never called)
138
+ throw new Error(`App ${projectId} was not previously configured and could not be set to installed!`);
139
+ }
140
+ }
141
+ async function setAppUninstalled(props) {
142
+ const { projectId } = props;
143
+ await removeApp({ projectId });
144
+ }
145
+ async function getAppVersion(props) {
146
+ const { projectId } = props;
147
+ const app = await getApp({ projectId });
148
+ if (!app) {
149
+ throw new Error(`App ${projectId} not installed`);
150
+ }
151
+ return app.version;
152
+ }
153
+ async function setAppBackup(props) {
154
+ const { projectId } = props;
155
+ const app = await getApp({ projectId });
156
+ if (!app) {
157
+ throw new Error(`Project ${projectId} not installed!`);
158
+ }
159
+ await removeApp({ projectId });
160
+ const config = configFile.read();
161
+ app.backup = { version: app.version };
162
+ config.applications.push(app);
163
+ configFile.write(config);
164
+ }
165
+ async function getAppBackup(props) {
166
+ const { projectId } = props;
167
+ const app = await getApp({ projectId });
168
+ if (app && app.backup) {
169
+ return app.backup;
170
+ }
171
+ return null;
172
+ }
173
+ }
174
+ exports.AgentConfigFile = AgentConfigFile;
175
+ //# sourceMappingURL=agent-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../src/infrastructure/agent-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-config.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.test.d.ts","sourceRoot":"","sources":["../../src/infrastructure/agent-config.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tempy = require("tempy");
4
+ const agent_config_1 = require("./agent-config");
5
+ const mockAgentModeGetter = jest.fn().mockReturnValue(undefined);
6
+ jest.mock('../environment', () => ({
7
+ get ALWAYSAI_DEVICE_AGENT_MODE() {
8
+ return mockAgentModeGetter();
9
+ },
10
+ }));
11
+ const configFile = (0, agent_config_1.AgentConfigFile)(tempy.directory());
12
+ describe('Test Agent Config', () => {
13
+ beforeEach(() => {
14
+ configFile.remove();
15
+ configFile.initialize();
16
+ });
17
+ describe('Test applications', () => {
18
+ test('Commands with no apps', async () => {
19
+ const apps = await configFile.getApps();
20
+ expect(apps).toEqual([]);
21
+ const app = await configFile.getApp({ projectId: 'wrong-id' });
22
+ expect(app).toBeNull();
23
+ const present = await configFile.isAppPresent({ projectId: 'another-id' });
24
+ expect(present).toBeFalsy();
25
+ const ready = await configFile.isAppReady({ projectId: 'yet-another-id' });
26
+ expect(ready).toBeFalsy();
27
+ });
28
+ test('Indicate app installation in progress', async () => {
29
+ const projectId = 'add-me';
30
+ const version = 'im-a-version';
31
+ await configFile.setAppInstalling({ projectId, version });
32
+ const apps = await configFile.getApps();
33
+ expect(apps).toEqual([
34
+ {
35
+ projectId,
36
+ version,
37
+ ready: false,
38
+ },
39
+ ]);
40
+ const readyApps = await configFile.getReadyApps();
41
+ expect(readyApps).toEqual([]);
42
+ const app = await configFile.getApp({ projectId });
43
+ expect(app).toEqual({
44
+ projectId,
45
+ version,
46
+ ready: false,
47
+ });
48
+ const present = await configFile.isAppPresent({ projectId });
49
+ expect(present).toBeTruthy();
50
+ const ready = await configFile.isAppReady({ projectId });
51
+ expect(ready).toBeFalsy();
52
+ });
53
+ test('Indicate app installation complete', async () => {
54
+ const projectId = 'add-me';
55
+ const version = 'im-a-version';
56
+ await configFile.setAppInstalling({ projectId, version });
57
+ await configFile.setAppInstalled({ projectId, version });
58
+ const apps = await configFile.getApps();
59
+ expect(apps).toEqual([
60
+ {
61
+ projectId,
62
+ version,
63
+ ready: true,
64
+ },
65
+ ]);
66
+ const readyApps = await configFile.getReadyApps();
67
+ expect(readyApps).toEqual([
68
+ {
69
+ projectId,
70
+ version,
71
+ ready: true,
72
+ },
73
+ ]);
74
+ const app = await configFile.getApp({ projectId });
75
+ expect(app).toEqual({
76
+ projectId,
77
+ version,
78
+ ready: true,
79
+ });
80
+ const appVersion = await configFile.getAppVersion({ projectId });
81
+ expect(appVersion).toEqual(version);
82
+ const present = await configFile.isAppPresent({ projectId });
83
+ expect(present).toBeTruthy();
84
+ const ready = await configFile.isAppReady({ projectId });
85
+ expect(ready).toBeTruthy();
86
+ });
87
+ test('Indicate app uninstalled', async () => {
88
+ const projectId = 'add-me';
89
+ const version = 'im-a-version';
90
+ await configFile.setAppInstalling({ projectId, version });
91
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version);
92
+ await configFile.setAppInstalled({ projectId, version });
93
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version);
94
+ await configFile.setAppUninstalled({ projectId });
95
+ const apps = await configFile.getApps();
96
+ expect(apps).toEqual([]);
97
+ const app = await configFile.getApp({ projectId: 'wrong-id' });
98
+ expect(app).toBeNull();
99
+ const present = await configFile.isAppPresent({ projectId: 'another-id' });
100
+ expect(present).toBeFalsy();
101
+ const ready = await configFile.isAppReady({ projectId: 'yet-another-id' });
102
+ expect(ready).toBeFalsy();
103
+ });
104
+ test('Set and get backup', async () => {
105
+ const projectId = 'add-me';
106
+ const version = 'im-a-version';
107
+ const version2 = 'newer-version';
108
+ // first installation, we use the version
109
+ await configFile.setAppInstalling({ projectId, version });
110
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version);
111
+ await configFile.setAppInstalled({ projectId, version });
112
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version);
113
+ const backup1 = await configFile.getAppBackup({ projectId });
114
+ expect(backup1).toBeNull();
115
+ await configFile.setAppBackup({ projectId });
116
+ const apps = await configFile.getApps();
117
+ expect(apps).toEqual([
118
+ {
119
+ projectId,
120
+ version,
121
+ ready: true,
122
+ backup: {
123
+ version,
124
+ },
125
+ },
126
+ ]);
127
+ const app = await configFile.getApp({ projectId });
128
+ expect(app).toEqual({
129
+ projectId,
130
+ version,
131
+ ready: true,
132
+ backup: {
133
+ version,
134
+ },
135
+ });
136
+ const backup2 = await configFile.getAppBackup({ projectId });
137
+ expect(backup2).toEqual({ version });
138
+ await configFile.setAppInstalling({ projectId, version: version2 });
139
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version);
140
+ await configFile.setAppInstalled({ projectId, version: version2 });
141
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version2);
142
+ const backup3 = await configFile.getAppBackup({ projectId });
143
+ expect(backup3).toEqual({ version });
144
+ });
145
+ test('Test app rollback', async () => {
146
+ var _a, _b, _c;
147
+ const projectId = 'add-me';
148
+ const version1 = 'original-version';
149
+ const version2 = 'newer-version';
150
+ await configFile.setAppInstalling({ projectId, version: version1 });
151
+ await configFile.setAppInstalled({ projectId, version: version1 });
152
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version1);
153
+ expect(await configFile.getAppBackup({ projectId })).toBeNull();
154
+ // next installation - verify app is present and ready
155
+ expect(await configFile.isAppPresent({ projectId })).toBe(true);
156
+ expect(await configFile.isAppReady({ projectId })).toBe(true);
157
+ // test to see if app has backup
158
+ await configFile.setAppBackup({ projectId });
159
+ const expectedBackupVersion = (_a = (await configFile.getAppBackup({ projectId }))) === null || _a === void 0 ? void 0 : _a.version;
160
+ expect(expectedBackupVersion).toEqual(version1);
161
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version1);
162
+ // simulate second version install
163
+ await configFile.setAppInstalling({ projectId, version: version2 });
164
+ const newExpectedBackupVersion = (_b = (await configFile.getAppBackup({ projectId }))) === null || _b === void 0 ? void 0 : _b.version;
165
+ expect(newExpectedBackupVersion).toEqual(version1);
166
+ await configFile.setAppInstalled({ projectId, version: version2 });
167
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version2);
168
+ // simulate the rollback step: set the version that we will roll back to
169
+ await configFile.setAppInstalling({ projectId, version: version1 });
170
+ // test state during rollback
171
+ expect(await configFile.isAppReady({ projectId })).toEqual(false);
172
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version2);
173
+ // test final state of rolled-back app
174
+ await configFile.setAppInstalled({ projectId, version: version1 });
175
+ const finalBackupVersion = (_c = (await configFile.getAppBackup({ projectId }))) === null || _c === void 0 ? void 0 : _c.version;
176
+ expect(finalBackupVersion).toEqual(version1);
177
+ expect(await configFile.isAppReady({ projectId })).toEqual(true);
178
+ expect(await configFile.getAppVersion({ projectId })).toEqual(version1);
179
+ });
180
+ });
181
+ });
182
+ //# sourceMappingURL=agent-config.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-config.test.js","sourceRoot":"","sources":["../../src/infrastructure/agent-config.test.ts"],"names":[],"mappings":"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"}