@omnitronix/rng-client-core 1.0.0 → 1.0.4
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/README.md +40 -3
- package/dist/core/rng-client-core.d.ts +7 -4
- package/dist/core/rng-client-core.d.ts.map +1 -1
- package/dist/core/rng-client-core.js +22 -11
- package/dist/core/rng-client-core.js.map +1 -1
- package/dist/grpc/grpc-rng-client.d.ts +14 -0
- package/dist/grpc/grpc-rng-client.d.ts.map +1 -0
- package/dist/grpc/grpc-rng-client.js +128 -0
- package/dist/grpc/grpc-rng-client.js.map +1 -0
- package/dist/grpc/grpc-rng-interface.d.ts +10 -0
- package/dist/grpc/grpc-rng-interface.d.ts.map +1 -0
- package/dist/grpc/grpc-rng-interface.js +3 -0
- package/dist/grpc/grpc-rng-interface.js.map +1 -0
- package/dist/http/http-client.types.d.ts +18 -0
- package/dist/http/http-client.types.d.ts.map +1 -1
- package/dist/http/http-rng-client.d.ts +5 -3
- package/dist/http/http-rng-client.d.ts.map +1 -1
- package/dist/http/http-rng-client.js +18 -9
- package/dist/http/http-rng-client.js.map +1 -1
- package/dist/http/rng-client.interface.d.ts +5 -3
- package/dist/http/rng-client.interface.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces/client-interfaces.d.ts +6 -0
- package/dist/interfaces/client-interfaces.d.ts.map +1 -1
- package/dist/ring-buffer/interfaces.d.ts +19 -0
- package/dist/ring-buffer/interfaces.d.ts.map +1 -0
- package/dist/ring-buffer/interfaces.js +3 -0
- package/dist/ring-buffer/interfaces.js.map +1 -0
- package/dist/ring-buffer/ring-buffer.d.ts +23 -0
- package/dist/ring-buffer/ring-buffer.d.ts.map +1 -0
- package/dist/ring-buffer/ring-buffer.js +63 -0
- package/dist/ring-buffer/ring-buffer.js.map +1 -0
- package/dist/ring-buffer/ring-storage-memory.d.ts +12 -0
- package/dist/ring-buffer/ring-storage-memory.d.ts.map +1 -0
- package/dist/ring-buffer/ring-storage-memory.js +49 -0
- package/dist/ring-buffer/ring-storage-memory.js.map +1 -0
- package/dist/ring-buffer/ring-storage.d.ts +17 -0
- package/dist/ring-buffer/ring-storage.d.ts.map +1 -0
- package/dist/ring-buffer/ring-storage.js +51 -0
- package/dist/ring-buffer/ring-storage.js.map +1 -0
- package/dist/rng-client.d.ts +3 -0
- package/dist/rng-client.d.ts.map +1 -1
- package/dist/rng-client.js +48 -14
- package/dist/rng-client.js.map +1 -1
- package/dist/rng.proto +102 -0
- package/package.json +6 -3
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# RNG Client Core
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Multi-protocol client library for random number generation with the Omnitronix RNG service.
|
|
4
4
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
|
-
- **HTTP
|
|
7
|
+
- **HTTP & gRPC Support**: Choose between HTTP or gRPC communication
|
|
8
8
|
- **Single & Batch Operations**: Generate single numbers or batches
|
|
9
9
|
- **Float Support**: Dedicated endpoints for float generation
|
|
10
10
|
- **TypeScript Support**: Full type safety and IntelliSense
|
|
11
11
|
- **Error Handling**: Robust error handling with detailed messages
|
|
12
|
-
- **Easy Integration**: Simple configuration with
|
|
12
|
+
- **Easy Integration**: Simple configuration with server URL and optional gRPC URL
|
|
13
13
|
|
|
14
14
|
## Installation
|
|
15
15
|
|
|
@@ -59,6 +59,8 @@ import { RngClient, RngClientConfig } from "@omnitronix/rng-client-core";
|
|
|
59
59
|
|
|
60
60
|
const config: RngClientConfig = {
|
|
61
61
|
serverUrl: "https://rng.example.com:3001", // RNG service URL
|
|
62
|
+
grpcUrl: "rng.example.com:50051", // gRPC service URL
|
|
63
|
+
clientMethod: "rest", // 'rest' or 'grpc'
|
|
62
64
|
// Optional parameters for future use:
|
|
63
65
|
// bufferSize: 10000,
|
|
64
66
|
// refillThreshold: 0.2,
|
|
@@ -70,6 +72,39 @@ const config: RngClientConfig = {
|
|
|
70
72
|
const rngClient = new RngClient(config);
|
|
71
73
|
```
|
|
72
74
|
|
|
75
|
+
### Protocol Selection
|
|
76
|
+
|
|
77
|
+
The client uses the `clientMethod` parameter to determine the communication protocol:
|
|
78
|
+
|
|
79
|
+
- **REST/HTTP**: Set `clientMethod: "rest"` (default)
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
const rngClient = new RngClient({
|
|
83
|
+
serverUrl: "http://localhost:3001",
|
|
84
|
+
clientMethod: "rest",
|
|
85
|
+
});
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
- **gRPC**: Set `clientMethod: "grpc"` and provide `grpcUrl`
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const rngClient = new RngClient({
|
|
92
|
+
serverUrl: "http://localhost:3001", // Required but not used
|
|
93
|
+
grpcUrl: "localhost:50051",
|
|
94
|
+
clientMethod: "grpc",
|
|
95
|
+
});
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
- **Both parameters required**: Both `serverUrl` and `grpcUrl` must be provided
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const rngClient = new RngClient({
|
|
102
|
+
serverUrl: "http://localhost:3001",
|
|
103
|
+
grpcUrl: "localhost:50051",
|
|
104
|
+
clientMethod: "rest", // or "grpc"
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
73
108
|
### Error Handling
|
|
74
109
|
|
|
75
110
|
```typescript
|
|
@@ -100,6 +135,8 @@ constructor(config: RngClientConfig)
|
|
|
100
135
|
```
|
|
101
136
|
|
|
102
137
|
- `config.serverUrl`: RNG service URL (required)
|
|
138
|
+
- `config.grpcUrl`: gRPC service URL (required)
|
|
139
|
+
- `config.clientMethod`: Communication method - 'rest' or 'grpc' (required)
|
|
103
140
|
- `config.bufferSize`: Optional buffer size for future use
|
|
104
141
|
- `config.refillThreshold`: Optional refill threshold for future use
|
|
105
142
|
- `config.connectionTimeout`: Optional connection timeout
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { RngClientConfig } from "../interfaces/client-interfaces";
|
|
2
|
-
import { RngBatchRequest, RngBatchResponse, RngSingleRequest, RngSingleResponse } from "../http/http-client.types";
|
|
2
|
+
import { RngBatchFloatRequest, RngBatchRequest, RngBatchResponse, RngBatchResponseWithSeeds, RngSingleFloatRequest, RngSingleRequest, RngSingleResponse } from "../http/http-client.types";
|
|
3
3
|
export declare class RngClientCore {
|
|
4
4
|
private readonly config;
|
|
5
5
|
private readonly rngClient;
|
|
6
6
|
constructor(config: RngClientConfig);
|
|
7
7
|
getRandomNumber(request: RngSingleRequest): Promise<RngSingleResponse>;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
getSingleNumber(request: RngSingleRequest): Promise<RngSingleResponse>;
|
|
9
|
+
getRandomFloat(request: RngSingleFloatRequest): Promise<RngSingleResponse>;
|
|
10
|
+
getSingleFloat(request: RngSingleFloatRequest): Promise<RngSingleResponse>;
|
|
11
|
+
getBatchFloats(request: RngBatchFloatRequest): Promise<RngBatchResponse>;
|
|
11
12
|
getBatchNumbers(data: RngBatchRequest): Promise<RngBatchResponse>;
|
|
13
|
+
getBatchNumbersWithSeeds(request: RngBatchRequest): Promise<RngBatchResponseWithSeeds>;
|
|
14
|
+
getBatchFloatWithSeeds(request: RngSingleFloatRequest): Promise<RngBatchResponseWithSeeds>;
|
|
12
15
|
}
|
|
13
16
|
//# sourceMappingURL=rng-client-core.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rng-client-core.d.ts","sourceRoot":"","sources":["../../src/core/rng-client-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"rng-client-core.d.ts","sourceRoot":"","sources":["../../src/core/rng-client-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAIlE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAEnC,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqB;gBAEnC,MAAM,EAAE,eAAe;IAUtB,eAAe,CAC1B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,iBAAiB,CAAC;IAIhB,eAAe,CAC1B,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,iBAAiB,CAAC;IAIhB,cAAc,CACzB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAMhB,cAAc,CACzB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAMhB,cAAc,CACzB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IAIf,eAAe,CAC1B,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,gBAAgB,CAAC;IAIf,wBAAwB,CACnC,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,yBAAyB,CAAC;IAIxB,sBAAsB,CACjC,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,yBAAyB,CAAC;CAGtC"}
|
|
@@ -2,32 +2,43 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RngClientCore = void 0;
|
|
4
4
|
const http_rng_client_1 = require("../http/http-rng-client");
|
|
5
|
+
const grpc_rng_client_1 = require("../grpc/grpc-rng-client");
|
|
5
6
|
class RngClientCore {
|
|
6
7
|
constructor(config) {
|
|
7
8
|
this.config = config;
|
|
8
|
-
|
|
9
|
+
if (config.clientMethod === "grpc") {
|
|
10
|
+
this.rngClient = new grpc_rng_client_1.GrpcRngClient(config.grpcUrl);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
this.rngClient = new http_rng_client_1.HttpRngClient(config.serverUrl);
|
|
14
|
+
}
|
|
9
15
|
}
|
|
10
16
|
async getRandomNumber(request) {
|
|
11
17
|
return this.rngClient.getSingleNumber(request);
|
|
12
18
|
}
|
|
13
|
-
async
|
|
14
|
-
|
|
19
|
+
async getSingleNumber(request) {
|
|
20
|
+
return this.rngClient.getSingleNumber(request);
|
|
21
|
+
}
|
|
22
|
+
async getRandomFloat(request) {
|
|
23
|
+
const response = await this.rngClient.getSingleFloat(request);
|
|
15
24
|
return response;
|
|
16
25
|
}
|
|
17
|
-
async getSingleFloat(
|
|
18
|
-
const response = await this.rngClient.
|
|
19
|
-
min: 0,
|
|
20
|
-
max: 1,
|
|
21
|
-
seed,
|
|
22
|
-
});
|
|
26
|
+
async getSingleFloat(request) {
|
|
27
|
+
const response = await this.rngClient.getSingleFloat(request);
|
|
23
28
|
return response;
|
|
24
29
|
}
|
|
25
|
-
async getBatchFloats(
|
|
26
|
-
return this.rngClient.getBatchFloats(
|
|
30
|
+
async getBatchFloats(request) {
|
|
31
|
+
return this.rngClient.getBatchFloats(request);
|
|
27
32
|
}
|
|
28
33
|
async getBatchNumbers(data) {
|
|
29
34
|
return this.rngClient.getBatchNumbers(data);
|
|
30
35
|
}
|
|
36
|
+
async getBatchNumbersWithSeeds(request) {
|
|
37
|
+
return this.rngClient.getBatchNumbersWithSeeds(request);
|
|
38
|
+
}
|
|
39
|
+
async getBatchFloatWithSeeds(request) {
|
|
40
|
+
return this.rngClient.getBatchFloatWithSeeds(request);
|
|
41
|
+
}
|
|
31
42
|
}
|
|
32
43
|
exports.RngClientCore = RngClientCore;
|
|
33
44
|
//# sourceMappingURL=rng-client-core.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rng-client-core.js","sourceRoot":"","sources":["../../src/core/rng-client-core.ts"],"names":[],"mappings":";;;AAEA,6DAAwD;
|
|
1
|
+
{"version":3,"file":"rng-client-core.js","sourceRoot":"","sources":["../../src/core/rng-client-core.ts"],"names":[],"mappings":";;;AAEA,6DAAwD;AACxD,6DAAwD;AAWxD,MAAa,aAAa;IAIxB,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,MAAM,CAAC,YAAY,KAAK,MAAM,EAAE,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,IAAI,+BAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,GAAG,IAAI,+BAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,OAAyB;QAEzB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,OAAyB;QAEzB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,OAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,OAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAE9D,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,OAA6B;QAE7B,OAAO,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,IAAqB;QAErB,OAAO,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,wBAAwB,CACnC,OAAwB;QAExB,OAAO,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAEM,KAAK,CAAC,sBAAsB,CACjC,OAA8B;QAE9B,OAAO,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC;IACxD,CAAC;CACF;AAjED,sCAiEC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { RngClientInterface } from "../http/rng-client.interface";
|
|
2
|
+
import { RngBatchFloatRequest, RngBatchRequest, RngBatchResponse, RngBatchResponseWithSeeds, RngSingleFloatRequest, RngSingleRequest, RngSingleResponse } from "../http/http-client.types";
|
|
3
|
+
export declare class GrpcRngClient implements RngClientInterface {
|
|
4
|
+
private readonly client;
|
|
5
|
+
private readonly grpcUrl;
|
|
6
|
+
constructor(grpcUrl: string);
|
|
7
|
+
getSingleNumber(request: RngSingleRequest): Promise<RngSingleResponse>;
|
|
8
|
+
getBatchNumbers(request: RngBatchRequest): Promise<RngBatchResponse>;
|
|
9
|
+
getSingleFloat(request: RngSingleFloatRequest): Promise<RngSingleResponse>;
|
|
10
|
+
getBatchFloats(request: RngBatchFloatRequest): Promise<RngBatchResponse>;
|
|
11
|
+
getBatchNumbersWithSeeds(request: RngBatchRequest): Promise<RngBatchResponseWithSeeds>;
|
|
12
|
+
getBatchFloatWithSeeds(request: RngSingleFloatRequest): Promise<RngBatchResponseWithSeeds>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=grpc-rng-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-rng-client.d.ts","sourceRoot":"","sources":["../../src/grpc/grpc-rng-client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAKnC,qBAAa,aAAc,YAAW,kBAAkB;IACtD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;IAChD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,EAAE,MAAM;IAkBrB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgBtE,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAepE,cAAc,CAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAevB,cAAc,CAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IAetB,wBAAwB,CAC5B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,yBAAyB,CAAC;IAe/B,sBAAsB,CAC1B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,yBAAyB,CAAC;CActC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.GrpcRngClient = void 0;
|
|
37
|
+
const grpc = __importStar(require("@grpc/grpc-js"));
|
|
38
|
+
const protoLoader = __importStar(require("@grpc/proto-loader"));
|
|
39
|
+
const PROTO_PATH = __dirname + "/../rng.proto";
|
|
40
|
+
class GrpcRngClient {
|
|
41
|
+
constructor(grpcUrl) {
|
|
42
|
+
this.grpcUrl = grpcUrl;
|
|
43
|
+
const packageDefinition = protoLoader.loadSync(PROTO_PATH, {
|
|
44
|
+
keepCase: true,
|
|
45
|
+
longs: String,
|
|
46
|
+
enums: String,
|
|
47
|
+
defaults: true,
|
|
48
|
+
oneofs: true,
|
|
49
|
+
});
|
|
50
|
+
const rngProto = grpc.loadPackageDefinition(packageDefinition).rng;
|
|
51
|
+
this.client = new rngProto.RngService(this.grpcUrl, grpc.credentials.createInsecure());
|
|
52
|
+
}
|
|
53
|
+
async getSingleNumber(request) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
this.client.Single(request, (err, response) => {
|
|
56
|
+
if (err) {
|
|
57
|
+
console.log("err ", err);
|
|
58
|
+
reject(err);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
resolve(response);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
async getBatchNumbers(request) {
|
|
67
|
+
return new Promise((resolve, reject) => {
|
|
68
|
+
this.client.SingleBatch(request, (err, response) => {
|
|
69
|
+
if (err) {
|
|
70
|
+
reject(err);
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
resolve(response);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async getSingleFloat(request) {
|
|
79
|
+
return new Promise((resolve, reject) => {
|
|
80
|
+
this.client.Float(request, (err, response) => {
|
|
81
|
+
if (err) {
|
|
82
|
+
reject(err);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
resolve(response);
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
async getBatchFloats(request) {
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
this.client.FloatBatch(request, (err, response) => {
|
|
93
|
+
if (err) {
|
|
94
|
+
reject(err);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
resolve(response);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
async getBatchNumbersWithSeeds(request) {
|
|
103
|
+
return new Promise((resolve, reject) => {
|
|
104
|
+
this.client.SingleBatchWithSeeds(request, (err, response) => {
|
|
105
|
+
if (err) {
|
|
106
|
+
reject(err);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
resolve(response);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
async getBatchFloatWithSeeds(request) {
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
this.client.FloatBatchWithSeeds(request, (err, response) => {
|
|
117
|
+
if (err) {
|
|
118
|
+
reject(err);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
resolve(response);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
exports.GrpcRngClient = GrpcRngClient;
|
|
128
|
+
//# sourceMappingURL=grpc-rng-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-rng-client.js","sourceRoot":"","sources":["../../src/grpc/grpc-rng-client.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oDAAsC;AACtC,gEAAkD;AAalD,MAAM,UAAU,GAAG,SAAS,GAAG,eAAe,CAAC;AAE/C,MAAa,aAAa;IAIxB,YAAY,OAAe;QACzB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QAEvB,MAAM,iBAAiB,GAAG,WAAW,CAAC,QAAQ,CAAC,UAAU,EAAE;YACzD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,MAAM;YACb,KAAK,EAAE,MAAM;YACb,QAAQ,EAAE,IAAI;YACd,MAAM,EAAE,IAAI;SACb,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,GAAU,CAAC;QAC1E,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,UAAU,CACnC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAClC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAyB;QAC7C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,MAAM,CAChB,OAAO,EACP,CAAC,GAAY,EAAE,QAA2B,EAAE,EAAE;gBAC5C,IAAI,GAAG,EAAE,CAAC;oBACR,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;oBACzB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,WAAW,CACrB,OAAO,EACP,CAAC,GAAY,EAAE,QAA0B,EAAE,EAAE;gBAC3C,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAA8B;QAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,OAAO,EACP,CAAC,GAAY,EAAE,QAA2B,EAAE,EAAE;gBAC5C,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAA6B;QAE7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,UAAU,CACpB,OAAO,EACP,CAAC,GAAY,EAAE,QAA0B,EAAE,EAAE;gBAC3C,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,OAAwB;QAExB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAC9B,OAAO,EACP,CAAC,GAAY,EAAE,QAAmC,EAAE,EAAE;gBACpD,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,OAA8B;QAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAC7B,OAAO,EACP,CAAC,GAAY,EAAE,QAAmC,EAAE,EAAE;gBACpD,IAAI,GAAG,EAAE,CAAC;oBACR,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAxHD,sCAwHC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { RngBatchFloatRequest, RngBatchRequest, RngBatchResponse, RngBatchResponseWithSeeds, RngSingleFloatRequest, RngSingleRequest, RngSingleResponse } from "../http/http-client.types";
|
|
2
|
+
export interface GrpcRngClientInterface {
|
|
3
|
+
Single(request: RngSingleRequest, callback: (err: unknown, response: RngSingleResponse) => void): Promise<RngSingleResponse>;
|
|
4
|
+
SingleBatch(request: RngBatchRequest, callback: (err: unknown, response: RngBatchResponse) => void): Promise<RngBatchResponse>;
|
|
5
|
+
Float(request: RngSingleFloatRequest, callback: (err: unknown, response: RngSingleResponse) => void): Promise<RngSingleResponse>;
|
|
6
|
+
FloatBatch(request: RngBatchFloatRequest, callback: (err: unknown, response: RngBatchResponse) => void): Promise<RngBatchResponse>;
|
|
7
|
+
SingleBatchWithSeeds(request: RngBatchRequest, callback: (err: unknown, response: RngBatchResponseWithSeeds) => void): Promise<RngBatchResponseWithSeeds>;
|
|
8
|
+
FloatBatchWithSeeds(request: RngSingleFloatRequest, callback: (err: unknown, response: RngBatchResponseWithSeeds) => void): Promise<RngBatchResponseWithSeeds>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=grpc-rng-interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-rng-interface.d.ts","sourceRoot":"","sources":["../../src/grpc/grpc-rng-interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,sBAAsB;IACrC,MAAM,CACJ,OAAO,EAAE,gBAAgB,EACzB,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,GAC5D,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,WAAW,CACT,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAC3D,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,KAAK,CACH,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,KAAK,IAAI,GAC5D,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,UAAU,CACR,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,GAC3D,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC7B,oBAAoB,CAClB,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,yBAAyB,KAAK,IAAI,GACpE,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,mBAAmB,CACjB,OAAO,EAAE,qBAAqB,EAC9B,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,yBAAyB,KAAK,IAAI,GACpE,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grpc-rng-interface.js","sourceRoot":"","sources":["../../src/grpc/grpc-rng-interface.ts"],"names":[],"mappings":""}
|
|
@@ -9,6 +9,13 @@ export interface RngBatchRequest {
|
|
|
9
9
|
count: number;
|
|
10
10
|
seed?: number;
|
|
11
11
|
}
|
|
12
|
+
export interface RngSingleFloatRequest {
|
|
13
|
+
seed?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface RngBatchFloatRequest {
|
|
16
|
+
count: number;
|
|
17
|
+
seed?: number;
|
|
18
|
+
}
|
|
12
19
|
export interface RngSingleResponse {
|
|
13
20
|
id: string;
|
|
14
21
|
seed: number;
|
|
@@ -25,4 +32,15 @@ export interface RngBatchResponse {
|
|
|
25
32
|
max: number;
|
|
26
33
|
createdAt: string;
|
|
27
34
|
}
|
|
35
|
+
export interface RngBatchResponseWithSeeds {
|
|
36
|
+
id: string;
|
|
37
|
+
seed: number;
|
|
38
|
+
result: {
|
|
39
|
+
value: number;
|
|
40
|
+
seed: number;
|
|
41
|
+
}[];
|
|
42
|
+
min: number;
|
|
43
|
+
max: number;
|
|
44
|
+
createdAt: string;
|
|
45
|
+
}
|
|
28
46
|
//# sourceMappingURL=http-client.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-client.types.d.ts","sourceRoot":"","sources":["../../src/http/http-client.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
1
|
+
{"version":3,"file":"http-client.types.d.ts","sourceRoot":"","sources":["../../src/http/http-client.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC1C,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { RngClientInterface } from "./rng-client.interface";
|
|
2
|
-
import { RngBatchRequest, RngBatchResponse, RngSingleRequest, RngSingleResponse } from "./http-client.types";
|
|
2
|
+
import { RngBatchFloatRequest, RngBatchRequest, RngBatchResponse, RngBatchResponseWithSeeds, RngSingleFloatRequest, RngSingleRequest, RngSingleResponse } from "./http-client.types";
|
|
3
3
|
import { RestClient } from "./rest-client";
|
|
4
4
|
export declare class HttpRngClient extends RestClient implements RngClientInterface {
|
|
5
5
|
constructor(baseUrl: string);
|
|
6
6
|
getSingleNumber(request: RngSingleRequest): Promise<RngSingleResponse>;
|
|
7
7
|
getBatchNumbers(request: RngBatchRequest): Promise<RngBatchResponse>;
|
|
8
|
-
getSingleFloat(
|
|
9
|
-
getBatchFloats(
|
|
8
|
+
getSingleFloat(request: RngSingleFloatRequest): Promise<RngSingleResponse>;
|
|
9
|
+
getBatchFloats(request: RngBatchFloatRequest): Promise<RngBatchResponse>;
|
|
10
|
+
getBatchNumbersWithSeeds(request: RngBatchRequest): Promise<RngBatchResponseWithSeeds>;
|
|
11
|
+
getBatchFloatWithSeeds(request: RngSingleFloatRequest): Promise<RngBatchResponseWithSeeds>;
|
|
10
12
|
}
|
|
11
13
|
//# sourceMappingURL=http-rng-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-rng-client.d.ts","sourceRoot":"","sources":["../../src/http/http-rng-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,aAAc,SAAQ,UAAW,YAAW,kBAAkB;gBAC7D,OAAO,EAAE,MAAM;IAIrB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAetE,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAepE,cAAc,
|
|
1
|
+
{"version":3,"file":"http-rng-client.d.ts","sourceRoot":"","sources":["../../src/http/http-rng-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,qBAAa,aAAc,SAAQ,UAAW,YAAW,kBAAkB;gBAC7D,OAAO,EAAE,MAAM;IAIrB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAetE,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAepE,cAAc,CAClB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,iBAAiB,CAAC;IAevB,cAAc,CAClB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,gBAAgB,CAAC;IAetB,wBAAwB,CAC5B,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,yBAAyB,CAAC;IAe/B,sBAAsB,CAC1B,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,yBAAyB,CAAC;CActC"}
|
|
@@ -20,20 +20,29 @@ class HttpRngClient extends rest_client_1.RestClient {
|
|
|
20
20
|
}
|
|
21
21
|
return response.data;
|
|
22
22
|
}
|
|
23
|
-
async getSingleFloat(
|
|
24
|
-
const response = await this.post("/api/rng/float",
|
|
25
|
-
seed,
|
|
26
|
-
});
|
|
23
|
+
async getSingleFloat(request) {
|
|
24
|
+
const response = await this.post("/api/rng/float", request);
|
|
27
25
|
if (!response.success) {
|
|
28
26
|
throw new Error(`HTTP error! status: ${response.statusCode}, message: ${response.message}`);
|
|
29
27
|
}
|
|
30
28
|
return response.data;
|
|
31
29
|
}
|
|
32
|
-
async getBatchFloats(
|
|
33
|
-
const response = await this.post("/api/rng/batch/float",
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
30
|
+
async getBatchFloats(request) {
|
|
31
|
+
const response = await this.post("/api/rng/batch/float", request);
|
|
32
|
+
if (!response.success) {
|
|
33
|
+
throw new Error(`HTTP error! status: ${response.statusCode}, message: ${response.message}`);
|
|
34
|
+
}
|
|
35
|
+
return response.data;
|
|
36
|
+
}
|
|
37
|
+
async getBatchNumbersWithSeeds(request) {
|
|
38
|
+
const response = await this.post("/api/rng/batch/with-seeds", request);
|
|
39
|
+
if (!response.success) {
|
|
40
|
+
throw new Error(`HTTP error! status: ${response.statusCode}, message: ${response.message}`);
|
|
41
|
+
}
|
|
42
|
+
return response.data;
|
|
43
|
+
}
|
|
44
|
+
async getBatchFloatWithSeeds(request) {
|
|
45
|
+
const response = await this.post("/api/rng/batch/float/with-seeds", request);
|
|
37
46
|
if (!response.success) {
|
|
38
47
|
throw new Error(`HTTP error! status: ${response.statusCode}, message: ${response.message}`);
|
|
39
48
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-rng-client.js","sourceRoot":"","sources":["../../src/http/http-rng-client.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"http-rng-client.js","sourceRoot":"","sources":["../../src/http/http-rng-client.ts"],"names":[],"mappings":";;;AAUA,+CAA2C;AAE3C,MAAa,aAAc,SAAQ,wBAAU;IAC3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAyB;QAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC9B,iBAAiB,EACjB,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,OAAO,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAwB;QAC5C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC9B,gBAAgB,EAChB,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,OAAO,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC9B,gBAAgB,EAChB,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,OAAO,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAA6B;QAE7B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC9B,sBAAsB,EACtB,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,OAAO,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,OAAwB;QAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC9B,2BAA2B,EAC3B,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,OAAO,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,sBAAsB,CAC1B,OAA8B;QAE9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAC9B,iCAAiC,EACjC,OAAO,CACR,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,uBAAuB,QAAQ,CAAC,UAAU,cAAc,QAAQ,CAAC,OAAO,EAAE,CAC3E,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC;IACvB,CAAC;CACF;AAtGD,sCAsGC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { RngBatchRequest, RngBatchResponse, RngSingleRequest, RngSingleResponse } from "./http-client.types";
|
|
1
|
+
import { RngBatchFloatRequest, RngBatchRequest, RngBatchResponse, RngBatchResponseWithSeeds, RngSingleFloatRequest, RngSingleRequest, RngSingleResponse } from "./http-client.types";
|
|
2
2
|
export interface RngClientInterface {
|
|
3
3
|
getSingleNumber(request: RngSingleRequest): Promise<RngSingleResponse>;
|
|
4
4
|
getBatchNumbers(request: RngBatchRequest): Promise<RngBatchResponse>;
|
|
5
|
-
getSingleFloat(
|
|
6
|
-
getBatchFloats(
|
|
5
|
+
getSingleFloat(request: RngSingleFloatRequest): Promise<RngSingleResponse>;
|
|
6
|
+
getBatchFloats(request: RngBatchFloatRequest): Promise<RngBatchResponse>;
|
|
7
|
+
getBatchNumbersWithSeeds(request: RngBatchRequest): Promise<RngBatchResponseWithSeeds>;
|
|
8
|
+
getBatchFloatWithSeeds(request: RngSingleFloatRequest): Promise<RngBatchResponseWithSeeds>;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=rng-client.interface.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rng-client.interface.d.ts","sourceRoot":"","sources":["../../src/http/rng-client.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvE,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrE,cAAc,CAAC,
|
|
1
|
+
{"version":3,"file":"rng-client.interface.d.ts","sourceRoot":"","sources":["../../src/http/rng-client.interface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACvE,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACrE,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3E,cAAc,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACzE,wBAAwB,CACtB,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,yBAAyB,CAAC,CAAC;IACtC,sBAAsB,CACpB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { RngClient } from "./rng-client";
|
|
2
|
-
export
|
|
2
|
+
export { HttpRngClient } from "./http/http-rng-client";
|
|
3
|
+
export { GrpcRngClient } from "./grpc/grpc-rng-client";
|
|
4
|
+
export type { RngClientConfig, ClientMethod, } from "./interfaces/client-interfaces";
|
|
3
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,YAAY,EACV,eAAe,EACf,YAAY,GACb,MAAM,gCAAgC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.RngClient = void 0;
|
|
3
|
+
exports.GrpcRngClient = exports.HttpRngClient = exports.RngClient = void 0;
|
|
4
4
|
// Main API
|
|
5
5
|
var rng_client_1 = require("./rng-client");
|
|
6
6
|
Object.defineProperty(exports, "RngClient", { enumerable: true, get: function () { return rng_client_1.RngClient; } });
|
|
7
|
+
// Clients
|
|
8
|
+
var http_rng_client_1 = require("./http/http-rng-client");
|
|
9
|
+
Object.defineProperty(exports, "HttpRngClient", { enumerable: true, get: function () { return http_rng_client_1.HttpRngClient; } });
|
|
10
|
+
var grpc_rng_client_1 = require("./grpc/grpc-rng-client");
|
|
11
|
+
Object.defineProperty(exports, "GrpcRngClient", { enumerable: true, get: function () { return grpc_rng_client_1.GrpcRngClient; } });
|
|
7
12
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,WAAW;AACX,2CAAyC;AAAhC,uGAAA,SAAS,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,WAAW;AACX,2CAAyC;AAAhC,uGAAA,SAAS,OAAA;AAElB,UAAU;AACV,0DAAuD;AAA9C,gHAAA,aAAa,OAAA;AACtB,0DAAuD;AAA9C,gHAAA,aAAa,OAAA"}
|
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import { StorageType } from "../ring-buffer/ring-storage";
|
|
2
|
+
export type ClientMethod = "rest" | "grpc";
|
|
1
3
|
export interface RngClientConfig {
|
|
2
4
|
readonly serverUrl: string;
|
|
5
|
+
readonly grpcUrl: string;
|
|
6
|
+
readonly clientMethod: ClientMethod;
|
|
7
|
+
readonly poolingSize?: number;
|
|
8
|
+
readonly storageType?: StorageType;
|
|
3
9
|
}
|
|
4
10
|
//# sourceMappingURL=client-interfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces/client-interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"client-interfaces.d.ts","sourceRoot":"","sources":["../../src/interfaces/client-interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAE1D,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;CACpC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface SingleRingBuffer {
|
|
2
|
+
items: RingBufferValue[];
|
|
3
|
+
range: {
|
|
4
|
+
min: number;
|
|
5
|
+
max: number;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
export interface RingBufferValue {
|
|
9
|
+
value: number;
|
|
10
|
+
seed: number;
|
|
11
|
+
}
|
|
12
|
+
export interface RingBufferStats {
|
|
13
|
+
id: string;
|
|
14
|
+
size: number;
|
|
15
|
+
ranges: {
|
|
16
|
+
[key: string]: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=interfaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/ring-buffer/interfaces.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,KAAK,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../src/ring-buffer/interfaces.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RingBufferStats, RingBufferValue, SingleRingBuffer } from "./interfaces";
|
|
2
|
+
import { RngClientCore } from "../core/rng-client-core";
|
|
3
|
+
import { StorageType } from "./ring-storage";
|
|
4
|
+
export declare const FILL_UP_BUFFER_DELAY = 5;
|
|
5
|
+
export interface RingBufferConfig {
|
|
6
|
+
size?: number;
|
|
7
|
+
clientCore: RngClientCore;
|
|
8
|
+
storageType: StorageType;
|
|
9
|
+
}
|
|
10
|
+
export declare class RingBuffer {
|
|
11
|
+
private size;
|
|
12
|
+
private maxSize;
|
|
13
|
+
private clientCore;
|
|
14
|
+
private storageType;
|
|
15
|
+
private storage;
|
|
16
|
+
constructor({ size, clientCore, storageType }: RingBufferConfig);
|
|
17
|
+
getStats(): Promise<RingBufferStats | undefined>;
|
|
18
|
+
getNumberByRange(min: number, max: number): Promise<RingBufferValue | undefined>;
|
|
19
|
+
fillUpBuffer(buffer: SingleRingBuffer): Promise<void>;
|
|
20
|
+
pullNumberByBuffer(buffer: SingleRingBuffer): Promise<RingBufferValue[]>;
|
|
21
|
+
createBuffer(min: number, max: number): SingleRingBuffer;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ring-buffer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/ring-buffer/ring-buffer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAe,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE1D,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,aAAa,CAAC;IAC1B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,UAAU;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAc;gBAEjB,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,gBAAgB;IAQzD,QAAQ,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAIhD,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAoBjC,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrD,kBAAkB,CACtB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,EAAE,CAAC;IAa7B,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB;CAMzD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RingBuffer = exports.FILL_UP_BUFFER_DELAY = void 0;
|
|
4
|
+
const ring_storage_1 = require("./ring-storage");
|
|
5
|
+
exports.FILL_UP_BUFFER_DELAY = 5;
|
|
6
|
+
class RingBuffer {
|
|
7
|
+
constructor({ size, clientCore, storageType }) {
|
|
8
|
+
this.size = size ?? 2000;
|
|
9
|
+
this.maxSize = this.size * 2;
|
|
10
|
+
this.clientCore = clientCore;
|
|
11
|
+
this.storageType = storageType;
|
|
12
|
+
this.storage = new ring_storage_1.RingStorage(storageType);
|
|
13
|
+
}
|
|
14
|
+
async getStats() {
|
|
15
|
+
return this.storage.getStats();
|
|
16
|
+
}
|
|
17
|
+
async getNumberByRange(min, max) {
|
|
18
|
+
const buffer = await this.storage.getBufferByRange(min, max);
|
|
19
|
+
if (!buffer) {
|
|
20
|
+
const newBuffer = this.createBuffer(min, max);
|
|
21
|
+
await this.storage.saveBuffer(newBuffer);
|
|
22
|
+
setTimeout(async () => {
|
|
23
|
+
await this.fillUpBuffer(newBuffer);
|
|
24
|
+
}, exports.FILL_UP_BUFFER_DELAY);
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
const item = await this.storage.getFromBuffer(buffer);
|
|
28
|
+
if (!item) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
setTimeout(async () => {
|
|
32
|
+
await this.fillUpBuffer(buffer);
|
|
33
|
+
}, exports.FILL_UP_BUFFER_DELAY);
|
|
34
|
+
return item;
|
|
35
|
+
}
|
|
36
|
+
async fillUpBuffer(buffer) {
|
|
37
|
+
const values = await this.pullNumberByBuffer(buffer);
|
|
38
|
+
if (values.length === 0 || buffer.items.length >= this.maxSize) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
await this.storage.addItemsToBuffer(buffer, values);
|
|
42
|
+
}
|
|
43
|
+
async pullNumberByBuffer(buffer) {
|
|
44
|
+
const count = this.size - buffer.items.length;
|
|
45
|
+
if (count <= 0) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const values = await this.clientCore.getBatchNumbersWithSeeds({
|
|
49
|
+
min: buffer.range.min,
|
|
50
|
+
max: buffer.range.max,
|
|
51
|
+
count,
|
|
52
|
+
});
|
|
53
|
+
return values.result;
|
|
54
|
+
}
|
|
55
|
+
createBuffer(min, max) {
|
|
56
|
+
return {
|
|
57
|
+
items: [],
|
|
58
|
+
range: { min, max },
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
exports.RingBuffer = RingBuffer;
|
|
63
|
+
//# sourceMappingURL=ring-buffer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-buffer.js","sourceRoot":"","sources":["../../src/ring-buffer/ring-buffer.ts"],"names":[],"mappings":";;;AAMA,iDAA0D;AAE7C,QAAA,oBAAoB,GAAG,CAAC,CAAC;AAQtC,MAAa,UAAU;IAOrB,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAoB;QAC7D,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG,IAAI,0BAAW,CAAC,WAAW,CAAC,CAAC;IAC9C,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,GAAW,EACX,GAAW;QAEX,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9C,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YACzC,UAAU,CAAC,KAAK,IAAI,EAAE;gBACpB,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACrC,CAAC,EAAE,4BAAoB,CAAC,CAAC;YACzB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC,EAAE,4BAAoB,CAAC,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAwB;QACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/D,OAAO;QACT,CAAC;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,MAAwB;QAExB,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC;QAC9C,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC;YAC5D,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;YACrB,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG;YACrB,KAAK;SACN,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,MAA2B,CAAC;IAC5C,CAAC;IAED,YAAY,CAAC,GAAW,EAAE,GAAW;QACnC,OAAO;YACL,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;SACpB,CAAC;IACJ,CAAC;CACF;AAvED,gCAuEC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { RingBufferStats, RingBufferValue, SingleRingBuffer } from "./interfaces";
|
|
2
|
+
export declare class RingStorageMemory {
|
|
3
|
+
private storage;
|
|
4
|
+
constructor();
|
|
5
|
+
getStats(): Promise<RingBufferStats>;
|
|
6
|
+
getBufferName(min: number, max: number): string;
|
|
7
|
+
saveBuffer(buffer: SingleRingBuffer): Promise<void>;
|
|
8
|
+
getBuffer(name: string): Promise<SingleRingBuffer>;
|
|
9
|
+
getFromBuffer(name: string): Promise<RingBufferValue | undefined>;
|
|
10
|
+
addItemsToBuffer(buffer: SingleRingBuffer, items: RingBufferValue[]): Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=ring-storage-memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-storage-memory.d.ts","sourceRoot":"","sources":["../../src/ring-buffer/ring-storage-memory.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAEtB,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAsC;;IAM/C,QAAQ,IAAI,OAAO,CAAC,eAAe,CAAC;IAY1C,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKnD,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIlD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAejE,gBAAgB,CACpB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAIjB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RingStorageMemory = void 0;
|
|
4
|
+
class RingStorageMemory {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.storage = {};
|
|
7
|
+
}
|
|
8
|
+
async getStats() {
|
|
9
|
+
const ranges = {};
|
|
10
|
+
for (const key in this.storage) {
|
|
11
|
+
ranges[key] = this.storage[key].items.length;
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
id: "in_memory",
|
|
15
|
+
size: Object.keys(this.storage).length,
|
|
16
|
+
ranges,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
getBufferName(min, max) {
|
|
20
|
+
return `${min}-${max}`;
|
|
21
|
+
}
|
|
22
|
+
async saveBuffer(buffer) {
|
|
23
|
+
this.storage[this.getBufferName(buffer.range.min, buffer.range.max)] =
|
|
24
|
+
buffer;
|
|
25
|
+
}
|
|
26
|
+
async getBuffer(name) {
|
|
27
|
+
return this.storage[name];
|
|
28
|
+
}
|
|
29
|
+
async getFromBuffer(name) {
|
|
30
|
+
const buffer = await this.getBuffer(name);
|
|
31
|
+
if (!buffer) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
if (buffer.items.length === 0) {
|
|
35
|
+
return undefined;
|
|
36
|
+
}
|
|
37
|
+
const item = buffer.items.shift();
|
|
38
|
+
if (!item) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return item;
|
|
42
|
+
}
|
|
43
|
+
async addItemsToBuffer(buffer, items) {
|
|
44
|
+
buffer.items.push(...items);
|
|
45
|
+
await this.saveBuffer(buffer);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
exports.RingStorageMemory = RingStorageMemory;
|
|
49
|
+
//# sourceMappingURL=ring-storage-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-storage-memory.js","sourceRoot":"","sources":["../../src/ring-buffer/ring-storage-memory.ts"],"names":[],"mappings":";;;AAMA,MAAa,iBAAiB;IAG5B;QACE,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;QAC/C,CAAC;QACD,OAAO;YACL,EAAE,EAAE,WAAW;YACf,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;YACtC,MAAM;SACP,CAAC;IACJ,CAAC;IAED,aAAa,CAAC,GAAW,EAAE,GAAW;QACpC,OAAO,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAClE,MAAM,CAAC;IACX,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAY;QAC9B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,MAAwB,EACxB,KAAwB;QAExB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;QAC5B,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF;AAtDD,8CAsDC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RingBufferStats, RingBufferValue, SingleRingBuffer } from "./interfaces";
|
|
2
|
+
export declare enum StorageType {
|
|
3
|
+
IN_MEMORY = "in_memory",
|
|
4
|
+
REDIS = "redis"
|
|
5
|
+
}
|
|
6
|
+
export declare class RingStorage {
|
|
7
|
+
private readonly storageType;
|
|
8
|
+
private storage;
|
|
9
|
+
constructor(storageType: StorageType);
|
|
10
|
+
getStats(): Promise<RingBufferStats | undefined>;
|
|
11
|
+
getFromBuffer(buffer: SingleRingBuffer): Promise<RingBufferValue | undefined>;
|
|
12
|
+
saveBuffer(buffer: SingleRingBuffer): Promise<void>;
|
|
13
|
+
getBufferByRange(min: number, max: number): Promise<SingleRingBuffer | undefined>;
|
|
14
|
+
getBuffer(name: string): Promise<SingleRingBuffer | undefined>;
|
|
15
|
+
addItemsToBuffer(buffer: SingleRingBuffer, items: RingBufferValue[]): Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=ring-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-storage.d.ts","sourceRoot":"","sources":["../../src/ring-buffer/ring-storage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,eAAe,EACf,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAGtB,oBAAY,WAAW;IACrB,SAAS,cAAc;IACvB,KAAK,UAAU;CAChB;AAED,qBAAa,WAAW;IAEV,OAAO,CAAC,QAAQ,CAAC,WAAW;IADxC,OAAO,CAAC,OAAO,CAAoB;gBACN,WAAW,EAAE,WAAW;IAI/C,QAAQ,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAOhD,aAAa,CACjB,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IASjC,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAMnD,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAOlC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAO9D,gBAAgB,CACpB,MAAM,EAAE,gBAAgB,EACxB,KAAK,EAAE,eAAe,EAAE,GACvB,OAAO,CAAC,IAAI,CAAC;CAKjB"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RingStorage = exports.StorageType = void 0;
|
|
4
|
+
const ring_storage_memory_1 = require("./ring-storage-memory");
|
|
5
|
+
var StorageType;
|
|
6
|
+
(function (StorageType) {
|
|
7
|
+
StorageType["IN_MEMORY"] = "in_memory";
|
|
8
|
+
StorageType["REDIS"] = "redis";
|
|
9
|
+
})(StorageType || (exports.StorageType = StorageType = {}));
|
|
10
|
+
class RingStorage {
|
|
11
|
+
constructor(storageType) {
|
|
12
|
+
this.storageType = storageType;
|
|
13
|
+
this.storage = new ring_storage_memory_1.RingStorageMemory();
|
|
14
|
+
}
|
|
15
|
+
async getStats() {
|
|
16
|
+
if (this.storageType === StorageType.IN_MEMORY) {
|
|
17
|
+
return this.storage.getStats();
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
async getFromBuffer(buffer) {
|
|
22
|
+
if (this.storageType === StorageType.IN_MEMORY) {
|
|
23
|
+
return this.storage.getFromBuffer(this.storage.getBufferName(buffer.range.min, buffer.range.max));
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
async saveBuffer(buffer) {
|
|
28
|
+
if (this.storageType === StorageType.IN_MEMORY) {
|
|
29
|
+
this.storage.saveBuffer(buffer);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
async getBufferByRange(min, max) {
|
|
33
|
+
if (this.storageType === StorageType.IN_MEMORY) {
|
|
34
|
+
return this.storage.getBuffer(this.storage.getBufferName(min, max));
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
37
|
+
}
|
|
38
|
+
async getBuffer(name) {
|
|
39
|
+
if (this.storageType === StorageType.IN_MEMORY) {
|
|
40
|
+
return this.storage.getBuffer(name);
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
async addItemsToBuffer(buffer, items) {
|
|
45
|
+
if (this.storageType === StorageType.IN_MEMORY) {
|
|
46
|
+
this.storage.addItemsToBuffer(buffer, items);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.RingStorage = RingStorage;
|
|
51
|
+
//# sourceMappingURL=ring-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ring-storage.js","sourceRoot":"","sources":["../../src/ring-buffer/ring-storage.ts"],"names":[],"mappings":";;;AAKA,+DAA0D;AAE1D,IAAY,WAGX;AAHD,WAAY,WAAW;IACrB,sCAAuB,CAAA;IACvB,8BAAe,CAAA;AACjB,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAED,MAAa,WAAW;IAEtB,YAA6B,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,uCAAiB,EAAE,CAAC;IACzC,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QACjC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,MAAwB;QAExB,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAC/B,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAC/D,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,GAAW,EACX,GAAW;QAEX,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACtE,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,gBAAgB,CACpB,MAAwB,EACxB,KAAwB;QAExB,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;CACF;AAvDD,kCAuDC"}
|
package/dist/rng-client.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { RngClientConfig } from "./interfaces/client-interfaces";
|
|
2
2
|
import { RngSingleResponse, RngBatchResponse } from "./http/http-client.types";
|
|
3
|
+
import { RingBufferStats } from "./ring-buffer/interfaces";
|
|
3
4
|
/**
|
|
4
5
|
* RNG Client - High-level API for client-side random number generation
|
|
5
6
|
*
|
|
@@ -9,6 +10,7 @@ import { RngSingleResponse, RngBatchResponse } from "./http/http-client.types";
|
|
|
9
10
|
*/
|
|
10
11
|
export declare class RngClient {
|
|
11
12
|
private readonly clientCore;
|
|
13
|
+
private readonly ringBuffer;
|
|
12
14
|
constructor(config: RngClientConfig);
|
|
13
15
|
/**
|
|
14
16
|
* Get a single random number
|
|
@@ -18,6 +20,7 @@ export declare class RngClient {
|
|
|
18
20
|
* @returns Random integer result
|
|
19
21
|
*/
|
|
20
22
|
getSingleNumber(min: number, max: number, seed?: number): Promise<number>;
|
|
23
|
+
getRingBuffersStats(): Promise<RingBufferStats | undefined>;
|
|
21
24
|
/**
|
|
22
25
|
* Get a batch of random numbers
|
|
23
26
|
* @param min Minimum value (inclusive)
|
package/dist/rng-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rng-client.d.ts","sourceRoot":"","sources":["../src/rng-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"rng-client.d.ts","sourceRoot":"","sources":["../src/rng-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAKjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;GAMG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;gBAE5B,MAAM,EAAE,eAAe;IASnC;;;;;;OAMG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAiBZ,mBAAmB,IAAI,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;IAIjE;;;;;;;OAOG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC;IAcpB;;;;OAIG;IACG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ/D;;;;;OAKG;IACG,cAAc,CAClB,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC;IAQ5B;;;;;;OAMG;IACG,eAAe,CACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;;;OAIG;IACG,cAAc,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAOhE"}
|
package/dist/rng-client.js
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.RngClient = void 0;
|
|
4
4
|
const rng_client_core_1 = require("./core/rng-client-core");
|
|
5
|
+
const ring_storage_1 = require("./ring-buffer/ring-storage");
|
|
6
|
+
const ring_buffer_1 = require("./ring-buffer/ring-buffer");
|
|
5
7
|
/**
|
|
6
8
|
* RNG Client - High-level API for client-side random number generation
|
|
7
9
|
*
|
|
@@ -12,6 +14,11 @@ const rng_client_core_1 = require("./core/rng-client-core");
|
|
|
12
14
|
class RngClient {
|
|
13
15
|
constructor(config) {
|
|
14
16
|
this.clientCore = new rng_client_core_1.RngClientCore(config);
|
|
17
|
+
this.ringBuffer = new ring_buffer_1.RingBuffer({
|
|
18
|
+
size: config.poolingSize || 2000,
|
|
19
|
+
clientCore: this.clientCore,
|
|
20
|
+
storageType: config.storageType || ring_storage_1.StorageType.IN_MEMORY,
|
|
21
|
+
});
|
|
15
22
|
}
|
|
16
23
|
/**
|
|
17
24
|
* Get a single random number
|
|
@@ -21,13 +28,25 @@ class RngClient {
|
|
|
21
28
|
* @returns Random integer result
|
|
22
29
|
*/
|
|
23
30
|
async getSingleNumber(min, max, seed) {
|
|
24
|
-
const
|
|
31
|
+
const data = {
|
|
25
32
|
min,
|
|
26
33
|
max,
|
|
27
|
-
|
|
28
|
-
|
|
34
|
+
};
|
|
35
|
+
if (seed) {
|
|
36
|
+
data.seed = seed;
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
const item = await this.ringBuffer.getNumberByRange(min, max);
|
|
40
|
+
if (item) {
|
|
41
|
+
return item.value;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const response = await this.clientCore.getSingleNumber(data);
|
|
29
45
|
return response.result;
|
|
30
46
|
}
|
|
47
|
+
async getRingBuffersStats() {
|
|
48
|
+
return this.ringBuffer.getStats();
|
|
49
|
+
}
|
|
31
50
|
/**
|
|
32
51
|
* Get a batch of random numbers
|
|
33
52
|
* @param min Minimum value (inclusive)
|
|
@@ -37,12 +56,15 @@ class RngClient {
|
|
|
37
56
|
* @returns Batch of random integers
|
|
38
57
|
*/
|
|
39
58
|
async getBatchNumbers(min, max, count, seed) {
|
|
40
|
-
const
|
|
59
|
+
const data = {
|
|
41
60
|
min,
|
|
42
61
|
max,
|
|
43
62
|
count,
|
|
44
|
-
|
|
45
|
-
|
|
63
|
+
};
|
|
64
|
+
if (seed) {
|
|
65
|
+
data.seed = seed;
|
|
66
|
+
}
|
|
67
|
+
const response = await this.clientCore.getBatchNumbers(data);
|
|
46
68
|
return response.result;
|
|
47
69
|
}
|
|
48
70
|
/**
|
|
@@ -51,7 +73,11 @@ class RngClient {
|
|
|
51
73
|
* @returns Random float result
|
|
52
74
|
*/
|
|
53
75
|
async getSingleFloat(seed) {
|
|
54
|
-
|
|
76
|
+
const data = {};
|
|
77
|
+
if (seed) {
|
|
78
|
+
data.seed = seed;
|
|
79
|
+
}
|
|
80
|
+
return this.clientCore.getSingleFloat(data);
|
|
55
81
|
}
|
|
56
82
|
/**
|
|
57
83
|
* Get a batch of random floats
|
|
@@ -60,7 +86,11 @@ class RngClient {
|
|
|
60
86
|
* @returns Batch of random floats
|
|
61
87
|
*/
|
|
62
88
|
async getBatchFloats(count, seed) {
|
|
63
|
-
|
|
89
|
+
const data = { count };
|
|
90
|
+
if (seed) {
|
|
91
|
+
data.seed = seed;
|
|
92
|
+
}
|
|
93
|
+
return this.clientCore.getBatchFloats(data);
|
|
64
94
|
}
|
|
65
95
|
/**
|
|
66
96
|
* Get a random number
|
|
@@ -70,11 +100,11 @@ class RngClient {
|
|
|
70
100
|
* @returns Random integer result
|
|
71
101
|
*/
|
|
72
102
|
async getRandomNumber(min, max, seed) {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
103
|
+
const data = { min, max };
|
|
104
|
+
if (seed) {
|
|
105
|
+
data.seed = seed;
|
|
106
|
+
}
|
|
107
|
+
return this.clientCore.getRandomNumber(data);
|
|
78
108
|
}
|
|
79
109
|
/**
|
|
80
110
|
* Get a random float
|
|
@@ -82,7 +112,11 @@ class RngClient {
|
|
|
82
112
|
* @returns Random float result
|
|
83
113
|
*/
|
|
84
114
|
async getRandomFloat(seed) {
|
|
85
|
-
|
|
115
|
+
const data = {};
|
|
116
|
+
if (seed) {
|
|
117
|
+
data.seed = seed;
|
|
118
|
+
}
|
|
119
|
+
return this.clientCore.getRandomFloat(data);
|
|
86
120
|
}
|
|
87
121
|
}
|
|
88
122
|
exports.RngClient = RngClient;
|
package/dist/rng-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rng-client.js","sourceRoot":"","sources":["../src/rng-client.ts"],"names":[],"mappings":";;;AAAA,4DAAuD;
|
|
1
|
+
{"version":3,"file":"rng-client.js","sourceRoot":"","sources":["../src/rng-client.ts"],"names":[],"mappings":"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"}
|
package/dist/rng.proto
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package rng;
|
|
4
|
+
|
|
5
|
+
service RngService {
|
|
6
|
+
rpc Single (SingleRequest) returns (SingleResponse);
|
|
7
|
+
rpc SingleBatch (BatchRequest) returns (BatchResponse);
|
|
8
|
+
rpc SingleBatchWithSeeds (BatchRequest) returns (BatchWithSeedsResponse);
|
|
9
|
+
rpc Float (FloatRequest) returns (FloatResponse);
|
|
10
|
+
rpc FloatBatch (BatchFloatRequest) returns (BatchFloatResponse);
|
|
11
|
+
rpc FloatBatchWithSeeds (BatchFloatRequest) returns (BatchFloatWithSeedsResponse);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
message SingleRequest {
|
|
15
|
+
int32 min = 1;
|
|
16
|
+
int32 max = 2;
|
|
17
|
+
optional string sessionId = 3;
|
|
18
|
+
optional int32 seed = 4;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
message SingleResponse {
|
|
22
|
+
string id = 1;
|
|
23
|
+
int32 seed = 2;
|
|
24
|
+
int32 result = 3;
|
|
25
|
+
int32 min = 4;
|
|
26
|
+
int32 max = 5;
|
|
27
|
+
string createdAt = 6;
|
|
28
|
+
optional string sessionId = 7;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
message FloatRequest {
|
|
32
|
+
optional string sessionId = 1;
|
|
33
|
+
optional int32 seed = 2;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
message FloatResponse {
|
|
37
|
+
string id = 1;
|
|
38
|
+
int32 seed = 2;
|
|
39
|
+
double result = 3;
|
|
40
|
+
string createdAt = 4;
|
|
41
|
+
optional string sessionId = 5;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
message BatchFloatRequest {
|
|
45
|
+
int32 count = 1;
|
|
46
|
+
optional string sessionId = 2;
|
|
47
|
+
optional int32 seed = 3;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
message BatchFloatResponse {
|
|
51
|
+
string id = 1;
|
|
52
|
+
int32 seed = 2;
|
|
53
|
+
repeated double result = 3;
|
|
54
|
+
string createdAt = 4;
|
|
55
|
+
optional string sessionId = 5;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
message BatchFloatWithSeedsResponse {
|
|
59
|
+
string id = 1;
|
|
60
|
+
int32 seed = 2;
|
|
61
|
+
repeated BatchFloatItem result = 3;
|
|
62
|
+
string createdAt = 4;
|
|
63
|
+
optional string sessionId = 5;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
message BatchFloatItem {
|
|
67
|
+
double value = 1;
|
|
68
|
+
int32 seed = 2;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
message BatchRequest {
|
|
72
|
+
int32 min = 1;
|
|
73
|
+
int32 max = 2;
|
|
74
|
+
int32 count = 3;
|
|
75
|
+
optional string sessionId = 4;
|
|
76
|
+
optional int32 seed = 5;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
message BatchResponse {
|
|
80
|
+
string id = 1;
|
|
81
|
+
int32 seed = 2;
|
|
82
|
+
repeated int32 result = 3;
|
|
83
|
+
int32 min = 4;
|
|
84
|
+
int32 max = 5;
|
|
85
|
+
string createdAt = 6;
|
|
86
|
+
optional string sessionId = 7;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
message BatchWithSeedsResponse {
|
|
90
|
+
string id = 1;
|
|
91
|
+
int32 seed = 2;
|
|
92
|
+
repeated BatchItem result = 3;
|
|
93
|
+
int32 min = 4;
|
|
94
|
+
int32 max = 5;
|
|
95
|
+
string createdAt = 6;
|
|
96
|
+
optional string sessionId = 7;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
message BatchItem {
|
|
100
|
+
int32 value = 1;
|
|
101
|
+
int32 seed = 2;
|
|
102
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@omnitronix/rng-client-core",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Simple HTTP client for random number generation",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"scripts": {
|
|
8
|
-
"build": "tsc",
|
|
8
|
+
"build": "tsc && npm run copy-proto",
|
|
9
|
+
"copy-proto": "cp src/rng.proto dist/",
|
|
9
10
|
"dev": "tsc --watch",
|
|
10
11
|
"clean": "rm -rf dist",
|
|
11
12
|
"lint": "eslint src/**/*.ts",
|
|
@@ -26,7 +27,9 @@
|
|
|
26
27
|
"author": "Omnitronix",
|
|
27
28
|
"license": "UNLICENSED",
|
|
28
29
|
"dependencies": {
|
|
29
|
-
"axios": "^1.12.2"
|
|
30
|
+
"axios": "^1.12.2",
|
|
31
|
+
"@grpc/grpc-js": "^1.9.0",
|
|
32
|
+
"@grpc/proto-loader": "^0.7.8"
|
|
30
33
|
},
|
|
31
34
|
"devDependencies": {
|
|
32
35
|
"@types/jest": "^29.5.0",
|