jitar 0.1.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib.d.ts +27 -1
- package/dist/lib.js +24 -1
- package/dist/runtime/serialization/ArrayBufferSerializer.d.ts +10 -0
- package/dist/runtime/serialization/ArrayBufferSerializer.js +54 -0
- package/dist/runtime/serialization/DateSerializer.d.ts +9 -0
- package/dist/runtime/serialization/DateSerializer.js +21 -0
- package/dist/runtime/serialization/ValueSerializer.d.ts +1 -0
- package/dist/runtime/serialization/ValueSerializer.js +24 -1
- package/dist/runtime/serialization/types/SerializedArrayBuffer.d.ts +6 -0
- package/dist/runtime/serialization/types/SerializedArrayBuffer.js +1 -0
- package/dist/runtime/serialization/types/SerializedDate.d.ts +5 -0
- package/dist/runtime/serialization/types/SerializedDate.js +1 -0
- package/dist/runtime/serialization/types/TypedArray.d.ts +2 -0
- package/dist/runtime/serialization/types/TypedArray.js +1 -0
- package/package.json +3 -19
- package/dist/server/JitarServer.d.ts +0 -8
- package/dist/server/JitarServer.js +0 -109
- package/dist/server/configuration/GatewayConfiguration.d.ts +0 -3
- package/dist/server/configuration/GatewayConfiguration.js +0 -18
- package/dist/server/configuration/NodeConfiguration.d.ts +0 -5
- package/dist/server/configuration/NodeConfiguration.js +0 -28
- package/dist/server/configuration/ProxyConfiguration.d.ts +0 -5
- package/dist/server/configuration/ProxyConfiguration.js +0 -29
- package/dist/server/configuration/RepositoryConfiguration.d.ts +0 -6
- package/dist/server/configuration/RepositoryConfiguration.js +0 -36
- package/dist/server/configuration/RuntimeConfiguration.d.ts +0 -13
- package/dist/server/configuration/RuntimeConfiguration.js +0 -48
- package/dist/server/configuration/ServerOptions.d.ts +0 -4
- package/dist/server/configuration/ServerOptions.js +0 -25
- package/dist/server/configuration/StandaloneConfiguration.d.ts +0 -7
- package/dist/server/configuration/StandaloneConfiguration.js +0 -42
- package/dist/server/controllers/AssetsController.d.ts +0 -8
- package/dist/server/controllers/AssetsController.js +0 -50
- package/dist/server/controllers/HealthController.d.ts +0 -10
- package/dist/server/controllers/HealthController.js +0 -47
- package/dist/server/controllers/JitarController.d.ts +0 -4
- package/dist/server/controllers/JitarController.js +0 -26
- package/dist/server/controllers/ModulesController.d.ts +0 -10
- package/dist/server/controllers/ModulesController.js +0 -68
- package/dist/server/controllers/NodesController.d.ts +0 -9
- package/dist/server/controllers/NodesController.js +0 -60
- package/dist/server/controllers/ProceduresController.d.ts +0 -10
- package/dist/server/controllers/ProceduresController.js +0 -35
- package/dist/server/controllers/ProxyController.d.ts +0 -7
- package/dist/server/controllers/ProxyController.js +0 -37
- package/dist/server/controllers/RPCController.d.ts +0 -9
- package/dist/server/controllers/RPCController.js +0 -146
- package/dist/server/definitions/RuntimeDefaults.d.ts +0 -7
- package/dist/server/definitions/RuntimeDefaults.js +0 -8
- package/dist/server/errors/MissingConfigurationValue.d.ts +0 -3
- package/dist/server/errors/MissingConfigurationValue.js +0 -5
- package/dist/server/errors/RuntimeNotAvaiable.d.ts +0 -3
- package/dist/server/errors/RuntimeNotAvaiable.js +0 -5
- package/dist/server/errors/UnknownRuntimeMode.d.ts +0 -3
- package/dist/server/errors/UnknownRuntimeMode.js +0 -5
- package/dist/server/models/HealthDto.d.ts +0 -4
- package/dist/server/models/HealthDto.js +0 -22
- package/dist/server/models/NodeDto.d.ts +0 -4
- package/dist/server/models/NodeDto.js +0 -22
- package/dist/server/utils/DataConverter.d.ts +0 -4
- package/dist/server/utils/DataConverter.js +0 -9
- package/dist/server/utils/LocalFileManager.d.ts +0 -21
- package/dist/server/utils/LocalFileManager.js +0 -81
- package/dist/server/utils/RuntimeConfigurationLoader.d.ts +0 -4
- package/dist/server/utils/RuntimeConfigurationLoader.js +0 -11
- package/dist/server/utils/RuntimeConfigurator.d.ts +0 -6
- package/dist/server/utils/RuntimeConfigurator.js +0 -135
- package/dist/server/utils/ServerOptionsReader.d.ts +0 -4
- package/dist/server/utils/ServerOptionsReader.js +0 -10
- package/dist/server.d.ts +0 -3
- package/dist/server.js +0 -8
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Contains, IsOptional, IsString } from 'class-validator';
|
|
11
|
-
export default class ServerOptions {
|
|
12
|
-
loglevel = 'info';
|
|
13
|
-
config = 'config.json';
|
|
14
|
-
}
|
|
15
|
-
__decorate([
|
|
16
|
-
IsString(),
|
|
17
|
-
IsOptional(),
|
|
18
|
-
__metadata("design:type", Object)
|
|
19
|
-
], ServerOptions.prototype, "loglevel", void 0);
|
|
20
|
-
__decorate([
|
|
21
|
-
IsString(),
|
|
22
|
-
Contains('.json'),
|
|
23
|
-
IsOptional(),
|
|
24
|
-
__metadata("design:type", Object)
|
|
25
|
-
], ServerOptions.prototype, "config", void 0);
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { IsArray, IsOptional, IsString } from 'class-validator';
|
|
11
|
-
export default class StandaloneConfiguration {
|
|
12
|
-
source;
|
|
13
|
-
cache;
|
|
14
|
-
index;
|
|
15
|
-
segments;
|
|
16
|
-
assets;
|
|
17
|
-
}
|
|
18
|
-
__decorate([
|
|
19
|
-
IsString(),
|
|
20
|
-
IsOptional(),
|
|
21
|
-
__metadata("design:type", String)
|
|
22
|
-
], StandaloneConfiguration.prototype, "source", void 0);
|
|
23
|
-
__decorate([
|
|
24
|
-
IsString(),
|
|
25
|
-
IsOptional(),
|
|
26
|
-
__metadata("design:type", String)
|
|
27
|
-
], StandaloneConfiguration.prototype, "cache", void 0);
|
|
28
|
-
__decorate([
|
|
29
|
-
IsString(),
|
|
30
|
-
IsOptional(),
|
|
31
|
-
__metadata("design:type", String)
|
|
32
|
-
], StandaloneConfiguration.prototype, "index", void 0);
|
|
33
|
-
__decorate([
|
|
34
|
-
IsArray(),
|
|
35
|
-
IsOptional(),
|
|
36
|
-
__metadata("design:type", Array)
|
|
37
|
-
], StandaloneConfiguration.prototype, "segments", void 0);
|
|
38
|
-
__decorate([
|
|
39
|
-
IsArray(),
|
|
40
|
-
IsOptional(),
|
|
41
|
-
__metadata("design:type", Array)
|
|
42
|
-
], StandaloneConfiguration.prototype, "assets", void 0);
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import express from 'express';
|
|
2
|
-
import { Logger } from 'tslog';
|
|
3
|
-
import LocalRepository from '../../runtime/LocalRepository.js';
|
|
4
|
-
import Proxy from '../../runtime/Proxy.js';
|
|
5
|
-
export default class AssetsController {
|
|
6
|
-
#private;
|
|
7
|
-
constructor(app: express.Application, repository: LocalRepository | Proxy, indexFile: string, logger: Logger);
|
|
8
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller } from '@overnightjs/core';
|
|
11
|
-
import express from 'express';
|
|
12
|
-
import { Logger } from 'tslog';
|
|
13
|
-
import FileNotFound from '../../runtime/errors/FileNotFound.js';
|
|
14
|
-
let AssetsController = class AssetsController {
|
|
15
|
-
#repository;
|
|
16
|
-
#indexFile;
|
|
17
|
-
#logger;
|
|
18
|
-
constructor(app, repository, indexFile, logger) {
|
|
19
|
-
this.#repository = repository;
|
|
20
|
-
this.#indexFile = indexFile;
|
|
21
|
-
this.#logger = logger;
|
|
22
|
-
app.get('*', (request, response) => { this.#getContent(request, response); });
|
|
23
|
-
}
|
|
24
|
-
async #getContent(request, response) {
|
|
25
|
-
this.#logger.info(`Got asset -> '${request.path}'`);
|
|
26
|
-
const path = request.path.substring(1).trim();
|
|
27
|
-
const filename = path.length === 0 ? this.#indexFile : path;
|
|
28
|
-
try {
|
|
29
|
-
const file = await this.#repository.loadAsset(filename);
|
|
30
|
-
response.set('Content-Type', file.type);
|
|
31
|
-
response.set('Content-Length', String(file.size));
|
|
32
|
-
response.status(200).send(file.content);
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
if (error instanceof FileNotFound) {
|
|
36
|
-
this.#logger.warn(`Failed to get asset -> '${filename}' | ${error.message}`);
|
|
37
|
-
response.status(404).send(error.message);
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
41
|
-
this.#logger.error(`Failed to get file content -> '${filename}' | ${message}`);
|
|
42
|
-
response.status(500).send(message);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
AssetsController = __decorate([
|
|
47
|
-
Controller(''),
|
|
48
|
-
__metadata("design:paramtypes", [Function, Object, String, Logger])
|
|
49
|
-
], AssetsController);
|
|
50
|
-
export default AssetsController;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
import { Logger } from 'tslog';
|
|
3
|
-
import LocalNode from '../../runtime/LocalNode.js';
|
|
4
|
-
import Proxy from '../../runtime/Proxy.js';
|
|
5
|
-
export default class HealthController {
|
|
6
|
-
#private;
|
|
7
|
-
constructor(node: LocalNode | Proxy, logger: Logger);
|
|
8
|
-
getHealth(request: Request, response: Response): Promise<Response>;
|
|
9
|
-
isHealthy(request: Request, response: Response): Promise<Response>;
|
|
10
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller, Get } from '@overnightjs/core';
|
|
11
|
-
import { Logger } from 'tslog';
|
|
12
|
-
let HealthController = class HealthController {
|
|
13
|
-
#node;
|
|
14
|
-
#logger;
|
|
15
|
-
constructor(node, logger) {
|
|
16
|
-
this.#node = node;
|
|
17
|
-
this.#logger = logger;
|
|
18
|
-
}
|
|
19
|
-
async getHealth(request, response) {
|
|
20
|
-
const health = await this.#node.getHealth();
|
|
21
|
-
const data = Object.fromEntries(health);
|
|
22
|
-
this.#logger.debug('Got health');
|
|
23
|
-
return response.status(200).send(data);
|
|
24
|
-
}
|
|
25
|
-
async isHealthy(request, response) {
|
|
26
|
-
const healthy = await this.#node.isHealthy();
|
|
27
|
-
this.#logger.debug('Got health status');
|
|
28
|
-
return response.status(200).send(healthy);
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
__decorate([
|
|
32
|
-
Get(),
|
|
33
|
-
__metadata("design:type", Function),
|
|
34
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
35
|
-
__metadata("design:returntype", Promise)
|
|
36
|
-
], HealthController.prototype, "getHealth", null);
|
|
37
|
-
__decorate([
|
|
38
|
-
Get('status'),
|
|
39
|
-
__metadata("design:type", Function),
|
|
40
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
41
|
-
__metadata("design:returntype", Promise)
|
|
42
|
-
], HealthController.prototype, "isHealthy", null);
|
|
43
|
-
HealthController = __decorate([
|
|
44
|
-
Controller('health'),
|
|
45
|
-
__metadata("design:paramtypes", [Object, Logger])
|
|
46
|
-
], HealthController);
|
|
47
|
-
export default HealthController;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller } from '@overnightjs/core';
|
|
11
|
-
import express from 'express';
|
|
12
|
-
import path from 'path';
|
|
13
|
-
import { fileURLToPath } from 'url';
|
|
14
|
-
const filePath = fileURLToPath(import.meta.url);
|
|
15
|
-
const fileLocation = path.dirname(filePath);
|
|
16
|
-
const rootLocation = path.join(fileLocation, '../../');
|
|
17
|
-
let JitarController = class JitarController {
|
|
18
|
-
constructor(app) {
|
|
19
|
-
app.use('/jitar', express.static(rootLocation));
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
JitarController = __decorate([
|
|
23
|
-
Controller(''),
|
|
24
|
-
__metadata("design:paramtypes", [Function])
|
|
25
|
-
], JitarController);
|
|
26
|
-
export default JitarController;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
import { Logger } from 'tslog';
|
|
3
|
-
import LocalRepository from '../../runtime/LocalRepository.js';
|
|
4
|
-
import Proxy from '../../runtime/Proxy.js';
|
|
5
|
-
export default class ModulesController {
|
|
6
|
-
#private;
|
|
7
|
-
constructor(repository: LocalRepository | Proxy, logger: Logger);
|
|
8
|
-
registerClient(request: Request, response: Response): Promise<Response>;
|
|
9
|
-
getModule(request: Request, response: Response): Promise<Response>;
|
|
10
|
-
}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller, Get, Post } from '@overnightjs/core';
|
|
11
|
-
import { Logger } from 'tslog';
|
|
12
|
-
import ClientId from '../../runtime/ClientId.js';
|
|
13
|
-
import ValueSerializer from '../../runtime/serialization/ValueSerializer.js';
|
|
14
|
-
let ModulesController = class ModulesController {
|
|
15
|
-
#repository;
|
|
16
|
-
#logger;
|
|
17
|
-
constructor(repository, logger) {
|
|
18
|
-
this.#repository = repository;
|
|
19
|
-
this.#logger = logger;
|
|
20
|
-
}
|
|
21
|
-
async registerClient(request, response) {
|
|
22
|
-
if ((request.body instanceof Array) === false) {
|
|
23
|
-
}
|
|
24
|
-
const segmentFiles = request.body;
|
|
25
|
-
const clientId = await this.#repository.registerClient(segmentFiles);
|
|
26
|
-
this.#logger.info(`Registered client -> ${clientId} [${segmentFiles.join(',')}]`);
|
|
27
|
-
return response.status(200).send(clientId);
|
|
28
|
-
}
|
|
29
|
-
async getModule(request, response) {
|
|
30
|
-
const clientId = request.params.clientId;
|
|
31
|
-
if (typeof clientId !== 'string' || ClientId.validate(clientId) === false) {
|
|
32
|
-
return response.status(400).send('Invalid client id.');
|
|
33
|
-
}
|
|
34
|
-
const pathKey = `/${clientId}/`;
|
|
35
|
-
const pathIndex = request.path.indexOf(pathKey) + pathKey.length;
|
|
36
|
-
const filename = request.path.substring(pathIndex);
|
|
37
|
-
try {
|
|
38
|
-
const file = await this.#repository.loadModule(clientId, filename);
|
|
39
|
-
this.#logger.info(`Got module -> '${filename}' (${clientId})`);
|
|
40
|
-
response.set('Content-Type', file.type);
|
|
41
|
-
return response.status(200).send(file.content);
|
|
42
|
-
}
|
|
43
|
-
catch (error) {
|
|
44
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
45
|
-
this.#logger.error(`Failed to get module -> '${filename}' (${clientId}) | ${message}`);
|
|
46
|
-
const data = ValueSerializer.serialize(error);
|
|
47
|
-
response.setHeader('Content-Type', 'application/json');
|
|
48
|
-
return response.status(500).send(data);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
__decorate([
|
|
53
|
-
Post(),
|
|
54
|
-
__metadata("design:type", Function),
|
|
55
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
56
|
-
__metadata("design:returntype", Promise)
|
|
57
|
-
], ModulesController.prototype, "registerClient", null);
|
|
58
|
-
__decorate([
|
|
59
|
-
Get(':clientId/*'),
|
|
60
|
-
__metadata("design:type", Function),
|
|
61
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
62
|
-
__metadata("design:returntype", Promise)
|
|
63
|
-
], ModulesController.prototype, "getModule", null);
|
|
64
|
-
ModulesController = __decorate([
|
|
65
|
-
Controller('modules'),
|
|
66
|
-
__metadata("design:paramtypes", [Object, Logger])
|
|
67
|
-
], ModulesController);
|
|
68
|
-
export default ModulesController;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
import { Logger } from 'tslog';
|
|
3
|
-
import LocalGateway from '../../runtime/LocalGateway.js';
|
|
4
|
-
export default class NodesController {
|
|
5
|
-
#private;
|
|
6
|
-
constructor(gateway: LocalGateway, logger: Logger);
|
|
7
|
-
getNodes(request: Request, response: Response): Promise<Response>;
|
|
8
|
-
add(request: Request, response: Response): Promise<Response>;
|
|
9
|
-
}
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller, Get, Post } from '@overnightjs/core';
|
|
11
|
-
import { Logger } from 'tslog';
|
|
12
|
-
import LocalGateway from '../../runtime/LocalGateway.js';
|
|
13
|
-
import RemoteNode from '../../runtime/RemoteNode.js';
|
|
14
|
-
import NodeDto from '../models/NodeDto.js';
|
|
15
|
-
import DataConverter from '../utils/DataConverter.js';
|
|
16
|
-
let NodesController = class NodesController {
|
|
17
|
-
#gateway;
|
|
18
|
-
#logger;
|
|
19
|
-
constructor(gateway, logger) {
|
|
20
|
-
this.#gateway = gateway;
|
|
21
|
-
this.#logger = logger;
|
|
22
|
-
}
|
|
23
|
-
async getNodes(request, response) {
|
|
24
|
-
const nodes = this.#gateway.nodes.map(node => { return { url: node.url, procedureNames: node.getProcedureNames() }; });
|
|
25
|
-
this.#logger.info('Got nodes');
|
|
26
|
-
return response.status(200).send(nodes);
|
|
27
|
-
}
|
|
28
|
-
async add(request, response) {
|
|
29
|
-
try {
|
|
30
|
-
const nodeDto = await DataConverter.convert(NodeDto, request.body);
|
|
31
|
-
const node = new RemoteNode(nodeDto.url, nodeDto.procedureNames);
|
|
32
|
-
this.#gateway.addNode(node);
|
|
33
|
-
this.#logger.info(`Added node -> ${node.url}`);
|
|
34
|
-
return response.status(201).send();
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
const status = error instanceof Array ? 400 : 500;
|
|
38
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
39
|
-
this.#logger.error(`Failed to add node | ${message}`);
|
|
40
|
-
return response.status(status).send(error);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
__decorate([
|
|
45
|
-
Get(),
|
|
46
|
-
__metadata("design:type", Function),
|
|
47
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
48
|
-
__metadata("design:returntype", Promise)
|
|
49
|
-
], NodesController.prototype, "getNodes", null);
|
|
50
|
-
__decorate([
|
|
51
|
-
Post(),
|
|
52
|
-
__metadata("design:type", Function),
|
|
53
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
54
|
-
__metadata("design:returntype", Promise)
|
|
55
|
-
], NodesController.prototype, "add", null);
|
|
56
|
-
NodesController = __decorate([
|
|
57
|
-
Controller('nodes'),
|
|
58
|
-
__metadata("design:paramtypes", [LocalGateway, Logger])
|
|
59
|
-
], NodesController);
|
|
60
|
-
export default NodesController;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
import { Logger } from 'tslog';
|
|
3
|
-
import LocalGateway from '../../runtime/LocalGateway.js';
|
|
4
|
-
import LocalNode from '../../runtime/LocalNode.js';
|
|
5
|
-
import Proxy from '../../runtime/Proxy.js';
|
|
6
|
-
export default class ProceduresController {
|
|
7
|
-
#private;
|
|
8
|
-
constructor(runtime: LocalGateway | LocalNode | Proxy, logger: Logger);
|
|
9
|
-
getProcedureNames(request: Request, response: Response): Promise<Response>;
|
|
10
|
-
}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller, Get } from '@overnightjs/core';
|
|
11
|
-
import { Logger } from 'tslog';
|
|
12
|
-
let ProceduresController = class ProceduresController {
|
|
13
|
-
#runtime;
|
|
14
|
-
#logger;
|
|
15
|
-
constructor(runtime, logger) {
|
|
16
|
-
this.#runtime = runtime;
|
|
17
|
-
this.#logger = logger;
|
|
18
|
-
}
|
|
19
|
-
async getProcedureNames(request, response) {
|
|
20
|
-
const names = this.#runtime.getProcedureNames();
|
|
21
|
-
this.#logger.info('Got procedure names');
|
|
22
|
-
return response.status(200).send(names);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
__decorate([
|
|
26
|
-
Get(),
|
|
27
|
-
__metadata("design:type", Function),
|
|
28
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
29
|
-
__metadata("design:returntype", Promise)
|
|
30
|
-
], ProceduresController.prototype, "getProcedureNames", null);
|
|
31
|
-
ProceduresController = __decorate([
|
|
32
|
-
Controller('procedures'),
|
|
33
|
-
__metadata("design:paramtypes", [Object, Logger])
|
|
34
|
-
], ProceduresController);
|
|
35
|
-
export default ProceduresController;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller } from '@overnightjs/core';
|
|
11
|
-
import express from 'express';
|
|
12
|
-
import expressProxy from 'express-http-proxy';
|
|
13
|
-
import { Logger } from 'tslog';
|
|
14
|
-
import Proxy from '../../runtime/Proxy.js';
|
|
15
|
-
let ProxyController = class ProxyController {
|
|
16
|
-
#logger;
|
|
17
|
-
#repositoryUrl;
|
|
18
|
-
#runnerUrl;
|
|
19
|
-
constructor(app, proxy, logger) {
|
|
20
|
-
this.#logger = logger;
|
|
21
|
-
this.#repositoryUrl = proxy.repository.url ?? '';
|
|
22
|
-
this.#runnerUrl = proxy.runner.url ?? '';
|
|
23
|
-
app.use('/', expressProxy((message) => this.#selectProxy(message)));
|
|
24
|
-
}
|
|
25
|
-
#selectProxy(message) {
|
|
26
|
-
const url = message.url ?? '';
|
|
27
|
-
this.#logger.info(`Forwarding -> ${url}`);
|
|
28
|
-
return url.startsWith('/rpc')
|
|
29
|
-
? this.#runnerUrl
|
|
30
|
-
: this.#repositoryUrl;
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
ProxyController = __decorate([
|
|
34
|
-
Controller(''),
|
|
35
|
-
__metadata("design:paramtypes", [Function, Proxy, Logger])
|
|
36
|
-
], ProxyController);
|
|
37
|
-
export default ProxyController;
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Request, Response } from 'express';
|
|
2
|
-
import { Logger } from 'tslog';
|
|
3
|
-
import ProcedureContainer from '../../runtime/interfaces/ProcedureContainer.js';
|
|
4
|
-
export default class RPCController {
|
|
5
|
-
#private;
|
|
6
|
-
constructor(runtime: ProcedureContainer, logger: Logger, useSerializer: boolean);
|
|
7
|
-
runGet(request: Request, response: Response): Promise<Response>;
|
|
8
|
-
runPost(request: Request, response: Response): Promise<Response>;
|
|
9
|
-
}
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
-
};
|
|
7
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
-
};
|
|
10
|
-
import { Controller, Get, Post } from '@overnightjs/core';
|
|
11
|
-
import { Logger } from 'tslog';
|
|
12
|
-
import Version from '../../core/Version.js';
|
|
13
|
-
import ImplementationNotFound from '../../core/errors/ImplementationNotFound.js';
|
|
14
|
-
import InvalidVersionNumber from '../../core/errors/InvalidVersionNumber.js';
|
|
15
|
-
import MissingParameterValue from '../../core/errors/MissingParameterValue.js';
|
|
16
|
-
import ProcedureNotFound from '../../core/errors/ProcedureNotFound.js';
|
|
17
|
-
import UnknownParameter from '../../core/errors/UnknownParameter.js';
|
|
18
|
-
import ValueSerializer from '../../runtime/serialization/ValueSerializer.js';
|
|
19
|
-
const RPC_PARAMETERS = ['version', 'serialize'];
|
|
20
|
-
const INVALID_REQUEST_ERRORS = [InvalidVersionNumber, MissingParameterValue, UnknownParameter];
|
|
21
|
-
const NOT_FOUND_ERRORS = [ImplementationNotFound, ProcedureNotFound];
|
|
22
|
-
let RPCController = class RPCController {
|
|
23
|
-
#runtime;
|
|
24
|
-
#logger;
|
|
25
|
-
#useSerializer;
|
|
26
|
-
constructor(runtime, logger, useSerializer) {
|
|
27
|
-
this.#runtime = runtime;
|
|
28
|
-
this.#logger = logger;
|
|
29
|
-
this.#useSerializer = useSerializer;
|
|
30
|
-
this.#showProcedureInfo();
|
|
31
|
-
}
|
|
32
|
-
#showProcedureInfo() {
|
|
33
|
-
const procedureNames = this.#runtime.getProcedureNames();
|
|
34
|
-
if (procedureNames.length === 0) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
procedureNames.sort();
|
|
38
|
-
this.#logger.info('Registered RPC entries', procedureNames);
|
|
39
|
-
}
|
|
40
|
-
async runGet(request, response) {
|
|
41
|
-
const fqn = this.#extractFqn(request);
|
|
42
|
-
const version = this.#extractVersion(request);
|
|
43
|
-
const args = this.#extractQueryArguments(request);
|
|
44
|
-
const serialize = this.#extractSerialize(request);
|
|
45
|
-
return this.#run(fqn, version, args, response, serialize);
|
|
46
|
-
}
|
|
47
|
-
async runPost(request, response) {
|
|
48
|
-
const fqn = this.#extractFqn(request);
|
|
49
|
-
const version = this.#extractVersion(request);
|
|
50
|
-
const args = await this.#extractBodyArguments(request);
|
|
51
|
-
const serialize = this.#extractSerialize(request);
|
|
52
|
-
return this.#run(fqn, version, args, response, serialize);
|
|
53
|
-
}
|
|
54
|
-
#extractFqn(request) {
|
|
55
|
-
return request.path.substring(1);
|
|
56
|
-
}
|
|
57
|
-
#extractVersion(request) {
|
|
58
|
-
return request.query.version !== undefined
|
|
59
|
-
? Version.parse(request.query.version.toString())
|
|
60
|
-
: Version.DEFAULT;
|
|
61
|
-
}
|
|
62
|
-
#extractSerialize(request) {
|
|
63
|
-
return request.query.serialize === 'true';
|
|
64
|
-
}
|
|
65
|
-
#extractQueryArguments(request) {
|
|
66
|
-
const args = new Map();
|
|
67
|
-
for (const [key, value] of Object.entries(request.query)) {
|
|
68
|
-
if (RPC_PARAMETERS.includes(key)) {
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
args.set(key, value);
|
|
72
|
-
}
|
|
73
|
-
return args;
|
|
74
|
-
}
|
|
75
|
-
async #extractBodyArguments(request) {
|
|
76
|
-
const args = this.#useSerializer
|
|
77
|
-
? await ValueSerializer.deserialize(request.body)
|
|
78
|
-
: request.body;
|
|
79
|
-
return new Map(Object.entries(args));
|
|
80
|
-
}
|
|
81
|
-
async #run(fqn, version, args, response, serialize) {
|
|
82
|
-
if (this.#runtime.hasProcedure(fqn) === false) {
|
|
83
|
-
return response.status(404).send(`Procedure not found -> ${fqn}`);
|
|
84
|
-
}
|
|
85
|
-
try {
|
|
86
|
-
const result = await this.#runtime.run(fqn, version, args);
|
|
87
|
-
this.#logger.info(`Ran procedure -> ${fqn} (${version.toString()})`);
|
|
88
|
-
return this.#createResultResponse(result, response, this.#useSerializer && serialize);
|
|
89
|
-
}
|
|
90
|
-
catch (error) {
|
|
91
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
92
|
-
const errorData = serialize ? error : message;
|
|
93
|
-
this.#logger.error(`Failed to run procedure -> ${fqn} (${version.toString()}) | ${message}`);
|
|
94
|
-
return this.#createErrorResponse(error, errorData, response, serialize);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
#createResultResponse(result, response, serialize) {
|
|
98
|
-
const content = this.#createResponseContent(result, serialize);
|
|
99
|
-
const contentType = this.#createResponseContentType(content);
|
|
100
|
-
response.setHeader('Content-Type', contentType);
|
|
101
|
-
return response.status(200).send(content);
|
|
102
|
-
}
|
|
103
|
-
#createErrorResponse(error, errorData, response, serialize) {
|
|
104
|
-
const content = this.#createResponseContent(errorData, serialize);
|
|
105
|
-
const contentType = this.#createResponseContentType(content);
|
|
106
|
-
const statusCode = this.#createResponseStatusCode(error);
|
|
107
|
-
response.setHeader('Content-Type', contentType);
|
|
108
|
-
return response.status(statusCode).send(content);
|
|
109
|
-
}
|
|
110
|
-
#createResponseContent(data, serialize) {
|
|
111
|
-
return serialize
|
|
112
|
-
? ValueSerializer.serialize(data)
|
|
113
|
-
: data;
|
|
114
|
-
}
|
|
115
|
-
#createResponseContentType(content) {
|
|
116
|
-
return typeof content === 'object'
|
|
117
|
-
? 'application/json'
|
|
118
|
-
: 'text/plain';
|
|
119
|
-
}
|
|
120
|
-
#createResponseStatusCode(error) {
|
|
121
|
-
if (INVALID_REQUEST_ERRORS.some(invalidError => error instanceof invalidError)) {
|
|
122
|
-
return 400;
|
|
123
|
-
}
|
|
124
|
-
if (NOT_FOUND_ERRORS.some(notFoundError => error instanceof notFoundError)) {
|
|
125
|
-
return 404;
|
|
126
|
-
}
|
|
127
|
-
return 500;
|
|
128
|
-
}
|
|
129
|
-
};
|
|
130
|
-
__decorate([
|
|
131
|
-
Get('*'),
|
|
132
|
-
__metadata("design:type", Function),
|
|
133
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
134
|
-
__metadata("design:returntype", Promise)
|
|
135
|
-
], RPCController.prototype, "runGet", null);
|
|
136
|
-
__decorate([
|
|
137
|
-
Post('*'),
|
|
138
|
-
__metadata("design:type", Function),
|
|
139
|
-
__metadata("design:paramtypes", [Object, Object]),
|
|
140
|
-
__metadata("design:returntype", Promise)
|
|
141
|
-
], RPCController.prototype, "runPost", null);
|
|
142
|
-
RPCController = __decorate([
|
|
143
|
-
Controller('rpc'),
|
|
144
|
-
__metadata("design:paramtypes", [Object, Logger, Boolean])
|
|
145
|
-
], RPCController);
|
|
146
|
-
export default RPCController;
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
var RuntimeDefaults;
|
|
2
|
-
(function (RuntimeDefaults) {
|
|
3
|
-
RuntimeDefaults["URL"] = "http://localhost:3000";
|
|
4
|
-
RuntimeDefaults["SOURCE"] = "./src";
|
|
5
|
-
RuntimeDefaults["CACHE"] = "./cache";
|
|
6
|
-
RuntimeDefaults["INDEX"] = "index.html";
|
|
7
|
-
})(RuntimeDefaults || (RuntimeDefaults = {}));
|
|
8
|
-
export default RuntimeDefaults;
|