equipped 5.2.4 → 5.2.6

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 (55) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/server/impls/base.cjs +11 -9
  3. package/dist/cjs/server/impls/base.cjs.map +1 -1
  4. package/dist/cjs/server/impls/base.min.cjs +1 -1
  5. package/dist/cjs/server/impls/base.min.cjs.map +1 -1
  6. package/dist/cjs/server/impls/express.cjs +3 -5
  7. package/dist/cjs/server/impls/express.cjs.map +1 -1
  8. package/dist/cjs/server/impls/express.min.cjs +1 -1
  9. package/dist/cjs/server/impls/express.min.cjs.map +1 -1
  10. package/dist/cjs/server/routes.cjs +1 -0
  11. package/dist/cjs/server/routes.cjs.map +1 -1
  12. package/dist/cjs/server/routes.min.cjs +1 -1
  13. package/dist/cjs/server/routes.min.cjs.map +1 -1
  14. package/dist/cjs/server/types.cjs +3 -1
  15. package/dist/cjs/server/types.cjs.map +1 -1
  16. package/dist/cjs/server/types.min.cjs +1 -1
  17. package/dist/cjs/server/types.min.cjs.map +1 -1
  18. package/dist/esm/server/impls/base.min.mjs +1 -1
  19. package/dist/esm/server/impls/base.min.mjs.map +1 -1
  20. package/dist/esm/server/impls/base.mjs +7 -5
  21. package/dist/esm/server/impls/base.mjs.map +1 -1
  22. package/dist/esm/server/impls/express.min.mjs +1 -1
  23. package/dist/esm/server/impls/express.min.mjs.map +1 -1
  24. package/dist/esm/server/impls/express.mjs +3 -5
  25. package/dist/esm/server/impls/express.mjs.map +1 -1
  26. package/dist/esm/server/routes.min.mjs +1 -1
  27. package/dist/esm/server/routes.min.mjs.map +1 -1
  28. package/dist/esm/server/routes.mjs +1 -0
  29. package/dist/esm/server/routes.mjs.map +1 -1
  30. package/dist/esm/server/types.min.mjs +1 -1
  31. package/dist/esm/server/types.min.mjs.map +1 -1
  32. package/dist/esm/server/types.mjs +3 -1
  33. package/dist/esm/server/types.mjs.map +1 -1
  34. package/dist/types/audit/index.d.ts +3 -4
  35. package/dist/types/{core-BWUHISEy.d.ts → core-BrkNSwvc.d.ts} +1 -1
  36. package/dist/types/{db-DEiImw1Z.d.ts → db-C8YY1yTO.d.ts} +1 -1
  37. package/dist/types/{db-vKGTnGlO.d.ts → db-Dj1SGto0.d.ts} +2 -2
  38. package/dist/types/dbs/index.d.ts +5 -6
  39. package/dist/types/errors/index.d.ts +3 -4
  40. package/dist/types/events/index.d.ts +2 -3
  41. package/dist/types/fastify-DLPUK3vD.d.ts +224 -0
  42. package/dist/types/index.d.ts +6 -7
  43. package/dist/types/instance/index.d.ts +6 -7
  44. package/dist/types/{kafka-DCpqW_YM.d.ts → kafka-Cf-TUJgv.d.ts} +12 -2
  45. package/dist/types/{requestError-MGJ-ojtC.d.ts → requestError-C2PNWUrt.d.ts} +12 -149
  46. package/dist/types/server/impls/base.js +7 -5
  47. package/dist/types/server/impls/express.js +3 -5
  48. package/dist/types/server/index.d.ts +9 -9
  49. package/dist/types/server/routes.js +1 -0
  50. package/dist/types/server/types.js +3 -1
  51. package/dist/types/{validationError-BbiTIoAh.d.ts → validationError-Bw8OYv5s.d.ts} +1 -1
  52. package/dist/types/validations/index.d.ts +2 -3
  53. package/package.json +1 -1
  54. package/dist/types/base-CfeyC14V.d.ts +0 -14
  55. package/dist/types/fastify-BizyaCY_.d.ts +0 -80
@@ -48,25 +48,27 @@ class Server {
48
48
  addRoute(...routes) {
49
49
  routes.forEach((route) => {
50
50
  this.#queue.push(async () => {
51
- const { method, path, schema = {}, onError, middlewares = [] } = route;
51
+ const { method, path, schema = {}, onError, middlewares = [], responseMiddlewares = [] } = route;
52
52
  const key = `(${method.toUpperCase()}) ${this.#openapi.cleanPath(path)}`;
53
53
  if (this.#routesByKey.get(key))
54
54
  throw new EquippedError(`Route key ${key} already registered. All route keys must be unique`, { route, key });
55
55
  middlewares.forEach((m) => m.onSetup?.(route));
56
56
  onError?.onSetup?.(route);
57
+ responseMiddlewares.forEach((m) => m.onSetup?.(route));
57
58
  const { validateRequest, validateResponse, jsonSchema } = this.#resolveSchema(method, schema);
58
59
  this.#routesByKey.set(key, true);
59
60
  await this.#openapi.register(route, jsonSchema);
60
61
  this.implementations.registerRoute(method, this.#openapi.cleanPath(path), async (req, res) => {
61
62
  const request = await validateRequest(await this.implementations.parseRequest(req));
62
63
  try {
63
- for (const middleware of middlewares) await middleware.cb(request, this.config);
64
- const rawRes = await route.handler(request, this.config);
64
+ for (const middleware of middlewares) await middleware.cb(request);
65
+ const rawRes = await route.handler(request);
65
66
  const response = rawRes instanceof Response ? rawRes : new Response({ body: rawRes, status: StatusCodes.Ok, headers: {}, piped: false });
67
+ for (const middleware of responseMiddlewares) await middleware.cb(request, response);
66
68
  return await this.implementations.handleResponse(res, await validateResponse(response));
67
69
  } catch (error) {
68
70
  if (onError?.cb) {
69
- const rawResponse = await onError.cb(request, this.config, error);
71
+ const rawResponse = await onError.cb(request, error);
70
72
  const response = rawResponse instanceof Response ? rawResponse : new Response({ body: rawResponse, status: StatusCodes.BadRequest, headers: {} });
71
73
  return await this.implementations.handleResponse(res, await validateResponse(response));
72
74
  }
@@ -179,6 +181,7 @@ class Server {
179
181
  contentType: "text/plain"
180
182
  })
181
183
  });
184
+ await Promise.all(this.#queue.map((cb) => cb()));
182
185
  this.implementations.registerNotFoundHandler(async (req) => {
183
186
  const request = await this.implementations.parseRequest(req);
184
187
  throw new NotFoundError(`Route ${request.path} not found`);
@@ -197,7 +200,6 @@ class Server {
197
200
  });
198
201
  return await this.implementations.handleResponse(res, response);
199
202
  });
200
- await Promise.all(this.#queue.map((cb) => cb()));
201
203
  const started = await this.implementations.start(port);
202
204
  if (started) Instance.get().log.info(`${instance.id}(${app.name}) service listening on port ${port}`);
203
205
  return started;
@@ -12,7 +12,6 @@ import { Request } from "../requests.js";
12
12
  import { StatusCodes } from "../types.js";
13
13
  import { Server } from "./base.js";
14
14
  class ExpressServer extends Server {
15
- #expressApp;
16
15
  constructor(config) {
17
16
  const app = express();
18
17
  const instance = Instance.get();
@@ -59,13 +58,13 @@ class ExpressServer extends Server {
59
58
  }
60
59
  },
61
60
  registerRoute: (method, path, cb) => {
62
- this.#expressApp[method]?.(path, cb);
61
+ app[method]?.(path, async (req, res) => cb(req, res));
63
62
  },
64
63
  registerErrorHandler: (cb) => {
65
- this.#expressApp.use(async (err, req, res, _next) => cb(err, req, res));
64
+ app.use(async (err, req, res, _next) => cb(err, req, res));
66
65
  },
67
66
  registerNotFoundHandler: (cb) => {
68
- this.#expressApp.use(cb);
67
+ app.use(async (req, res, _next) => cb(req, res));
69
68
  },
70
69
  start: async (port) => new Promise((resolve, reject) => {
71
70
  try {
@@ -76,7 +75,6 @@ class ExpressServer extends Server {
76
75
  }
77
76
  })
78
77
  });
79
- this.#expressApp = app;
80
78
  app.disable("x-powered-by");
81
79
  if (config.requests.log) app.use(pinoHttp({ logger: instance.log }));
82
80
  app.use(express.json());
@@ -1,21 +1,21 @@
1
- export { E as ExpressServer, F as FastifyServer, O as OnJoinFn, R as Router, S as Server, a as SocketCallbacks, b as SocketEmitter } from '../fastify-BizyaCY_.js';
2
- import { B as BaseRequestAuthMethod, a as Request, c as RouteDefToReqRes, d as RouteDef, S as ServerConfig, e as Route } from '../requestError-MGJ-ojtC.js';
3
- export { C as CookieVal, i as DefaultCookies, D as DefaultHeaders, I as IncomingFile, l as MergeRouteDefs, M as Methods, g as MethodsEnum, b as Response, j as RouteConfig, m as RouteDefHandler, k as RouterConfig, f as StatusCodes, h as StatusCodesEnum, o as makeErrorMiddleware, n as makeMiddleware, s as serverConfigPipe } from '../requestError-MGJ-ojtC.js';
1
+ import { B as BaseRequestAuthMethod } from '../fastify-DLPUK3vD.js';
2
+ export { E as ExpressServer, F as FastifyServer, O as OnJoinFn, R as Router, S as Server, a as ServerConfig, b as SocketCallbacks, c as SocketEmitter, s as serverConfigPipe } from '../fastify-DLPUK3vD.js';
4
3
  import { A as AuthUser } from '../overrides-6Hxg764S.js';
4
+ import { a as Request, c as RouteDefToReqRes, d as RouteDef, e as Route } from '../requestError-C2PNWUrt.js';
5
+ export { C as CookieVal, h as DefaultCookies, D as DefaultHeaders, I as IncomingFile, k as MergeRouteDefs, M as Methods, f as MethodsEnum, b as Response, i as RouteConfig, l as RouteDefHandler, j as RouterConfig, S as StatusCodes, g as StatusCodesEnum, o as makeErrorMiddleware, m as makeMiddleware, n as makeResponseMiddleware } from '../requestError-C2PNWUrt.js';
5
6
  import { IncomingHttpHeaders } from 'node:http2';
6
7
  import 'express';
7
8
  import 'fastify';
9
+ import 'valleyed';
10
+ import '../kafka-Cf-TUJgv.js';
8
11
  import 'supertest/lib/agent';
9
12
  import 'node:http';
10
13
  import '@fastify/cors';
11
14
  import 'cors';
12
15
  import 'supertest';
13
16
  import 'socket.io';
14
- import '../core-BWUHISEy.js';
17
+ import '../core-BrkNSwvc.js';
15
18
  import 'mongodb';
16
- import 'valleyed';
17
- import '../kafka-DCpqW_YM.js';
18
- import '../base-CfeyC14V.js';
19
19
  import '../types/index.js';
20
20
  import 'node:stream';
21
21
  import '@fastify/cookie';
@@ -75,8 +75,8 @@ declare abstract class BaseJwtCookieRequestAuthMethod<T extends {
75
75
  }
76
76
 
77
77
  declare const requireAuthUser: (methods: BaseRequestAuthMethod<AuthUser>[]) => {
78
- cb: (req: Request<RouteDefToReqRes<RouteDef>>, config: ServerConfig) => void | Promise<void>;
78
+ cb: (req: Request<RouteDefToReqRes<RouteDef>>) => void | Promise<void>;
79
79
  onSetup: ((route: Route<RouteDef>) => void) | undefined;
80
80
  };
81
81
 
82
- export { BaseApiKeyRequestAuthMethod, BaseJwtCookieRequestAuthMethod, BaseJwtHeaderRequestAuthMethod, BaseJwtRequestAuthMethod, type BaseJwtRequestAuthMethodOptions, BaseRequestAuthMethod, Request, Route, RouteDef, RouteDefToReqRes, ServerConfig, requireAuthUser };
82
+ export { BaseApiKeyRequestAuthMethod, BaseJwtCookieRequestAuthMethod, BaseJwtHeaderRequestAuthMethod, BaseJwtRequestAuthMethod, type BaseJwtRequestAuthMethodOptions, BaseRequestAuthMethod, Request, Route, RouteDef, RouteDefToReqRes, requireAuthUser };
@@ -36,6 +36,7 @@ const groupRoutes = (config, routes) => routes.map((route) => ({
36
36
  path: `${config.path}/${route.path}`,
37
37
  groups: [...config.groups ?? [], ...route.groups ?? []],
38
38
  middlewares: [...config.middlewares ?? [], ...route.middlewares ?? []],
39
+ responseMiddlewares: [...config.responseMiddlewares ?? [], ...route.responseMiddlewares ?? []],
39
40
  schema: mergeSchemas(config.schema ?? {}, route.schema ?? {}),
40
41
  security: [...config.security ?? [], ...route.security ?? []]
41
42
  }));
@@ -22,10 +22,12 @@ function makeMiddlewareHandler(cb, onSetup) {
22
22
  return { cb, onSetup };
23
23
  }
24
24
  const makeMiddleware = (...args) => makeMiddlewareHandler(...args);
25
+ const makeResponseMiddleware = (...args) => makeMiddlewareHandler(...args);
25
26
  const makeErrorMiddleware = (...args) => makeMiddlewareHandler(...args);
26
27
  export {
27
28
  Methods,
28
29
  StatusCodes,
29
30
  makeErrorMiddleware,
30
- makeMiddleware
31
+ makeMiddleware,
32
+ makeResponseMiddleware
31
33
  };
@@ -1,4 +1,4 @@
1
- import { R as RequestError } from './requestError-MGJ-ojtC.js';
1
+ import { R as RequestError } from './requestError-C2PNWUrt.js';
2
2
 
3
3
  type ValidError = {
4
4
  messages: string[];
@@ -1,11 +1,10 @@
1
1
  import { Pipe, PipeInput, PipeOutput, PipeError } from 'valleyed';
2
2
  export * from 'valleyed';
3
3
  import { AsyncLocalStorage } from 'node:async_hooks';
4
- import { I as IncomingFile, a as Request, b as Response, c as RouteDefToReqRes, d as RouteDef } from '../requestError-MGJ-ojtC.js';
5
- import { V as ValidationError } from '../validationError-BbiTIoAh.js';
4
+ import { I as IncomingFile, a as Request, b as Response, c as RouteDefToReqRes, d as RouteDef } from '../requestError-C2PNWUrt.js';
5
+ import { V as ValidationError } from '../validationError-Bw8OYv5s.js';
6
6
  import '../types/index.js';
7
7
  import '../overrides-6Hxg764S.js';
8
- import '../base-CfeyC14V.js';
9
8
  import 'node:http2';
10
9
  import 'node:stream';
11
10
  import '@fastify/cookie';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "equipped",
3
- "version": "5.2.4",
3
+ "version": "5.2.6",
4
4
  "private": false,
5
5
  "description": "",
6
6
  "type": "module",
@@ -1,14 +0,0 @@
1
- import { E as Events } from './overrides-6Hxg764S.js';
2
-
3
- type StreamOptions = {
4
- skipScope?: boolean;
5
- fanout: boolean;
6
- };
7
- declare abstract class EventBus {
8
- abstract createStream<Event extends Events[keyof Events]>(topic: Event['topic'], options?: Partial<StreamOptions>): {
9
- publish: (data: Event['data']) => Promise<boolean>;
10
- subscribe: (onMessage: (data: Event['data']) => Promise<void>) => void;
11
- };
12
- }
13
-
14
- export { EventBus as E, type StreamOptions as S };
@@ -1,80 +0,0 @@
1
- import express from 'express';
2
- import { d as RouteDef, k as RouterConfig, j as RouteConfig, m as RouteDefHandler, l as MergeRouteDefs, e as Route, S as ServerConfig, a as Request, b as Response, g as MethodsEnum } from './requestError-MGJ-ojtC.js';
3
- import { FastifyRequest, FastifyReply } from 'fastify';
4
- import * as supertest_lib_agent from 'supertest/lib/agent';
5
- import http from 'node:http';
6
- import { FastifyCorsOptions } from '@fastify/cors';
7
- import { CorsOptions } from 'cors';
8
- import supertest from 'supertest';
9
- import { Server as Server$1 } from 'socket.io';
10
- import { E as Entity } from './core-BWUHISEy.js';
11
- import { A as AuthUser } from './overrides-6Hxg764S.js';
12
-
13
- declare class Router<T extends RouteDef> {
14
- #private;
15
- constructor(config?: RouterConfig<T>);
16
- head: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
17
- get: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
18
- post: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
19
- put: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
20
- patch: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
21
- delete: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
22
- options: <R extends RouteDef>(path: string, config?: RouteConfig<R>) => (handler: RouteDefHandler<MergeRouteDefs<T, R>>) => Route<MergeRouteDefs<T, R>>;
23
- nest(...routers: Router<any>[]): void;
24
- get routes(): Route<any>[];
25
- }
26
-
27
- type OnJoinFn = (data: {
28
- channel: string;
29
- user: AuthUser | null;
30
- }, params: Record<string, any>, query: Record<string, any>) => Promise<string | null>;
31
- type SocketCallbacks = {
32
- onConnect: (userId: string, socketId: string) => Promise<void>;
33
- onDisconnect: (userId: string, socketId: string) => Promise<void>;
34
- };
35
- declare class SocketEmitter {
36
- #private;
37
- private config;
38
- readonly socketInstance: Server$1;
39
- constructor(socket: Server$1, config: ServerConfig);
40
- created<T extends Entity>(channels: string[], data: T, to: string | string[] | null): Promise<void>;
41
- updated<T extends Entity>(channels: string[], { after, before }: {
42
- after: T;
43
- before: T;
44
- }, to: string | string[] | null): Promise<void>;
45
- deleted<T extends Entity>(channels: string[], data: T, to: string | string[] | null): Promise<void>;
46
- set connectionCallbacks(callbacks: SocketCallbacks);
47
- register(channel: string, onJoin: OnJoinFn): this;
48
- }
49
-
50
- declare abstract class Server<Req = any, Res = any> {
51
- #private;
52
- private config;
53
- private implementations;
54
- socket: SocketEmitter;
55
- protected server: http.Server;
56
- protected get cors(): CorsOptions & FastifyCorsOptions;
57
- constructor(server: http.Server, config: ServerConfig, implementations: {
58
- parseRequest: (req: Req) => Promise<Request<any>>;
59
- handleResponse: (res: Res, response: Response<any>) => Promise<void>;
60
- registerRoute: (method: MethodsEnum, path: string, cb: (req: Req, res: Res) => Promise<void>) => void;
61
- registerErrorHandler: (cb: (error: Error, req: Req, res: Res) => Promise<void>) => void;
62
- registerNotFoundHandler: (cb: (req: Req, res: Res) => Promise<void>) => void;
63
- start: (port: number) => Promise<boolean>;
64
- });
65
- addRouter(...routers: Router<any>[]): void;
66
- addRoute<T extends RouteDef>(...routes: Route<T>[]): void;
67
- test(): supertest_lib_agent<supertest.SuperTestStatic.Test>;
68
- start(): Promise<boolean>;
69
- }
70
-
71
- declare class ExpressServer extends Server<express.Request, express.Response> {
72
- #private;
73
- constructor(config: ServerConfig);
74
- }
75
-
76
- declare class FastifyServer extends Server<FastifyRequest, FastifyReply> {
77
- constructor(config: ServerConfig);
78
- }
79
-
80
- export { ExpressServer as E, FastifyServer as F, type OnJoinFn as O, Router as R, Server as S, type SocketCallbacks as a, SocketEmitter as b };