@akanjs/server 0.0.99 → 0.0.100

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/index.js CHANGED
@@ -1 +1,21 @@
1
- export * from "./src";
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
14
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
15
+ var server_exports = {};
16
+ module.exports = __toCommonJS(server_exports);
17
+ __reExport(server_exports, require("./src"), module.exports);
18
+ // Annotate the CommonJS export names for ESM import in node:
19
+ 0 && (module.exports = {
20
+ ...require("./src")
21
+ });
package/index.mjs ADDED
@@ -0,0 +1 @@
1
+ export * from "./src";
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@akanjs/server",
3
- "version": "0.0.99",
4
- "type": "module",
3
+ "version": "0.0.100",
4
+ "type": "commonjs",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -41,8 +41,8 @@
41
41
  },
42
42
  "exports": {
43
43
  ".": {
44
- "require": "./index.cjs",
45
- "import": "./index.js"
44
+ "require": "./index.js",
45
+ "import": "./index.mjs"
46
46
  }
47
47
  },
48
48
  "esbuild": {
package/src/boot.js CHANGED
@@ -1,5 +1,30 @@
1
+ var __create = Object.create;
1
2
  var __defProp = Object.defineProperty;
2
3
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
3
28
  var __decorateClass = (decorators, target, key, kind) => {
4
29
  var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
30
  for (var i = decorators.length - 1, decorator; i >= 0; i--)
@@ -9,74 +34,58 @@ var __decorateClass = (decorators, target, key, kind) => {
9
34
  __defProp(target, key, result);
10
35
  return result;
11
36
  };
12
- import { baseEnv, logo } from "@akanjs/base";
13
- import { Logger } from "@akanjs/common";
14
- import {
15
- AllExceptionsFilter,
16
- CacheClient,
17
- CacheInterceptor,
18
- DatabaseClient,
19
- generateJwtSecret,
20
- generateMeiliKey,
21
- generateMeiliUri,
22
- generateMongoUri,
23
- generateRedisUri,
24
- initMongoDB,
25
- LoggingInterceptor,
26
- RedisIoAdapter,
27
- SearchClient,
28
- TimeoutInterceptor,
29
- verifyToken
30
- } from "@akanjs/nest";
31
- import { client } from "@akanjs/signal";
32
- import { ApolloDriver } from "@nestjs/apollo";
33
- import { BullModule } from "@nestjs/bull";
34
- import {
35
- Global,
36
- Injectable,
37
- Module,
38
- RequestMethod
39
- } from "@nestjs/common";
40
- import { NestFactory } from "@nestjs/core";
41
- import { GraphQLModule } from "@nestjs/graphql";
42
- import { MongooseModule } from "@nestjs/mongoose";
43
- import { ScheduleModule } from "@nestjs/schedule";
44
- import { json, urlencoded } from "body-parser";
45
- import cookieParser from "cookie-parser";
46
- import dgram from "dgram";
47
- import events from "events";
48
- import { graphqlUploadExpress } from "graphql-upload";
49
- import { MeiliSearch } from "meilisearch";
50
- import { createClient } from "redis";
51
- import { DateScalar } from "./gql";
52
- import { useGlobals } from "./module";
53
- import { SearchDaemonModule } from "./searchDaemon";
37
+ var boot_exports = {};
38
+ __export(boot_exports, {
39
+ createNestApp: () => createNestApp
40
+ });
41
+ module.exports = __toCommonJS(boot_exports);
42
+ var import_base = require("@akanjs/base");
43
+ var import_common = require("@akanjs/common");
44
+ var import_nest = require("@akanjs/nest");
45
+ var import_signal = require("@akanjs/signal");
46
+ var import_apollo = require("@nestjs/apollo");
47
+ var import_bull = require("@nestjs/bull");
48
+ var import_common2 = require("@nestjs/common");
49
+ var import_core = require("@nestjs/core");
50
+ var import_graphql = require("@nestjs/graphql");
51
+ var import_mongoose = require("@nestjs/mongoose");
52
+ var import_schedule = require("@nestjs/schedule");
53
+ var import_body_parser = require("body-parser");
54
+ var import_cookie_parser = __toESM(require("cookie-parser"));
55
+ var import_dgram = __toESM(require("dgram"));
56
+ var import_events = __toESM(require("events"));
57
+ var import_graphql_upload = require("graphql-upload");
58
+ var import_meilisearch = require("meilisearch");
59
+ var import_redis = require("redis");
60
+ var import_gql = require("./gql");
61
+ var import_module = require("./module");
62
+ var import_searchDaemon = require("./searchDaemon");
54
63
  const createNestApp = async ({ registerModules, serverMode = "federation", env, log = true }) => {
55
- const backendLogger = new Logger("Backend");
64
+ const backendLogger = new import_common.Logger("Backend");
56
65
  if (log)
57
- backendLogger.rawLog(logo);
58
- const jwtSecret = generateJwtSecret(env.appName, env.environment);
66
+ backendLogger.rawLog(import_base.logo);
67
+ const jwtSecret = (0, import_nest.generateJwtSecret)(env.appName, env.environment);
59
68
  const [redisUri, mongoUri, meiliUri] = await Promise.all([
60
- env.redisUri ?? generateRedisUri({ ...env, ...env.redis?.sshOptions ? { sshOptions: env.redis.sshOptions } : {} }),
61
- env.mongoUri ?? generateMongoUri({
69
+ env.redisUri ?? (0, import_nest.generateRedisUri)({ ...env, ...env.redis?.sshOptions ? { sshOptions: env.redis.sshOptions } : {} }),
70
+ env.mongoUri ?? (0, import_nest.generateMongoUri)({
62
71
  ...env,
63
72
  ...env.mongo.username ? { username: env.mongo.username } : {},
64
73
  password: env.mongo.password,
65
74
  ...env.mongo.sshOptions ? { sshOptions: env.mongo.sshOptions } : {}
66
75
  }),
67
- env.meiliUri ?? generateMeiliUri(env)
76
+ env.meiliUri ?? (0, import_nest.generateMeiliUri)(env)
68
77
  ]);
69
78
  if (env.operationMode === "local") {
70
79
  backendLogger.verbose(`connect to redis: ${redisUri}`);
71
80
  backendLogger.verbose(`connect to mongo: ${mongoUri}`);
72
81
  backendLogger.verbose(`connect to meili: ${meiliUri}`);
73
82
  }
74
- initMongoDB({ logging: baseEnv.environment !== "main", sendReport: false });
75
- events.EventEmitter.defaultMaxListeners = 1e3;
83
+ (0, import_nest.initMongoDB)({ logging: import_base.baseEnv.environment !== "main", sendReport: false });
84
+ import_events.default.EventEmitter.defaultMaxListeners = 1e3;
76
85
  let AuthMiddleWare = class {
77
86
  use(req, res, next) {
78
87
  const requestHeader = req;
79
- requestHeader.account = verifyToken(
88
+ requestHeader.account = (0, import_nest.verifyToken)(
80
89
  jwtSecret,
81
90
  requestHeader.headers.authorization ?? (requestHeader.cookies?.jwt ? `Bearer ${requestHeader.cookies.jwt}` : void 0)
82
91
  );
@@ -85,19 +94,19 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
85
94
  }
86
95
  };
87
96
  AuthMiddleWare = __decorateClass([
88
- Injectable()
97
+ (0, import_common2.Injectable)()
89
98
  ], AuthMiddleWare);
90
- const redisClient = await createClient({ url: redisUri }).connect();
99
+ const redisClient = await (0, import_redis.createClient)({ url: redisUri }).connect();
91
100
  let SubDatabaseModule = class {
92
101
  };
93
102
  SubDatabaseModule = __decorateClass([
94
- Global(),
95
- Module({
103
+ (0, import_common2.Global)(),
104
+ (0, import_common2.Module)({
96
105
  providers: [
97
106
  { provide: "REDIS_CLIENT", useValue: redisClient },
98
107
  {
99
108
  provide: "MEILI_CLIENT",
100
- useFactory: () => new MeiliSearch({ host: meiliUri, apiKey: generateMeiliKey(env) })
109
+ useFactory: () => new import_meilisearch.MeiliSearch({ host: meiliUri, apiKey: (0, import_nest.generateMeiliKey)(env) })
101
110
  }
102
111
  ],
103
112
  exports: ["REDIS_CLIENT", "MEILI_CLIENT"]
@@ -105,46 +114,46 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
105
114
  ], SubDatabaseModule);
106
115
  let AppModule = class {
107
116
  configure(consumer) {
108
- consumer.apply(AuthMiddleWare).forRoutes({ path: "*", method: RequestMethod.ALL });
117
+ consumer.apply(AuthMiddleWare).forRoutes({ path: "*", method: import_common2.RequestMethod.ALL });
109
118
  }
110
119
  };
111
120
  AppModule = __decorateClass([
112
- Module({
121
+ (0, import_common2.Module)({
113
122
  imports: [
114
- BullModule.forRoot({ redis: redisUri }),
115
- ScheduleModule.forRoot(),
116
- GraphQLModule.forRootAsync({
123
+ import_bull.BullModule.forRoot({ redis: redisUri }),
124
+ import_schedule.ScheduleModule.forRoot(),
125
+ import_graphql.GraphQLModule.forRootAsync({
117
126
  imports: [],
118
127
  useFactory: () => ({
119
128
  useGlobalPrefix: true,
120
129
  autoSchemaFile: true,
121
130
  sortSchema: true,
122
- playground: baseEnv.environment !== "main",
123
- introspection: baseEnv.environment !== "main",
131
+ playground: import_base.baseEnv.environment !== "main",
132
+ introspection: import_base.baseEnv.environment !== "main",
124
133
  uploads: false,
125
134
  debug: false
126
135
  }),
127
- driver: ApolloDriver
136
+ driver: import_apollo.ApolloDriver
128
137
  }),
129
- MongooseModule.forRootAsync({
130
- useFactory: () => ({ uri: mongoUri, autoIndex: baseEnv.environment !== "main" })
138
+ import_mongoose.MongooseModule.forRootAsync({
139
+ useFactory: () => ({ uri: mongoUri, autoIndex: import_base.baseEnv.environment !== "main" })
131
140
  }),
132
141
  SubDatabaseModule,
133
- useGlobals({
134
- injects: { SearchClient, DatabaseClient, CacheClient }
142
+ (0, import_module.useGlobals)({
143
+ injects: { SearchClient: import_nest.SearchClient, DatabaseClient: import_nest.DatabaseClient, CacheClient: import_nest.CacheClient }
135
144
  }),
136
- ...["batch", "all"].includes(serverMode) && baseEnv.operationMode !== "edge" ? [SearchDaemonModule] : [],
145
+ ...["batch", "all"].includes(serverMode) && import_base.baseEnv.operationMode !== "edge" ? [import_searchDaemon.SearchDaemonModule] : [],
137
146
  ...registerModules(env).filter((m) => !!m)
138
147
  ],
139
- providers: [DateScalar]
148
+ providers: [import_gql.DateScalar]
140
149
  })
141
150
  ], AppModule);
142
- const app = await NestFactory.create(AppModule, { logger: backendLogger });
143
- const redisIoAdapter = new RedisIoAdapter(app, { jwtSecret });
151
+ const app = await import_core.NestFactory.create(AppModule, { logger: backendLogger });
152
+ const redisIoAdapter = new import_nest.RedisIoAdapter(app, { jwtSecret });
144
153
  await redisIoAdapter.connectToRedis(redisUri);
145
154
  app.enableShutdownHooks();
146
- const udp = dgram.createSocket("udp4");
147
- client.setUdp(udp);
155
+ const udp = import_dgram.default.createSocket("udp4");
156
+ import_signal.client.setUdp(udp);
148
157
  if (["federation", "all"].includes(serverMode)) {
149
158
  app.setGlobalPrefix(process.env.GLOBAL_PREFIX ?? "/backend");
150
159
  app.enableCors({
@@ -156,14 +165,14 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
156
165
  });
157
166
  if (env.operationMode !== "local" && process.env.USE_REDIS_IO_ADAPTER !== "false")
158
167
  app.useWebSocketAdapter(redisIoAdapter);
159
- app.use(json({ limit: "100mb" }));
160
- app.use(urlencoded({ limit: "100mb", extended: true }));
161
- app.use("/backend/graphql", graphqlUploadExpress());
162
- app.use(cookieParser());
163
- app.useGlobalInterceptors(new LoggingInterceptor());
164
- app.useGlobalInterceptors(new TimeoutInterceptor());
165
- app.useGlobalInterceptors(new CacheInterceptor(redisClient));
166
- app.useGlobalFilters(new AllExceptionsFilter());
168
+ app.use((0, import_body_parser.json)({ limit: "100mb" }));
169
+ app.use((0, import_body_parser.urlencoded)({ limit: "100mb", extended: true }));
170
+ app.use("/backend/graphql", (0, import_graphql_upload.graphqlUploadExpress)());
171
+ app.use((0, import_cookie_parser.default)());
172
+ app.useGlobalInterceptors(new import_nest.LoggingInterceptor());
173
+ app.useGlobalInterceptors(new import_nest.TimeoutInterceptor());
174
+ app.useGlobalInterceptors(new import_nest.CacheInterceptor(redisClient));
175
+ app.useGlobalFilters(new import_nest.AllExceptionsFilter());
167
176
  await app.listen(process.env.PORT ?? env.port ?? 8080);
168
177
  backendLogger.log(`\u{1F680} Server is running on: ${await app.getUrl()}`);
169
178
  } else {
@@ -185,6 +194,7 @@ const createNestApp = async ({ registerModules, serverMode = "federation", env,
185
194
  }
186
195
  };
187
196
  };
188
- export {
197
+ // Annotate the CommonJS export names for ESM import in node:
198
+ 0 && (module.exports = {
189
199
  createNestApp
190
- };
200
+ });
package/src/boot.mjs ADDED
@@ -0,0 +1,190 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __decorateClass = (decorators, target, key, kind) => {
4
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
5
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
6
+ if (decorator = decorators[i])
7
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
8
+ if (kind && result)
9
+ __defProp(target, key, result);
10
+ return result;
11
+ };
12
+ import { baseEnv, logo } from "@akanjs/base";
13
+ import { Logger } from "@akanjs/common";
14
+ import {
15
+ AllExceptionsFilter,
16
+ CacheClient,
17
+ CacheInterceptor,
18
+ DatabaseClient,
19
+ generateJwtSecret,
20
+ generateMeiliKey,
21
+ generateMeiliUri,
22
+ generateMongoUri,
23
+ generateRedisUri,
24
+ initMongoDB,
25
+ LoggingInterceptor,
26
+ RedisIoAdapter,
27
+ SearchClient,
28
+ TimeoutInterceptor,
29
+ verifyToken
30
+ } from "@akanjs/nest";
31
+ import { client } from "@akanjs/signal";
32
+ import { ApolloDriver } from "@nestjs/apollo";
33
+ import { BullModule } from "@nestjs/bull";
34
+ import {
35
+ Global,
36
+ Injectable,
37
+ Module,
38
+ RequestMethod
39
+ } from "@nestjs/common";
40
+ import { NestFactory } from "@nestjs/core";
41
+ import { GraphQLModule } from "@nestjs/graphql";
42
+ import { MongooseModule } from "@nestjs/mongoose";
43
+ import { ScheduleModule } from "@nestjs/schedule";
44
+ import { json, urlencoded } from "body-parser";
45
+ import cookieParser from "cookie-parser";
46
+ import dgram from "dgram";
47
+ import events from "events";
48
+ import { graphqlUploadExpress } from "graphql-upload";
49
+ import { MeiliSearch } from "meilisearch";
50
+ import { createClient } from "redis";
51
+ import { DateScalar } from "./gql";
52
+ import { useGlobals } from "./module";
53
+ import { SearchDaemonModule } from "./searchDaemon";
54
+ const createNestApp = async ({ registerModules, serverMode = "federation", env, log = true }) => {
55
+ const backendLogger = new Logger("Backend");
56
+ if (log)
57
+ backendLogger.rawLog(logo);
58
+ const jwtSecret = generateJwtSecret(env.appName, env.environment);
59
+ const [redisUri, mongoUri, meiliUri] = await Promise.all([
60
+ env.redisUri ?? generateRedisUri({ ...env, ...env.redis?.sshOptions ? { sshOptions: env.redis.sshOptions } : {} }),
61
+ env.mongoUri ?? generateMongoUri({
62
+ ...env,
63
+ ...env.mongo.username ? { username: env.mongo.username } : {},
64
+ password: env.mongo.password,
65
+ ...env.mongo.sshOptions ? { sshOptions: env.mongo.sshOptions } : {}
66
+ }),
67
+ env.meiliUri ?? generateMeiliUri(env)
68
+ ]);
69
+ if (env.operationMode === "local") {
70
+ backendLogger.verbose(`connect to redis: ${redisUri}`);
71
+ backendLogger.verbose(`connect to mongo: ${mongoUri}`);
72
+ backendLogger.verbose(`connect to meili: ${meiliUri}`);
73
+ }
74
+ initMongoDB({ logging: baseEnv.environment !== "main", sendReport: false });
75
+ events.EventEmitter.defaultMaxListeners = 1e3;
76
+ let AuthMiddleWare = class {
77
+ use(req, res, next) {
78
+ const requestHeader = req;
79
+ requestHeader.account = verifyToken(
80
+ jwtSecret,
81
+ requestHeader.headers.authorization ?? (requestHeader.cookies?.jwt ? `Bearer ${requestHeader.cookies.jwt}` : void 0)
82
+ );
83
+ requestHeader.userAgent = requestHeader["user-agent"];
84
+ next();
85
+ }
86
+ };
87
+ AuthMiddleWare = __decorateClass([
88
+ Injectable()
89
+ ], AuthMiddleWare);
90
+ const redisClient = await createClient({ url: redisUri }).connect();
91
+ let SubDatabaseModule = class {
92
+ };
93
+ SubDatabaseModule = __decorateClass([
94
+ Global(),
95
+ Module({
96
+ providers: [
97
+ { provide: "REDIS_CLIENT", useValue: redisClient },
98
+ {
99
+ provide: "MEILI_CLIENT",
100
+ useFactory: () => new MeiliSearch({ host: meiliUri, apiKey: generateMeiliKey(env) })
101
+ }
102
+ ],
103
+ exports: ["REDIS_CLIENT", "MEILI_CLIENT"]
104
+ })
105
+ ], SubDatabaseModule);
106
+ let AppModule = class {
107
+ configure(consumer) {
108
+ consumer.apply(AuthMiddleWare).forRoutes({ path: "*", method: RequestMethod.ALL });
109
+ }
110
+ };
111
+ AppModule = __decorateClass([
112
+ Module({
113
+ imports: [
114
+ BullModule.forRoot({ redis: redisUri }),
115
+ ScheduleModule.forRoot(),
116
+ GraphQLModule.forRootAsync({
117
+ imports: [],
118
+ useFactory: () => ({
119
+ useGlobalPrefix: true,
120
+ autoSchemaFile: true,
121
+ sortSchema: true,
122
+ playground: baseEnv.environment !== "main",
123
+ introspection: baseEnv.environment !== "main",
124
+ uploads: false,
125
+ debug: false
126
+ }),
127
+ driver: ApolloDriver
128
+ }),
129
+ MongooseModule.forRootAsync({
130
+ useFactory: () => ({ uri: mongoUri, autoIndex: baseEnv.environment !== "main" })
131
+ }),
132
+ SubDatabaseModule,
133
+ useGlobals({
134
+ injects: { SearchClient, DatabaseClient, CacheClient }
135
+ }),
136
+ ...["batch", "all"].includes(serverMode) && baseEnv.operationMode !== "edge" ? [SearchDaemonModule] : [],
137
+ ...registerModules(env).filter((m) => !!m)
138
+ ],
139
+ providers: [DateScalar]
140
+ })
141
+ ], AppModule);
142
+ const app = await NestFactory.create(AppModule, { logger: backendLogger });
143
+ const redisIoAdapter = new RedisIoAdapter(app, { jwtSecret });
144
+ await redisIoAdapter.connectToRedis(redisUri);
145
+ app.enableShutdownHooks();
146
+ const udp = dgram.createSocket("udp4");
147
+ client.setUdp(udp);
148
+ if (["federation", "all"].includes(serverMode)) {
149
+ app.setGlobalPrefix(process.env.GLOBAL_PREFIX ?? "/backend");
150
+ app.enableCors({
151
+ origin: "*",
152
+ methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
153
+ preflightContinue: false,
154
+ optionsSuccessStatus: 204,
155
+ allowedHeaders: "DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization,apollo-require-preflight"
156
+ });
157
+ if (env.operationMode !== "local" && process.env.USE_REDIS_IO_ADAPTER !== "false")
158
+ app.useWebSocketAdapter(redisIoAdapter);
159
+ app.use(json({ limit: "100mb" }));
160
+ app.use(urlencoded({ limit: "100mb", extended: true }));
161
+ app.use("/backend/graphql", graphqlUploadExpress());
162
+ app.use(cookieParser());
163
+ app.useGlobalInterceptors(new LoggingInterceptor());
164
+ app.useGlobalInterceptors(new TimeoutInterceptor());
165
+ app.useGlobalInterceptors(new CacheInterceptor(redisClient));
166
+ app.useGlobalFilters(new AllExceptionsFilter());
167
+ await app.listen(process.env.PORT ?? env.port ?? 8080);
168
+ backendLogger.log(`\u{1F680} Server is running on: ${await app.getUrl()}`);
169
+ } else {
170
+ await app.init();
171
+ backendLogger.log(`\u{1F680} Batch Server is running`);
172
+ }
173
+ if (module.hot) {
174
+ module.hot.accept();
175
+ module.hot.dispose(() => {
176
+ void app.close();
177
+ });
178
+ }
179
+ return {
180
+ nestApp: app,
181
+ close: async () => {
182
+ await app.close();
183
+ await redisIoAdapter.destroy();
184
+ await redisClient.quit();
185
+ }
186
+ };
187
+ };
188
+ export {
189
+ createNestApp
190
+ };