@omnitronix/rng-client-core 1.0.10 → 1.1.2

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 (88) hide show
  1. package/dist/core/rng-client-core.d.ts +0 -1
  2. package/dist/core/rng-client-core.js +1 -1
  3. package/dist/errors/rng-errors.d.ts +0 -1
  4. package/dist/errors/rng-errors.js +1 -1
  5. package/dist/grpc/grpc-rng-client.d.ts +0 -1
  6. package/dist/grpc/grpc-rng-client.js +1 -1
  7. package/dist/grpc/grpc-rng-interface.d.ts +0 -1
  8. package/dist/grpc/grpc-rng-interface.js +1 -1
  9. package/dist/http/http-client.types.d.ts +0 -1
  10. package/dist/http/http-client.types.js +1 -1
  11. package/dist/http/http-rng-client.d.ts +0 -1
  12. package/dist/http/http-rng-client.js +1 -1
  13. package/dist/http/rest-client.d.ts +0 -1
  14. package/dist/http/rest-client.js +1 -1
  15. package/dist/http/rng-client.interface.d.ts +0 -1
  16. package/dist/http/rng-client.interface.js +1 -1
  17. package/dist/index.d.ts +6 -6
  18. package/dist/index.js +1 -1
  19. package/dist/interfaces/client-interfaces.d.ts +6 -3
  20. package/dist/interfaces/client-interfaces.js +1 -1
  21. package/dist/interfaces/metrics.d.ts +30 -0
  22. package/dist/interfaces/metrics.js +3 -0
  23. package/dist/metrics/default-metrics-handlers.d.ts +2 -0
  24. package/dist/metrics/default-metrics-handlers.js +23 -0
  25. package/dist/ring-buffer/interfaces.d.ts +0 -38
  26. package/dist/ring-buffer/interfaces.js +1 -1
  27. package/dist/ring-buffer/ring-buffer.d.ts +7 -14
  28. package/dist/ring-buffer/ring-buffer.js +63 -207
  29. package/dist/ring-buffer/ring-storage-memory.d.ts +1 -3
  30. package/dist/ring-buffer/ring-storage-memory.js +1 -25
  31. package/dist/ring-buffer/ring-storage.d.ts +1 -3
  32. package/dist/ring-buffer/ring-storage.js +1 -7
  33. package/dist/rng-client.d.ts +2 -5
  34. package/dist/rng-client.js +6 -4
  35. package/package.json +3 -2
  36. package/src/__tests__/grpc-rng-client.test.ts +167 -0
  37. package/src/__tests__/rng-client-core.integration.test.ts +117 -0
  38. package/src/__tests__/rng-client-core.test.ts +249 -0
  39. package/src/__tests__/rng-client-grpc.test.ts +324 -0
  40. package/src/__tests__/rng-client.test.ts +296 -0
  41. package/src/core/rng-client-core.ts +80 -0
  42. package/src/errors/rng-errors.ts +96 -0
  43. package/src/grpc/grpc-rng-client.ts +162 -0
  44. package/src/grpc/grpc-rng-interface.ts +36 -0
  45. package/src/http/http-client.types.ts +48 -0
  46. package/src/http/http-rng-client.ts +140 -0
  47. package/src/http/rest-client.ts +151 -0
  48. package/src/http/rng-client.interface.ts +22 -0
  49. package/src/index.ts +21 -0
  50. package/src/interfaces/client-interfaces.ts +15 -0
  51. package/src/interfaces/metrics.ts +38 -0
  52. package/src/metrics/default-metrics-handlers.ts +29 -0
  53. package/src/ring-buffer/interfaces.ts +9 -0
  54. package/src/ring-buffer/ring-buffer.ts +214 -0
  55. package/src/ring-buffer/ring-storage-memory.ts +48 -0
  56. package/src/ring-buffer/ring-storage.ts +59 -0
  57. package/src/rng-client.ts +190 -0
  58. package/src/rng.proto +102 -0
  59. package/dist/core/rng-client-core.d.ts.map +0 -1
  60. package/dist/core/rng-client-core.js.map +0 -1
  61. package/dist/errors/rng-errors.d.ts.map +0 -1
  62. package/dist/errors/rng-errors.js.map +0 -1
  63. package/dist/grpc/grpc-rng-client.d.ts.map +0 -1
  64. package/dist/grpc/grpc-rng-client.js.map +0 -1
  65. package/dist/grpc/grpc-rng-interface.d.ts.map +0 -1
  66. package/dist/grpc/grpc-rng-interface.js.map +0 -1
  67. package/dist/http/http-client.types.d.ts.map +0 -1
  68. package/dist/http/http-client.types.js.map +0 -1
  69. package/dist/http/http-rng-client.d.ts.map +0 -1
  70. package/dist/http/http-rng-client.js.map +0 -1
  71. package/dist/http/rest-client.d.ts.map +0 -1
  72. package/dist/http/rest-client.js.map +0 -1
  73. package/dist/http/rng-client.interface.d.ts.map +0 -1
  74. package/dist/http/rng-client.interface.js.map +0 -1
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js.map +0 -1
  77. package/dist/interfaces/client-interfaces.d.ts.map +0 -1
  78. package/dist/interfaces/client-interfaces.js.map +0 -1
  79. package/dist/ring-buffer/interfaces.d.ts.map +0 -1
  80. package/dist/ring-buffer/interfaces.js.map +0 -1
  81. package/dist/ring-buffer/ring-buffer.d.ts.map +0 -1
  82. package/dist/ring-buffer/ring-buffer.js.map +0 -1
  83. package/dist/ring-buffer/ring-storage-memory.d.ts.map +0 -1
  84. package/dist/ring-buffer/ring-storage-memory.js.map +0 -1
  85. package/dist/ring-buffer/ring-storage.d.ts.map +0 -1
  86. package/dist/ring-buffer/ring-storage.js.map +0 -1
  87. package/dist/rng-client.d.ts.map +0 -1
  88. package/dist/rng-client.js.map +0 -1
@@ -4,264 +4,116 @@ exports.RingBuffer = exports.FILL_UP_BUFFER_DELAY = void 0;
4
4
  const ring_storage_1 = require("./ring-storage");
5
5
  exports.FILL_UP_BUFFER_DELAY = 5;
6
6
  class RingBuffer {
7
- constructor({ size, clientCore, storageType }) {
8
- this.refillRequests = [];
9
- this.refillFailures = [];
10
- this.starvationEvents = [];
11
- this.refillDurations = [];
12
- this.latencies = [];
7
+ constructor({ size, clientCore, storageType, metrics }) {
13
8
  this.size = size ?? 2000;
14
9
  this.maxSize = this.size * 2;
15
10
  this.clientCore = clientCore;
16
11
  this.storageType = storageType;
17
12
  this.storage = new ring_storage_1.RingStorage(storageType);
13
+ this.metrics = metrics;
18
14
  }
19
15
  getRangeKey(min, max) {
20
16
  return `${min}-${max}`;
21
17
  }
22
18
  getEngineType() {
23
- return "default";
24
- }
25
- incrementCounter(counters, rng_range, reason, error) {
26
- const engine_type = this.getEngineType();
27
- let counter = counters.find((c) => c.rng_range === rng_range &&
28
- c.engine_type === engine_type &&
29
- c.reason === reason &&
30
- c.error === error);
31
- if (!counter) {
32
- counter = { rng_range, engine_type, reason, error, count: 0 };
33
- counters.push(counter);
34
- }
35
- counter.count++;
36
- }
37
- recordHistogram(histograms, rng_range, value, reason) {
38
- const engine_type = this.getEngineType();
39
- let histogram = histograms.find((h) => h.rng_range === rng_range &&
40
- h.engine_type === engine_type &&
41
- h.reason === reason);
42
- if (!histogram) {
43
- histogram = { rng_range, engine_type, reason, values: [] };
44
- histograms.push(histogram);
45
- }
46
- histogram.values.push(value);
47
- }
48
- createHistogramBuckets(values) {
49
- const buckets = {};
50
- const standardBuckets = [
51
- 0, 10, 25, 50, 100, 250, 500, 1000, 2500, 5000, 10000,
52
- ];
53
- let sum = 0;
54
- const count = values.length;
55
- for (const value of values) {
56
- sum += value;
57
- for (const bucket of standardBuckets) {
58
- const bucketKey = bucket.toString();
59
- if (value <= bucket) {
60
- buckets[bucketKey] = (buckets[bucketKey] || 0) + 1;
61
- }
62
- }
63
- buckets["+Inf"] = (buckets["+Inf"] || 0) + 1;
64
- }
65
- return { buckets, sum, count };
66
- }
67
- async getStats() {
68
- const baseStats = await this.storage.getStats();
69
- if (!baseStats) {
70
- return undefined;
71
- }
72
- const rangesMap = {};
73
- for (const [rangeKey, rangeMetrics] of Object.entries(baseStats.ranges)) {
74
- rangesMap[rangeKey] = {
75
- capacity: this.size,
76
- fill_level: rangeMetrics.fill_level,
77
- fill_ratio: this.size > 0 ? rangeMetrics.fill_level / this.size : 0,
78
- refill_requests_total: [],
79
- refill_failures_total: [],
80
- starvation_events_total: 0,
81
- refill_duration_ms: [],
82
- latency_ms: [],
83
- };
84
- }
85
- const allRangeKeys = new Set();
86
- Object.keys(baseStats.ranges).forEach((k) => allRangeKeys.add(k));
87
- this.refillRequests.forEach((r) => allRangeKeys.add(r.rng_range));
88
- this.refillFailures.forEach((r) => allRangeKeys.add(r.rng_range));
89
- this.starvationEvents.forEach((r) => allRangeKeys.add(r.rng_range));
90
- this.refillDurations.forEach((r) => allRangeKeys.add(r.rng_range));
91
- this.latencies.forEach((r) => allRangeKeys.add(r.rng_range));
92
- allRangeKeys.forEach((rangeKey) => {
93
- if (!rangesMap[rangeKey]) {
94
- rangesMap[rangeKey] = {
95
- capacity: this.size,
96
- fill_level: 0,
97
- fill_ratio: 0,
98
- refill_requests_total: [],
99
- refill_failures_total: [],
100
- starvation_events_total: 0,
101
- refill_duration_ms: [],
102
- latency_ms: [],
103
- };
104
- }
105
- });
106
- this.refillRequests.forEach((req) => {
107
- if (!rangesMap[req.rng_range]) {
108
- rangesMap[req.rng_range] = {
109
- capacity: this.size,
110
- fill_level: 0,
111
- fill_ratio: 0,
112
- refill_requests_total: [],
113
- refill_failures_total: [],
114
- starvation_events_total: 0,
115
- refill_duration_ms: [],
116
- latency_ms: [],
117
- };
118
- }
119
- rangesMap[req.rng_range].refill_requests_total.push({
120
- engine_type: req.engine_type,
121
- reason: req.reason,
122
- count: req.count,
123
- });
124
- });
125
- this.refillFailures.forEach((fail) => {
126
- if (!rangesMap[fail.rng_range]) {
127
- rangesMap[fail.rng_range] = {
128
- capacity: this.size,
129
- fill_level: 0,
130
- fill_ratio: 0,
131
- refill_requests_total: [],
132
- refill_failures_total: [],
133
- starvation_events_total: 0,
134
- refill_duration_ms: [],
135
- latency_ms: [],
136
- };
137
- }
138
- rangesMap[fail.rng_range].refill_failures_total.push({
139
- engine_type: fail.engine_type,
140
- reason: fail.reason,
141
- error: fail.error,
142
- count: fail.count,
143
- });
144
- });
145
- this.starvationEvents.forEach((starvation) => {
146
- if (!rangesMap[starvation.rng_range]) {
147
- rangesMap[starvation.rng_range] = {
148
- capacity: this.size,
149
- fill_level: 0,
150
- fill_ratio: 0,
151
- refill_requests_total: [],
152
- refill_failures_total: [],
153
- starvation_events_total: 0,
154
- refill_duration_ms: [],
155
- latency_ms: [],
156
- };
157
- }
158
- rangesMap[starvation.rng_range].starvation_events_total +=
159
- starvation.count;
160
- });
161
- this.refillDurations.forEach((duration) => {
162
- if (!rangesMap[duration.rng_range]) {
163
- rangesMap[duration.rng_range] = {
164
- capacity: this.size,
165
- fill_level: 0,
166
- fill_ratio: 0,
167
- refill_requests_total: [],
168
- refill_failures_total: [],
169
- starvation_events_total: 0,
170
- refill_duration_ms: [],
171
- latency_ms: [],
172
- };
173
- }
174
- const { buckets, sum, count } = this.createHistogramBuckets(duration.values);
175
- rangesMap[duration.rng_range].refill_duration_ms.push({
176
- engine_type: duration.engine_type,
177
- reason: duration.reason,
178
- buckets,
179
- sum,
180
- count,
181
- });
182
- });
183
- this.latencies.forEach((latency) => {
184
- if (!rangesMap[latency.rng_range]) {
185
- rangesMap[latency.rng_range] = {
186
- capacity: this.size,
187
- fill_level: 0,
188
- fill_ratio: 0,
189
- refill_requests_total: [],
190
- refill_failures_total: [],
191
- starvation_events_total: 0,
192
- refill_duration_ms: [],
193
- latency_ms: [],
194
- };
195
- }
196
- const { buckets, sum, count } = this.createHistogramBuckets(latency.values);
197
- rangesMap[latency.rng_range].latency_ms.push({
198
- engine_type: latency.engine_type,
199
- reason: latency.reason,
200
- buckets,
201
- sum,
202
- count,
203
- });
204
- });
205
- return {
206
- ...baseStats,
207
- ranges: rangesMap,
208
- };
19
+ return 'default';
209
20
  }
210
21
  async getNumbersByRange(min, max, count = 1) {
211
22
  const rangeKey = this.getRangeKey(min, max);
212
23
  let requestStartTime = Date.now();
213
24
  const buffer = await this.storage.getBufferByRange(min, max);
214
25
  if (!buffer) {
215
- this.incrementCounter(this.starvationEvents, rangeKey);
26
+ this.metrics.rngBufferStarvationEventsTotal.inc({
27
+ rng_range: rangeKey,
28
+ engine_type: this.getEngineType(),
29
+ });
216
30
  const newBuffer = this.createBuffer(min, max);
217
31
  await this.storage.saveBuffer(newBuffer);
218
32
  setTimeout(async () => {
219
33
  requestStartTime = Date.now();
220
- await this.fillUpBuffer(newBuffer, "initial");
34
+ await this.fillUpBuffer(newBuffer, 'initial');
221
35
  const latency = Date.now() - requestStartTime;
222
- this.recordHistogram(this.latencies, rangeKey, latency);
36
+ this.metrics.rngBufferLatencyMs.observe({
37
+ rng_range: rangeKey,
38
+ engine_type: this.getEngineType(),
39
+ }, latency);
223
40
  }, exports.FILL_UP_BUFFER_DELAY);
224
41
  return undefined;
225
42
  }
226
43
  const item = await this.storage.getFromBuffer(buffer, count);
227
44
  if (!item) {
228
- this.incrementCounter(this.starvationEvents, rangeKey);
45
+ this.metrics.rngBufferStarvationEventsTotal.inc({
46
+ rng_range: rangeKey,
47
+ engine_type: this.getEngineType(),
48
+ });
229
49
  setTimeout(async () => {
230
50
  requestStartTime = Date.now();
231
- await this.fillUpBuffer(buffer, "starvation");
51
+ await this.fillUpBuffer(buffer, 'starvation');
232
52
  const latency = Date.now() - requestStartTime;
233
- this.recordHistogram(this.latencies, rangeKey, latency);
53
+ this.metrics.rngBufferLatencyMs.observe({
54
+ rng_range: rangeKey,
55
+ engine_type: this.getEngineType(),
56
+ }, latency);
234
57
  }, exports.FILL_UP_BUFFER_DELAY);
235
58
  return undefined;
236
59
  }
237
60
  setTimeout(async () => {
238
61
  requestStartTime = Date.now();
239
- await this.fillUpBuffer(buffer, "refill");
62
+ await this.fillUpBuffer(buffer, 'refill');
240
63
  const latency = Date.now() - requestStartTime;
241
- this.recordHistogram(this.latencies, rangeKey, latency);
64
+ this.metrics.rngBufferLatencyMs.observe({
65
+ rng_range: rangeKey,
66
+ engine_type: this.getEngineType(),
67
+ }, latency);
242
68
  }, exports.FILL_UP_BUFFER_DELAY);
243
69
  return item;
244
70
  }
245
- async fillUpBuffer(buffer, reason = "scheduled") {
71
+ async fillUpBuffer(buffer, reason = 'scheduled') {
246
72
  const rangeKey = this.getRangeKey(buffer.range.min, buffer.range.max);
247
73
  const refillStartTime = Date.now();
248
- this.incrementCounter(this.refillRequests, rangeKey, reason);
74
+ this.metrics.rngBufferRefillRequestsTotal.inc({
75
+ rng_range: rangeKey,
76
+ engine_type: this.getEngineType(),
77
+ reason,
78
+ });
249
79
  try {
250
80
  const values = await this.pullNumberByBuffer(buffer);
251
81
  if (values.length === 0 || buffer.items.length >= this.maxSize) {
252
82
  const duration = Date.now() - refillStartTime;
253
- this.recordHistogram(this.refillDurations, rangeKey, duration, reason);
83
+ this.metrics.rngBufferRefillDurationMs.observe({
84
+ rng_range: rangeKey,
85
+ engine_type: this.getEngineType(),
86
+ }, duration);
254
87
  return;
255
88
  }
256
89
  await this.storage.addItemsToBuffer(buffer, values);
90
+ this.metrics.rngBufferFillLevel.set({
91
+ rng_range: rangeKey,
92
+ engine_type: this.getEngineType(),
93
+ }, buffer.items.length);
94
+ this.metrics.rngBufferFillRatio.set({
95
+ rng_range: rangeKey,
96
+ engine_type: this.getEngineType(),
97
+ }, buffer.items.length / this.size);
257
98
  const duration = Date.now() - refillStartTime;
258
- this.recordHistogram(this.refillDurations, rangeKey, duration, reason);
99
+ this.metrics.rngBufferRefillDurationMs.observe({
100
+ rng_range: rangeKey,
101
+ engine_type: this.getEngineType(),
102
+ }, duration);
259
103
  }
260
104
  catch (error) {
261
105
  const errorMessage = error instanceof Error ? error.message : String(error);
262
- this.incrementCounter(this.refillFailures, rangeKey, reason, errorMessage);
106
+ this.metrics.rngBufferRefillFailuresTotal.inc({
107
+ rng_range: rangeKey,
108
+ engine_type: this.getEngineType(),
109
+ reason,
110
+ error: errorMessage,
111
+ });
263
112
  const duration = Date.now() - refillStartTime;
264
- this.recordHistogram(this.refillDurations, rangeKey, duration, reason);
113
+ this.metrics.rngBufferRefillDurationMs.observe({
114
+ rng_range: rangeKey,
115
+ engine_type: this.getEngineType(),
116
+ }, duration);
265
117
  throw error;
266
118
  }
267
119
  }
@@ -278,6 +130,10 @@ class RingBuffer {
278
130
  return values.result;
279
131
  }
280
132
  createBuffer(min, max) {
133
+ this.metrics.rngBufferCapacity.set({
134
+ rng_range: this.getRangeKey(min, max),
135
+ engine_type: this.getEngineType(),
136
+ }, this.size);
281
137
  return {
282
138
  items: [],
283
139
  range: { min, max },
@@ -285,4 +141,4 @@ class RingBuffer {
285
141
  }
286
142
  }
287
143
  exports.RingBuffer = RingBuffer;
288
- //# sourceMappingURL=ring-buffer.js.map
144
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluZy1idWZmZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcmluZy1idWZmZXIvcmluZy1idWZmZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBRUEsaURBQTBEO0FBRzdDLFFBQUEsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBU3RDLE1BQWEsVUFBVTtJQVFyQixZQUFZLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFvQjtRQUN0RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksMEJBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU8sV0FBVyxDQUFDLEdBQVcsRUFBRSxHQUFXO1FBQzFDLE9BQU8sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVPLGFBQWE7UUFDbkIsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FDckIsR0FBVyxFQUNYLEdBQVcsRUFDWCxLQUFLLEdBQUcsQ0FBQztRQUVULE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzVDLElBQUksZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWxDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxD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QU0sQ0FBQztRQUM5QyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNmLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztZQUM1RCxHQUFHLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ3JCLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUc7WUFDckIsS0FBSztTQUNOLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDLE1BQTJCLENBQUM7SUFDNUMsQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FDaEM7WUFDRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDO1lBQ3JDLFdBQVcsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFO1NBQ2xDLEVBQ0QsSUFBSSxDQUFDLElBQUksQ0FDVixDQUFDO1FBRUYsT0FBTztZQUNMLEtBQUssRUFBRSxFQUFFO1lBQ1QsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtTQUNwQixDQUFDO0lBQ0osQ0FBQztDQUNGO0FBdk1ELGdDQXVNQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJpbmdCdWZmZXJWYWx1ZSwgU2luZ2xlUmluZ0J1ZmZlciB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSbmdDbGllbnRDb3JlIH0gZnJvbSAnLi4vY29yZS9ybmctY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUmluZ1N0b3JhZ2UsIFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi9yaW5nLXN0b3JhZ2UnO1xuaW1wb3J0IHsgUm5nQnVmZmVyTWV0cmljc0hhbmRsZXJzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9tZXRyaWNzJztcblxuZXhwb3J0IGNvbnN0IEZJTExfVVBfQlVGRkVSX0RFTEFZID0gNTtcblxuZXhwb3J0IGludGVyZmFjZSBSaW5nQnVmZmVyQ29uZmlnIHtcbiAgc2l6ZT86IG51bWJlcjtcbiAgY2xpZW50Q29yZTogUm5nQ2xpZW50Q29yZTtcbiAgc3RvcmFnZVR5cGU6IFN0b3JhZ2VUeXBlO1xuICBtZXRyaWNzOiBSbmdCdWZmZXJNZXRyaWNzSGFuZGxlcnM7XG59XG5cbmV4cG9ydCBjbGFzcyBSaW5nQnVmZmVyIHtcbiAgcHJpdmF0ZSBzaXplOiBudW1iZXI7XG4gIHByaXZhdGUgbWF4U2l6ZTogbnVtYmVyO1xuICBwcml2YXRlIGNsaWVudENvcmU6IFJuZ0NsaWVudENvcmU7XG4gIHByaXZhdGUgc3RvcmFnZVR5cGU6IFN0b3JhZ2VUeXBlO1xuICBwcml2YXRlIHN0b3JhZ2U6IFJpbmdTdG9yYWdlO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3M6IFJuZ0J1ZmZlck1ldHJpY3NIYW5kbGVycztcblxuICBjb25zdHJ1Y3Rvcih7IHNpemUsIGNsaWVudENvcmUsIHN0b3JhZ2VUeXBlLCBtZXRyaWNzIH06IFJpbmdCdWZmZXJDb25maWcpIHtcbiAgICB0aGlzLnNpemUgPSBzaXplID8/IDIwMDA7XG4gICAgdGhpcy5tYXhTaXplID0gdGhpcy5zaXplICogMjtcbiAgICB0aGlzLmNsaWVudENvcmUgPSBjbGllbnRDb3JlO1xuICAgIHRoaXMuc3RvcmFnZVR5cGUgPSBzdG9yYWdlVHlwZTtcbiAgICB0aGlzLnN0b3JhZ2UgPSBuZXcgUmluZ1N0b3JhZ2Uoc3RvcmFnZVR5cGUpO1xuICAgIHRoaXMubWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBwcml2YXRlIGdldFJhbmdlS2V5KG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke21pbn0tJHttYXh9YDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RW5naW5lVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnZGVmYXVsdCc7XG4gIH1cblxuICBhc3luYyBnZXROdW1iZXJzQnlSYW5nZShcbiAgICBtaW46IG51bWJlcixcbiAgICBtYXg6IG51bWJlcixcbiAgICBjb3VudCA9IDFcbiAgKTogUHJvbWlzZTxSaW5nQnVmZmVyVmFsdWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IHJhbmdlS2V5ID0gdGhpcy5nZXRSYW5nZUtleShtaW4sIG1heCk7XG4gICAgbGV0IHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3QgYnVmZmVyID0gYXdhaXQgdGhpcy5zdG9yYWdlLmdldEJ1ZmZlckJ5UmFuZ2UobWluLCBtYXgpO1xuICAgIGlmICghYnVmZmVyKSB7XG4gICAgICB0aGlzLm1ldHJpY3Mucm5nQnVmZmVyU3RhcnZhdGlvbkV2ZW50c1RvdGFsLmluYyh7XG4gICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgIGVuZ2luZV90eXBlOiB0aGlzLmdldEVuZ2luZVR5cGUoKSxcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBuZXdCdWZmZXIgPSB0aGlzLmNyZWF0ZUJ1ZmZlcihtaW4sIG1heCk7XG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2Uuc2F2ZUJ1ZmZlcihuZXdCdWZmZXIpO1xuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGxVcEJ1ZmZlcihuZXdCdWZmZXIsICdpbml0aWFsJyk7XG4gICAgICAgIGNvbnN0IGxhdGVuY3kgPSBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlckxhdGVuY3lNcy5vYnNlcnZlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgICAgICBlbmdpbmVfdHlwZTogdGhpcy5nZXRFbmdpbmVUeXBlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXRlbmN5XG4gICAgICAgICk7XG4gICAgICB9LCBGSUxMX1VQX0JVRkZFUl9ERUxBWSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbSA9IGF3YWl0IHRoaXMuc3RvcmFnZS5nZXRGcm9tQnVmZmVyKGJ1ZmZlciwgY291bnQpO1xuICAgIGlmICghaXRlbSkge1xuICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlclN0YXJ2YXRpb25FdmVudHNUb3RhbC5pbmMoe1xuICAgICAgICBybmdfcmFuZ2U6IHJhbmdlS2V5LFxuICAgICAgICBlbmdpbmVfdHlwZTogdGhpcy5nZXRFbmdpbmVUeXBlKCksXG4gICAgICB9KTtcblxuICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgICAgICBhd2FpdCB0aGlzLmZpbGxVcEJ1ZmZlcihidWZmZXIsICdzdGFydmF0aW9uJyk7XG4gICAgICAgIGNvbnN0IGxhdGVuY3kgPSBEYXRlLm5vdygpIC0gcmVxdWVzdFN0YXJ0VGltZTtcbiAgICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlckxhdGVuY3lNcy5vYnNlcnZlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgICAgICBlbmdpbmVfdHlwZTogdGhpcy5nZXRFbmdpbmVUeXBlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsYXRlbmN5XG4gICAgICAgICk7XG4gICAgICB9LCBGSUxMX1VQX0JVRkZFUl9ERUxBWSk7XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICByZXF1ZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgIGF3YWl0IHRoaXMuZmlsbFVwQnVmZmVyKGJ1ZmZlciwgJ3JlZmlsbCcpO1xuICAgICAgY29uc3QgbGF0ZW5jeSA9IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lO1xuICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlckxhdGVuY3lNcy5vYnNlcnZlKFxuICAgICAgICB7XG4gICAgICAgICAgcm5nX3JhbmdlOiByYW5nZUtleSxcbiAgICAgICAgICBlbmdpbmVfdHlwZTogdGhpcy5nZXRFbmdpbmVUeXBlKCksXG4gICAgICAgIH0sXG4gICAgICAgIGxhdGVuY3lcbiAgICAgICk7XG4gICAgfSwgRklMTF9VUF9CVUZGRVJfREVMQVkpO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICBhc3luYyBmaWxsVXBCdWZmZXIoXG4gICAgYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyLFxuICAgIHJlYXNvbjogc3RyaW5nID0gJ3NjaGVkdWxlZCdcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmFuZ2VLZXkgPSB0aGlzLmdldFJhbmdlS2V5KGJ1ZmZlci5yYW5nZS5taW4sIGJ1ZmZlci5yYW5nZS5tYXgpO1xuICAgIGNvbnN0IHJlZmlsbFN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLm1ldHJpY3Mucm5nQnVmZmVyUmVmaWxsUmVxdWVzdHNUb3RhbC5pbmMoe1xuICAgICAgcm5nX3JhbmdlOiByYW5nZUtleSxcbiAgICAgIGVuZ2luZV90eXBlOiB0aGlzLmdldEVuZ2luZVR5cGUoKSxcbiAgICAgIHJlYXNvbixcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB2YWx1ZXMgPSBhd2FpdCB0aGlzLnB1bGxOdW1iZXJCeUJ1ZmZlcihidWZmZXIpO1xuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDAgfHwgYnVmZmVyLml0ZW1zLmxlbmd0aCA+PSB0aGlzLm1heFNpemUpIHtcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVmaWxsU3RhcnRUaW1lO1xuICAgICAgICB0aGlzLm1ldHJpY3Mucm5nQnVmZmVyUmVmaWxsRHVyYXRpb25Ncy5vYnNlcnZlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgICAgICBlbmdpbmVfdHlwZTogdGhpcy5nZXRFbmdpbmVUeXBlKCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkdXJhdGlvblxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBhd2FpdCB0aGlzLnN0b3JhZ2UuYWRkSXRlbXNUb0J1ZmZlcihidWZmZXIsIHZhbHVlcyk7XG4gICAgICB0aGlzLm1ldHJpY3Mucm5nQnVmZmVyRmlsbExldmVsLnNldChcbiAgICAgICAge1xuICAgICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgICAgZW5naW5lX3R5cGU6IHRoaXMuZ2V0RW5naW5lVHlwZSgpLFxuICAgICAgICB9LFxuICAgICAgICBidWZmZXIuaXRlbXMubGVuZ3RoXG4gICAgICApO1xuICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlckZpbGxSYXRpby5zZXQoXG4gICAgICAgIHtcbiAgICAgICAgICBybmdfcmFuZ2U6IHJhbmdlS2V5LFxuICAgICAgICAgIGVuZ2luZV90eXBlOiB0aGlzLmdldEVuZ2luZVR5cGUoKSxcbiAgICAgICAgfSxcbiAgICAgICAgYnVmZmVyLml0ZW1zLmxlbmd0aCAvIHRoaXMuc2l6ZVxuICAgICAgKTtcblxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVmaWxsU3RhcnRUaW1lO1xuICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlclJlZmlsbER1cmF0aW9uTXMub2JzZXJ2ZShcbiAgICAgICAge1xuICAgICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgICAgZW5naW5lX3R5cGU6IHRoaXMuZ2V0RW5naW5lVHlwZSgpLFxuICAgICAgICB9LFxuICAgICAgICBkdXJhdGlvblxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlclJlZmlsbEZhaWx1cmVzVG90YWwuaW5jKHtcbiAgICAgICAgcm5nX3JhbmdlOiByYW5nZUtleSxcbiAgICAgICAgZW5naW5lX3R5cGU6IHRoaXMuZ2V0RW5naW5lVHlwZSgpLFxuICAgICAgICByZWFzb24sXG4gICAgICAgIGVycm9yOiBlcnJvck1lc3NhZ2UsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZHVyYXRpb24gPSBEYXRlLm5vdygpIC0gcmVmaWxsU3RhcnRUaW1lO1xuICAgICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlclJlZmlsbER1cmF0aW9uTXMub2JzZXJ2ZShcbiAgICAgICAge1xuICAgICAgICAgIHJuZ19yYW5nZTogcmFuZ2VLZXksXG4gICAgICAgICAgZW5naW5lX3R5cGU6IHRoaXMuZ2V0RW5naW5lVHlwZSgpLFxuICAgICAgICB9LFxuICAgICAgICBkdXJhdGlvblxuICAgICAgKTtcblxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgcHVsbE51bWJlckJ5QnVmZmVyKFxuICAgIGJ1ZmZlcjogU2luZ2xlUmluZ0J1ZmZlclxuICApOiBQcm9taXNlPFJpbmdCdWZmZXJWYWx1ZVtdPiB7XG4gICAgY29uc3QgY291bnQgPSB0aGlzLnNpemUgLSBidWZmZXIuaXRlbXMubGVuZ3RoO1xuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IGF3YWl0IHRoaXMuY2xpZW50Q29yZS5nZXRCYXRjaE51bWJlcnNXaXRoU2VlZHMoe1xuICAgICAgbWluOiBidWZmZXIucmFuZ2UubWluLFxuICAgICAgbWF4OiBidWZmZXIucmFuZ2UubWF4LFxuICAgICAgY291bnQsXG4gICAgfSk7XG4gICAgcmV0dXJuIHZhbHVlcy5yZXN1bHQgYXMgUmluZ0J1ZmZlclZhbHVlW107XG4gIH1cblxuICBjcmVhdGVCdWZmZXIobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogU2luZ2xlUmluZ0J1ZmZlciB7XG4gICAgdGhpcy5tZXRyaWNzLnJuZ0J1ZmZlckNhcGFjaXR5LnNldChcbiAgICAgIHtcbiAgICAgICAgcm5nX3JhbmdlOiB0aGlzLmdldFJhbmdlS2V5KG1pbiwgbWF4KSxcbiAgICAgICAgZW5naW5lX3R5cGU6IHRoaXMuZ2V0RW5naW5lVHlwZSgpLFxuICAgICAgfSxcbiAgICAgIHRoaXMuc2l6ZVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IFtdLFxuICAgICAgcmFuZ2U6IHsgbWluLCBtYXggfSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,12 +1,10 @@
1
- import { RingBufferStats, RingBufferValue, SingleRingBuffer } from "./interfaces";
1
+ import { RingBufferValue, SingleRingBuffer } from './interfaces';
2
2
  export declare class RingStorageMemory {
3
3
  private storage;
4
4
  constructor();
5
- getStats(): Promise<RingBufferStats>;
6
5
  getBufferName(min: number, max: number): string;
7
6
  saveBuffer(buffer: SingleRingBuffer): Promise<void>;
8
7
  getBuffer(name: string): Promise<SingleRingBuffer>;
9
8
  getFromBuffer(name: string, count?: number): Promise<RingBufferValue[] | undefined>;
10
9
  addItemsToBuffer(buffer: SingleRingBuffer, items: RingBufferValue[]): Promise<void>;
11
10
  }
12
- //# sourceMappingURL=ring-storage-memory.d.ts.map
@@ -5,30 +5,6 @@ class RingStorageMemory {
5
5
  constructor() {
6
6
  this.storage = {};
7
7
  }
8
- async getStats() {
9
- const ranges = {};
10
- for (const key in this.storage) {
11
- ranges[key] = this.storage[key].items.length;
12
- }
13
- const partialRanges = {};
14
- for (const [key, fillLevel] of Object.entries(ranges)) {
15
- partialRanges[key] = {
16
- capacity: 0,
17
- fill_level: fillLevel,
18
- fill_ratio: 0,
19
- refill_requests_total: [],
20
- refill_failures_total: [],
21
- starvation_events_total: 0,
22
- refill_duration_ms: [],
23
- latency_ms: [],
24
- };
25
- }
26
- return {
27
- id: "in_memory",
28
- size: Object.keys(this.storage).length,
29
- ranges: partialRanges,
30
- };
31
- }
32
8
  getBufferName(min, max) {
33
9
  return `${min}-${max}`;
34
10
  }
@@ -59,4 +35,4 @@ class RingStorageMemory {
59
35
  }
60
36
  }
61
37
  exports.RingStorageMemory = RingStorageMemory;
62
- //# sourceMappingURL=ring-storage-memory.js.map
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluZy1zdG9yYWdlLW1lbW9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yaW5nLWJ1ZmZlci9yaW5nLXN0b3JhZ2UtbWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsaUJBQWlCO0lBRzVCO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUNwQyxPQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQztJQUNYLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUNqQixJQUFZLEVBQ1osS0FBSyxHQUFHLENBQUM7UUFFVCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsTUFBd0IsRUFDeEIsS0FBd0I7UUFFeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBN0NELDhDQTZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJpbmdCdWZmZXJWYWx1ZSwgU2luZ2xlUmluZ0J1ZmZlciB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSaW5nU3RvcmFnZU1lbW9yeSB7XG4gIHByaXZhdGUgc3RvcmFnZTogeyBba2V5OiBzdHJpbmddOiBTaW5nbGVSaW5nQnVmZmVyIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdG9yYWdlID0ge307XG4gIH1cblxuICBnZXRCdWZmZXJOYW1lKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke21pbn0tJHttYXh9YDtcbiAgfVxuXG4gIGFzeW5jIHNhdmVCdWZmZXIoYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdG9yYWdlW3RoaXMuZ2V0QnVmZmVyTmFtZShidWZmZXIucmFuZ2UubWluLCBidWZmZXIucmFuZ2UubWF4KV0gPVxuICAgICAgYnVmZmVyO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnVmZmVyKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U2luZ2xlUmluZ0J1ZmZlcj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VbbmFtZV07XG4gIH1cblxuICBhc3luYyBnZXRGcm9tQnVmZmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb3VudCA9IDFcbiAgKTogUHJvbWlzZTxSaW5nQnVmZmVyVmFsdWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuZ2V0QnVmZmVyKG5hbWUpO1xuICAgIGlmICghYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoYnVmZmVyLml0ZW1zLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IGJ1ZmZlci5pdGVtcy5zcGxpY2UoMCwgY291bnQpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGFzeW5jIGFkZEl0ZW1zVG9CdWZmZXIoXG4gICAgYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyLFxuICAgIGl0ZW1zOiBSaW5nQnVmZmVyVmFsdWVbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBidWZmZXIuaXRlbXMucHVzaCguLi5pdGVtcyk7XG4gICAgYXdhaXQgdGhpcy5zYXZlQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn1cbiJdfQ==
@@ -1,4 +1,4 @@
1
- import { RingBufferStats, RingBufferValue, SingleRingBuffer } from "./interfaces";
1
+ import { RingBufferValue, SingleRingBuffer } from './interfaces';
2
2
  export declare enum StorageType {
3
3
  IN_MEMORY = "in_memory",
4
4
  REDIS = "redis"
@@ -7,11 +7,9 @@ export declare class RingStorage {
7
7
  private readonly storageType;
8
8
  private storage;
9
9
  constructor(storageType: StorageType);
10
- getStats(): Promise<RingBufferStats | undefined>;
11
10
  getFromBuffer(buffer: SingleRingBuffer, count?: number): Promise<RingBufferValue[] | undefined>;
12
11
  saveBuffer(buffer: SingleRingBuffer): Promise<void>;
13
12
  getBufferByRange(min: number, max: number): Promise<SingleRingBuffer | undefined>;
14
13
  getBuffer(name: string): Promise<SingleRingBuffer | undefined>;
15
14
  addItemsToBuffer(buffer: SingleRingBuffer, items: RingBufferValue[]): Promise<void>;
16
15
  }
17
- //# sourceMappingURL=ring-storage.d.ts.map
@@ -12,12 +12,6 @@ class RingStorage {
12
12
  this.storageType = storageType;
13
13
  this.storage = new ring_storage_memory_1.RingStorageMemory();
14
14
  }
15
- async getStats() {
16
- if (this.storageType === StorageType.IN_MEMORY) {
17
- return this.storage.getStats();
18
- }
19
- return undefined;
20
- }
21
15
  async getFromBuffer(buffer, count = 1) {
22
16
  if (this.storageType === StorageType.IN_MEMORY) {
23
17
  return this.storage.getFromBuffer(this.storage.getBufferName(buffer.range.min, buffer.range.max), count);
@@ -48,4 +42,4 @@ class RingStorage {
48
42
  }
49
43
  }
50
44
  exports.RingStorage = RingStorage;
51
- //# sourceMappingURL=ring-storage.js.map
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluZy1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JpbmctYnVmZmVyL3Jpbmctc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMEQ7QUFFMUQsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLHNDQUF1QixDQUFBO0lBQ3ZCLDhCQUFlLENBQUE7QUFDakIsQ0FBQyxFQUhXLFdBQVcsMkJBQVgsV0FBVyxRQUd0QjtBQUVELE1BQWEsV0FBVztJQUV0QixZQUE2QixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUNBQWlCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsTUFBd0IsRUFDeEIsS0FBSyxHQUFHLENBQUM7UUFFVCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQzlELEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEdBQVcsRUFDWCxHQUFXO1FBRVgsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFZO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsTUFBd0IsRUFDeEIsS0FBd0I7UUFFeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbERELGtDQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJpbmdCdWZmZXJWYWx1ZSwgU2luZ2xlUmluZ0J1ZmZlciB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSaW5nU3RvcmFnZU1lbW9yeSB9IGZyb20gJy4vcmluZy1zdG9yYWdlLW1lbW9yeSc7XG5cbmV4cG9ydCBlbnVtIFN0b3JhZ2VUeXBlIHtcbiAgSU5fTUVNT1JZID0gJ2luX21lbW9yeScsXG4gIFJFRElTID0gJ3JlZGlzJyxcbn1cblxuZXhwb3J0IGNsYXNzIFJpbmdTdG9yYWdlIHtcbiAgcHJpdmF0ZSBzdG9yYWdlOiBSaW5nU3RvcmFnZU1lbW9yeTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGUpIHtcbiAgICB0aGlzLnN0b3JhZ2UgPSBuZXcgUmluZ1N0b3JhZ2VNZW1vcnkoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZyb21CdWZmZXIoXG4gICAgYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyLFxuICAgIGNvdW50ID0gMVxuICApOiBQcm9taXNlPFJpbmdCdWZmZXJWYWx1ZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuc3RvcmFnZVR5cGUgPT09IFN0b3JhZ2VUeXBlLklOX01FTU9SWSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXRGcm9tQnVmZmVyKFxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0QnVmZmVyTmFtZShidWZmZXIucmFuZ2UubWluLCBidWZmZXIucmFuZ2UubWF4KSxcbiAgICAgICAgY291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBzYXZlQnVmZmVyKGJ1ZmZlcjogU2luZ2xlUmluZ0J1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSBTdG9yYWdlVHlwZS5JTl9NRU1PUlkpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5zYXZlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QnVmZmVyQnlSYW5nZShcbiAgICBtaW46IG51bWJlcixcbiAgICBtYXg6IG51bWJlclxuICApOiBQcm9taXNlPFNpbmdsZVJpbmdCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy5zdG9yYWdlVHlwZSA9PT0gU3RvcmFnZVR5cGUuSU5fTUVNT1JZKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldEJ1ZmZlcih0aGlzLnN0b3JhZ2UuZ2V0QnVmZmVyTmFtZShtaW4sIG1heCkpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnVmZmVyKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U2luZ2xlUmluZ0J1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSBTdG9yYWdlVHlwZS5JTl9NRU1PUlkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0QnVmZmVyKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgYWRkSXRlbXNUb0J1ZmZlcihcbiAgICBidWZmZXI6IFNpbmdsZVJpbmdCdWZmZXIsXG4gICAgaXRlbXM6IFJpbmdCdWZmZXJWYWx1ZVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSBTdG9yYWdlVHlwZS5JTl9NRU1PUlkpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5hZGRJdGVtc1RvQnVmZmVyKGJ1ZmZlciwgaXRlbXMpO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -1,6 +1,5 @@
1
- import { RngClientConfig } from "./interfaces/client-interfaces";
2
- import { RngSingleResponse, RngBatchResponse } from "./http/http-client.types";
3
- import { RingBufferStats } from "./ring-buffer/interfaces";
1
+ import { RngClientConfig } from './interfaces/client-interfaces';
2
+ import { RngSingleResponse, RngBatchResponse } from './http/http-client.types';
4
3
  /**
5
4
  * RNG Client - High-level API for client-side random number generation
6
5
  *
@@ -23,7 +22,6 @@ export declare class RngClient {
23
22
  value: number;
24
23
  seed: number;
25
24
  }>;
26
- getRingBuffersStats(): Promise<RingBufferStats | undefined>;
27
25
  /**
28
26
  * Get a batch of random numbers
29
27
  * @param min Minimum value (inclusive)
@@ -73,4 +71,3 @@ export declare class RngClient {
73
71
  */
74
72
  getRandomFloat(seed?: number): Promise<RngSingleResponse>;
75
73
  }
76
- //# sourceMappingURL=rng-client.d.ts.map
@@ -4,6 +4,7 @@ exports.RngClient = void 0;
4
4
  const rng_client_core_1 = require("./core/rng-client-core");
5
5
  const ring_storage_1 = require("./ring-buffer/ring-storage");
6
6
  const ring_buffer_1 = require("./ring-buffer/ring-buffer");
7
+ const default_metrics_handlers_1 = require("./metrics/default-metrics-handlers");
7
8
  /**
8
9
  * RNG Client - High-level API for client-side random number generation
9
10
  *
@@ -18,6 +19,10 @@ class RngClient {
18
19
  size: config.poolingSize || 2000,
19
20
  clientCore: this.clientCore,
20
21
  storageType: config.storageType || ring_storage_1.StorageType.IN_MEMORY,
22
+ metrics: {
23
+ ...default_metrics_handlers_1.defaultMetricsHandlers,
24
+ ...config.metrics?.handlers,
25
+ },
21
26
  });
22
27
  }
23
28
  /**
@@ -44,9 +49,6 @@ class RngClient {
44
49
  const response = await this.clientCore.getSingleNumber(data);
45
50
  return { value: response.result, seed: response.seed };
46
51
  }
47
- async getRingBuffersStats() {
48
- return this.ringBuffer.getStats();
49
- }
50
52
  /**
51
53
  * Get a batch of random numbers
52
54
  * @param min Minimum value (inclusive)
@@ -149,4 +151,4 @@ class RngClient {
149
151
  }
150
152
  }
151
153
  exports.RngClient = RngClient;
152
- //# sourceMappingURL=rng-client.js.map
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm5nLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ybmctY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUF1RDtBQUV2RCw2REFBeUQ7QUFTekQsMkRBQXVEO0FBQ3ZELGlGQUE0RTtBQUU1RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLFNBQVM7SUFJcEIsWUFBWSxNQUF1QjtRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksK0JBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSwwQkFBVyxDQUFDLFNBQVM7WUFDeEQsT0FBTyxFQUFFO2dCQUNQLEdBQUcsaURBQXNCO2dCQUN6QixHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUTthQUM1QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUNuQixHQUFXLEVBQ1gsR0FBVyxFQUNYLElBQWE7UUFFYixNQUFNLElBQUksR0FBcUI7WUFDN0IsR0FBRztZQUNILEdBQUc7U0FDSixDQUFDO1FBQ0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxFQUFF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QUcsRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBYTtRQUNoQyxNQUFNLElBQUksR0FBMEIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUF4S0QsOEJBd0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm5nQ2xpZW50Q29yZSB9IGZyb20gJy4vY29yZS9ybmctY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUm5nQ2xpZW50Q29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NsaWVudC1pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi9yaW5nLWJ1ZmZlci9yaW5nLXN0b3JhZ2UnO1xuaW1wb3J0IHtcbiAgUm5nU2luZ2xlUmVzcG9uc2UsXG4gIFJuZ0JhdGNoUmVzcG9uc2UsXG4gIFJuZ1NpbmdsZVJlcXVlc3QsXG4gIFJuZ0JhdGNoUmVxdWVzdCxcbiAgUm5nU2luZ2xlRmxvYXRSZXF1ZXN0LFxuICBSbmdCYXRjaEZsb2F0UmVxdWVzdCxcbn0gZnJvbSAnLi9odHRwL2h0dHAtY2xpZW50LnR5cGVzJztcbmltcG9ydCB7IFJpbmdCdWZmZXIgfSBmcm9tICcuL3JpbmctYnVmZmVyL3JpbmctYnVmZmVyJztcbmltcG9ydCB7IGRlZmF1bHRNZXRyaWNzSGFuZGxlcnMgfSBmcm9tICcuL21ldHJpY3MvZGVmYXVsdC1tZXRyaWNzLWhhbmRsZXJzJztcblxuLyoqXG4gKiBSTkcgQ2xpZW50IC0gSGlnaC1sZXZlbCBBUEkgZm9yIGNsaWVudC1zaWRlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvblxuICpcbiAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGNsaWVudC1zaWRlIFJORyBvcGVyYXRpb25zLlxuICogSXQgcHJvdmlkZXMgYSBzaW1wbGUgaW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nIHJhbmRvbSBudW1iZXJzXG4gKiB2aWEgSFRUUCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFJORyBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgUm5nQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRDb3JlOiBSbmdDbGllbnRDb3JlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJpbmdCdWZmZXI6IFJpbmdCdWZmZXI7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBSbmdDbGllbnRDb25maWcpIHtcbiAgICB0aGlzLmNsaWVudENvcmUgPSBuZXcgUm5nQ2xpZW50Q29yZShjb25maWcpO1xuICAgIHRoaXMucmluZ0J1ZmZlciA9IG5ldyBSaW5nQnVmZmVyKHtcbiAgICAgIHNpemU6IGNvbmZpZy5wb29saW5nU2l6ZSB8fCAyMDAwLFxuICAgICAgY2xpZW50Q29yZTogdGhpcy5jbGllbnRDb3JlLFxuICAgICAgc3RvcmFnZVR5cGU6IGNvbmZpZy5zdG9yYWdlVHlwZSB8fCBTdG9yYWdlVHlwZS5JTl9NRU1PUlksXG4gICAgICBtZXRyaWNzOiB7XG4gICAgICAgIC4uLmRlZmF1bHRNZXRyaWNzSGFuZGxlcnMsXG4gICAgICAgIC4uLmNvbmZpZy5tZXRyaWNzPy5oYW5kbGVycyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIHJhbmRvbSBudW1iZXJcbiAgICogQHBhcmFtIG1pbiBNaW5pbXVtIHZhbHVlIChpbmNsdXNpdmUpXG4gICAqIEBwYXJhbSBtYXggTWF4aW11bSB2YWx1ZSAoaW5jbHVzaXZlKVxuICAgKiBAcGFyYW0gc2VlZCBPcHRpb25hbCBzZWVkIGZvciBkZXRlcm1pbmlzdGljIGdlbmVyYXRpb25cbiAgICogQHJldHVybnMgUmFuZG9tIGludGVnZXIgcmVzdWx0XG4gICAqL1xuICBhc3luYyBnZXRTaW5nbGVOdW1iZXIoXG4gICAgbWluOiBudW1iZXIsXG4gICAgbWF4OiBudW1iZXIsXG4gICAgc2VlZD86IG51bWJlclxuICApOiBQcm9taXNlPHsgdmFsdWU6IG51bWJlcjsgc2VlZDogbnVtYmVyIH0+IHtcbiAgICBjb25zdCBkYXRhOiBSbmdTaW5nbGVSZXF1ZXN0ID0ge1xuICAgICAgbWluLFxuICAgICAgbWF4LFxuICAgIH07XG4gICAgaWYgKHNlZWQpIHtcbiAgICAgIGRhdGEuc2VlZCA9IHNlZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSBhd2FpdCB0aGlzLnJpbmdCdWZmZXIuZ2V0TnVtYmVyc0J5UmFuZ2UobWluLCBtYXgsIDEpO1xuICAgICAgaWYgKGl0ZW0gJiYgaXRlbS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiBpdGVtWzBdLnZhbHVlLCBzZWVkOiBpdGVtWzBdLnNlZWQgfTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudENvcmUuZ2V0U2luZ2xlTnVtYmVyKGRhdGEpO1xuICAgIHJldHVybiB7IHZhbHVlOiByZXNwb25zZS5yZXN1bHQsIHNlZWQ6IHJlc3BvbnNlLnNlZWQgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBiYXRjaCBvZiByYW5kb20gbnVtYmVyc1xuICAgKiBAcGFyYW0gbWluIE1pbmltdW0gdmFsdWUgKGluY2x1c2l2ZSlcbiAgICogQHBhcmFtIG1heCBNYXhpbXVtIHZhbHVlIChpbmNsdXNpdmUpXG4gICAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgdmFsdWVzIHRvIGdlbmVyYXRlXG4gICAqIEBwYXJhbSBzZWVkIE9wdGlvbmFsIHNlZWQgZm9yIGRldGVybWluaXN0aWMgZ2VuZXJhdGlvblxuICAgKiBAcmV0dXJucyBCYXRjaCBvZiByYW5kb20gaW50ZWdlcnNcbiAgICovXG4gIGFzeW5jIGdldEJhdGNoTnVtYmVycyhcbiAgICBtaW46IG51bWJlcixcbiAgICBtYXg6IG51bWJlcixcbiAgICBjb3VudDogbnVtYmVyLFxuICAgIHNlZWQ/OiBudW1iZXJcbiAgKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IGRhdGE6IFJuZ0JhdGNoUmVxdWVzdCA9IHtcbiAgICAgIG1pbixcbiAgICAgIG1heCxcbiAgICAgIGNvdW50LFxuICAgIH07XG4gICAgaWYgKHNlZWQpIHtcbiAgICAgIGRhdGEuc2VlZCA9IHNlZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnRDb3JlLmdldEJhdGNoTnVtYmVycyhkYXRhKTtcblxuICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgYmF0Y2ggb2YgcmFuZG9tIG51bWJlcnMgd2l0aCBzZWVkc1xuICAgKiBAcGFyYW0gbWluIE1pbmltdW0gdmFsdWUgKGluY2x1c2l2ZSlcbiAgICogQHBhcmFtIG1heCBNYXhpbXVtIHZhbHVlIChpbmNsdXNpdmUpXG4gICAqIEBwYXJhbSBjb3VudCBOdW1iZXIgb2YgdmFsdWVzIHRvIGdlbmVyYXRlXG4gICAqIEBwYXJhbSBzZWVkIE9wdGlvbmFsIHNlZWQgZm9yIGRldGVybWluaXN0aWMgZ2VuZXJhdGlvblxuICAgKiBAcmV0dXJucyBCYXRjaCBvZiByYW5kb20gaW50ZWdlcnNcbiAgICovXG4gIGFzeW5jIGdldEJhdGNoTnVtYmVyc1dpdGhTZWVkcyhcbiAgICBtaW46IG51bWJlcixcbiAgICBtYXg6IG51bWJlcixcbiAgICBjb3VudDogbnVtYmVyLFxuICAgIHNlZWQ/OiBudW1iZXJcbiAgKTogUHJvbWlzZTx7IHZhbHVlOiBudW1iZXI7IHNlZWQ6IG51bWJlciB9W10+IHtcbiAgICBjb25zdCBkYXRhOiBSbmdCYXRjaFJlcXVlc3QgPSB7XG4gICAgICBtaW4sXG4gICAgICBtYXgsXG4gICAgICBjb3VudCxcbiAgICB9O1xuICAgIGlmIChzZWVkKSB7XG4gICAgICBkYXRhLnNlZWQgPSBzZWVkO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVtID0gYXdhaXQgdGhpcy5yaW5nQnVmZmVyLmdldE51bWJlcnNCeVJhbmdlKG1pbiwgbWF4LCBjb3VudCk7XG4gICAgICBpZiAoaXRlbSAmJiBpdGVtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5jbGllbnRDb3JlLmdldEJhdGNoTnVtYmVyc1dpdGhTZWVkcyhkYXRhKTtcblxuICAgIHJldHVybiByZXNwb25zZS5yZXN1bHQubWFwKChpdGVtKSA9PiAoe1xuICAgICAgdmFsdWU6IGl0ZW0udmFsdWUsXG4gICAgICBzZWVkOiBpdGVtLnNlZWQsXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSByYW5kb20gZmxvYXRcbiAgICogQHBhcmFtIHNlZWQgT3B0aW9uYWwgc2VlZCBmb3IgZGV0ZXJtaW5pc3RpYyBnZW5lcmF0aW9uXG4gICAqIEByZXR1cm5zIFJhbmRvbSBmbG9hdCByZXN1bHRcbiAgICovXG4gIGFzeW5jIGdldFNpbmdsZUZsb2F0KHNlZWQ/OiBudW1iZXIpOiBQcm9taXNlPFJuZ1NpbmdsZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZGF0YTogUm5nU2luZ2xlRmxvYXRSZXF1ZXN0ID0ge307XG4gICAgaWYgKHNlZWQpIHtcbiAgICAgIGRhdGEuc2VlZCA9IHNlZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmNsaWVudENvcmUuZ2V0U2luZ2xlRmxvYXQoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgYmF0Y2ggb2YgcmFuZG9tIGZsb2F0c1xuICAgKiBAcGFyYW0gY291bnQgTnVtYmVyIG9mIHZhbHVlcyB0byBnZW5lcmF0ZVxuICAgKiBAcGFyYW0gc2VlZCBPcHRpb25hbCBzZWVkIGZvciBkZXRlcm1pbmlzdGljIGdlbmVyYXRpb25cbiAgICogQHJldHVybnMgQmF0Y2ggb2YgcmFuZG9tIGZsb2F0c1xuICAgKi9cbiAgYXN5bmMgZ2V0QmF0Y2hGbG9hdHMoXG4gICAgY291bnQ6IG51bWJlcixcbiAgICBzZWVkPzogbnVtYmVyXG4gICk6IFByb21pc2U8Um5nQmF0Y2hSZXNwb25zZT4ge1xuICAgIGNvbnN0IGRhdGE6IFJuZ0JhdGNoRmxvYXRSZXF1ZXN0ID0geyBjb3VudCB9O1xuICAgIGlmIChzZWVkKSB7XG4gICAgICBkYXRhLnNlZWQgPSBzZWVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnRDb3JlLmdldEJhdGNoRmxvYXRzKGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhIHJhbmRvbSBudW1iZXJcbiAgICogQHBhcmFtIG1pbiBNaW5pbXVtIHZhbHVlIChpbmNsdXNpdmUpXG4gICAqIEBwYXJhbSBtYXggTWF4aW11bSB2YWx1ZSAoaW5jbHVzaXZlKVxuICAgKiBAcGFyYW0gc2VlZCBPcHRpb25hbCBzZWVkIGZvciBkZXRlcm1pbmlzdGljIGdlbmVyYXRpb25cbiAgICogQHJldHVybnMgUmFuZG9tIGludGVnZXIgcmVzdWx0XG4gICAqL1xuICBhc3luYyBnZXRSYW5kb21OdW1iZXIoXG4gICAgbWluOiBudW1iZXIsXG4gICAgbWF4OiBudW1iZXIsXG4gICAgc2VlZD86IG51bWJlclxuICApOiBQcm9taXNlPFJuZ1NpbmdsZVJlc3BvbnNlPiB7XG4gICAgY29uc3QgZGF0YTogUm5nU2luZ2xlUmVxdWVzdCA9IHsgbWluLCBtYXggfTtcbiAgICBpZiAoc2VlZCkge1xuICAgICAgZGF0YS5zZWVkID0gc2VlZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50Q29yZS5nZXRSYW5kb21OdW1iZXIoZGF0YSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgcmFuZG9tIGZsb2F0XG4gICAqIEBwYXJhbSBzZWVkIE9wdGlvbmFsIHNlZWQgZm9yIGRldGVybWluaXN0aWMgZ2VuZXJhdGlvblxuICAgKiBAcmV0dXJucyBSYW5kb20gZmxvYXQgcmVzdWx0XG4gICAqL1xuICBhc3luYyBnZXRSYW5kb21GbG9hdChzZWVkPzogbnVtYmVyKTogUHJvbWlzZTxSbmdTaW5nbGVSZXNwb25zZT4ge1xuICAgIGNvbnN0IGRhdGE6IFJuZ1NpbmdsZUZsb2F0UmVxdWVzdCA9IHt9O1xuICAgIGlmIChzZWVkKSB7XG4gICAgICBkYXRhLnNlZWQgPSBzZWVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jbGllbnRDb3JlLmdldFJhbmRvbUZsb2F0KGRhdGEpO1xuICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@omnitronix/rng-client-core",
3
- "version": "1.0.10",
3
+ "version": "1.1.2",
4
4
  "description": "Simple HTTP client for random number generation",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -43,7 +43,8 @@
43
43
  },
44
44
  "files": [
45
45
  "dist/**/*",
46
- "README.md"
46
+ "README.md",
47
+ "src"
47
48
  ],
48
49
  "publishConfig": {
49
50
  "registry": "https://registry.npmjs.org/"