jitar 0.2.1 → 0.3.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/CHANGELOG.md +11 -2
- package/dist/core/Context.d.ts +5 -0
- package/dist/core/Context.js +7 -0
- package/dist/core/Implementation.d.ts +1 -1
- package/dist/core/Implementation.js +7 -2
- package/dist/core/Procedure.d.ts +1 -1
- package/dist/core/Procedure.js +2 -2
- package/dist/core/Segment.d.ts +1 -1
- package/dist/core/Segment.js +2 -2
- package/dist/core/errors/BadRequest.d.ts +3 -0
- package/dist/core/errors/BadRequest.js +6 -0
- package/dist/core/errors/Forbidden.d.ts +3 -0
- package/dist/core/errors/Forbidden.js +6 -0
- package/dist/core/errors/ImplementationNotFound.d.ts +2 -1
- package/dist/core/errors/ImplementationNotFound.js +2 -1
- package/dist/core/errors/InvalidVersionNumber.d.ts +2 -1
- package/dist/core/errors/InvalidVersionNumber.js +2 -1
- package/dist/core/errors/MissingParameterValue.d.ts +2 -1
- package/dist/core/errors/MissingParameterValue.js +2 -1
- package/dist/core/errors/NotFound.d.ts +3 -0
- package/dist/core/errors/NotFound.js +6 -0
- package/dist/core/errors/NotImplemented.d.ts +1 -1
- package/dist/core/errors/NotImplemented.js +2 -2
- package/dist/core/errors/PaymentRequired.d.ts +3 -0
- package/dist/core/errors/PaymentRequired.js +6 -0
- package/dist/core/errors/ProcedureNotFound.d.ts +2 -1
- package/dist/core/errors/ProcedureNotFound.js +2 -1
- package/dist/core/errors/Teapot.d.ts +3 -0
- package/dist/core/errors/Teapot.js +6 -0
- package/dist/core/errors/Unauthorized.d.ts +3 -0
- package/dist/core/errors/Unauthorized.js +6 -0
- package/dist/core/errors/UnknownParameter.d.ts +2 -1
- package/dist/core/errors/UnknownParameter.js +2 -1
- package/dist/core/interfaces/Runner.d.ts +1 -1
- package/dist/lib.d.ts +10 -7
- package/dist/lib.js +8 -6
- package/dist/runtime/Gateway.d.ts +2 -7
- package/dist/runtime/Gateway.js +2 -2
- package/dist/runtime/LocalGateway.d.ts +1 -1
- package/dist/runtime/LocalGateway.js +2 -2
- package/dist/runtime/LocalNode.d.ts +1 -1
- package/dist/runtime/LocalNode.js +2 -2
- package/dist/runtime/Node.d.ts +2 -7
- package/dist/runtime/Node.js +2 -2
- package/dist/runtime/NodeBalancer.d.ts +2 -3
- package/dist/runtime/NodeBalancer.js +2 -2
- package/dist/runtime/ProcedureRunner.d.ts +9 -0
- package/dist/runtime/ProcedureRunner.js +9 -0
- package/dist/runtime/ProcedureRuntime.d.ts +13 -0
- package/dist/runtime/ProcedureRuntime.js +25 -0
- package/dist/runtime/Proxy.d.ts +3 -4
- package/dist/runtime/Proxy.js +6 -4
- package/dist/runtime/Remote.d.ts +1 -1
- package/dist/runtime/Remote.js +4 -2
- package/dist/runtime/RemoteGateway.d.ts +1 -1
- package/dist/runtime/RemoteGateway.js +2 -2
- package/dist/runtime/RemoteNode.d.ts +1 -1
- package/dist/runtime/RemoteNode.js +2 -2
- package/dist/runtime/caching/RemoteBuilder.js +1 -1
- package/dist/runtime/hooks/runtime.d.ts +1 -1
- package/dist/runtime/hooks/runtime.js +4 -2
- package/dist/runtime/interfaces/Middleware.d.ts +5 -0
- package/dist/runtime/interfaces/{ProcedureContainer.js → Middleware.js} +0 -0
- package/dist/runtime/serialization/errors/InvalidPropertyType.d.ts +2 -1
- package/dist/runtime/serialization/errors/InvalidPropertyType.js +2 -1
- package/dist/runtime/types/NextHandler.d.ts +2 -0
- package/dist/runtime/types/NextHandler.js +1 -0
- package/package.json +1 -1
- package/dist/runtime/interfaces/ProcedureContainer.d.ts +0 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
|
|
2
2
|
# Changelog
|
|
3
3
|
|
|
4
|
+
## 0.3.0 (January 25, 2023)
|
|
5
|
+
|
|
6
|
+
New features:
|
|
7
|
+
- \[[`e842d81`](https://github.com/MaskingTechnology/jitar/commit/e842d81)] Implemented middleware support [petermasking](https://github.com/MaskingTechnology/jitar/pull/117)
|
|
8
|
+
- \[[`9d29d31`](https://github.com/MaskingTechnology/jitar/commit/9d29d31)] Extended exceptions to status codes mappings [petermasking](https://github.com/MaskingTechnology/jitar/pull/118)
|
|
9
|
+
|
|
10
|
+
## 0.2.2 (December 16, 2022)
|
|
11
|
+
|
|
12
|
+
Changes:
|
|
13
|
+
- \[[`4891db6`](https://github.com/MaskingTechnology/jitar/commit/4891db6)] Bumped dev dependencies [basmasking](https://github.com/MaskingTechnology/jitar/pull/89)
|
|
14
|
+
|
|
4
15
|
## 0.2.1 (December 02, 2022)
|
|
5
16
|
|
|
6
17
|
Fixes:
|
|
7
18
|
- \[[`fb04f99`](https://github.com/MaskingTechnology/jitar/commit/fb04f99)] Fixed error deserialization at gateway [basmasking](https://github.com/MaskingTechnology/jitar/pull/69)
|
|
8
19
|
|
|
9
|
-
|
|
10
20
|
## 0.2.0 (November 18, 2022)
|
|
11
21
|
|
|
12
22
|
New features:
|
|
@@ -14,7 +24,6 @@ New features:
|
|
|
14
24
|
- \[[`38b90da`](https://github.com/MaskingTechnology/jitar/commit/38b90da)] Added date serialization [basmasking](https://github.com/MaskingTechnology/jitar/pull/58)
|
|
15
25
|
- \[[`b27f571`](https://github.com/MaskingTechnology/jitar/commit/b27f571)] Split jitar into multiple packages [basmasking](https://github.com/MaskingTechnology/jitar/pull/60)
|
|
16
26
|
|
|
17
|
-
|
|
18
27
|
## 0.1.3 (November 11, 2022)
|
|
19
28
|
|
|
20
29
|
Fixes:
|
|
@@ -6,5 +6,5 @@ export default class Implementation {
|
|
|
6
6
|
get version(): Version;
|
|
7
7
|
get public(): boolean;
|
|
8
8
|
get parameters(): ReflectionParameter[];
|
|
9
|
-
run(args: Map<string, unknown>): Promise<unknown>;
|
|
9
|
+
run(args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
10
10
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import MissingParameterValue from './errors/MissingParameterValue.js';
|
|
2
2
|
import UnknownParameter from './errors/UnknownParameter.js';
|
|
3
3
|
import * as AccessLevel from './definitions/AccessLevel.js';
|
|
4
|
+
import Context from './Context.js';
|
|
4
5
|
export default class Implementation {
|
|
5
6
|
#version;
|
|
6
7
|
#access;
|
|
@@ -15,9 +16,13 @@ export default class Implementation {
|
|
|
15
16
|
get version() { return this.#version; }
|
|
16
17
|
get public() { return this.#access === AccessLevel.PUBLIC; }
|
|
17
18
|
get parameters() { return this.#parameters; }
|
|
18
|
-
async run(args) {
|
|
19
|
+
async run(args, headers) {
|
|
20
|
+
const context = this.#createContext(headers);
|
|
19
21
|
const values = this.#extractParameterValues(args);
|
|
20
|
-
return await this.#executable.call(
|
|
22
|
+
return await this.#executable.call(context, ...values);
|
|
23
|
+
}
|
|
24
|
+
#createContext(headers) {
|
|
25
|
+
return new Context(headers);
|
|
21
26
|
}
|
|
22
27
|
#extractParameterValues(parameters) {
|
|
23
28
|
const values = [];
|
package/dist/core/Procedure.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export default class Procedure {
|
|
|
9
9
|
get public(): boolean;
|
|
10
10
|
addImplementation(implementation: Implementation): void;
|
|
11
11
|
getImplementation(version: Version): Implementation | undefined;
|
|
12
|
-
run(version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
12
|
+
run(version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
13
13
|
}
|
package/dist/core/Procedure.js
CHANGED
|
@@ -48,11 +48,11 @@ export default class Procedure {
|
|
|
48
48
|
}
|
|
49
49
|
return selectedVersion;
|
|
50
50
|
}
|
|
51
|
-
async run(version, args) {
|
|
51
|
+
async run(version, args, headers) {
|
|
52
52
|
const implementation = this.getImplementation(version);
|
|
53
53
|
if (implementation === undefined) {
|
|
54
54
|
throw new ImplementationNotFound(this.fqn, version.toString());
|
|
55
55
|
}
|
|
56
|
-
return implementation.run(args);
|
|
56
|
+
return implementation.run(args, headers);
|
|
57
57
|
}
|
|
58
58
|
}
|
package/dist/core/Segment.d.ts
CHANGED
|
@@ -9,5 +9,5 @@ export default class Segment implements Runner {
|
|
|
9
9
|
hasProcedure(fqn: string): boolean;
|
|
10
10
|
getProcedure(fqn: string): Procedure | undefined;
|
|
11
11
|
getPublicProcedures(): Procedure[];
|
|
12
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
12
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
13
13
|
}
|
package/dist/core/Segment.js
CHANGED
|
@@ -21,13 +21,13 @@ export default class Segment {
|
|
|
21
21
|
const procedures = [...this.#procedures.values()];
|
|
22
22
|
return procedures.filter(procedure => procedure.public);
|
|
23
23
|
}
|
|
24
|
-
async run(fqn, version, args) {
|
|
24
|
+
async run(fqn, version, args, headers) {
|
|
25
25
|
const procedure = this.getProcedure(fqn);
|
|
26
26
|
if (procedure === undefined) {
|
|
27
27
|
throw new ProcedureNotFound(fqn);
|
|
28
28
|
}
|
|
29
29
|
try {
|
|
30
|
-
return await procedure.run(version, args);
|
|
30
|
+
return await procedure.run(version, args, headers);
|
|
31
31
|
}
|
|
32
32
|
catch (error) {
|
|
33
33
|
throw ErrorManager.handle(error, fqn, version.toString());
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import NotFound from './NotFound.js';
|
|
2
|
+
export default class ImplementationNotFound extends NotFound {
|
|
2
3
|
constructor(fqn, version) {
|
|
3
4
|
super(`No implementation found for procedure '${fqn}' with version '${version}'`);
|
|
4
5
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import Version from '../Version.js';
|
|
2
2
|
export default interface Runner {
|
|
3
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
3
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
4
4
|
}
|
package/dist/lib.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export { default as HealthCheck } from './runtime/interfaces/HealthCheck.js';
|
|
2
|
+
export { default as Middleware } from './runtime/interfaces/Middleware.js';
|
|
3
|
+
export { default as NextHandler } from './runtime/types/NextHandler.js';
|
|
2
4
|
export { default as Version } from './core/Version.js';
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as
|
|
6
|
-
export { default as
|
|
7
|
-
export { default as
|
|
8
|
-
export { default as
|
|
5
|
+
export { default as Forbidden } from './core/errors/Forbidden.js';
|
|
6
|
+
export { default as BadRequest } from './core/errors/BadRequest.js';
|
|
7
|
+
export { default as NotFound } from './core/errors/NotFound.js';
|
|
8
|
+
export { default as NotImplemented } from './core/errors/NotImplemented.js';
|
|
9
|
+
export { default as PaymentRequired } from './core/errors/PaymentRequired.js';
|
|
10
|
+
export { default as Teapot } from './core/errors/Teapot.js';
|
|
11
|
+
export { default as Unauthorized } from './core/errors/Unauthorized.js';
|
|
9
12
|
export { default as FileNotFound } from './runtime/errors/FileNotFound.js';
|
|
10
13
|
export { default as LocalRepository } from './runtime/LocalRepository.js';
|
|
11
14
|
export { default as LocalNode } from './runtime/LocalNode.js';
|
|
@@ -14,7 +17,7 @@ export { default as ValueSerializer } from './runtime/serialization/ValueSeriali
|
|
|
14
17
|
export { default as ClientId } from './runtime/ClientId.js';
|
|
15
18
|
export { default as RemoteNode } from './runtime/RemoteNode.js';
|
|
16
19
|
export { default as LocalGateway } from './runtime/LocalGateway.js';
|
|
17
|
-
export { default as
|
|
20
|
+
export { default as ProcedureRuntime } from './runtime/ProcedureRuntime.js';
|
|
18
21
|
export { default as FileManager } from './runtime/interfaces/FileManager.js';
|
|
19
22
|
export { default as File } from './runtime/models/File.js';
|
|
20
23
|
export { default as CacheBuilder } from './runtime/caching/CacheBuilder.js';
|
package/dist/lib.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
export { default as Version } from './core/Version.js';
|
|
2
|
-
export { default as
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as
|
|
6
|
-
export { default as
|
|
7
|
-
export { default as
|
|
2
|
+
export { default as Forbidden } from './core/errors/Forbidden.js';
|
|
3
|
+
export { default as BadRequest } from './core/errors/BadRequest.js';
|
|
4
|
+
export { default as NotFound } from './core/errors/NotFound.js';
|
|
5
|
+
export { default as NotImplemented } from './core/errors/NotImplemented.js';
|
|
6
|
+
export { default as PaymentRequired } from './core/errors/PaymentRequired.js';
|
|
7
|
+
export { default as Teapot } from './core/errors/Teapot.js';
|
|
8
|
+
export { default as Unauthorized } from './core/errors/Unauthorized.js';
|
|
8
9
|
export { default as FileNotFound } from './runtime/errors/FileNotFound.js';
|
|
9
10
|
export { default as LocalRepository } from './runtime/LocalRepository.js';
|
|
10
11
|
export { default as LocalNode } from './runtime/LocalNode.js';
|
|
@@ -13,6 +14,7 @@ export { default as ValueSerializer } from './runtime/serialization/ValueSeriali
|
|
|
13
14
|
export { default as ClientId } from './runtime/ClientId.js';
|
|
14
15
|
export { default as RemoteNode } from './runtime/RemoteNode.js';
|
|
15
16
|
export { default as LocalGateway } from './runtime/LocalGateway.js';
|
|
17
|
+
export { default as ProcedureRuntime } from './runtime/ProcedureRuntime.js';
|
|
16
18
|
export { default as File } from './runtime/models/File.js';
|
|
17
19
|
export { default as CacheBuilder } from './runtime/caching/CacheBuilder.js';
|
|
18
20
|
export { default as Gateway } from './runtime/Gateway.js';
|
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
import Version from '../core/Version.js';
|
|
2
|
-
import ProcedureContainer from './interfaces/ProcedureContainer.js';
|
|
3
1
|
import Node from './Node.js';
|
|
4
|
-
import
|
|
5
|
-
export default abstract class Gateway extends
|
|
6
|
-
abstract getProcedureNames(): string[];
|
|
7
|
-
abstract hasProcedure(name: string): boolean;
|
|
2
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
3
|
+
export default abstract class Gateway extends ProcedureRuntime {
|
|
8
4
|
abstract addNode(node: Node): Promise<void>;
|
|
9
|
-
abstract run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
10
5
|
}
|
package/dist/runtime/Gateway.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class Gateway extends
|
|
1
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
2
|
+
export default class Gateway extends ProcedureRuntime {
|
|
3
3
|
}
|
|
@@ -10,5 +10,5 @@ export default class LocalGateway extends Gateway {
|
|
|
10
10
|
addNode(node: Node): Promise<void>;
|
|
11
11
|
removeNode(node: Node): void;
|
|
12
12
|
setBaseUrl(repository: Repository): Promise<void>;
|
|
13
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
13
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
14
14
|
}
|
|
@@ -51,11 +51,11 @@ export default class LocalGateway extends Gateway {
|
|
|
51
51
|
}
|
|
52
52
|
return balancer;
|
|
53
53
|
}
|
|
54
|
-
async run(fqn, version, args) {
|
|
54
|
+
async run(fqn, version, args, headers) {
|
|
55
55
|
const balancer = this.#getBalancer(fqn);
|
|
56
56
|
if (balancer === undefined) {
|
|
57
57
|
throw new ProcedureNotFound(fqn);
|
|
58
58
|
}
|
|
59
|
-
return balancer.run(fqn, version, args);
|
|
59
|
+
return balancer.run(fqn, version, args, headers);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
@@ -14,5 +14,5 @@ export default class LocalNode extends Node {
|
|
|
14
14
|
setGateway(gateway: Gateway): Promise<void>;
|
|
15
15
|
setRepository(repository: Repository, segmentNames: string[]): Promise<void>;
|
|
16
16
|
import(url: string, base?: string): Promise<Module>;
|
|
17
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
17
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
18
18
|
}
|
|
@@ -64,12 +64,12 @@ export default class LocalNode extends Node {
|
|
|
64
64
|
}
|
|
65
65
|
return this.#repository.importModule(this.#clientId, url);
|
|
66
66
|
}
|
|
67
|
-
async run(fqn, version, args) {
|
|
67
|
+
async run(fqn, version, args, headers) {
|
|
68
68
|
const segment = this.#getProcedureSegment(fqn);
|
|
69
69
|
const runner = segment ?? this.#gateway;
|
|
70
70
|
if (runner === undefined) {
|
|
71
71
|
throw new ProcedureNotFound(fqn);
|
|
72
72
|
}
|
|
73
|
-
return runner.run(fqn, version, args);
|
|
73
|
+
return runner.run(fqn, version, args, headers);
|
|
74
74
|
}
|
|
75
75
|
}
|
package/dist/runtime/Node.d.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
import Runtime from './Runtime.js';
|
|
4
|
-
export default abstract class Node extends Runtime implements ProcedureContainer {
|
|
5
|
-
abstract getProcedureNames(): string[];
|
|
6
|
-
abstract hasProcedure(name: string): boolean;
|
|
7
|
-
abstract run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
1
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
2
|
+
export default abstract class Node extends ProcedureRuntime {
|
|
8
3
|
}
|
package/dist/runtime/Node.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
export default class Node extends
|
|
1
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
2
|
+
export default class Node extends ProcedureRuntime {
|
|
3
3
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import Runner from '../core/interfaces/Runner.js';
|
|
2
1
|
import Version from '../core/Version.js';
|
|
3
2
|
import Node from './Node.js';
|
|
4
|
-
export default class NodeBalancer
|
|
3
|
+
export default class NodeBalancer {
|
|
5
4
|
#private;
|
|
6
5
|
addNode(node: Node): void;
|
|
7
6
|
removeNode(node: Node): void;
|
|
8
7
|
getNextNode(): Node | undefined;
|
|
9
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
8
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
10
9
|
}
|
|
@@ -24,11 +24,11 @@ export default class NodeBalancer {
|
|
|
24
24
|
}
|
|
25
25
|
return this.#nodes[this.#currentIndex++];
|
|
26
26
|
}
|
|
27
|
-
async run(fqn, version, args) {
|
|
27
|
+
async run(fqn, version, args, headers) {
|
|
28
28
|
const node = this.getNextNode();
|
|
29
29
|
if (node === undefined) {
|
|
30
30
|
throw new NoNodeAvailable(fqn);
|
|
31
31
|
}
|
|
32
|
-
return node.run(fqn, version, args);
|
|
32
|
+
return node.run(fqn, version, args, headers);
|
|
33
33
|
}
|
|
34
34
|
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import Version from '../core/Version.js';
|
|
2
|
+
import Middleware from './interfaces/Middleware.js';
|
|
3
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
4
|
+
import NextHandler from './types/NextHandler.js';
|
|
5
|
+
export default class ProcedureRunner implements Middleware {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(runner: ProcedureRuntime);
|
|
8
|
+
handle(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>, next: NextHandler): Promise<unknown>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import Version from '../core/Version.js';
|
|
2
|
+
import Runner from '../core/interfaces/Runner.js';
|
|
3
|
+
import Runtime from './Runtime.js';
|
|
4
|
+
import Middleware from './interfaces/Middleware.js';
|
|
5
|
+
export default abstract class ProcedureRuntime extends Runtime implements Runner {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(url?: string);
|
|
8
|
+
abstract getProcedureNames(): string[];
|
|
9
|
+
abstract hasProcedure(name: string): boolean;
|
|
10
|
+
abstract run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
11
|
+
addMiddleware(middleware: Middleware): void;
|
|
12
|
+
handle(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import Runtime from './Runtime.js';
|
|
2
|
+
import ProcedureRunner from './ProcedureRunner.js';
|
|
3
|
+
export default class ProcedureRuntime extends Runtime {
|
|
4
|
+
#middlewares = [];
|
|
5
|
+
constructor(url) {
|
|
6
|
+
super(url);
|
|
7
|
+
this.addMiddleware(new ProcedureRunner(this));
|
|
8
|
+
}
|
|
9
|
+
addMiddleware(middleware) {
|
|
10
|
+
this.#middlewares.push(middleware);
|
|
11
|
+
}
|
|
12
|
+
handle(fqn, version, args, headers) {
|
|
13
|
+
const startHandler = this.#getNextHandler(fqn, version, args, headers, 0);
|
|
14
|
+
return startHandler();
|
|
15
|
+
}
|
|
16
|
+
#getNextHandler(fqn, version, args, headers, index) {
|
|
17
|
+
const indexFromEnd = this.#middlewares.length - index - 1;
|
|
18
|
+
const next = this.#middlewares[indexFromEnd];
|
|
19
|
+
if (next === undefined) {
|
|
20
|
+
return async () => { };
|
|
21
|
+
}
|
|
22
|
+
const nextHandler = this.#getNextHandler(fqn, version, args, headers, index + 1);
|
|
23
|
+
return async () => { return next.handle(fqn, version, args, headers, nextHandler); };
|
|
24
|
+
}
|
|
25
|
+
}
|
package/dist/runtime/Proxy.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import Version from '../core/Version.js';
|
|
2
|
-
import ProcedureContainer from './interfaces/ProcedureContainer.js';
|
|
3
2
|
import Gateway from './Gateway.js';
|
|
4
3
|
import File from './models/File.js';
|
|
5
4
|
import Node from './Node.js';
|
|
6
5
|
import Repository from './Repository.js';
|
|
7
|
-
import
|
|
8
|
-
export default class Proxy extends
|
|
6
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
7
|
+
export default class Proxy extends ProcedureRuntime {
|
|
9
8
|
#private;
|
|
10
9
|
constructor(repository: Repository, runner: Gateway | Node, url?: string);
|
|
11
10
|
get repository(): Repository;
|
|
@@ -15,5 +14,5 @@ export default class Proxy extends Runtime implements ProcedureContainer {
|
|
|
15
14
|
loadAsset(filename: string): Promise<File>;
|
|
16
15
|
registerClient(segmentFiles: string[]): Promise<string>;
|
|
17
16
|
loadModule(clientId: string, filename: string): Promise<File>;
|
|
18
|
-
run(name: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
17
|
+
run(name: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
19
18
|
}
|
package/dist/runtime/Proxy.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import ProcedureRunner from './ProcedureRunner.js';
|
|
2
|
+
import ProcedureRuntime from './ProcedureRuntime.js';
|
|
3
|
+
export default class Proxy extends ProcedureRuntime {
|
|
3
4
|
#repository;
|
|
4
5
|
#runner;
|
|
5
6
|
constructor(repository, runner, url) {
|
|
6
7
|
super(url);
|
|
7
8
|
this.#repository = repository;
|
|
8
9
|
this.#runner = runner;
|
|
10
|
+
this.addMiddleware(new ProcedureRunner(this));
|
|
9
11
|
}
|
|
10
12
|
get repository() { return this.#repository; }
|
|
11
13
|
get runner() { return this.#runner; }
|
|
@@ -25,7 +27,7 @@ export default class Proxy extends Runtime {
|
|
|
25
27
|
async loadModule(clientId, filename) {
|
|
26
28
|
return this.#repository.loadModule(clientId, filename);
|
|
27
29
|
}
|
|
28
|
-
async run(name, version, args) {
|
|
29
|
-
return this.#runner.run(name, version, args);
|
|
30
|
+
async run(name, version, args, headers) {
|
|
31
|
+
return this.#runner.run(name, version, args, headers);
|
|
30
32
|
}
|
|
31
33
|
}
|
package/dist/runtime/Remote.d.ts
CHANGED
|
@@ -11,5 +11,5 @@ export default class Remote {
|
|
|
11
11
|
isHealthy(): Promise<boolean>;
|
|
12
12
|
getHealth(): Promise<Map<string, boolean>>;
|
|
13
13
|
addNode(node: Node): Promise<void>;
|
|
14
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
14
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
15
15
|
}
|
package/dist/runtime/Remote.js
CHANGED
|
@@ -58,13 +58,15 @@ export default class Remote {
|
|
|
58
58
|
};
|
|
59
59
|
await this.#callRemote(url, options, 201);
|
|
60
60
|
}
|
|
61
|
-
async run(fqn, version, args) {
|
|
61
|
+
async run(fqn, version, args, headers) {
|
|
62
|
+
headers.set('content-type', 'application/json');
|
|
62
63
|
const versionString = version.toString();
|
|
63
64
|
const argsObject = Object.fromEntries(args);
|
|
65
|
+
const headersObject = Object.fromEntries(headers);
|
|
64
66
|
const url = `${this.#url}/rpc/${fqn}?version=${versionString}&serialize=true`;
|
|
65
67
|
const options = {
|
|
66
68
|
method: 'POST',
|
|
67
|
-
headers:
|
|
69
|
+
headers: headersObject,
|
|
68
70
|
body: this.#createRequestBody(argsObject, this.#useSerializer)
|
|
69
71
|
};
|
|
70
72
|
const response = await this.#callRemote(url, options, 200);
|
|
@@ -7,5 +7,5 @@ export default class RemoteGateway extends Gateway {
|
|
|
7
7
|
getProcedureNames(): string[];
|
|
8
8
|
hasProcedure(name: string): boolean;
|
|
9
9
|
addNode(node: Node): Promise<void>;
|
|
10
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
10
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
11
11
|
}
|
|
@@ -16,7 +16,7 @@ export default class RemoteGateway extends Gateway {
|
|
|
16
16
|
async addNode(node) {
|
|
17
17
|
return this.#remote.addNode(node);
|
|
18
18
|
}
|
|
19
|
-
async run(fqn, version, args) {
|
|
20
|
-
return this.#remote.run(fqn, version, args);
|
|
19
|
+
async run(fqn, version, args, headers) {
|
|
20
|
+
return this.#remote.run(fqn, version, args, headers);
|
|
21
21
|
}
|
|
22
22
|
}
|
|
@@ -8,5 +8,5 @@ export default class RemoteNode extends Node {
|
|
|
8
8
|
hasProcedure(name: string): boolean;
|
|
9
9
|
isHealthy(): Promise<boolean>;
|
|
10
10
|
getHealth(): Promise<Map<string, boolean>>;
|
|
11
|
-
run(fqn: string, version: Version, args: Map<string, unknown>): Promise<unknown>;
|
|
11
|
+
run(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>): Promise<unknown>;
|
|
12
12
|
}
|
|
@@ -23,7 +23,7 @@ export default class RemoteNode extends Node {
|
|
|
23
23
|
async getHealth() {
|
|
24
24
|
return this.#remote.getHealth();
|
|
25
25
|
}
|
|
26
|
-
async run(fqn, version, args) {
|
|
27
|
-
return this.#remote.run(fqn, version, args);
|
|
26
|
+
async run(fqn, version, args, headers) {
|
|
27
|
+
return this.#remote.run(fqn, version, args, headers);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -25,7 +25,7 @@ export default class RemoteBuilder {
|
|
|
25
25
|
const procedueParameters = parameterNames.join(', ');
|
|
26
26
|
const procedureArguments = parameterNames.map(name => `'${name}': ${name}`).join(', ');
|
|
27
27
|
const functionName = `\nexport ${asDefault ? `${Keywords.DEFAULT} ` : ''}async function ${procedureName}(${procedueParameters})`;
|
|
28
|
-
const functionBody = `return runProcedure('${procedureFqn}', '${procedureVersion}', { ${procedureArguments} })`;
|
|
28
|
+
const functionBody = `return runProcedure('${procedureFqn}', '${procedureVersion}', { ${procedureArguments} }, this)`;
|
|
29
29
|
return `${functionName} {\n\t${functionBody}\n}\n`;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import LocalNode from '../LocalNode.js';
|
|
2
2
|
export declare function setRuntime(runtime: LocalNode): void;
|
|
3
|
-
export declare function runProcedure(fqn: string, versionNumber: string, args: object): Promise<unknown>;
|
|
3
|
+
export declare function runProcedure(fqn: string, versionNumber: string, args: object, context?: object): Promise<unknown>;
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
+
import Context from '../../core/Context.js';
|
|
1
2
|
import Version from '../../core/Version.js';
|
|
2
3
|
import RuntimeNotAvailable from '../errors/RuntimeNotAvailable.js';
|
|
3
4
|
let _runtime;
|
|
4
5
|
export function setRuntime(runtime) {
|
|
5
6
|
_runtime = runtime;
|
|
6
7
|
}
|
|
7
|
-
export async function runProcedure(fqn, versionNumber, args) {
|
|
8
|
+
export async function runProcedure(fqn, versionNumber, args, context) {
|
|
8
9
|
if (_runtime === undefined) {
|
|
9
10
|
throw new RuntimeNotAvailable();
|
|
10
11
|
}
|
|
11
12
|
const version = Version.parse(versionNumber);
|
|
12
13
|
const argsMap = new Map(Object.entries(args));
|
|
13
|
-
|
|
14
|
+
const headersMap = context instanceof Context ? context.headers : new Map();
|
|
15
|
+
return _runtime.run(fqn, version, argsMap, headersMap);
|
|
14
16
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import Version from '../../core/Version.js';
|
|
2
|
+
import NextHandler from '../types/NextHandler.js';
|
|
3
|
+
export default interface Middleware {
|
|
4
|
+
handle(fqn: string, version: Version, args: Map<string, unknown>, headers: Map<string, string>, next: NextHandler): Promise<unknown>;
|
|
5
|
+
}
|
|
File without changes
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
|
|
1
|
+
import BadRequest from '../../../core/errors/BadRequest.js';
|
|
2
|
+
export default class InvalidPropertyType extends BadRequest {
|
|
2
3
|
constructor(typeName, propertyName, expectedType) {
|
|
3
4
|
super(`The ${typeName} property '${propertyName}' has an invalid type (expected '${expectedType}')`);
|
|
4
5
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "jitar",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Distributed runtime for JavaScript and TypeScript to chop monolithic applications into micros.",
|
|
5
5
|
"author": "Masking Technology <info@masking.tech> (https://jitar.dev)",
|
|
6
6
|
"license": "MIT",
|