@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.
- package/dist/core/rng-client-core.d.ts +0 -1
- package/dist/core/rng-client-core.js +1 -1
- package/dist/errors/rng-errors.d.ts +0 -1
- package/dist/errors/rng-errors.js +1 -1
- package/dist/grpc/grpc-rng-client.d.ts +0 -1
- package/dist/grpc/grpc-rng-client.js +1 -1
- package/dist/grpc/grpc-rng-interface.d.ts +0 -1
- package/dist/grpc/grpc-rng-interface.js +1 -1
- package/dist/http/http-client.types.d.ts +0 -1
- package/dist/http/http-client.types.js +1 -1
- package/dist/http/http-rng-client.d.ts +0 -1
- package/dist/http/http-rng-client.js +1 -1
- package/dist/http/rest-client.d.ts +0 -1
- package/dist/http/rest-client.js +1 -1
- package/dist/http/rng-client.interface.d.ts +0 -1
- package/dist/http/rng-client.interface.js +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +1 -1
- package/dist/interfaces/client-interfaces.d.ts +6 -3
- package/dist/interfaces/client-interfaces.js +1 -1
- package/dist/interfaces/metrics.d.ts +30 -0
- package/dist/interfaces/metrics.js +3 -0
- package/dist/metrics/default-metrics-handlers.d.ts +2 -0
- package/dist/metrics/default-metrics-handlers.js +23 -0
- package/dist/ring-buffer/interfaces.d.ts +0 -38
- package/dist/ring-buffer/interfaces.js +1 -1
- package/dist/ring-buffer/ring-buffer.d.ts +7 -14
- package/dist/ring-buffer/ring-buffer.js +63 -207
- package/dist/ring-buffer/ring-storage-memory.d.ts +1 -3
- package/dist/ring-buffer/ring-storage-memory.js +1 -25
- package/dist/ring-buffer/ring-storage.d.ts +1 -3
- package/dist/ring-buffer/ring-storage.js +1 -7
- package/dist/rng-client.d.ts +2 -5
- package/dist/rng-client.js +6 -4
- package/package.json +3 -2
- package/src/__tests__/grpc-rng-client.test.ts +167 -0
- package/src/__tests__/rng-client-core.integration.test.ts +117 -0
- package/src/__tests__/rng-client-core.test.ts +249 -0
- package/src/__tests__/rng-client-grpc.test.ts +324 -0
- package/src/__tests__/rng-client.test.ts +296 -0
- package/src/core/rng-client-core.ts +80 -0
- package/src/errors/rng-errors.ts +96 -0
- package/src/grpc/grpc-rng-client.ts +162 -0
- package/src/grpc/grpc-rng-interface.ts +36 -0
- package/src/http/http-client.types.ts +48 -0
- package/src/http/http-rng-client.ts +140 -0
- package/src/http/rest-client.ts +151 -0
- package/src/http/rng-client.interface.ts +22 -0
- package/src/index.ts +21 -0
- package/src/interfaces/client-interfaces.ts +15 -0
- package/src/interfaces/metrics.ts +38 -0
- package/src/metrics/default-metrics-handlers.ts +29 -0
- package/src/ring-buffer/interfaces.ts +9 -0
- package/src/ring-buffer/ring-buffer.ts +214 -0
- package/src/ring-buffer/ring-storage-memory.ts +48 -0
- package/src/ring-buffer/ring-storage.ts +59 -0
- package/src/rng-client.ts +190 -0
- package/src/rng.proto +102 -0
- package/dist/core/rng-client-core.d.ts.map +0 -1
- package/dist/core/rng-client-core.js.map +0 -1
- package/dist/errors/rng-errors.d.ts.map +0 -1
- package/dist/errors/rng-errors.js.map +0 -1
- package/dist/grpc/grpc-rng-client.d.ts.map +0 -1
- package/dist/grpc/grpc-rng-client.js.map +0 -1
- package/dist/grpc/grpc-rng-interface.d.ts.map +0 -1
- package/dist/grpc/grpc-rng-interface.js.map +0 -1
- package/dist/http/http-client.types.d.ts.map +0 -1
- package/dist/http/http-client.types.js.map +0 -1
- package/dist/http/http-rng-client.d.ts.map +0 -1
- package/dist/http/http-rng-client.js.map +0 -1
- package/dist/http/rest-client.d.ts.map +0 -1
- package/dist/http/rest-client.js.map +0 -1
- package/dist/http/rng-client.interface.d.ts.map +0 -1
- package/dist/http/rng-client.interface.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/interfaces/client-interfaces.d.ts.map +0 -1
- package/dist/interfaces/client-interfaces.js.map +0 -1
- package/dist/ring-buffer/interfaces.d.ts.map +0 -1
- package/dist/ring-buffer/interfaces.js.map +0 -1
- package/dist/ring-buffer/ring-buffer.d.ts.map +0 -1
- package/dist/ring-buffer/ring-buffer.js.map +0 -1
- package/dist/ring-buffer/ring-storage-memory.d.ts.map +0 -1
- package/dist/ring-buffer/ring-storage-memory.js.map +0 -1
- package/dist/ring-buffer/ring-storage.d.ts.map +0 -1
- package/dist/ring-buffer/ring-storage.js.map +0 -1
- package/dist/rng-client.d.ts.map +0 -1
- 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
|
|
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.
|
|
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,
|
|
34
|
+
await this.fillUpBuffer(newBuffer, 'initial');
|
|
221
35
|
const latency = Date.now() - requestStartTime;
|
|
222
|
-
this.
|
|
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.
|
|
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,
|
|
51
|
+
await this.fillUpBuffer(buffer, 'starvation');
|
|
232
52
|
const latency = Date.now() - requestStartTime;
|
|
233
|
-
this.
|
|
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,
|
|
62
|
+
await this.fillUpBuffer(buffer, 'refill');
|
|
240
63
|
const latency = Date.now() - requestStartTime;
|
|
241
|
-
this.
|
|
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 =
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 {
|
|
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=
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluZy1zdG9yYWdlLW1lbW9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yaW5nLWJ1ZmZlci9yaW5nLXN0b3JhZ2UtbWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsaUJBQWlCO0lBRzVCO1FBQ0UsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVELGFBQWEsQ0FBQyxHQUFXLEVBQUUsR0FBVztRQUNwQyxPQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQztJQUNYLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUFDLElBQVk7UUFDMUIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUNqQixJQUFZLEVBQ1osS0FBSyxHQUFHLENBQUM7UUFFVCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsS0FBSyxFQUFFLENBQUM7WUFDaEMsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsTUFBd0IsRUFDeEIsS0FBd0I7UUFFeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQztRQUM1QixNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDaEMsQ0FBQztDQUNGO0FBN0NELDhDQTZDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJpbmdCdWZmZXJWYWx1ZSwgU2luZ2xlUmluZ0J1ZmZlciB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5cbmV4cG9ydCBjbGFzcyBSaW5nU3RvcmFnZU1lbW9yeSB7XG4gIHByaXZhdGUgc3RvcmFnZTogeyBba2V5OiBzdHJpbmddOiBTaW5nbGVSaW5nQnVmZmVyIH07XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zdG9yYWdlID0ge307XG4gIH1cblxuICBnZXRCdWZmZXJOYW1lKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke21pbn0tJHttYXh9YDtcbiAgfVxuXG4gIGFzeW5jIHNhdmVCdWZmZXIoYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5zdG9yYWdlW3RoaXMuZ2V0QnVmZmVyTmFtZShidWZmZXIucmFuZ2UubWluLCBidWZmZXIucmFuZ2UubWF4KV0gPVxuICAgICAgYnVmZmVyO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnVmZmVyKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U2luZ2xlUmluZ0J1ZmZlcj4ge1xuICAgIHJldHVybiB0aGlzLnN0b3JhZ2VbbmFtZV07XG4gIH1cblxuICBhc3luYyBnZXRGcm9tQnVmZmVyKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBjb3VudCA9IDFcbiAgKTogUHJvbWlzZTxSaW5nQnVmZmVyVmFsdWVbXSB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGJ1ZmZlciA9IGF3YWl0IHRoaXMuZ2V0QnVmZmVyKG5hbWUpO1xuICAgIGlmICghYnVmZmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoYnVmZmVyLml0ZW1zLmxlbmd0aCA8IGNvdW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBpdGVtcyA9IGJ1ZmZlci5pdGVtcy5zcGxpY2UoMCwgY291bnQpO1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGFzeW5jIGFkZEl0ZW1zVG9CdWZmZXIoXG4gICAgYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyLFxuICAgIGl0ZW1zOiBSaW5nQnVmZmVyVmFsdWVbXVxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBidWZmZXIuaXRlbXMucHVzaCguLi5pdGVtcyk7XG4gICAgYXdhaXQgdGhpcy5zYXZlQnVmZmVyKGJ1ZmZlcik7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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=
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmluZy1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3JpbmctYnVmZmVyL3Jpbmctc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwrREFBMEQ7QUFFMUQsSUFBWSxXQUdYO0FBSEQsV0FBWSxXQUFXO0lBQ3JCLHNDQUF1QixDQUFBO0lBQ3ZCLDhCQUFlLENBQUE7QUFDakIsQ0FBQyxFQUhXLFdBQVcsMkJBQVgsV0FBVyxRQUd0QjtBQUVELE1BQWEsV0FBVztJQUV0QixZQUE2QixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUNuRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksdUNBQWlCLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FDakIsTUFBd0IsRUFDeEIsS0FBSyxHQUFHLENBQUM7UUFFVCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQy9DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQzlELEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQXdCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsZ0JBQWdCLENBQ3BCLEdBQVcsRUFDWCxHQUFXO1FBRVgsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVMsQ0FBQyxJQUFZO1FBQzFCLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDL0MsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxnQkFBZ0IsQ0FDcEIsTUFBd0IsRUFDeEIsS0FBd0I7UUFFeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFdBQVcsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUMvQyxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBbERELGtDQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJpbmdCdWZmZXJWYWx1ZSwgU2luZ2xlUmluZ0J1ZmZlciB9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBSaW5nU3RvcmFnZU1lbW9yeSB9IGZyb20gJy4vcmluZy1zdG9yYWdlLW1lbW9yeSc7XG5cbmV4cG9ydCBlbnVtIFN0b3JhZ2VUeXBlIHtcbiAgSU5fTUVNT1JZID0gJ2luX21lbW9yeScsXG4gIFJFRElTID0gJ3JlZGlzJyxcbn1cblxuZXhwb3J0IGNsYXNzIFJpbmdTdG9yYWdlIHtcbiAgcHJpdmF0ZSBzdG9yYWdlOiBSaW5nU3RvcmFnZU1lbW9yeTtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBzdG9yYWdlVHlwZTogU3RvcmFnZVR5cGUpIHtcbiAgICB0aGlzLnN0b3JhZ2UgPSBuZXcgUmluZ1N0b3JhZ2VNZW1vcnkoKTtcbiAgfVxuXG4gIGFzeW5jIGdldEZyb21CdWZmZXIoXG4gICAgYnVmZmVyOiBTaW5nbGVSaW5nQnVmZmVyLFxuICAgIGNvdW50ID0gMVxuICApOiBQcm9taXNlPFJpbmdCdWZmZXJWYWx1ZVtdIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYgKHRoaXMuc3RvcmFnZVR5cGUgPT09IFN0b3JhZ2VUeXBlLklOX01FTU9SWSkge1xuICAgICAgcmV0dXJuIHRoaXMuc3RvcmFnZS5nZXRGcm9tQnVmZmVyKFxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0QnVmZmVyTmFtZShidWZmZXIucmFuZ2UubWluLCBidWZmZXIucmFuZ2UubWF4KSxcbiAgICAgICAgY291bnRcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBhc3luYyBzYXZlQnVmZmVyKGJ1ZmZlcjogU2luZ2xlUmluZ0J1ZmZlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSBTdG9yYWdlVHlwZS5JTl9NRU1PUlkpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5zYXZlQnVmZmVyKGJ1ZmZlcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QnVmZmVyQnlSYW5nZShcbiAgICBtaW46IG51bWJlcixcbiAgICBtYXg6IG51bWJlclxuICApOiBQcm9taXNlPFNpbmdsZVJpbmdCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodGhpcy5zdG9yYWdlVHlwZSA9PT0gU3RvcmFnZVR5cGUuSU5fTUVNT1JZKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yYWdlLmdldEJ1ZmZlcih0aGlzLnN0b3JhZ2UuZ2V0QnVmZmVyTmFtZShtaW4sIG1heCkpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgZ2V0QnVmZmVyKG5hbWU6IHN0cmluZyk6IFByb21pc2U8U2luZ2xlUmluZ0J1ZmZlciB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSBTdG9yYWdlVHlwZS5JTl9NRU1PUlkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JhZ2UuZ2V0QnVmZmVyKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgYWRkSXRlbXNUb0J1ZmZlcihcbiAgICBidWZmZXI6IFNpbmdsZVJpbmdCdWZmZXIsXG4gICAgaXRlbXM6IFJpbmdCdWZmZXJWYWx1ZVtdXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnN0b3JhZ2VUeXBlID09PSBTdG9yYWdlVHlwZS5JTl9NRU1PUlkpIHtcbiAgICAgIHRoaXMuc3RvcmFnZS5hZGRJdGVtc1RvQnVmZmVyKGJ1ZmZlciwgaXRlbXMpO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/dist/rng-client.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { RngClientConfig } from
|
|
2
|
-
import { RngSingleResponse, RngBatchResponse } from
|
|
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
|
package/dist/rng-client.js
CHANGED
|
@@ -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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm5nLWNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ybmctY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDREQUF1RDtBQUV2RCw2REFBeUQ7QUFTekQsMkRBQXVEO0FBQ3ZELGlGQUE0RTtBQUU1RTs7Ozs7O0dBTUc7QUFDSCxNQUFhLFNBQVM7SUFJcEIsWUFBWSxNQUF1QjtRQUNqQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksK0JBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksd0JBQVUsQ0FBQztZQUMvQixJQUFJLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSxJQUFJO1lBQ2hDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsSUFBSSwwQkFBVyxDQUFDLFNBQVM7WUFDeEQsT0FBTyxFQUFFO2dCQUNQLEdBQUcsaURBQXNCO2dCQUN6QixHQUFHLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUTthQUM1QjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUNuQixHQUFXLEVBQ1gsR0FBVyxFQUNYLElBQWE7UUFFYixNQUFNLElBQUksR0FBcUI7WUFDN0IsR0FBRztZQUNILEdBQUc7U0FDSixDQUFDO1FBQ0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDbEUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEQsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdELE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsR0FBVyxFQUNYLEdBQVcsRUFDWCxLQUFhLEVBQ2IsSUFBYTtRQUViLE1BQU0sSUFBSSxHQUFvQjtZQUM1QixHQUFHO1lBQ0gsR0FBRztZQUNILEtBQUs7U0FDTixDQUFDO1FBQ0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdELE9BQU8sUUFBUSxDQUFDLE1BQU0sQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FDNUIsR0FBVyxFQUNYLEdBQVcsRUFDWCxLQUFhLEVBQ2IsSUFBYTtRQUViLE1BQU0sSUFBSSxHQUFvQjtZQUM1QixHQUFHO1lBQ0gsR0FBRztZQUNILEtBQUs7U0FDTixDQUFDO1FBQ0YsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEUsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDNUIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV0RSxPQUFPLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3BDLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSztZQUNqQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7U0FDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBYTtRQUNoQyxNQUFNLElBQUksR0FBMEIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsY0FBYyxDQUNsQixLQUFhLEVBQ2IsSUFBYTtRQUViLE1BQU0sSUFBSSxHQUF5QixFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsR0FBVyxFQUNYLEdBQVcsRUFDWCxJQUFhO1FBRWIsTUFBTSxJQUFJLEdBQXFCLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzVDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBYTtRQUNoQyxNQUFNLElBQUksR0FBMEIsRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxDQUFDO0NBQ0Y7QUF4S0QsOEJBd0tDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUm5nQ2xpZW50Q29yZSB9IGZyb20gJy4vY29yZS9ybmctY2xpZW50LWNvcmUnO1xuaW1wb3J0IHsgUm5nQ2xpZW50Q29uZmlnIH0gZnJvbSAnLi9pbnRlcmZhY2VzL2NsaWVudC1pbnRlcmZhY2VzJztcbmltcG9ydCB7IFN0b3JhZ2VUeXBlIH0gZnJvbSAnLi9yaW5nLWJ1ZmZlci9yaW5nLXN0b3JhZ2UnO1xuaW1wb3J0IHtcbiAgUm5nU2luZ2xlUmVzcG9uc2UsXG4gIFJuZ0JhdGNoUmVzcG9uc2UsXG4gIFJuZ1NpbmdsZVJlcXVlc3QsXG4gIFJuZ0JhdGNoUmVxdWVzdCxcbiAgUm5nU2luZ2xlRmxvYXRSZXF1ZXN0LFxuICBSbmdCYXRjaEZsb2F0UmVxdWVzdCxcbn0gZnJvbSAnLi9odHRwL2h0dHAtY2xpZW50LnR5cGVzJztcbmltcG9ydCB7IFJpbmdCdWZmZXIgfSBmcm9tICcuL3JpbmctYnVmZmVyL3JpbmctYnVmZmVyJztcbmltcG9ydCB7IGRlZmF1bHRNZXRyaWNzSGFuZGxlcnMgfSBmcm9tICcuL21ldHJpY3MvZGVmYXVsdC1tZXRyaWNzLWhhbmRsZXJzJztcblxuLyoqXG4gKiBSTkcgQ2xpZW50IC0gSGlnaC1sZXZlbCBBUEkgZm9yIGNsaWVudC1zaWRlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvblxuICpcbiAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIGNsaWVudC1zaWRlIFJORyBvcGVyYXRpb25zLlxuICogSXQgcHJvdmlkZXMgYSBzaW1wbGUgaW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nIHJhbmRvbSBudW1iZXJzXG4gKiB2aWEgSFRUUCBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFJORyBzZXJ2aWNlLlxuICovXG5leHBvcnQgY2xhc3MgUm5nQ2xpZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBjbGllbnRDb3JlOiBSbmdDbGllbnRDb3JlO1xuICBwcml2YXRlIHJlYWRvbmx5IHJpbmdCdWZmZXI6IFJpbmdCdWZmZXI7XG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBSbmdDbGllbnRDb25maWcpIHtcbiAgICB0aGlzLmNsaWVudENvcmUgPSBuZXcgUm5nQ2xpZW50Q29yZShjb25maWcpO1xuICAgIHRoaXMucmluZ0J1ZmZlciA9IG5ldyBSaW5nQnVmZmVyKHtcbiAgICAgIHNpemU6IGNvbmZpZy5wb29saW5nU2l6ZSB8fCAyMDAwLFxuICAgICAgY2xpZW50Q29yZTogdGhpcy5jbGllbnRDb3JlLFxuICAgICAgc3RvcmFnZVR5cGU6IGNvbmZpZy5zdG9yYWdlVHlwZSB8fCBTdG9yYWdlVHlwZS5JTl9NRU1PUlksXG4gICAgICBtZXRyaWNzOiB7XG4gICAgICAgIC4uLmRlZmF1bHRNZXRyaWNzSGFuZGxlcnMsXG4gICAgICAgIC4uLmNvbmZpZy5tZXRyaWNzPy5oYW5kbGVycyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIHJhbmRvbSBudW1iZXJcbiAgICogQHBhcmFtIG1pbiBNaW5pbXVtIHZhbHVlIChpbmNsdXNpdmUpXG4gICAqIEBwYXJhbSBtYXggTWF4aW11bSB2YWx1ZSAoaW5jbHVzaXZlKVxuICAgKiBAcGFyYW0gc2VlZCBPcHRpb25hbCBzZWVkIGZvciBkZXRlcm1pbmlzdGljIGdlbmVyYXRpb25cbiAgICogQHJldHVybnMgUmFuZG9tIGludGVnZXIgcmVzdWx0XG4gICAqL1xuICBhc3luYyBnZXRTaW5nbGVOdW1iZXIoXG4gICAgbWluOiBudW1iZXIsXG4gICAgbWF4OiBudW1iZXIsXG4gICAgc2VlZD86IG51bWJlclxuICApOiBQcm9taXNlPHsgdmFsdWU6IG51bWJlcjsgc2VlZDogbnVtYmVyIH0+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.
|
|
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/"
|