@ebarahona/loopback-transport-core 1.0.0 → 1.1.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/README.md +442 -35
- package/dist/client/client-proxy.d.ts +73 -42
- package/dist/client/client-proxy.js +71 -42
- package/dist/client/client-proxy.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +3 -15
- package/dist/client/index.js.map +1 -1
- package/dist/context/execution-context.d.ts +58 -11
- package/dist/context/execution-context.js +62 -17
- package/dist/context/execution-context.js.map +1 -1
- package/dist/context/index.d.ts +2 -1
- package/dist/context/index.js +3 -15
- package/dist/context/index.js.map +1 -1
- package/dist/decorators/constants.d.ts +20 -10
- package/dist/decorators/constants.js +6 -2
- package/dist/decorators/constants.js.map +1 -1
- package/dist/decorators/event-handler.decorator.d.ts +10 -7
- package/dist/decorators/event-handler.decorator.js +18 -13
- package/dist/decorators/event-handler.decorator.js.map +1 -1
- package/dist/decorators/index.d.ts +5 -4
- package/dist/decorators/index.js +11 -18
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/message-handler.decorator.d.ts +8 -5
- package/dist/decorators/message-handler.decorator.js +16 -11
- package/dist/decorators/message-handler.decorator.js.map +1 -1
- package/dist/decorators/payload.decorator.d.ts +16 -7
- package/dist/decorators/payload.decorator.js +16 -8
- package/dist/decorators/payload.decorator.js.map +1 -1
- package/dist/discovery/discovery.service.d.ts +143 -0
- package/dist/discovery/discovery.service.js +165 -0
- package/dist/discovery/discovery.service.js.map +1 -0
- package/dist/discovery/event-handler-discoverer.d.ts +19 -0
- package/dist/discovery/event-handler-discoverer.js +50 -0
- package/dist/discovery/event-handler-discoverer.js.map +1 -0
- package/dist/discovery/handler-discoverer.d.ts +48 -0
- package/dist/discovery/handler-discoverer.js +3 -0
- package/dist/discovery/handler-discoverer.js.map +1 -0
- package/dist/discovery/handler-kind.d.ts +23 -0
- package/dist/discovery/handler-kind.js +14 -0
- package/dist/discovery/handler-kind.js.map +1 -0
- package/dist/discovery/index.d.ts +7 -0
- package/dist/discovery/index.js +13 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/message-handler-discoverer.d.ts +19 -0
- package/dist/discovery/message-handler-discoverer.js +50 -0
- package/dist/discovery/message-handler-discoverer.js.map +1 -0
- package/dist/discovery/registered-handler.d.ts +35 -0
- package/dist/discovery/registered-handler.js +3 -0
- package/dist/discovery/registered-handler.js.map +1 -0
- package/dist/helpers/errors.d.ts +61 -0
- package/dist/helpers/errors.js +80 -0
- package/dist/helpers/errors.js.map +1 -0
- package/dist/helpers/index.d.ts +2 -0
- package/dist/helpers/index.js +14 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/register-server.d.ts +44 -0
- package/dist/helpers/register-server.js +72 -0
- package/dist/helpers/register-server.js.map +1 -0
- package/dist/index.d.ts +15 -7
- package/dist/index.js +33 -9
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +4 -4
- package/dist/interfaces/index.js +0 -18
- package/dist/interfaces/index.js.map +1 -1
- package/dist/interfaces/message-handler.interface.d.ts +12 -6
- package/dist/interfaces/packet.interface.d.ts +20 -2
- package/dist/interfaces/transport-client.interface.d.ts +25 -13
- package/dist/interfaces/transport-server.interface.d.ts +36 -10
- package/dist/keys.d.ts +132 -46
- package/dist/keys.js +131 -68
- package/dist/keys.js.map +1 -1
- package/dist/registry/handler-registry.d.ts +94 -24
- package/dist/registry/handler-registry.js +195 -89
- package/dist/registry/handler-registry.js.map +1 -1
- package/dist/registry/index.d.ts +1 -1
- package/dist/registry/index.js +3 -15
- package/dist/registry/index.js.map +1 -1
- package/dist/serializers/cloudevents-serializer.d.ts +107 -0
- package/dist/serializers/cloudevents-serializer.js +130 -0
- package/dist/serializers/cloudevents-serializer.js.map +1 -0
- package/dist/serializers/index.d.ts +4 -1
- package/dist/serializers/index.js +7 -15
- package/dist/serializers/index.js.map +1 -1
- package/dist/serializers/serializer.interface.d.ts +49 -16
- package/dist/serializers/serializer.interface.js +41 -15
- package/dist/serializers/serializer.interface.js.map +1 -1
- package/dist/server/index.d.ts +2 -1
- package/dist/server/index.js +3 -15
- package/dist/server/index.js.map +1 -1
- package/dist/server/server-base.d.ts +125 -52
- package/dist/server/server-base.js +168 -57
- package/dist/server/server-base.js.map +1 -1
- package/dist/transport.component.d.ts +21 -8
- package/dist/transport.component.js +40 -18
- package/dist/transport.component.js.map +1 -1
- package/dist/transport.observer.d.ts +87 -0
- package/dist/transport.observer.js +296 -0
- package/dist/transport.observer.js.map +1 -0
- package/dist/utils/normalize-pattern.d.ts +11 -6
- package/dist/utils/normalize-pattern.js +18 -13
- package/dist/utils/normalize-pattern.js.map +1 -1
- package/package.json +58 -16
- package/dist/transport-booter.d.ts +0 -31
- package/dist/transport-booter.js +0 -117
- package/dist/transport-booter.js.map +0 -1
|
@@ -1,48 +1,119 @@
|
|
|
1
|
-
import { Application } from '@loopback/core';
|
|
2
|
-
import {
|
|
1
|
+
import { Application, type Constructor } from '@loopback/core';
|
|
2
|
+
import type { HandlerKind } from '../discovery';
|
|
3
|
+
import type { HandlerOptions } from '../decorators';
|
|
4
|
+
import type { MessageHandler } from '../interfaces';
|
|
3
5
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
+
* Internal registry entry tracking both the runtime handler function
|
|
7
|
+
* and the metadata required to construct a {@link RegisteredHandler}
|
|
8
|
+
* view for cross-cutting wrappers and the {@link DiscoveryService}.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export interface RegistryEntry {
|
|
13
|
+
/** Original (unnormalized) pattern as supplied by the discoverer. */
|
|
14
|
+
readonly pattern: string | Record<string, unknown>;
|
|
15
|
+
/** Transport server tag (`'*'` for wildcard). */
|
|
16
|
+
readonly transport: string;
|
|
17
|
+
/** Handler kind. */
|
|
18
|
+
readonly kind: HandlerKind;
|
|
19
|
+
/** Controller class that declared this handler. */
|
|
20
|
+
readonly controllerClass: Constructor<unknown>;
|
|
21
|
+
/** Method name on the controller prototype. */
|
|
22
|
+
readonly methodName: string;
|
|
23
|
+
/** Id of the discoverer that produced this entry. */
|
|
24
|
+
readonly discovererId: string;
|
|
25
|
+
/** Discoverer-specific handler options. */
|
|
26
|
+
readonly options?: HandlerOptions;
|
|
27
|
+
/**
|
|
28
|
+
* Live handler function. Mutable so the lifecycle observer can swap
|
|
29
|
+
* in the wrapped version between discovery and server-binding.
|
|
30
|
+
*/
|
|
31
|
+
handler: MessageHandler;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Discovers transport handlers from controllers via every bound
|
|
35
|
+
* {@link HandlerDiscoverer} and registers them with the appropriate
|
|
36
|
+
* transport server.
|
|
37
|
+
*
|
|
38
|
+
* The two built-in vocabularies (`@messageHandler` and `@eventHandler`)
|
|
39
|
+
* are implemented as default discoverers bound by `TransportComponent`.
|
|
40
|
+
* Plugins (gRPC, cron, WebSocket, etc.) contribute additional decorator
|
|
41
|
+
* vocabularies by binding their own `HandlerDiscoverer` implementations
|
|
42
|
+
* under `TransportBindings.tags.HANDLER_DISCOVERER`.
|
|
6
43
|
*
|
|
7
44
|
* This class does NOT run in the constructor. It is invoked by
|
|
8
|
-
* TransportBooter after all controllers are registered.
|
|
45
|
+
* `TransportBooter` after all controllers are registered.
|
|
9
46
|
*
|
|
10
47
|
* Handler invocations use per-message child contexts for concurrency
|
|
11
48
|
* safety. The application context is never mutated per-message.
|
|
12
49
|
*
|
|
13
|
-
* Context lifetime extends until the handler result (including
|
|
14
|
-
* streams) fully completes, errors, or times out.
|
|
50
|
+
* Context lifetime extends until the handler result (including
|
|
51
|
+
* Observable streams) fully completes, errors, or times out.
|
|
52
|
+
*
|
|
53
|
+
* @public
|
|
15
54
|
*/
|
|
16
55
|
export declare class HandlerRegistry {
|
|
17
56
|
/**
|
|
18
57
|
* Registry keyed by `transport::pattern` to support the same pattern
|
|
19
|
-
* on different transports without collision.
|
|
58
|
+
* on different transports without collision. Each value is the chain
|
|
59
|
+
* of entries for that pattern (multiple allowed for event fan-out).
|
|
20
60
|
*/
|
|
21
|
-
private readonly
|
|
61
|
+
private readonly entries;
|
|
22
62
|
private discovered;
|
|
23
63
|
/**
|
|
24
64
|
* Scan all controllers in the application for transport decorators
|
|
25
65
|
* and register the handlers.
|
|
26
66
|
*
|
|
67
|
+
* Discovers handlers by consulting every `HandlerDiscoverer` bound
|
|
68
|
+
* under `TransportBindings.tags.HANDLER_DISCOVERER`, including the
|
|
69
|
+
* built-in `MessageHandlerDiscoverer` and `EventHandlerDiscoverer`
|
|
70
|
+
* registered by `TransportComponent`, plus any plugin-contributed
|
|
71
|
+
* discoverers.
|
|
72
|
+
*
|
|
27
73
|
* Idempotent: clears previously discovered handlers before scanning.
|
|
74
|
+
*
|
|
75
|
+
* @public
|
|
76
|
+
* @param app - The LoopBack application instance.
|
|
77
|
+
* @returns Resolves once every controller has been scanned.
|
|
78
|
+
* @throws TransportConfigError When the same pattern is targeted by
|
|
79
|
+
* both `@messageHandler` and `@eventHandler`, or by two
|
|
80
|
+
* `@messageHandler` declarations.
|
|
28
81
|
*/
|
|
29
82
|
discoverHandlers(app: Application): Promise<void>;
|
|
30
83
|
/**
|
|
31
84
|
* Bind discovered handlers to the registered transport servers.
|
|
32
|
-
* Throws if discovery has not been run.
|
|
33
85
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
86
|
+
* Precedence rules:
|
|
87
|
+
*
|
|
88
|
+
* - Request handlers: transport-specific overrides wildcard (only one
|
|
89
|
+
* per pattern survives).
|
|
90
|
+
* - Event handlers: both specific and wildcard run (fan-out).
|
|
91
|
+
*
|
|
92
|
+
* @public
|
|
93
|
+
* @param app - The LoopBack application instance.
|
|
94
|
+
* @returns Resolves once every handler has been bound.
|
|
95
|
+
* @throws TransportConfigError When `discoverHandlers()` has not been
|
|
96
|
+
* called first, or when a transport server binding is missing the
|
|
97
|
+
* `TRANSPORT_NAME_TAG` tag.
|
|
36
98
|
*/
|
|
37
99
|
bindToServers(app: Application): Promise<void>;
|
|
38
100
|
/**
|
|
39
|
-
* Get all discovered handlers.
|
|
101
|
+
* Get all discovered handlers. The returned map is a defensive copy.
|
|
102
|
+
*
|
|
103
|
+
* @public
|
|
104
|
+
* @returns A read-only snapshot of every registered pattern and its
|
|
105
|
+
* handler chain.
|
|
40
106
|
*/
|
|
41
107
|
getHandlers(): ReadonlyMap<string, readonly MessageHandler[]>;
|
|
42
108
|
/**
|
|
43
|
-
* Whether
|
|
109
|
+
* Whether {@link discoverHandlers} has been run.
|
|
110
|
+
*
|
|
111
|
+
* @public
|
|
44
112
|
*/
|
|
45
113
|
isDiscovered(): boolean;
|
|
114
|
+
/** @internal Package-scoped accessor used by TransportObserver to build the DiscoveryService snapshot. */
|
|
115
|
+
_getEntries(): IterableIterator<RegistryEntry>;
|
|
116
|
+
private iterateEntries;
|
|
46
117
|
/**
|
|
47
118
|
* Build the registry key from transport and raw pattern.
|
|
48
119
|
* Normalizes the pattern (sorts object keys) before keying.
|
|
@@ -53,21 +124,20 @@ export declare class HandlerRegistry {
|
|
|
53
124
|
* Extract the pattern portion from a registry key.
|
|
54
125
|
*/
|
|
55
126
|
private extractPattern;
|
|
56
|
-
private scanMessageHandlers;
|
|
57
|
-
private scanEventHandlers;
|
|
58
127
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
128
|
+
* Convert a `DiscoveredHandler` into a runtime `MessageHandler`,
|
|
129
|
+
* applying validation rules (no mixed kinds per pattern, no duplicate
|
|
130
|
+
* request handlers) before inserting into the registry.
|
|
61
131
|
*/
|
|
62
|
-
private
|
|
132
|
+
private registerDiscovered;
|
|
63
133
|
/**
|
|
64
|
-
* Create a handler function that invokes the controller method
|
|
65
|
-
* LoopBack's native invocation pipeline.
|
|
134
|
+
* Create a handler function that invokes the controller method
|
|
135
|
+
* through LoopBack's native invocation pipeline.
|
|
66
136
|
*
|
|
67
137
|
* Each invocation creates a uniquely named child Context from the
|
|
68
|
-
* application context. Per-message bindings (payload, transport
|
|
69
|
-
* are scoped to the child context and cannot collide with
|
|
70
|
-
* messages.
|
|
138
|
+
* application context. Per-message bindings (payload, transport
|
|
139
|
+
* context) are scoped to the child context and cannot collide with
|
|
140
|
+
* concurrent messages.
|
|
71
141
|
*
|
|
72
142
|
* The child context lifetime extends until the handler result fully
|
|
73
143
|
* resolves. For Observable results, the context stays open until the
|
|
@@ -5,13 +5,17 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
5
|
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;
|
|
6
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
7
|
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
8
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
12
|
exports.HandlerRegistry = void 0;
|
|
10
13
|
const core_1 = require("@loopback/core");
|
|
11
14
|
const crypto_1 = require("crypto");
|
|
12
|
-
const debug_1 = require("debug");
|
|
15
|
+
const debug_1 = __importDefault(require("debug"));
|
|
13
16
|
const rxjs_1 = require("rxjs");
|
|
14
|
-
const
|
|
17
|
+
const discovery_1 = require("../discovery");
|
|
18
|
+
const errors_1 = require("../helpers/errors");
|
|
15
19
|
const keys_1 = require("../keys");
|
|
16
20
|
const utils_1 = require("../utils");
|
|
17
21
|
const debug = (0, debug_1.default)('loopback:transport:registry');
|
|
@@ -21,77 +25,136 @@ const debug = (0, debug_1.default)('loopback:transport:registry');
|
|
|
21
25
|
*/
|
|
22
26
|
const KEY_SEPARATOR = '::';
|
|
23
27
|
/**
|
|
24
|
-
* Discovers
|
|
25
|
-
*
|
|
28
|
+
* Discovers transport handlers from controllers via every bound
|
|
29
|
+
* {@link HandlerDiscoverer} and registers them with the appropriate
|
|
30
|
+
* transport server.
|
|
31
|
+
*
|
|
32
|
+
* The two built-in vocabularies (`@messageHandler` and `@eventHandler`)
|
|
33
|
+
* are implemented as default discoverers bound by `TransportComponent`.
|
|
34
|
+
* Plugins (gRPC, cron, WebSocket, etc.) contribute additional decorator
|
|
35
|
+
* vocabularies by binding their own `HandlerDiscoverer` implementations
|
|
36
|
+
* under `TransportBindings.tags.HANDLER_DISCOVERER`.
|
|
26
37
|
*
|
|
27
38
|
* This class does NOT run in the constructor. It is invoked by
|
|
28
|
-
* TransportBooter after all controllers are registered.
|
|
39
|
+
* `TransportBooter` after all controllers are registered.
|
|
29
40
|
*
|
|
30
41
|
* Handler invocations use per-message child contexts for concurrency
|
|
31
42
|
* safety. The application context is never mutated per-message.
|
|
32
43
|
*
|
|
33
|
-
* Context lifetime extends until the handler result (including
|
|
34
|
-
* streams) fully completes, errors, or times out.
|
|
44
|
+
* Context lifetime extends until the handler result (including
|
|
45
|
+
* Observable streams) fully completes, errors, or times out.
|
|
46
|
+
*
|
|
47
|
+
* @public
|
|
35
48
|
*/
|
|
36
49
|
let HandlerRegistry = class HandlerRegistry {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
}
|
|
50
|
+
/**
|
|
51
|
+
* Registry keyed by `transport::pattern` to support the same pattern
|
|
52
|
+
* on different transports without collision. Each value is the chain
|
|
53
|
+
* of entries for that pattern (multiple allowed for event fan-out).
|
|
54
|
+
*/
|
|
55
|
+
entries = new Map();
|
|
56
|
+
discovered = false;
|
|
45
57
|
/**
|
|
46
58
|
* Scan all controllers in the application for transport decorators
|
|
47
59
|
* and register the handlers.
|
|
48
60
|
*
|
|
61
|
+
* Discovers handlers by consulting every `HandlerDiscoverer` bound
|
|
62
|
+
* under `TransportBindings.tags.HANDLER_DISCOVERER`, including the
|
|
63
|
+
* built-in `MessageHandlerDiscoverer` and `EventHandlerDiscoverer`
|
|
64
|
+
* registered by `TransportComponent`, plus any plugin-contributed
|
|
65
|
+
* discoverers.
|
|
66
|
+
*
|
|
49
67
|
* Idempotent: clears previously discovered handlers before scanning.
|
|
68
|
+
*
|
|
69
|
+
* @public
|
|
70
|
+
* @param app - The LoopBack application instance.
|
|
71
|
+
* @returns Resolves once every controller has been scanned.
|
|
72
|
+
* @throws TransportConfigError When the same pattern is targeted by
|
|
73
|
+
* both `@messageHandler` and `@eventHandler`, or by two
|
|
74
|
+
* `@messageHandler` declarations.
|
|
50
75
|
*/
|
|
51
76
|
async discoverHandlers(app) {
|
|
52
|
-
this.
|
|
77
|
+
this.entries.clear();
|
|
53
78
|
this.discovered = false;
|
|
79
|
+
const discovererBindings = app.findByTag(keys_1.HANDLER_DISCOVERER_TAG);
|
|
80
|
+
const discoverers = [];
|
|
81
|
+
for (const binding of discovererBindings) {
|
|
82
|
+
discoverers.push(await app.get(binding.key));
|
|
83
|
+
}
|
|
54
84
|
const controllerBindings = app.findByTag('controller');
|
|
55
|
-
debug('scanning %d controllers
|
|
85
|
+
debug('scanning %d controllers with %d discoverers', controllerBindings.length, discoverers.length);
|
|
86
|
+
const perDiscovererCounts = new Map();
|
|
56
87
|
for (const binding of controllerBindings) {
|
|
57
88
|
const controllerClass = binding.valueConstructor;
|
|
58
89
|
if (!controllerClass)
|
|
59
90
|
continue;
|
|
60
91
|
const bindingKey = binding.key;
|
|
61
|
-
|
|
62
|
-
|
|
92
|
+
for (const discoverer of discoverers) {
|
|
93
|
+
const found = await discoverer.discover(controllerClass);
|
|
94
|
+
if (found.length === 0)
|
|
95
|
+
continue;
|
|
96
|
+
perDiscovererCounts.set(discoverer.id, (perDiscovererCounts.get(discoverer.id) ?? 0) + found.length);
|
|
97
|
+
for (const item of found) {
|
|
98
|
+
this.registerDiscovered(item, controllerClass, bindingKey, app, discoverer.id);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
63
101
|
}
|
|
64
102
|
this.discovered = true;
|
|
65
|
-
debug
|
|
103
|
+
if (debug.enabled) {
|
|
104
|
+
for (const [id, count] of perDiscovererCounts) {
|
|
105
|
+
debug('discoverer [%s] contributed %d handlers', id, count);
|
|
106
|
+
}
|
|
107
|
+
debug('discovered %d transport handlers total', this.entries.size);
|
|
108
|
+
}
|
|
66
109
|
}
|
|
67
110
|
/**
|
|
68
111
|
* Bind discovered handlers to the registered transport servers.
|
|
69
|
-
* Throws if discovery has not been run.
|
|
70
112
|
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
113
|
+
* Precedence rules:
|
|
114
|
+
*
|
|
115
|
+
* - Request handlers: transport-specific overrides wildcard (only one
|
|
116
|
+
* per pattern survives).
|
|
117
|
+
* - Event handlers: both specific and wildcard run (fan-out).
|
|
118
|
+
*
|
|
119
|
+
* @public
|
|
120
|
+
* @param app - The LoopBack application instance.
|
|
121
|
+
* @returns Resolves once every handler has been bound.
|
|
122
|
+
* @throws TransportConfigError When `discoverHandlers()` has not been
|
|
123
|
+
* called first, or when a transport server binding is missing the
|
|
124
|
+
* `TRANSPORT_NAME_TAG` tag.
|
|
73
125
|
*/
|
|
74
126
|
async bindToServers(app) {
|
|
75
127
|
if (!this.discovered) {
|
|
76
|
-
throw new
|
|
128
|
+
throw new errors_1.TransportConfigError('Cannot bind handlers to servers: discoverHandlers() has not been called.');
|
|
77
129
|
}
|
|
78
130
|
const serverBindings = app.findByTag(keys_1.TRANSPORT_SERVER_TAG);
|
|
79
131
|
for (const serverBinding of serverBindings) {
|
|
132
|
+
const tag = serverBinding.tagMap?.[keys_1.TRANSPORT_NAME_TAG];
|
|
133
|
+
if (typeof tag !== 'string' || tag.length === 0) {
|
|
134
|
+
throw new errors_1.TransportConfigError(`Transport server binding "${String(serverBinding.key)}" is ` +
|
|
135
|
+
`missing the "${keys_1.TRANSPORT_NAME_TAG}" tag. Register the ` +
|
|
136
|
+
'server through registerServer/registerServerClass/' +
|
|
137
|
+
'registerServerProvider so the registry can route handlers ' +
|
|
138
|
+
'to the correct transport.');
|
|
139
|
+
}
|
|
140
|
+
const transportName = tag;
|
|
80
141
|
const server = await app.get(serverBinding.key);
|
|
81
|
-
const transportName = serverBinding.tagMap?.[keys_1.TRANSPORT_NAME_TAG];
|
|
82
142
|
// Collect handlers for this server.
|
|
83
143
|
// Precedence rules differ by handler type:
|
|
84
144
|
// - Request handlers: specific overrides wildcard (only one per pattern)
|
|
85
145
|
// - Event handlers: both specific and wildcard run (fan-out)
|
|
86
146
|
const boundRequestPatterns = new Set();
|
|
87
147
|
// First pass: transport-specific handlers
|
|
88
|
-
for (const [registryKey,
|
|
89
|
-
|
|
148
|
+
for (const [registryKey, entryChain] of this.entries) {
|
|
149
|
+
const first = entryChain[0];
|
|
150
|
+
if (!first)
|
|
151
|
+
continue;
|
|
152
|
+
if (first.transport !== '*' && first.transport === transportName) {
|
|
90
153
|
const pattern = this.extractPattern(registryKey);
|
|
91
|
-
for (const
|
|
92
|
-
server.addHandler(pattern, handler);
|
|
154
|
+
for (const entry of entryChain) {
|
|
155
|
+
server.addHandler(pattern, entry.handler);
|
|
93
156
|
}
|
|
94
|
-
if (
|
|
157
|
+
if (first.kind !== discovery_1.HANDLER_KIND_EVENT) {
|
|
95
158
|
boundRequestPatterns.add(pattern);
|
|
96
159
|
}
|
|
97
160
|
debug('bound handler [%s] to transport [%s] (specific)', pattern, transportName);
|
|
@@ -100,35 +163,56 @@ let HandlerRegistry = class HandlerRegistry {
|
|
|
100
163
|
// Second pass: wildcard handlers
|
|
101
164
|
// - Request handlers: skip if transport-specific already bound
|
|
102
165
|
// - Event handlers: always bind (fan-out semantics)
|
|
103
|
-
for (const [registryKey,
|
|
104
|
-
|
|
166
|
+
for (const [registryKey, entryChain] of this.entries) {
|
|
167
|
+
const first = entryChain[0];
|
|
168
|
+
if (!first)
|
|
169
|
+
continue;
|
|
170
|
+
if (first.transport === '*') {
|
|
105
171
|
const pattern = this.extractPattern(registryKey);
|
|
106
|
-
if (
|
|
107
|
-
|
|
108
|
-
|
|
172
|
+
if (first.kind === discovery_1.HANDLER_KIND_EVENT ||
|
|
173
|
+
!boundRequestPatterns.has(pattern)) {
|
|
174
|
+
for (const entry of entryChain) {
|
|
175
|
+
server.addHandler(pattern, entry.handler);
|
|
109
176
|
}
|
|
110
|
-
debug('bound handler [%s] to transport [%s] (wildcard)', pattern, transportName
|
|
177
|
+
debug('bound handler [%s] to transport [%s] (wildcard)', pattern, transportName);
|
|
111
178
|
}
|
|
112
179
|
}
|
|
113
180
|
}
|
|
114
181
|
}
|
|
115
182
|
}
|
|
116
183
|
/**
|
|
117
|
-
* Get all discovered handlers.
|
|
184
|
+
* Get all discovered handlers. The returned map is a defensive copy.
|
|
185
|
+
*
|
|
186
|
+
* @public
|
|
187
|
+
* @returns A read-only snapshot of every registered pattern and its
|
|
188
|
+
* handler chain.
|
|
118
189
|
*/
|
|
119
190
|
getHandlers() {
|
|
120
191
|
const copy = new Map();
|
|
121
|
-
for (const [key,
|
|
122
|
-
copy.set(key,
|
|
192
|
+
for (const [key, entries] of this.entries) {
|
|
193
|
+
copy.set(key, entries.map(e => e.handler));
|
|
123
194
|
}
|
|
124
195
|
return copy;
|
|
125
196
|
}
|
|
126
197
|
/**
|
|
127
|
-
* Whether
|
|
198
|
+
* Whether {@link discoverHandlers} has been run.
|
|
199
|
+
*
|
|
200
|
+
* @public
|
|
128
201
|
*/
|
|
129
202
|
isDiscovered() {
|
|
130
203
|
return this.discovered;
|
|
131
204
|
}
|
|
205
|
+
/** @internal Package-scoped accessor used by TransportObserver to build the DiscoveryService snapshot. */
|
|
206
|
+
_getEntries() {
|
|
207
|
+
return this.iterateEntries();
|
|
208
|
+
}
|
|
209
|
+
*iterateEntries() {
|
|
210
|
+
for (const chain of this.entries.values()) {
|
|
211
|
+
for (const entry of chain) {
|
|
212
|
+
yield entry;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
132
216
|
/**
|
|
133
217
|
* Build the registry key from transport and raw pattern.
|
|
134
218
|
* Normalizes the pattern (sorts object keys) before keying.
|
|
@@ -146,56 +230,77 @@ let HandlerRegistry = class HandlerRegistry {
|
|
|
146
230
|
? key.slice(separatorIndex + KEY_SEPARATOR.length)
|
|
147
231
|
: key;
|
|
148
232
|
}
|
|
149
|
-
scanMessageHandlers(controllerClass, controllerBindingKey, app) {
|
|
150
|
-
this.scanHandlers(controllerClass, controllerBindingKey, app, decorators_1.MESSAGE_HANDLER_METADATA.key, false);
|
|
151
|
-
}
|
|
152
|
-
scanEventHandlers(controllerClass, controllerBindingKey, app) {
|
|
153
|
-
this.scanHandlers(controllerClass, controllerBindingKey, app, decorators_1.EVENT_HANDLER_METADATA.key, true);
|
|
154
|
-
}
|
|
155
233
|
/**
|
|
156
|
-
*
|
|
157
|
-
*
|
|
234
|
+
* Convert a `DiscoveredHandler` into a runtime `MessageHandler`,
|
|
235
|
+
* applying validation rules (no mixed kinds per pattern, no duplicate
|
|
236
|
+
* request handlers) before inserting into the registry.
|
|
158
237
|
*/
|
|
159
|
-
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
const
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
handler
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
238
|
+
registerDiscovered(discovered, controllerClass, controllerBindingKey, app, discovererId) {
|
|
239
|
+
const isEvent = discovered.kind === discovery_1.HANDLER_KIND_EVENT;
|
|
240
|
+
const rawTransport = discovered.transport;
|
|
241
|
+
const transportForKey = rawTransport === '*' ? undefined : rawTransport;
|
|
242
|
+
const key = this.buildKey(transportForKey, discovered.pattern);
|
|
243
|
+
const keyOrPattern = (0, utils_1.normalizePattern)(discovered.pattern);
|
|
244
|
+
const existing = this.entries.get(key);
|
|
245
|
+
const firstExisting = existing?.[0];
|
|
246
|
+
// Reject mixed handler types on the same pattern.
|
|
247
|
+
if (firstExisting && firstExisting.kind !== discovered.kind) {
|
|
248
|
+
throw new errors_1.TransportConfigError(`Cannot mix handler kinds for pattern "${keyOrPattern}" on transport "${rawTransport}": ` +
|
|
249
|
+
`existing kind "${firstExisting.kind}" from ` +
|
|
250
|
+
`${firstExisting.controllerClass.name}.${firstExisting.methodName} ` +
|
|
251
|
+
`(discoverer "${firstExisting.discovererId}") conflicts with ` +
|
|
252
|
+
`new kind "${discovered.kind}" from ` +
|
|
253
|
+
`${controllerClass.name}.${discovered.methodName} ` +
|
|
254
|
+
`(discoverer "${discovererId}").`);
|
|
255
|
+
}
|
|
256
|
+
// Reject duplicate request/response handlers.
|
|
257
|
+
if (firstExisting && !isEvent) {
|
|
258
|
+
throw new errors_1.TransportConfigError(`Duplicate request handler for pattern "${keyOrPattern}" on transport "${rawTransport}": ` +
|
|
259
|
+
`pattern is already bound to ` +
|
|
260
|
+
`${firstExisting.controllerClass.name}.${firstExisting.methodName} ` +
|
|
261
|
+
`contributed by discoverer "${firstExisting.discovererId}".`);
|
|
262
|
+
}
|
|
263
|
+
const handler = this.createHandler(controllerBindingKey, discovered.methodName, app);
|
|
264
|
+
handler.isEventHandler = isEvent;
|
|
265
|
+
if (transportForKey !== undefined) {
|
|
266
|
+
handler.transport = transportForKey;
|
|
267
|
+
}
|
|
268
|
+
if (discovered.options?.extras !== undefined) {
|
|
269
|
+
handler.extras = discovered.options.extras;
|
|
270
|
+
}
|
|
271
|
+
const entry = {
|
|
272
|
+
pattern: discovered.pattern,
|
|
273
|
+
transport: rawTransport,
|
|
274
|
+
kind: discovered.kind,
|
|
275
|
+
controllerClass,
|
|
276
|
+
methodName: discovered.methodName,
|
|
277
|
+
discovererId,
|
|
278
|
+
...(discovered.options !== undefined
|
|
279
|
+
? { options: discovered.options }
|
|
280
|
+
: {}),
|
|
281
|
+
handler,
|
|
282
|
+
};
|
|
283
|
+
const decoratorLabel = `@${discovererId}Handler`;
|
|
284
|
+
if (existing) {
|
|
285
|
+
if (firstExisting && firstExisting.discovererId !== entry.discovererId) {
|
|
286
|
+
debug('event handler chain on pattern %s (transport %s) now spans discoverers: %s + %s', keyOrPattern, rawTransport, firstExisting.discovererId, entry.discovererId);
|
|
188
287
|
}
|
|
288
|
+
existing.push(entry);
|
|
289
|
+
debug('chained %s [%s] on %s.%s', decoratorLabel, keyOrPattern, controllerClass.name, discovered.methodName);
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
this.entries.set(key, [entry]);
|
|
293
|
+
debug('discovered %s [%s] on %s.%s', decoratorLabel, (0, utils_1.normalizePattern)(discovered.pattern), controllerClass.name, discovered.methodName);
|
|
189
294
|
}
|
|
190
295
|
}
|
|
191
296
|
/**
|
|
192
|
-
* Create a handler function that invokes the controller method
|
|
193
|
-
* LoopBack's native invocation pipeline.
|
|
297
|
+
* Create a handler function that invokes the controller method
|
|
298
|
+
* through LoopBack's native invocation pipeline.
|
|
194
299
|
*
|
|
195
300
|
* Each invocation creates a uniquely named child Context from the
|
|
196
|
-
* application context. Per-message bindings (payload, transport
|
|
197
|
-
* are scoped to the child context and cannot collide with
|
|
198
|
-
* messages.
|
|
301
|
+
* application context. Per-message bindings (payload, transport
|
|
302
|
+
* context) are scoped to the child context and cannot collide with
|
|
303
|
+
* concurrent messages.
|
|
199
304
|
*
|
|
200
305
|
* The child context lifetime extends until the handler result fully
|
|
201
306
|
* resolves. For Observable results, the context stays open until the
|
|
@@ -205,7 +310,8 @@ let HandlerRegistry = class HandlerRegistry {
|
|
|
205
310
|
const handler = async (data, context) => {
|
|
206
311
|
const invocationCtx = new core_1.Context(app, `transport-invocation-${(0, crypto_1.randomUUID)()}`);
|
|
207
312
|
// Idempotent cleanup guard: Context.close() is synchronous but
|
|
208
|
-
// may be reached from multiple paths (error + teardown) for
|
|
313
|
+
// may be reached from multiple paths (error + teardown) for
|
|
314
|
+
// Observables.
|
|
209
315
|
let closed = false;
|
|
210
316
|
const cleanup = () => {
|
|
211
317
|
if (!closed) {
|
|
@@ -219,13 +325,13 @@ let HandlerRegistry = class HandlerRegistry {
|
|
|
219
325
|
const controller = await invocationCtx.get(controllerBindingKey);
|
|
220
326
|
const method = controller[methodName];
|
|
221
327
|
if (typeof method !== 'function') {
|
|
222
|
-
throw new
|
|
328
|
+
throw new errors_1.TransportConfigError(`Transport handler method "${methodName}" not found on controller "${controllerBindingKey}"`);
|
|
223
329
|
}
|
|
224
|
-
// Invoke through LoopBack's method invocation pipeline
|
|
225
|
-
//
|
|
226
|
-
//
|
|
330
|
+
// Invoke through LoopBack's method invocation pipeline so we
|
|
331
|
+
// honour parameter injection, interceptors, and other framework
|
|
332
|
+
// invocation semantics.
|
|
227
333
|
const result = await (0, core_1.invokeMethod)(controller, methodName, invocationCtx, [data, context]);
|
|
228
|
-
// For Observable results, defer context cleanup until stream completes
|
|
334
|
+
// For Observable results, defer context cleanup until stream completes.
|
|
229
335
|
if ((0, rxjs_1.isObservable)(result)) {
|
|
230
336
|
const obs = result;
|
|
231
337
|
return new rxjs_1.Observable(subscriber => {
|
|
@@ -246,7 +352,7 @@ let HandlerRegistry = class HandlerRegistry {
|
|
|
246
352
|
};
|
|
247
353
|
});
|
|
248
354
|
}
|
|
249
|
-
// For non-Observable results, close context immediately
|
|
355
|
+
// For non-Observable results, close context immediately.
|
|
250
356
|
cleanup();
|
|
251
357
|
return result;
|
|
252
358
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handler-registry.js","sourceRoot":"","sources":["../../src/registry/handler-registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handler-registry.js","sourceRoot":"","sources":["../../src/registry/handler-registry.ts"],"names":[],"mappings":"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"}
|
package/dist/registry/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { HandlerRegistry } from './handler-registry';
|