@lad-tech/nsc-toolkit 1.2.1 → 1.4.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 (41) hide show
  1. package/.eslintrc.json +104 -0
  2. package/.github/workflows/build-and-test.yml +22 -0
  3. package/.github/workflows/publish-package-to-npmjs.yml +5 -0
  4. package/CHANGELOG.md +3 -3
  5. package/README.md +2 -0
  6. package/coverage/clover.xml +578 -0
  7. package/coverage/coverage-final.json +12 -0
  8. package/coverage/lcov-report/base.css +224 -0
  9. package/coverage/lcov-report/block-navigation.js +87 -0
  10. package/coverage/lcov-report/favicon.png +0 -0
  11. package/coverage/lcov-report/index.html +146 -0
  12. package/coverage/lcov-report/prettify.css +1 -0
  13. package/coverage/lcov-report/prettify.js +2 -0
  14. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  15. package/coverage/lcov-report/sorter.js +196 -0
  16. package/coverage/lcov.info +1095 -0
  17. package/lefthook.yml +2 -2
  18. package/package.json +18 -10
  19. package/tsconfig.json +1 -1
  20. package/.eslintrc.js +0 -106
  21. package/dist/Client.js +0 -198
  22. package/dist/Client.js.map +0 -1
  23. package/dist/Method.js +0 -7
  24. package/dist/Method.js.map +0 -1
  25. package/dist/Root.js +0 -66
  26. package/dist/Root.js.map +0 -1
  27. package/dist/Service.js +0 -471
  28. package/dist/Service.js.map +0 -1
  29. package/dist/index.js +0 -22
  30. package/dist/index.js.map +0 -1
  31. package/dist/injector.js +0 -39
  32. package/dist/injector.js.map +0 -1
  33. package/dist/interfaces.js +0 -4
  34. package/dist/interfaces.js.map +0 -1
  35. package/dist/types/Client.d.ts +0 -28
  36. package/dist/types/Method.d.ts +0 -6
  37. package/dist/types/Root.d.ts +0 -25
  38. package/dist/types/Service.d.ts +0 -100
  39. package/dist/types/index.d.ts +0 -5
  40. package/dist/types/injector.d.ts +0 -11
  41. package/dist/types/interfaces.d.ts +0 -81
package/dist/Service.js DELETED
@@ -1,471 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Service = void 0;
4
- const Root_1 = require("./Root");
5
- const nats_1 = require("nats");
6
- const sdk_trace_base_1 = require("@opentelemetry/sdk-trace-base");
7
- const resources_1 = require("@opentelemetry/resources");
8
- const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
9
- const api_1 = require("@opentelemetry/api");
10
- const injector_1 = require("./injector");
11
- const exporter_jaeger_1 = require("@opentelemetry/exporter-jaeger");
12
- const stream_1 = require("stream");
13
- const toolbelt_1 = require("@lad-tech/toolbelt");
14
- const http = require("http");
15
- const os = require("os");
16
- const promises_1 = require("timers/promises");
17
- const util_1 = require("util");
18
- class Service extends Root_1.Root {
19
- constructor(options) {
20
- super(options.brokerConnection, options.loggerOutputFormatter);
21
- this.options = options;
22
- this.emitter = {};
23
- this.subscriptions = [];
24
- this.httpMethods = new Map();
25
- this.rootSpans = new Map();
26
- this.serviceInStoppingProcess = false;
27
- this.serviceName = options.name;
28
- this.logger.setLocation(this.serviceName);
29
- if (options.events.length) {
30
- this.emitter = options.events.reduce((result, action) => {
31
- result[action] = ((params) => {
32
- this.brocker.publish(`${options.name}.${String(action)}`, this.buildMessage(params));
33
- });
34
- return result;
35
- }, this.emitter);
36
- }
37
- this.createTracer();
38
- }
39
- /**
40
- * Create global Tracer
41
- */
42
- createTracer() {
43
- const provider = new sdk_trace_base_1.BasicTracerProvider({
44
- resource: new resources_1.Resource({
45
- [semantic_conventions_1.SemanticResourceAttributes.SERVICE_NAME]: this.options.name,
46
- }),
47
- });
48
- const exporter = new exporter_jaeger_1.JaegerExporter({
49
- endpoint: this.getSettingFromEnv('OTEL_AGENT', false),
50
- });
51
- provider.addSpanProcessor(new sdk_trace_base_1.SimpleSpanProcessor(exporter));
52
- provider.register();
53
- }
54
- /**
55
- * Wrapper for async methods. Create span
56
- */
57
- async perform(func, funcContext, arg, tracer, context) {
58
- const span = tracer.startSpan(func.name, undefined, context);
59
- const query = func.apply(funcContext, arg);
60
- query
61
- .then(() => span.end())
62
- .catch(error => {
63
- span.setAttribute('error', true);
64
- span.setAttribute('error.kind', error);
65
- span.end();
66
- throw error;
67
- });
68
- return query;
69
- }
70
- /**
71
- * Creating an object to inject into Method (business logic)
72
- */
73
- createObjectWithDependencies(action, tracer, baggage) {
74
- const services = injector_1.ServiceContainer.get(action);
75
- const dependences = {};
76
- if (services === null || services === void 0 ? void 0 : services.size) {
77
- services.forEach((Dependence, key) => {
78
- dependences[key] = new Dependence(this.brocker, baggage, this.options.cache);
79
- });
80
- }
81
- const perform = this.perform;
82
- const context = this.getContext(baggage);
83
- const instances = injector_1.InstanceContainer.get(action);
84
- if (instances === null || instances === void 0 ? void 0 : instances.size) {
85
- instances.forEach((instance, key) => {
86
- const trap = {
87
- get(target, propKey, receiver) {
88
- const method = Reflect.get(target, propKey, receiver);
89
- if (typeof method === 'function') {
90
- return function (...args) {
91
- return perform(method, instance, args, tracer, context);
92
- };
93
- }
94
- else {
95
- return method;
96
- }
97
- },
98
- };
99
- dependences[key] = new Proxy(instance, trap);
100
- });
101
- }
102
- dependences['logger'] = new toolbelt_1.Logs.Logger({
103
- location: `${this.serviceName}.${action}`,
104
- metadata: baggage,
105
- outputFormatter: this.options.loggerOutputFormatter,
106
- });
107
- return dependences;
108
- }
109
- /**
110
- * Create Method (business logic) context
111
- */
112
- createMethodContext(Method, dependencies) {
113
- const context = new Method();
114
- for (const key in dependencies) {
115
- context[key] = dependencies[key];
116
- }
117
- context['emitter'] = this.emitter;
118
- return context;
119
- }
120
- /**
121
- * Create Baggage from span. Expired one-on-one business logic call
122
- */
123
- getNextBaggage(span, baggage) {
124
- const { traceId, spanId, traceFlags } = span.spanContext();
125
- return { traceId, spanId, traceFlags, expired: baggage === null || baggage === void 0 ? void 0 : baggage.expired };
126
- }
127
- /**
128
- * If there is no baggage. For example, in HTTP Gateway
129
- */
130
- getRootBaggage(subject, headers, ownTimeout) {
131
- const baggage = headers ? this.getBaggageFromHTTPHeader(headers) : undefined;
132
- const tracer = api_1.trace.getTracer('');
133
- const context = this.getContext(baggage);
134
- const span = tracer.startSpan(subject, undefined, context);
135
- const newBaggage = this.getNextBaggage(span, baggage);
136
- this.rootSpans.set(newBaggage.traceId, span);
137
- return {
138
- ...newBaggage,
139
- expired: this.getExpired(undefined, ownTimeout),
140
- };
141
- }
142
- /**
143
- * End root baggage
144
- */
145
- endRootSpan(traceId, error) {
146
- const span = this.rootSpans.get(traceId);
147
- if (span) {
148
- if (error) {
149
- span.setAttribute('error', true);
150
- span.setAttribute('error.kind', error.message);
151
- }
152
- span.end();
153
- this.rootSpans.delete(traceId);
154
- }
155
- }
156
- buildService(Client, baggage) {
157
- return new Client(this.brocker, baggage, this.options.cache, this.options.loggerOutputFormatter);
158
- }
159
- /**
160
- * Create service Method for send HTTP settings
161
- */
162
- async runServiceMethodForHttp() {
163
- const subject = `${this.serviceName}.${this.SERVICE_SUBJECT_FOR_GET_HTTP_SETTINGS}`;
164
- const subscription = this.brocker.subscribe(subject, { queue: this.serviceName });
165
- this.subscriptions.push(subscription);
166
- for await (const message of subscription) {
167
- message.respond(this.buildMessage(this.getHttpSettings()));
168
- }
169
- }
170
- makeHttpSingleResponse(response, data) {
171
- const responseData = JSON.stringify(data);
172
- response
173
- .writeHead(200, {
174
- 'Content-Length': Buffer.byteLength(responseData),
175
- 'Content-Type': 'application/json',
176
- })
177
- .write(responseData);
178
- response.end();
179
- }
180
- /**
181
- * Create transform stream for convert object to string in stream pipeline
182
- */
183
- getStringifyTransform() {
184
- return new stream_1.Transform({
185
- objectMode: true,
186
- transform(chunk, encoding, push) {
187
- try {
188
- if (chunk instanceof Buffer) {
189
- push(null, chunk);
190
- }
191
- const result = JSON.stringify(chunk);
192
- push(null, result);
193
- }
194
- catch (error) {
195
- push(error);
196
- }
197
- },
198
- });
199
- }
200
- makeHttpStreamResponse(response, data) {
201
- data.payload.on('error', error => {
202
- this.logger.error(error);
203
- });
204
- response.writeHead(200, {
205
- 'Content-Type': 'application/octet-stream',
206
- });
207
- (0, stream_1.pipeline)(data.payload, this.getStringifyTransform(), response, () => { });
208
- }
209
- /**
210
- * Up HTTP server and start listen http routes
211
- */
212
- async buildHTTPHandlers() {
213
- await this.upHTTPServer();
214
- this.runServiceMethodForHttp();
215
- this.httpServer.on('request', async (request, response) => {
216
- var _a, _b, _c, _d;
217
- try {
218
- if (request.method !== 'POST' || !request.url) {
219
- throw new Error('Wrong http request');
220
- }
221
- const parsedUrl = request.url.split('/');
222
- parsedUrl.shift();
223
- const [serviceName, action, ...other] = parsedUrl;
224
- const wrongServiceName = this.serviceName !== serviceName;
225
- const Method = this.httpMethods.get(action);
226
- if (other.length || wrongServiceName || !Method) {
227
- throw new Error('Wrong url or service name or action');
228
- }
229
- const baggage = this.getBaggageFromHTTPHeader(request.headers);
230
- if ((_b = (_a = Method.settings.options) === null || _a === void 0 ? void 0 : _a.useStream) === null || _b === void 0 ? void 0 : _b.request) {
231
- const result = await this.handled(request, Method, baggage);
232
- if (Method.settings.options.useStream.response && result.payload instanceof stream_1.Readable) {
233
- this.makeHttpStreamResponse(response, result);
234
- return;
235
- }
236
- this.makeHttpSingleResponse(response, result);
237
- return;
238
- }
239
- const requestDataRaw = [];
240
- for await (const data of request) {
241
- requestDataRaw.push(data);
242
- }
243
- const requestData = Buffer.concat(requestDataRaw).toString();
244
- const result = await this.handled(JSON.parse(requestData), Method, baggage);
245
- if (((_d = (_c = Method.settings.options) === null || _c === void 0 ? void 0 : _c.useStream) === null || _d === void 0 ? void 0 : _d.response) && result.payload instanceof stream_1.Readable) {
246
- this.makeHttpStreamResponse(response, result);
247
- return;
248
- }
249
- this.makeHttpSingleResponse(response, result);
250
- }
251
- catch (error) {
252
- this.logger.error(error);
253
- if (error instanceof Error) {
254
- this.makeHttpSingleResponse(response, this.buildErrorMessage(error));
255
- return;
256
- }
257
- this.makeHttpSingleResponse(response, this.buildErrorMessage('System unknown error'));
258
- }
259
- });
260
- }
261
- /**
262
- * Run business logic for request
263
- */
264
- async handled(payload, Method, baggage) {
265
- const subject = `${this.serviceName}.${Method.settings.action}`;
266
- const tracer = api_1.trace.getTracer('');
267
- const context = this.getContext(baggage);
268
- const span = tracer.startSpan(subject, undefined, context);
269
- try {
270
- const requestedDependencies = this.createObjectWithDependencies(Method.settings.action, tracer, this.getNextBaggage(span, baggage));
271
- const context = this.createMethodContext(Method, requestedDependencies);
272
- const result = {
273
- payload: await context.handler.call(context, payload),
274
- };
275
- span.end();
276
- return result;
277
- }
278
- catch (error) {
279
- this.logger.error(error);
280
- span.setAttribute('error', true);
281
- span.setAttribute('error.kind', error);
282
- span.end();
283
- return this.buildErrorMessage(error);
284
- }
285
- }
286
- /**
287
- * Start service. Subscribe for subject and up http server
288
- */
289
- async start() {
290
- const { methods } = this.options;
291
- try {
292
- methods.forEach(async (Method) => {
293
- var _a;
294
- if ((_a = Method.settings.options) === null || _a === void 0 ? void 0 : _a.useStream) {
295
- this.httpMethods.set(Method.settings.action, Method);
296
- return;
297
- }
298
- const subject = `${this.serviceName}.${Method.settings.action}`;
299
- const subscription = this.brocker.subscribe(subject, { queue: this.serviceName });
300
- this.subscriptions.push(subscription);
301
- for await (const message of subscription) {
302
- const { payload, baggage } = (0, nats_1.JSONCodec)().decode(message.data);
303
- try {
304
- const result = await this.handled(payload, Method, baggage);
305
- message.respond(this.buildMessage(result));
306
- }
307
- catch (error) {
308
- message.respond(this.buildMessage({ error: error.message }));
309
- }
310
- }
311
- });
312
- if (this.httpMethods.size > 0) {
313
- await this.buildHTTPHandlers();
314
- }
315
- this.upProbeRoutes();
316
- this.registerGracefulShutdown();
317
- this.logger.info('Service successfully started!');
318
- }
319
- catch (error) {
320
- if (error instanceof Error) {
321
- this.logger.error(error.name, error.message);
322
- }
323
- else {
324
- this.logger.error('An error occurred while starting the service', error);
325
- }
326
- process.exit(1);
327
- }
328
- }
329
- /**
330
- * Correct finish all connections
331
- */
332
- async cleanupAndExit() {
333
- var _a, _b, _c, _d;
334
- try {
335
- const timeout = ((_a = this.options.gracefulShutdown) === null || _a === void 0 ? void 0 : _a.timeout) || 1000;
336
- this.logger.info('Closing Broker connection');
337
- await Promise.race([this.options.brokerConnection.drain(), (0, promises_1.setTimeout)(timeout)]);
338
- if (this.httpServer) {
339
- this.logger.info('Closing HTTP server');
340
- const closeHttp = (0, util_1.promisify)(this.httpServer.close);
341
- await Promise.race([closeHttp, (0, promises_1.setTimeout)(timeout)]);
342
- }
343
- if ((_c = (_b = this.options.gracefulShutdown) === null || _b === void 0 ? void 0 : _b.additional) === null || _c === void 0 ? void 0 : _c.length) {
344
- this.logger.info('Closing additional services');
345
- for await (const service of (_d = this.options.gracefulShutdown) === null || _d === void 0 ? void 0 : _d.additional) {
346
- await Promise.race([service.close(), (0, promises_1.setTimeout)(timeout)]);
347
- }
348
- }
349
- if (this.httpProbServer) {
350
- this.logger.info('Closing HTTP Prob server');
351
- const closeHttp = (0, util_1.promisify)(this.httpProbServer.close);
352
- await Promise.race([closeHttp, (0, promises_1.setTimeout)(timeout)]);
353
- }
354
- }
355
- catch (error) {
356
- this.logger.error('Fail correct finish service', error);
357
- }
358
- process.exit(0);
359
- }
360
- /**
361
- * Handler for OS Signal
362
- */
363
- handleSignal(signal) {
364
- return () => {
365
- this.logger.warn(`signal ${signal} received`);
366
- this.cleanupAndExit();
367
- };
368
- }
369
- /**
370
- * Handler for Force OS Signal
371
- */
372
- handleFatalError(message) {
373
- return (err) => {
374
- this.logger.error(message, err);
375
- process.exit(1);
376
- };
377
- }
378
- /**
379
- * Register listeners for Graceful Shutdown
380
- */
381
- registerGracefulShutdown() {
382
- process.on('SIGINT', this.handleSignal('SIGINT'));
383
- process.on('SIGQUIT', this.handleSignal('SIGQUIT'));
384
- process.on('SIGTERM', this.handleSignal('SIGTERM'));
385
- process.on('uncaughtException', this.handleFatalError('Uncaught exception'));
386
- process.on('unhandledRejection', this.handleFatalError('Unhandled rejection'));
387
- }
388
- /**
389
- * Up Probe Route for container orchestration service
390
- */
391
- upProbeRoutes() {
392
- if (this.httpProbServer) {
393
- return;
394
- }
395
- this.httpProbServer = http.createServer();
396
- this.httpProbServer.on('request', (request, response) => {
397
- if (request.url === '/healthcheck' && request.method === 'GET') {
398
- response.writeHead(200).end();
399
- return;
400
- }
401
- response.writeHead(500).end();
402
- });
403
- this.httpProbServer.listen(8081);
404
- }
405
- /**
406
- * Build message for broker
407
- */
408
- buildMessage(message) {
409
- return Buffer.from(JSON.stringify(message));
410
- }
411
- async upHTTPServer() {
412
- this.httpServer = http.createServer();
413
- this.ipAddress = this.getMyIpV4();
414
- this.httpPort = await new Promise((resolve, reject) => {
415
- this.httpServer = this.httpServer.listen(0, () => {
416
- const address = this.httpServer.address();
417
- if (!address) {
418
- reject(new Error('Failed to get the port number: server is not listening'));
419
- return;
420
- }
421
- if (typeof address === 'string') {
422
- reject(new Error('Listening on a unix socket is not supported'));
423
- return;
424
- }
425
- resolve(address.port);
426
- });
427
- });
428
- return this.httpServer;
429
- }
430
- getMyIpV4() {
431
- const networkInterfaces = os.networkInterfaces();
432
- const myIpV4Address = Object.keys(networkInterfaces).reduce((ip, key) => {
433
- if (ip) {
434
- return ip;
435
- }
436
- const networkInterface = networkInterfaces[key];
437
- const externalIpV4Interface = networkInterface === null || networkInterface === void 0 ? void 0 : networkInterface.find(item => !item.internal && item.family === 'IPv4');
438
- if (externalIpV4Interface) {
439
- return externalIpV4Interface.address;
440
- }
441
- return ip;
442
- }, '');
443
- if (!myIpV4Address) {
444
- throw new Error('Failed to get service ip address');
445
- }
446
- return myIpV4Address;
447
- }
448
- getHttpSettings() {
449
- return {
450
- ip: this.ipAddress,
451
- port: this.httpPort,
452
- };
453
- }
454
- getBaggageFromHTTPHeader(headers) {
455
- const expired = headers['nsc-expired'] ? +headers['nsc-expired'] : undefined;
456
- const traceId = headers['nsc-trace-id'];
457
- const spanId = headers['nsc-span-id'];
458
- const traceFlags = headers['nsc-trace-flags'] ? +headers['nsc-trace-flags'] : undefined;
459
- if (traceId && spanId && traceFlags) {
460
- return {
461
- traceId,
462
- spanId,
463
- traceFlags,
464
- expired,
465
- };
466
- }
467
- return undefined;
468
- }
469
- }
470
- exports.Service = Service;
471
- //# sourceMappingURL=Service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Service.js","sourceRoot":"","sources":["../src/Service.ts"],"names":[],"mappings":"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"}
package/dist/index.js DELETED
@@ -1,22 +0,0 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./Service"), exports);
18
- __exportStar(require("./Client"), exports);
19
- __exportStar(require("./Method"), exports);
20
- __exportStar(require("./injector"), exports);
21
- __exportStar(require("./interfaces"), exports);
22
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,4CAA0B;AAC1B,2CAAyB;AACzB,2CAAyB;AACzB,6CAA2B;AAC3B,+CAA6B"}
package/dist/injector.js DELETED
@@ -1,39 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.instance = exports.service = exports.related = exports.InstanceContainer = exports.ServiceContainer = void 0;
4
- require("reflect-metadata");
5
- const serviceMetaKey = Symbol('services');
6
- const instanceMetaKey = Symbol('instance');
7
- exports.ServiceContainer = new Map();
8
- exports.InstanceContainer = new Map();
9
- function related(target) {
10
- const dependencies = Reflect.getMetadata(serviceMetaKey, target.prototype);
11
- const instances = Reflect.getMetadata(instanceMetaKey, target.prototype);
12
- exports.ServiceContainer.set(target.settings.action, dependencies);
13
- exports.InstanceContainer.set(target.settings.action, instances);
14
- }
15
- exports.related = related;
16
- function setMetaData(item, itemName, metaKey, target) {
17
- let storage;
18
- if (Reflect.hasMetadata(metaKey, target)) {
19
- storage = Reflect.getMetadata(metaKey, target);
20
- }
21
- else {
22
- storage = new Map();
23
- Reflect.defineMetadata(metaKey, storage, target);
24
- }
25
- storage.set(itemName, item);
26
- }
27
- function service(dependence) {
28
- return function (target, dependenceName) {
29
- setMetaData(dependence, dependenceName, serviceMetaKey, target);
30
- };
31
- }
32
- exports.service = service;
33
- function instance(instance) {
34
- return function (target, instanceName) {
35
- setMetaData(instance, instanceName, instanceMetaKey, target);
36
- };
37
- }
38
- exports.instance = instance;
39
- //# sourceMappingURL=injector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"injector.js","sourceRoot":"","sources":["../src/injector.ts"],"names":[],"mappings":";;;AAAA,4BAA0B;AAQ1B,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC1C,MAAM,eAAe,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAE9B,QAAA,gBAAgB,GAAmC,IAAI,GAAG,EAAE,CAAC;AAC7D,QAAA,iBAAiB,GAAiC,IAAI,GAAG,EAAE,CAAC;AAEzE,SAAgB,OAAO,CAAmB,MAAS;IACjD,MAAM,YAAY,GAAsB,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9F,MAAM,SAAS,GAAoB,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1F,wBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC3D,yBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAC3D,CAAC;AALD,0BAKC;AAED,SAAS,WAAW,CAAC,IAA2B,EAAE,QAAgB,EAAE,OAAe,EAAE,MAAW;IAC9F,IAAI,OAA6B,CAAC;IAClC,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE;QACxC,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KAChD;SAAM;QACL,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACpB,OAAO,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;KAClD;IACD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AAED,SAAgB,OAAO,CAAC,UAAsB;IAC5C,OAAO,UAAU,MAAW,EAAE,cAAsB;QAClD,WAAW,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;IAClE,CAAC,CAAC;AACJ,CAAC;AAJD,0BAIC;AAED,SAAgB,QAAQ,CAAC,QAAkB;IACzC,OAAO,UAAU,MAAW,EAAE,YAAoB;QAChD,WAAW,CAAC,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAC/D,CAAC,CAAC;AACJ,CAAC;AAJD,4BAIC"}
@@ -1,4 +0,0 @@
1
- "use strict";
2
- // COMMON
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- //# sourceMappingURL=interfaces.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":";AAAA,SAAS"}
@@ -1,28 +0,0 @@
1
- /// <reference types="node" />
2
- import type { Logs } from '@lad-tech/toolbelt';
3
- import { NatsConnection } from 'nats';
4
- import { Readable } from 'stream';
5
- import { Baggage, CacheSettings, Emitter, Listener, MethodSettings } from './interfaces';
6
- import { Root } from './Root';
7
- declare type RequestData = Record<string, unknown> | Readable;
8
- export declare class Client<E extends Emitter = {}> extends Root {
9
- private serviceName;
10
- private baggage?;
11
- private cache?;
12
- private subscriptions;
13
- private REQUEST_HTTP_SETTINGS_TIMEOUT;
14
- constructor(natsConnection: NatsConnection, serviceName: string, baggage?: Baggage | undefined, cache?: CacheSettings | undefined, loggerOutputFormatter?: Logs.OutputFormatter);
15
- /**
16
- * Make listener for service events. Auto subscribe and unsubscribe to subject
17
- */
18
- getListener<A extends keyof E>(eventNames: Array<A>, queue?: string): Listener<E>;
19
- private createCacheKey;
20
- private validate;
21
- protected request<R = any, P extends RequestData = RequestData>(subject: string, data: P, { options, request, response }: MethodSettings): Promise<R>;
22
- private getHTTPSettingsFromRemoteService;
23
- private isStream;
24
- private makeBrokerRequest;
25
- private makeHttpRequest;
26
- private convertBaggaggeToExternalHeader;
27
- }
28
- export {};
@@ -1,6 +0,0 @@
1
- import { Logs } from '@lad-tech/toolbelt';
2
- import { Emitter } from './interfaces';
3
- export declare class BaseMethod<E extends Emitter = Record<string, () => void>> {
4
- protected logger: Logs.Logger;
5
- protected emitter: E;
6
- }
@@ -1,25 +0,0 @@
1
- import { Logs } from '@lad-tech/toolbelt';
2
- import * as opentelemetry from '@opentelemetry/api';
3
- import { NatsConnection } from 'nats';
4
- import { Baggage } from './interfaces';
5
- export declare class Root {
6
- protected brocker: NatsConnection;
7
- protected SERVICE_SUBJECT_FOR_GET_HTTP_SETTINGS: string;
8
- protected CACHE_SERVICE_KEY: string;
9
- protected logger: Logs.Logger;
10
- constructor(brocker: NatsConnection, outputFormatter?: Logs.OutputFormatter);
11
- protected castToNumber(value?: string): number;
12
- protected getSettingFromEnv(name: string, required?: boolean): string | undefined;
13
- /**
14
- * Make opentelemetry context from baggagge
15
- */
16
- protected getContext(baggage?: Baggage): opentelemetry.Context | undefined;
17
- protected getExpired(expired?: number, ownTimeout?: number): number;
18
- protected buildErrorMessage(error: string | Error, code?: number): {
19
- payload: null;
20
- error: {
21
- message: string;
22
- code: number | undefined;
23
- };
24
- };
25
- }