@alwaysai/device-agent 0.1.0 → 0.1.2

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 (100) hide show
  1. package/lib/application-control/config.d.ts +0 -1
  2. package/lib/application-control/config.d.ts.map +1 -1
  3. package/lib/application-control/config.js +15 -29
  4. package/lib/application-control/config.js.map +1 -1
  5. package/lib/application-control/environment-variables.d.ts +7 -3
  6. package/lib/application-control/environment-variables.d.ts.map +1 -1
  7. package/lib/application-control/environment-variables.js +71 -35
  8. package/lib/application-control/environment-variables.js.map +1 -1
  9. package/lib/application-control/environment-variables.test.d.ts +2 -0
  10. package/lib/application-control/environment-variables.test.d.ts.map +1 -0
  11. package/lib/application-control/environment-variables.test.js +163 -0
  12. package/lib/application-control/environment-variables.test.js.map +1 -0
  13. package/lib/application-control/index.d.ts +3 -3
  14. package/lib/application-control/index.d.ts.map +1 -1
  15. package/lib/application-control/index.js +1 -3
  16. package/lib/application-control/index.js.map +1 -1
  17. package/lib/application-control/models.d.ts +0 -1
  18. package/lib/application-control/models.d.ts.map +1 -1
  19. package/lib/application-control/models.js +12 -26
  20. package/lib/application-control/models.js.map +1 -1
  21. package/lib/application-control/status.d.ts +3 -0
  22. package/lib/application-control/status.d.ts.map +1 -1
  23. package/lib/application-control/status.js +19 -1
  24. package/lib/application-control/status.js.map +1 -1
  25. package/lib/application-control/utils.d.ts.map +1 -1
  26. package/lib/application-control/utils.js +2 -2
  27. package/lib/application-control/utils.js.map +1 -1
  28. package/lib/cloud-connection/device-agent-cloud-connection.d.ts +6 -3
  29. package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
  30. package/lib/cloud-connection/device-agent-cloud-connection.js +205 -151
  31. package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
  32. package/lib/cloud-connection/live-updates-handler.d.ts +3 -0
  33. package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
  34. package/lib/cloud-connection/live-updates-handler.js +23 -7
  35. package/lib/cloud-connection/live-updates-handler.js.map +1 -1
  36. package/lib/cloud-connection/live-updates-handler.test.d.ts +2 -0
  37. package/lib/cloud-connection/live-updates-handler.test.d.ts.map +1 -0
  38. package/lib/cloud-connection/live-updates-handler.test.js +57 -0
  39. package/lib/cloud-connection/live-updates-handler.test.js.map +1 -0
  40. package/lib/cloud-connection/passthrough-handler.d.ts.map +1 -1
  41. package/lib/cloud-connection/passthrough-handler.js +6 -3
  42. package/lib/cloud-connection/passthrough-handler.js.map +1 -1
  43. package/lib/cloud-connection/shadow-handler.d.ts +11 -3
  44. package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
  45. package/lib/cloud-connection/shadow-handler.js +22 -7
  46. package/lib/cloud-connection/shadow-handler.js.map +1 -1
  47. package/lib/cloud-connection/shadow-handler.test.js +313 -228
  48. package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
  49. package/lib/cloud-connection/shadow.js +1 -1
  50. package/lib/cloud-connection/shadow.js.map +1 -1
  51. package/lib/environment.d.ts +1 -0
  52. package/lib/environment.d.ts.map +1 -1
  53. package/lib/environment.js +2 -1
  54. package/lib/environment.js.map +1 -1
  55. package/lib/infrastructure/agent-config.d.ts +3 -1
  56. package/lib/infrastructure/agent-config.d.ts.map +1 -1
  57. package/lib/subcommands/app/env-vars.d.ts +1 -1
  58. package/lib/subcommands/app/env-vars.d.ts.map +1 -1
  59. package/lib/subcommands/app/env-vars.js +32 -5
  60. package/lib/subcommands/app/env-vars.js.map +1 -1
  61. package/lib/subcommands/app/index.d.ts.map +1 -1
  62. package/lib/subcommands/app/index.js +4 -1
  63. package/lib/subcommands/app/index.js.map +1 -1
  64. package/lib/subcommands/app/models.d.ts.map +1 -1
  65. package/lib/subcommands/app/models.js +6 -1
  66. package/lib/subcommands/app/models.js.map +1 -1
  67. package/lib/subcommands/app/shadow.d.ts +7 -0
  68. package/lib/subcommands/app/shadow.d.ts.map +1 -0
  69. package/lib/subcommands/app/shadow.js +48 -0
  70. package/lib/subcommands/app/shadow.js.map +1 -0
  71. package/lib/subcommands/app/version.js +2 -2
  72. package/lib/subcommands/app/version.js.map +1 -1
  73. package/lib/util/cloud-mode-ready.d.ts +2 -0
  74. package/lib/util/cloud-mode-ready.d.ts.map +1 -0
  75. package/lib/util/cloud-mode-ready.js +22 -0
  76. package/lib/util/cloud-mode-ready.js.map +1 -0
  77. package/package.json +1 -1
  78. package/readme.md +2 -2
  79. package/src/application-control/config.ts +30 -31
  80. package/src/application-control/environment-variables.test.ts +171 -0
  81. package/src/application-control/environment-variables.ts +102 -43
  82. package/src/application-control/index.ts +3 -9
  83. package/src/application-control/models.ts +14 -29
  84. package/src/application-control/status.ts +20 -0
  85. package/src/application-control/utils.ts +4 -2
  86. package/src/cloud-connection/device-agent-cloud-connection.ts +222 -153
  87. package/src/cloud-connection/live-updates-handler.test.ts +68 -0
  88. package/src/cloud-connection/live-updates-handler.ts +30 -7
  89. package/src/cloud-connection/passthrough-handler.ts +10 -3
  90. package/src/cloud-connection/shadow-handler.test.ts +329 -239
  91. package/src/cloud-connection/shadow-handler.ts +38 -12
  92. package/src/cloud-connection/shadow.ts +1 -1
  93. package/src/environment.ts +2 -0
  94. package/src/infrastructure/agent-config.ts +1 -1
  95. package/src/subcommands/app/env-vars.ts +38 -8
  96. package/src/subcommands/app/index.ts +4 -1
  97. package/src/subcommands/app/models.ts +10 -1
  98. package/src/subcommands/app/shadow.ts +48 -0
  99. package/src/subcommands/app/version.ts +2 -2
  100. package/src/util/cloud-mode-ready.ts +23 -0
@@ -12,7 +12,6 @@ export declare function updateAppCfgFile(props: {
12
12
  }): Promise<void>;
13
13
  export declare function updateAppCfg(props: {
14
14
  projectId: string;
15
- appReleaseHash: string;
16
15
  newAppCfg: AppConfig;
17
16
  }): Promise<void>;
18
17
  export declare function readDockerCompose(props: {
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAIhE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAmBrB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;CACnB,iBAgBA;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CAChB,iBAKA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;CACtB,iBA6BA;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"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAIhE,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,SAAS,CAAC,CAiBrB;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;CACnB,iBAaA;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,GAAG,CAAC;CAChB,iBAKA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,CAAC;CACtB,iBAmCA;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,gBAOnE;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,GAAG,CAAC;CACpB,iBAQA"}
@@ -12,9 +12,7 @@ const status_1 = require("./status");
12
12
  const logger_1 = require("../util/logger");
13
13
  async function readAppCfgFile(props) {
14
14
  const { projectId } = props;
15
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId }))) {
16
- throw new Error(`App ${projectId} is not present!`);
17
- }
15
+ await (0, utils_1.requireAppInstalled)({ projectId });
18
16
  const appDir = (0, utils_1.getAppDir)(projectId);
19
17
  const appJson = (0, app_1.AppJsonFile)(appDir);
20
18
  if (!appJson.exists()) {
@@ -30,9 +28,6 @@ async function readAppCfgFile(props) {
30
28
  exports.readAppCfgFile = readAppCfgFile;
31
29
  async function writeAppCfgFile(props) {
32
30
  const { projectId, appCfg } = props;
33
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId }))) {
34
- throw new Error(`App ${projectId} is not present!`);
35
- }
36
31
  const appDir = (0, utils_1.getAppDir)(projectId);
37
32
  const appJson = (0, app_1.AppJsonFile)(appDir);
38
33
  try {
@@ -51,37 +46,31 @@ async function updateAppCfgFile(props) {
51
46
  }
52
47
  exports.updateAppCfgFile = updateAppCfgFile;
53
48
  async function updateAppCfg(props) {
54
- const { projectId, appReleaseHash, newAppCfg } = props;
55
- logger_1.logger.info(`Updating app config for ${projectId}:${appReleaseHash}.`);
49
+ const { projectId, newAppCfg } = props;
50
+ logger_1.logger.info(`Updating app config for ${projectId}`);
56
51
  const appDir = (0, utils_1.getAppDir)(projectId);
57
- if (await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId })) {
58
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
59
- throw new Error('Application already has installation in progress!');
60
- }
61
- logger_1.logger.info('Application is already installed, updating');
62
- await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
63
- projectId,
64
- version: appReleaseHash
65
- });
66
- }
67
- else {
68
- throw new Error('Application is not installed!');
69
- }
52
+ await (0, utils_1.requireAppReady)({ projectId });
53
+ const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
54
+ projectId
55
+ });
56
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
57
+ projectId,
58
+ version: appReleaseHash
59
+ });
70
60
  await writeAppCfgFile({ projectId, appCfg: newAppCfg });
71
61
  await (0, utils_1.buildApp)({ appDir });
72
62
  await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
73
63
  projectId,
74
64
  version: appReleaseHash
75
65
  });
76
- await (0, status_1.restartApp)({ projectId });
77
- logger_1.logger.info(`Updated app config and rebuilt ${projectId}:${appReleaseHash}.`);
66
+ if (await (0, status_1.isAppStarted)({ projectId })) {
67
+ await (0, status_1.restartApp)({ projectId });
68
+ }
69
+ logger_1.logger.info(`Updated app config and rebuilt ${projectId}: ${JSON.stringify(newAppCfg, null, 2)}`);
78
70
  }
79
71
  exports.updateAppCfg = updateAppCfg;
80
72
  async function readDockerCompose(props) {
81
73
  const { projectId } = props;
82
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
83
- throw new Error(`App ${projectId} is not ready!`);
84
- }
85
74
  const appDir = (0, utils_1.getAppDir)(projectId);
86
75
  const spawner = (0, util_1.JsSpawner)({ path: appDir });
87
76
  const composeContents = await spawner.readFile('docker-compose.yaml');
@@ -91,9 +80,6 @@ async function readDockerCompose(props) {
91
80
  exports.readDockerCompose = readDockerCompose;
92
81
  async function writeDockerCompose(props) {
93
82
  const { projectId, dockerCompose } = props;
94
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
95
- throw new Error(`App ${projectId} is not ready!`);
96
- }
97
83
  const appDir = (0, utils_1.getAppDir)(projectId);
98
84
  const spawner = (0, util_1.JsSpawner)({ path: appDir });
99
85
  const composeOutput = (0, yaml_1.stringify)(dockerCompose);
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/application-control/config.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,13 @@
1
+ export interface EnvVars {
2
+ [service: string]: {
3
+ [name: string]: string;
4
+ };
5
+ }
1
6
  export declare function setEnv(props: {
2
7
  projectId: string;
3
- vars: string[];
4
- service?: string;
8
+ envVars: EnvVars;
5
9
  }): Promise<void>;
6
10
  export declare function getAllEnvs(props: {
7
11
  projectId: string;
8
- }): Promise<{}>;
12
+ }): Promise<EnvVars>;
9
13
  //# sourceMappingURL=environment-variables.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAKA,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,eAkC5D"}
1
+ {"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,OAAO;IACtB,CAAC,OAAO,EAAE,MAAM,GAAG;QACjB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACxB,CAAC;CACH;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,iBAkE1E;AAWD,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAwCnB"}
@@ -2,46 +2,74 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getAllEnvs = exports.setEnv = void 0;
4
4
  const util_1 = require("alwaysai/lib/util");
5
- const agent_config_1 = require("../infrastructure/agent-config");
6
5
  const config_1 = require("./config");
7
6
  const utils_1 = require("./utils");
7
+ const logger_1 = require("../util/logger");
8
+ const agent_config_1 = require("../infrastructure/agent-config");
9
+ const status_1 = require("./status");
8
10
  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
- }
11
+ const { projectId, envVars } = props;
12
+ await (0, utils_1.requireAppReady)({ projectId });
13
+ const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
14
+ projectId
15
+ });
16
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
17
+ projectId,
18
+ version: appReleaseHash
19
+ });
13
20
  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
- }
21
+ if (!('services' in composeParsed)) {
22
+ throw new Error(`Docker compose file for ${projectId} has no services!`);
23
+ }
24
+ const services = Object.keys(envVars);
25
+ for (const s of services) {
26
+ if (!Object.keys(composeParsed['services']).includes(s)) {
27
+ throw new Error(`Service ${s} not found in ${JSON.stringify(composeParsed['services'], null, 2)}`);
23
28
  }
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
- }
29
+ const envVarList = [];
30
+ for (const envVar of Object.keys(envVars[s])) {
31
+ envVarList.push(`${envVar}=${envVars[s][envVar]}`);
32
+ }
33
+ const service = composeParsed['services'][s];
34
+ // The environment field overrides the env files, so by appending to
35
+ // the environment list we can assure the value will be used over
36
+ // the env_file.
37
+ // NOTE: We are only appending the new values to the end of the
38
+ // environment variable list, which will override but not replace
39
+ // previous instances of the same environment variable.
40
+ if ('environment' in service) {
41
+ const environment = service['environment'];
42
+ composeParsed['services'][s]['environment'] =
43
+ environment.concat(envVarList);
44
+ }
45
+ else {
46
+ composeParsed['services'][s]['environment'] = envVarList;
35
47
  }
36
48
  }
37
49
  await (0, config_1.writeDockerCompose)({ projectId, dockerCompose: composeParsed });
50
+ const appDir = (0, utils_1.getAppDir)(projectId);
51
+ await (0, utils_1.buildApp)({ appDir });
52
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
53
+ projectId,
54
+ version: appReleaseHash
55
+ });
56
+ if (await (0, status_1.isAppStarted)({ projectId })) {
57
+ await (0, status_1.restartApp)({ projectId });
58
+ }
59
+ logger_1.logger.info(`Updated environment variables for ${projectId}: ${JSON.stringify(envVars, null, 2)}`);
38
60
  }
39
61
  exports.setEnv = setEnv;
62
+ async function convertStringEnvsToKeyVal(stringEnvs) {
63
+ const envVars = {};
64
+ stringEnvs.forEach((env) => {
65
+ const keyVal = env.split('=');
66
+ envVars[keyVal[0]] = keyVal[1];
67
+ });
68
+ return envVars;
69
+ }
40
70
  async function getAllEnvs(props) {
41
71
  const { projectId } = props;
42
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
43
- throw new Error(`App ${projectId} is not ready!`);
44
- }
72
+ await (0, utils_1.requireAppReady)({ projectId });
45
73
  const appDir = (0, utils_1.getAppDir)(projectId);
46
74
  const spawner = (0, util_1.JsSpawner)({ path: appDir });
47
75
  const envVars = {};
@@ -49,22 +77,30 @@ async function getAllEnvs(props) {
49
77
  if ('services' in composeParsed) {
50
78
  const services = Object.keys(composeParsed['services']);
51
79
  for (const s of services) {
52
- envVars[s] = [];
80
+ envVars[s] = {};
53
81
  const service = composeParsed['services'][s];
82
+ // Read env_file first, since it is lowest on the hierarchy
54
83
  if ('env_file' in service) {
55
84
  const envFiles = service['env_file'];
56
85
  for (const ef of envFiles) {
57
- envVars[s] = envVars[s].concat((await spawner.readFile(ef)).split('\n'));
86
+ if (!(await spawner.exists(ef))) {
87
+ logger_1.logger.error(`Skipping env file ${ef} for service ${s}: not found!`);
88
+ continue;
89
+ }
90
+ let envFileLines = (await spawner.readFile(ef)).split('\n');
91
+ // Filter out empty lines and comment lines
92
+ envFileLines = envFileLines.filter((v) => {
93
+ return v !== '' && !v.includes('#');
94
+ });
95
+ const newEnvVars = await convertStringEnvsToKeyVal(envFileLines);
96
+ envVars[s] = Object.assign(Object.assign({}, envVars[s]), newEnvVars);
58
97
  }
59
98
  }
60
99
  if ('environment' in service) {
61
100
  const environment = service['environment'];
62
- envVars[s] = envVars[s].concat(environment);
101
+ const newEnvVars = await convertStringEnvsToKeyVal(environment);
102
+ envVars[s] = Object.assign(Object.assign({}, envVars[s]), newEnvVars);
63
103
  }
64
- // Filter out empty lines and comment lines
65
- envVars[s] = envVars[s].filter((v) => {
66
- return v !== '' && !v.includes('#');
67
- });
68
104
  }
69
105
  }
70
106
  return envVars;
@@ -1 +1 @@
1
- {"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":";;;AAAA,4CAA8C;AAC9C,qCAAiE;AACjE,mCAA+D;AAC/D,2CAAwC;AACxC,iEAAiE;AACjE,qCAAoD;AAQ7C,KAAK,UAAU,MAAM,CAAC,KAA8C;IACzE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IACrC,MAAM,IAAA,uBAAe,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,MAAM,IAAA,8BAAe,GAAE,CAAC,aAAa,CAAC;QAC3D,SAAS;KACV,CAAC,CAAC;IACH,MAAM,IAAA,8BAAe,GAAE,CAAC,gBAAgB,CAAC;QACvC,SAAS;QACT,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,MAAM,aAAa,GAAG,MAAM,IAAA,0BAAiB,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7D,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,CAAC,EAAE;QAClC,MAAM,IAAI,KAAK,CAAC,2BAA2B,SAAS,mBAAmB,CAAC,CAAC;KAC1E;IACD,MAAM,QAAQ,GAAa,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YACvD,MAAM,IAAI,KAAK,CACb,WAAW,CAAC,iBAAiB,IAAI,CAAC,SAAS,CACzC,aAAa,CAAC,UAAU,CAAC,EACzB,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;SACH;QACD,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE;YAC5C,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACpD;QACD,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,oEAAoE;QACpE,iEAAiE;QACjE,gBAAgB;QAEhB,+DAA+D;QAC/D,iEAAiE;QACjE,uDAAuD;QACvD,IAAI,aAAa,IAAI,OAAO,EAAE;YAC5B,MAAM,WAAW,GAAa,OAAO,CAAC,aAAa,CAAC,CAAC;YACrD,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC;gBACzC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;SAClC;aAAM;YACL,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC;SAC1D;KACF;IACD,MAAM,IAAA,2BAAkB,EAAC,EAAE,SAAS,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC,CAAC;IAEtE,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,SAAS,CAAC,CAAC;IACpC,MAAM,IAAA,gBAAQ,EAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAE3B,MAAM,IAAA,8BAAe,GAAE,CAAC,eAAe,CAAC;QACtC,SAAS;QACT,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,IAAI,MAAM,IAAA,qBAAY,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QACrC,MAAM,IAAA,mBAAU,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;KACjC;IACD,eAAM,CAAC,IAAI,CACT,qCAAqC,SAAS,KAAK,IAAI,CAAC,SAAS,CAC/D,OAAO,EACP,IAAI,EACJ,CAAC,CACF,EAAE,CACJ,CAAC;AACJ,CAAC;AAlED,wBAkEC;AAED,KAAK,UAAU,yBAAyB,CAAC,UAAoB;IAC3D,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,UAAU,CAAC,OAAO,CAAC,CAAC,GAAW,EAAE,EAAE;QACjC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAEM,KAAK,UAAU,UAAU,CAAC,KAEhC;IACC,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,IAAA,uBAAe,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACrC,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,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,aAAa,GAAG,MAAM,IAAA,0BAAiB,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7D,IAAI,UAAU,IAAI,aAAa,EAAE;QAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE;YACxB,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YAChB,MAAM,OAAO,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,2DAA2D;YAC3D,IAAI,UAAU,IAAI,OAAO,EAAE;gBACzB,MAAM,QAAQ,GAAa,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC/C,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE;oBACzB,IAAI,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;wBAC/B,eAAM,CAAC,KAAK,CACV,qBAAqB,EAAE,gBAAgB,CAAC,cAAc,CACvD,CAAC;wBACF,SAAS;qBACV;oBACD,IAAI,YAAY,GAAG,CAAC,MAAM,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC5D,2CAA2C;oBAC3C,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;wBACvC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBACtC,CAAC,CAAC,CAAC;oBACH,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,YAAY,CAAC,CAAC;oBACjE,OAAO,CAAC,CAAC,CAAC,mCAAQ,OAAO,CAAC,CAAC,CAAC,GAAK,UAAU,CAAE,CAAC;iBAC/C;aACF;YACD,IAAI,aAAa,IAAI,OAAO,EAAE;gBAC5B,MAAM,WAAW,GAAa,OAAO,CAAC,aAAa,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,WAAW,CAAC,CAAC;gBAChE,OAAO,CAAC,CAAC,CAAC,mCAAQ,OAAO,CAAC,CAAC,CAAC,GAAK,UAAU,CAAE,CAAC;aAC/C;SACF;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AA1CD,gCA0CC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=environment-variables.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-variables.test.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const agent_config_1 = require("../infrastructure/agent-config");
4
+ const config_1 = require("./config");
5
+ const environment_variables_1 = require("./environment-variables");
6
+ const status_1 = require("./status");
7
+ const utils_1 = require("./utils");
8
+ jest.mock('./config');
9
+ jest.mock('./utils');
10
+ jest.mocked(utils_1.requireAppReady).mockResolvedValue();
11
+ jest.mocked(utils_1.buildApp).mockResolvedValue();
12
+ jest.mock('./status');
13
+ jest.mocked(status_1.isAppStarted).mockResolvedValue(true);
14
+ jest.mocked(status_1.restartApp).mockResolvedValue();
15
+ jest.mock('../infrastructure/agent-config');
16
+ const mockSetAppInstalling = jest.fn().mockResolvedValue({});
17
+ const mockSetAppInstalled = jest.fn().mockResolvedValue({});
18
+ const mockGetAppVersion = jest.fn().mockResolvedValue('test-version');
19
+ jest.mocked(agent_config_1.AgentConfigFile).mockReturnValue({
20
+ setAppInstalling: mockSetAppInstalling,
21
+ setAppInstalled: mockSetAppInstalled,
22
+ getAppVersion: mockGetAppVersion
23
+ });
24
+ const projectId1 = 'test-project';
25
+ describe('Test environment variable get and set', () => {
26
+ beforeEach(() => {
27
+ jest.clearAllMocks();
28
+ });
29
+ describe('Test getAllEnvs()', () => {
30
+ test('get all envs with one service and no envs', async () => {
31
+ const compose = {
32
+ services: {
33
+ alwaysai: {}
34
+ }
35
+ };
36
+ jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
37
+ const envVars = await (0, environment_variables_1.getAllEnvs)({ projectId: projectId1 });
38
+ expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
39
+ projectId: projectId1
40
+ });
41
+ expect(envVars).toEqual({
42
+ alwaysai: {}
43
+ });
44
+ });
45
+ // TODO: Add test with env file
46
+ test('get all envs with one service and two envs', async () => {
47
+ const compose = {
48
+ services: {
49
+ alwaysai: {
50
+ environment: ['TEST=1', 'TEST2=2']
51
+ }
52
+ }
53
+ };
54
+ jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
55
+ const envVars = await (0, environment_variables_1.getAllEnvs)({ projectId: projectId1 });
56
+ expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
57
+ projectId: projectId1
58
+ });
59
+ expect(envVars).toEqual({
60
+ alwaysai: { TEST: '1', TEST2: '2' }
61
+ });
62
+ });
63
+ test('get all envs with two services and envs', async () => {
64
+ const compose = {
65
+ services: {
66
+ alwaysai: {
67
+ environment: ['TEST=3', 'TEST2=4']
68
+ },
69
+ edgeiq: {
70
+ environment: ['TEST3=5', 'TEST4=6']
71
+ }
72
+ }
73
+ };
74
+ jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
75
+ const envVars = await (0, environment_variables_1.getAllEnvs)({ projectId: projectId1 });
76
+ expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
77
+ projectId: projectId1
78
+ });
79
+ expect(envVars).toEqual({
80
+ alwaysai: { TEST: '3', TEST2: '4' },
81
+ edgeiq: { TEST3: '5', TEST4: '6' }
82
+ });
83
+ });
84
+ });
85
+ describe('Test setEnv()', () => {
86
+ test('Set one env', async () => {
87
+ const compose = {
88
+ services: {
89
+ alwaysai: {}
90
+ }
91
+ };
92
+ jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
93
+ const envVars = { alwaysai: { TEST: '1' } };
94
+ await (0, environment_variables_1.setEnv)({ projectId: projectId1, envVars });
95
+ expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
96
+ projectId: projectId1
97
+ });
98
+ expect(jest.mocked(config_1.writeDockerCompose)).toBeCalledWith({
99
+ projectId: projectId1,
100
+ dockerCompose: {
101
+ services: {
102
+ alwaysai: {
103
+ environment: ['TEST=1']
104
+ }
105
+ }
106
+ }
107
+ });
108
+ });
109
+ test('Update one env', async () => {
110
+ const environment = ['TEST1=1', 'TEST2=2'];
111
+ const compose = {
112
+ services: {
113
+ alwaysai: { environment }
114
+ }
115
+ };
116
+ jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
117
+ const envVars = { alwaysai: { TEST1: '2' } };
118
+ await (0, environment_variables_1.setEnv)({ projectId: projectId1, envVars });
119
+ expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
120
+ projectId: projectId1
121
+ });
122
+ expect(jest.mocked(config_1.writeDockerCompose)).toBeCalledWith({
123
+ projectId: projectId1,
124
+ dockerCompose: {
125
+ services: {
126
+ alwaysai: {
127
+ environment: ['TEST1=1', 'TEST2=2', 'TEST1=2']
128
+ }
129
+ }
130
+ }
131
+ });
132
+ });
133
+ test('Update one env with two services', async () => {
134
+ const environment = ['TEST1=3', 'TEST2=4'];
135
+ const compose = {
136
+ services: {
137
+ alwaysai: { environment },
138
+ other: { environment: ['OTHER_TEST=1'] }
139
+ }
140
+ };
141
+ jest.mocked(config_1.readDockerCompose).mockResolvedValue(compose);
142
+ const envVars = { alwaysai: { TEST1: '2' } };
143
+ await (0, environment_variables_1.setEnv)({ projectId: projectId1, envVars });
144
+ expect(jest.mocked(config_1.readDockerCompose)).toBeCalledWith({
145
+ projectId: projectId1
146
+ });
147
+ expect(jest.mocked(config_1.writeDockerCompose)).toBeCalledWith({
148
+ projectId: projectId1,
149
+ dockerCompose: {
150
+ services: {
151
+ alwaysai: {
152
+ environment: ['TEST1=3', 'TEST2=4', 'TEST1=2']
153
+ },
154
+ other: {
155
+ environment: ['OTHER_TEST=1']
156
+ }
157
+ }
158
+ }
159
+ });
160
+ });
161
+ });
162
+ });
163
+ //# sourceMappingURL=environment-variables.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-variables.test.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.test.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { readAppCfgFile, updateAppCfg, readDockerCompose, writeDockerCompose } from './config';
1
+ import { readAppCfgFile, updateAppCfg } from './config';
2
2
  import { installApp, uninstallApp } from './install';
3
3
  import { rollbackApp } from './backup';
4
4
  import { getAppStatus, startApp, getAppLogs, stopApp, restartApp } from './status';
5
5
  import { ModelDetails } from './types';
6
- import { getAllEnvs, setEnv } from './environment-variables';
7
- export { readAppCfgFile, updateAppCfg, readDockerCompose, writeDockerCompose, installApp, uninstallApp, rollbackApp, getAppStatus, startApp, getAppLogs, stopApp, restartApp, ModelDetails, getAllEnvs, setEnv };
6
+ import { EnvVars, getAllEnvs, setEnv } from './environment-variables';
7
+ export { readAppCfgFile, updateAppCfg, installApp, uninstallApp, rollbackApp, getAppStatus, startApp, getAppLogs, stopApp, restartApp, ModelDetails, EnvVars, getAllEnvs, setEnv };
8
8
  import { getAppModels, removeModel, replaceModels, updateModels, updateModelsWithPresignedUrls } from './models';
9
9
  export { getAppModels, removeModel, replaceModels, updateModels, updateModelsWithPresignedUrls };
10
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,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,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,UAAU,EACV,MAAM,EACP,CAAC;AAGF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC9B,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC9B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACX,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAEtE,OAAO,EACL,cAAc,EACd,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,OAAO,EACP,UAAU,EACV,YAAY,EACZ,OAAO,EACP,UAAU,EACV,MAAM,EACP,CAAC;AAGF,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC9B,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,6BAA6B,EAC9B,CAAC"}
@@ -1,11 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.updateModelsWithPresignedUrls = exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.rollbackApp = exports.uninstallApp = exports.installApp = exports.writeDockerCompose = exports.readDockerCompose = exports.updateAppCfg = exports.readAppCfgFile = void 0;
3
+ exports.updateModelsWithPresignedUrls = exports.updateModels = exports.replaceModels = exports.removeModel = exports.getAppModels = exports.setEnv = exports.getAllEnvs = exports.restartApp = exports.stopApp = exports.getAppLogs = exports.startApp = exports.getAppStatus = exports.rollbackApp = exports.uninstallApp = exports.installApp = exports.updateAppCfg = exports.readAppCfgFile = void 0;
4
4
  const config_1 = require("./config");
5
5
  Object.defineProperty(exports, "readAppCfgFile", { enumerable: true, get: function () { return config_1.readAppCfgFile; } });
6
6
  Object.defineProperty(exports, "updateAppCfg", { enumerable: true, get: function () { return config_1.updateAppCfg; } });
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
7
  const install_1 = require("./install");
10
8
  Object.defineProperty(exports, "installApp", { enumerable: true, get: function () { return install_1.installApp; } });
11
9
  Object.defineProperty(exports, "uninstallApp", { enumerable: true, get: function () { return install_1.uninstallApp; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,qCAKkB;AAchB,+FAlBA,uBAAc,OAkBA;AACd,6FAlBA,qBAAY,OAkBA;AACZ,kGAlBA,0BAAiB,OAkBA;AACjB,mGAlBA,2BAAkB,OAkBA;AAhBpB,uCAAqD;AAiBnD,2FAjBO,oBAAU,OAiBP;AACV,6FAlBmB,sBAAY,OAkBnB;AAjBd,qCAAuC;AAkBrC,4FAlBO,oBAAW,OAkBP;AAjBb,qCAMkB;AAYhB,6FAjBA,qBAAY,OAiBA;AACZ,yFAjBA,iBAAQ,OAiBA;AACR,2FAjBA,mBAAU,OAiBA;AACV,wFAjBA,gBAAO,OAiBA;AACP,2FAjBA,mBAAU,OAiBA;AAdZ,mEAA6D;AAgB3D,2FAhBO,kCAAU,OAgBP;AACV,uFAjBmB,8BAAM,OAiBnB;AAGR,gBAAgB;AAChB,qCAMkB;AAGhB,6FARA,qBAAY,OAQA;AACZ,4FARA,oBAAW,OAQA;AACX,8FARA,sBAAa,OAQA;AACb,6FARA,qBAAY,OAQA;AACZ,8GARA,sCAA6B,OAQA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/application-control/index.ts"],"names":[],"mappings":";;;AAAA,qCAAwD;AActD,+FAdO,uBAAc,OAcP;AACd,6FAfuB,qBAAY,OAevB;AAdd,uCAAqD;AAenD,2FAfO,oBAAU,OAeP;AACV,6FAhBmB,sBAAY,OAgBnB;AAfd,qCAAuC;AAgBrC,4FAhBO,oBAAW,OAgBP;AAfb,qCAMkB;AAUhB,6FAfA,qBAAY,OAeA;AACZ,yFAfA,iBAAQ,OAeA;AACR,2FAfA,mBAAU,OAeA;AACV,wFAfA,gBAAO,OAeA;AACP,2FAfA,mBAAU,OAeA;AAZZ,mEAAsE;AAepE,2FAfgB,kCAAU,OAehB;AACV,uFAhB4B,8BAAM,OAgB5B;AAGR,gBAAgB;AAChB,qCAMkB;AAGhB,6FARA,qBAAY,OAQA;AACZ,4FARA,oBAAW,OAQA;AACX,8FARA,sBAAa,OAQA;AACb,6FARA,qBAAY,OAQA;AACZ,8GARA,sCAA6B,OAQA"}
@@ -19,7 +19,6 @@ export declare function installModelsWithPresignedURLs(modelPayloads: ModelInsta
19
19
  export declare function updateModelsWithPresignedUrls(props: {
20
20
  projectId: string;
21
21
  modelInstallPayloads: ModelInstallPayload[];
22
- appReleaseHash: string;
23
22
  newAppCfg: AppConfig;
24
23
  }): Promise<void>;
25
24
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAgBrE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUvC,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2BAoB9D;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,iBAiBA;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,iBAyBA;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,iBAsClB;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,SAAS,CAAC;CACtB,iBA+DA"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/application-control/models.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAerE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAUvC,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,wBAAsB,YAAY,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,2BAoB9D;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,iBAiBA;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,iBAyBA;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,iBAsClB;AAED,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,SAAS,EAAE,SAAS,CAAC;CACtB,iBAkDA"}
@@ -114,24 +114,18 @@ async function installModelsWithPresignedURLs(modelPayloads, targetDir) {
114
114
  }
115
115
  exports.installModelsWithPresignedURLs = installModelsWithPresignedURLs;
116
116
  async function updateModelsWithPresignedUrls(props) {
117
- const { projectId, modelInstallPayloads, appReleaseHash, newAppCfg } = props;
117
+ const { projectId, modelInstallPayloads, newAppCfg } = props;
118
118
  logger_1.logger.info(`Installing models for ${projectId}`);
119
119
  const spawner = (0, util_1.JsSpawner)();
120
120
  const appDir = (0, utils_1.getAppDir)(projectId);
121
- if (await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId })) {
122
- if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
123
- throw new Error('Application already has installation in progress!');
124
- }
125
- logger_1.logger.info('Updating installed application');
126
- await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
127
- projectId,
128
- version: appReleaseHash
129
- });
130
- }
131
- else {
132
- throw new Error('Application is not installed!');
133
- }
134
- const ogAppCfg = await (0, config_1.readAppCfgFile)({ projectId });
121
+ await (0, utils_1.requireAppReady)({ projectId });
122
+ const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
123
+ projectId
124
+ });
125
+ await (0, agent_config_1.AgentConfigFile)().setAppInstalling({
126
+ projectId,
127
+ version: appReleaseHash
128
+ });
135
129
  const ogDir = path.join(appDir, constants_1.APP_MODELS_DIRECTORY_NAME);
136
130
  // Copy all current models to restore dir in case of failure
137
131
  const restoreDir = `${ogDir}.restore`;
@@ -153,18 +147,10 @@ async function updateModelsWithPresignedUrls(props) {
153
147
  projectId,
154
148
  version: appReleaseHash
155
149
  });
156
- await (0, status_1.restartApp)({ projectId });
150
+ if (await (0, status_1.isAppStarted)({ projectId })) {
151
+ await (0, status_1.restartApp)({ projectId });
152
+ }
157
153
  logger_1.logger.info(`Models installed for project ${projectId}`);
158
- /* Leave error handling to higher level so errors are sent to cloud
159
- } catch (e) {
160
- logger.error(
161
- 'Error updating app models from presigned URL, restoring models.',
162
- e.message
163
- );
164
- await spawner.rimraf(ogDir);
165
- await copyDir({ srcPath: restoreDir, destPath: ogDir });
166
- await writeAppCfgFile({ projectId, appCfg: ogAppCfg });
167
- */
168
154
  }
169
155
  finally {
170
156
  await spawner.rimraf(tmpDir);