jitar 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/dist/client.d.ts +1 -0
  2. package/dist/client.js +12 -0
  3. package/dist/core/Implementation.js +7 -0
  4. package/dist/core/errors/UnknownParameter.d.ts +3 -0
  5. package/dist/core/errors/UnknownParameter.js +6 -0
  6. package/dist/runtime/LocalRepository.d.ts +1 -1
  7. package/dist/runtime/LocalRepository.js +13 -4
  8. package/dist/server/configuration/RepositoryConfiguration.d.ts +1 -0
  9. package/dist/server/configuration/RepositoryConfiguration.js +7 -1
  10. package/dist/server/configuration/StandaloneConfiguration.d.ts +1 -0
  11. package/dist/server/configuration/StandaloneConfiguration.js +6 -0
  12. package/dist/server/controllers/RPCController.js +20 -3
  13. package/dist/server/utils/LocalFileManager.d.ts +1 -0
  14. package/dist/server/utils/LocalFileManager.js +19 -11
  15. package/dist/server/utils/RuntimeConfigurator.js +9 -4
  16. package/package.json +6 -2
  17. package/.eslintignore +0 -3
  18. package/.eslintrc +0 -16
  19. package/jest.config.js +0 -20
  20. package/src/client.ts +0 -18
  21. package/src/core/ErrorManager.ts +0 -18
  22. package/src/core/Implementation.ts +0 -53
  23. package/src/core/Procedure.ts +0 -98
  24. package/src/core/Segment.ts +0 -62
  25. package/src/core/SegmentBuilder.ts +0 -55
  26. package/src/core/Version.ts +0 -68
  27. package/src/core/definitions/AccessLevel.ts +0 -3
  28. package/src/core/errors/ImplementationNotFound.ts +0 -12
  29. package/src/core/errors/InvalidVersionNumber.ts +0 -12
  30. package/src/core/errors/MissingParameterValue.ts +0 -12
  31. package/src/core/errors/NotImplemented.ts +0 -12
  32. package/src/core/errors/ProcedureNotFound.ts +0 -12
  33. package/src/core/interfaces/Runner.ts +0 -7
  34. package/src/core/reflection/ParameterParser.ts +0 -74
  35. package/src/core/reflection/ReflectionHelper.ts +0 -118
  36. package/src/core/reflection/models/ReflectionField.ts +0 -22
  37. package/src/core/reflection/models/ReflectionParameter.ts +0 -18
  38. package/src/core/types/Component.ts +0 -8
  39. package/src/core/types/FlexObject.ts +0 -4
  40. package/src/core/types/Module.ts +0 -6
  41. package/src/core/types/SegmentImplementation.ts +0 -9
  42. package/src/core/types/SegmentModule.ts +0 -9
  43. package/src/core/types/SegmentProcedure.ts +0 -11
  44. package/src/core/utils/FqnBuilder.ts +0 -11
  45. package/src/hooks.ts +0 -2
  46. package/src/lib.ts +0 -7
  47. package/src/runtime/ClientId.ts +0 -18
  48. package/src/runtime/Gateway.ts +0 -18
  49. package/src/runtime/LocalGateway.ts +0 -93
  50. package/src/runtime/LocalNode.ts +0 -130
  51. package/src/runtime/LocalRepository.ts +0 -154
  52. package/src/runtime/Node.ts +0 -15
  53. package/src/runtime/NodeBalancer.ts +0 -61
  54. package/src/runtime/NodeMonitor.ts +0 -63
  55. package/src/runtime/Proxy.ts +0 -60
  56. package/src/runtime/Remote.ts +0 -157
  57. package/src/runtime/RemoteGateway.ts +0 -40
  58. package/src/runtime/RemoteNode.ts +0 -49
  59. package/src/runtime/RemoteRepository.ts +0 -60
  60. package/src/runtime/Repository.ts +0 -20
  61. package/src/runtime/Runtime.ts +0 -47
  62. package/src/runtime/caching/CacheBuilder.ts +0 -424
  63. package/src/runtime/caching/ImportRewriter.ts +0 -76
  64. package/src/runtime/caching/RemoteBuilder.ts +0 -51
  65. package/src/runtime/caching/SourceAppender.ts +0 -57
  66. package/src/runtime/caching/definitions/Keywords.ts +0 -3
  67. package/src/runtime/caching/errors/InvalidSegmentFilename.ts +0 -8
  68. package/src/runtime/caching/errors/MissingModuleExport.ts +0 -8
  69. package/src/runtime/caching/errors/SegmentFileNotLoaded.ts +0 -8
  70. package/src/runtime/caching/errors/SegmentModuleNotLoaded.ts +0 -8
  71. package/src/runtime/caching/models/ApplicationModule.ts +0 -30
  72. package/src/runtime/caching/models/Implementation.ts +0 -41
  73. package/src/runtime/caching/models/Procedure.ts +0 -26
  74. package/src/runtime/caching/models/Segment.ts +0 -28
  75. package/src/runtime/caching/models/SegmentModule.ts +0 -26
  76. package/src/runtime/caching/types/SegmentFile.ts +0 -6
  77. package/src/runtime/caching/types/SegmentImportProperties.ts +0 -9
  78. package/src/runtime/caching/types/SegmentImports.ts +0 -6
  79. package/src/runtime/errors/ClientNotFound.ts +0 -12
  80. package/src/runtime/errors/FileNotFound.ts +0 -12
  81. package/src/runtime/errors/InvalidClientId.ts +0 -12
  82. package/src/runtime/errors/InvalidJitarHooks.ts +0 -12
  83. package/src/runtime/errors/InvalidSegmentFile.ts +0 -12
  84. package/src/runtime/errors/ModuleNotLoaded.ts +0 -12
  85. package/src/runtime/errors/NoNodeAvailable.ts +0 -12
  86. package/src/runtime/errors/RepositoryNotAvaiable.ts +0 -12
  87. package/src/runtime/errors/RuntimeNotAvailable.ts +0 -12
  88. package/src/runtime/errors/SegmentNotFound.ts +0 -12
  89. package/src/runtime/hooks/dependencies.ts +0 -19
  90. package/src/runtime/hooks/runtime.ts +0 -25
  91. package/src/runtime/interfaces/FileManager.ts +0 -19
  92. package/src/runtime/interfaces/HealthCheck.ts +0 -5
  93. package/src/runtime/interfaces/ProcedureContainer.ts +0 -9
  94. package/src/runtime/models/File.ts +0 -22
  95. package/src/runtime/serialization/ArraySerializer.ts +0 -27
  96. package/src/runtime/serialization/ClassSerializer.ts +0 -133
  97. package/src/runtime/serialization/MapSerializer.ts +0 -60
  98. package/src/runtime/serialization/ObjectSerializer.ts +0 -42
  99. package/src/runtime/serialization/SetSerializer.ts +0 -42
  100. package/src/runtime/serialization/ValueSerializer.ts +0 -81
  101. package/src/runtime/serialization/errors/ClassNotFound.ts +0 -12
  102. package/src/runtime/serialization/errors/InvalidClass.ts +0 -12
  103. package/src/runtime/serialization/errors/InvalidPropertyType.ts +0 -12
  104. package/src/runtime/serialization/interfaces/Serializer.ts +0 -10
  105. package/src/runtime/serialization/types/SerializableObject.ts +0 -6
  106. package/src/runtime/serialization/types/Serialized.ts +0 -8
  107. package/src/runtime/serialization/types/SerializedClass.ts +0 -13
  108. package/src/runtime/serialization/types/SerializedMap.ts +0 -13
  109. package/src/runtime/serialization/types/SerializedObject.ts +0 -4
  110. package/src/runtime/serialization/types/SerializedSet.ts +0 -9
  111. package/src/runtime/types/JitarHooks.ts +0 -10
  112. package/src/runtime/types/ModuleImporter.ts +0 -6
  113. package/src/runtime/utils/ModuleAnalyser.ts +0 -60
  114. package/src/runtime/utils/ModuleLoader.ts +0 -51
  115. package/src/runtime/utils/UrlRewriter.ts +0 -59
  116. package/src/server/JitarServer.ts +0 -161
  117. package/src/server/configuration/GatewayConfiguration.ts +0 -9
  118. package/src/server/configuration/NodeConfiguration.ts +0 -15
  119. package/src/server/configuration/ProxyConfiguration.ts +0 -16
  120. package/src/server/configuration/RepositoryConfiguration.ts +0 -17
  121. package/src/server/configuration/RuntimeConfiguration.ts +0 -30
  122. package/src/server/configuration/ServerOptions.ts +0 -14
  123. package/src/server/configuration/StandaloneConfiguration.ts +0 -21
  124. package/src/server/controllers/AssetsController.ts +0 -59
  125. package/src/server/controllers/HealthController.ts +0 -41
  126. package/src/server/controllers/JitarController.ts +0 -18
  127. package/src/server/controllers/ModulesController.ts +0 -77
  128. package/src/server/controllers/NodesController.ts +0 -58
  129. package/src/server/controllers/ProceduresController.ts +0 -31
  130. package/src/server/controllers/ProxyController.ts +0 -38
  131. package/src/server/controllers/RPCController.ts +0 -173
  132. package/src/server/definitions/RuntimeDefaults.ts +0 -10
  133. package/src/server/errors/MissingConfigurationValue.ts +0 -8
  134. package/src/server/errors/RuntimeNotAvaiable.ts +0 -8
  135. package/src/server/errors/UnknownRuntimeMode.ts +0 -8
  136. package/src/server/models/HealthDto.ts +0 -11
  137. package/src/server/models/NodeDto.ts +0 -11
  138. package/src/server/utils/DataConverter.ts +0 -15
  139. package/src/server/utils/LocalFileManager.ts +0 -122
  140. package/src/server/utils/RuntimeConfigurationLoader.ts +0 -19
  141. package/src/server/utils/RuntimeConfigurator.ts +0 -207
  142. package/src/server/utils/ServerOptionsReader.ts +0 -17
  143. package/src/server.ts +0 -16
  144. package/test/_fixtures/core/Implementation.fixture.ts +0 -33
  145. package/test/_fixtures/core/Procedure.fixture.ts +0 -33
  146. package/test/_fixtures/core/Segment.fixture.ts +0 -36
  147. package/test/_fixtures/core/SegmentBuilder.fixture.ts +0 -45
  148. package/test/_fixtures/core/Version.fixture.ts +0 -18
  149. package/test/_fixtures/core/reflection/ReflectionHelper.fixture.ts +0 -56
  150. package/test/_fixtures/runtime/LocalGateway.fixture.ts +0 -24
  151. package/test/_fixtures/runtime/LocalNode.fixture.ts +0 -16
  152. package/test/_fixtures/runtime/LocalRepository.fixture.ts +0 -73
  153. package/test/_fixtures/runtime/NodeBalancer.fixture.ts +0 -19
  154. package/test/_fixtures/runtime/NodeMonitor.fixture.ts +0 -34
  155. package/test/_fixtures/runtime/RemoteNode.fixture.ts +0 -8
  156. package/test/_fixtures/runtime/caching/ImportRewriter.fixture.ts +0 -81
  157. package/test/_fixtures/runtime/caching/RemoteBuilder.fixture.ts +0 -50
  158. package/test/_fixtures/runtime/caching/SourceAppender.fixture.ts +0 -35
  159. package/test/_fixtures/runtime/segments.ts +0 -78
  160. package/test/_fixtures/runtime/serialization/ValueSerializer.fixture.ts +0 -134
  161. package/test/_fixtures/runtime/utils/ModuleAnaliser.fixture.ts +0 -26
  162. package/test/core/Implementation.spec.ts +0 -89
  163. package/test/core/Procedure.spec.ts +0 -108
  164. package/test/core/Segment.spec.ts +0 -74
  165. package/test/core/SegmentBuilder.spec.ts +0 -39
  166. package/test/core/Version.spec.ts +0 -103
  167. package/test/core/errors/ErrorManager.spec.ts +0 -32
  168. package/test/core/reflection/ReflectionHelper.spec.ts +0 -128
  169. package/test/core/utils/FqnBuilder.spec.ts +0 -22
  170. package/test/runtime/ClientId.spec.ts +0 -43
  171. package/test/runtime/LocalGateway.spec.ts +0 -40
  172. package/test/runtime/LocalNode.spec.ts +0 -87
  173. package/test/runtime/LocalRepository.spec.ts +0 -50
  174. package/test/runtime/NodeBalancer.spec.ts +0 -39
  175. package/test/runtime/NodeMonitor.spec.ts +0 -31
  176. package/test/runtime/RemoteNode.spec.ts +0 -43
  177. package/test/runtime/caching/ImportRewriter.spec.ts +0 -68
  178. package/test/runtime/caching/RemoteBuilder.spec.ts +0 -21
  179. package/test/runtime/caching/SourceAppender.spec.ts +0 -31
  180. package/test/runtime/serialization/ValueSerializer.spec.ts +0 -203
  181. package/test/runtime/utils/ModuleAnalyser.spec.ts +0 -54
  182. package/test/runtime/utils/UrlRewriter.spec.ts +0 -57
  183. package/tsconfig.json +0 -23
@@ -1,161 +0,0 @@
1
-
2
- import { Server as OvernightServer } from '@overnightjs/core';
3
- import bodyParser from 'body-parser';
4
- import { Logger, TLogLevelName } from 'tslog';
5
-
6
- import HealthCheck from '../runtime/interfaces/HealthCheck.js';
7
- import LocalGateway from '../runtime/LocalGateway.js';
8
- import LocalNode from '../runtime/LocalNode.js';
9
- import LocalRepository from '../runtime/LocalRepository.js';
10
- import Proxy from '../runtime/Proxy.js';
11
- import Runtime from '../runtime/Runtime.js';
12
-
13
- import RuntimeConfigurationLoader from './utils/RuntimeConfigurationLoader.js';
14
- import RuntimeConfigurator from './utils/RuntimeConfigurator.js';
15
- import ServerOptionsReader from './utils/ServerOptionsReader.js';
16
-
17
- import AssetsController from './controllers/AssetsController.js';
18
- import HealthController from './controllers/HealthController.js';
19
- import JitarController from './controllers/JitarController.js';
20
- import ModulesController from './controllers/ModulesController.js';
21
- import NodesController from './controllers/NodesController.js';
22
- import ProceduresController from './controllers/ProceduresController.js';
23
- import ProxyController from './controllers/ProxyController.js';
24
- import RPCController from './controllers/RPCController.js';
25
-
26
- import RuntimeConfiguration from './configuration/RuntimeConfiguration.js';
27
- import RuntimeDefaults from './definitions/RuntimeDefaults.js';
28
-
29
- import RuntimeNotAvaiable from './errors/RuntimeNotAvaiable.js';
30
-
31
- const STARTUP_MESSAGE = `
32
- ██ ██ ████████ █████ ██████
33
- ██ ██ ██ ██ ██ ██ ██
34
- ██ ██ ██ ███████ ██████
35
- ██ ██ ██ ██ ██ ██ ██ ██
36
- █████ ██ ██ ██ ██ ██ ██
37
- ____________________________________
38
- By Masking Technology (masking.tech)
39
- `;
40
-
41
- export default class JitarServer extends OvernightServer
42
- {
43
- #runtime?: Runtime;
44
-
45
- constructor()
46
- {
47
- super(false);
48
-
49
- this.app.use(bodyParser.json());
50
- this.app.use(bodyParser.urlencoded({ extended: true }));
51
- }
52
-
53
- async start(): Promise<void>
54
- {
55
- console.log(STARTUP_MESSAGE);
56
-
57
- const options = await ServerOptionsReader.read();
58
- const configuration = await RuntimeConfigurationLoader.load(options.config);
59
- const runtime = await RuntimeConfigurator.configure(configuration);
60
-
61
- const logger = this.#createLogger(options.loglevel);
62
-
63
- this.#addControllers(configuration, runtime, logger);
64
-
65
- const url = new URL(configuration.url ?? RuntimeDefaults.URL);
66
-
67
- await this.#startServer(url.port);
68
-
69
- this.#runtime = runtime;
70
-
71
- logger.info(`Server started and listening at port ${url.port}`);
72
- }
73
-
74
- addHealthCheck(name: string, healthCheck: HealthCheck): void
75
- {
76
- if (this.#runtime === undefined)
77
- {
78
- throw new RuntimeNotAvaiable();
79
- }
80
-
81
- this.#runtime.addHealthCheck(name, healthCheck);
82
- }
83
-
84
- #createLogger(level: string): Logger
85
- {
86
- return new Logger(
87
- {
88
- displayFilePath: 'hidden',
89
- minLevel: level as TLogLevelName
90
- });
91
- }
92
-
93
- #addControllers(configuration: RuntimeConfiguration, runtime: Runtime, logger: Logger): void
94
- {
95
- if (configuration.standalone !== undefined && runtime instanceof Proxy)
96
- {
97
- const index = configuration.standalone.index ?? RuntimeDefaults.INDEX;
98
-
99
- this.#addStandAloneControllers(runtime, logger, index);
100
- }
101
- else if (configuration.repository !== undefined && runtime instanceof LocalRepository)
102
- {
103
- const index = configuration.repository.index ?? RuntimeDefaults.INDEX;
104
-
105
- this.#addRepositoryControllers(runtime, logger, index);
106
- }
107
- else if (configuration.gateway !== undefined && runtime instanceof LocalGateway)
108
- {
109
- this.#addGatewayControllers(runtime, logger);
110
- }
111
- else if (configuration.node !== undefined && runtime instanceof LocalNode)
112
- {
113
- this.#addNodeControllers(runtime, logger);
114
- }
115
- else if (configuration.proxy !== undefined && runtime instanceof Proxy)
116
- {
117
- this.#addProxyControllers(runtime, logger);
118
- }
119
- }
120
-
121
- #addStandAloneControllers(proxy: Proxy, logger: Logger, index: string): void
122
- {
123
- super.addControllers(new HealthController(proxy, logger));
124
- super.addControllers(new JitarController(this.app));
125
- super.addControllers(new ModulesController(proxy, logger));
126
- super.addControllers(new ProceduresController(proxy, logger));
127
- super.addControllers(new RPCController(proxy, logger, true));
128
- super.addControllers(new AssetsController(this.app, proxy, index, logger));
129
- }
130
-
131
- #addRepositoryControllers(repository: LocalRepository, logger: Logger, index: string): void
132
- {
133
- super.addControllers(new JitarController(this.app));
134
- super.addControllers(new ModulesController(repository, logger));
135
- super.addControllers(new AssetsController(this.app, repository, index, logger));
136
- }
137
-
138
- #addGatewayControllers(gateway: LocalGateway, logger: Logger): void
139
- {
140
- super.addControllers(new NodesController(gateway, logger));
141
- super.addControllers(new ProceduresController(gateway, logger));
142
- super.addControllers(new RPCController(gateway, logger, false));
143
- }
144
-
145
- #addNodeControllers(node: LocalNode, logger: Logger): void
146
- {
147
- super.addControllers(new HealthController(node, logger));
148
- super.addControllers(new ProceduresController(node, logger));
149
- super.addControllers(new RPCController(node, logger, true));
150
- }
151
-
152
- #addProxyControllers(proxy: Proxy, logger: Logger): void
153
- {
154
- super.addControllers(new ProxyController(this.app, proxy, logger));
155
- }
156
-
157
- async #startServer(port: string): Promise<void>
158
- {
159
- return new Promise(resolve => { this.app.listen(port, resolve); });
160
- }
161
- }
@@ -1,9 +0,0 @@
1
-
2
- import { IsOptional, IsNumber } from 'class-validator';
3
-
4
- export default class GatewayConfiguration
5
- {
6
- @IsNumber()
7
- @IsOptional()
8
- monitor?: number;
9
- }
@@ -1,15 +0,0 @@
1
-
2
- import { IsArray, IsUrl, IsOptional } from 'class-validator';
3
-
4
- export default class NodeConfiguration
5
- {
6
- @IsUrl()
7
- @IsOptional()
8
- gateway?: string;
9
-
10
- @IsUrl()
11
- repository = '';
12
-
13
- @IsArray()
14
- segments?: string[];
15
- }
@@ -1,16 +0,0 @@
1
-
2
- import { IsUrl, IsOptional } from 'class-validator';
3
-
4
- export default class ProxyConfiguration
5
- {
6
- @IsUrl()
7
- @IsOptional()
8
- node?: string;
9
-
10
- @IsUrl()
11
- @IsOptional()
12
- gateway?: string;
13
-
14
- @IsUrl()
15
- repository?: string;
16
- }
@@ -1,17 +0,0 @@
1
-
2
- import { IsOptional, IsString } from 'class-validator';
3
-
4
- export default class RepositoryConfiguration
5
- {
6
- @IsString()
7
- @IsOptional()
8
- source?: string;
9
-
10
- @IsString()
11
- @IsOptional()
12
- cache?: string;
13
-
14
- @IsString()
15
- @IsOptional()
16
- index?: string;
17
- }
@@ -1,30 +0,0 @@
1
-
2
- import { IsOptional, IsUrl } from 'class-validator';
3
-
4
- import GatewayConfiguration from './GatewayConfiguration.js';
5
- import NodeConfiguration from './NodeConfiguration.js';
6
- import ProxyConfiguration from './ProxyConfiguration.js';
7
- import RepositoryConfiguration from './RepositoryConfiguration.js';
8
- import StandaloneConfiguration from './StandaloneConfiguration.js';
9
-
10
- export default class RuntimeConfiguration
11
- {
12
- @IsUrl()
13
- @IsOptional()
14
- url?: string;
15
-
16
- @IsOptional()
17
- standalone?: StandaloneConfiguration;
18
-
19
- @IsOptional()
20
- repository?: RepositoryConfiguration;
21
-
22
- @IsOptional()
23
- gateway?: GatewayConfiguration;
24
-
25
- @IsOptional()
26
- node?: NodeConfiguration;
27
-
28
- @IsOptional()
29
- proxy?: ProxyConfiguration;
30
- }
@@ -1,14 +0,0 @@
1
-
2
- import { Contains, IsOptional, IsString } from 'class-validator';
3
-
4
- export default class ServerOptions
5
- {
6
- @IsString()
7
- @IsOptional()
8
- loglevel = 'info';
9
-
10
- @IsString()
11
- @Contains('.json')
12
- @IsOptional()
13
- config = 'config.json';
14
- }
@@ -1,21 +0,0 @@
1
-
2
- import { IsArray, IsOptional, IsString } from 'class-validator';
3
-
4
- export default class StandaloneConfiguration
5
- {
6
- @IsString()
7
- @IsOptional()
8
- source?: string;
9
-
10
- @IsString()
11
- @IsOptional()
12
- cache?: string;
13
-
14
- @IsString()
15
- @IsOptional()
16
- index?: string;
17
-
18
- @IsArray()
19
- @IsOptional()
20
- segments?: string[];
21
- }
@@ -1,59 +0,0 @@
1
-
2
- import { Controller } from '@overnightjs/core';
3
- import express, { Request, Response } from 'express';
4
- import { Logger } from 'tslog';
5
-
6
- import FileNotFound from '../../runtime/errors/FileNotFound.js';
7
- import LocalRepository from '../../runtime/LocalRepository.js';
8
- import Proxy from '../../runtime/Proxy.js';
9
-
10
- @Controller('')
11
- export default class AssetsController
12
- {
13
- #repository: LocalRepository | Proxy;
14
- #indexFile: string;
15
- #logger: Logger;
16
-
17
- constructor(app: express.Application, repository: LocalRepository | Proxy, indexFile: string, logger: Logger)
18
- {
19
- this.#repository = repository;
20
- this.#indexFile = indexFile;
21
- this.#logger = logger;
22
-
23
- app.get('*', (request: Request, response: Response) => { this.#getContent(request, response) })
24
- }
25
-
26
- async #getContent(request: Request, response: Response): Promise<void>
27
- {
28
- this.#logger.info(`Got asset -> '${request.path}'`);
29
-
30
- const path = request.path.substring(1).trim();
31
- const filename = path.length === 0 ? this.#indexFile : path;
32
-
33
- try
34
- {
35
- const file = await this.#repository.loadAsset(filename);
36
-
37
- response.set('Content-Type', file.type);
38
- response.set('Content-Length', String(file.size));
39
- response.status(200).send(file.content);
40
- }
41
- catch (error: unknown)
42
- {
43
- if (error instanceof FileNotFound)
44
- {
45
- this.#logger.warn(`Failed to get asset -> '${filename}' | ${error.message}`);
46
-
47
- response.status(404).send(error.message);
48
-
49
- return;
50
- }
51
-
52
- const message = error instanceof Error ? error.message : String(error);
53
-
54
- this.#logger.error(`Failed to get file content -> '${filename}' | ${message}`);
55
-
56
- response.status(500).send(message);
57
- }
58
- }
59
- }
@@ -1,41 +0,0 @@
1
-
2
- import { Controller, Get } from '@overnightjs/core';
3
- import { Request, Response } from 'express';
4
- import { Logger } from 'tslog';
5
-
6
- import LocalNode from '../../runtime/LocalNode.js';
7
- import Proxy from '../../runtime/Proxy.js';
8
-
9
- @Controller('health')
10
- export default class HealthController
11
- {
12
- #node: LocalNode | Proxy;
13
- #logger: Logger;
14
-
15
- constructor(node: LocalNode | Proxy, logger: Logger)
16
- {
17
- this.#node = node;
18
- this.#logger = logger;
19
- }
20
-
21
- @Get()
22
- async getHealth(request: Request, response: Response): Promise<Response>
23
- {
24
- const health = await this.#node.getHealth();
25
- const data = Object.fromEntries(health);
26
-
27
- this.#logger.debug('Got health');
28
-
29
- return response.status(200).send(data);
30
- }
31
-
32
- @Get('status')
33
- async isHealthy(request: Request, response: Response): Promise<Response>
34
- {
35
- const healthy = await this.#node.isHealthy();
36
-
37
- this.#logger.debug('Got health status');
38
-
39
- return response.status(200).send(healthy);
40
- }
41
- }
@@ -1,18 +0,0 @@
1
-
2
- import { Controller } from '@overnightjs/core';
3
- import express from 'express';
4
- import path from 'path';
5
- import { fileURLToPath } from 'url';
6
-
7
- const filePath = fileURLToPath(import.meta.url);
8
- const fileLocation = path.dirname(filePath);
9
- const rootLocation = path.join(fileLocation, '../../')
10
-
11
- @Controller('')
12
- export default class JitarController
13
- {
14
- constructor(app: express.Application)
15
- {
16
- app.use('/jitar', express.static(rootLocation));
17
- }
18
- }
@@ -1,77 +0,0 @@
1
-
2
- import { Controller, Get, Post } from '@overnightjs/core';
3
- import { Request, Response } from 'express';
4
- import { Logger } from 'tslog';
5
-
6
- import ClientId from '../../runtime/ClientId.js';
7
- import LocalRepository from '../../runtime/LocalRepository.js';
8
- import Proxy from '../../runtime/Proxy.js';
9
- import ValueSerializer from '../../runtime/serialization/ValueSerializer.js';
10
-
11
- @Controller('modules')
12
- export default class ModulesController
13
- {
14
- #repository: LocalRepository | Proxy;
15
- #logger: Logger;
16
-
17
- constructor(repository: LocalRepository | Proxy, logger: Logger)
18
- {
19
- this.#repository = repository;
20
- this.#logger = logger;
21
- }
22
-
23
- @Post()
24
- async registerClient(request: Request, response: Response): Promise<Response>
25
- {
26
- if ((request.body instanceof Array) === false)
27
- {
28
- // TODO: Throw error.
29
- }
30
-
31
- const segmentFiles = request.body as string[];
32
-
33
- const clientId = await this.#repository.registerClient(segmentFiles);
34
-
35
- this.#logger.info(`Registered client -> ${clientId} [${segmentFiles.join(',')}]`);
36
-
37
- return response.status(200).send(clientId);
38
- }
39
-
40
- @Get(':clientId/*')
41
- async getModule(request: Request, response: Response): Promise<Response>
42
- {
43
- const clientId = request.params.clientId;
44
-
45
- if (typeof clientId !== 'string' || ClientId.validate(clientId) === false)
46
- {
47
- return response.status(400).send('Invalid client id.');
48
- }
49
-
50
- const pathKey = `/${clientId}/`;
51
- const pathIndex = request.path.indexOf(pathKey) + pathKey.length;
52
- const filename = request.path.substring(pathIndex);
53
-
54
- try
55
- {
56
- const file = await this.#repository.loadModule(clientId, filename);
57
-
58
- this.#logger.info(`Got module -> '${filename}' (${clientId})`);
59
-
60
- response.set('Content-Type', file.type);
61
-
62
- return response.status(200).send(file.content);
63
- }
64
- catch (error: unknown)
65
- {
66
- const message = error instanceof Error ? error.message : String(error);
67
-
68
- this.#logger.error(`Failed to get module -> '${filename}' (${clientId}) | ${message}`);
69
-
70
- const data = ValueSerializer.serialize(error);
71
-
72
- response.setHeader('Content-Type', 'application/json');
73
-
74
- return response.status(500).send(data);
75
- }
76
- }
77
- }
@@ -1,58 +0,0 @@
1
-
2
- import { Controller, Get, Post } from '@overnightjs/core';
3
- import { Request, Response } from 'express';
4
- import { Logger } from 'tslog';
5
-
6
- import LocalGateway from '../../runtime/LocalGateway.js';
7
- import RemoteNode from '../../runtime/RemoteNode.js';
8
-
9
- import NodeDto from '../models/NodeDto.js';
10
- import DataConverter from '../utils/DataConverter.js';
11
-
12
- @Controller('nodes')
13
- export default class NodesController
14
- {
15
- #gateway: LocalGateway;
16
- #logger: Logger;
17
-
18
- constructor(gateway: LocalGateway, logger: Logger)
19
- {
20
- this.#gateway = gateway;
21
- this.#logger = logger;
22
- }
23
-
24
- @Get()
25
- async getNodes(request: Request, response: Response): Promise<Response>
26
- {
27
- const nodes = this.#gateway.nodes.map(node => { return { url: node.url, procedureNames: node.getProcedureNames() }; });
28
-
29
- this.#logger.info('Got nodes');
30
-
31
- return response.status(200).send(nodes);
32
- }
33
-
34
- @Post()
35
- async add(request: Request, response: Response): Promise<Response>
36
- {
37
- try
38
- {
39
- const nodeDto = await DataConverter.convert(NodeDto, request.body);
40
- const node = new RemoteNode(nodeDto.url, nodeDto.procedureNames);
41
-
42
- this.#gateway.addNode(node);
43
-
44
- this.#logger.info(`Added node -> ${node.url}`);
45
-
46
- return response.status(201).send();
47
- }
48
- catch (error: unknown)
49
- {
50
- const status = error instanceof Array ? 400 : 500;
51
- const message = error instanceof Error ? error.message : String(error);
52
-
53
- this.#logger.error(`Failed to add node | ${message}`);
54
-
55
- return response.status(status).send(error);
56
- }
57
- }
58
- }
@@ -1,31 +0,0 @@
1
-
2
- import { Controller, Get } from '@overnightjs/core';
3
- import { Request, Response } from 'express';
4
- import { Logger } from 'tslog';
5
-
6
- import LocalGateway from '../../runtime/LocalGateway.js';
7
- import LocalNode from '../../runtime/LocalNode.js';
8
- import Proxy from '../../runtime/Proxy.js';
9
-
10
- @Controller('procedures')
11
- export default class ProceduresController
12
- {
13
- #runtime: LocalGateway | LocalNode | Proxy;
14
- #logger: Logger;
15
-
16
- constructor(runtime: LocalGateway | LocalNode | Proxy, logger: Logger)
17
- {
18
- this.#runtime = runtime;
19
- this.#logger = logger;
20
- }
21
-
22
- @Get()
23
- async getProcedureNames(request: Request, response: Response): Promise<Response>
24
- {
25
- const names = this.#runtime.getProcedureNames();
26
-
27
- this.#logger.info('Got procedure names');
28
-
29
- return response.status(200).send(names);
30
- }
31
- }
@@ -1,38 +0,0 @@
1
-
2
- import { Controller } from '@overnightjs/core';
3
- import express from 'express';
4
- import expressProxy from 'express-http-proxy';
5
- import { IncomingMessage } from 'http';
6
- import { Logger } from 'tslog';
7
-
8
- import Proxy from '../../runtime/Proxy.js';
9
-
10
- @Controller('')
11
- export default class ProxyController
12
- {
13
- #logger: Logger;
14
-
15
- #repositoryUrl: string;
16
- #runnerUrl: string;
17
-
18
- constructor(app: express.Application, proxy: Proxy, logger: Logger)
19
- {
20
- this.#logger = logger;
21
-
22
- this.#repositoryUrl = proxy.repository.url ?? '';
23
- this.#runnerUrl = proxy.runner.url ?? '';
24
-
25
- app.use('/', expressProxy((message: IncomingMessage): string => this.#selectProxy(message)));
26
- }
27
-
28
- #selectProxy(message: IncomingMessage): string
29
- {
30
- const url = message.url ?? '';
31
-
32
- this.#logger.info(`Forwarding -> ${url}`);
33
-
34
- return url.startsWith('/rpc')
35
- ? this.#runnerUrl
36
- : this.#repositoryUrl;
37
- }
38
- }