From fbd1ff802d00a9bf3f9bcd5337610a28b83eea00 Mon Sep 17 00:00:00 2001 From: Peter Somogyvari Date: Sat, 7 Aug 2021 18:01:58 -0700 Subject: [PATCH] feat(cmd-api-server): support grpc web services #1189 WORK IN PROGRESS! Fixes #1189 Signed-off-by: Peter Somogyvari --- .cspell.json | 8 +- package.json | 3 + packages/cactus-cmd-api-server/package.json | 4 + .../src/main/proto/healthcheck.proto | 25 + .../main/typescript/generated/proto/pbjs.js | 864 ++++++++++++++++++ .../main/typescript/generated/proto/pbts.d.ts | 361 ++++++++ .../src/main/typescript/public-api.ts | 2 + .../grpc/watch-healthcheck-v1-endpoint.ts | 75 ++ yarn.lock | 38 +- 9 files changed, 1376 insertions(+), 4 deletions(-) create mode 100644 packages/cactus-cmd-api-server/src/main/proto/healthcheck.proto create mode 100644 packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbjs.js create mode 100644 packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbts.d.ts create mode 100644 packages/cactus-cmd-api-server/src/main/typescript/web-services/grpc/watch-healthcheck-v1-endpoint.ts diff --git a/.cspell.json b/.cspell.json index ebfbb6dcbb..10602d8a1b 100644 --- a/.cspell.json +++ b/.cspell.json @@ -72,6 +72,11 @@ "OpenAPI", "openethereum", "organisation", + "parameterizable", + "pbjs", + "pbts", + "proto", + "protoc", "protos", "RUSTC", "Secp", @@ -91,8 +96,7 @@ "uuidv", "vscc", "wasm", - "Xdai", - "parameterizable" + "Xdai" ], "dictionaries": [ "typescript,node,npm,go,rust" diff --git a/package.json b/package.json index 731766fce7..e52c856fb5 100644 --- a/package.json +++ b/package.json @@ -100,6 +100,7 @@ "fs-extra": "10.0.0", "git-cz": "4.7.6", "globby": "10.0.2", + "grpc-tools": "1.11.2", "husky": "4.2.5", "inquirer": "8.1.1", "json5": "2.2.0", @@ -114,6 +115,7 @@ "npm-run-all": "4.1.5", "npm-watch": "0.7.0", "prettier": "2.0.5", + "protobufjs": "6.11.2", "run-time-error": "1.4.0", "secp256k1": "4.0.0", "shebang-loader": "0.0.1", @@ -124,6 +126,7 @@ "tape-promise": "4.0.0", "ts-loader": "6.2.1", "ts-node": "10.1.0", + "ts-protoc-gen": "0.15.0", "typescript": "4.2.4", "webpack": "5.36.2", "webpack-bundle-analyzer": "4.4.2", diff --git a/packages/cactus-cmd-api-server/package.json b/packages/cactus-cmd-api-server/package.json index 2916d06471..3ca257b5f5 100644 --- a/packages/cactus-cmd-api-server/package.json +++ b/packages/cactus-cmd-api-server/package.json @@ -14,6 +14,10 @@ "scripts": { "generate-sdk": "openapi-generator-cli generate -i ./src/main/json/openapi.json -g typescript-axios -o ./src/main/typescript/generated/openapi/typescript-axios/ --reserved-words-mappings protected=protected", "codegen:openapi": "npm run generate-sdk", + "proto:pbjs": "yarn pbjs --es6 --target static --wrap=es6 --out ./src/main/typescript/generated/proto/pbjs.js ./src/main/proto/healthcheck.proto", + "proto:pbts": "yarn pbts --out ./src/main/typescript/generated/proto/pbts.d.ts ./src/main/typescript/generated/proto/pbjs.js", + "proto:protoc": "yarn grpc_tools_node_protoc ./src/main/proto/healthcheck.proto", + "codegen:proto": "run-s 'protoc:*'", "codegen": "run-p 'codegen:*'", "watch": "npm-watch", "webpack": "npm-run-all webpack:dev webpack:prod", diff --git a/packages/cactus-cmd-api-server/src/main/proto/healthcheck.proto b/packages/cactus-cmd-api-server/src/main/proto/healthcheck.proto new file mode 100644 index 0000000000..c428df2df7 --- /dev/null +++ b/packages/cactus-cmd-api-server/src/main/proto/healthcheck.proto @@ -0,0 +1,25 @@ +syntax = "proto3"; + +package org.hyperledger.cactus.cmd_api_server; + +service Healthcheck { + // Obtains the memory usage statistics of the API server's NodeJS process. + rpc GetHealtcheck(HealthcheckRequest) returns (stream HealthcheckResponse) {} +} + +message MemoryUsage { + int64 rss = 1; + int64 heapTotal = 2; + int64 heapUsed = 3; + int64 external = 4; + int64 arrayBuffers = 5; +} + +message HealthcheckRequest { +} + +message HealthcheckResponse { + bool success = 1; + string createdAt = 2; + MemoryUsage memoryUsage = 3; +} diff --git a/packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbjs.js b/packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbjs.js new file mode 100644 index 0000000000..7e702549e1 --- /dev/null +++ b/packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbjs.js @@ -0,0 +1,864 @@ +// Common aliases +const $Reader = $protobuf.Reader, $Writer = $protobuf.Writer, $util = $protobuf.util; + +// Exported root namespace +const $root = $protobuf.roots["default"] || ($protobuf.roots["default"] = {}); + +export const org = $root.org = (() => { + + /** + * Namespace org. + * @exports org + * @namespace + */ + const org = {}; + + org.hyperledger = (function() { + + /** + * Namespace hyperledger. + * @memberof org + * @namespace + */ + const hyperledger = {}; + + hyperledger.cactus = (function() { + + /** + * Namespace cactus. + * @memberof org.hyperledger + * @namespace + */ + const cactus = {}; + + cactus.cmd_api_server = (function() { + + /** + * Namespace cmd_api_server. + * @memberof org.hyperledger.cactus + * @namespace + */ + const cmd_api_server = {}; + + cmd_api_server.Healthcheck = (function() { + + /** + * Constructs a new Healthcheck service. + * @memberof org.hyperledger.cactus.cmd_api_server + * @classdesc Represents a Healthcheck + * @extends $protobuf.rpc.Service + * @constructor + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + */ + function Healthcheck(rpcImpl, requestDelimited, responseDelimited) { + $protobuf.rpc.Service.call(this, rpcImpl, requestDelimited, responseDelimited); + } + + (Healthcheck.prototype = Object.create($protobuf.rpc.Service.prototype)).constructor = Healthcheck; + + /** + * Creates new Healthcheck service using the specified rpc implementation. + * @function create + * @memberof org.hyperledger.cactus.cmd_api_server.Healthcheck + * @static + * @param {$protobuf.RPCImpl} rpcImpl RPC implementation + * @param {boolean} [requestDelimited=false] Whether requests are length-delimited + * @param {boolean} [responseDelimited=false] Whether responses are length-delimited + * @returns {Healthcheck} RPC service. Useful where requests and/or responses are streamed. + */ + Healthcheck.create = function create(rpcImpl, requestDelimited, responseDelimited) { + return new this(rpcImpl, requestDelimited, responseDelimited); + }; + + /** + * Callback as used by {@link org.hyperledger.cactus.cmd_api_server.Healthcheck#getHealtcheck}. + * @memberof org.hyperledger.cactus.cmd_api_server.Healthcheck + * @typedef GetHealtcheckCallback + * @type {function} + * @param {Error|null} error Error, if any + * @param {org.hyperledger.cactus.cmd_api_server.HealthcheckResponse} [response] HealthcheckResponse + */ + + /** + * Calls GetHealtcheck. + * @function getHealtcheck + * @memberof org.hyperledger.cactus.cmd_api_server.Healthcheck + * @instance + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest} request HealthcheckRequest message or plain object + * @param {org.hyperledger.cactus.cmd_api_server.Healthcheck.GetHealtcheckCallback} callback Node-style callback called with the error, if any, and HealthcheckResponse + * @returns {undefined} + * @variation 1 + */ + Object.defineProperty(Healthcheck.prototype.getHealtcheck = function getHealtcheck(request, callback) { + return this.rpcCall(getHealtcheck, $root.org.hyperledger.cactus.cmd_api_server.HealthcheckRequest, $root.org.hyperledger.cactus.cmd_api_server.HealthcheckResponse, request, callback); + }, "name", { value: "GetHealtcheck" }); + + /** + * Calls GetHealtcheck. + * @function getHealtcheck + * @memberof org.hyperledger.cactus.cmd_api_server.Healthcheck + * @instance + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest} request HealthcheckRequest message or plain object + * @returns {Promise} Promise + * @variation 2 + */ + + return Healthcheck; + })(); + + cmd_api_server.MemoryUsage = (function() { + + /** + * Properties of a MemoryUsage. + * @memberof org.hyperledger.cactus.cmd_api_server + * @interface IMemoryUsage + * @property {number|Long|null} [rss] MemoryUsage rss + * @property {number|Long|null} [heapTotal] MemoryUsage heapTotal + * @property {number|Long|null} [heapUsed] MemoryUsage heapUsed + * @property {number|Long|null} [external] MemoryUsage external + * @property {number|Long|null} [arrayBuffers] MemoryUsage arrayBuffers + */ + + /** + * Constructs a new MemoryUsage. + * @memberof org.hyperledger.cactus.cmd_api_server + * @classdesc Represents a MemoryUsage. + * @implements IMemoryUsage + * @constructor + * @param {org.hyperledger.cactus.cmd_api_server.IMemoryUsage=} [properties] Properties to set + */ + function MemoryUsage(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * MemoryUsage rss. + * @member {number|Long} rss + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @instance + */ + MemoryUsage.prototype.rss = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * MemoryUsage heapTotal. + * @member {number|Long} heapTotal + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @instance + */ + MemoryUsage.prototype.heapTotal = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * MemoryUsage heapUsed. + * @member {number|Long} heapUsed + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @instance + */ + MemoryUsage.prototype.heapUsed = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * MemoryUsage external. + * @member {number|Long} external + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @instance + */ + MemoryUsage.prototype.external = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * MemoryUsage arrayBuffers. + * @member {number|Long} arrayBuffers + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @instance + */ + MemoryUsage.prototype.arrayBuffers = $util.Long ? $util.Long.fromBits(0,0,false) : 0; + + /** + * Creates a new MemoryUsage instance using the specified properties. + * @function create + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IMemoryUsage=} [properties] Properties to set + * @returns {org.hyperledger.cactus.cmd_api_server.MemoryUsage} MemoryUsage instance + */ + MemoryUsage.create = function create(properties) { + return new MemoryUsage(properties); + }; + + /** + * Encodes the specified MemoryUsage message. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.MemoryUsage.verify|verify} messages. + * @function encode + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IMemoryUsage} message MemoryUsage message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + MemoryUsage.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.rss != null && Object.hasOwnProperty.call(message, "rss")) + writer.uint32(/* id 1, wireType 0 =*/8).int64(message.rss); + if (message.heapTotal != null && Object.hasOwnProperty.call(message, "heapTotal")) + writer.uint32(/* id 2, wireType 0 =*/16).int64(message.heapTotal); + if (message.heapUsed != null && Object.hasOwnProperty.call(message, "heapUsed")) + writer.uint32(/* id 3, wireType 0 =*/24).int64(message.heapUsed); + if (message.external != null && Object.hasOwnProperty.call(message, "external")) + writer.uint32(/* id 4, wireType 0 =*/32).int64(message.external); + if (message.arrayBuffers != null && Object.hasOwnProperty.call(message, "arrayBuffers")) + writer.uint32(/* id 5, wireType 0 =*/40).int64(message.arrayBuffers); + return writer; + }; + + /** + * Encodes the specified MemoryUsage message, length delimited. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.MemoryUsage.verify|verify} messages. + * @function encodeDelimited + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IMemoryUsage} message MemoryUsage message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + MemoryUsage.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a MemoryUsage message from the specified reader or buffer. + * @function decode + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {org.hyperledger.cactus.cmd_api_server.MemoryUsage} MemoryUsage + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MemoryUsage.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.rss = reader.int64(); + break; + case 2: + message.heapTotal = reader.int64(); + break; + case 3: + message.heapUsed = reader.int64(); + break; + case 4: + message.external = reader.int64(); + break; + case 5: + message.arrayBuffers = reader.int64(); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a MemoryUsage message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {org.hyperledger.cactus.cmd_api_server.MemoryUsage} MemoryUsage + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + MemoryUsage.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a MemoryUsage message. + * @function verify + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + MemoryUsage.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.rss != null && message.hasOwnProperty("rss")) + if (!$util.isInteger(message.rss) && !(message.rss && $util.isInteger(message.rss.low) && $util.isInteger(message.rss.high))) + return "rss: integer|Long expected"; + if (message.heapTotal != null && message.hasOwnProperty("heapTotal")) + if (!$util.isInteger(message.heapTotal) && !(message.heapTotal && $util.isInteger(message.heapTotal.low) && $util.isInteger(message.heapTotal.high))) + return "heapTotal: integer|Long expected"; + if (message.heapUsed != null && message.hasOwnProperty("heapUsed")) + if (!$util.isInteger(message.heapUsed) && !(message.heapUsed && $util.isInteger(message.heapUsed.low) && $util.isInteger(message.heapUsed.high))) + return "heapUsed: integer|Long expected"; + if (message.external != null && message.hasOwnProperty("external")) + if (!$util.isInteger(message.external) && !(message.external && $util.isInteger(message.external.low) && $util.isInteger(message.external.high))) + return "external: integer|Long expected"; + if (message.arrayBuffers != null && message.hasOwnProperty("arrayBuffers")) + if (!$util.isInteger(message.arrayBuffers) && !(message.arrayBuffers && $util.isInteger(message.arrayBuffers.low) && $util.isInteger(message.arrayBuffers.high))) + return "arrayBuffers: integer|Long expected"; + return null; + }; + + /** + * Creates a MemoryUsage message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {Object.} object Plain object + * @returns {org.hyperledger.cactus.cmd_api_server.MemoryUsage} MemoryUsage + */ + MemoryUsage.fromObject = function fromObject(object) { + if (object instanceof $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage) + return object; + let message = new $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage(); + if (object.rss != null) + if ($util.Long) + (message.rss = $util.Long.fromValue(object.rss)).unsigned = false; + else if (typeof object.rss === "string") + message.rss = parseInt(object.rss, 10); + else if (typeof object.rss === "number") + message.rss = object.rss; + else if (typeof object.rss === "object") + message.rss = new $util.LongBits(object.rss.low >>> 0, object.rss.high >>> 0).toNumber(); + if (object.heapTotal != null) + if ($util.Long) + (message.heapTotal = $util.Long.fromValue(object.heapTotal)).unsigned = false; + else if (typeof object.heapTotal === "string") + message.heapTotal = parseInt(object.heapTotal, 10); + else if (typeof object.heapTotal === "number") + message.heapTotal = object.heapTotal; + else if (typeof object.heapTotal === "object") + message.heapTotal = new $util.LongBits(object.heapTotal.low >>> 0, object.heapTotal.high >>> 0).toNumber(); + if (object.heapUsed != null) + if ($util.Long) + (message.heapUsed = $util.Long.fromValue(object.heapUsed)).unsigned = false; + else if (typeof object.heapUsed === "string") + message.heapUsed = parseInt(object.heapUsed, 10); + else if (typeof object.heapUsed === "number") + message.heapUsed = object.heapUsed; + else if (typeof object.heapUsed === "object") + message.heapUsed = new $util.LongBits(object.heapUsed.low >>> 0, object.heapUsed.high >>> 0).toNumber(); + if (object.external != null) + if ($util.Long) + (message.external = $util.Long.fromValue(object.external)).unsigned = false; + else if (typeof object.external === "string") + message.external = parseInt(object.external, 10); + else if (typeof object.external === "number") + message.external = object.external; + else if (typeof object.external === "object") + message.external = new $util.LongBits(object.external.low >>> 0, object.external.high >>> 0).toNumber(); + if (object.arrayBuffers != null) + if ($util.Long) + (message.arrayBuffers = $util.Long.fromValue(object.arrayBuffers)).unsigned = false; + else if (typeof object.arrayBuffers === "string") + message.arrayBuffers = parseInt(object.arrayBuffers, 10); + else if (typeof object.arrayBuffers === "number") + message.arrayBuffers = object.arrayBuffers; + else if (typeof object.arrayBuffers === "object") + message.arrayBuffers = new $util.LongBits(object.arrayBuffers.low >>> 0, object.arrayBuffers.high >>> 0).toNumber(); + return message; + }; + + /** + * Creates a plain object from a MemoryUsage message. Also converts values to other types if specified. + * @function toObject + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @static + * @param {org.hyperledger.cactus.cmd_api_server.MemoryUsage} message MemoryUsage + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + MemoryUsage.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.defaults) { + if ($util.Long) { + let long = new $util.Long(0, 0, false); + object.rss = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.rss = options.longs === String ? "0" : 0; + if ($util.Long) { + let long = new $util.Long(0, 0, false); + object.heapTotal = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.heapTotal = options.longs === String ? "0" : 0; + if ($util.Long) { + let long = new $util.Long(0, 0, false); + object.heapUsed = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.heapUsed = options.longs === String ? "0" : 0; + if ($util.Long) { + let long = new $util.Long(0, 0, false); + object.external = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.external = options.longs === String ? "0" : 0; + if ($util.Long) { + let long = new $util.Long(0, 0, false); + object.arrayBuffers = options.longs === String ? long.toString() : options.longs === Number ? long.toNumber() : long; + } else + object.arrayBuffers = options.longs === String ? "0" : 0; + } + if (message.rss != null && message.hasOwnProperty("rss")) + if (typeof message.rss === "number") + object.rss = options.longs === String ? String(message.rss) : message.rss; + else + object.rss = options.longs === String ? $util.Long.prototype.toString.call(message.rss) : options.longs === Number ? new $util.LongBits(message.rss.low >>> 0, message.rss.high >>> 0).toNumber() : message.rss; + if (message.heapTotal != null && message.hasOwnProperty("heapTotal")) + if (typeof message.heapTotal === "number") + object.heapTotal = options.longs === String ? String(message.heapTotal) : message.heapTotal; + else + object.heapTotal = options.longs === String ? $util.Long.prototype.toString.call(message.heapTotal) : options.longs === Number ? new $util.LongBits(message.heapTotal.low >>> 0, message.heapTotal.high >>> 0).toNumber() : message.heapTotal; + if (message.heapUsed != null && message.hasOwnProperty("heapUsed")) + if (typeof message.heapUsed === "number") + object.heapUsed = options.longs === String ? String(message.heapUsed) : message.heapUsed; + else + object.heapUsed = options.longs === String ? $util.Long.prototype.toString.call(message.heapUsed) : options.longs === Number ? new $util.LongBits(message.heapUsed.low >>> 0, message.heapUsed.high >>> 0).toNumber() : message.heapUsed; + if (message.external != null && message.hasOwnProperty("external")) + if (typeof message.external === "number") + object.external = options.longs === String ? String(message.external) : message.external; + else + object.external = options.longs === String ? $util.Long.prototype.toString.call(message.external) : options.longs === Number ? new $util.LongBits(message.external.low >>> 0, message.external.high >>> 0).toNumber() : message.external; + if (message.arrayBuffers != null && message.hasOwnProperty("arrayBuffers")) + if (typeof message.arrayBuffers === "number") + object.arrayBuffers = options.longs === String ? String(message.arrayBuffers) : message.arrayBuffers; + else + object.arrayBuffers = options.longs === String ? $util.Long.prototype.toString.call(message.arrayBuffers) : options.longs === Number ? new $util.LongBits(message.arrayBuffers.low >>> 0, message.arrayBuffers.high >>> 0).toNumber() : message.arrayBuffers; + return object; + }; + + /** + * Converts this MemoryUsage to JSON. + * @function toJSON + * @memberof org.hyperledger.cactus.cmd_api_server.MemoryUsage + * @instance + * @returns {Object.} JSON object + */ + MemoryUsage.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return MemoryUsage; + })(); + + cmd_api_server.HealthcheckRequest = (function() { + + /** + * Properties of a HealthcheckRequest. + * @memberof org.hyperledger.cactus.cmd_api_server + * @interface IHealthcheckRequest + */ + + /** + * Constructs a new HealthcheckRequest. + * @memberof org.hyperledger.cactus.cmd_api_server + * @classdesc Represents a HealthcheckRequest. + * @implements IHealthcheckRequest + * @constructor + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest=} [properties] Properties to set + */ + function HealthcheckRequest(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * Creates a new HealthcheckRequest instance using the specified properties. + * @function create + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest=} [properties] Properties to set + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckRequest} HealthcheckRequest instance + */ + HealthcheckRequest.create = function create(properties) { + return new HealthcheckRequest(properties); + }; + + /** + * Encodes the specified HealthcheckRequest message. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckRequest.verify|verify} messages. + * @function encode + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest} message HealthcheckRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + HealthcheckRequest.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + return writer; + }; + + /** + * Encodes the specified HealthcheckRequest message, length delimited. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckRequest.verify|verify} messages. + * @function encodeDelimited + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest} message HealthcheckRequest message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + HealthcheckRequest.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a HealthcheckRequest message from the specified reader or buffer. + * @function decode + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckRequest} HealthcheckRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + HealthcheckRequest.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.org.hyperledger.cactus.cmd_api_server.HealthcheckRequest(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a HealthcheckRequest message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckRequest} HealthcheckRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + HealthcheckRequest.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a HealthcheckRequest message. + * @function verify + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + HealthcheckRequest.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + return null; + }; + + /** + * Creates a HealthcheckRequest message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {Object.} object Plain object + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckRequest} HealthcheckRequest + */ + HealthcheckRequest.fromObject = function fromObject(object) { + if (object instanceof $root.org.hyperledger.cactus.cmd_api_server.HealthcheckRequest) + return object; + return new $root.org.hyperledger.cactus.cmd_api_server.HealthcheckRequest(); + }; + + /** + * Creates a plain object from a HealthcheckRequest message. Also converts values to other types if specified. + * @function toObject + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @static + * @param {org.hyperledger.cactus.cmd_api_server.HealthcheckRequest} message HealthcheckRequest + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + HealthcheckRequest.toObject = function toObject() { + return {}; + }; + + /** + * Converts this HealthcheckRequest to JSON. + * @function toJSON + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckRequest + * @instance + * @returns {Object.} JSON object + */ + HealthcheckRequest.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return HealthcheckRequest; + })(); + + cmd_api_server.HealthcheckResponse = (function() { + + /** + * Properties of a HealthcheckResponse. + * @memberof org.hyperledger.cactus.cmd_api_server + * @interface IHealthcheckResponse + * @property {boolean|null} [success] HealthcheckResponse success + * @property {string|null} [createdAt] HealthcheckResponse createdAt + * @property {org.hyperledger.cactus.cmd_api_server.IMemoryUsage|null} [memoryUsage] HealthcheckResponse memoryUsage + */ + + /** + * Constructs a new HealthcheckResponse. + * @memberof org.hyperledger.cactus.cmd_api_server + * @classdesc Represents a HealthcheckResponse. + * @implements IHealthcheckResponse + * @constructor + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse=} [properties] Properties to set + */ + function HealthcheckResponse(properties) { + if (properties) + for (let keys = Object.keys(properties), i = 0; i < keys.length; ++i) + if (properties[keys[i]] != null) + this[keys[i]] = properties[keys[i]]; + } + + /** + * HealthcheckResponse success. + * @member {boolean} success + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @instance + */ + HealthcheckResponse.prototype.success = false; + + /** + * HealthcheckResponse createdAt. + * @member {string} createdAt + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @instance + */ + HealthcheckResponse.prototype.createdAt = ""; + + /** + * HealthcheckResponse memoryUsage. + * @member {org.hyperledger.cactus.cmd_api_server.IMemoryUsage|null|undefined} memoryUsage + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @instance + */ + HealthcheckResponse.prototype.memoryUsage = null; + + /** + * Creates a new HealthcheckResponse instance using the specified properties. + * @function create + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse=} [properties] Properties to set + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckResponse} HealthcheckResponse instance + */ + HealthcheckResponse.create = function create(properties) { + return new HealthcheckResponse(properties); + }; + + /** + * Encodes the specified HealthcheckResponse message. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckResponse.verify|verify} messages. + * @function encode + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse} message HealthcheckResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + HealthcheckResponse.encode = function encode(message, writer) { + if (!writer) + writer = $Writer.create(); + if (message.success != null && Object.hasOwnProperty.call(message, "success")) + writer.uint32(/* id 1, wireType 0 =*/8).bool(message.success); + if (message.createdAt != null && Object.hasOwnProperty.call(message, "createdAt")) + writer.uint32(/* id 2, wireType 2 =*/18).string(message.createdAt); + if (message.memoryUsage != null && Object.hasOwnProperty.call(message, "memoryUsage")) + $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage.encode(message.memoryUsage, writer.uint32(/* id 3, wireType 2 =*/26).fork()).ldelim(); + return writer; + }; + + /** + * Encodes the specified HealthcheckResponse message, length delimited. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckResponse.verify|verify} messages. + * @function encodeDelimited + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse} message HealthcheckResponse message or plain object to encode + * @param {$protobuf.Writer} [writer] Writer to encode to + * @returns {$protobuf.Writer} Writer + */ + HealthcheckResponse.encodeDelimited = function encodeDelimited(message, writer) { + return this.encode(message, writer).ldelim(); + }; + + /** + * Decodes a HealthcheckResponse message from the specified reader or buffer. + * @function decode + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @param {number} [length] Message length if known beforehand + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckResponse} HealthcheckResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + HealthcheckResponse.decode = function decode(reader, length) { + if (!(reader instanceof $Reader)) + reader = $Reader.create(reader); + let end = length === undefined ? reader.len : reader.pos + length, message = new $root.org.hyperledger.cactus.cmd_api_server.HealthcheckResponse(); + while (reader.pos < end) { + let tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + message.success = reader.bool(); + break; + case 2: + message.createdAt = reader.string(); + break; + case 3: + message.memoryUsage = $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage.decode(reader, reader.uint32()); + break; + default: + reader.skipType(tag & 7); + break; + } + } + return message; + }; + + /** + * Decodes a HealthcheckResponse message from the specified reader or buffer, length delimited. + * @function decodeDelimited + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {$protobuf.Reader|Uint8Array} reader Reader or buffer to decode from + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckResponse} HealthcheckResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + HealthcheckResponse.decodeDelimited = function decodeDelimited(reader) { + if (!(reader instanceof $Reader)) + reader = new $Reader(reader); + return this.decode(reader, reader.uint32()); + }; + + /** + * Verifies a HealthcheckResponse message. + * @function verify + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {Object.} message Plain object to verify + * @returns {string|null} `null` if valid, otherwise the reason why it is not + */ + HealthcheckResponse.verify = function verify(message) { + if (typeof message !== "object" || message === null) + return "object expected"; + if (message.success != null && message.hasOwnProperty("success")) + if (typeof message.success !== "boolean") + return "success: boolean expected"; + if (message.createdAt != null && message.hasOwnProperty("createdAt")) + if (!$util.isString(message.createdAt)) + return "createdAt: string expected"; + if (message.memoryUsage != null && message.hasOwnProperty("memoryUsage")) { + let error = $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage.verify(message.memoryUsage); + if (error) + return "memoryUsage." + error; + } + return null; + }; + + /** + * Creates a HealthcheckResponse message from a plain object. Also converts values to their respective internal types. + * @function fromObject + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {Object.} object Plain object + * @returns {org.hyperledger.cactus.cmd_api_server.HealthcheckResponse} HealthcheckResponse + */ + HealthcheckResponse.fromObject = function fromObject(object) { + if (object instanceof $root.org.hyperledger.cactus.cmd_api_server.HealthcheckResponse) + return object; + let message = new $root.org.hyperledger.cactus.cmd_api_server.HealthcheckResponse(); + if (object.success != null) + message.success = Boolean(object.success); + if (object.createdAt != null) + message.createdAt = String(object.createdAt); + if (object.memoryUsage != null) { + if (typeof object.memoryUsage !== "object") + throw TypeError(".org.hyperledger.cactus.cmd_api_server.HealthcheckResponse.memoryUsage: object expected"); + message.memoryUsage = $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage.fromObject(object.memoryUsage); + } + return message; + }; + + /** + * Creates a plain object from a HealthcheckResponse message. Also converts values to other types if specified. + * @function toObject + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @static + * @param {org.hyperledger.cactus.cmd_api_server.HealthcheckResponse} message HealthcheckResponse + * @param {$protobuf.IConversionOptions} [options] Conversion options + * @returns {Object.} Plain object + */ + HealthcheckResponse.toObject = function toObject(message, options) { + if (!options) + options = {}; + let object = {}; + if (options.defaults) { + object.success = false; + object.createdAt = ""; + object.memoryUsage = null; + } + if (message.success != null && message.hasOwnProperty("success")) + object.success = message.success; + if (message.createdAt != null && message.hasOwnProperty("createdAt")) + object.createdAt = message.createdAt; + if (message.memoryUsage != null && message.hasOwnProperty("memoryUsage")) + object.memoryUsage = $root.org.hyperledger.cactus.cmd_api_server.MemoryUsage.toObject(message.memoryUsage, options); + return object; + }; + + /** + * Converts this HealthcheckResponse to JSON. + * @function toJSON + * @memberof org.hyperledger.cactus.cmd_api_server.HealthcheckResponse + * @instance + * @returns {Object.} JSON object + */ + HealthcheckResponse.prototype.toJSON = function toJSON() { + return this.constructor.toObject(this, $protobuf.util.toJSONOptions); + }; + + return HealthcheckResponse; + })(); + + return cmd_api_server; + })(); + + return cactus; + })(); + + return hyperledger; + })(); + + return org; +})(); \ No newline at end of file diff --git a/packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbts.d.ts b/packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbts.d.ts new file mode 100644 index 0000000000..27eef4f119 --- /dev/null +++ b/packages/cactus-cmd-api-server/src/main/typescript/generated/proto/pbts.d.ts @@ -0,0 +1,361 @@ +import * as $protobuf from "protobufjs"; +/** Namespace org. */ +export namespace org { + + /** Namespace hyperledger. */ + namespace hyperledger { + + /** Namespace cactus. */ + namespace cactus { + + /** Namespace cmd_api_server. */ + namespace cmd_api_server { + + /** Represents a Healthcheck */ + class Healthcheck extends $protobuf.rpc.Service { + + /** + * Constructs a new Healthcheck service. + * @param rpcImpl RPC implementation + * @param [requestDelimited=false] Whether requests are length-delimited + * @param [responseDelimited=false] Whether responses are length-delimited + */ + constructor(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean); + + /** + * Creates new Healthcheck service using the specified rpc implementation. + * @param rpcImpl RPC implementation + * @param [requestDelimited=false] Whether requests are length-delimited + * @param [responseDelimited=false] Whether responses are length-delimited + * @returns RPC service. Useful where requests and/or responses are streamed. + */ + public static create(rpcImpl: $protobuf.RPCImpl, requestDelimited?: boolean, responseDelimited?: boolean): Healthcheck; + + /** + * Calls GetHealtcheck. + * @param request HealthcheckRequest message or plain object + * @param callback Node-style callback called with the error, if any, and HealthcheckResponse + */ + public getHealtcheck(request: org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest, callback: org.hyperledger.cactus.cmd_api_server.Healthcheck.GetHealtcheckCallback): void; + + /** + * Calls GetHealtcheck. + * @param request HealthcheckRequest message or plain object + * @returns Promise + */ + public getHealtcheck(request: org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest): Promise; + } + + namespace Healthcheck { + + /** + * Callback as used by {@link org.hyperledger.cactus.cmd_api_server.Healthcheck#getHealtcheck}. + * @param error Error, if any + * @param [response] HealthcheckResponse + */ + type GetHealtcheckCallback = (error: (Error|null), response?: org.hyperledger.cactus.cmd_api_server.HealthcheckResponse) => void; + } + + /** Properties of a MemoryUsage. */ + interface IMemoryUsage { + + /** MemoryUsage rss */ + rss?: (number|Long|null); + + /** MemoryUsage heapTotal */ + heapTotal?: (number|Long|null); + + /** MemoryUsage heapUsed */ + heapUsed?: (number|Long|null); + + /** MemoryUsage external */ + external?: (number|Long|null); + + /** MemoryUsage arrayBuffers */ + arrayBuffers?: (number|Long|null); + } + + /** Represents a MemoryUsage. */ + class MemoryUsage implements IMemoryUsage { + + /** + * Constructs a new MemoryUsage. + * @param [properties] Properties to set + */ + constructor(properties?: org.hyperledger.cactus.cmd_api_server.IMemoryUsage); + + /** MemoryUsage rss. */ + public rss: (number|Long); + + /** MemoryUsage heapTotal. */ + public heapTotal: (number|Long); + + /** MemoryUsage heapUsed. */ + public heapUsed: (number|Long); + + /** MemoryUsage external. */ + public external: (number|Long); + + /** MemoryUsage arrayBuffers. */ + public arrayBuffers: (number|Long); + + /** + * Creates a new MemoryUsage instance using the specified properties. + * @param [properties] Properties to set + * @returns MemoryUsage instance + */ + public static create(properties?: org.hyperledger.cactus.cmd_api_server.IMemoryUsage): org.hyperledger.cactus.cmd_api_server.MemoryUsage; + + /** + * Encodes the specified MemoryUsage message. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.MemoryUsage.verify|verify} messages. + * @param message MemoryUsage message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: org.hyperledger.cactus.cmd_api_server.IMemoryUsage, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified MemoryUsage message, length delimited. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.MemoryUsage.verify|verify} messages. + * @param message MemoryUsage message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: org.hyperledger.cactus.cmd_api_server.IMemoryUsage, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a MemoryUsage message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns MemoryUsage + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): org.hyperledger.cactus.cmd_api_server.MemoryUsage; + + /** + * Decodes a MemoryUsage message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns MemoryUsage + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): org.hyperledger.cactus.cmd_api_server.MemoryUsage; + + /** + * Verifies a MemoryUsage message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a MemoryUsage message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns MemoryUsage + */ + public static fromObject(object: { [k: string]: any }): org.hyperledger.cactus.cmd_api_server.MemoryUsage; + + /** + * Creates a plain object from a MemoryUsage message. Also converts values to other types if specified. + * @param message MemoryUsage + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: org.hyperledger.cactus.cmd_api_server.MemoryUsage, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this MemoryUsage to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a HealthcheckRequest. */ + interface IHealthcheckRequest { + } + + /** Represents a HealthcheckRequest. */ + class HealthcheckRequest implements IHealthcheckRequest { + + /** + * Constructs a new HealthcheckRequest. + * @param [properties] Properties to set + */ + constructor(properties?: org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest); + + /** + * Creates a new HealthcheckRequest instance using the specified properties. + * @param [properties] Properties to set + * @returns HealthcheckRequest instance + */ + public static create(properties?: org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest): org.hyperledger.cactus.cmd_api_server.HealthcheckRequest; + + /** + * Encodes the specified HealthcheckRequest message. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckRequest.verify|verify} messages. + * @param message HealthcheckRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified HealthcheckRequest message, length delimited. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckRequest.verify|verify} messages. + * @param message HealthcheckRequest message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: org.hyperledger.cactus.cmd_api_server.IHealthcheckRequest, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a HealthcheckRequest message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns HealthcheckRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): org.hyperledger.cactus.cmd_api_server.HealthcheckRequest; + + /** + * Decodes a HealthcheckRequest message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns HealthcheckRequest + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): org.hyperledger.cactus.cmd_api_server.HealthcheckRequest; + + /** + * Verifies a HealthcheckRequest message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a HealthcheckRequest message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns HealthcheckRequest + */ + public static fromObject(object: { [k: string]: any }): org.hyperledger.cactus.cmd_api_server.HealthcheckRequest; + + /** + * Creates a plain object from a HealthcheckRequest message. Also converts values to other types if specified. + * @param message HealthcheckRequest + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: org.hyperledger.cactus.cmd_api_server.HealthcheckRequest, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this HealthcheckRequest to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + + /** Properties of a HealthcheckResponse. */ + interface IHealthcheckResponse { + + /** HealthcheckResponse success */ + success?: (boolean|null); + + /** HealthcheckResponse createdAt */ + createdAt?: (string|null); + + /** HealthcheckResponse memoryUsage */ + memoryUsage?: (org.hyperledger.cactus.cmd_api_server.IMemoryUsage|null); + } + + /** Represents a HealthcheckResponse. */ + class HealthcheckResponse implements IHealthcheckResponse { + + /** + * Constructs a new HealthcheckResponse. + * @param [properties] Properties to set + */ + constructor(properties?: org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse); + + /** HealthcheckResponse success. */ + public success: boolean; + + /** HealthcheckResponse createdAt. */ + public createdAt: string; + + /** HealthcheckResponse memoryUsage. */ + public memoryUsage?: (org.hyperledger.cactus.cmd_api_server.IMemoryUsage|null); + + /** + * Creates a new HealthcheckResponse instance using the specified properties. + * @param [properties] Properties to set + * @returns HealthcheckResponse instance + */ + public static create(properties?: org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse): org.hyperledger.cactus.cmd_api_server.HealthcheckResponse; + + /** + * Encodes the specified HealthcheckResponse message. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckResponse.verify|verify} messages. + * @param message HealthcheckResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encode(message: org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Encodes the specified HealthcheckResponse message, length delimited. Does not implicitly {@link org.hyperledger.cactus.cmd_api_server.HealthcheckResponse.verify|verify} messages. + * @param message HealthcheckResponse message or plain object to encode + * @param [writer] Writer to encode to + * @returns Writer + */ + public static encodeDelimited(message: org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse, writer?: $protobuf.Writer): $protobuf.Writer; + + /** + * Decodes a HealthcheckResponse message from the specified reader or buffer. + * @param reader Reader or buffer to decode from + * @param [length] Message length if known beforehand + * @returns HealthcheckResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decode(reader: ($protobuf.Reader|Uint8Array), length?: number): org.hyperledger.cactus.cmd_api_server.HealthcheckResponse; + + /** + * Decodes a HealthcheckResponse message from the specified reader or buffer, length delimited. + * @param reader Reader or buffer to decode from + * @returns HealthcheckResponse + * @throws {Error} If the payload is not a reader or valid buffer + * @throws {$protobuf.util.ProtocolError} If required fields are missing + */ + public static decodeDelimited(reader: ($protobuf.Reader|Uint8Array)): org.hyperledger.cactus.cmd_api_server.HealthcheckResponse; + + /** + * Verifies a HealthcheckResponse message. + * @param message Plain object to verify + * @returns `null` if valid, otherwise the reason why it is not + */ + public static verify(message: { [k: string]: any }): (string|null); + + /** + * Creates a HealthcheckResponse message from a plain object. Also converts values to their respective internal types. + * @param object Plain object + * @returns HealthcheckResponse + */ + public static fromObject(object: { [k: string]: any }): org.hyperledger.cactus.cmd_api_server.HealthcheckResponse; + + /** + * Creates a plain object from a HealthcheckResponse message. Also converts values to other types if specified. + * @param message HealthcheckResponse + * @param [options] Conversion options + * @returns Plain object + */ + public static toObject(message: org.hyperledger.cactus.cmd_api_server.HealthcheckResponse, options?: $protobuf.IConversionOptions): { [k: string]: any }; + + /** + * Converts this HealthcheckResponse to JSON. + * @returns JSON object + */ + public toJSON(): { [k: string]: any }; + } + } + } + } +} diff --git a/packages/cactus-cmd-api-server/src/main/typescript/public-api.ts b/packages/cactus-cmd-api-server/src/main/typescript/public-api.ts index f2fdad000b..5403bc5d78 100755 --- a/packages/cactus-cmd-api-server/src/main/typescript/public-api.ts +++ b/packages/cactus-cmd-api-server/src/main/typescript/public-api.ts @@ -32,3 +32,5 @@ export { } from "./authzn/authorizer-factory"; export { IAuthorizationConfig } from "./authzn/i-authorization-config"; export { AuthorizationProtocol } from "./config/authorization-protocol"; + +export * from "./generated/proto/pbts"; diff --git a/packages/cactus-cmd-api-server/src/main/typescript/web-services/grpc/watch-healthcheck-v1-endpoint.ts b/packages/cactus-cmd-api-server/src/main/typescript/web-services/grpc/watch-healthcheck-v1-endpoint.ts new file mode 100644 index 0000000000..14f762c813 --- /dev/null +++ b/packages/cactus-cmd-api-server/src/main/typescript/web-services/grpc/watch-healthcheck-v1-endpoint.ts @@ -0,0 +1,75 @@ +import { Socket as SocketIoSocket } from "socket.io"; + +import { Logger, Checks } from "@hyperledger/cactus-common"; +import { LogLevelDesc, LoggerProvider } from "@hyperledger/cactus-common"; + +import { org } from "../../generated/proto/pbts"; +import { WatchHealthcheckV1 } from "../../generated/openapi/typescript-axios/api"; + +const { HealthcheckResponse } = org.hyperledger.cactus.cmd_api_server; + +export interface IWatchHealthcheckV1EndpointOptions { + logLevel?: LogLevelDesc; + socket: SocketIoSocket; + process: NodeJS.Process; +} + +export class WatchHealthcheckV1Endpoint { + public static readonly CLASS_NAME = "WatchHealthcheckV1Endpoint"; + + private readonly log: Logger; + private readonly process: NodeJS.Process; + + public get className(): string { + return WatchHealthcheckV1Endpoint.CLASS_NAME; + } + + constructor(public readonly options: IWatchHealthcheckV1EndpointOptions) { + const fnTag = `${this.className}#constructor()`; + Checks.truthy(options, `${fnTag} arg options`); + Checks.truthy(options.process, `${fnTag} arg options.process`); + + this.process = options.process; + + const level = this.options.logLevel || "INFO"; + const label = this.className; + this.log = LoggerProvider.getOrCreate({ level, label }); + } + + public async subscribe(): Promise { + const { log } = this; + log.debug(`${WatchHealthcheckV1.Subscribe} => FIXME - connection ID here`); + + const timerId = setInterval(() => { + try { + const next: org.hyperledger.cactus.cmd_api_server.IHealthcheckResponse = HealthcheckResponse.create( + { + createdAt: new Date().toJSON(), + memoryUsage: this.process.memoryUsage(), + success: true, + }, + ); + + const validationMessage = HealthcheckResponse.verify(next); + if (validationMessage) { + // socket.emit(WatchHealthcheckV1.Error, validationMessage); + } else { + // socket.emit(WatchHealthcheckV1.Next, next); + } + } catch (ex) { + log.error(`Failed to construct health check response:`, ex); + // socket.emit(WatchHealthcheckV1.Error, ex); + clearInterval(timerId); + } + }, 1000); + + // socket.on("disconnect", async (reason: string) => { + // log.debug("WebSocket:disconnect reason=%o", reason); + // clearInterval(timerId); + // }); + + // socket.on(WatchHealthcheckV1.Unsubscribe, () => { + // clearInterval(timerId); + // }); + } +} diff --git a/yarn.lock b/yarn.lock index 328e064a9b..c20a552d37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2703,6 +2703,21 @@ npmlog "^4.1.2" write-file-atomic "^3.0.3" +"@mapbox/node-pre-gyp@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz#2a0b32fcb416fb3f2250fd24cb2a81421a4f5950" + integrity sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA== + dependencies: + detect-libc "^1.0.3" + https-proxy-agent "^5.0.0" + make-dir "^3.1.0" + node-fetch "^2.6.1" + nopt "^5.0.0" + npmlog "^4.1.2" + rimraf "^3.0.2" + semver "^7.3.4" + tar "^6.1.0" + "@multiformats/base-x@^4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@multiformats/base-x/-/base-x-4.0.1.tgz" @@ -10151,6 +10166,11 @@ google-p12-pem@^3.0.3: dependencies: node-forge "^0.10.0" +google-protobuf@^3.15.5: + version "3.17.3" + resolved "https://registry.yarnpkg.com/google-protobuf/-/google-protobuf-3.17.3.tgz#f87595073545a77946c8f0b67c302c5f7646d700" + integrity sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg== + got@9.6.0, got@^9.6.0: version "9.6.0" resolved "https://registry.npmjs.org/got/-/got-9.6.0.tgz" @@ -10237,6 +10257,13 @@ growl@1.10.5: resolved "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz" integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== +grpc-tools@1.11.2: + version "1.11.2" + resolved "https://registry.yarnpkg.com/grpc-tools/-/grpc-tools-1.11.2.tgz#22d802d40012510ccc6591d11f9c94109ac07aab" + integrity sha512-4+EgpnnkJraamY++oyBCw5Hp9huRYfgakjNVKbiE3PgO9Tv5ydVlRo7ZyGJ0C0SEiA7HhbVc1sNNtIyK7FiEtg== + dependencies: + "@mapbox/node-pre-gyp" "^1.0.5" + gtoken@^5.0.4: version "5.3.0" resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-5.3.0.tgz#6536eb2880d9829f0b9d78f756795d4d9064b217" @@ -16584,9 +16611,9 @@ proto-list@~1.2.1: resolved "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz" integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= -protobufjs@^6.10.0, protobufjs@^6.10.2, protobufjs@^6.11.2: +protobufjs@6.11.2, protobufjs@^6.10.0, protobufjs@^6.10.2, protobufjs@^6.11.2: version "6.11.2" - resolved "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.2.tgz" + resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.11.2.tgz#de39fabd4ed32beaa08e9bb1e30d08544c1edf8b" integrity sha512-4BQJoPooKJl2G9j3XftkIXjoC9C0Av2NOrWmbLWT1vH32GcSUHjM0Arra6UfTsVyfMAuFzaLucXn1sadxJydAw== dependencies: "@protobufjs/aspromise" "^1.1.2" @@ -19624,6 +19651,13 @@ ts-node@8.3.0: source-map-support "^0.5.6" yn "^3.0.0" +ts-protoc-gen@0.15.0: + version "0.15.0" + resolved "https://registry.yarnpkg.com/ts-protoc-gen/-/ts-protoc-gen-0.15.0.tgz#2fec5930b46def7dcc9fa73c060d770b7b076b7b" + integrity sha512-TycnzEyrdVDlATJ3bWFTtra3SCiEP0W0vySXReAuEygXCUr1j2uaVyL0DhzjwuUdQoW5oXPwk6oZWeA0955V+g== + dependencies: + google-protobuf "^3.15.5" + tsconfig-paths@^3.9.0: version "3.10.1" resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz"