@paralect/hive 0.1.8 → 0.1.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@paralect/hive",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -0,0 +1,9 @@
1
+
2
+ const middleware = async (ctx, next) => {
3
+ ctx.state.isSkipAuth = true;
4
+ return next();
5
+ };
6
+
7
+ middleware.runOrder = -1;
8
+
9
+ export default middleware;
@@ -25,6 +25,11 @@ export default async (ctx, next) => {
25
25
 
26
26
  let token;
27
27
 
28
+ if (ctx.state.isSkipAuth) {
29
+ ctx.state.user = null;
30
+ return next();
31
+ }
32
+
28
33
  if (ctx.state.accessToken) {
29
34
  token = await tokenService.findOne({ token: ctx.state.accessToken });
30
35
  }
@@ -57,13 +57,12 @@ const logRequestToMongo = async (ctx, next) => {
57
57
  }
58
58
  };
59
59
 
60
- const defineRoutes = async (app) => {
60
+ export default async (app) => {
61
61
  app.use(logRequestToMongo);
62
62
  app.use(attachCustomErrors);
63
63
  app.use(routeErrorHandler);
64
64
  app.use(tryToAttachUser);
65
65
 
66
-
67
66
 
68
67
  const [resources, allMiddlewares] = await Promise.all([getResources(), getMiddlewares()]);
69
68
 
@@ -96,12 +95,6 @@ const defineRoutes = async (app) => {
96
95
  }));
97
96
 
98
97
  endpoints.forEach(({ endpoint, requestSchema, middlewares = [], handler }) => {
99
- const additionalMiddlewares = [];
100
-
101
- if (requestSchema) {
102
- additionalMiddlewares.push(validate(requestSchema));
103
- }
104
-
105
98
  let targetRouter;
106
99
 
107
100
  let url = endpoint.absoluteUrl || endpoint.url;
@@ -122,21 +115,23 @@ const defineRoutes = async (app) => {
122
115
  }
123
116
 
124
117
  middleware = allMiddlewares.find(m => m.name === middleware).fn;
125
- } else if (_.isArray(middleware)) {
126
- const [middlewareName, ...middlewareParams] = middleware;
127
-
128
- if (!allMiddlewares.find(m => m.name === middlewareName)) {
129
- throw new Error(`Middleware ${middlewareName} not found`);
130
- }
131
-
132
- middleware = allMiddlewares.find(m => m.name === middlewareName).fn(...middlewareParams);
118
+ } else if (middleware?.name && middleware?.args) {
119
+ if (!allMiddlewares.find(m => m.name === middleware.name)) {
120
+ throw new Error(`Middleware ${middleware.name} not found`);
121
+ };
122
+ middleware = allMiddlewares.find(m => m.name === middleware.name).fn(...middleware.args);
133
123
  }
134
124
 
125
+ return middleware;
126
+ }).map(middleware => {
127
+ middleware.runOrder = _.isNumber(middleware.runOrder) ? middleware.runOrder : 1;
135
128
  return middleware;
136
129
  });
137
130
 
138
- if (config._hive.isRequireAuthAllEndpoints && !endpoint.isNoAuthRequired) {
139
- app.use(isAuthorized);
131
+
132
+ if (config._hive.isRequireAuthAllEndpoints) {
133
+ isAuthorized.runOrder = 0;
134
+ middlewares.unshift(isAuthorized);
140
135
  }
141
136
 
142
137
  targetRouter[endpoint.method?.toLowerCase() || "get"](
@@ -146,8 +141,8 @@ const defineRoutes = async (app) => {
146
141
  ctx.state.endpoint = endpoint;
147
142
  await next();
148
143
  },
149
- ...additionalMiddlewares,
150
- ...middlewares,
144
+ validate(requestSchema),
145
+ ..._.sortBy(middlewares, m => m.runOrder),
151
146
  handler
152
147
  );
153
148
  });
@@ -155,6 +150,4 @@ const defineRoutes = async (app) => {
155
150
  app.use(globalRouter.routes());
156
151
  app.use(mount(`/${resourceName}`, resourceRouter.routes()));
157
152
  });
158
- };
159
-
160
- export default defineRoutes;
153
+ };