@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,169 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.NanoSDKClient = void 0;
40
+ const node_fs_1 = __importDefault(require("node:fs"));
41
+ const GrpcClient_1 = __importStar(require("./GrpcClient"));
42
+ const MessageDecode_1 = __importDefault(require("./MessageDecode"));
43
+ class NanoSDK {
44
+ createClient(host, token) {
45
+ let _host = host || "localhost:8433";
46
+ let _token = token || "";
47
+ if (!host) {
48
+ const app_path = process.cwd();
49
+ // Validate if the file nanosdk.json exists
50
+ if (node_fs_1.default.existsSync(`${app_path}/nanosdk.json`)) {
51
+ const data = node_fs_1.default.readFileSync(`${app_path}/nanosdk.json`, "utf8");
52
+ const json = JSON.parse(data);
53
+ _host = json.host;
54
+ _token = json.token;
55
+ }
56
+ }
57
+ // Validate if the host does not have the format domain:port without http:// or https://
58
+ if (!_host.includes("http://") && !_host.includes("https://")) {
59
+ if (!_host.includes(":")) {
60
+ throw new Error("Invalid host format. The host must have the format domain:port");
61
+ }
62
+ }
63
+ // get host and port
64
+ const host_port = _host.split(":");
65
+ return new NanoSDKClient({
66
+ host: host_port[0] || "localhost",
67
+ port: Number.parseInt(host_port[1]),
68
+ protocol: "http",
69
+ httpVersion: GrpcClient_1.HttpVersionEnum.HTTP2,
70
+ transport: GrpcClient_1.TransportEnum.GRPC,
71
+ }, _token);
72
+ }
73
+ }
74
+ exports.default = NanoSDK;
75
+ class NanoSDKClient {
76
+ client;
77
+ token;
78
+ constructor(options, token) {
79
+ this.client = new GrpcClient_1.default(options);
80
+ this.token = token;
81
+ }
82
+ async python3(nodeName, inputs) {
83
+ const workflow = {
84
+ name: "Remote Node",
85
+ description: "Execution of remote node",
86
+ version: "1.0.0",
87
+ trigger: {
88
+ grpc: {},
89
+ },
90
+ steps: [
91
+ {
92
+ name: "node",
93
+ node: nodeName,
94
+ type: "runtime.python3",
95
+ },
96
+ ],
97
+ nodes: {
98
+ node: {
99
+ inputs: inputs,
100
+ },
101
+ },
102
+ };
103
+ const base64Workflow = Buffer.from(JSON.stringify({ request: {}, workflow: workflow })).toString("base64");
104
+ const request = {
105
+ $typeName: "blok.workflow.v1.WorkflowRequest",
106
+ Name: nodeName,
107
+ Message: base64Workflow,
108
+ Encoding: "BASE64",
109
+ Type: "JSON",
110
+ };
111
+ return await this.call(request);
112
+ }
113
+ async nodejs(nodeName, inputs, type = "module") {
114
+ const workflow = {
115
+ name: "Remote Node",
116
+ description: "Execution of remote node",
117
+ version: "1.0.0",
118
+ trigger: {
119
+ http: {
120
+ method: "GET",
121
+ path: "/",
122
+ accept: "application/json",
123
+ },
124
+ },
125
+ steps: [
126
+ {
127
+ name: "node",
128
+ node: nodeName,
129
+ type: type,
130
+ },
131
+ ],
132
+ nodes: {
133
+ node: {
134
+ inputs: inputs,
135
+ },
136
+ },
137
+ };
138
+ const base64Workflow = Buffer.from(JSON.stringify({ request: {}, workflow: workflow })).toString("base64");
139
+ const request = {
140
+ $typeName: "blok.workflow.v1.WorkflowRequest",
141
+ Name: nodeName,
142
+ Message: base64Workflow,
143
+ Encoding: "BASE64",
144
+ Type: "JSON",
145
+ };
146
+ return await this.call(request);
147
+ }
148
+ async call(message) {
149
+ const response = await this.client.call(message, { headers: { Authorization: `Bearer ${this.token}` } });
150
+ const decode = new MessageDecode_1.default();
151
+ const responseDecoded = decode.responseDecode(response);
152
+ return responseDecoded;
153
+ }
154
+ }
155
+ exports.NanoSDKClient = NanoSDKClient;
156
+ // const client = new NanoSDK().createClient("127.0.0.1:8433", "");
157
+ // client.python3("api_call", {
158
+ // "url": "https://countriesnow.space/api/v0.1/countries/capital",
159
+ // "method": "GET",
160
+ // "headers": {
161
+ // "Content-Type": "application/json"
162
+ // },
163
+ // "responseType": "application/json"
164
+ // }).then((response) => {
165
+ // console.log(response);
166
+ // }).catch((error) => {
167
+ // console.error("ERROR", error);
168
+ // });
169
+ //# sourceMappingURL=NanoSDK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NanoSDK.js","sourceRoot":"","sources":["../src/NanoSDK.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { NodeBase } from "@blok/shared";
2
+ declare const nodes: {
3
+ [key: string]: NodeBase;
4
+ };
5
+ export default nodes;
package/dist/Nodes.js ADDED
@@ -0,0 +1,13 @@
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 api_call_1 = __importDefault(require("@blok/api-call"));
7
+ const if_else_1 = __importDefault(require("@blok/if-else"));
8
+ const nodes = {
9
+ "@blok/api-call": api_call_1.default,
10
+ "@blok/if-else": if_else_1.default,
11
+ };
12
+ exports.default = nodes;
13
+ //# sourceMappingURL=Nodes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Nodes.js","sourceRoot":"","sources":["../src/Nodes.ts"],"names":[],"mappings":";;;;;AAAA,8DAAqC;AACrC,4DAAmC;AAGnC,MAAM,KAAK,GAEP;IACH,gBAAgB,EAAE,kBAAO;IACzB,eAAe,EAAE,iBAAM;CACvB,CAAC;AAEF,kBAAe,KAAK,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type Workflows from "./types/Workflows";
2
+ declare const workflows: Workflows;
3
+ export default workflows;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const workflows = {};
4
+ exports.default = workflows;
5
+ //# sourceMappingURL=Workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Workflows.js","sourceRoot":"","sources":["../src/Workflows.ts"],"names":[],"mappings":";;AAEA,MAAM,SAAS,GAAc,EAAE,CAAC;AAEhC,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,113 @@
1
+ import type { Message } from "@bufbuild/protobuf";
2
+ import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
3
+ /**
4
+ * Describes the file workflow.proto.
5
+ */
6
+ export declare const file_workflow: GenFile;
7
+ /**
8
+ * @generated from message blok.workflow.v1.WorkflowRequest
9
+ */
10
+ export type WorkflowRequest = Message<"blok.workflow.v1.WorkflowRequest"> & {
11
+ /**
12
+ * @generated from field: string Name = 1;
13
+ */
14
+ Name: string;
15
+ /**
16
+ * @generated from field: string Message = 2;
17
+ */
18
+ Message: string;
19
+ /**
20
+ * @generated from field: string Encoding = 3;
21
+ */
22
+ Encoding: string;
23
+ /**
24
+ * @generated from field: string Type = 4;
25
+ */
26
+ Type: string;
27
+ };
28
+ /**
29
+ * Describes the message blok.workflow.v1.WorkflowRequest.
30
+ * Use `create(WorkflowRequestSchema)` to create a new message.
31
+ */
32
+ export declare const WorkflowRequestSchema: GenMessage<WorkflowRequest>;
33
+ /**
34
+ * @generated from message blok.workflow.v1.WorkflowResponse
35
+ */
36
+ export type WorkflowResponse = Message<"blok.workflow.v1.WorkflowResponse"> & {
37
+ /**
38
+ * @generated from field: string Message = 1;
39
+ */
40
+ Message: string;
41
+ /**
42
+ * @generated from field: string Encoding = 2;
43
+ */
44
+ Encoding: string;
45
+ /**
46
+ * @generated from field: string Type = 3;
47
+ */
48
+ Type: string;
49
+ };
50
+ /**
51
+ * Describes the message blok.workflow.v1.WorkflowResponse.
52
+ * Use `create(WorkflowResponseSchema)` to create a new message.
53
+ */
54
+ export declare const WorkflowResponseSchema: GenMessage<WorkflowResponse>;
55
+ /**
56
+ * @generated from enum blok.workflow.v1.MessageEncoding
57
+ */
58
+ export declare enum MessageEncoding {
59
+ /**
60
+ * @generated from enum value: BASE64 = 0;
61
+ */
62
+ BASE64 = 0,
63
+ /**
64
+ * @generated from enum value: STRING = 1;
65
+ */
66
+ STRING = 1
67
+ }
68
+ /**
69
+ * Describes the enum blok.workflow.v1.MessageEncoding.
70
+ */
71
+ export declare const MessageEncodingSchema: GenEnum<MessageEncoding>;
72
+ /**
73
+ * @generated from enum blok.workflow.v1.MessageType
74
+ */
75
+ export declare enum MessageType {
76
+ /**
77
+ * @generated from enum value: TEXT = 0;
78
+ */
79
+ TEXT = 0,
80
+ /**
81
+ * @generated from enum value: JSON = 1;
82
+ */
83
+ JSON = 1,
84
+ /**
85
+ * @generated from enum value: XML = 2;
86
+ */
87
+ XML = 2,
88
+ /**
89
+ * @generated from enum value: HTML = 3;
90
+ */
91
+ HTML = 3,
92
+ /**
93
+ * @generated from enum value: BINARY = 4;
94
+ */
95
+ BINARY = 4
96
+ }
97
+ /**
98
+ * Describes the enum blok.workflow.v1.MessageType.
99
+ */
100
+ export declare const MessageTypeSchema: GenEnum<MessageType>;
101
+ /**
102
+ * @generated from service blok.workflow.v1.WorkflowService
103
+ */
104
+ export declare const WorkflowService: GenService<{
105
+ /**
106
+ * @generated from rpc blok.workflow.v1.WorkflowService.ExecuteWorkflow
107
+ */
108
+ executeWorkflow: {
109
+ methodKind: "unary";
110
+ input: typeof WorkflowRequestSchema;
111
+ output: typeof WorkflowResponseSchema;
112
+ };
113
+ }>;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ // @generated by protoc-gen-es v2.2.3 with parameter "target=ts"
3
+ // @generated from file workflow.proto (package blok.workflow.v1, syntax proto3)
4
+ /* eslint-disable */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.WorkflowService = exports.MessageTypeSchema = exports.MessageType = exports.MessageEncodingSchema = exports.MessageEncoding = exports.WorkflowResponseSchema = exports.WorkflowRequestSchema = exports.file_workflow = void 0;
7
+ const codegenv1_1 = require("@bufbuild/protobuf/codegenv1");
8
+ /**
9
+ * Describes the file workflow.proto.
10
+ */
11
+ exports.file_workflow =
12
+ /*@__PURE__*/
13
+ (0, codegenv1_1.fileDesc)("Cg53b3JrZmxvdy5wcm90bxIXbmFub3NlcnZpY2Uud29ya2Zsb3cudjEiUAoPV29ya2Zsb3dSZXF1ZXN0EgwKBE5hbWUYASABKAkSDwoHTWVzc2FnZRgCIAEoCRIQCghFbmNvZGluZxgDIAEoCRIMCgRUeXBlGAQgASgJIkMKEFdvcmtmbG93UmVzcG9uc2USDwoHTWVzc2FnZRgBIAEoCRIQCghFbmNvZGluZxgCIAEoCRIMCgRUeXBlGAMgASgJKikKD01lc3NhZ2VFbmNvZGluZxIKCgZCQVNFNjQQABIKCgZTVFJJTkcQASpACgtNZXNzYWdlVHlwZRIICgRURVhUEAASCAoESlNPThABEgcKA1hNTBACEggKBEhUTUwQAxIKCgZCSU5BUlkQBDJ7Cg9Xb3JrZmxvd1NlcnZpY2USaAoPRXhlY3V0ZVdvcmtmbG93EigubmFub3NlcnZpY2Uud29ya2Zsb3cudjEuV29ya2Zsb3dSZXF1ZXN0GikubmFub3NlcnZpY2Uud29ya2Zsb3cudjEuV29ya2Zsb3dSZXNwb25zZSIAYgZwcm90bzM");
14
+ /**
15
+ * Describes the message blok.workflow.v1.WorkflowRequest.
16
+ * Use `create(WorkflowRequestSchema)` to create a new message.
17
+ */
18
+ exports.WorkflowRequestSchema = (0, codegenv1_1.messageDesc)(exports.file_workflow, 0);
19
+ /**
20
+ * Describes the message blok.workflow.v1.WorkflowResponse.
21
+ * Use `create(WorkflowResponseSchema)` to create a new message.
22
+ */
23
+ exports.WorkflowResponseSchema = (0, codegenv1_1.messageDesc)(exports.file_workflow, 1);
24
+ /**
25
+ * @generated from enum blok.workflow.v1.MessageEncoding
26
+ */
27
+ var MessageEncoding;
28
+ (function (MessageEncoding) {
29
+ /**
30
+ * @generated from enum value: BASE64 = 0;
31
+ */
32
+ MessageEncoding[MessageEncoding["BASE64"] = 0] = "BASE64";
33
+ /**
34
+ * @generated from enum value: STRING = 1;
35
+ */
36
+ MessageEncoding[MessageEncoding["STRING"] = 1] = "STRING";
37
+ })(MessageEncoding || (exports.MessageEncoding = MessageEncoding = {}));
38
+ /**
39
+ * Describes the enum blok.workflow.v1.MessageEncoding.
40
+ */
41
+ exports.MessageEncodingSchema = (0, codegenv1_1.enumDesc)(exports.file_workflow, 0);
42
+ /**
43
+ * @generated from enum blok.workflow.v1.MessageType
44
+ */
45
+ var MessageType;
46
+ (function (MessageType) {
47
+ /**
48
+ * @generated from enum value: TEXT = 0;
49
+ */
50
+ MessageType[MessageType["TEXT"] = 0] = "TEXT";
51
+ /**
52
+ * @generated from enum value: JSON = 1;
53
+ */
54
+ MessageType[MessageType["JSON"] = 1] = "JSON";
55
+ /**
56
+ * @generated from enum value: XML = 2;
57
+ */
58
+ MessageType[MessageType["XML"] = 2] = "XML";
59
+ /**
60
+ * @generated from enum value: HTML = 3;
61
+ */
62
+ MessageType[MessageType["HTML"] = 3] = "HTML";
63
+ /**
64
+ * @generated from enum value: BINARY = 4;
65
+ */
66
+ MessageType[MessageType["BINARY"] = 4] = "BINARY";
67
+ })(MessageType || (exports.MessageType = MessageType = {}));
68
+ /**
69
+ * Describes the enum blok.workflow.v1.MessageType.
70
+ */
71
+ exports.MessageTypeSchema = (0, codegenv1_1.enumDesc)(exports.file_workflow, 1);
72
+ /**
73
+ * @generated from service blok.workflow.v1.WorkflowService
74
+ */
75
+ exports.WorkflowService = (0, codegenv1_1.serviceDesc)(exports.file_workflow, 0);
76
+ //# sourceMappingURL=workflow_pb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow_pb.js","sourceRoot":"","sources":["../../src/gen/workflow_pb.ts"],"names":[],"mappings":";AAAA,gEAAgE;AAChE,gFAAgF;AAChF,oBAAoB;;;AAIpB,4DAA4F;AAE5F;;GAEG;AACU,QAAA,aAAa;AACzB,aAAa;AACb,IAAA,oBAAQ,EACP,qkBAAqkB,CACrkB,CAAC;AA2BH;;;GAGG;AACU,QAAA,qBAAqB,GAA8C,IAAA,uBAAW,EAAC,qBAAa,EAAE,CAAC,CAAC,CAAC;AAsB9G;;;GAGG;AACU,QAAA,sBAAsB,GAA+C,IAAA,uBAAW,EAAC,qBAAa,EAAE,CAAC,CAAC,CAAC;AAEhH;;GAEG;AACH,IAAY,eAUX;AAVD,WAAY,eAAe;IAC1B;;OAEG;IACH,yDAAU,CAAA;IAEV;;OAEG;IACH,yDAAU,CAAA;AACX,CAAC,EAVW,eAAe,+BAAf,eAAe,QAU1B;AAED;;GAEG;AACU,QAAA,qBAAqB,GAA2C,IAAA,oBAAQ,EAAC,qBAAa,EAAE,CAAC,CAAC,CAAC;AAExG;;GAEG;AACH,IAAY,WAyBX;AAzBD,WAAY,WAAW;IACtB;;OAEG;IACH,6CAAQ,CAAA;IAER;;OAEG;IACH,6CAAQ,CAAA;IAER;;OAEG;IACH,2CAAO,CAAA;IAEP;;OAEG;IACH,6CAAQ,CAAA;IAER;;OAEG;IACH,iDAAU,CAAA;AACX,CAAC,EAzBW,WAAW,2BAAX,WAAW,QAyBtB;AAED;;GAEG;AACU,QAAA,iBAAiB,GAAuC,IAAA,oBAAQ,EAAC,qBAAa,EAAE,CAAC,CAAC,CAAC;AAEhG;;GAEG;AACU,QAAA,eAAe,GAST,IAAA,uBAAW,EAAC,qBAAa,EAAE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import GrpcClient from "./GrpcClient";
2
+ import { RpcOptions } from "./GrpcClient";
3
+ import { CallOptions } from "./GrpcClient";
4
+ import { TransportEnum } from "./GrpcClient";
5
+ import { HttpVersionEnum } from "./GrpcClient";
6
+ import GrpcServer from "./GrpcServer";
7
+ import { GrpcServerOptions } from "./GrpcServer";
8
+ import NanoSDK from "./NanoSDK";
9
+ import { WorkflowRequest, WorkflowResponse } from "./gen/workflow_pb";
10
+ export { GrpcClient, RpcOptions, CallOptions, TransportEnum, HttpVersionEnum, WorkflowRequest, WorkflowResponse, GrpcServer, GrpcServerOptions, NanoSDK, };
package/dist/index.js ADDED
@@ -0,0 +1,17 @@
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
+ exports.NanoSDK = exports.GrpcServer = exports.HttpVersionEnum = exports.TransportEnum = exports.GrpcClient = void 0;
7
+ const GrpcClient_1 = __importDefault(require("./GrpcClient"));
8
+ exports.GrpcClient = GrpcClient_1.default;
9
+ const GrpcClient_2 = require("./GrpcClient");
10
+ Object.defineProperty(exports, "TransportEnum", { enumerable: true, get: function () { return GrpcClient_2.TransportEnum; } });
11
+ const GrpcClient_3 = require("./GrpcClient");
12
+ Object.defineProperty(exports, "HttpVersionEnum", { enumerable: true, get: function () { return GrpcClient_3.HttpVersionEnum; } });
13
+ const GrpcServer_1 = __importDefault(require("./GrpcServer"));
14
+ exports.GrpcServer = GrpcServer_1.default;
15
+ const NanoSDK_1 = __importDefault(require("./NanoSDK"));
16
+ exports.NanoSDK = NanoSDK_1.default;
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AAWrC,qBAXM,oBAAU,CAWN;AARX,6CAA6C;AAW5C,8FAXQ,0BAAa,OAWR;AAVd,6CAA+C;AAW9C,gGAXQ,4BAAe,OAWR;AAVhB,8DAAsC;AAarC,qBAbM,oBAAU,CAaN;AAXX,wDAAgC;AAa/B,kBAbM,iBAAO,CAaN"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const runner_1 = require("@blok/runner");
4
+ const api_1 = require("@opentelemetry/api");
5
+ const exporter_prometheus_1 = require("@opentelemetry/exporter-prometheus");
6
+ const resources_1 = require("@opentelemetry/resources");
7
+ const sdk_metrics_1 = require("@opentelemetry/sdk-metrics");
8
+ const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
9
+ // Set up the Prometheus exporter to expose metrics at /metrics on port 9091
10
+ const prometheusExporter = new exporter_prometheus_1.PrometheusExporter({ port: 9091, endpoint: "/metrics" }, () => new runner_1.DefaultLogger().log("Prometheus scrape endpoint: http://localhost:9091/metrics"));
11
+ const resource = resources_1.Resource.default().merge(new resources_1.Resource({
12
+ [semantic_conventions_1.ATTR_SERVICE_NAME]: "trigger-http",
13
+ [semantic_conventions_1.ATTR_SERVICE_VERSION]: "0.0.8",
14
+ }));
15
+ // Creates MeterProvider and installs the exporter as a MetricReader
16
+ const meterProvider = new sdk_metrics_1.MeterProvider({
17
+ resource: resource,
18
+ });
19
+ meterProvider.addMetricReader(prometheusExporter);
20
+ api_1.metrics.setGlobalMeterProvider(meterProvider);
21
+ //# sourceMappingURL=opentelemetry_metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"opentelemetry_metrics.js","sourceRoot":"","sources":["../src/opentelemetry_metrics.ts"],"names":[],"mappings":";;AAAA,yCAA6C;AAC7C,4CAA6C;AAC7C,4EAAwE;AACxE,wDAAoD;AACpD,4DAA2D;AAC3D,8EAA8F;AAE9F,4EAA4E;AAC5E,MAAM,kBAAkB,GAAG,IAAI,wCAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,GAAG,EAAE,CAC5F,IAAI,sBAAa,EAAE,CAAC,GAAG,CAAC,2DAA2D,CAAC,CACpF,CAAC;AAEF,MAAM,QAAQ,GAAG,oBAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,CACxC,IAAI,oBAAQ,CAAC;IACZ,CAAC,wCAAiB,CAAC,EAAE,cAAc;IACnC,CAAC,2CAAoB,CAAC,EAAE,OAAO;CAC/B,CAAC,CACF,CAAC;AAEF,oEAAoE;AACpE,MAAM,aAAa,GAAG,IAAI,2BAAa,CAAC;IACvC,QAAQ,EAAE,QAAQ;CAClB,CAAC,CAAC;AACH,aAAa,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAElD,aAAO,CAAC,sBAAsB,CAAC,aAAa,CAAC,CAAC"}
@@ -0,0 +1,33 @@
1
+ syntax = "proto3";
2
+
3
+ package blok.workflow.v1;
4
+
5
+ message WorkflowRequest {
6
+ string Name = 1;
7
+ string Message = 2;
8
+ string Encoding = 3;
9
+ string Type = 4;
10
+ }
11
+
12
+ message WorkflowResponse {
13
+ string Message = 1;
14
+ string Encoding = 2;
15
+ string Type = 3;
16
+ }
17
+
18
+ enum MessageEncoding {
19
+ BASE64 = 0;
20
+ STRING = 1;
21
+ }
22
+
23
+ enum MessageType {
24
+ TEXT = 0;
25
+ JSON = 1;
26
+ XML = 2;
27
+ HTML = 3;
28
+ BINARY = 4;
29
+ }
30
+
31
+ service WorkflowService {
32
+ rpc ExecuteWorkflow (WorkflowRequest) returns (WorkflowResponse) {}
33
+ }
@@ -0,0 +1 @@
1
+ export {};
package/dist/server.js ADDED
@@ -0,0 +1,12 @@
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 GrpcServer_1 = __importDefault(require("./GrpcServer"));
7
+ const server = new GrpcServer_1.default({
8
+ host: "0.0.0.0",
9
+ port: 8443,
10
+ });
11
+ server.start();
12
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";;;;;AAAA,8DAAsC;AAEtC,MAAM,MAAM,GAAG,IAAI,oBAAU,CAAC;IAC7B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,IAAI;CACV,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,EAAE,CAAC"}
File without changes
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=Message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Message.js","sourceRoot":"","sources":["../../src/types/Message.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { ParamsDictionary } from "@blok/runner";
2
+ type RuntimeWorkflow = {
3
+ workflow: ParamsDictionary;
4
+ };
5
+ export default RuntimeWorkflow;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=RuntimeWorkflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeWorkflow.js","sourceRoot":"","sources":["../../src/types/RuntimeWorkflow.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { HelperResponse } from "@blok/helper";
2
+ type Workflows = {
3
+ [key: string]: HelperResponse;
4
+ };
5
+ export default Workflows;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=Workflows.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Workflows.js","sourceRoot":"","sources":["../../src/types/Workflows.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDNjfXRKBwXU0IH
3
+ ftJJGiR5w6Ccf2JfPZJgDdarhVgJjL2cy9d4AwIq4ydiuU+H8MnguzdGrFaCgYOB
4
+ GfgEI4dOAGr1AInRVVHRWKvwGdLYm59dBRi5PQuU2EKVonQNsZy/qcOJSBzBSSAx
5
+ PFCpTwrxj0j/Dug6LxIa1wB7UenYn5NjkFSF8F5HufE7l4goIVh0/fVgRripCsnk
6
+ iMQFVhMr+2glX+19zTVkBl9EtAPbkXsegUUdnkOH2sd1TBN4HUibnktX+P1aIlhd
7
+ p741Eni42jU92u33iZasvvnkA94Q2MhBhzx3lgqAAcHcePzBI9yOEQbTqik4Nkpv
8
+ moqqDFBbAgMBAAECggEACDu0aeFCZsjF70jsIVNzvJDSYRJVHV14/HHxdENOCGvj
9
+ uGENy1fLgW5ByJmFjvtdCqxVBXanrGiFnOkuXvQRWlV380JHQuQ497qmgGJ4aIar
10
+ Nm2a1OiWCysyV43/OgEwNxkUpO4HgNJuAKrazD1HQe+sS9MMCDCUeBC+izH3vN5s
11
+ 9LWOrhde+ZwCkHJgRxp6V5HBJXU/27T02ZjgvPXupzXQ2ozRgx2gn5lLvJJfqG/h
12
+ jEMi9qyuwoRUL4QXDg3TNHHSllnENdRrVJr7VsvYpRpQogVsr4V7zIZiFkAcbuC4
13
+ kMuHeahkjqmlSYVuz9DxPHcmFRW/B5MI5MLQwCvI6QKBgQD61emfMrA323QIWF5l
14
+ hbNQBS3hje9pwN27EU3QmCq0z/2Ja0TTaSeNSdlQAfMEGHsO5tL0ldqS267uqs5r
15
+ clrukrOFmcARZiHne5U1uMcWgYvRmPTTdwng1lQSBuLo7XR9f6sW3u1csOJ8PY4w
16
+ oKtsAIKm0r53iVRCPpd7D9Lr3QKBgQDRyWIccS93kI2rmRxkg4nhniCP8uAacYHy
17
+ ZEZUFpm0p23rLKF7zlGd1xZmwKV5lnd1278qBt9YMvDGw6Mlt3WTQUh9XQ3b5q1V
18
+ xOHfyn2QvWfFbX/tWousq2RP3CJakGiKMefSx8aZB/Vwat3kSdgz825Vcr9oN2j1
19
+ lZZemRlllwKBgD+K1QXpN07PHxPGHxOkzQnmZfsPk6i8nO74sTe4dIkdb2LSc7sC
20
+ lmxqWsyz0bYl5Xae7q3bEGXHlQcM6gG6FGL/cs7TZh6COvCDFAdp6bU/2AWes9al
21
+ /zCf2ug+KllLXgk0wEio7IRgot9KUKzs5sATWQWduXZaqaemZ4VbOtlZAoGAK457
22
+ b1pUt6dssq8khP4Gl7CEJD8SJotgppoJPBZBLZABs21dzd3FdlcdEJJ5COijvvW0
23
+ GB67Ko3RDgO6kO8pWzyXt2elo/2eCYvKNfPN5EpfDE+y2u4Mx/oB5s7W1yTaf67i
24
+ 6hGOe2F6pS+bCHYIjKjDRLyBXzr58NtxEA0Lh9sCgYEA6dI03OhJpruHxyOE3HYE
25
+ oSDah3wr8WUw5BsGDsrW2tMVV7Y3YRO02mL/DB17bmM1FzS5s0n8DKU0c2wViFm4
26
+ ZI4wZdm1hA1MBQBEFVQlVkmwtfyhmsnr98Huckd58PfMUZf6KJE9L4h7SXtPa/VL
27
+ 492ASgwAEWWqFlfK6wSrHiM=
28
+ -----END PRIVATE KEY-----
@@ -0,0 +1,27 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEoTCCAwmgAwIBAgIRAKSu5ey0gTHNC82jEhdfdpYwDQYJKoZIhvcNAQELBQAw
3
+ gbExHjAcBgNVBAoTFW1rY2VydCBkZXZlbG9wbWVudCBDQTFDMEEGA1UECww6bWFy
4
+ Y29ATWFyY29zLU1hY0Jvb2stUHJvLmxvY2FsIChNYXJjbyBDYXN0aWxsbyBEZWxs
5
+ YSBTZXJhKTFKMEgGA1UEAwxBbWtjZXJ0IG1hcmNvQE1hcmNvcy1NYWNCb29rLVBy
6
+ by5sb2NhbCAoTWFyY28gQ2FzdGlsbG8gRGVsbGEgU2VyYSkwHhcNMjUwMjAzMDE1
7
+ MjM5WhcNMjcwNTAzMDE1MjM5WjBuMScwJQYDVQQKEx5ta2NlcnQgZGV2ZWxvcG1l
8
+ bnQgY2VydGlmaWNhdGUxQzBBBgNVBAsMOm1hcmNvQE1hcmNvcy1NYWNCb29rLVBy
9
+ by5sb2NhbCAoTWFyY28gQ2FzdGlsbG8gRGVsbGEgU2VyYSkwggEiMA0GCSqGSIb3
10
+ DQEBAQUAA4IBDwAwggEKAoIBAQDNjfXRKBwXU0IHftJJGiR5w6Ccf2JfPZJgDdar
11
+ hVgJjL2cy9d4AwIq4ydiuU+H8MnguzdGrFaCgYOBGfgEI4dOAGr1AInRVVHRWKvw
12
+ GdLYm59dBRi5PQuU2EKVonQNsZy/qcOJSBzBSSAxPFCpTwrxj0j/Dug6LxIa1wB7
13
+ UenYn5NjkFSF8F5HufE7l4goIVh0/fVgRripCsnkiMQFVhMr+2glX+19zTVkBl9E
14
+ tAPbkXsegUUdnkOH2sd1TBN4HUibnktX+P1aIlhdp741Eni42jU92u33iZasvvnk
15
+ A94Q2MhBhzx3lgqAAcHcePzBI9yOEQbTqik4NkpvmoqqDFBbAgMBAAGjdjB0MA4G
16
+ A1UdDwEB/wQEAwIFoDATBgNVHSUEDDAKBggrBgEFBQcDATAfBgNVHSMEGDAWgBTN
17
+ imcw8dRZ+LdM83iq2xnhRgHVMjAsBgNVHREEJTAjgglsb2NhbGhvc3SHBH8AAAGH
18
+ EAAAAAAAAAAAAAAAAAAAAAEwDQYJKoZIhvcNAQELBQADggGBAIA2HiGT0dtdkNfB
19
+ LFAIUvlatqHkH4Pds3jd0TnT4muoebPoHc3HSoqnSdt4g2vN+75S47G7E5b/qQbH
20
+ ZfkL9kgZoCar79DuVpC/kCPI/NACRsqdgIcnd09FqN2Dmg1UP2F/nulLucWfOiSL
21
+ T3q3nVEAm3UL4R5VopFW94bp8jJ/cWseDohIGZBza4yUiMnbd6mK+g+DoExfGbwc
22
+ A3601xeDWcDxKv+KaBWQeyoUWO66FKYOJcdwaiPCPrvXVz3tdbxBpHB/beNeulaU
23
+ 6EzDRCmtIwEZNwq9MNn0wViOjta1TtkeERtbvnmgPmFhhSbHDtGbbxuwWnV91aZg
24
+ 0JFymKsmmBIv4Qu50zVPo7Jz0n6CucIPVUW8ZoamVBr6ljHOfZIg9N0hkRoX7DUT
25
+ pPV22KliCRZCHYnyVcIzwtW2lxlzydUnldhxZga6vlfoKR5WzCceTtsX2+p8dbJe
26
+ p5jVRsLyT/sfECb8n5N7BYRLSh36FekFGErFCr9Svqd9pRVsWg==
27
+ -----END CERTIFICATE-----