@pristine-ts/networking 2.0.2 → 2.0.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 (41) hide show
  1. package/dist/lib/cjs/contexts/contexts.js +18 -0
  2. package/dist/lib/cjs/contexts/contexts.js.map +1 -0
  3. package/dist/lib/cjs/contexts/request-context.js +24 -0
  4. package/dist/lib/cjs/contexts/request-context.js.map +1 -0
  5. package/dist/lib/cjs/handlers/request.event-handler.js +0 -2
  6. package/dist/lib/cjs/handlers/request.event-handler.js.map +1 -1
  7. package/dist/lib/cjs/interceptors/request-body-converter.interceptor.js +3 -3
  8. package/dist/lib/cjs/interceptors/request-body-converter.interceptor.js.map +1 -1
  9. package/dist/lib/cjs/managers/managers.js +18 -0
  10. package/dist/lib/cjs/managers/managers.js.map +1 -0
  11. package/dist/lib/cjs/managers/request-context.manager.js +98 -0
  12. package/dist/lib/cjs/managers/request-context.manager.js.map +1 -0
  13. package/dist/lib/cjs/networking.module.js +2 -0
  14. package/dist/lib/cjs/networking.module.js.map +1 -1
  15. package/dist/lib/cjs/router.js +154 -155
  16. package/dist/lib/cjs/router.js.map +1 -1
  17. package/dist/lib/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  18. package/dist/lib/esm/contexts/contexts.js +2 -0
  19. package/dist/lib/esm/contexts/contexts.js.map +1 -0
  20. package/dist/lib/esm/contexts/request-context.js +20 -0
  21. package/dist/lib/esm/contexts/request-context.js.map +1 -0
  22. package/dist/lib/esm/handlers/request.event-handler.js +0 -2
  23. package/dist/lib/esm/handlers/request.event-handler.js.map +1 -1
  24. package/dist/lib/esm/interceptors/request-body-converter.interceptor.js +3 -3
  25. package/dist/lib/esm/interceptors/request-body-converter.interceptor.js.map +1 -1
  26. package/dist/lib/esm/managers/managers.js +2 -0
  27. package/dist/lib/esm/managers/managers.js.map +1 -0
  28. package/dist/lib/esm/managers/request-context.manager.js +95 -0
  29. package/dist/lib/esm/managers/request-context.manager.js.map +1 -0
  30. package/dist/lib/esm/networking.module.js +2 -0
  31. package/dist/lib/esm/networking.module.js.map +1 -1
  32. package/dist/lib/esm/router.js +154 -155
  33. package/dist/lib/esm/router.js.map +1 -1
  34. package/dist/lib/esm/tsconfig.tsbuildinfo +1 -1
  35. package/dist/types/contexts/contexts.d.ts +1 -0
  36. package/dist/types/contexts/request-context.d.ts +24 -0
  37. package/dist/types/managers/managers.d.ts +1 -0
  38. package/dist/types/managers/request-context.manager.d.ts +43 -0
  39. package/dist/types/networking.module.d.ts +2 -0
  40. package/dist/types/router.d.ts +3 -1
  41. package/package.json +7 -7
@@ -0,0 +1 @@
1
+ export * from "./request-context";
@@ -0,0 +1,24 @@
1
+ import { IdentityInterface, Request } from "@pristine-ts/common";
2
+ import { MethodRouterNode } from "../nodes/method-router.node";
3
+ /**
4
+ * Per-HTTP-request state, scoped to the lifetime of one routed request. Layered
5
+ * **inside** the framework's `EventContext` (which holds `eventId`/`traceId`/`container`):
6
+ * a controller method running inside an HTTP request can read both the EventContext
7
+ * primitives and these networking-specific slots.
8
+ *
9
+ * Owned by `@pristine-ts/networking`. Apps that don't import the networking module
10
+ * never see this type — `Request`, `MethodRouterNode`, and `IdentityInterface` are
11
+ * concerns of HTTP-shaped flows, not of the framework as a whole.
12
+ *
13
+ * Populated incrementally as the router progresses through the request lifecycle:
14
+ * - `request` is set the moment the context is installed (route matching has
15
+ * succeeded by then; a 404 short-circuits before installation).
16
+ * - `methodNode` is set immediately after request (always together).
17
+ * - `identity` fills in once the authentication pipeline runs. Until then,
18
+ * downstream code that reads `identity` from the context sees `undefined`.
19
+ */
20
+ export declare class RequestContext {
21
+ request: Request;
22
+ methodNode?: MethodRouterNode;
23
+ identity?: IdentityInterface;
24
+ }
@@ -0,0 +1 @@
1
+ export * from "./request-context.manager";
@@ -0,0 +1,43 @@
1
+ import { IdentityInterface, Request } from "@pristine-ts/common";
2
+ import { RequestContext } from "../contexts/request-context";
3
+ import { MethodRouterNode } from "../nodes/method-router.node";
4
+ /**
5
+ * Owns the `AsyncLocalStorage` instance that propagates the active `RequestContext`
6
+ * across `await` boundaries for HTTP-routed code.
7
+ *
8
+ * Nested inside the framework's `EventContext`: when the router installs a
9
+ * `RequestContext`, the surrounding `EventContext` (`eventId`/`traceId`/`container`)
10
+ * is still active, so application code inside a controller method can read both.
11
+ *
12
+ * Same shape as `EventContextManager` — `run` + read accessors + static convenience
13
+ * mirrors + `bind` for the background-work escape hatch.
14
+ *
15
+ * Application code outside the networking module never sees this manager. Code inside
16
+ * the networking module uses it to look up the active request without threading it
17
+ * through every method parameter.
18
+ */
19
+ export declare class RequestContextManager {
20
+ private static readonly als;
21
+ run<T>(ctx: RequestContext, fn: () => T): T;
22
+ run<T>(ctx: RequestContext, fn: () => Promise<T>): Promise<T>;
23
+ current(): RequestContext | undefined;
24
+ request(): Request | undefined;
25
+ methodNode(): MethodRouterNode | undefined;
26
+ identity(): IdentityInterface | undefined;
27
+ /**
28
+ * Convenience alias for `EventContextManager.eventId()`. The framework's correlation
29
+ * id (`eventId`) is the same value HTTP people often call "request id" — exposing it
30
+ * here as `requestId()` makes it discoverable next to `request()` / `identity()`
31
+ * without duplicating storage. There is no `RequestContext.requestId` field — the
32
+ * canonical slot lives on `EventContext` and we delegate at lookup time, so the two
33
+ * values can never drift.
34
+ */
35
+ requestId(): string | undefined;
36
+ bind<F extends (...args: any[]) => any>(fn: F): F;
37
+ static current(): RequestContext | undefined;
38
+ static request(): Request | undefined;
39
+ static methodNode(): MethodRouterNode | undefined;
40
+ static identity(): IdentityInterface | undefined;
41
+ static requestId(): string | undefined;
42
+ static bind<F extends (...args: any[]) => any>(fn: F): F;
43
+ }
@@ -1,11 +1,13 @@
1
1
  import { ModuleInterface } from "@pristine-ts/common";
2
2
  export * from "./cache/cache";
3
+ export * from "./contexts/contexts";
3
4
  export * from "./decorators/decorators";
4
5
  export * from "./enums/enums";
5
6
  export * from "./errors/errors";
6
7
  export * from "./handlers/handlers";
7
8
  export * from "./interceptors/interceptors";
8
9
  export * from "./interfaces/interfaces";
10
+ export * from "./managers/managers";
9
11
  export * from "./mappers/mappers";
10
12
  export * from "./models/models";
11
13
  export * from "./nodes/nodes";
@@ -7,6 +7,7 @@ import { HttpMethod, Request, Response } from "@pristine-ts/common";
7
7
  import { LogHandlerInterface } from "@pristine-ts/logging";
8
8
  import { AuthenticationManagerInterface, AuthorizerManagerInterface } from "@pristine-ts/security";
9
9
  import { RouterCache } from "./cache/router.cache";
10
+ import { RequestContextManager } from "./managers/request-context.manager";
10
11
  /**
11
12
  * The router service is the service that creates the routing tree from the controllers.
12
13
  * It also executes a request properly by routing it to the intended controller and returns the response.
@@ -17,6 +18,7 @@ export declare class Router implements RouterInterface {
17
18
  private readonly authorizerManager;
18
19
  private readonly authenticationManager;
19
20
  private readonly cache;
21
+ private readonly requestContextManager;
20
22
  private root;
21
23
  private setupCompleted;
22
24
  /**
@@ -28,7 +30,7 @@ export declare class Router implements RouterInterface {
28
30
  * @param authorizerManager The authorizer manager to validate authorization.
29
31
  * @param authenticationManager The authentication manager to validate authentication.
30
32
  */
31
- constructor(loghandler: LogHandlerInterface, controllerMethodParameterDecoratorResolver: ControllerMethodParameterDecoratorResolver, authorizerManager: AuthorizerManagerInterface, authenticationManager: AuthenticationManagerInterface, cache: RouterCache);
33
+ constructor(loghandler: LogHandlerInterface, controllerMethodParameterDecoratorResolver: ControllerMethodParameterDecoratorResolver, authorizerManager: AuthorizerManagerInterface, authenticationManager: AuthenticationManagerInterface, cache: RouterCache, requestContextManager: RequestContextManager);
32
34
  /**
33
35
  * This method returns the whole route tree as a string.
34
36
  */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pristine-ts/networking",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "",
5
5
  "module": "dist/lib/esm/networking.module.js",
6
6
  "main": "dist/lib/cjs/networking.module.js",
@@ -20,12 +20,12 @@
20
20
  "access": "public"
21
21
  },
22
22
  "dependencies": {
23
- "@pristine-ts/common": "^2.0.2",
24
- "@pristine-ts/core": "^2.0.2",
25
- "@pristine-ts/data-mapping": "^2.0.2",
23
+ "@pristine-ts/common": "^2.0.3",
24
+ "@pristine-ts/core": "^2.0.3",
25
+ "@pristine-ts/data-mapping": "^2.0.3",
26
26
  "@pristine-ts/metadata": "^1.0.16",
27
- "@pristine-ts/security": "^2.0.2",
28
- "@pristine-ts/telemetry": "^2.0.2",
27
+ "@pristine-ts/security": "^2.0.3",
28
+ "@pristine-ts/telemetry": "^2.0.3",
29
29
  "lodash": "^4.17.21"
30
30
  },
31
31
  "jest": {
@@ -62,7 +62,7 @@
62
62
  "src/*.{js,ts}"
63
63
  ]
64
64
  },
65
- "gitHead": "b0899c7eb6b34a99c6df0739507b1458549a0009",
65
+ "gitHead": "c741bb430ab8f6286068dc3870fcadf4cefd0023",
66
66
  "repository": {
67
67
  "type": "git",
68
68
  "url": "https://github.com/magieno/pristine-ts.git",