@akanjs/server 0.9.55 → 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 +12 -19
- package/cjs/src/controller.js +3 -17
- package/cjs/src/processor.js +1 -6
- package/cjs/src/resolver.js +5 -20
- package/cjs/src/schema.js +1 -1
- package/cjs/src/websocket.js +2 -3
- package/esm/src/boot.js +14 -27
- package/esm/src/controller.js +4 -30
- package/esm/src/processor.js +1 -6
- package/esm/src/resolver.js +6 -21
- package/esm/src/schema.js +1 -2
- package/esm/src/websocket.js +3 -4
- package/package.json +1 -1
- package/src/boot.d.ts +5 -2
- package/src/module.d.ts +2 -0
- package/src/processor.d.ts +1 -1
- package/src/websocket.d.ts +1 -1
- package/cjs/src/option.js +0 -0
- package/esm/src/option.js +0 -0
- package/src/option.d.ts +0 -0
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 ({
|
|
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 {
|
package/cjs/src/controller.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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")
|
package/cjs/src/processor.js
CHANGED
|
@@ -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
|
-
|
|
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`);
|
package/cjs/src/resolver.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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 =
|
|
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
|
|
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;
|
package/cjs/src/websocket.js
CHANGED
|
@@ -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 =
|
|
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 =
|
|
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 ({
|
|
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 {
|
package/esm/src/controller.js
CHANGED
|
@@ -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
|
|
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 =
|
|
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")
|
package/esm/src/processor.js
CHANGED
|
@@ -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
|
-
|
|
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`);
|
package/esm/src/resolver.js
CHANGED
|
@@ -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 {
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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;
|
package/esm/src/websocket.js
CHANGED
|
@@ -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 {
|
|
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 =
|
|
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 =
|
|
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
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 {};
|
package/src/processor.d.ts
CHANGED
|
@@ -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) =>
|
|
7
|
+
export declare const applyQueueSignal: (targetRef: Type, sigRef: Type) => new (...args: any[]) => any;
|
package/src/websocket.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ export declare const websocketOf: (sigRef: Type, allSrvs: {
|
|
|
7
7
|
[key: string]: Type;
|
|
8
8
|
}) => {
|
|
9
9
|
new (): {
|
|
10
|
-
__sigRef__:
|
|
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
|