/
getVersion.ts
79 lines (72 loc) · 2.3 KB
/
getVersion.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { config } from "../config";
import { HttpResponse } from "../httpd/lib";
import { MultichainClient } from "../service/Client.h";
import StorageServiceClient from "../service/Client_storage_service";
import { Version } from "../service/Client_storage_service.h";
import BlockchainApi from "./blockchainApi";
interface VersionMetadata {
release?: string;
ping?: number;
commit?: string;
buildTimeStamp?: string;
}
const blockchainApi = new BlockchainApi();
const bcVersionMetaData = async (blockchainHost, blockchainPort): Promise<VersionMetadata> => {
blockchainApi.setBaseUrl(`http://${blockchainHost}:${blockchainPort}`);
const { data } = await blockchainApi.fetchVersion();
return data;
};
const apiVersionMetaData = (): VersionMetadata => {
const metaData: VersionMetadata = {
release: config.npmPackageVersion,
commit: config.ciCommitSha,
buildTimeStamp: config.buildTimeStamp,
};
return metaData;
};
const multichainVersionMetaData = async (
multichainClient: MultichainClient,
): Promise<VersionMetadata> => {
const { version, ping } = await multichainClient.getInfo();
return {
release: version,
ping,
};
};
const storageServiceMetaData = async (
storageServiceClient: StorageServiceClient,
): Promise<Version> => storageServiceClient.getVersion();
export const getVersion = async (
blockchainHost: string,
blockchainPort: number,
multichainClient: MultichainClient,
storageServiceClient: StorageServiceClient,
): Promise<HttpResponse> => {
// TODO (future): If any of axios requests fails, the whole getVersion request fails
// TODO (future): Resolve promises PromiseAllSettled and handle errors
if (config.documentFeatureEnabled) {
return [
200,
{
apiVersion: "1.0",
data: {
api: apiVersionMetaData(),
blockchain: await bcVersionMetaData(blockchainHost, blockchainPort),
multichain: await multichainVersionMetaData(multichainClient),
storage: await storageServiceMetaData(storageServiceClient),
},
},
];
}
return [
200,
{
apiVersion: "1.0",
data: {
api: apiVersionMetaData(),
blockchain: await bcVersionMetaData(blockchainHost, blockchainPort),
multichain: await multichainVersionMetaData(multichainClient),
},
},
];
};