@alwaysai/device-agent 0.0.9 → 0.0.11
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/backup.d.ts.map +1 -1
- package/lib/application-control/backup.js +4 -3
- package/lib/application-control/backup.js.map +1 -1
- package/lib/application-control/install.d.ts.map +1 -1
- package/lib/application-control/install.js +6 -5
- package/lib/application-control/install.js.map +1 -1
- package/lib/application-control/models.d.ts.map +1 -1
- package/lib/application-control/models.js +3 -2
- package/lib/application-control/models.js.map +1 -1
- package/lib/application-control/status.d.ts.map +1 -1
- package/lib/application-control/status.js +6 -5
- package/lib/application-control/status.js.map +1 -1
- package/lib/application-control/utils.d.ts.map +1 -1
- package/lib/application-control/utils.js +3 -2
- package/lib/application-control/utils.js.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts +3 -3
- package/lib/cloud-connection/device-agent-cloud-connection.d.ts.map +1 -1
- package/lib/cloud-connection/device-agent-cloud-connection.js +90 -50
- package/lib/cloud-connection/device-agent-cloud-connection.js.map +1 -1
- package/lib/cloud-connection/device-agent.d.ts +21 -0
- package/lib/cloud-connection/device-agent.d.ts.map +1 -0
- package/lib/cloud-connection/device-agent.js +69 -0
- package/lib/cloud-connection/device-agent.js.map +1 -0
- package/lib/endpoints.d.ts +3 -0
- package/lib/endpoints.d.ts.map +1 -0
- package/lib/endpoints.js +28 -0
- package/lib/endpoints.js.map +1 -0
- package/lib/environment.d.ts +1 -0
- package/lib/environment.d.ts.map +1 -1
- package/lib/environment.js +2 -1
- package/lib/environment.js.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/infrastructure/certificates-and-tokens.d.ts +1 -1
- package/lib/infrastructure/certificates-and-tokens.d.ts.map +1 -1
- package/lib/infrastructure/certificates-and-tokens.js +13 -39
- package/lib/infrastructure/certificates-and-tokens.js.map +1 -1
- package/lib/subcommands/app/app.d.ts.map +1 -1
- package/lib/subcommands/app/app.js +6 -5
- package/lib/subcommands/app/app.js.map +1 -1
- package/lib/subcommands/device/device.d.ts.map +1 -1
- package/lib/subcommands/device/device.js +31 -22
- package/lib/subcommands/device/device.js.map +1 -1
- package/lib/subcommands/get-model-package.d.ts.map +1 -1
- package/lib/subcommands/get-model-package.js +2 -1
- package/lib/subcommands/get-model-package.js.map +1 -1
- package/lib/util/directories.d.ts +15 -0
- package/lib/util/directories.d.ts.map +1 -1
- package/lib/util/directories.js +19 -4
- package/lib/util/directories.js.map +1 -1
- package/lib/util/http-client.d.ts +3 -0
- package/lib/util/http-client.d.ts.map +1 -0
- package/lib/util/http-client.js +30 -0
- package/lib/util/http-client.js.map +1 -0
- package/lib/util/logger.d.ts +4 -0
- package/lib/util/logger.d.ts.map +1 -0
- package/lib/util/logger.js +25 -0
- package/lib/util/logger.js.map +1 -0
- package/package.json +2 -1
- package/src/application-control/backup.ts +4 -3
- package/src/application-control/install.ts +6 -5
- package/src/application-control/models.ts +4 -3
- package/src/application-control/status.ts +6 -5
- package/src/application-control/utils.ts +3 -2
- package/src/cloud-connection/device-agent-cloud-connection.ts +175 -81
- package/src/cloud-connection/device-agent.ts +122 -0
- package/src/endpoints.ts +24 -0
- package/src/environment.ts +1 -0
- package/src/index.ts +2 -1
- package/src/infrastructure/certificates-and-tokens.ts +31 -49
- package/src/subcommands/app/app.ts +6 -5
- package/src/subcommands/device/device.ts +67 -30
- package/src/subcommands/get-model-package.ts +2 -1
- package/src/util/directories.ts +49 -6
- package/src/util/http-client.ts +35 -0
- package/src/util/logger.ts +28 -0
|
@@ -1,5 +1,20 @@
|
|
|
1
|
+
export declare const BOOTSTRAP_DIR_NAME = "bootstrap-certificates";
|
|
2
|
+
export declare const BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_NAME = "aai-claim-private-key_qa.pem.key";
|
|
3
|
+
export declare const BOOTSTRAP_DEVICE_CERTIFICATE_FILE_NAME = "aai-claim-cert_qa.pem.crt";
|
|
4
|
+
export declare const BOOTSTRAP_CLAIM_ID_FILE_NAME = "aai-claim-cert-id_qa.txt";
|
|
5
|
+
export declare const AWS_ROOT_CERTIFICATE_FILE_NAME = "AmazonRootCA1.pem";
|
|
6
|
+
export declare const CERTIFICATE_OWNERSHIP_TOKEN_FILE_NAME = "certificate-ownership-token.txt";
|
|
7
|
+
export declare const DEVICE_PRIVATE_KEY_FILE_NAME = "aai-claim-private-key_qa.pem.key";
|
|
8
|
+
export declare const DEVICE_CERTIFICATE_FILE_NAME = "aai-claim-cert_qa.pem.crt";
|
|
9
|
+
export declare const DEVICE_CLAIM_ID_FILE_NAME = "aai-claim-cert-id_qa.txt";
|
|
1
10
|
export declare function getPrivateKeyFilePath(): string;
|
|
2
11
|
export declare function getCertificateFilePath(): string;
|
|
3
12
|
export declare function getRootCertificateFilePath(): string;
|
|
4
13
|
export declare function getCredentialsFilePath(): string;
|
|
14
|
+
export declare const BOOTSTRAP_CERTIFICATES_DIR_PATH: string;
|
|
15
|
+
export declare const DEVICE_CLAIM_ID_FILE_PATH: string;
|
|
16
|
+
export declare const BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_PATH: string;
|
|
17
|
+
export declare const BOOTSTRAP_DEVICE_CERTIFICATE_FILE_PATH: string;
|
|
18
|
+
export declare const BOOTSTRAP_CLAIM_ID_FILE_PATH: string;
|
|
19
|
+
export declare const AWS_ROOT_CERTIFICATE_FILE_PATH: string;
|
|
5
20
|
//# sourceMappingURL=directories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directories.d.ts","sourceRoot":"","sources":["../../src/util/directories.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"directories.d.ts","sourceRoot":"","sources":["../../src/util/directories.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,kBAAkB,2BAA2B,CAAC;AAC3D,eAAO,MAAM,sCAAsC,qCACf,CAAC;AACrC,eAAO,MAAM,sCAAsC,8BACtB,CAAC;AAC9B,eAAO,MAAM,4BAA4B,6BAA6B,CAAC;AACvE,eAAO,MAAM,8BAA8B,sBAAsB,CAAC;AAClE,eAAO,MAAM,qCAAqC,oCACf,CAAC;AAEpC,eAAO,MAAM,4BAA4B,qCAAqC,CAAC;AAC/E,eAAO,MAAM,4BAA4B,8BAA8B,CAAC;AACxE,eAAO,MAAM,yBAAyB,6BAA6B,CAAC;AAEpE,wBAAgB,qBAAqB,WAEpC;AAED,wBAAgB,sBAAsB,WAErC;AAED,wBAAgB,0BAA0B,WAEzC;AAED,wBAAgB,sBAAsB,WAErC;AAED,eAAO,MAAM,+BAA+B,QAG3C,CAAC;AACF,eAAO,MAAM,yBAAyB,QAGrC,CAAC;AAEF,eAAO,MAAM,sCAAsC,QAIlD,CAAC;AAEF,eAAO,MAAM,sCAAsC,QAIlD,CAAC;AAEF,eAAO,MAAM,4BAA4B,QAIxC,CAAC;AAEF,eAAO,MAAM,8BAA8B,QAG1C,CAAC"}
|
package/lib/util/directories.js
CHANGED
|
@@ -1,22 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getCredentialsFilePath = exports.getRootCertificateFilePath = exports.getCertificateFilePath = exports.getPrivateKeyFilePath = void 0;
|
|
3
|
+
exports.AWS_ROOT_CERTIFICATE_FILE_PATH = exports.BOOTSTRAP_CLAIM_ID_FILE_PATH = exports.BOOTSTRAP_DEVICE_CERTIFICATE_FILE_PATH = exports.BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_PATH = exports.DEVICE_CLAIM_ID_FILE_PATH = exports.BOOTSTRAP_CERTIFICATES_DIR_PATH = exports.getCredentialsFilePath = exports.getRootCertificateFilePath = exports.getCertificateFilePath = exports.getPrivateKeyFilePath = exports.DEVICE_CLAIM_ID_FILE_NAME = exports.DEVICE_CERTIFICATE_FILE_NAME = exports.DEVICE_PRIVATE_KEY_FILE_NAME = exports.CERTIFICATE_OWNERSHIP_TOKEN_FILE_NAME = exports.AWS_ROOT_CERTIFICATE_FILE_NAME = exports.BOOTSTRAP_CLAIM_ID_FILE_NAME = exports.BOOTSTRAP_DEVICE_CERTIFICATE_FILE_NAME = exports.BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_NAME = exports.BOOTSTRAP_DIR_NAME = void 0;
|
|
4
4
|
const constants_1 = require("alwaysai/lib/constants");
|
|
5
5
|
const path_1 = require("path");
|
|
6
|
+
exports.BOOTSTRAP_DIR_NAME = "bootstrap-certificates";
|
|
7
|
+
exports.BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_NAME = "aai-claim-private-key_qa.pem.key";
|
|
8
|
+
exports.BOOTSTRAP_DEVICE_CERTIFICATE_FILE_NAME = "aai-claim-cert_qa.pem.crt";
|
|
9
|
+
exports.BOOTSTRAP_CLAIM_ID_FILE_NAME = "aai-claim-cert-id_qa.txt";
|
|
10
|
+
exports.AWS_ROOT_CERTIFICATE_FILE_NAME = "AmazonRootCA1.pem";
|
|
11
|
+
exports.CERTIFICATE_OWNERSHIP_TOKEN_FILE_NAME = "certificate-ownership-token.txt";
|
|
12
|
+
exports.DEVICE_PRIVATE_KEY_FILE_NAME = "aai-claim-private-key_qa.pem.key";
|
|
13
|
+
exports.DEVICE_CERTIFICATE_FILE_NAME = "aai-claim-cert_qa.pem.crt";
|
|
14
|
+
exports.DEVICE_CLAIM_ID_FILE_NAME = "aai-claim-cert-id_qa.txt";
|
|
6
15
|
function getPrivateKeyFilePath() {
|
|
7
|
-
return (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR,
|
|
16
|
+
return (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.DEVICE_PRIVATE_KEY_FILE_NAME);
|
|
8
17
|
}
|
|
9
18
|
exports.getPrivateKeyFilePath = getPrivateKeyFilePath;
|
|
10
19
|
function getCertificateFilePath() {
|
|
11
|
-
return (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR,
|
|
20
|
+
return (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.DEVICE_CERTIFICATE_FILE_NAME);
|
|
12
21
|
}
|
|
13
22
|
exports.getCertificateFilePath = getCertificateFilePath;
|
|
14
23
|
function getRootCertificateFilePath() {
|
|
15
|
-
return (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR,
|
|
24
|
+
return (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.AWS_ROOT_CERTIFICATE_FILE_NAME);
|
|
16
25
|
}
|
|
17
26
|
exports.getRootCertificateFilePath = getRootCertificateFilePath;
|
|
18
27
|
function getCredentialsFilePath() {
|
|
19
28
|
return (0, path_1.join)(constants_1.LOCAL_AAI_CFG_DIR, constants_1.DEVICE_TOKEN_FILE_NAME);
|
|
20
29
|
}
|
|
21
30
|
exports.getCredentialsFilePath = getCredentialsFilePath;
|
|
31
|
+
exports.BOOTSTRAP_CERTIFICATES_DIR_PATH = (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.BOOTSTRAP_DIR_NAME);
|
|
32
|
+
exports.DEVICE_CLAIM_ID_FILE_PATH = (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, constants_1.DEVICE_TOKEN_FILE_NAME);
|
|
33
|
+
exports.BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_PATH = (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.BOOTSTRAP_DIR_NAME, exports.BOOTSTRAP_DEVICE_PRIVATE_KEY_FILE_NAME);
|
|
34
|
+
exports.BOOTSTRAP_DEVICE_CERTIFICATE_FILE_PATH = (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.BOOTSTRAP_DIR_NAME, exports.BOOTSTRAP_DEVICE_CERTIFICATE_FILE_NAME);
|
|
35
|
+
exports.BOOTSTRAP_CLAIM_ID_FILE_PATH = (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.BOOTSTRAP_DIR_NAME, exports.BOOTSTRAP_CLAIM_ID_FILE_NAME);
|
|
36
|
+
exports.AWS_ROOT_CERTIFICATE_FILE_PATH = (0, path_1.join)(constants_1.LOCAL_CERT_AND_KEY_DIR, exports.AWS_ROOT_CERTIFICATE_FILE_NAME);
|
|
22
37
|
//# sourceMappingURL=directories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directories.js","sourceRoot":"","sources":["../../src/util/directories.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"directories.js","sourceRoot":"","sources":["../../src/util/directories.ts"],"names":[],"mappings":";;;AAAA,sDAIgC;AAChC,+BAA4B;AAEf,QAAA,kBAAkB,GAAG,wBAAwB,CAAC;AAC9C,QAAA,sCAAsC,GACjD,kCAAkC,CAAC;AACxB,QAAA,sCAAsC,GACjD,2BAA2B,CAAC;AACjB,QAAA,4BAA4B,GAAG,0BAA0B,CAAC;AAC1D,QAAA,8BAA8B,GAAG,mBAAmB,CAAC;AACrD,QAAA,qCAAqC,GAChD,iCAAiC,CAAC;AAEvB,QAAA,4BAA4B,GAAG,kCAAkC,CAAC;AAClE,QAAA,4BAA4B,GAAG,2BAA2B,CAAC;AAC3D,QAAA,yBAAyB,GAAG,0BAA0B,CAAC;AAEpE,SAAgB,qBAAqB;IACnC,OAAO,IAAA,WAAI,EAAC,kCAAsB,EAAE,oCAA4B,CAAC,CAAC;AACpE,CAAC;AAFD,sDAEC;AAED,SAAgB,sBAAsB;IACpC,OAAO,IAAA,WAAI,EAAC,kCAAsB,EAAE,oCAA4B,CAAC,CAAC;AACpE,CAAC;AAFD,wDAEC;AAED,SAAgB,0BAA0B;IACxC,OAAO,IAAA,WAAI,EAAC,kCAAsB,EAAE,sCAA8B,CAAC,CAAC;AACtE,CAAC;AAFD,gEAEC;AAED,SAAgB,sBAAsB;IACpC,OAAO,IAAA,WAAI,EAAC,6BAAiB,EAAE,kCAAsB,CAAC,CAAC;AACzD,CAAC;AAFD,wDAEC;AAEY,QAAA,+BAA+B,GAAG,IAAA,WAAI,EACjD,kCAAsB,EACtB,0BAAkB,CACnB,CAAC;AACW,QAAA,yBAAyB,GAAG,IAAA,WAAI,EAC3C,kCAAsB,EACtB,kCAAsB,CACvB,CAAC;AAEW,QAAA,sCAAsC,GAAG,IAAA,WAAI,EACxD,kCAAsB,EACtB,0BAAkB,EAClB,8CAAsC,CACvC,CAAC;AAEW,QAAA,sCAAsC,GAAG,IAAA,WAAI,EACxD,kCAAsB,EACtB,0BAAkB,EAClB,8CAAsC,CACvC,CAAC;AAEW,QAAA,4BAA4B,GAAG,IAAA,WAAI,EAC9C,kCAAsB,EACtB,0BAAkB,EAClB,oCAA4B,CAC7B,CAAC;AAEW,QAAA,8BAA8B,GAAG,IAAA,WAAI,EAChD,kCAAsB,EACtB,sCAA8B,CAC/B,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function httpClient(url: string, method: string, data?: string, headers?: object): Promise<any>;
|
|
2
|
+
export declare function microServiceHttpClient(service: string, path: string, method: string, data?: string): Promise<any>;
|
|
3
|
+
//# sourceMappingURL=http-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../src/util/http-client.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,gBAcjB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,gBAMd"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.microServiceHttpClient = exports.httpClient = void 0;
|
|
4
|
+
const node_fetch_1 = require("node-fetch");
|
|
5
|
+
const endpoints_1 = require("../endpoints");
|
|
6
|
+
const infrastructure_1 = require("alwaysai/lib/infrastructure");
|
|
7
|
+
async function httpClient(url, method, data, headers) {
|
|
8
|
+
const options = Object.assign({ method }, (data ? { body: data } : {}));
|
|
9
|
+
try {
|
|
10
|
+
const response = await (0, node_fetch_1.default)(url, options);
|
|
11
|
+
const code = response.status;
|
|
12
|
+
const contentType = response.headers.get("content-type");
|
|
13
|
+
if (contentType === "application/json") {
|
|
14
|
+
return await response.json();
|
|
15
|
+
}
|
|
16
|
+
else if (contentType.includes("text/plain")) {
|
|
17
|
+
return await response.text();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
catch (e) { }
|
|
21
|
+
}
|
|
22
|
+
exports.httpClient = httpClient;
|
|
23
|
+
async function microServiceHttpClient(service, path, method, data) {
|
|
24
|
+
const endpoint = (0, endpoints_1.serviceEndpointBuilder)(service, path);
|
|
25
|
+
const { getIdAuthorizationHeader } = (0, infrastructure_1.CliAuthenticationClient)();
|
|
26
|
+
const authorizationHeader = await getIdAuthorizationHeader();
|
|
27
|
+
return await httpClient(endpoint, method, data);
|
|
28
|
+
}
|
|
29
|
+
exports.microServiceHttpClient = microServiceHttpClient;
|
|
30
|
+
//# sourceMappingURL=http-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-client.js","sourceRoot":"","sources":["../../src/util/http-client.ts"],"names":[],"mappings":";;;AAAA,2CAA+B;AAC/B,4CAAsD;AACtD,gEAAsE;AAE/D,KAAK,UAAU,UAAU,CAC9B,GAAW,EACX,MAAc,EACd,IAAa,EACb,OAAgB;IAEhB,MAAM,OAAO,mBAAK,MAAM,IAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAE,CAAC;IAC5D,IAAI;QACF,MAAM,QAAQ,GAAG,MAAM,IAAA,oBAAK,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC;QAE7B,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,WAAW,KAAK,kBAAkB,EAAE;YACtC,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC9B;aAAM,IAAI,WAAY,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;YAC9C,OAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC9B;KACF;IAAC,OAAO,CAAC,EAAE,GAAE;AAChB,CAAC;AAlBD,gCAkBC;AAEM,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,IAAY,EACZ,MAAc,EACd,IAAa;IAEb,MAAM,QAAQ,GAAG,IAAA,kCAAsB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACvD,MAAM,EAAE,wBAAwB,EAAE,GAAG,IAAA,wCAAuB,GAAE,CAAC;IAC/D,MAAM,mBAAmB,GAAG,MAAM,wBAAwB,EAAE,CAAC;IAC7D,OAAO,MAAM,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAClD,CAAC;AAVD,wDAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AACnC,OAAO,2BAA2B,CAAC;AAgBnC,eAAO,MAAM,MAAM,gBAQjB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.logger = void 0;
|
|
4
|
+
const winston = require("winston");
|
|
5
|
+
require("winston-daily-rotate-file");
|
|
6
|
+
const path = require("path");
|
|
7
|
+
const constants_1 = require("alwaysai/lib/constants");
|
|
8
|
+
const environment_1 = require("../environment");
|
|
9
|
+
const LOG_LEVEL = environment_1.ALWAYSAI_LOG_LEVEL || 'info';
|
|
10
|
+
const transports = environment_1.ALWAYSAI_LOG_TO_CONSOLE
|
|
11
|
+
? [new winston.transports.Console({ level: LOG_LEVEL })]
|
|
12
|
+
: [
|
|
13
|
+
new winston.transports.DailyRotateFile({
|
|
14
|
+
filename: path.join(constants_1.AAI_DIR, 'agent-logs', 'agent-logs.txt'),
|
|
15
|
+
maxSize: '5m',
|
|
16
|
+
maxFiles: '2d',
|
|
17
|
+
}),
|
|
18
|
+
];
|
|
19
|
+
exports.logger = winston.createLogger({
|
|
20
|
+
level: LOG_LEVEL,
|
|
21
|
+
format: winston.format.combine(winston.format.errors({ stack: true }), winston.format.splat(), winston.format.simple()),
|
|
22
|
+
transports,
|
|
23
|
+
});
|
|
24
|
+
exports.logger.info(`Initialized logger with log level: ${LOG_LEVEL}`);
|
|
25
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/util/logger.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AACnC,qCAAmC;AACnC,6BAA6B;AAC7B,sDAAiD;AACjD,gDAA6E;AAE7E,MAAM,SAAS,GAAG,gCAAkB,IAAI,MAAM,CAAC;AAC/C,MAAM,UAAU,GAAG,qCAAuB;IACxC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC;QACE,IAAI,OAAO,CAAC,UAAU,CAAC,eAAe,CAAC;YACrC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,mBAAO,EAAE,YAAY,EAAE,gBAAgB,CAAC;YAC5D,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,IAAI;SACf,CAAC;KACH,CAAC;AAEO,QAAA,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IACzC,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EACtB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CACxB;IACD,UAAU;CACX,CAAC,CAAC;AAEH,cAAM,CAAC,IAAI,CAAC,sCAAsC,SAAS,EAAE,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alwaysai/device-agent",
|
|
3
3
|
"description": "The alwaysAI Device Agent",
|
|
4
|
-
"version": "0.0.
|
|
4
|
+
"version": "0.0.11",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"publishConfig": {
|
|
@@ -43,6 +43,7 @@
|
|
|
43
43
|
"aws-iot-device-sdk": "2.2.12",
|
|
44
44
|
"docker-compose": "0.23.17",
|
|
45
45
|
"express": "4.17.3",
|
|
46
|
+
"lodash": "^4.17.21",
|
|
46
47
|
"mkdirp": "1.0.4",
|
|
47
48
|
"node-fetch": "2.6.1",
|
|
48
49
|
"node-os-utils": "1.3.6",
|
|
@@ -4,6 +4,7 @@ import { copyDir } from '../util/copy-dir';
|
|
|
4
4
|
import { buildApp, getAppDir } from './utils';
|
|
5
5
|
import { AgentConfigFile } from '../infrastructure/agent-config';
|
|
6
6
|
import { runInDir } from '../util/run-in-dir';
|
|
7
|
+
import { logger } from '../util/logger';
|
|
7
8
|
|
|
8
9
|
export const BACKUP_EXT = '.bak';
|
|
9
10
|
|
|
@@ -14,7 +15,7 @@ export async function createAppBackup(props: { projectId: string }) {
|
|
|
14
15
|
rimraf.sync(backupAppDir);
|
|
15
16
|
await copyDir({ srcPath: appDir, destPath: backupAppDir });
|
|
16
17
|
await AgentConfigFile().setAppBackup({ projectId });
|
|
17
|
-
|
|
18
|
+
logger.info(`Backed up app ${projectId} to ${backupAppDir}`);
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
export async function rollbackApp(props: { projectId: string }) {
|
|
@@ -23,7 +24,7 @@ export async function rollbackApp(props: { projectId: string }) {
|
|
|
23
24
|
if (!config) {
|
|
24
25
|
throw new Error(`Backup doesn't exist for ${projectId}`);
|
|
25
26
|
}
|
|
26
|
-
|
|
27
|
+
logger.info(`Rolling back app ${projectId} to ${config.version}`);
|
|
27
28
|
await AgentConfigFile().setAppInstalling({ projectId, version: config.version });
|
|
28
29
|
const appDir = getAppDir(projectId);
|
|
29
30
|
const backupAppDir = `${appDir}${BACKUP_EXT}`;
|
|
@@ -31,5 +32,5 @@ export async function rollbackApp(props: { projectId: string }) {
|
|
|
31
32
|
await copyDir({ srcPath: backupAppDir, destPath: appDir });
|
|
32
33
|
await buildApp({ appDir });
|
|
33
34
|
await AgentConfigFile().setAppInstalled({ projectId, version: config.version });
|
|
34
|
-
|
|
35
|
+
logger.info(`Rolled back app ${projectId} to ${config.version}`);
|
|
35
36
|
}
|
|
@@ -22,6 +22,7 @@ import { DOCKERFILE, DOCKER_IMAGE_ID_INITIAL_VALUE } from 'alwaysai/lib/constant
|
|
|
22
22
|
import { appReleasePullComponent } from 'alwaysai/lib/components/release';
|
|
23
23
|
import { runInDir } from '../util/run-in-dir';
|
|
24
24
|
import { installModelsWithPresignedURLs } from './models';
|
|
25
|
+
import { logger } from '../util/logger';
|
|
25
26
|
|
|
26
27
|
type SignedUrlPayloadType = {
|
|
27
28
|
appInstallPayload: {
|
|
@@ -57,7 +58,7 @@ export async function installApp(props: {
|
|
|
57
58
|
if (!(await AgentConfigFile().isAppReady({ projectId }))) {
|
|
58
59
|
throw new Error('Application already has installation in progress!');
|
|
59
60
|
}
|
|
60
|
-
|
|
61
|
+
logger.info('Application is already installed, updating');
|
|
61
62
|
await AgentConfigFile().setAppInstalling({ projectId, version: appReleaseHash });
|
|
62
63
|
await spawner.rimraf(appDir);
|
|
63
64
|
} else {
|
|
@@ -121,7 +122,7 @@ export async function installApp(props: {
|
|
|
121
122
|
|
|
122
123
|
await AgentConfigFile().setAppInstalled({ projectId, version: appReleaseHash });
|
|
123
124
|
|
|
124
|
-
|
|
125
|
+
logger.info(
|
|
125
126
|
`Installed app version ${appReleaseHash} from project ${projectId} to ${appDir}.`,
|
|
126
127
|
);
|
|
127
128
|
}
|
|
@@ -188,18 +189,18 @@ async function checkValidProjectFiles({ appDir }) {
|
|
|
188
189
|
export async function uninstallApp(props: { projectId: string }): Promise<void> {
|
|
189
190
|
const { projectId } = props;
|
|
190
191
|
if (!(await AgentConfigFile().isAppPresent({ projectId }))) {
|
|
191
|
-
|
|
192
|
+
logger.info(`Application ${projectId} not installed`);
|
|
192
193
|
return;
|
|
193
194
|
}
|
|
194
195
|
try {
|
|
195
196
|
await stopApp({ projectId });
|
|
196
197
|
} catch {
|
|
197
|
-
|
|
198
|
+
logger.info('Failed to stop app, may be left running...');
|
|
198
199
|
}
|
|
199
200
|
await AgentConfigFile().setAppUninstalled({ projectId });
|
|
200
201
|
// Delete application directory and backup
|
|
201
202
|
const appDir = getAppDir(projectId);
|
|
202
203
|
rimraf.sync(appDir);
|
|
203
204
|
rimraf.sync(`${appDir}${BACKUP_EXT}`);
|
|
204
|
-
|
|
205
|
+
logger.info('Uninstalled', projectId);
|
|
205
206
|
}
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
appModelsRemoveComponent,
|
|
7
7
|
appModelsUpdateComponent,
|
|
8
8
|
} from 'alwaysai/lib/components/app';
|
|
9
|
-
import { JsSpawner
|
|
9
|
+
import { JsSpawner } from 'alwaysai/lib/util';
|
|
10
|
+
import { logger } from '../util/logger';
|
|
10
11
|
import { existsSync, createReadStream } from 'fs';
|
|
11
12
|
import { join, dirname } from 'path';
|
|
12
13
|
import { AgentConfigFile } from '../infrastructure/agent-config';
|
|
@@ -183,9 +184,9 @@ export async function updateModelsWithPresignedUrls(
|
|
|
183
184
|
restartApp({ projectId: project });
|
|
184
185
|
}
|
|
185
186
|
|
|
186
|
-
|
|
187
|
+
logger.info(`Models installed for project ${project}`);
|
|
187
188
|
} catch (e) {
|
|
188
|
-
|
|
189
|
+
logger.error(e, 'Error updating app models from presigned URL, restoring models.');
|
|
189
190
|
await spawner.rimraf(tmpDir);
|
|
190
191
|
await spawner.rimraf(ogDir);
|
|
191
192
|
await copyDir({ srcPath: restoreDir, destPath: ogDir });
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
AppStateValue,
|
|
12
12
|
} from '@alwaysai/device-agent-schemas';
|
|
13
13
|
import { AgentConfigFile } from '../infrastructure/agent-config';
|
|
14
|
+
import { logger } from '../util/logger';
|
|
14
15
|
|
|
15
16
|
export async function listAppReleases(props: { projectId: string }) {
|
|
16
17
|
const { projectId } = props;
|
|
@@ -147,19 +148,19 @@ export async function startApp(props: {
|
|
|
147
148
|
const appDir = getAppDir(projectId);
|
|
148
149
|
if (dockerLoginToken !== undefined) {
|
|
149
150
|
const result = await runDockerLogin({ token: dockerLoginToken });
|
|
150
|
-
|
|
151
|
+
logger.info(result);
|
|
151
152
|
}
|
|
152
153
|
|
|
153
154
|
// TODO: Check if app is running
|
|
154
155
|
// Start app
|
|
155
156
|
const upOut = await compose.upAll({ cwd: appDir });
|
|
156
|
-
|
|
157
|
+
logger.info(upOut);
|
|
157
158
|
if (upOut.exitCode !== 0) {
|
|
158
159
|
throw new Error(
|
|
159
160
|
`Failed to start application! stdout=${upOut.out} stderr=${upOut.err}`,
|
|
160
161
|
);
|
|
161
162
|
}
|
|
162
|
-
|
|
163
|
+
logger.info('Started', projectId);
|
|
163
164
|
}
|
|
164
165
|
|
|
165
166
|
export async function stopApp(props: { projectId: string }): Promise<void> {
|
|
@@ -170,13 +171,13 @@ export async function stopApp(props: { projectId: string }): Promise<void> {
|
|
|
170
171
|
// TODO: Check if app is running
|
|
171
172
|
// Stop app
|
|
172
173
|
const output = await compose.down({ cwd: appDir });
|
|
173
|
-
|
|
174
|
+
logger.info(output);
|
|
174
175
|
if (output.exitCode !== 0) {
|
|
175
176
|
throw new Error(
|
|
176
177
|
`Failed to stop application! stdout=${output.out} stderr=${output.err}`,
|
|
177
178
|
);
|
|
178
179
|
}
|
|
179
|
-
|
|
180
|
+
logger.info('Stopped', projectId);
|
|
180
181
|
}
|
|
181
182
|
|
|
182
183
|
export async function restartApp(props: { projectId: string }): Promise<void> {
|
|
@@ -9,6 +9,7 @@ import { TargetJsonFile } from 'alwaysai/lib/core/app';
|
|
|
9
9
|
import { appDeployLinuxAndRemoteDevice } from 'alwaysai/lib/components/app';
|
|
10
10
|
import { runInDir } from '../util/run-in-dir';
|
|
11
11
|
import { JsSpawner } from 'alwaysai/lib/util';
|
|
12
|
+
import { logger } from '../util/logger';
|
|
12
13
|
|
|
13
14
|
export const APP_ROOT = path.join(AAI_DIR, 'applications');
|
|
14
15
|
|
|
@@ -52,7 +53,7 @@ export async function buildApp(props: { appDir: string }) {
|
|
|
52
53
|
);
|
|
53
54
|
|
|
54
55
|
const buildOut = await compose.buildAll({ cwd: appDir });
|
|
55
|
-
|
|
56
|
+
logger.info(buildOut);
|
|
56
57
|
if (buildOut.exitCode !== 0) {
|
|
57
58
|
throw new Error(
|
|
58
59
|
`Failed to build application! stdout=${buildOut.out} stderr=${buildOut.err}`,
|
|
@@ -64,7 +65,7 @@ export async function downloadPackageUsingPresignedUrl(props: {
|
|
|
64
65
|
localDest: string;
|
|
65
66
|
presignedUrl: string;
|
|
66
67
|
}): Promise<void> {
|
|
67
|
-
|
|
68
|
+
logger.info('downloading URL');
|
|
68
69
|
const { localDest, presignedUrl } = props;
|
|
69
70
|
const response = await nodeFetch(presignedUrl);
|
|
70
71
|
if (response.status !== 200) {
|