@akanjs/server 0.9.56 → 0.9.57

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/cjs/src/boot.js CHANGED
@@ -63,7 +63,14 @@ var import_gql = require("./gql");
63
63
  var import_module = require("./module");
64
64
  var import_schedule2 = require("./schedule");
65
65
  var import_searchDaemon = require("./searchDaemon");
66
- const createNestApp = async ({ registerModules, serverMode = "federation", env, log = true }) => {
66
+ const createNestApp = async ({
67
+ registerModules,
68
+ registerMiddlewares,
69
+ serverMode = "federation",
70
+ env,
71
+ log = true,
72
+ nestOptions = {}
73
+ }) => {
67
74
  const backendLogger = new import_common.Logger("Backend");
68
75
  if (log)
69
76
  backendLogger.rawLog(import_base.logo);
@@ -86,20 +93,6 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
86
93
  }
87
94
  (0, import_nest.initMongoDB)({ logging: import_base.baseEnv.environment !== "main", sendReport: false });
88
95
  import_events.default.EventEmitter.defaultMaxListeners = 1e3;
89
- let AuthMiddleWare = class {
90
- use(req, res, next) {
91
- const requestHeader = req;
92
- requestHeader.account = (0, import_nest.verifyToken)(
93
- jwtSecret,
94
- requestHeader.headers.authorization ?? (requestHeader.cookies?.jwt ? `Bearer ${requestHeader.cookies.jwt}` : void 0)
95
- );
96
- requestHeader.userAgent = requestHeader["user-agent"];
97
- next();
98
- }
99
- };
100
- AuthMiddleWare = __decorateClass([
101
- (0, import_common2.Injectable)()
102
- ], AuthMiddleWare);
103
96
  const redisClient = await (0, import_redis.createClient)({ url: redisUri }).connect();
104
97
  let GlobalProvideModule = class {
105
98
  };
@@ -119,9 +112,6 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
119
112
  })
120
113
  ], GlobalProvideModule);
121
114
  let AppModule = class {
122
- configure(consumer) {
123
- consumer.apply(AuthMiddleWare).forRoutes({ path: "*", method: import_common2.RequestMethod.ALL });
124
- }
125
115
  };
126
116
  AppModule = __decorateClass([
127
117
  (0, import_common2.Module)({
@@ -155,7 +145,7 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
155
145
  providers: [import_gql.DateScalar]
156
146
  })
157
147
  ], AppModule);
158
- const app = await import_core.NestFactory.create(AppModule, { logger: backendLogger });
148
+ const app = await import_core.NestFactory.create(AppModule, { logger: backendLogger, ...nestOptions });
159
149
  const redisIoAdapter = new import_nest.RedisIoAdapter(app, { jwtSecret });
160
150
  await redisIoAdapter.connectToRedis(redisUri);
161
151
  app.enableShutdownHooks();
@@ -180,6 +170,9 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
180
170
  app.useGlobalInterceptors(new import_nest.TimeoutInterceptor());
181
171
  app.useGlobalInterceptors(new import_nest.CacheInterceptor(redisClient));
182
172
  app.useGlobalFilters(new import_nest.AllExceptionsFilter());
173
+ const middlewares = registerMiddlewares(env);
174
+ if (middlewares.length > 0)
175
+ app.use(...middlewares);
183
176
  await app.listen(process.env.PORT ?? env.port ?? 8080);
184
177
  backendLogger.log(`\u{1F680} Server is running on: ${await app.getUrl()}`);
185
178
  } else {
@@ -26,18 +26,7 @@ var import_nest = require("@akanjs/nest");
26
26
  var import_service = require("@akanjs/service");
27
27
  var import_signal = require("@akanjs/signal");
28
28
  var import_common2 = require("@nestjs/common");
29
- var import_passport = require("@nestjs/passport");
30
29
  var import_platform_express = require("@nestjs/platform-express");
31
- const internalArgMap = {
32
- // Parent: Nest.Parent,
33
- Account: import_nest.Account,
34
- UserIp: import_nest.UserIp,
35
- Access: import_nest.Access,
36
- Self: import_nest.Self,
37
- Me: import_nest.Me,
38
- Req: import_nest.Req,
39
- Res: import_nest.Res
40
- };
41
30
  const processedKeys = /* @__PURE__ */ new Set();
42
31
  const controllerOf = (sigRef, allSrvs) => {
43
32
  const sigMeta = (0, import_signal.getSigMeta)(sigRef);
@@ -51,11 +40,11 @@ const controllerOf = (sigRef, allSrvs) => {
51
40
  (0, import_common2.Inject)(srvRef)(Ctrl.prototype, (0, import_common.lowerlize)(srvName));
52
41
  });
53
42
  for (const gqlMeta of gqlMetas) {
54
- if (gqlMeta.guards.some((guard) => guard === "None") || gqlMeta.signalOption.onlyFor === "graphql" || !["Query", "Mutation"].includes(gqlMeta.type) || processedKeys.has(gqlMeta.key))
43
+ if (gqlMeta.signalOption.guards?.some((guard) => guard === import_nest.None) || gqlMeta.signalOption.onlyFor === "graphql" || !["Query", "Mutation"].includes(gqlMeta.type) || processedKeys.has(gqlMeta.key))
55
44
  continue;
56
45
  const [argMetas, internalArgMetas] = (0, import_signal.getArgMetas)(Ctrl, gqlMeta.key);
57
46
  internalArgMetas.forEach((internalArgMeta) => {
58
- const internalDecorator = internalArgMap[internalArgMeta.type];
47
+ const internalDecorator = (0, import_nest.getNestParamDecorator)(internalArgMeta.type);
59
48
  internalDecorator(internalArgMeta.option ?? {})(Ctrl.prototype, gqlMeta.key, internalArgMeta.idx);
60
49
  });
61
50
  const uploadArgMeta = argMetas.find((argMeta) => argMeta.type === "Upload");
@@ -83,10 +72,7 @@ const controllerOf = (sigRef, allSrvs) => {
83
72
  bodyArgMetas.forEach((argMeta) => {
84
73
  (0, import_common2.Body)(argMeta.name, ...(0, import_nest.getBodyPipes)(argMeta))(Ctrl.prototype, gqlMeta.key, argMeta.idx);
85
74
  });
86
- (0, import_common2.UseGuards)(
87
- ...gqlMeta.guards.map((guard) => import_nest.guards[guard]),
88
- ...gqlMeta.signalOption.sso ? [(0, import_passport.AuthGuard)(gqlMeta.signalOption.sso)] : []
89
- )(Ctrl.prototype, gqlMeta.key, gqlMeta.descriptor);
75
+ (0, import_common2.UseGuards)(...gqlMeta.signalOption.guards ?? [])(Ctrl.prototype, gqlMeta.key, gqlMeta.descriptor);
90
76
  if (gqlMeta.type === "Query")
91
77
  (0, import_common2.Get)(path)(Ctrl.prototype, gqlMeta.key, gqlMeta.descriptor);
92
78
  else if (gqlMeta.type === "Mutation")
@@ -38,12 +38,7 @@ const convertProcessFunction = (gqlMeta, argMetas, internalArgMetas, fn) => {
38
38
  else
39
39
  throw new Error(`Invalid ArgMeta Type ${argMeta.type}`);
40
40
  });
41
- internalArgMetas.forEach((internalArgMeta) => {
42
- if (internalArgMeta.type === "Job")
43
- args[internalArgMeta.idx] = job;
44
- else
45
- throw new Error(`Invalid InternalArgMeta Type ${internalArgMeta.type}`);
46
- });
41
+ args[argMetas.length] = job;
47
42
  this.logger?.log(`Process-${gqlMeta.key} started`);
48
43
  const result = await fn.apply(this, args);
49
44
  this.logger?.log(`Process-${gqlMeta.key} finished`);
@@ -57,16 +57,6 @@ const getNestReturn = (returns, type = "object") => {
57
57
  const modelRef = scalarNestReturnMap.get(model) ?? (type === "object" ? (0, import_gql.generateGql)(model) : (0, import_gql.generateGqlInput)(model));
58
58
  return () => (0, import_base.arraiedModel)(modelRef, arrDepth);
59
59
  };
60
- const internalArgMap = {
61
- Parent: Nest.Parent,
62
- Account: import_nest.Account,
63
- UserIp: import_nest.UserIp,
64
- Access: import_nest.Access,
65
- Self: import_nest.Self,
66
- Me: import_nest.Me,
67
- Req: import_nest.Req,
68
- Res: import_nest.Res
69
- };
70
60
  const resolverOf = (sigRef, allSrvs) => {
71
61
  const Rsv = (0, import_signal.copySignal)(sigRef);
72
62
  const sigMeta = (0, import_signal.getSigMeta)(Rsv);
@@ -78,9 +68,7 @@ const resolverOf = (sigRef, allSrvs) => {
78
68
  (0, import_common2.Inject)(srvRef)(Rsv.prototype, (0, import_common.lowerlize)(srvName));
79
69
  });
80
70
  for (const gqlMeta of gqlMetas) {
81
- if (gqlMeta.guards.some((guard) => guard === "None") || gqlMeta.signalOption.onlyFor === "restapi" || !["Query", "Mutation"].includes(gqlMeta.type))
82
- continue;
83
- else if (gqlMeta.signalOption.sso)
71
+ if (gqlMeta.signalOption.guards?.some((guard) => guard === import_nest.None) || gqlMeta.signalOption.onlyFor === "restapi" || !["Query", "Mutation"].includes(gqlMeta.type))
84
72
  continue;
85
73
  const [argMetas, internalArgMetas] = (0, import_signal.getArgMetas)(Rsv, gqlMeta.key);
86
74
  const descriptor = gqlMeta.descriptor;
@@ -92,14 +80,10 @@ const resolverOf = (sigRef, allSrvs) => {
92
80
  })(Rsv.prototype, gqlMeta.key, argMeta.idx);
93
81
  }
94
82
  for (const internalArgMeta of internalArgMetas) {
95
- const decorate = internalArgMap[internalArgMeta.type];
83
+ const decorate = (0, import_nest.getNestParamDecorator)(internalArgMeta.type);
96
84
  decorate(internalArgMeta.option ?? {})(Rsv.prototype, gqlMeta.key, internalArgMeta.idx);
97
85
  }
98
- (0, import_common2.UseGuards)(
99
- ...gqlMeta.guards.map((guard) => {
100
- return import_nest.guards[guard];
101
- })
102
- )(Rsv.prototype, gqlMeta.key, descriptor);
86
+ (0, import_common2.UseGuards)(...gqlMeta.signalOption.guards ?? [])(Rsv.prototype, gqlMeta.key, descriptor);
103
87
  if (gqlMeta.type === "Query")
104
88
  Nest.Query(getNestReturn(gqlMeta.returns), gqlMeta.signalOption)(Rsv.prototype, gqlMeta.key, descriptor);
105
89
  else if (gqlMeta.type === "Mutation")
@@ -128,8 +112,9 @@ const resolverOf = (sigRef, allSrvs) => {
128
112
  }
129
113
  for (const resolveFieldMeta of resolveFieldMetas) {
130
114
  const [, internalArgMetas] = (0, import_signal.getArgMetas)(Rsv, resolveFieldMeta.key);
115
+ Nest.Parent()(Rsv.prototype, resolveFieldMeta.key, 0);
131
116
  for (const internalArgMeta of internalArgMetas) {
132
- const decorate = internalArgMap[internalArgMeta.type];
117
+ const decorate = (0, import_nest.getNestParamDecorator)(internalArgMeta.type);
133
118
  decorate(internalArgMeta.option ?? {})(Rsv.prototype, resolveFieldMeta.key, internalArgMeta.idx);
134
119
  }
135
120
  Nest.ResolveField(resolveFieldMeta.key, getNestReturn(resolveFieldMeta.returns))(
package/cjs/src/schema.js CHANGED
@@ -111,7 +111,7 @@ const applyMongoProp = (schemaProps, fieldMeta) => {
111
111
  return (0, import_common.isDayjs)(def) ? def.toDate() : def;
112
112
  };
113
113
  else
114
- prop.default = (0, import_common.isDayjs)(fieldMeta.default) ? fieldMeta.default.toDate() : fieldMeta.default instanceof import_base.Enum ? [...fieldMeta.default.values] : fieldMeta.default;
114
+ prop.default = (0, import_common.isDayjs)(fieldMeta.default) ? fieldMeta.default.toDate() : fieldMeta.default;
115
115
  }
116
116
  if (typeof fieldMeta.immutable !== "undefined")
117
117
  prop.immutable = fieldMeta.immutable;
@@ -37,7 +37,6 @@ var import_signal = require("@akanjs/signal");
37
37
  var import_common2 = require("@nestjs/common");
38
38
  var import_websockets = require("@nestjs/websockets");
39
39
  var import_operators = require("rxjs/operators");
40
- const internalArgMap = { Account: import_nest.Account, UserIp: import_nest.UserIp, Access: import_nest.Access, Self: import_nest.Self, Me: import_nest.Me, Ws: import_nest.Ws };
41
40
  let TransformInterceptor = class {
42
41
  intercept(context, next) {
43
42
  const [, gqlKey] = [context.getArgByIndex(1), context.getArgByIndex(3)];
@@ -90,7 +89,7 @@ const websocketOf = (sigRef, allSrvs) => {
90
89
  (0, import_websockets.MessageBody)(argMeta.name, ...(0, import_nest.getBodyPipes)(argMeta))(WsGateway.prototype, gqlMeta.key, argMeta.idx);
91
90
  });
92
91
  internalArgMetas.forEach((internalArgMeta) => {
93
- const internalDecorator = internalArgMap[internalArgMeta.type];
92
+ const internalDecorator = (0, import_nest.getNestParamDecorator)(internalArgMeta.type);
94
93
  internalDecorator(internalArgMeta.option ?? {})(WsGateway.prototype, gqlMeta.key, internalArgMeta.idx);
95
94
  });
96
95
  (0, import_common2.UseInterceptors)(TransformInterceptor)(WsGateway.prototype, gqlMeta.key, gqlMeta.descriptor);
@@ -107,7 +106,7 @@ const websocketOf = (sigRef, allSrvs) => {
107
106
  (0, import_websockets.MessageBody)(argMeta.name, ...(0, import_nest.getBodyPipes)(argMeta))(WsGateway.prototype, gqlMeta.key, argMeta.idx);
108
107
  });
109
108
  internalArgMetas.forEach((internalArgMeta) => {
110
- const internalDecorator = internalArgMap[internalArgMeta.type];
109
+ const internalDecorator = (0, import_nest.getNestParamDecorator)(internalArgMeta.type);
111
110
  internalDecorator(internalArgMeta.option ?? {})(WsGateway.prototype, gqlMeta.key, internalArgMeta.idx);
112
111
  });
113
112
  (0, import_common2.UseInterceptors)(getPubsubInterceptor(argMetas))(WsGateway.prototype, gqlMeta.key, gqlMeta.descriptor);
package/esm/src/boot.js CHANGED
@@ -25,18 +25,12 @@ import {
25
25
  LoggingInterceptor,
26
26
  RedisIoAdapter,
27
27
  SearchClient,
28
- TimeoutInterceptor,
29
- verifyToken
28
+ TimeoutInterceptor
30
29
  } from "@akanjs/nest";
31
30
  import { client, signalInfo } from "@akanjs/signal";
32
31
  import { ApolloDriver } from "@nestjs/apollo";
33
32
  import { BullModule } from "@nestjs/bull";
34
- import {
35
- Global,
36
- Injectable,
37
- Module,
38
- RequestMethod
39
- } from "@nestjs/common";
33
+ import { Global, Module } from "@nestjs/common";
40
34
  import { NestFactory } from "@nestjs/core";
41
35
  import { GraphQLModule } from "@nestjs/graphql";
42
36
  import { MongooseModule } from "@nestjs/mongoose";
@@ -54,7 +48,14 @@ import { DateScalar } from "./gql";
54
48
  import { useGlobals } from "./module";
55
49
  import { makeScheduleModule } from "./schedule";
56
50
  import { SearchDaemonModule } from "./searchDaemon";
57
- const createNestApp = async ({ registerModules, serverMode = "federation", env, log = true }) => {
51
+ const createNestApp = async ({
52
+ registerModules,
53
+ registerMiddlewares,
54
+ serverMode = "federation",
55
+ env,
56
+ log = true,
57
+ nestOptions = {}
58
+ }) => {
58
59
  const backendLogger = new Logger("Backend");
59
60
  if (log)
60
61
  backendLogger.rawLog(logo);
@@ -77,20 +78,6 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
77
78
  }
78
79
  initMongoDB({ logging: baseEnv.environment !== "main", sendReport: false });
79
80
  events.EventEmitter.defaultMaxListeners = 1e3;
80
- let AuthMiddleWare = class {
81
- use(req, res, next) {
82
- const requestHeader = req;
83
- requestHeader.account = verifyToken(
84
- jwtSecret,
85
- requestHeader.headers.authorization ?? (requestHeader.cookies?.jwt ? `Bearer ${requestHeader.cookies.jwt}` : void 0)
86
- );
87
- requestHeader.userAgent = requestHeader["user-agent"];
88
- next();
89
- }
90
- };
91
- AuthMiddleWare = __decorateClass([
92
- Injectable()
93
- ], AuthMiddleWare);
94
81
  const redisClient = await createClient({ url: redisUri }).connect();
95
82
  let GlobalProvideModule = class {
96
83
  };
@@ -110,9 +97,6 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
110
97
  })
111
98
  ], GlobalProvideModule);
112
99
  let AppModule = class {
113
- configure(consumer) {
114
- consumer.apply(AuthMiddleWare).forRoutes({ path: "*", method: RequestMethod.ALL });
115
- }
116
100
  };
117
101
  AppModule = __decorateClass([
118
102
  Module({
@@ -146,7 +130,7 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
146
130
  providers: [DateScalar]
147
131
  })
148
132
  ], AppModule);
149
- const app = await NestFactory.create(AppModule, { logger: backendLogger });
133
+ const app = await NestFactory.create(AppModule, { logger: backendLogger, ...nestOptions });
150
134
  const redisIoAdapter = new RedisIoAdapter(app, { jwtSecret });
151
135
  await redisIoAdapter.connectToRedis(redisUri);
152
136
  app.enableShutdownHooks();
@@ -171,6 +155,9 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
171
155
  app.useGlobalInterceptors(new TimeoutInterceptor());
172
156
  app.useGlobalInterceptors(new CacheInterceptor(redisClient));
173
157
  app.useGlobalFilters(new AllExceptionsFilter());
158
+ const middlewares = registerMiddlewares(env);
159
+ if (middlewares.length > 0)
160
+ app.use(...middlewares);
174
161
  await app.listen(process.env.PORT ?? env.port ?? 8080);
175
162
  backendLogger.log(`\u{1F680} Server is running on: ${await app.getUrl()}`);
176
163
  } else {
@@ -1,18 +1,6 @@
1
1
  import { getNonArrayModel, Upload } from "@akanjs/base";
2
2
  import { lowerlize } from "@akanjs/common";
3
- import {
4
- Access,
5
- Account,
6
- getBodyPipes,
7
- getQueryPipes,
8
- guards,
9
- Me,
10
- MulterToUploadPipe,
11
- Req,
12
- Res,
13
- Self,
14
- UserIp
15
- } from "@akanjs/nest";
3
+ import { getBodyPipes, getNestParamDecorator, getQueryPipes, MulterToUploadPipe, None } from "@akanjs/nest";
16
4
  import { getServiceRefs, isServiceEnabled } from "@akanjs/service";
17
5
  import {
18
6
  copySignal,
@@ -34,18 +22,7 @@ import {
34
22
  UseGuards,
35
23
  UseInterceptors
36
24
  } from "@nestjs/common";
37
- import { AuthGuard } from "@nestjs/passport";
38
25
  import { FilesInterceptor } from "@nestjs/platform-express";
39
- const internalArgMap = {
40
- // Parent: Nest.Parent,
41
- Account,
42
- UserIp,
43
- Access,
44
- Self,
45
- Me,
46
- Req,
47
- Res
48
- };
49
26
  const processedKeys = /* @__PURE__ */ new Set();
50
27
  const controllerOf = (sigRef, allSrvs) => {
51
28
  const sigMeta = getSigMeta(sigRef);
@@ -59,11 +36,11 @@ const controllerOf = (sigRef, allSrvs) => {
59
36
  Inject(srvRef)(Ctrl.prototype, lowerlize(srvName));
60
37
  });
61
38
  for (const gqlMeta of gqlMetas) {
62
- if (gqlMeta.guards.some((guard) => guard === "None") || gqlMeta.signalOption.onlyFor === "graphql" || !["Query", "Mutation"].includes(gqlMeta.type) || processedKeys.has(gqlMeta.key))
39
+ if (gqlMeta.signalOption.guards?.some((guard) => guard === None) || gqlMeta.signalOption.onlyFor === "graphql" || !["Query", "Mutation"].includes(gqlMeta.type) || processedKeys.has(gqlMeta.key))
63
40
  continue;
64
41
  const [argMetas, internalArgMetas] = getArgMetas(Ctrl, gqlMeta.key);
65
42
  internalArgMetas.forEach((internalArgMeta) => {
66
- const internalDecorator = internalArgMap[internalArgMeta.type];
43
+ const internalDecorator = getNestParamDecorator(internalArgMeta.type);
67
44
  internalDecorator(internalArgMeta.option ?? {})(Ctrl.prototype, gqlMeta.key, internalArgMeta.idx);
68
45
  });
69
46
  const uploadArgMeta = argMetas.find((argMeta) => argMeta.type === "Upload");
@@ -91,10 +68,7 @@ const controllerOf = (sigRef, allSrvs) => {
91
68
  bodyArgMetas.forEach((argMeta) => {
92
69
  Body(argMeta.name, ...getBodyPipes(argMeta))(Ctrl.prototype, gqlMeta.key, argMeta.idx);
93
70
  });
94
- UseGuards(
95
- ...gqlMeta.guards.map((guard) => guards[guard]),
96
- ...gqlMeta.signalOption.sso ? [AuthGuard(gqlMeta.signalOption.sso)] : []
97
- )(Ctrl.prototype, gqlMeta.key, gqlMeta.descriptor);
71
+ UseGuards(...gqlMeta.signalOption.guards ?? [])(Ctrl.prototype, gqlMeta.key, gqlMeta.descriptor);
98
72
  if (gqlMeta.type === "Query")
99
73
  Get(path)(Ctrl.prototype, gqlMeta.key, gqlMeta.descriptor);
100
74
  else if (gqlMeta.type === "Mutation")
@@ -15,12 +15,7 @@ const convertProcessFunction = (gqlMeta, argMetas, internalArgMetas, fn) => {
15
15
  else
16
16
  throw new Error(`Invalid ArgMeta Type ${argMeta.type}`);
17
17
  });
18
- internalArgMetas.forEach((internalArgMeta) => {
19
- if (internalArgMeta.type === "Job")
20
- args[internalArgMeta.idx] = job;
21
- else
22
- throw new Error(`Invalid InternalArgMeta Type ${internalArgMeta.type}`);
23
- });
18
+ args[argMetas.length] = job;
24
19
  this.logger?.log(`Process-${gqlMeta.key} started`);
25
20
  const result = await fn.apply(this, args);
26
21
  this.logger?.log(`Process-${gqlMeta.key} finished`);
@@ -1,7 +1,7 @@
1
1
  import { arraiedModel, Float, getNonArrayModel, ID, Int, JSON, Upload } from "@akanjs/base";
2
2
  import { capitalize, lowerlize } from "@akanjs/common";
3
3
  import { constantInfo, getFieldMetas } from "@akanjs/constant";
4
- import { Access, Account, guards, Me, Req, Res, Self, UserIp } from "@akanjs/nest";
4
+ import { getNestParamDecorator, None } from "@akanjs/nest";
5
5
  import { getServiceRefs, isServiceEnabled } from "@akanjs/service";
6
6
  import {
7
7
  copySignal,
@@ -31,16 +31,6 @@ const getNestReturn = (returns, type = "object") => {
31
31
  const modelRef = scalarNestReturnMap.get(model) ?? (type === "object" ? generateGql(model) : generateGqlInput(model));
32
32
  return () => arraiedModel(modelRef, arrDepth);
33
33
  };
34
- const internalArgMap = {
35
- Parent: Nest.Parent,
36
- Account,
37
- UserIp,
38
- Access,
39
- Self,
40
- Me,
41
- Req,
42
- Res
43
- };
44
34
  const resolverOf = (sigRef, allSrvs) => {
45
35
  const Rsv = copySignal(sigRef);
46
36
  const sigMeta = getSigMeta(Rsv);
@@ -52,9 +42,7 @@ const resolverOf = (sigRef, allSrvs) => {
52
42
  Inject(srvRef)(Rsv.prototype, lowerlize(srvName));
53
43
  });
54
44
  for (const gqlMeta of gqlMetas) {
55
- if (gqlMeta.guards.some((guard) => guard === "None") || gqlMeta.signalOption.onlyFor === "restapi" || !["Query", "Mutation"].includes(gqlMeta.type))
56
- continue;
57
- else if (gqlMeta.signalOption.sso)
45
+ if (gqlMeta.signalOption.guards?.some((guard) => guard === None) || gqlMeta.signalOption.onlyFor === "restapi" || !["Query", "Mutation"].includes(gqlMeta.type))
58
46
  continue;
59
47
  const [argMetas, internalArgMetas] = getArgMetas(Rsv, gqlMeta.key);
60
48
  const descriptor = gqlMeta.descriptor;
@@ -66,14 +54,10 @@ const resolverOf = (sigRef, allSrvs) => {
66
54
  })(Rsv.prototype, gqlMeta.key, argMeta.idx);
67
55
  }
68
56
  for (const internalArgMeta of internalArgMetas) {
69
- const decorate = internalArgMap[internalArgMeta.type];
57
+ const decorate = getNestParamDecorator(internalArgMeta.type);
70
58
  decorate(internalArgMeta.option ?? {})(Rsv.prototype, gqlMeta.key, internalArgMeta.idx);
71
59
  }
72
- UseGuards(
73
- ...gqlMeta.guards.map((guard) => {
74
- return guards[guard];
75
- })
76
- )(Rsv.prototype, gqlMeta.key, descriptor);
60
+ UseGuards(...gqlMeta.signalOption.guards ?? [])(Rsv.prototype, gqlMeta.key, descriptor);
77
61
  if (gqlMeta.type === "Query")
78
62
  Nest.Query(getNestReturn(gqlMeta.returns), gqlMeta.signalOption)(Rsv.prototype, gqlMeta.key, descriptor);
79
63
  else if (gqlMeta.type === "Mutation")
@@ -102,8 +86,9 @@ const resolverOf = (sigRef, allSrvs) => {
102
86
  }
103
87
  for (const resolveFieldMeta of resolveFieldMetas) {
104
88
  const [, internalArgMetas] = getArgMetas(Rsv, resolveFieldMeta.key);
89
+ Nest.Parent()(Rsv.prototype, resolveFieldMeta.key, 0);
105
90
  for (const internalArgMeta of internalArgMetas) {
106
- const decorate = internalArgMap[internalArgMeta.type];
91
+ const decorate = getNestParamDecorator(internalArgMeta.type);
107
92
  decorate(internalArgMeta.option ?? {})(Rsv.prototype, resolveFieldMeta.key, internalArgMeta.idx);
108
93
  }
109
94
  Nest.ResolveField(resolveFieldMeta.key, getNestReturn(resolveFieldMeta.returns))(
package/esm/src/schema.js CHANGED
@@ -2,7 +2,6 @@ import {
2
2
  applyFnToArrayObjects,
3
3
  arraiedModel,
4
4
  dayjs,
5
- Enum,
6
5
  Float,
7
6
  ID,
8
7
  Int,
@@ -96,7 +95,7 @@ const applyMongoProp = (schemaProps, fieldMeta) => {
96
95
  return isDayjs(def) ? def.toDate() : def;
97
96
  };
98
97
  else
99
- prop.default = isDayjs(fieldMeta.default) ? fieldMeta.default.toDate() : fieldMeta.default instanceof Enum ? [...fieldMeta.default.values] : fieldMeta.default;
98
+ prop.default = isDayjs(fieldMeta.default) ? fieldMeta.default.toDate() : fieldMeta.default;
100
99
  }
101
100
  if (typeof fieldMeta.immutable !== "undefined")
102
101
  prop.immutable = fieldMeta.immutable;
@@ -10,13 +10,12 @@ var __decorateClass = (decorators, target, key, kind) => {
10
10
  return result;
11
11
  };
12
12
  import { lowerlize } from "@akanjs/common";
13
- import { Access, Account, getBodyPipes, Me, Self, UserIp, Ws } from "@akanjs/nest";
13
+ import { getBodyPipes, getNestParamDecorator } from "@akanjs/nest";
14
14
  import { getServiceRefs, isServiceEnabled } from "@akanjs/service";
15
15
  import { getArgMetas, getGqlMetas, getSigMeta } from "@akanjs/signal";
16
16
  import { Inject, Injectable, UseInterceptors } from "@nestjs/common";
17
17
  import { MessageBody, SubscribeMessage, WebSocketGateway, WebSocketServer } from "@nestjs/websockets";
18
18
  import { map } from "rxjs/operators";
19
- const internalArgMap = { Account, UserIp, Access, Self, Me, Ws };
20
19
  let TransformInterceptor = class {
21
20
  intercept(context, next) {
22
21
  const [, gqlKey] = [context.getArgByIndex(1), context.getArgByIndex(3)];
@@ -69,7 +68,7 @@ const websocketOf = (sigRef, allSrvs) => {
69
68
  MessageBody(argMeta.name, ...getBodyPipes(argMeta))(WsGateway.prototype, gqlMeta.key, argMeta.idx);
70
69
  });
71
70
  internalArgMetas.forEach((internalArgMeta) => {
72
- const internalDecorator = internalArgMap[internalArgMeta.type];
71
+ const internalDecorator = getNestParamDecorator(internalArgMeta.type);
73
72
  internalDecorator(internalArgMeta.option ?? {})(WsGateway.prototype, gqlMeta.key, internalArgMeta.idx);
74
73
  });
75
74
  UseInterceptors(TransformInterceptor)(WsGateway.prototype, gqlMeta.key, gqlMeta.descriptor);
@@ -86,7 +85,7 @@ const websocketOf = (sigRef, allSrvs) => {
86
85
  MessageBody(argMeta.name, ...getBodyPipes(argMeta))(WsGateway.prototype, gqlMeta.key, argMeta.idx);
87
86
  });
88
87
  internalArgMetas.forEach((internalArgMeta) => {
89
- const internalDecorator = internalArgMap[internalArgMeta.type];
88
+ const internalDecorator = getNestParamDecorator(internalArgMeta.type);
90
89
  internalDecorator(internalArgMeta.option ?? {})(WsGateway.prototype, gqlMeta.key, internalArgMeta.idx);
91
90
  });
92
91
  UseInterceptors(getPubsubInterceptor(argMetas))(WsGateway.prototype, gqlMeta.key, gqlMeta.descriptor);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/server",
3
- "version": "0.9.56",
3
+ "version": "0.9.57",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/src/boot.d.ts CHANGED
@@ -1,16 +1,19 @@
1
1
  import { BackendEnv } from "@akanjs/base";
2
- import { DynamicModule, INestApplication } from "@nestjs/common";
2
+ import { DynamicModule, INestApplication, NestApplicationOptions } from "@nestjs/common";
3
+ import { Middleware } from "./module";
3
4
  interface AppCreateForm {
4
5
  registerModules: (options: any) => (DynamicModule | null)[];
6
+ registerMiddlewares: (options: any) => Middleware[];
5
7
  serverMode?: "federation" | "batch" | "all" | "none";
6
8
  env: BackendEnv;
7
9
  log?: boolean;
10
+ nestOptions?: NestApplicationOptions;
8
11
  }
9
12
  export interface BackendApp {
10
13
  nestApp: INestApplication;
11
14
  close: () => Promise<void>;
12
15
  }
13
- export declare const createNestApp: ({ registerModules, serverMode, env, log }: AppCreateForm) => Promise<{
16
+ export declare const createNestApp: ({ registerModules, registerMiddlewares, serverMode, env, log, nestOptions, }: AppCreateForm) => Promise<{
14
17
  nestApp: INestApplication<any>;
15
18
  close: () => Promise<void>;
16
19
  }>;
package/src/module.d.ts CHANGED
@@ -2,6 +2,7 @@ import type { Type } from "@akanjs/base";
2
2
  import { type ConstantModel } from "@akanjs/constant";
3
3
  import { Database } from "@akanjs/document";
4
4
  import { DynamicModule } from "@nestjs/common";
5
+ import type { NextFunction, Request, Response } from "express";
5
6
  interface DatabaseModuleCreateOptions {
6
7
  constant: ConstantModel<string, any, any, any, any>;
7
8
  database: Database<string, any, any, any, any, any, any, any>;
@@ -37,4 +38,5 @@ interface UseGlobalsCreateOptions {
37
38
  };
38
39
  }
39
40
  export declare const useGlobals: ({ uses, useAsyncs, providers, injects }: UseGlobalsCreateOptions) => DynamicModule;
41
+ export type Middleware = (req: Request, res: Response, next: NextFunction) => void;
40
42
  export {};
@@ -4,4 +4,4 @@ export declare const processorOf: (sigRef: Type, allSrvs: {
4
4
  }) => {
5
5
  new (): {};
6
6
  };
7
- export declare const applyQueueSignal: (targetRef: Type, sigRef: Type) => Type;
7
+ export declare const applyQueueSignal: (targetRef: Type, sigRef: Type) => new (...args: any[]) => any;
@@ -7,7 +7,7 @@ export declare const websocketOf: (sigRef: Type, allSrvs: {
7
7
  [key: string]: Type;
8
8
  }) => {
9
9
  new (): {
10
- __sigRef__: Type;
10
+ __sigRef__: new (...args: any[]) => any;
11
11
  };
12
12
  };
13
13
  export declare const applyWebsocketSignal: (targetRef: Type, sigRef: Type) => Type<{
package/cjs/src/option.js DELETED
File without changes
package/esm/src/option.js DELETED
File without changes
package/src/option.d.ts DELETED
File without changes