@alwaysai/device-agent 1.3.0 → 1.3.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.
- package/lib/application-control/environment-variables.d.ts +1 -0
- package/lib/application-control/environment-variables.d.ts.map +1 -1
- package/lib/application-control/environment-variables.js +22 -20
- package/lib/application-control/environment-variables.js.map +1 -1
- package/lib/application-control/environment-variables.test.js +37 -2
- package/lib/application-control/environment-variables.test.js.map +1 -1
- package/lib/application-control/install.js +1 -1
- package/lib/application-control/install.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +5 -5
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +203 -178
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.d.ts.map +1 -1
- package/lib/cloud-connection/live-updates-handler.js +30 -25
- package/lib/cloud-connection/live-updates-handler.js.map +1 -1
- package/lib/cloud-connection/live-updates-handler.test.js +15 -0
- package/lib/cloud-connection/live-updates-handler.test.js.map +1 -1
- package/lib/cloud-connection/messages.d.ts +1 -3
- package/lib/cloud-connection/messages.d.ts.map +1 -1
- package/lib/cloud-connection/messages.js +1 -9
- package/lib/cloud-connection/messages.js.map +1 -1
- package/lib/cloud-connection/publisher.d.ts +1 -0
- package/lib/cloud-connection/publisher.d.ts.map +1 -1
- package/lib/cloud-connection/publisher.js +3 -0
- package/lib/cloud-connection/publisher.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.d.ts +10 -21
- package/lib/cloud-connection/shadow-handler.d.ts.map +1 -1
- package/lib/cloud-connection/shadow-handler.js +154 -100
- package/lib/cloud-connection/shadow-handler.js.map +1 -1
- package/lib/cloud-connection/shadow-handler.test.js +140 -72
- package/lib/cloud-connection/shadow-handler.test.js.map +1 -1
- package/lib/cloud-connection/transaction-manager.d.ts +26 -6
- package/lib/cloud-connection/transaction-manager.d.ts.map +1 -1
- package/lib/cloud-connection/transaction-manager.js +103 -22
- package/lib/cloud-connection/transaction-manager.js.map +1 -1
- package/lib/cloud-connection/transaction-manager.test.js +179 -13
- package/lib/cloud-connection/transaction-manager.test.js.map +1 -1
- package/lib/device-control/device-control.d.ts +2 -2
- package/lib/device-control/device-control.d.ts.map +1 -1
- package/lib/device-control/device-control.js.map +1 -1
- package/lib/secure-tunneling/secure-tunneling.d.ts +105 -0
- package/lib/secure-tunneling/secure-tunneling.d.ts.map +1 -0
- package/lib/secure-tunneling/secure-tunneling.js +435 -0
- package/lib/secure-tunneling/secure-tunneling.js.map +1 -0
- package/lib/secure-tunneling/secure-tunneling.test.d.ts +2 -0
- package/lib/secure-tunneling/secure-tunneling.test.d.ts.map +1 -0
- package/lib/secure-tunneling/secure-tunneling.test.js +1070 -0
- package/lib/secure-tunneling/secure-tunneling.test.js.map +1 -0
- package/lib/secure-tunneling/spawner-detached.d.ts +6 -0
- package/lib/secure-tunneling/spawner-detached.d.ts.map +1 -0
- package/lib/secure-tunneling/spawner-detached.js +107 -0
- package/lib/secure-tunneling/spawner-detached.js.map +1 -0
- package/lib/subcommands/app/analytics.d.ts +10 -0
- package/lib/subcommands/app/analytics.d.ts.map +1 -0
- package/lib/subcommands/app/analytics.js +79 -0
- package/lib/subcommands/app/analytics.js.map +1 -0
- package/lib/subcommands/app/env-vars.d.ts.map +1 -1
- package/lib/subcommands/app/env-vars.js +11 -16
- package/lib/subcommands/app/env-vars.js.map +1 -1
- package/lib/subcommands/app/index.d.ts.map +1 -1
- package/lib/subcommands/app/index.js +3 -1
- package/lib/subcommands/app/index.js.map +1 -1
- package/lib/subcommands/app/models.d.ts +0 -5
- package/lib/subcommands/app/models.d.ts.map +1 -1
- package/lib/subcommands/app/models.js +16 -56
- package/lib/subcommands/app/models.js.map +1 -1
- package/lib/subcommands/app/status.d.ts +1 -0
- package/lib/subcommands/app/status.d.ts.map +1 -1
- package/lib/subcommands/app/status.js +14 -3
- package/lib/subcommands/app/status.js.map +1 -1
- package/lib/subcommands/app/version.d.ts +2 -1
- package/lib/subcommands/app/version.d.ts.map +1 -1
- package/lib/subcommands/app/version.js +16 -3
- package/lib/subcommands/app/version.js.map +1 -1
- package/lib/util/cloud-mode-ready.d.ts +1 -0
- package/lib/util/cloud-mode-ready.d.ts.map +1 -1
- package/lib/util/cloud-mode-ready.js +36 -1
- package/lib/util/cloud-mode-ready.js.map +1 -1
- package/lib/util/parsing.d.ts +2 -0
- package/lib/util/parsing.d.ts.map +1 -0
- package/lib/util/parsing.js +17 -0
- package/lib/util/parsing.js.map +1 -0
- package/package.json +4 -6
- package/readme.md +146 -92
- package/src/application-control/environment-variables.test.ts +43 -3
- package/src/application-control/environment-variables.ts +29 -19
- package/src/application-control/install.ts +1 -1
- package/src/cloud-connection/device-agent-cloud-connection.ts +272 -247
- package/src/cloud-connection/live-updates-handler.test.ts +20 -0
- package/src/cloud-connection/live-updates-handler.ts +45 -52
- package/src/cloud-connection/messages.ts +1 -14
- package/src/cloud-connection/publisher.ts +4 -0
- package/src/cloud-connection/shadow-handler.test.ts +150 -73
- package/src/cloud-connection/shadow-handler.ts +247 -126
- package/src/cloud-connection/transaction-manager.test.ts +193 -18
- package/src/cloud-connection/transaction-manager.ts +174 -26
- package/src/device-control/device-control.ts +3 -3
- package/src/secure-tunneling/secure-tunneling.test.ts +1239 -0
- package/src/secure-tunneling/secure-tunneling.ts +606 -0
- package/src/secure-tunneling/spawner-detached.ts +123 -0
- package/src/subcommands/app/analytics.ts +102 -0
- package/src/subcommands/app/env-vars.ts +18 -16
- package/src/subcommands/app/index.ts +4 -3
- package/src/subcommands/app/models.ts +25 -57
- package/src/subcommands/app/status.ts +20 -3
- package/src/subcommands/app/version.ts +19 -4
- package/src/util/cloud-mode-ready.ts +36 -0
- package/src/util/parsing.ts +11 -0
- package/lib/cloud-connection/cmd-status.d.ts +0 -8
- package/lib/cloud-connection/cmd-status.d.ts.map +0 -1
- package/lib/cloud-connection/cmd-status.js +0 -62
- package/lib/cloud-connection/cmd-status.js.map +0 -1
- package/lib/cloud-connection/message-builder.d.ts +0 -7
- package/lib/cloud-connection/message-builder.d.ts.map +0 -1
- package/lib/cloud-connection/message-builder.js +0 -63
- package/lib/cloud-connection/message-builder.js.map +0 -1
- package/lib/secure-tunneling/index.d.ts +0 -5
- package/lib/secure-tunneling/index.d.ts.map +0 -1
- package/lib/secure-tunneling/index.js +0 -64
- package/lib/secure-tunneling/index.js.map +0 -1
- package/src/cloud-connection/cmd-status.ts +0 -71
- package/src/cloud-connection/message-builder.ts +0 -117
- package/src/secure-tunneling/index.ts +0 -74
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.buildDeviceStatsMessage = exports.buildStatusResponseMessage = exports.buildSignedUrlsRequestMessage = exports.buildAppStateMessage = exports.buildAppLogsMessage = void 0;
|
|
4
|
-
const device_agent_schemas_1 = require("@alwaysai/device-agent-schemas");
|
|
5
|
-
const get_device_id_1 = require("../util/get-device-id");
|
|
6
|
-
function buildBaseClientMessage(txId) {
|
|
7
|
-
const clientId = (0, get_device_id_1.getDeviceUuid)();
|
|
8
|
-
const baseClientMessage = {
|
|
9
|
-
timestamp: new Date().toUTCString(),
|
|
10
|
-
deviceId: clientId,
|
|
11
|
-
topic: (0, device_agent_schemas_1.getToClientTopic)(clientId),
|
|
12
|
-
txId: txId || (0, device_agent_schemas_1.generateTxId)()
|
|
13
|
-
};
|
|
14
|
-
return baseClientMessage;
|
|
15
|
-
}
|
|
16
|
-
// Public Message Builders
|
|
17
|
-
// app logs
|
|
18
|
-
async function buildAppLogsMessage(payload, txId) {
|
|
19
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
20
|
-
const messageType = device_agent_schemas_1.keyMirrors.toClientMessageType.app_logs;
|
|
21
|
-
const message = Object.assign(Object.assign({}, baseMessage), { messageType,
|
|
22
|
-
payload });
|
|
23
|
-
return message;
|
|
24
|
-
}
|
|
25
|
-
exports.buildAppLogsMessage = buildAppLogsMessage;
|
|
26
|
-
// app state
|
|
27
|
-
async function buildAppStateMessage(payload, txId) {
|
|
28
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
29
|
-
const messageType = device_agent_schemas_1.keyMirrors.toClientMessageType.app_state;
|
|
30
|
-
const message = Object.assign(Object.assign({}, baseMessage), { messageType,
|
|
31
|
-
payload });
|
|
32
|
-
return message;
|
|
33
|
-
}
|
|
34
|
-
exports.buildAppStateMessage = buildAppStateMessage;
|
|
35
|
-
// signed URLs
|
|
36
|
-
async function buildSignedUrlsRequestMessage(payload, txId) {
|
|
37
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
38
|
-
const messageType = device_agent_schemas_1.keyMirrors.toCloudMessageType.signed_urls_request;
|
|
39
|
-
const message = Object.assign(Object.assign({}, baseMessage), { messageType,
|
|
40
|
-
payload });
|
|
41
|
-
return message;
|
|
42
|
-
}
|
|
43
|
-
exports.buildSignedUrlsRequestMessage = buildSignedUrlsRequestMessage;
|
|
44
|
-
// status response
|
|
45
|
-
async function buildStatusResponseMessage(payload, txId) {
|
|
46
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
47
|
-
const messageType = device_agent_schemas_1.keyMirrors.toClientMessageType.status_response;
|
|
48
|
-
const message = Object.assign(Object.assign({}, baseMessage), { messageType,
|
|
49
|
-
payload });
|
|
50
|
-
const valid = (0, device_agent_schemas_1.validateToDeviceAgentMessage)(message);
|
|
51
|
-
return message;
|
|
52
|
-
}
|
|
53
|
-
exports.buildStatusResponseMessage = buildStatusResponseMessage;
|
|
54
|
-
// device stats
|
|
55
|
-
async function buildDeviceStatsMessage(payload, txId) {
|
|
56
|
-
const messageType = device_agent_schemas_1.keyMirrors.toClientMessageType.device_stats;
|
|
57
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
58
|
-
const message = Object.assign(Object.assign({}, baseMessage), { messageType,
|
|
59
|
-
payload });
|
|
60
|
-
return message;
|
|
61
|
-
}
|
|
62
|
-
exports.buildDeviceStatsMessage = buildDeviceStatsMessage;
|
|
63
|
-
//# sourceMappingURL=message-builder.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"message-builder.js","sourceRoot":"","sources":["../../src/cloud-connection/message-builder.ts"],"names":[],"mappings":";;;AAAA,yEAqBwC;AACxC,yDAAsD;AAEtD,SAAS,sBAAsB,CAAC,IAAa;IAC3C,MAAM,QAAQ,GAAG,IAAA,6BAAa,GAAE,CAAC;IACjC,MAAM,iBAAiB,GAAG;QACxB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,QAAQ;QAClB,KAAK,EAAE,IAAA,uCAAgB,EAAC,QAAQ,CAAC;QACjC,IAAI,EAAE,IAAI,IAAI,IAAA,mCAAY,GAAE;KAC7B,CAAC;IACF,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,0BAA0B;AAE1B,WAAW;AACJ,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,IAAa;IAEb,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GACf,iCAAU,CAAC,mBAAmB,CAAC,QAAQ,CAAC;IAC1C,MAAM,OAAO,mCACR,WAAW,KACd,WAAW;QACX,OAAO,GACR,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAbD,kDAaC;AAED,YAAY;AACL,KAAK,UAAU,oBAAoB,CACxC,OAAwB,EACxB,IAAa;IAEb,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GACf,iCAAU,CAAC,mBAAmB,CAAC,SAAS,CAAC;IAC3C,MAAM,OAAO,mCACR,WAAW,KACd,WAAW;QACX,OAAO,GACR,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAbD,oDAaC;AAED,cAAc;AACP,KAAK,UAAU,6BAA6B,CACjD,OAAiC,EACjC,IAAa;IAEb,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GACf,iCAAU,CAAC,kBAAkB,CAAC,mBAAmB,CAAC;IACpD,MAAM,OAAO,mCACR,WAAW,KACd,WAAW;QACX,OAAO,GACR,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAbD,sEAaC;AAED,kBAAkB;AACX,KAAK,UAAU,0BAA0B,CAC9C,OAA8B,EAC9B,IAAa;IAEb,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,WAAW,GACf,iCAAU,CAAC,mBAAmB,CAAC,eAAe,CAAC;IACjD,MAAM,OAAO,mCACR,WAAW,KACd,WAAW;QACX,OAAO,GACR,CAAC;IACF,MAAM,KAAK,GAAG,IAAA,mDAA4B,EAAC,OAAO,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC;AACjB,CAAC;AAdD,gEAcC;AAED,eAAe;AACR,KAAK,UAAU,uBAAuB,CAC3C,OAA2B,EAC3B,IAAa;IAEb,MAAM,WAAW,GACf,iCAAU,CAAC,mBAAmB,CAAC,YAAY,CAAC;IAC9C,MAAM,WAAW,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,OAAO,mCACR,WAAW,KACd,WAAW;QACX,OAAO,GACR,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAbD,0DAaC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secure-tunneling/index.ts"],"names":[],"mappings":"AAcA,wBAAsB,yBAAyB,CAAC,OAAO,EAAE;IACvD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,iBAuBA"}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.secureTunnelNotifyHandler = void 0;
|
|
4
|
-
const download_file_1 = require("../util/download-file");
|
|
5
|
-
const directories_1 = require("../util/directories");
|
|
6
|
-
const paths_1 = require("alwaysai/lib/paths");
|
|
7
|
-
const util_1 = require("alwaysai/lib/util");
|
|
8
|
-
const path_1 = require("path");
|
|
9
|
-
const logger_1 = require("../util/logger");
|
|
10
|
-
const urls_1 = require("../urls");
|
|
11
|
-
const system_info_1 = require("../util/system-info");
|
|
12
|
-
async function secureTunnelNotifyHandler(message) {
|
|
13
|
-
const { clientAccessToken, region } = message;
|
|
14
|
-
await terminateSecureTunnelProcess();
|
|
15
|
-
await downloadSecureTunnel();
|
|
16
|
-
logger_1.logger.info('Starting Secure Tunnel');
|
|
17
|
-
const args = [
|
|
18
|
-
'--destination-app',
|
|
19
|
-
'22',
|
|
20
|
-
'--region',
|
|
21
|
-
region,
|
|
22
|
-
'--capath',
|
|
23
|
-
directories_1.AWS_ROOT_CERTIFICATE_FILE_PATH,
|
|
24
|
-
'--local-bind-address',
|
|
25
|
-
'0.0.0.0',
|
|
26
|
-
'-t',
|
|
27
|
-
clientAccessToken
|
|
28
|
-
];
|
|
29
|
-
await (0, util_1.JsSpawner)().run({
|
|
30
|
-
exe: `${directories_1.SECURE_TUNNEL_BIN_PATH}`,
|
|
31
|
-
args
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
exports.secureTunnelNotifyHandler = secureTunnelNotifyHandler;
|
|
35
|
-
async function downloadSecureTunnel() {
|
|
36
|
-
const arch = await (0, system_info_1.getArch)();
|
|
37
|
-
const linuxDistro = await (0, system_info_1.getDistribution)();
|
|
38
|
-
const osVersion = await (0, system_info_1.getOsVersion)();
|
|
39
|
-
const url = `${urls_1.aaiArtifactsBucketUrl}/securetunnel/${linuxDistro}/${osVersion}/${arch}/${directories_1.SECURE_TUNNEL_BIN_NAME}`;
|
|
40
|
-
await (0, util_1.JsSpawner)().mkdirp((0, path_1.join)(paths_1.AAI_DIR, directories_1.SECURE_TUNNEL_BIN_DIR));
|
|
41
|
-
await (0, download_file_1.downloadFile)({
|
|
42
|
-
url,
|
|
43
|
-
path: directories_1.SECURE_TUNNEL_BIN_PATH,
|
|
44
|
-
errorMessage: `Secure Tunnel bin for ${linuxDistro} ${osVersion} ${arch} not found}`
|
|
45
|
-
});
|
|
46
|
-
const spawner = (0, util_1.JsSpawner)();
|
|
47
|
-
await spawner.run({
|
|
48
|
-
exe: 'chmod',
|
|
49
|
-
args: ['+x', directories_1.SECURE_TUNNEL_BIN_PATH]
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
async function terminateSecureTunnelProcess() {
|
|
53
|
-
const spawner = (0, util_1.JsSpawner)();
|
|
54
|
-
try {
|
|
55
|
-
await spawner.run({
|
|
56
|
-
exe: 'pkill',
|
|
57
|
-
args: [directories_1.SECURE_TUNNEL_BIN_NAME]
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
catch (e) {
|
|
61
|
-
logger_1.logger.debug('Proccess terminated if status code is 1');
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secure-tunneling/index.ts"],"names":[],"mappings":";;;AAAA,yDAAqD;AACrD,qDAK6B;AAC7B,8CAA6C;AAC7C,4CAA8C;AAC9C,+BAA4B;AAC5B,2CAAwC;AACxC,kCAAgD;AAChD,qDAA6E;AAEtE,KAAK,UAAU,yBAAyB,CAAC,OAG/C;IACC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC9C,MAAM,4BAA4B,EAAE,CAAC;IACrC,MAAM,oBAAoB,EAAE,CAAC;IAC7B,eAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG;QACX,mBAAmB;QACnB,IAAI;QACJ,UAAU;QACV,MAAM;QACN,UAAU;QACV,4CAA8B;QAC9B,sBAAsB;QACtB,SAAS;QACT,IAAI;QACJ,iBAAiB;KAClB,CAAC;IAEF,MAAM,IAAA,gBAAS,GAAE,CAAC,GAAG,CAAC;QACpB,GAAG,EAAE,GAAG,oCAAsB,EAAE;QAChC,IAAI;KACL,CAAC,CAAC;AACL,CAAC;AA1BD,8DA0BC;AAED,KAAK,UAAU,oBAAoB;IACjC,MAAM,IAAI,GAAG,MAAM,IAAA,qBAAO,GAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,MAAM,IAAA,6BAAe,GAAE,CAAC;IAC5C,MAAM,SAAS,GAAG,MAAM,IAAA,0BAAY,GAAE,CAAC;IAEvC,MAAM,GAAG,GAAG,GAAG,4BAAqB,iBAAiB,WAAW,IAAI,SAAS,IAAI,IAAI,IAAI,oCAAsB,EAAE,CAAC;IAElH,MAAM,IAAA,gBAAS,GAAE,CAAC,MAAM,CAAC,IAAA,WAAI,EAAC,eAAO,EAAE,mCAAqB,CAAC,CAAC,CAAC;IAC/D,MAAM,IAAA,4BAAY,EAAC;QACjB,GAAG;QACH,IAAI,EAAE,oCAAsB;QAC5B,YAAY,EAAE,yBAAyB,WAAW,IAAI,SAAS,IAAI,IAAI,aAAa;KACrF,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAA,gBAAS,GAAE,CAAC;IAC5B,MAAM,OAAO,CAAC,GAAG,CAAC;QAChB,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,CAAC,IAAI,EAAE,oCAAsB,CAAC;KACrC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,4BAA4B;IACzC,MAAM,OAAO,GAAG,IAAA,gBAAS,GAAE,CAAC;IAC5B,IAAI;QACF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,CAAC,oCAAsB,CAAC;SAC/B,CAAC,CAAC;KACJ;IAAC,OAAO,CAAC,EAAE;QACV,eAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;KACzD;AACH,CAAC"}
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
import { logger } from '../util/logger';
|
|
2
|
-
|
|
3
|
-
type CmdStatusType = 'idle' | 'in_progress';
|
|
4
|
-
|
|
5
|
-
class CmdStatus {
|
|
6
|
-
private projectId: string;
|
|
7
|
-
private status: CmdStatusType;
|
|
8
|
-
|
|
9
|
-
constructor(projectId: string, status: CmdStatusType) {
|
|
10
|
-
this.projectId = projectId;
|
|
11
|
-
this.status = status;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
public getProjectId() {
|
|
15
|
-
return this.projectId;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
public update(status: CmdStatusType) {
|
|
19
|
-
this.status = status;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
public getStatus(): CmdStatusType {
|
|
23
|
-
return this.status;
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export class CmdStatusManager {
|
|
28
|
-
private apps: { [projectId: string]: CmdStatus } = {};
|
|
29
|
-
|
|
30
|
-
public async start(projectId: string) {
|
|
31
|
-
if (!(projectId in this.apps)) {
|
|
32
|
-
const cmdStatus = new CmdStatus(projectId, 'in_progress');
|
|
33
|
-
this.apps[projectId] = cmdStatus;
|
|
34
|
-
} else if (this.apps[projectId].getStatus() !== 'in_progress') {
|
|
35
|
-
this.apps[projectId].update('in_progress');
|
|
36
|
-
} else {
|
|
37
|
-
logger.debug(
|
|
38
|
-
`Ignoring start for ${projectId} since it already has a command in progress`
|
|
39
|
-
);
|
|
40
|
-
return;
|
|
41
|
-
}
|
|
42
|
-
logger.debug(`Started command for ${projectId}`);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
public async stop(projectId: string) {
|
|
46
|
-
if (
|
|
47
|
-
!(projectId in this.apps) ||
|
|
48
|
-
this.apps[projectId].getStatus() === 'idle'
|
|
49
|
-
) {
|
|
50
|
-
throw new Error(`No ongoing command to stop for ${projectId}`);
|
|
51
|
-
}
|
|
52
|
-
this.apps[projectId].update('idle');
|
|
53
|
-
logger.debug(`Stopped command for ${projectId}`);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
public isCmdInProgress(projectId: string): boolean {
|
|
57
|
-
if (!(projectId in this.apps)) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
return this.apps[projectId].getStatus() === 'in_progress';
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public anyCmdInProgress() {
|
|
64
|
-
for (const projectId in this.apps) {
|
|
65
|
-
if (this.apps[projectId].getStatus() === 'in_progress') {
|
|
66
|
-
return true;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
return false;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AppLogsMessage,
|
|
3
|
-
AppLogsMessageType,
|
|
4
|
-
AppLogsPayload,
|
|
5
|
-
AppStateMessage,
|
|
6
|
-
AppStateMessageType,
|
|
7
|
-
AppStatePayload,
|
|
8
|
-
BaseToClientMessage,
|
|
9
|
-
DeviceStatsMessage,
|
|
10
|
-
DeviceStatsMessageType,
|
|
11
|
-
DeviceStatsPayload,
|
|
12
|
-
SignedUrlsRequestMessage,
|
|
13
|
-
SignedUrlsRequestMessageType,
|
|
14
|
-
SignedUrlsRequestPayload,
|
|
15
|
-
StatusResponseMessage,
|
|
16
|
-
StatusResponseMessageType,
|
|
17
|
-
StatusResponsePayload,
|
|
18
|
-
generateTxId,
|
|
19
|
-
getToClientTopic,
|
|
20
|
-
keyMirrors,
|
|
21
|
-
validateToDeviceAgentMessage
|
|
22
|
-
} from '@alwaysai/device-agent-schemas';
|
|
23
|
-
import { getDeviceUuid } from '../util/get-device-id';
|
|
24
|
-
|
|
25
|
-
function buildBaseClientMessage(txId?: string): BaseToClientMessage {
|
|
26
|
-
const clientId = getDeviceUuid();
|
|
27
|
-
const baseClientMessage = {
|
|
28
|
-
timestamp: new Date().toUTCString(),
|
|
29
|
-
deviceId: clientId,
|
|
30
|
-
topic: getToClientTopic(clientId),
|
|
31
|
-
txId: txId || generateTxId()
|
|
32
|
-
};
|
|
33
|
-
return baseClientMessage;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Public Message Builders
|
|
37
|
-
|
|
38
|
-
// app logs
|
|
39
|
-
export async function buildAppLogsMessage(
|
|
40
|
-
payload: AppLogsPayload,
|
|
41
|
-
txId?: string
|
|
42
|
-
): Promise<AppLogsMessage> {
|
|
43
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
44
|
-
const messageType: AppLogsMessageType =
|
|
45
|
-
keyMirrors.toClientMessageType.app_logs;
|
|
46
|
-
const message = {
|
|
47
|
-
...baseMessage,
|
|
48
|
-
messageType,
|
|
49
|
-
payload
|
|
50
|
-
};
|
|
51
|
-
return message;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// app state
|
|
55
|
-
export async function buildAppStateMessage(
|
|
56
|
-
payload: AppStatePayload,
|
|
57
|
-
txId?: string
|
|
58
|
-
): Promise<AppStateMessage> {
|
|
59
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
60
|
-
const messageType: AppStateMessageType =
|
|
61
|
-
keyMirrors.toClientMessageType.app_state;
|
|
62
|
-
const message = {
|
|
63
|
-
...baseMessage,
|
|
64
|
-
messageType,
|
|
65
|
-
payload
|
|
66
|
-
};
|
|
67
|
-
return message;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
// signed URLs
|
|
71
|
-
export async function buildSignedUrlsRequestMessage(
|
|
72
|
-
payload: SignedUrlsRequestPayload,
|
|
73
|
-
txId?: string
|
|
74
|
-
): Promise<SignedUrlsRequestMessage> {
|
|
75
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
76
|
-
const messageType: SignedUrlsRequestMessageType =
|
|
77
|
-
keyMirrors.toCloudMessageType.signed_urls_request;
|
|
78
|
-
const message = {
|
|
79
|
-
...baseMessage,
|
|
80
|
-
messageType,
|
|
81
|
-
payload
|
|
82
|
-
};
|
|
83
|
-
return message;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// status response
|
|
87
|
-
export async function buildStatusResponseMessage(
|
|
88
|
-
payload: StatusResponsePayload,
|
|
89
|
-
txId?: string
|
|
90
|
-
): Promise<StatusResponseMessage> {
|
|
91
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
92
|
-
const messageType: StatusResponseMessageType =
|
|
93
|
-
keyMirrors.toClientMessageType.status_response;
|
|
94
|
-
const message = {
|
|
95
|
-
...baseMessage,
|
|
96
|
-
messageType,
|
|
97
|
-
payload
|
|
98
|
-
};
|
|
99
|
-
const valid = validateToDeviceAgentMessage(message);
|
|
100
|
-
return message;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// device stats
|
|
104
|
-
export async function buildDeviceStatsMessage(
|
|
105
|
-
payload: DeviceStatsPayload,
|
|
106
|
-
txId?: string
|
|
107
|
-
): Promise<DeviceStatsMessage> {
|
|
108
|
-
const messageType: DeviceStatsMessageType =
|
|
109
|
-
keyMirrors.toClientMessageType.device_stats;
|
|
110
|
-
const baseMessage = buildBaseClientMessage(txId);
|
|
111
|
-
const message = {
|
|
112
|
-
...baseMessage,
|
|
113
|
-
messageType,
|
|
114
|
-
payload
|
|
115
|
-
};
|
|
116
|
-
return message;
|
|
117
|
-
}
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import { downloadFile } from '../util/download-file';
|
|
2
|
-
import {
|
|
3
|
-
SECURE_TUNNEL_BIN_DIR,
|
|
4
|
-
SECURE_TUNNEL_BIN_PATH,
|
|
5
|
-
SECURE_TUNNEL_BIN_NAME,
|
|
6
|
-
AWS_ROOT_CERTIFICATE_FILE_PATH
|
|
7
|
-
} from '../util/directories';
|
|
8
|
-
import { AAI_DIR } from 'alwaysai/lib/paths';
|
|
9
|
-
import { JsSpawner } from 'alwaysai/lib/util';
|
|
10
|
-
import { join } from 'path';
|
|
11
|
-
import { logger } from '../util/logger';
|
|
12
|
-
import { aaiArtifactsBucketUrl } from '../urls';
|
|
13
|
-
import { getDistribution, getOsVersion, getArch } from '../util/system-info';
|
|
14
|
-
|
|
15
|
-
export async function secureTunnelNotifyHandler(message: {
|
|
16
|
-
clientAccessToken: string;
|
|
17
|
-
region: string;
|
|
18
|
-
}) {
|
|
19
|
-
const { clientAccessToken, region } = message;
|
|
20
|
-
await terminateSecureTunnelProcess();
|
|
21
|
-
await downloadSecureTunnel();
|
|
22
|
-
logger.info('Starting Secure Tunnel');
|
|
23
|
-
|
|
24
|
-
const args = [
|
|
25
|
-
'--destination-app',
|
|
26
|
-
'22',
|
|
27
|
-
'--region',
|
|
28
|
-
region,
|
|
29
|
-
'--capath',
|
|
30
|
-
AWS_ROOT_CERTIFICATE_FILE_PATH,
|
|
31
|
-
'--local-bind-address',
|
|
32
|
-
'0.0.0.0',
|
|
33
|
-
'-t',
|
|
34
|
-
clientAccessToken
|
|
35
|
-
];
|
|
36
|
-
|
|
37
|
-
await JsSpawner().run({
|
|
38
|
-
exe: `${SECURE_TUNNEL_BIN_PATH}`,
|
|
39
|
-
args
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async function downloadSecureTunnel() {
|
|
44
|
-
const arch = await getArch();
|
|
45
|
-
const linuxDistro = await getDistribution();
|
|
46
|
-
const osVersion = await getOsVersion();
|
|
47
|
-
|
|
48
|
-
const url = `${aaiArtifactsBucketUrl}/securetunnel/${linuxDistro}/${osVersion}/${arch}/${SECURE_TUNNEL_BIN_NAME}`;
|
|
49
|
-
|
|
50
|
-
await JsSpawner().mkdirp(join(AAI_DIR, SECURE_TUNNEL_BIN_DIR));
|
|
51
|
-
await downloadFile({
|
|
52
|
-
url,
|
|
53
|
-
path: SECURE_TUNNEL_BIN_PATH,
|
|
54
|
-
errorMessage: `Secure Tunnel bin for ${linuxDistro} ${osVersion} ${arch} not found}`
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
const spawner = JsSpawner();
|
|
58
|
-
await spawner.run({
|
|
59
|
-
exe: 'chmod',
|
|
60
|
-
args: ['+x', SECURE_TUNNEL_BIN_PATH]
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
async function terminateSecureTunnelProcess() {
|
|
65
|
-
const spawner = JsSpawner();
|
|
66
|
-
try {
|
|
67
|
-
await spawner.run({
|
|
68
|
-
exe: 'pkill',
|
|
69
|
-
args: [SECURE_TUNNEL_BIN_NAME]
|
|
70
|
-
});
|
|
71
|
-
} catch (e) {
|
|
72
|
-
logger.debug('Proccess terminated if status code is 1');
|
|
73
|
-
}
|
|
74
|
-
}
|