@blokjs/trigger-grpc 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/.env.example +8 -0
  2. package/CHANGELOG.md +143 -0
  3. package/README.md +25 -0
  4. package/__tests__/unit/GRpcTrigger.test.ts +313 -0
  5. package/__tests__/unit/GrpcClient.test.ts +138 -0
  6. package/__tests__/unit/GrpcServer.test.ts +127 -0
  7. package/__tests__/unit/MessageDecode.test.ts +314 -0
  8. package/__tests__/unit/NanoSDK.test.ts +162 -0
  9. package/__tests__/unit/Nodes.test.ts +16 -0
  10. package/buf.gen.yaml +11 -0
  11. package/buf.yaml +9 -0
  12. package/dist/GRpcTrigger.d.ts +18 -0
  13. package/dist/GRpcTrigger.js +219 -0
  14. package/dist/GRpcTrigger.js.map +1 -0
  15. package/dist/GrpcClient.d.ts +28 -0
  16. package/dist/GrpcClient.js +72 -0
  17. package/dist/GrpcClient.js.map +1 -0
  18. package/dist/GrpcServer.d.ts +14 -0
  19. package/dist/GrpcServer.js +54 -0
  20. package/dist/GrpcServer.js.map +1 -0
  21. package/dist/MessageDecode.d.ts +12 -0
  22. package/dist/MessageDecode.js +133 -0
  23. package/dist/MessageDecode.js.map +1 -0
  24. package/dist/NanoSDK.d.ts +13 -0
  25. package/dist/NanoSDK.js +169 -0
  26. package/dist/NanoSDK.js.map +1 -0
  27. package/dist/Nodes.d.ts +5 -0
  28. package/dist/Nodes.js +13 -0
  29. package/dist/Nodes.js.map +1 -0
  30. package/dist/Workflows.d.ts +3 -0
  31. package/dist/Workflows.js +5 -0
  32. package/dist/Workflows.js.map +1 -0
  33. package/dist/gen/workflow_pb.d.ts +113 -0
  34. package/dist/gen/workflow_pb.js +76 -0
  35. package/dist/gen/workflow_pb.js.map +1 -0
  36. package/dist/index.d.ts +10 -0
  37. package/dist/index.js +17 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/opentelemetry_metrics.d.ts +1 -0
  40. package/dist/opentelemetry_metrics.js +21 -0
  41. package/dist/opentelemetry_metrics.js.map +1 -0
  42. package/dist/proto/workflow.proto +33 -0
  43. package/dist/server.d.ts +1 -0
  44. package/dist/server.js +12 -0
  45. package/dist/server.js.map +1 -0
  46. package/dist/types/Message.d.ts +0 -0
  47. package/dist/types/Message.js +2 -0
  48. package/dist/types/Message.js.map +1 -0
  49. package/dist/types/RuntimeWorkflow.d.ts +5 -0
  50. package/dist/types/RuntimeWorkflow.js +3 -0
  51. package/dist/types/RuntimeWorkflow.js.map +1 -0
  52. package/dist/types/Workflows.d.ts +5 -0
  53. package/dist/types/Workflows.js +3 -0
  54. package/dist/types/Workflows.js.map +1 -0
  55. package/localhost+2-key.pem +28 -0
  56. package/localhost+2.pem +27 -0
  57. package/package.json +60 -0
  58. package/proto/workflow.proto +33 -0
  59. package/src/GRpcTrigger.ts +252 -0
  60. package/src/GrpcClient.ts +87 -0
  61. package/src/GrpcServer.ts +63 -0
  62. package/src/MessageDecode.ts +142 -0
  63. package/src/NanoSDK.ts +146 -0
  64. package/src/Nodes.ts +12 -0
  65. package/src/Workflows.ts +5 -0
  66. package/src/gen/workflow_pb.ts +142 -0
  67. package/src/index.ts +22 -0
  68. package/src/opentelemetry_metrics.ts +26 -0
  69. package/src/server.ts +8 -0
  70. package/src/types/Message.ts +0 -0
  71. package/src/types/RuntimeWorkflow.ts +7 -0
  72. package/src/types/Workflows.ts +7 -0
  73. package/tsconfig.json +34 -0
  74. package/vitest.config.ts +29 -0
  75. package/workflows/countries.json +31 -0
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const runner_1 = require("@blok/runner");
7
+ const shared_1 = require("@blok/shared");
8
+ const api_1 = require("@opentelemetry/api");
9
+ const fastify_1 = __importDefault(require("fastify"));
10
+ const uuid_1 = require("uuid");
11
+ const MessageDecode_1 = __importDefault(require("./MessageDecode"));
12
+ const Nodes_1 = __importDefault(require("./Nodes"));
13
+ const Workflows_1 = __importDefault(require("./Workflows"));
14
+ const helper_1 = require("@blok/helper");
15
+ const workflow_pb_1 = require("./gen/workflow_pb");
16
+ var NodeTypes;
17
+ (function (NodeTypes) {
18
+ NodeTypes["MODULE"] = "module";
19
+ NodeTypes["LOCAL"] = "local";
20
+ NodeTypes["PYTHON3"] = "runtime.python3";
21
+ })(NodeTypes || (NodeTypes = {}));
22
+ class GRpcTrigger extends runner_1.TriggerBase {
23
+ server = (0, fastify_1.default)({
24
+ http2: true,
25
+ // https: {
26
+ // key: readFileSync("localhost+2-key.pem", "utf8"),
27
+ // cert: readFileSync("localhost+2.pem", "utf8"),
28
+ // }
29
+ });
30
+ nodeMap = {};
31
+ tracer = api_1.trace.getTracer(process.env.PROJECT_NAME || "trigger-grpc-workflow", process.env.PROJECT_VERSION || "0.0.1");
32
+ logger = new runner_1.DefaultLogger();
33
+ constructor() {
34
+ super();
35
+ this.loadNodes();
36
+ this.loadWorkflows();
37
+ }
38
+ getApp() {
39
+ return this.server;
40
+ }
41
+ async listen() {
42
+ return 0;
43
+ }
44
+ loadNodes() {
45
+ this.nodeMap.nodes = new runner_1.NodeMap();
46
+ const nodeKeys = Object.keys(Nodes_1.default);
47
+ for (const key of nodeKeys) {
48
+ this.nodeMap.nodes.addNode(key, Nodes_1.default[key]);
49
+ }
50
+ }
51
+ loadWorkflows() {
52
+ this.nodeMap.workflows = Workflows_1.default;
53
+ }
54
+ processRequest(router, trigger) {
55
+ router.service(workflow_pb_1.WorkflowService, {
56
+ executeWorkflow: (request) => trigger.executeWorkflow(request),
57
+ });
58
+ }
59
+ async executeWorkflow(request) {
60
+ const start = performance.now();
61
+ const coder = new MessageDecode_1.default();
62
+ let name = request.Name;
63
+ const messageContext = coder.requestDecode(request);
64
+ const runtimeWorkflow = messageContext;
65
+ const id = messageContext.request.query?.requestId || (0, uuid_1.v4)();
66
+ let remoteNodeExecution = false;
67
+ const defaultMeter = api_1.metrics.getMeter("default");
68
+ const workflow_runner_errors = defaultMeter.createCounter("workflow_errors", {
69
+ description: "Workflow runner errors",
70
+ });
71
+ return await this.tracer.startActiveSpan(`${name}`, async (span) => {
72
+ try {
73
+ if (runtimeWorkflow !== undefined) {
74
+ const workflowModel = runtimeWorkflow.workflow;
75
+ const node_type = workflowModel.steps[0].type;
76
+ let set_node_type = NodeTypes.MODULE;
77
+ switch (node_type) {
78
+ case "runtime.python3":
79
+ set_node_type = NodeTypes.PYTHON3;
80
+ break;
81
+ case "local":
82
+ set_node_type = NodeTypes.LOCAL;
83
+ break;
84
+ default:
85
+ set_node_type = NodeTypes.MODULE;
86
+ break;
87
+ }
88
+ const trigger = Object.keys(workflowModel.trigger)[0];
89
+ const trigger_config = workflowModel.trigger[trigger] || {};
90
+ const step = (0, helper_1.Workflow)({
91
+ name: `Remote Node: ${name}`,
92
+ version: "1.0.0",
93
+ description: "Remote Node",
94
+ })
95
+ .addTrigger(trigger || "grpc", trigger_config)
96
+ .addStep({
97
+ name: "node",
98
+ node: name,
99
+ type: set_node_type,
100
+ inputs: workflowModel.nodes.node.inputs,
101
+ });
102
+ this.nodeMap.workflows[id] = step;
103
+ name = id;
104
+ remoteNodeExecution = true;
105
+ }
106
+ await this.configuration.init(name, this.nodeMap);
107
+ let ctx = this.createContext(undefined, name, id);
108
+ ctx.request = messageContext.request;
109
+ ctx.logger.log(`Workflow: ${name}, Version: ${this.configuration.version}`);
110
+ const response = await this.run(ctx);
111
+ ctx = response.ctx;
112
+ const average = response.metrics;
113
+ if (ctx.response.contentType === undefined || ctx.response.contentType === "")
114
+ ctx.response.contentType = "application/json";
115
+ const end = performance.now();
116
+ ctx.logger.log(`Completed in ${(end - start).toFixed(2)}ms`);
117
+ span.setAttribute("success", true);
118
+ span.setAttribute("Content-Type", ctx.response.contentType);
119
+ span.setAttribute("workflow_request_id", `${ctx.id}`);
120
+ span.setAttribute("workflow_elapsed_time", `${end - start}`);
121
+ span.setAttribute("workflow_version", `${this.configuration.version}`);
122
+ span.setAttribute("workflow_name", `${this.configuration.name}`);
123
+ span.setAttribute("workflow_memory_avg_mb", `${average.memory.total}`);
124
+ span.setAttribute("workflow_memory_min_mb", `${average.memory.min}`);
125
+ span.setAttribute("workflow_memory_max_mb", `${average.memory.max}`);
126
+ span.setAttribute("workflow_cpu_percentage", `${average.cpu.average}`);
127
+ span.setAttribute("workflow_cpu_total", `${average.cpu.total}`);
128
+ span.setAttribute("workflow_cpu_usage", `${average.cpu.usage}`);
129
+ span.setAttribute("workflow_cpu_model", `${average.cpu.model}`);
130
+ span.setStatus({ code: api_1.SpanStatusCode.OK });
131
+ return coder.responseEncode(ctx, request.Encoding, request.Type);
132
+ }
133
+ catch (e) {
134
+ span.setAttribute("success", false);
135
+ span.setAttribute("workflow_request_id", `${id}`);
136
+ span.recordException(e);
137
+ let message = {};
138
+ const base64Key = workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.BASE64];
139
+ const textKey = workflow_pb_1.MessageType[workflow_pb_1.MessageType.TEXT];
140
+ const jsonKey = workflow_pb_1.MessageType[workflow_pb_1.MessageType.JSON];
141
+ if (e instanceof shared_1.GlobalError) {
142
+ const error_context = e;
143
+ if (error_context.context.message === "{}" && error_context.context.json instanceof DOMException) {
144
+ workflow_runner_errors.add(1, {
145
+ env: process.env.NODE_ENV,
146
+ workflow_version: `${this.configuration.version || "unknown"}`,
147
+ workflow_name: `${name || this.configuration.name}`,
148
+ });
149
+ span.setStatus({
150
+ code: api_1.SpanStatusCode.ERROR,
151
+ message: error_context.context.json.toString(),
152
+ });
153
+ this.logger.error(`${error_context.context.json.toString()}`);
154
+ message = {
155
+ Message: coder.responseErrorEncode(error_context.context.json.toString(), base64Key, textKey),
156
+ Encoding: base64Key,
157
+ Type: textKey,
158
+ };
159
+ }
160
+ else {
161
+ if (error_context.context.code === undefined)
162
+ error_context.setCode(500);
163
+ if (error_context.hasJson()) {
164
+ workflow_runner_errors.add(1, {
165
+ env: process.env.NODE_ENV,
166
+ workflow_version: `${this.configuration.version || "unknown"}`,
167
+ workflow_name: `${name || this.configuration.name}`,
168
+ });
169
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: JSON.stringify(error_context.context.json) });
170
+ this.logger.error(`${JSON.stringify(error_context.context.json)}`);
171
+ message = {
172
+ Message: coder.responseErrorEncode(JSON.stringify(error_context.context.json), base64Key, textKey),
173
+ Encoding: base64Key,
174
+ Type: jsonKey,
175
+ };
176
+ }
177
+ else {
178
+ workflow_runner_errors.add(1, {
179
+ env: process.env.NODE_ENV,
180
+ workflow_version: `${this.configuration.version || "unknown"}`,
181
+ workflow_name: `${name || this.configuration.name}`,
182
+ });
183
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: error_context.message });
184
+ this.logger.error(`${error_context.message}`, error_context.stack?.replace(/\n/g, " "));
185
+ message = {
186
+ Message: coder.responseErrorEncode(error_context.message, base64Key, textKey),
187
+ Encoding: workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.BASE64],
188
+ Type: textKey,
189
+ };
190
+ }
191
+ }
192
+ }
193
+ else {
194
+ workflow_runner_errors.add(1, {
195
+ env: process.env.NODE_ENV,
196
+ workflow_version: `${this.configuration.version || "unknown"}`,
197
+ workflow_name: `${name || this.configuration.name}`,
198
+ });
199
+ span.setStatus({ code: api_1.SpanStatusCode.ERROR, message: e.message });
200
+ this.logger.error(`${e.message}`, `${e.stack?.replace(/\n/g, " ")}`);
201
+ message = {
202
+ Message: coder.responseErrorEncode(e.message, base64Key, textKey),
203
+ Encoding: base64Key,
204
+ Type: textKey,
205
+ };
206
+ }
207
+ return message;
208
+ }
209
+ finally {
210
+ if (remoteNodeExecution) {
211
+ delete this.nodeMap.workflows[id];
212
+ }
213
+ span.end();
214
+ }
215
+ });
216
+ }
217
+ }
218
+ exports.default = GRpcTrigger;
219
+ //# sourceMappingURL=GRpcTrigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GRpcTrigger.js","sourceRoot":"","sources":["../src/GRpcTrigger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import { type Transport } from "@connectrpc/connect";
2
+ import { type WorkflowRequest, type WorkflowResponse } from "./gen/workflow_pb";
3
+ export type RpcOptions = {
4
+ host: string;
5
+ port: number;
6
+ protocol: string;
7
+ httpVersion: HttpVersionEnum;
8
+ transport: TransportEnum;
9
+ };
10
+ export type CallOptions = {
11
+ headers: Record<string, string>;
12
+ };
13
+ export declare enum TransportEnum {
14
+ GRPC = "grpc",
15
+ GRPC_WEB = "grpc-web",
16
+ CONNECT = "connect"
17
+ }
18
+ export declare enum HttpVersionEnum {
19
+ HTTP1 = "1.1",
20
+ HTTP2 = "2"
21
+ }
22
+ export type { WorkflowRequest, WorkflowResponse };
23
+ export default class GrpcClient {
24
+ protected opts: RpcOptions;
25
+ constructor(options: RpcOptions);
26
+ call(message: WorkflowRequest, opts?: CallOptions): Promise<WorkflowResponse>;
27
+ transport(): Transport;
28
+ }
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpVersionEnum = exports.TransportEnum = void 0;
4
+ const connect_1 = require("@connectrpc/connect");
5
+ const connect_node_1 = require("@connectrpc/connect-node");
6
+ const connect_node_2 = require("@connectrpc/connect-node");
7
+ const connect_node_3 = require("@connectrpc/connect-node");
8
+ const workflow_pb_1 = require("./gen/workflow_pb");
9
+ var TransportEnum;
10
+ (function (TransportEnum) {
11
+ TransportEnum["GRPC"] = "grpc";
12
+ TransportEnum["GRPC_WEB"] = "grpc-web";
13
+ TransportEnum["CONNECT"] = "connect";
14
+ })(TransportEnum || (exports.TransportEnum = TransportEnum = {}));
15
+ var HttpVersionEnum;
16
+ (function (HttpVersionEnum) {
17
+ HttpVersionEnum["HTTP1"] = "1.1";
18
+ HttpVersionEnum["HTTP2"] = "2";
19
+ })(HttpVersionEnum || (exports.HttpVersionEnum = HttpVersionEnum = {}));
20
+ class GrpcClient {
21
+ opts;
22
+ constructor(options) {
23
+ this.opts = options;
24
+ }
25
+ async call(message, opts) {
26
+ const transport = this.transport();
27
+ const client = (0, connect_1.createClient)(workflow_pb_1.WorkflowService, transport);
28
+ return await client.executeWorkflow(message, opts);
29
+ }
30
+ transport() {
31
+ switch (this.opts.transport) {
32
+ case TransportEnum.GRPC:
33
+ return (0, connect_node_1.createGrpcTransport)({
34
+ baseUrl: `${this.opts.protocol}://${this.opts.host}:${this.opts.port}/`,
35
+ interceptors: [],
36
+ });
37
+ case TransportEnum.GRPC_WEB:
38
+ return (0, connect_node_3.createGrpcWebTransport)({
39
+ baseUrl: `${this.opts.protocol}://${this.opts.host}:${this.opts.port}/`,
40
+ httpVersion: this.opts.httpVersion,
41
+ interceptors: [],
42
+ });
43
+ case TransportEnum.CONNECT:
44
+ return (0, connect_node_2.createConnectTransport)({
45
+ baseUrl: `${this.opts.protocol}://${this.opts.host}:${this.opts.port}/`,
46
+ httpVersion: this.opts.httpVersion,
47
+ interceptors: [],
48
+ });
49
+ default:
50
+ throw new Error("Invalid transport type");
51
+ }
52
+ }
53
+ }
54
+ exports.default = GrpcClient;
55
+ // let client = new GrpcClient({
56
+ // host: "localhost",
57
+ // port: 8433,
58
+ // protocol: "http",
59
+ // httpVersion: HttpVersionEnum.HTTP2,
60
+ // transport: TransportEnum.GRPC,
61
+ // });
62
+ // client.call({
63
+ // "Name": "countries",
64
+ // "Message": "ewogICAgInJlcXVlc3QiOiB7CiAgICAgICAgImJvZHkiOiB7CiAgICAgICAgICAgICJjb3VudHJ5X25hbWUiOiAiQ2FuYWRhIgogICAgICAgIH0KICAgIH0KfQ==",
65
+ // "Encoding": "BASE64",
66
+ // "Type": "JSON"
67
+ // } as WorkflowRequest).then((response) => {
68
+ // console.log(response);
69
+ // }).catch((error) => {
70
+ // console.error(error);
71
+ // });
72
+ //# sourceMappingURL=GrpcClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrpcClient.js","sourceRoot":"","sources":["../src/GrpcClient.ts"],"names":[],"mappings":";;;AAAA,iDAAmE;AACnE,2DAA+D;AAC/D,2DAAkE;AAClE,2DAAkE;AAClE,mDAAiG;AAcjG,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,8BAAa,CAAA;IACb,sCAAqB,CAAA;IACrB,oCAAmB,CAAA;AACpB,CAAC,EAJW,aAAa,6BAAb,aAAa,QAIxB;AAED,IAAY,eAGX;AAHD,WAAY,eAAe;IAC1B,gCAAa,CAAA;IACb,8BAAW,CAAA;AACZ,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AAID,MAAqB,UAAU;IACpB,IAAI,CAAa;IAE3B,YAAY,OAAmB;QAC9B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAwB,EAAE,IAAkB;QACtD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAA,sBAAY,EAAC,6BAAe,EAAE,SAAS,CAAC,CAAC;QACxD,OAAO,MAAM,MAAM,CAAC,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,SAAS;QACR,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YAC7B,KAAK,aAAa,CAAC,IAAI;gBACtB,OAAO,IAAA,kCAAmB,EAAC;oBAC1B,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;oBACvE,YAAY,EAAE,EAAE;iBAChB,CAAC,CAAC;YACJ,KAAK,aAAa,CAAC,QAAQ;gBAC1B,OAAO,IAAA,qCAAsB,EAAC;oBAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;oBACvE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;oBAClC,YAAY,EAAE,EAAE;iBAChB,CAAC,CAAC;YACJ,KAAK,aAAa,CAAC,OAAO;gBACzB,OAAO,IAAA,qCAAsB,EAAC;oBAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG;oBACvE,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;oBAClC,YAAY,EAAE,EAAE;iBAChB,CAAC,CAAC;YACJ;gBACC,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;IACF,CAAC;CACD;AApCD,6BAoCC;AAED,gCAAgC;AAChC,yBAAyB;AACzB,kBAAkB;AAClB,wBAAwB;AACxB,0CAA0C;AAC1C,qCAAqC;AACrC,MAAM;AAEN,gBAAgB;AAChB,2BAA2B;AAC3B,iJAAiJ;AACjJ,4BAA4B;AAC5B,qBAAqB;AACrB,6CAA6C;AAC7C,6BAA6B;AAC7B,wBAAwB;AACxB,4BAA4B;AAC5B,MAAM"}
@@ -0,0 +1,14 @@
1
+ import { DefaultLogger } from "@blok/runner";
2
+ export type GrpcServerOptions = {
3
+ host: string;
4
+ port: number;
5
+ };
6
+ export default class GrpcServer {
7
+ protected opts: GrpcServerOptions;
8
+ protected tracer: import("@opentelemetry/api").Tracer;
9
+ protected app_cold_start: import("@opentelemetry/api").Gauge<import("@opentelemetry/api").Attributes>;
10
+ protected initializer: number;
11
+ protected logger: DefaultLogger;
12
+ constructor(opts: GrpcServerOptions);
13
+ start(): Promise<void>;
14
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const connect_fastify_1 = require("@connectrpc/connect-fastify");
7
+ const runner_1 = require("@blok/runner");
8
+ const api_1 = require("@opentelemetry/api");
9
+ const GRpcTrigger_1 = __importDefault(require("./GRpcTrigger"));
10
+ class GrpcServer {
11
+ opts;
12
+ tracer = api_1.trace.getTracer(process.env.PROJECT_NAME || "trigger-grpc-server", process.env.PROJECT_VERSION || "0.0.1");
13
+ app_cold_start = api_1.metrics.getMeter("default").createGauge("initialization", {
14
+ description: "Application cold start",
15
+ });
16
+ initializer = 0;
17
+ logger = new runner_1.DefaultLogger();
18
+ constructor(opts) {
19
+ this.opts = opts;
20
+ if (this.opts.host === undefined) {
21
+ this.opts.host = "0.0.0.0";
22
+ }
23
+ if (this.opts.port === undefined) {
24
+ this.opts.port = 8443;
25
+ }
26
+ this.initializer = performance.now();
27
+ }
28
+ async start() {
29
+ this.tracer.startActiveSpan("initialization", async (span) => {
30
+ const trigger = new GRpcTrigger_1.default();
31
+ const server = trigger.getApp();
32
+ const host = process.env.GRPC_HOST || this.opts.host;
33
+ let port = process.env.GRPC_PORT || this.opts.port;
34
+ if (typeof port === "string") {
35
+ port = Number.parseInt(port, 10);
36
+ }
37
+ await server.register(connect_fastify_1.fastifyConnectPlugin, {
38
+ routes: (router) => trigger.processRequest(router, trigger),
39
+ });
40
+ await server.listen({ host, port: port });
41
+ this.logger.log(`Server is listening at ${JSON.stringify(server.addresses())}`);
42
+ this.initializer = performance.now() - this.initializer;
43
+ this.logger.log(`Server initialized in ${(this.initializer).toFixed(2)}ms`);
44
+ this.app_cold_start.record(this.initializer, {
45
+ pid: process.pid,
46
+ env: process.env.NODE_ENV,
47
+ app: process.env.APP_NAME,
48
+ });
49
+ span.end();
50
+ });
51
+ }
52
+ }
53
+ exports.default = GrpcServer;
54
+ //# sourceMappingURL=GrpcServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GrpcServer.js","sourceRoot":"","sources":["../src/GrpcServer.ts"],"names":[],"mappings":";;;;;AACA,iEAAmE;AACnE,yCAA6C;AAC7C,4CAA+D;AAC/D,gEAAwC;AAOxC,MAAqB,UAAU;IACpB,IAAI,CAAoB;IACxB,MAAM,GAAG,WAAK,CAAC,SAAS,CACjC,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,qBAAqB,EACjD,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,OAAO,CACtC,CAAC;IACQ,cAAc,GAAG,aAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,gBAAgB,EAAE;QACpF,WAAW,EAAE,wBAAwB;KACrC,CAAC,CAAC;IACO,WAAW,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,IAAI,sBAAa,EAAE,CAAC;IAEvC,YAAY,IAAuB;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QAC5B,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,gBAAgB,EAAE,KAAK,EAAE,IAAU,EAAE,EAAE;YAClE,MAAM,OAAO,GAAG,IAAI,qBAAW,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACrD,IAAI,IAAI,GAAoB,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;YACpE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC9B,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAClC,CAAC;YACD,MAAM,MAAM,CAAC,QAAQ,CAAC,sCAAoB,EAAE;gBAC3C,MAAM,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC;aAC1E,CAAC,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,0BAA0B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAEhF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5E,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE;gBAC5C,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;gBACzB,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACJ,CAAC;CACD;AAnDD,6BAmDC"}
@@ -0,0 +1,12 @@
1
+ import type { JsonLikeObject } from "@blok/runner";
2
+ import type { Context } from "@blok/shared";
3
+ import { MessageType, type WorkflowRequest, type WorkflowResponse } from "./gen/workflow_pb";
4
+ export default class MessageDecode {
5
+ requestDecode(request: WorkflowRequest): Context;
6
+ decodeType(message: string, type: string): Context;
7
+ responseEncode(ctx: Context, encoding: string, type: string): WorkflowResponse;
8
+ responseErrorEncode(e: string | JsonLikeObject, encoding: string, type: string): string;
9
+ responseDecode(response: WorkflowResponse): JsonLikeObject;
10
+ encodeType(message: string | object | Buffer<ArrayBuffer>, type: string): string;
11
+ mapContentType(contentType: string): MessageType;
12
+ }
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const workflow_pb_1 = require("./gen/workflow_pb");
4
+ const { XMLParser, XMLBuilder } = require("fast-xml-parser");
5
+ class MessageDecode {
6
+ requestDecode(request) {
7
+ let message = {};
8
+ switch (request.Encoding) {
9
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.BASE64]: {
10
+ const messageStr = Buffer.from(request.Message, "base64").toString("utf-8");
11
+ message = this.decodeType(messageStr, request.Type);
12
+ break;
13
+ }
14
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.STRING]: {
15
+ message = this.decodeType(request.Message, request.Type);
16
+ break;
17
+ }
18
+ default:
19
+ throw new Error(`Unsupported encoding: ${request.Encoding}`);
20
+ }
21
+ return message;
22
+ }
23
+ decodeType(message, type) {
24
+ switch (type) {
25
+ case workflow_pb_1.MessageType[workflow_pb_1.MessageType.JSON]: {
26
+ return JSON.parse(message);
27
+ }
28
+ case workflow_pb_1.MessageType[workflow_pb_1.MessageType.XML]: {
29
+ return new XMLParser().parse(message);
30
+ }
31
+ default:
32
+ throw new Error(`Unsupported type: ${type}`);
33
+ }
34
+ }
35
+ responseEncode(ctx, encoding, type) {
36
+ let message;
37
+ const responseType = this.mapContentType(ctx.response.contentType);
38
+ switch (encoding) {
39
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.BASE64]: {
40
+ if (responseType === workflow_pb_1.MessageType.JSON) {
41
+ message = this.encodeType(ctx.response.data, type);
42
+ message = Buffer.from(message).toString("base64");
43
+ }
44
+ if (responseType === workflow_pb_1.MessageType.XML) {
45
+ message = this.encodeType(ctx.response.data, type);
46
+ message = Buffer.from(message).toString("base64");
47
+ }
48
+ else {
49
+ message = this.encodeType(ctx.response.data, type);
50
+ message = Buffer.from(message).toString("base64");
51
+ }
52
+ break;
53
+ }
54
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.STRING]: {
55
+ if (responseType === workflow_pb_1.MessageType.JSON) {
56
+ message = this.encodeType(ctx.response.data, type);
57
+ }
58
+ if (responseType === workflow_pb_1.MessageType.XML) {
59
+ message = this.encodeType(ctx.response.data, type);
60
+ }
61
+ else {
62
+ message = this.encodeType(ctx.response.data, type);
63
+ }
64
+ break;
65
+ }
66
+ default:
67
+ throw new Error(`Unsupported encoding: ${encoding}`);
68
+ }
69
+ return {
70
+ Message: message,
71
+ Encoding: encoding,
72
+ Type: workflow_pb_1.MessageType[responseType],
73
+ };
74
+ }
75
+ responseErrorEncode(e, encoding, type) {
76
+ let message;
77
+ switch (encoding) {
78
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.BASE64]:
79
+ message = Buffer.from(this.encodeType(e, type)).toString("base64");
80
+ break;
81
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.STRING]:
82
+ message = this.encodeType(e, type);
83
+ break;
84
+ default:
85
+ throw new Error(`Unsupported encoding: ${encoding}`);
86
+ }
87
+ return message;
88
+ }
89
+ responseDecode(response) {
90
+ let message = {};
91
+ switch (response.Encoding) {
92
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.BASE64]: {
93
+ const messageStr = Buffer.from(response.Message, "base64").toString("utf-8");
94
+ message = this.decodeType(messageStr, response.Type);
95
+ break;
96
+ }
97
+ case workflow_pb_1.MessageEncoding[workflow_pb_1.MessageEncoding.STRING]: {
98
+ message = this.decodeType(response.Message, response.Type);
99
+ break;
100
+ }
101
+ default:
102
+ throw new Error(`Unsupported encoding: ${response.Encoding}`);
103
+ }
104
+ return message;
105
+ }
106
+ encodeType(message, type) {
107
+ switch (type) {
108
+ case workflow_pb_1.MessageType[workflow_pb_1.MessageType.JSON]:
109
+ return JSON.stringify(message);
110
+ case workflow_pb_1.MessageType[workflow_pb_1.MessageType.TEXT]:
111
+ case workflow_pb_1.MessageType[workflow_pb_1.MessageType.HTML]:
112
+ return message.toString();
113
+ case workflow_pb_1.MessageType[workflow_pb_1.MessageType.XML]:
114
+ return new XMLBuilder().build(message);
115
+ default:
116
+ throw new Error(`Unsupported type: ${type}`);
117
+ }
118
+ }
119
+ mapContentType(contentType) {
120
+ switch (contentType) {
121
+ case "application/json":
122
+ return workflow_pb_1.MessageType.JSON;
123
+ case "text/html":
124
+ return workflow_pb_1.MessageType.HTML;
125
+ case "text/xml":
126
+ return workflow_pb_1.MessageType.XML;
127
+ default:
128
+ return workflow_pb_1.MessageType.TEXT;
129
+ }
130
+ }
131
+ }
132
+ exports.default = MessageDecode;
133
+ //# sourceMappingURL=MessageDecode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MessageDecode.js","sourceRoot":"","sources":["../src/MessageDecode.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { JsonLikeObject } from "@blok/runner";
2
+ import { type RpcOptions, type WorkflowRequest } from "./GrpcClient";
3
+ export default class NanoSDK {
4
+ createClient(host?: string, token?: string): NanoSDKClient;
5
+ }
6
+ export declare class NanoSDKClient {
7
+ private client;
8
+ private token;
9
+ constructor(options: RpcOptions, token: string);
10
+ python3(nodeName: string, inputs: JsonLikeObject): Promise<JsonLikeObject>;
11
+ nodejs(nodeName: string, inputs: JsonLikeObject, type?: string): Promise<JsonLikeObject>;
12
+ protected call(message: WorkflowRequest): Promise<JsonLikeObject>;
13
+ }