@alwaysai/device-agent 2.0.0 → 2.0.2-0
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.
- package/lib/application-control/environment-variables.d.ts +4 -0
- package/lib/application-control/environment-variables.d.ts.map +1 -1
- package/lib/application-control/environment-variables.js +17 -13
- package/lib/application-control/environment-variables.js.map +1 -1
- package/lib/application-control/install.d.ts +4 -1
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +16 -1
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/utils.d.ts.map +1 -1
- package/lib/application-control/utils.js +13 -0
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/base-message-handler.d.ts +27 -0
- package/lib/cloud-connection/base-message-handler.d.ts.map +1 -0
- package/lib/cloud-connection/base-message-handler.js +72 -0
- package/lib/cloud-connection/base-message-handler.js.map +1 -0
- package/lib/cloud-connection/connection-manager.d.ts +20 -0
- package/lib/cloud-connection/connection-manager.d.ts.map +1 -0
- package/lib/cloud-connection/connection-manager.js +164 -0
- package/lib/cloud-connection/connection-manager.js.map +1 -0
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +7 -23
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +49 -517
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/device-agent-message-handler.d.ts +22 -0
- package/lib/cloud-connection/device-agent-message-handler.d.ts.map +1 -0
- package/lib/cloud-connection/device-agent-message-handler.js +357 -0
- package/lib/cloud-connection/device-agent-message-handler.js.map +1 -0
- package/lib/cloud-connection/live-updates-handler.d.ts +1 -0
- package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
- package/lib/cloud-connection/live-updates-handler.js +13 -10
- package/lib/cloud-connection/live-updates-handler.js.map +1 -1
- package/lib/cloud-connection/message-dispatcher.d.ts +10 -0
- package/lib/cloud-connection/message-dispatcher.d.ts.map +1 -0
- package/lib/cloud-connection/message-dispatcher.js +27 -0
- package/lib/cloud-connection/message-dispatcher.js.map +1 -0
- package/lib/cloud-connection/publisher.d.ts +3 -2
- package/lib/cloud-connection/publisher.d.ts.map +1 -1
- package/lib/cloud-connection/publisher.js +8 -4
- package/lib/cloud-connection/publisher.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.d.ts +7 -0
- package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
- package/lib/cloud-connection/shadow-handler.js +77 -1
- package/lib/cloud-connection/shadow-handler.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.test.js +5 -2
- package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
- package/lib/cloud-connection/transaction-manager.d.ts +9 -4
- package/lib/cloud-connection/transaction-manager.d.ts.map +1 -1
- package/lib/cloud-connection/transaction-manager.js +22 -11
- package/lib/cloud-connection/transaction-manager.js.map +1 -1
- package/lib/cloud-connection/transaction-manager.test.js +43 -14
- package/lib/cloud-connection/transaction-manager.test.js.map +1 -1
- package/lib/jobs/job-handler.d.ts +23 -0
- package/lib/jobs/job-handler.d.ts.map +1 -0
- package/lib/jobs/job-handler.js +131 -0
- package/lib/jobs/job-handler.js.map +1 -0
- package/lib/secure-tunneling/secure-tunnel-message-handler.d.ts +8 -0
- package/lib/secure-tunneling/secure-tunnel-message-handler.d.ts.map +1 -0
- package/lib/secure-tunneling/secure-tunnel-message-handler.js +42 -0
- package/lib/secure-tunneling/secure-tunnel-message-handler.js.map +1 -0
- package/lib/subcommands/app/version.d.ts +2 -0
- package/lib/subcommands/app/version.d.ts.map +1 -1
- package/lib/subcommands/app/version.js +14 -2
- package/lib/subcommands/app/version.js.map +1 -1
- package/package.json +2 -2
- package/src/application-control/environment-variables.ts +31 -21
- package/src/application-control/install.ts +24 -3
- package/src/application-control/utils.ts +13 -0
- package/src/cloud-connection/base-message-handler.ts +118 -0
- package/src/cloud-connection/connection-manager.ts +196 -0
- package/src/cloud-connection/device-agent-cloud-connection.ts +104 -817
- package/src/cloud-connection/device-agent-message-handler.ts +642 -0
- package/src/cloud-connection/live-updates-handler.ts +26 -18
- package/src/cloud-connection/message-dispatcher.ts +33 -0
- package/src/cloud-connection/publisher.ts +28 -23
- package/src/cloud-connection/shadow-handler.test.ts +6 -2
- package/src/cloud-connection/shadow-handler.ts +129 -1
- package/src/cloud-connection/transaction-manager.test.ts +55 -24
- package/src/cloud-connection/transaction-manager.ts +42 -31
- package/src/jobs/job-handler.ts +146 -0
- package/src/secure-tunneling/secure-tunnel-message-handler.ts +56 -0
- package/src/subcommands/app/version.ts +20 -2
|
@@ -3,6 +3,10 @@ export declare function setEnv(props: {
|
|
|
3
3
|
projectId: string;
|
|
4
4
|
envVars: EnvVars;
|
|
5
5
|
}): Promise<void>;
|
|
6
|
+
export declare function setEnvInternal(props: {
|
|
7
|
+
projectId: string;
|
|
8
|
+
envVars: EnvVars;
|
|
9
|
+
}): Promise<void>;
|
|
6
10
|
export declare function convertStringEnvsToKeyVal(stringEnvs: string[]): {};
|
|
7
11
|
export declare function getAllEnvs(props: {
|
|
8
12
|
projectId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,wBAAsB,MAAM,CAAC,KAAK,EAAE;
|
|
1
|
+
{"version":3,"file":"environment-variables.d.ts","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,wBAAsB,MAAM,CAAC,KAAK,EAAE;IAClC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6BhB;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BhB;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,EAAE,MAO7D;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuCnB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getAllEnvs = exports.convertStringEnvsToKeyVal = exports.setEnv = void 0;
|
|
3
|
+
exports.getAllEnvs = exports.convertStringEnvsToKeyVal = exports.setEnvInternal = exports.setEnv = void 0;
|
|
4
4
|
const util_1 = require("alwaysai/lib/util");
|
|
5
5
|
const config_1 = require("./config");
|
|
6
6
|
const utils_1 = require("./utils");
|
|
@@ -9,7 +9,6 @@ const agent_config_1 = require("../infrastructure/agent-config");
|
|
|
9
9
|
const status_1 = require("./status");
|
|
10
10
|
async function setEnv(props) {
|
|
11
11
|
const { projectId, envVars } = props;
|
|
12
|
-
await (0, utils_1.requireAppReady)({ projectId });
|
|
13
12
|
const appReleaseHash = await (0, agent_config_1.AgentConfigFile)().getAppVersion({
|
|
14
13
|
projectId
|
|
15
14
|
});
|
|
@@ -17,6 +16,21 @@ async function setEnv(props) {
|
|
|
17
16
|
projectId,
|
|
18
17
|
version: appReleaseHash
|
|
19
18
|
});
|
|
19
|
+
await setEnvInternal({ projectId, envVars });
|
|
20
|
+
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
21
|
+
await (0, utils_1.buildApp)({ appDir });
|
|
22
|
+
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
|
|
23
|
+
projectId,
|
|
24
|
+
version: appReleaseHash
|
|
25
|
+
});
|
|
26
|
+
if (await (0, status_1.isAppStarted)({ projectId })) {
|
|
27
|
+
await (0, status_1.restartApp)({ projectId });
|
|
28
|
+
}
|
|
29
|
+
logger_1.logger.info(`Updated environment variables for ${projectId}: ${JSON.stringify(envVars, null, 2)}`);
|
|
30
|
+
}
|
|
31
|
+
exports.setEnv = setEnv;
|
|
32
|
+
async function setEnvInternal(props) {
|
|
33
|
+
const { projectId, envVars } = props;
|
|
20
34
|
const composeParsed = await (0, config_1.readDockerCompose)({ projectId });
|
|
21
35
|
if (!('services' in composeParsed)) {
|
|
22
36
|
throw new Error(`Docker compose file for ${projectId} has no services!`);
|
|
@@ -36,18 +50,8 @@ async function setEnv(props) {
|
|
|
36
50
|
service['environment'] = envVarList;
|
|
37
51
|
});
|
|
38
52
|
await (0, config_1.writeDockerCompose)({ projectId, dockerCompose: composeParsed });
|
|
39
|
-
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
40
|
-
await (0, utils_1.buildApp)({ appDir });
|
|
41
|
-
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
|
|
42
|
-
projectId,
|
|
43
|
-
version: appReleaseHash
|
|
44
|
-
});
|
|
45
|
-
if (await (0, status_1.isAppStarted)({ projectId })) {
|
|
46
|
-
await (0, status_1.restartApp)({ projectId });
|
|
47
|
-
}
|
|
48
|
-
logger_1.logger.info(`Updated environment variables for ${projectId}: ${JSON.stringify(envVars, null, 2)}`);
|
|
49
53
|
}
|
|
50
|
-
exports.
|
|
54
|
+
exports.setEnvInternal = setEnvInternal;
|
|
51
55
|
function convertStringEnvsToKeyVal(stringEnvs) {
|
|
52
56
|
const envVars = {};
|
|
53
57
|
stringEnvs.forEach((env) => {
|
|
@@ -1 +1 @@
|
|
|
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;AAG7C,KAAK,UAAU,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"environment-variables.js","sourceRoot":"","sources":["../../src/application-control/environment-variables.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { AppDetails } from '@alwaysai/device-agent-schemas';
|
|
1
|
+
import { AppDetails, EnvVars } from '@alwaysai/device-agent-schemas';
|
|
2
|
+
import { AppConfig } from '@alwaysai/app-configuration-schemas';
|
|
2
3
|
declare type SignedUrlPayloadType = {
|
|
3
4
|
appInstallPayload: {
|
|
4
5
|
appSignedUrl: string;
|
|
@@ -14,6 +15,8 @@ export declare function installApp(props: {
|
|
|
14
15
|
projectId: string;
|
|
15
16
|
appReleaseHash: string;
|
|
16
17
|
signedUrlsPayload: SignedUrlPayloadType;
|
|
18
|
+
appCfg?: AppConfig;
|
|
19
|
+
envVars?: EnvVars;
|
|
17
20
|
}): Promise<void>;
|
|
18
21
|
export declare function uninstallApp(props: {
|
|
19
22
|
projectId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AA2BrE,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAEhE,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,UAAU,EAAE,CAAC,CAQ9D;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,oBAAoB,CAAC;IACxC,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGhB;AAuFD,wBAAsB,YAAY,CAAC,KAAK,EAAE;IACxC,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB"}
|
|
@@ -20,6 +20,7 @@ const config_1 = require("./config");
|
|
|
20
20
|
const constants_2 = require("../local-connection/constants");
|
|
21
21
|
const paths_1 = require("alwaysai/lib/paths");
|
|
22
22
|
const file_1 = require("../util/file");
|
|
23
|
+
const environment_variables_1 = require("./environment-variables");
|
|
23
24
|
async function getInstalledApps() {
|
|
24
25
|
const apps = await (0, agent_config_1.AgentConfigFile)().getApps();
|
|
25
26
|
const appDetails = [];
|
|
@@ -31,7 +32,7 @@ async function getInstalledApps() {
|
|
|
31
32
|
}
|
|
32
33
|
exports.getInstalledApps = getInstalledApps;
|
|
33
34
|
async function installApp(props) {
|
|
34
|
-
const { projectId, appReleaseHash, signedUrlsPayload } = props;
|
|
35
|
+
const { projectId, appReleaseHash, signedUrlsPayload, appCfg, envVars } = props;
|
|
35
36
|
logger_1.logger.info(`Installing ${projectId}:${appReleaseHash}`);
|
|
36
37
|
const appDir = (0, utils_1.getAppDir)(projectId);
|
|
37
38
|
const spawner = (0, util_1.JsSpawner)();
|
|
@@ -85,6 +86,20 @@ async function installApp(props) {
|
|
|
85
86
|
await (0, app_1.appCleanDocker)({ targetHostSpawner: hostSpawner });
|
|
86
87
|
// Download model files
|
|
87
88
|
await (0, models_1.installModelsWithPresignedURLs)(signedUrlsPayload.modelsInstallPayload, path.join(appDir, 'models'));
|
|
89
|
+
// See if there's appCfg or envVars in the transaction, and if so, apply it
|
|
90
|
+
if (appCfg) {
|
|
91
|
+
logger_1.logger.debug(`applying appCfg: ${JSON.stringify(appCfg)}`);
|
|
92
|
+
await (0, config_1.writeAppCfgFile)({ projectId, appCfg });
|
|
93
|
+
}
|
|
94
|
+
if (envVars) {
|
|
95
|
+
logger_1.logger.debug(`applying envVarUpdate: ${JSON.stringify(envVars)}`);
|
|
96
|
+
try {
|
|
97
|
+
await (0, environment_variables_1.setEnvInternal)({ projectId, envVars });
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
logger_1.logger.error(`error is : ${error}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
88
103
|
await installAppBuildReqs({ appDir });
|
|
89
104
|
await (0, utils_1.buildApp)({ appDir });
|
|
90
105
|
await (0, agent_config_1.AgentConfigFile)().setAppInstalled({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":";;;AAAA,mCAAgC;AAChC,yBAAyB;AACzB,6BAA6B;AAC7B,qDAA4D;AAC5D,4CAAuE;AACvE,mCAA8C;AAE9C,qCAAsC;AACtC,qCAA2D;AAC3D,iEAAiE;AACjE,uDAA4D;AAC5D,+CAQ+B;AAC/B,sDAAuE;AACvE,mDAA8C;AAC9C,qCAA0D;AAC1D,2CAAwC;AACxC,
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/application-control/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/application-control/utils.ts"],"names":[],"mappings":"AAiBA,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAMrE;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAQjE;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/application-control/utils.ts"],"names":[],"mappings":"AAiBA,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAMrE;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,iBAQjE;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,iBAkDvD"}
|
|
@@ -60,6 +60,19 @@ async function buildApp(props) {
|
|
|
60
60
|
if (buildOut.exitCode !== 0) {
|
|
61
61
|
throw new Error(`Failed to build application! stdout=${buildOut.out} stderr=${buildOut.err}`);
|
|
62
62
|
}
|
|
63
|
+
// Prune unused Docker resources after a successful build
|
|
64
|
+
logger_1.logger.debug('Pruning docker system');
|
|
65
|
+
try {
|
|
66
|
+
const spawner = (0, spawner_1.JsSpawner)();
|
|
67
|
+
const pruneOut = await spawner.run({
|
|
68
|
+
exe: 'docker',
|
|
69
|
+
args: ['system', 'prune', '-f']
|
|
70
|
+
});
|
|
71
|
+
logger_1.logger.debug(pruneOut);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
logger_1.logger.error(`Stderr occurred when pruning docker system: ${error}`);
|
|
75
|
+
}
|
|
63
76
|
}
|
|
64
77
|
exports.buildApp = buildApp;
|
|
65
78
|
//# sourceMappingURL=utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/application-control/utils.ts"],"names":[],"mappings":";;;AAAA,6DAAmD;AACnD,6BAA6B;AAE7B,iEAAiE;AACjE,+CAM+B;AAC/B,mDAA8C;AAC9C,2CAAwC;AACxC,qDAA+C;AAC/C,uDAAsD;AACtD,8CAAgF;AAEhF,SAAgB,SAAS,CAAC,SAAiB;IACzC,OAAO,IAAI,CAAC,IAAI,CAAC,sBAAQ,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC;AAFD,8BAEC;AAEM,KAAK,UAAU,mBAAmB,CAAC,KAA4B;IACpE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,mEAAmE;IACnE,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;QAC1D,MAAM,IAAI,KAAK,CAAC,eAAe,SAAS,mBAAmB,CAAC,CAAC;KAC9D;AACH,CAAC;AAND,kDAMC;AAEM,KAAK,UAAU,eAAe,CAAC,KAA4B;IAChE,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,mBAAmB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;IACzC,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;QACxD,MAAM,IAAI,KAAK,CACb,eAAe,SAAS,qCAAqC,CAC9D,CAAC;KACH;AACH,CAAC;AARD,0CAQC;AAEM,KAAK,UAAU,QAAQ,CAAC,KAAyB;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IACzB,eAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IAEvC,4CAA4C;IAC5C,MAAM,cAAc,GAAG,IAAA,oBAAc,EAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,SAAS,CAAC,cAAc,KAAK,SAAS,EAAE;QAC1C,MAAM,IAAI,KAAK,CAAC,GAAG,6BAAqB,8BAA8B,CAAC,CAAC;KACzE;IACD,MAAM,IAAA,qBAAQ,EACZ,KAAK,IAAI,EAAE;QACT,MAAM,IAAA,+BAAyB,GAAE,CAAC;QAClC,MAAM,OAAO,GAAG,IAAA,mBAAS,GAAE,CAAC;QAC5B,MAAM,cAAc,GAAG,SAAS,CAAC,cAAc,CAAC;QAChD,IAAI,MAAM,OAAO,CAAC,MAAM,CAAC,2BAAmB,CAAC,EAAE;YAC7C,MAAM,IAAA,iCAA2B,EAAC;gBAChC,cAAc;aACf,CAAC,CAAC;SACJ;aAAM;YACL,MAAM,IAAA,4BAAsB,EAAC;gBAC3B,OAAO,EAAE,IAAA,mBAAS,GAAE;gBACpB,GAAG,EAAE,MAAM,IAAA,+BAAyB,EAAC,EAAE,cAAc,EAAE,CAAC;aACzD,CAAC,CAAC;SACJ;IACH,CAAC,EACD,EAAE,EACF,MAAM,CACP,CAAC;IAEF,MAAM,QAAQ,GAAG,MAAM,wBAAO,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,eAAM,CAAC,KAAK,CAAC,yBAAyB,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3E,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,EAAE;QAC3B,MAAM,IAAI,KAAK,CACb,uCAAuC,QAAQ,CAAC,GAAG,WAAW,QAAQ,CAAC,GAAG,EAAE,CAC7E,CAAC;KACH;AACH,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/application-control/utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SecureTunnelHandlerSingleton } from '../secure-tunneling/secure-tunneling';
|
|
2
|
+
import { LiveUpdatesHandler } from './live-updates-handler';
|
|
3
|
+
import { Publisher } from './publisher';
|
|
4
|
+
import { ShadowHandler } from './shadow-handler';
|
|
5
|
+
import { TransactionManager, ErrorFunction, SuccessFunction } from './transaction-manager';
|
|
6
|
+
export interface HandlerContext {
|
|
7
|
+
clientId: string;
|
|
8
|
+
txnMgr: TransactionManager;
|
|
9
|
+
publisher: Publisher;
|
|
10
|
+
shadowHandler: ShadowHandler;
|
|
11
|
+
liveUpdatesHandler: LiveUpdatesHandler;
|
|
12
|
+
secureTunnelHandler: SecureTunnelHandlerSingleton;
|
|
13
|
+
}
|
|
14
|
+
export declare abstract class BaseHandler {
|
|
15
|
+
protected clientId: string;
|
|
16
|
+
protected txnMgr: TransactionManager;
|
|
17
|
+
protected publisher: Publisher;
|
|
18
|
+
protected shadowHandler: ShadowHandler;
|
|
19
|
+
protected liveUpdatesHandler: LiveUpdatesHandler;
|
|
20
|
+
protected secureTunnelHandler: SecureTunnelHandlerSingleton;
|
|
21
|
+
protected readonly errorFn?: ErrorFunction;
|
|
22
|
+
protected readonly successFn?: SuccessFunction;
|
|
23
|
+
constructor(context: HandlerContext, errorFn?: ErrorFunction, successFn?: SuccessFunction);
|
|
24
|
+
protected atomicApplicationUninstall(projectId: string): Promise<void>;
|
|
25
|
+
protected atomicApplicationUpdate<F extends () => any>(func: F, projectId: string, skipUpdateShadow?: boolean): Promise<ReturnType<F>>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=base-message-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-message-handler.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/base-message-handler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AAEpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EAChB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mBAAmB,EAAE,4BAA4B,CAAC;CACnD;AAED,8BAAsB,WAAW;IAC/B,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC;IACrC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,SAAS,CAAC,aAAa,EAAE,aAAa,CAAC;IACvC,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;IACjD,SAAS,CAAC,mBAAmB,EAAE,4BAA4B,CAAC;IAC5D,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC;IAC3C,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,eAAe,CAAC;gBAG7C,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE,aAAa,EACvB,SAAS,CAAC,EAAE,eAAe;cAYb,0BAA0B,CAAC,SAAS,EAAE,MAAM;cAU5C,uBAAuB,CAAC,CAAC,SAAS,MAAM,GAAG,EACzD,IAAI,EAAE,CAAC,EACP,SAAS,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,OAAO,GACzB,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;CAsD1B"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseHandler = void 0;
|
|
4
|
+
const util_1 = require("alwaysai/lib/util");
|
|
5
|
+
const application_control_1 = require("../application-control");
|
|
6
|
+
const backup_1 = require("../application-control/backup");
|
|
7
|
+
const agent_config_1 = require("../infrastructure/agent-config");
|
|
8
|
+
const aai_error_1 = require("../util/aai-error");
|
|
9
|
+
class BaseHandler {
|
|
10
|
+
constructor(context, errorFn, successFn) {
|
|
11
|
+
this.clientId = context.clientId;
|
|
12
|
+
this.txnMgr = context.txnMgr;
|
|
13
|
+
this.publisher = context.publisher;
|
|
14
|
+
this.shadowHandler = context.shadowHandler;
|
|
15
|
+
this.liveUpdatesHandler = context.liveUpdatesHandler;
|
|
16
|
+
this.secureTunnelHandler = context.secureTunnelHandler;
|
|
17
|
+
this.errorFn = errorFn;
|
|
18
|
+
this.successFn = successFn;
|
|
19
|
+
}
|
|
20
|
+
async atomicApplicationUninstall(projectId) {
|
|
21
|
+
try {
|
|
22
|
+
await (0, application_control_1.uninstallApp)({ projectId });
|
|
23
|
+
this.shadowHandler.clearProjectShadow(projectId);
|
|
24
|
+
}
|
|
25
|
+
catch (e) {
|
|
26
|
+
util_1.logger.error(`Failed to uninstall ${projectId}!\n${(0, util_1.stringifyError)(e)}`);
|
|
27
|
+
throw e;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async atomicApplicationUpdate(func, projectId, skipUpdateShadow) {
|
|
31
|
+
if (await (0, agent_config_1.AgentConfigFile)().isAppPresent({ projectId })) {
|
|
32
|
+
// Reject the application update if app is present but not ready
|
|
33
|
+
if (!(await (0, agent_config_1.AgentConfigFile)().isAppReady({ projectId }))) {
|
|
34
|
+
throw new Error('Application already has installation in progress!');
|
|
35
|
+
}
|
|
36
|
+
// Try to create a backup, so that there is one available if something goes wrong in the next try:catch.
|
|
37
|
+
try {
|
|
38
|
+
await (0, backup_1.createAppBackup)({ projectId });
|
|
39
|
+
}
|
|
40
|
+
catch (e) {
|
|
41
|
+
util_1.logger.error(`Could not create a backup for the project: ${projectId}!\n${(0, util_1.stringifyError)(e)}`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const out = await func();
|
|
46
|
+
if (!skipUpdateShadow)
|
|
47
|
+
await this.shadowHandler.updateProjectShadow(projectId);
|
|
48
|
+
return out;
|
|
49
|
+
}
|
|
50
|
+
catch (errorAppUpdate) {
|
|
51
|
+
util_1.logger.error(`Failed to update ${projectId}!\n${(0, util_1.stringifyError)(errorAppUpdate)}`);
|
|
52
|
+
// If something goes wrong, first try to rollback
|
|
53
|
+
try {
|
|
54
|
+
await (0, application_control_1.rollbackApp)({ projectId });
|
|
55
|
+
}
|
|
56
|
+
catch (errorRollbackApp) {
|
|
57
|
+
util_1.logger.error(`Application rollback failed for ${projectId}!\n${(0, util_1.stringifyError)(errorRollbackApp)}`);
|
|
58
|
+
// and if that fails, uninstall the app as a last resort.
|
|
59
|
+
try {
|
|
60
|
+
await this.atomicApplicationUninstall(projectId);
|
|
61
|
+
}
|
|
62
|
+
catch (_a) {
|
|
63
|
+
// atomicApplicationUninstall logs failure, so there's nothing to do here.
|
|
64
|
+
}
|
|
65
|
+
throw new aai_error_1.default('Application update and rollback failed, uninstalled the application!', { cause: errorAppUpdate });
|
|
66
|
+
}
|
|
67
|
+
throw new aai_error_1.default('Application update failed, rolled the application back!', { cause: errorAppUpdate });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.BaseHandler = BaseHandler;
|
|
72
|
+
//# sourceMappingURL=base-message-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-message-handler.js","sourceRoot":"","sources":["../../src/cloud-connection/base-message-handler.ts"],"names":[],"mappings":";;;AAAA,4CAA2D;AAC3D,gEAAmE;AACnE,0DAAgE;AAChE,iEAAiE;AAEjE,iDAAyC;AAmBzC,MAAsB,WAAW;IAU/B,YACE,OAAuB,EACvB,OAAuB,EACvB,SAA2B;QAE3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,CAAC;QACrD,IAAI,CAAC,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;QACvD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAES,KAAK,CAAC,0BAA0B,CAAC,SAAiB;QAC1D,IAAI;YACF,MAAM,IAAA,kCAAY,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;SAClD;QAAC,OAAO,CAAC,EAAE;YACV,aAAM,CAAC,KAAK,CAAC,uBAAuB,SAAS,MAAM,IAAA,qBAAc,EAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,CAAC;SACT;IACH,CAAC;IAES,KAAK,CAAC,uBAAuB,CACrC,IAAO,EACP,SAAiB,EACjB,gBAA0B;QAE1B,IAAI,MAAM,IAAA,8BAAe,GAAE,CAAC,YAAY,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;YACvD,gEAAgE;YAChE,IAAI,CAAC,CAAC,MAAM,IAAA,8BAAe,GAAE,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE;gBACxD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;aACtE;YAED,wGAAwG;YACxG,IAAI;gBACF,MAAM,IAAA,wBAAe,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;aACtC;YAAC,OAAO,CAAC,EAAE;gBACV,aAAM,CAAC,KAAK,CACV,8CAA8C,SAAS,MAAM,IAAA,qBAAc,EACzE,CAAC,CACF,EAAE,CACJ,CAAC;aACH;SACF;QAED,IAAI;YACF,MAAM,GAAG,GAAkB,MAAM,IAAI,EAAE,CAAC;YACxC,IAAI,CAAC,gBAAgB;gBACnB,MAAM,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;YAC1D,OAAO,GAAG,CAAC;SACZ;QAAC,OAAO,cAAc,EAAE;YACvB,aAAM,CAAC,KAAK,CACV,oBAAoB,SAAS,MAAM,IAAA,qBAAc,EAAC,cAAc,CAAC,EAAE,CACpE,CAAC;YACF,iDAAiD;YACjD,IAAI;gBACF,MAAM,IAAA,iCAAW,EAAC,EAAE,SAAS,EAAE,CAAC,CAAC;aAClC;YAAC,OAAO,gBAAgB,EAAE;gBACzB,aAAM,CAAC,KAAK,CACV,mCAAmC,SAAS,MAAM,IAAA,qBAAc,EAC9D,gBAAgB,CACjB,EAAE,CACJ,CAAC;gBACF,yDAAyD;gBACzD,IAAI;oBACF,MAAM,IAAI,CAAC,0BAA0B,CAAC,SAAS,CAAC,CAAC;iBAClD;gBAAC,WAAM;oBACN,0EAA0E;iBAC3E;gBACD,MAAM,IAAI,mBAAQ,CAChB,sEAAsE,EACtE,EAAE,KAAK,EAAE,cAAc,EAAE,CAC1B,CAAC;aACH;YACD,MAAM,IAAI,mBAAQ,CAChB,yDAAyD,EACzD,EAAE,KAAK,EAAE,cAAc,EAAE,CAC1B,CAAC;SACH;IACH,CAAC;CACF;AA7FD,kCA6FC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { MessageDispatcher, MessageHandler } from './message-dispatcher';
|
|
2
|
+
export declare class ConnectionManager extends MessageDispatcher<any> {
|
|
3
|
+
private clientId;
|
|
4
|
+
private host;
|
|
5
|
+
private port;
|
|
6
|
+
private device;
|
|
7
|
+
private subscribedTopics;
|
|
8
|
+
constructor(clientId: string, host: string, port: number);
|
|
9
|
+
getIoTDevice(): any;
|
|
10
|
+
connect(cb: any): void;
|
|
11
|
+
isConnected(): boolean;
|
|
12
|
+
registerHandler(topic: string, handler: MessageHandler): void;
|
|
13
|
+
disconnect(): void;
|
|
14
|
+
subscribe(topic: string): void;
|
|
15
|
+
unsubscribe(topic: string): void;
|
|
16
|
+
private handleReconnection;
|
|
17
|
+
private setupHandlers;
|
|
18
|
+
private logConnectionInfo;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=connection-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAIzE,qBAAa,iBAAkB,SAAQ,iBAAiB,CAAC,GAAG,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,gBAAgB,CAA0B;gBAEtC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOjD,YAAY;IAIZ,OAAO,CAAC,EAAE,KAAA,GAAG,IAAI;IAkBjB,WAAW,IAAI,OAAO;IAItB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc;IAKtD,UAAU,IAAI,IAAI;IAOlB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAW9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAWvC,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,aAAa;YA4CP,iBAAiB;CAoDhC"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ConnectionManager = void 0;
|
|
4
|
+
const awsIot = require("aws-iot-device-sdk");
|
|
5
|
+
const infrastructure_1 = require("alwaysai/lib/infrastructure");
|
|
6
|
+
const directories_1 = require("../util/directories");
|
|
7
|
+
const util_1 = require("alwaysai/lib/util");
|
|
8
|
+
const logger_1 = require("../util/logger");
|
|
9
|
+
const util_2 = require("util");
|
|
10
|
+
const child_process_1 = require("child_process");
|
|
11
|
+
const message_dispatcher_1 = require("./message-dispatcher");
|
|
12
|
+
const exec_promise = (0, util_2.promisify)(child_process_1.exec);
|
|
13
|
+
class ConnectionManager extends message_dispatcher_1.MessageDispatcher {
|
|
14
|
+
constructor(clientId, host, port) {
|
|
15
|
+
super();
|
|
16
|
+
this.device = null;
|
|
17
|
+
this.subscribedTopics = new Set();
|
|
18
|
+
this.clientId = clientId;
|
|
19
|
+
this.host = host;
|
|
20
|
+
this.port = port;
|
|
21
|
+
}
|
|
22
|
+
getIoTDevice() {
|
|
23
|
+
return this.device;
|
|
24
|
+
}
|
|
25
|
+
connect(cb) {
|
|
26
|
+
try {
|
|
27
|
+
this.device = awsIot.device({
|
|
28
|
+
keyPath: infrastructure_1.DEVICE_PRIVATE_KEY_FILE_PATH,
|
|
29
|
+
certPath: infrastructure_1.DEVICE_CERTIFICATE_FILE_PATH,
|
|
30
|
+
caPath: directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH,
|
|
31
|
+
clientId: this.clientId,
|
|
32
|
+
host: this.host,
|
|
33
|
+
port: this.port,
|
|
34
|
+
keepalive: 10 // time before re-connect attempt on dropped connection, default is 400 seconds
|
|
35
|
+
});
|
|
36
|
+
this.setupHandlers(cb);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
logger_1.logger.error(`Error connecting to cloud!\n${(0, util_1.stringifyError)(error)}`);
|
|
40
|
+
this.handleReconnection();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
isConnected() {
|
|
44
|
+
return this.device ? this.device.connected : false;
|
|
45
|
+
}
|
|
46
|
+
registerHandler(topic, handler) {
|
|
47
|
+
super.registerHandler(topic, handler);
|
|
48
|
+
this.subscribe(topic);
|
|
49
|
+
}
|
|
50
|
+
disconnect() {
|
|
51
|
+
if (this.device) {
|
|
52
|
+
this.device.end();
|
|
53
|
+
logger_1.logger.debug(`Device Agent has been disconnected from the AWS IoT Core.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
subscribe(topic) {
|
|
57
|
+
if (!this.device) {
|
|
58
|
+
throw new Error('Must call connect() before subscribe()!');
|
|
59
|
+
}
|
|
60
|
+
if (!this.subscribedTopics.has(topic)) {
|
|
61
|
+
this.device.subscribe(topic);
|
|
62
|
+
this.subscribedTopics.add(topic);
|
|
63
|
+
logger_1.logger.debug(`Subscribed to topic: ${topic}`);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
unsubscribe(topic) {
|
|
67
|
+
if (!this.device) {
|
|
68
|
+
throw new Error('Must call connect() before unsubscribe()!');
|
|
69
|
+
}
|
|
70
|
+
if (this.subscribedTopics.has(topic)) {
|
|
71
|
+
this.device.unsubscribe(topic);
|
|
72
|
+
this.subscribedTopics.delete(topic);
|
|
73
|
+
logger_1.logger.debug(`Unsubscribed from topic: ${topic}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
handleReconnection() {
|
|
77
|
+
logger_1.logger.debug(`Attempting to reconnect to AWS IoT Core...`);
|
|
78
|
+
setTimeout(() => this.connect(() => {
|
|
79
|
+
// Do nothing
|
|
80
|
+
}), 5000); // try in 5 seconds.
|
|
81
|
+
}
|
|
82
|
+
setupHandlers(cb) {
|
|
83
|
+
this.device.on('connect', (connack) => {
|
|
84
|
+
logger_1.logger.info('Device Agent has connected to the cloud.');
|
|
85
|
+
cb();
|
|
86
|
+
});
|
|
87
|
+
this.device.on('disconnect', () => {
|
|
88
|
+
logger_1.logger.warn('Device Agent has been disconnected from the cloud');
|
|
89
|
+
});
|
|
90
|
+
this.device.on('reconnect', () => {
|
|
91
|
+
logger_1.logger.info(`Device Agent attempting to re-connect ${new Date().toLocaleString()}`);
|
|
92
|
+
});
|
|
93
|
+
this.device.on('error', function (e) {
|
|
94
|
+
logger_1.logger.error(`Error connecting to the AWS IoT Core!\n${(0, util_1.stringifyError)(e)}`);
|
|
95
|
+
});
|
|
96
|
+
this.device.on('close', () => {
|
|
97
|
+
logger_1.logger.warn('Device Agent AWS IoT Core connection closed.');
|
|
98
|
+
});
|
|
99
|
+
this.device.on('offline', () => {
|
|
100
|
+
logger_1.logger.warn(`Device Agent is offline ${new Date().toLocaleString()}`);
|
|
101
|
+
void this.logConnectionInfo();
|
|
102
|
+
});
|
|
103
|
+
this.device.on('message', async (topic, payload) => {
|
|
104
|
+
logger_1.logger.debug(`Message received on topic: ${topic}:\n${payload.toString()}`);
|
|
105
|
+
try {
|
|
106
|
+
const jsonPacket = JSON.parse(payload);
|
|
107
|
+
this.dispatch(topic, jsonPacket);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
logger_1.logger.error(`Error parsing message!\n${(0, util_1.stringifyError)(e)}`);
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async logConnectionInfo() {
|
|
115
|
+
try {
|
|
116
|
+
/**
|
|
117
|
+
* We're using the 'netcat' or 'nc' command to test the connection to the IoT Core endpoint.
|
|
118
|
+
* This command doesn't always exit (see below), so
|
|
119
|
+
* we use timeout to break out of the prompt
|
|
120
|
+
* and catch the resulting error/parse the resulting stderr
|
|
121
|
+
*
|
|
122
|
+
* Sample command for current host and port:
|
|
123
|
+
* nc -zv -w 1 a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com 8883
|
|
124
|
+
*
|
|
125
|
+
* Sample output when port is not blocked and host is reachable:
|
|
126
|
+
* $ nc -zv -w 1 a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com 443
|
|
127
|
+
* Connection to a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com 443 port [tcp/https] succeeded!
|
|
128
|
+
*
|
|
129
|
+
*
|
|
130
|
+
* Sample output when port is blocked (will repeatedly try until ctrl-C out):
|
|
131
|
+
* $ nc -zv -w 1 a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com 8883
|
|
132
|
+
* nc: connect to a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com port 8883 (tcp) timed out: Operation now in progress
|
|
133
|
+
* nc: connect to a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com port 8883 (tcp) timed out: Operation now in progress
|
|
134
|
+
* nc: connect to a3tzi5g7sq5zsj-ats.iot.us-west-2.amazonaws.com port 8883 (tcp) timed out: Operation now in progress
|
|
135
|
+
* ^C
|
|
136
|
+
*
|
|
137
|
+
*
|
|
138
|
+
* Sample command/output when the port isn't enable on that host:
|
|
139
|
+
* $ nc -zv -w 1 localhost 8883
|
|
140
|
+
* nc: connect to localhost port 8883 (tcp) failed: Connection refused
|
|
141
|
+
*/
|
|
142
|
+
await exec_promise(`nc -zv -w 1 ${this.host} ${this.port}`, {
|
|
143
|
+
timeout: 2000
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
catch (err) {
|
|
147
|
+
const output = JSON.stringify(err['stderr']);
|
|
148
|
+
if (output.indexOf('not known') !== -1) {
|
|
149
|
+
logger_1.logger.warn('Iot Core endpoint appears to be unreachable, internet connection may be unstable or the host may be down.');
|
|
150
|
+
}
|
|
151
|
+
else if (output.indexOf('timed out') !== -1) {
|
|
152
|
+
logger_1.logger.warn(`Internet connection appears fine, however the endpoint was not reachable on the current connection port: ${this.port}\nPlease check if a firewall is in place.`);
|
|
153
|
+
}
|
|
154
|
+
else if (output.indexOf('refused') !== -1) {
|
|
155
|
+
logger_1.logger.warn(`The connection was refused, likely ${this.host} is not running a service on ${this.port}.`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
logger_1.logger.warn(`Output from checking connection to ${this.host} on ${this.port}: ${output}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
exports.ConnectionManager = ConnectionManager;
|
|
164
|
+
//# sourceMappingURL=connection-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../../src/cloud-connection/connection-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,21 @@
|
|
|
1
1
|
import { Publisher } from './publisher';
|
|
2
2
|
import { ShadowHandler } from './shadow-handler';
|
|
3
3
|
export declare class DeviceAgentCloudConnection {
|
|
4
|
+
private connectionManager;
|
|
5
|
+
private transactionManager;
|
|
6
|
+
private liveUpdatesHandler;
|
|
4
7
|
shadowHandler: ShadowHandler;
|
|
5
8
|
publisher: Publisher;
|
|
6
|
-
private
|
|
7
|
-
private
|
|
8
|
-
private
|
|
9
|
-
private clientId;
|
|
10
|
-
private host;
|
|
11
|
-
private port;
|
|
9
|
+
private readonly clientId;
|
|
10
|
+
private readonly host;
|
|
11
|
+
private readonly port;
|
|
12
12
|
private readonly toDeviceTopic;
|
|
13
|
-
private readonly secureTunnelNotifyTopic;
|
|
14
13
|
private readonly secureTunnelHandler;
|
|
15
14
|
constructor();
|
|
16
15
|
getClientId(): string;
|
|
17
16
|
isCmdInProgress(projectId: string): boolean;
|
|
18
|
-
handleMessage(topic: string, message: any): Promise<void>;
|
|
19
17
|
stop(): Promise<void>;
|
|
20
|
-
|
|
21
|
-
private logConnectionInfo;
|
|
22
|
-
private handleDeviceAgentMessage;
|
|
23
|
-
private handleAppStateControl;
|
|
24
|
-
private handleAppVersionControl;
|
|
25
|
-
private handleAppInstallCloudResponsePayload;
|
|
26
|
-
private handleModelsInstallCloudResponsePayload;
|
|
27
|
-
private handleDeviceAction;
|
|
28
|
-
private publishCloudRequest;
|
|
29
|
-
private subscribe;
|
|
30
|
-
private atomicApplicationUninstall;
|
|
31
|
-
private atomicApplicationUpdate;
|
|
32
|
-
private handleProjectShadowConfigUpdate;
|
|
33
|
-
private handleProjectShadowMessage;
|
|
34
|
-
handleSecureTunnelMessage(payload: any): Promise<void>;
|
|
18
|
+
handleMessage(topic: string, message: any): Promise<void>;
|
|
35
19
|
}
|
|
36
20
|
export declare function runDeviceAgentCloudInterface(): Promise<void>;
|
|
37
21
|
//# sourceMappingURL=device-agent-cloud-connection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device-agent-cloud-connection.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"device-agent-cloud-connection.d.ts","sourceRoot":"","sources":["../../src/cloud-connection/device-agent-cloud-connection.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAA+B,MAAM,kBAAkB,CAAC;AAO9E,qBAAa,0BAA0B;IACrC,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,kBAAkB,CAAqB;IACxC,aAAa,EAAE,aAAa,CAAC;IAC7B,SAAS,EAAE,SAAS,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAmB;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAmC;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CACS;;IAyGtC,WAAW,IAAI,MAAM;IAIrB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIrC,IAAI;IAOJ,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG;CAGvD;AAED,wBAAsB,4BAA4B,kBA+BjD"}
|