@common-stack/server-stack 5.0.6-alpha.1 → 6.0.1-alpha.1
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/lib/MainStackServer.cjs +2 -2
- package/lib/MainStackServer.cjs.map +1 -1
- package/lib/MainStackServer.mjs +2 -2
- package/lib/MainStackServer.mjs.map +1 -1
- package/lib/api/root-schema.graphqls.cjs +1 -1
- package/lib/api/root-schema.graphqls.mjs +1 -1
- package/lib/api/schema-builder.cjs.map +1 -1
- package/lib/api/schema-builder.mjs.map +1 -1
- package/lib/connectors/connection-broker.cjs +1 -1
- package/lib/connectors/connection-broker.cjs.map +1 -1
- package/lib/connectors/connection-broker.d.ts +1 -1
- package/lib/connectors/connection-broker.mjs +1 -1
- package/lib/connectors/connection-broker.mjs.map +1 -1
- package/lib/connectors/redis-connector.cjs +35 -13
- package/lib/connectors/redis-connector.cjs.map +1 -1
- package/lib/connectors/redis-connector.d.ts +5 -6
- package/lib/connectors/redis-connector.mjs +35 -13
- package/lib/connectors/redis-connector.mjs.map +1 -1
- package/lib/plugins/invalidateCachePlugin.cjs +24 -27
- package/lib/plugins/invalidateCachePlugin.cjs.map +1 -1
- package/lib/plugins/invalidateCachePlugin.d.ts +3 -4
- package/lib/plugins/invalidateCachePlugin.mjs +24 -27
- package/lib/plugins/invalidateCachePlugin.mjs.map +1 -1
- package/lib/servers/GraphqlServer.cjs +44 -55
- package/lib/servers/GraphqlServer.cjs.map +1 -1
- package/lib/servers/GraphqlServer.d.ts +3 -3
- package/lib/servers/GraphqlServer.mjs +42 -53
- package/lib/servers/GraphqlServer.mjs.map +1 -1
- package/lib/servers/GraphqlWs.cjs.map +1 -1
- package/lib/servers/GraphqlWs.d.ts +3 -3
- package/lib/servers/GraphqlWs.mjs.map +1 -1
- package/lib/servers/WebsocketMultipathUpdate.cjs.map +1 -1
- package/lib/servers/WebsocketMultipathUpdate.d.ts +3 -3
- package/lib/servers/WebsocketMultipathUpdate.mjs.map +1 -1
- package/lib/servers/utils.d.ts +2 -2
- package/package.json +6 -13
|
@@ -1,29 +1,26 @@
|
|
|
1
|
-
const invalidateCachePlugin = ({ cache }) => {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (hasErrors || !queriesToInvalidate?.length || !isMutation) {
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
// this to get the
|
|
15
|
-
const redisClient = cache?.client;
|
|
16
|
-
const nestedKeys = await Promise.all(queriesToInvalidate.map((query) => redisClient.keys(`keyv:fqc:${query}:*`)));
|
|
17
|
-
const keys = nestedKeys.flat();
|
|
18
|
-
await redisClient.del(keys);
|
|
19
|
-
}
|
|
20
|
-
catch (e) {
|
|
21
|
-
requestContext.logger.error('Error occurred in invalidateCachePlugin');
|
|
22
|
-
requestContext.logger.error(e);
|
|
1
|
+
const invalidateCachePlugin = ({ cache }) => ({
|
|
2
|
+
requestDidStart(requestContext) {
|
|
3
|
+
return {
|
|
4
|
+
async willSendResponse(responseContext) {
|
|
5
|
+
try {
|
|
6
|
+
const hasErrors = !!requestContext.errors?.length;
|
|
7
|
+
const { queriesToInvalidate } = requestContext.contextValue;
|
|
8
|
+
const [{ operation }] = responseContext.document.definitions;
|
|
9
|
+
const isMutation = operation === 'mutation';
|
|
10
|
+
if (hasErrors || !queriesToInvalidate?.length || !isMutation) {
|
|
23
11
|
return;
|
|
24
12
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
13
|
+
// this to get the
|
|
14
|
+
const redisClient = cache?.client;
|
|
15
|
+
const nestedKeys = await Promise.all(queriesToInvalidate.map((query) => redisClient.keys(`keyv:fqc:${query}:*`)));
|
|
16
|
+
const keys = nestedKeys.flat();
|
|
17
|
+
await redisClient.del(keys);
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
requestContext.logger.error('Error occurred in invalidateCachePlugin');
|
|
21
|
+
requestContext.logger.error(e);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
});export{invalidateCachePlugin};//# sourceMappingURL=invalidateCachePlugin.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invalidateCachePlugin.mjs","sources":["../../src/plugins/invalidateCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"invalidateCachePlugin.mjs","sources":["../../src/plugins/invalidateCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"AAKa,MAAA,qBAAqB,GAAG,CAAC,EAAE,KAAK,EAAa,MACrD;AACG,IAAA,eAAe,CAAC,cAAc,EAAA;QAC1B,OAAO;YACH,MAAM,gBAAgB,CAAC,eAAe,EAAA;AAClC,gBAAA,IAAI;oBACA,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;AAClD,oBAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,cAAc,CAAC,YAAY,CAAC;oBAC5D,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,WAAwC,CAAC;AAC1F,oBAAA,MAAM,UAAU,GAAG,SAAS,KAAK,UAAU,CAAC;oBAC5C,IAAI,SAAS,IAAI,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;wBAC1D,OAAO;qBACV;;AAED,oBAAA,MAAM,WAAW,GAAG,KAAK,EAAE,MAAe,CAAC;oBAC3C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAChC,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,CAAY,SAAA,EAAA,KAAK,CAAI,EAAA,CAAA,CAAC,CAAC,CAC9E,CAAC;AACF,oBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;AAC/B,oBAAA,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;iBAC/B;gBAAC,OAAO,CAAC,EAAE;AACR,oBAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AACvE,oBAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAClC;aACJ;SACJ,CAAC;KACL;AACJ,CAAA"}
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
'use strict';var
|
|
2
|
-
|
|
3
|
-
if ((process.env.LOG_LEVEL && process.env.LOG_LEVEL === 'trace') || process.env.LOG_LEVEL === 'debug') {
|
|
4
|
-
debug = true;
|
|
5
|
-
}
|
|
1
|
+
'use strict';var server=require('@apollo/server'),ws$1=require('graphql-ws/lib/use/ws'),express4=require('@apollo/server/express4'),cacheControl=require('@apollo/server/plugin/cacheControl'),drainHttpServer=require('@apollo/server/plugin/drainHttpServer'),cachePlugin=require('@apollo/server-plugin-response-cache');require('isomorphic-fetch');var express=require('express'),cors=require('cors'),Keyv=require('keyv'),KeyvRedis=require('@keyv/redis'),utils_keyvadapter=require('@apollo/utils.keyvadapter'),ws=require('ws'),invalidateCachePlugin=require('../plugins/invalidateCachePlugin.cjs'),GraphqlWs=require('./GraphqlWs.cjs'),envConfig=require('../config/env-config.cjs');const responseCachePlugin = cachePlugin.default ?? cachePlugin;
|
|
2
|
+
if ((process.env.LOG_LEVEL && process.env.LOG_LEVEL === 'trace') || process.env.LOG_LEVEL === 'debug') ;
|
|
6
3
|
// @workaround as the `dataSources` not available in Subscription (websocket) Context.
|
|
7
4
|
// https://github.com/apollographql/apollo-server/issues/1526 need to revisit in Apollo-Server v3.
|
|
8
5
|
const constructDataSourcesForSubscriptions = (context, cache, dataSources) => {
|
|
9
|
-
const
|
|
6
|
+
const initializeDataSource = (instance) => {
|
|
10
7
|
instance.initialize({ context, cache });
|
|
11
8
|
};
|
|
12
|
-
// tslint:disable-next-line:forin
|
|
13
|
-
// eslint-disable-next-line guard-for-in
|
|
14
9
|
for (const prop in dataSources) {
|
|
15
|
-
|
|
10
|
+
initializeDataSource(dataSources[prop]);
|
|
16
11
|
}
|
|
17
12
|
return dataSources;
|
|
18
13
|
};
|
|
@@ -20,14 +15,14 @@ let wsServerCleanup;
|
|
|
20
15
|
class GraphqlServer {
|
|
21
16
|
app;
|
|
22
17
|
httpServer;
|
|
23
|
-
|
|
18
|
+
redisClient;
|
|
24
19
|
moduleService;
|
|
25
20
|
enableSubscription;
|
|
26
21
|
logger;
|
|
27
|
-
constructor(app, httpServer,
|
|
22
|
+
constructor(app, httpServer, redisClient, moduleService, enableSubscription = true) {
|
|
28
23
|
this.app = app;
|
|
29
24
|
this.httpServer = httpServer;
|
|
30
|
-
this.
|
|
25
|
+
this.redisClient = redisClient;
|
|
31
26
|
this.moduleService = moduleService;
|
|
32
27
|
this.enableSubscription = enableSubscription;
|
|
33
28
|
this.logger = this.moduleService.logger.child({ className: 'GraphqlServer' });
|
|
@@ -36,8 +31,8 @@ class GraphqlServer {
|
|
|
36
31
|
server: this.httpServer,
|
|
37
32
|
path: envConfig.config.GRAPHQL_ENDPOINT,
|
|
38
33
|
});
|
|
39
|
-
|
|
40
|
-
wsServerCleanup =
|
|
34
|
+
new GraphqlWs.GraphqlWs(wsServer, this.moduleService, this.redisClient);
|
|
35
|
+
wsServerCleanup = ws$1.useServer({ schema: this.moduleService.schema }, wsServer);
|
|
41
36
|
}
|
|
42
37
|
}
|
|
43
38
|
async initialize() {
|
|
@@ -48,50 +43,22 @@ class GraphqlServer {
|
|
|
48
43
|
origin: [envConfig.config.CLIENT_URL],
|
|
49
44
|
credentials: true,
|
|
50
45
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
cors: corsOptions,
|
|
54
|
-
path: envConfig.config.GRAPHQL_ENDPOINT,
|
|
55
|
-
});
|
|
56
|
-
this.logger.info('GraphqlServer initialized - ', envConfig.config.CLIENT_URL);
|
|
57
|
-
}
|
|
58
|
-
getUserIpAddress(req) {
|
|
59
|
-
let ip = (req?.headers['x-forwarded-for'] || '').split(',')[0] || req?.connection?.remoteAddress;
|
|
60
|
-
if (ip.substr(0, 7) === '::ffff:') {
|
|
61
|
-
ip = ip.substr(7);
|
|
62
|
-
}
|
|
63
|
-
if (ip === '::1') {
|
|
64
|
-
ip = '127.0.0.1';
|
|
65
|
-
}
|
|
66
|
-
return ip;
|
|
67
|
-
}
|
|
68
|
-
configureApolloServer() {
|
|
69
|
-
this.logger.info('-- Configuring Apollo Server --');
|
|
70
|
-
// @ts-ignore
|
|
71
|
-
const cache = new utils_keyvadapter.KeyvAdapter(new Keyv({ store: new KeyvRedis(this.cache.client) }), {
|
|
72
|
-
disableBatchReads: true,
|
|
73
|
-
});
|
|
74
|
-
const serverConfig = {
|
|
75
|
-
debug,
|
|
76
|
-
cache,
|
|
77
|
-
schema: this.moduleService.schema,
|
|
78
|
-
dataSources: () => this.moduleService.dataSource,
|
|
79
|
-
context: async ({ req, res, connection, }) => {
|
|
46
|
+
this.app.use(__GRAPHQL_ENDPOINT__, cors(corsOptions), express.json(), express4.expressMiddleware(apolloServer, {
|
|
47
|
+
context: async ({ req, res, connection }) => {
|
|
80
48
|
let context;
|
|
81
49
|
let addons = {};
|
|
50
|
+
const dataSources = this.moduleService.dataSource;
|
|
82
51
|
try {
|
|
83
52
|
if (connection) {
|
|
84
53
|
context = connection.context;
|
|
85
54
|
if (!context.dataSources) {
|
|
86
55
|
addons = {
|
|
87
|
-
|
|
88
|
-
dataSources: constructDataSourcesForSubscriptions(connection.context, this.cache, this.moduleService.dataSource),
|
|
56
|
+
dataSources: constructDataSourcesForSubscriptions(connection.context, this.redisClient, dataSources),
|
|
89
57
|
};
|
|
90
58
|
}
|
|
91
59
|
else {
|
|
92
60
|
addons = {
|
|
93
|
-
|
|
94
|
-
dataSources: context.dataSources,
|
|
61
|
+
dataSources,
|
|
95
62
|
};
|
|
96
63
|
}
|
|
97
64
|
}
|
|
@@ -102,45 +69,67 @@ class GraphqlServer {
|
|
|
102
69
|
...pureContext,
|
|
103
70
|
...contextServices,
|
|
104
71
|
preferences: this.moduleService.defaultPreferences,
|
|
105
|
-
// update: updateContainers,
|
|
106
72
|
};
|
|
107
73
|
}
|
|
108
74
|
context.userIp = this.getUserIpAddress(req);
|
|
109
75
|
}
|
|
110
76
|
catch (err) {
|
|
111
|
-
this.logger.error('
|
|
77
|
+
this.logger.error('adding context to graphql failed due to [%o]', err);
|
|
112
78
|
throw err;
|
|
113
79
|
}
|
|
114
80
|
return {
|
|
115
81
|
req,
|
|
116
82
|
res,
|
|
83
|
+
dataSources,
|
|
117
84
|
...context,
|
|
118
85
|
...addons,
|
|
119
86
|
};
|
|
120
87
|
},
|
|
88
|
+
}));
|
|
89
|
+
this.logger.info('GraphqlServer initialized - ', envConfig.config.CLIENT_URL);
|
|
90
|
+
}
|
|
91
|
+
getUserIpAddress(req) {
|
|
92
|
+
let ip = (req?.headers['x-forwarded-for'] || '').split(',')[0] || req?.connection?.remoteAddress;
|
|
93
|
+
if (ip.substr(0, 7) === '::ffff:') {
|
|
94
|
+
ip = ip.substr(7);
|
|
95
|
+
}
|
|
96
|
+
if (ip === '::1') {
|
|
97
|
+
ip = '127.0.0.1';
|
|
98
|
+
}
|
|
99
|
+
return ip;
|
|
100
|
+
}
|
|
101
|
+
configureApolloServer() {
|
|
102
|
+
const serverConfig = {
|
|
103
|
+
schema: this.moduleService.schema,
|
|
104
|
+
allowBatchedHttpRequests: true,
|
|
105
|
+
cache: new utils_keyvadapter.KeyvAdapter(new Keyv({ store: new KeyvRedis(this.redisClient) }), {
|
|
106
|
+
disableBatchReads: true,
|
|
107
|
+
}),
|
|
121
108
|
plugins: [
|
|
122
|
-
|
|
123
|
-
|
|
109
|
+
drainHttpServer.ApolloServerPluginDrainHttpServer({ httpServer: this.httpServer }),
|
|
110
|
+
cacheControl.ApolloServerPluginCacheControl({
|
|
111
|
+
calculateHttpHeaders: false,
|
|
112
|
+
}),
|
|
124
113
|
responseCachePlugin({
|
|
125
|
-
sessionId: ({
|
|
114
|
+
sessionId: ({ contextValue }) => Promise.resolve(contextValue?.userContext?.accountId ?? null),
|
|
126
115
|
generateCacheKey({ queryHash, operationName }, keyData) {
|
|
127
116
|
return `${operationName}:${queryHash}`;
|
|
128
117
|
},
|
|
129
118
|
}),
|
|
130
|
-
invalidateCachePlugin.invalidateCachePlugin({ cache: this.
|
|
119
|
+
invalidateCachePlugin.invalidateCachePlugin({ cache: this.redisClient }),
|
|
131
120
|
],
|
|
132
121
|
};
|
|
133
122
|
if (this.enableSubscription) {
|
|
134
123
|
serverConfig.plugins.push({
|
|
135
124
|
async serverWillStart() {
|
|
136
125
|
return {
|
|
137
|
-
|
|
126
|
+
async drainServer() {
|
|
138
127
|
await wsServerCleanup.dispose();
|
|
139
128
|
},
|
|
140
129
|
};
|
|
141
130
|
},
|
|
142
131
|
});
|
|
143
132
|
}
|
|
144
|
-
return new
|
|
133
|
+
return new server.ApolloServer(serverConfig);
|
|
145
134
|
}
|
|
146
135
|
}exports.GraphqlServer=GraphqlServer;//# sourceMappingURL=GraphqlServer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphqlServer.cjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":["WebSocketServer","config","GraphqlWs","KeyvAdapter","ApolloServerPluginDrainHttpServer","ApolloServerPluginCacheControl","invalidateCachePlugin","ApolloServer"],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphqlServer.cjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":["WebSocketServer","config","GraphqlWs","useServer","expressMiddleware","KeyvAdapter","ApolloServerPluginDrainHttpServer","ApolloServerPluginCacheControl","invalidateCachePlugin","ApolloServer"],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
+
import * as IORedis from 'ioredis';
|
|
2
3
|
import 'isomorphic-fetch';
|
|
3
4
|
import { Express } from 'express';
|
|
4
5
|
import * as http from 'http';
|
|
5
|
-
import { RedisCache, RedisClusterCache } from 'apollo-server-cache-redis';
|
|
6
6
|
import { IModuleService } from '../interfaces';
|
|
7
7
|
export declare class GraphqlServer {
|
|
8
8
|
private app;
|
|
9
9
|
private httpServer;
|
|
10
|
-
private
|
|
10
|
+
private redisClient;
|
|
11
11
|
private moduleService;
|
|
12
12
|
private enableSubscription;
|
|
13
13
|
private logger;
|
|
14
|
-
constructor(app: Express, httpServer: http.Server,
|
|
14
|
+
constructor(app: Express, httpServer: http.Server, redisClient: IORedis.Redis | IORedis.Cluster, moduleService: IModuleService, enableSubscription?: boolean);
|
|
15
15
|
initialize(): Promise<void>;
|
|
16
16
|
getUserIpAddress(req: any): any;
|
|
17
17
|
private configureApolloServer;
|
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
import {ApolloServer}from'apollo
|
|
2
|
-
|
|
3
|
-
if ((process.env.LOG_LEVEL && process.env.LOG_LEVEL === 'trace') || process.env.LOG_LEVEL === 'debug') {
|
|
4
|
-
debug = true;
|
|
5
|
-
}
|
|
1
|
+
import {ApolloServer}from'@apollo/server';import {useServer}from'graphql-ws/lib/use/ws';import {expressMiddleware}from'@apollo/server/express4';import {ApolloServerPluginCacheControl}from'@apollo/server/plugin/cacheControl';import {ApolloServerPluginDrainHttpServer}from'@apollo/server/plugin/drainHttpServer';import cachePlugin from'@apollo/server-plugin-response-cache';import'isomorphic-fetch';import express from'express';import cors from'cors';import Keyv from'keyv';import KeyvRedis from'@keyv/redis';import {KeyvAdapter}from'@apollo/utils.keyvadapter';import {WebSocketServer}from'ws';import {invalidateCachePlugin}from'../plugins/invalidateCachePlugin.mjs';import {GraphqlWs}from'./GraphqlWs.mjs';import {config}from'../config/env-config.mjs';const responseCachePlugin = cachePlugin.default ?? cachePlugin;
|
|
2
|
+
if ((process.env.LOG_LEVEL && process.env.LOG_LEVEL === 'trace') || process.env.LOG_LEVEL === 'debug') ;
|
|
6
3
|
// @workaround as the `dataSources` not available in Subscription (websocket) Context.
|
|
7
4
|
// https://github.com/apollographql/apollo-server/issues/1526 need to revisit in Apollo-Server v3.
|
|
8
5
|
const constructDataSourcesForSubscriptions = (context, cache, dataSources) => {
|
|
9
|
-
const
|
|
6
|
+
const initializeDataSource = (instance) => {
|
|
10
7
|
instance.initialize({ context, cache });
|
|
11
8
|
};
|
|
12
|
-
// tslint:disable-next-line:forin
|
|
13
|
-
// eslint-disable-next-line guard-for-in
|
|
14
9
|
for (const prop in dataSources) {
|
|
15
|
-
|
|
10
|
+
initializeDataSource(dataSources[prop]);
|
|
16
11
|
}
|
|
17
12
|
return dataSources;
|
|
18
13
|
};
|
|
@@ -20,14 +15,14 @@ let wsServerCleanup;
|
|
|
20
15
|
class GraphqlServer {
|
|
21
16
|
app;
|
|
22
17
|
httpServer;
|
|
23
|
-
|
|
18
|
+
redisClient;
|
|
24
19
|
moduleService;
|
|
25
20
|
enableSubscription;
|
|
26
21
|
logger;
|
|
27
|
-
constructor(app, httpServer,
|
|
22
|
+
constructor(app, httpServer, redisClient, moduleService, enableSubscription = true) {
|
|
28
23
|
this.app = app;
|
|
29
24
|
this.httpServer = httpServer;
|
|
30
|
-
this.
|
|
25
|
+
this.redisClient = redisClient;
|
|
31
26
|
this.moduleService = moduleService;
|
|
32
27
|
this.enableSubscription = enableSubscription;
|
|
33
28
|
this.logger = this.moduleService.logger.child({ className: 'GraphqlServer' });
|
|
@@ -36,8 +31,8 @@ class GraphqlServer {
|
|
|
36
31
|
server: this.httpServer,
|
|
37
32
|
path: config.GRAPHQL_ENDPOINT,
|
|
38
33
|
});
|
|
39
|
-
|
|
40
|
-
wsServerCleanup =
|
|
34
|
+
new GraphqlWs(wsServer, this.moduleService, this.redisClient);
|
|
35
|
+
wsServerCleanup = useServer({ schema: this.moduleService.schema }, wsServer);
|
|
41
36
|
}
|
|
42
37
|
}
|
|
43
38
|
async initialize() {
|
|
@@ -48,50 +43,22 @@ class GraphqlServer {
|
|
|
48
43
|
origin: [config.CLIENT_URL],
|
|
49
44
|
credentials: true,
|
|
50
45
|
};
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
cors: corsOptions,
|
|
54
|
-
path: config.GRAPHQL_ENDPOINT,
|
|
55
|
-
});
|
|
56
|
-
this.logger.info('GraphqlServer initialized - ', config.CLIENT_URL);
|
|
57
|
-
}
|
|
58
|
-
getUserIpAddress(req) {
|
|
59
|
-
let ip = (req?.headers['x-forwarded-for'] || '').split(',')[0] || req?.connection?.remoteAddress;
|
|
60
|
-
if (ip.substr(0, 7) === '::ffff:') {
|
|
61
|
-
ip = ip.substr(7);
|
|
62
|
-
}
|
|
63
|
-
if (ip === '::1') {
|
|
64
|
-
ip = '127.0.0.1';
|
|
65
|
-
}
|
|
66
|
-
return ip;
|
|
67
|
-
}
|
|
68
|
-
configureApolloServer() {
|
|
69
|
-
this.logger.info('-- Configuring Apollo Server --');
|
|
70
|
-
// @ts-ignore
|
|
71
|
-
const cache = new KeyvAdapter(new Keyv({ store: new KeyvRedis(this.cache.client) }), {
|
|
72
|
-
disableBatchReads: true,
|
|
73
|
-
});
|
|
74
|
-
const serverConfig = {
|
|
75
|
-
debug,
|
|
76
|
-
cache,
|
|
77
|
-
schema: this.moduleService.schema,
|
|
78
|
-
dataSources: () => this.moduleService.dataSource,
|
|
79
|
-
context: async ({ req, res, connection, }) => {
|
|
46
|
+
this.app.use(__GRAPHQL_ENDPOINT__, cors(corsOptions), express.json(), expressMiddleware(apolloServer, {
|
|
47
|
+
context: async ({ req, res, connection }) => {
|
|
80
48
|
let context;
|
|
81
49
|
let addons = {};
|
|
50
|
+
const dataSources = this.moduleService.dataSource;
|
|
82
51
|
try {
|
|
83
52
|
if (connection) {
|
|
84
53
|
context = connection.context;
|
|
85
54
|
if (!context.dataSources) {
|
|
86
55
|
addons = {
|
|
87
|
-
|
|
88
|
-
dataSources: constructDataSourcesForSubscriptions(connection.context, this.cache, this.moduleService.dataSource),
|
|
56
|
+
dataSources: constructDataSourcesForSubscriptions(connection.context, this.redisClient, dataSources),
|
|
89
57
|
};
|
|
90
58
|
}
|
|
91
59
|
else {
|
|
92
60
|
addons = {
|
|
93
|
-
|
|
94
|
-
dataSources: context.dataSources,
|
|
61
|
+
dataSources,
|
|
95
62
|
};
|
|
96
63
|
}
|
|
97
64
|
}
|
|
@@ -102,39 +69,61 @@ class GraphqlServer {
|
|
|
102
69
|
...pureContext,
|
|
103
70
|
...contextServices,
|
|
104
71
|
preferences: this.moduleService.defaultPreferences,
|
|
105
|
-
// update: updateContainers,
|
|
106
72
|
};
|
|
107
73
|
}
|
|
108
74
|
context.userIp = this.getUserIpAddress(req);
|
|
109
75
|
}
|
|
110
76
|
catch (err) {
|
|
111
|
-
this.logger.error('
|
|
77
|
+
this.logger.error('adding context to graphql failed due to [%o]', err);
|
|
112
78
|
throw err;
|
|
113
79
|
}
|
|
114
80
|
return {
|
|
115
81
|
req,
|
|
116
82
|
res,
|
|
83
|
+
dataSources,
|
|
117
84
|
...context,
|
|
118
85
|
...addons,
|
|
119
86
|
};
|
|
120
87
|
},
|
|
88
|
+
}));
|
|
89
|
+
this.logger.info('GraphqlServer initialized - ', config.CLIENT_URL);
|
|
90
|
+
}
|
|
91
|
+
getUserIpAddress(req) {
|
|
92
|
+
let ip = (req?.headers['x-forwarded-for'] || '').split(',')[0] || req?.connection?.remoteAddress;
|
|
93
|
+
if (ip.substr(0, 7) === '::ffff:') {
|
|
94
|
+
ip = ip.substr(7);
|
|
95
|
+
}
|
|
96
|
+
if (ip === '::1') {
|
|
97
|
+
ip = '127.0.0.1';
|
|
98
|
+
}
|
|
99
|
+
return ip;
|
|
100
|
+
}
|
|
101
|
+
configureApolloServer() {
|
|
102
|
+
const serverConfig = {
|
|
103
|
+
schema: this.moduleService.schema,
|
|
104
|
+
allowBatchedHttpRequests: true,
|
|
105
|
+
cache: new KeyvAdapter(new Keyv({ store: new KeyvRedis(this.redisClient) }), {
|
|
106
|
+
disableBatchReads: true,
|
|
107
|
+
}),
|
|
121
108
|
plugins: [
|
|
122
109
|
ApolloServerPluginDrainHttpServer({ httpServer: this.httpServer }),
|
|
123
|
-
ApolloServerPluginCacheControl(
|
|
110
|
+
ApolloServerPluginCacheControl({
|
|
111
|
+
calculateHttpHeaders: false,
|
|
112
|
+
}),
|
|
124
113
|
responseCachePlugin({
|
|
125
|
-
sessionId: ({
|
|
114
|
+
sessionId: ({ contextValue }) => Promise.resolve(contextValue?.userContext?.accountId ?? null),
|
|
126
115
|
generateCacheKey({ queryHash, operationName }, keyData) {
|
|
127
116
|
return `${operationName}:${queryHash}`;
|
|
128
117
|
},
|
|
129
118
|
}),
|
|
130
|
-
invalidateCachePlugin({ cache: this.
|
|
119
|
+
invalidateCachePlugin({ cache: this.redisClient }),
|
|
131
120
|
],
|
|
132
121
|
};
|
|
133
122
|
if (this.enableSubscription) {
|
|
134
123
|
serverConfig.plugins.push({
|
|
135
124
|
async serverWillStart() {
|
|
136
125
|
return {
|
|
137
|
-
|
|
126
|
+
async drainServer() {
|
|
138
127
|
await wsServerCleanup.dispose();
|
|
139
128
|
},
|
|
140
129
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphqlServer.mjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphqlServer.mjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphqlWs.cjs","sources":["../../src/servers/GraphqlWs.ts"],"sourcesContent":[null],"names":["useServer"],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphqlWs.cjs","sources":["../../src/servers/GraphqlWs.ts"],"sourcesContent":[null],"names":["useServer"],"mappings":"wEAUA;AACA;AACA,MAAM,oCAAoC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,KAAI;AACzE,IAAA,MAAM,mBAAmB,GAAG,CAAC,QAAQ,KAAI;QACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,KAAC,CAAC;;AAEF,IAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;;AAE5B,QAAA,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1C;AACD,IAAA,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;MA0CW,SAAS,CAAA;AAMN,IAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA;AACE,IAAA,KAAA,CAAA;AAPN,IAAA,kBAAkB,CAAa;AAE/B,IAAA,MAAM,CAAU;AAExB,IAAA,WAAA,CACY,QAAyB,EACzB,aAA6B,EAC3B,KAAsC,EAAA;QAFxC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QACzB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAgB;QAC3B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAiC;KAChD;IAEG,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,GAAGA,YAAS,CAC/B;AACI,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;;AAEjC,YAAA,OAAO,EAAE,OAAO,GAAG,KAAI;;;;AAInB,gBAAA,IAAI;AACA,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACvF,oBAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC5F,oBAAA,MAAM,OAAO,GAAG;AACZ,wBAAA,GAAG,eAAe;AAClB,wBAAA,GAAG,WAAW;AACd,wBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;;AAElD,wBAAA,GAAG,GAAG;qBACT,CAAC;AACF,oBAAA,MAAM,MAAM,GAAG;AACX,wBAAA,WAAW,EAAE,oCAAoC,CAC7C,OAAO,EACP,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,CAAC,UAAU,CAChC;qBACJ,CAAC;oBACF,OAAO;AACH,wBAAA,GAAG,OAAO;AACV,wBAAA,GAAG,MAAM;AACT,wBAAA,GAAG,GAAG;AACN,wBAAA,GAAG,WAAW;AACd,wBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;qBACrD,CAAC;iBACL;gBAAC,OAAO,GAAG,EAAE;AACV,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC1B;aACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCJ,SAAA,EACD,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAClC;IAEM,UAAU,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;SACrC;KACJ;AACJ"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as IORedis from 'ioredis';
|
|
2
2
|
import { Disposable } from 'graphql-ws';
|
|
3
3
|
import { WebSocketServer } from 'ws';
|
|
4
4
|
import { IModuleService } from '../interfaces';
|
|
5
5
|
export declare class GraphqlWs {
|
|
6
6
|
private wsServer;
|
|
7
7
|
private moduleService;
|
|
8
|
-
protected cache:
|
|
8
|
+
protected cache: IORedis.Redis | IORedis.Cluster;
|
|
9
9
|
private subscriptionServer;
|
|
10
10
|
private logger;
|
|
11
|
-
constructor(wsServer: WebSocketServer, moduleService: IModuleService, cache:
|
|
11
|
+
constructor(wsServer: WebSocketServer, moduleService: IModuleService, cache: IORedis.Redis | IORedis.Cluster);
|
|
12
12
|
create(): Disposable;
|
|
13
13
|
disconnect(): void;
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GraphqlWs.mjs","sources":["../../src/servers/GraphqlWs.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GraphqlWs.mjs","sources":["../../src/servers/GraphqlWs.ts"],"sourcesContent":[null],"names":[],"mappings":"8DAUA;AACA;AACA,MAAM,oCAAoC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,KAAI;AACzE,IAAA,MAAM,mBAAmB,GAAG,CAAC,QAAQ,KAAI;QACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5C,KAAC,CAAC;;AAEF,IAAA,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE;;AAE5B,QAAA,mBAAmB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;KAC1C;AACD,IAAA,OAAO,WAAW,CAAC;AACvB,CAAC,CAAC;MA0CW,SAAS,CAAA;AAMN,IAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA;AACE,IAAA,KAAA,CAAA;AAPN,IAAA,kBAAkB,CAAa;AAE/B,IAAA,MAAM,CAAU;AAExB,IAAA,WAAA,CACY,QAAyB,EACzB,aAA6B,EAC3B,KAAsC,EAAA;QAFxC,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAiB;QACzB,IAAa,CAAA,aAAA,GAAb,aAAa,CAAgB;QAC3B,IAAK,CAAA,KAAA,GAAL,KAAK,CAAiC;KAChD;IAEG,MAAM,GAAA;AACT,QAAA,IAAI,CAAC,kBAAkB,GAAG,SAAS,CAC/B;AACI,YAAA,MAAM,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM;;AAEjC,YAAA,OAAO,EAAE,OAAO,GAAG,KAAI;;;;AAInB,gBAAA,IAAI;AACA,oBAAA,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AACvF,oBAAA,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAC5F,oBAAA,MAAM,OAAO,GAAG;AACZ,wBAAA,GAAG,eAAe;AAClB,wBAAA,GAAG,WAAW;AACd,wBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;;AAElD,wBAAA,GAAG,GAAG;qBACT,CAAC;AACF,oBAAA,MAAM,MAAM,GAAG;AACX,wBAAA,WAAW,EAAE,oCAAoC,CAC7C,OAAO,EACP,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,aAAa,CAAC,UAAU,CAChC;qBACJ,CAAC;oBACF,OAAO;AACH,wBAAA,GAAG,OAAO;AACV,wBAAA,GAAG,MAAM;AACT,wBAAA,GAAG,GAAG;AACN,wBAAA,GAAG,WAAW;AACd,wBAAA,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,kBAAkB;qBACrD,CAAC;iBACL;gBAAC,OAAO,GAAG,EAAE;AACV,oBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;iBAC1B;aACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCJ,SAAA,EACD,IAAI,CAAC,QAAQ,CAChB,CAAC;QACF,OAAO,IAAI,CAAC,kBAAkB,CAAC;KAClC;IAEM,UAAU,GAAA;AACb,QAAA,IAAI,IAAI,CAAC,kBAAkB,EAAE;AACzB,YAAA,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;SACrC;KACJ;AACJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebsocketMultipathUpdate.cjs","sources":["../../src/servers/WebsocketMultipathUpdate.ts"],"sourcesContent":[null],"names":["WebSocketServer","useServer","url"],"mappings":"6bAgBa,wBAAwB,CAAA;AAKtB,IAAA,aAAA,CAAA;AACA,IAAA,KAAA,CAAA;IALH,UAAU,GAAoB,EAAE,CAAC;;AAEjC,IAAA,UAAU,CAAkB;AACpC,IAAA,WAAA,CACW,aAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"WebsocketMultipathUpdate.cjs","sources":["../../src/servers/WebsocketMultipathUpdate.ts"],"sourcesContent":[null],"names":["WebSocketServer","useServer","url"],"mappings":"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"}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { WebSocketServer } from 'ws';
|
|
3
3
|
import { Server } from 'http';
|
|
4
|
-
import
|
|
4
|
+
import * as IORedis from 'ioredis';
|
|
5
5
|
import { IModuleService } from '../interfaces';
|
|
6
6
|
interface MultiWebsocketConfig {
|
|
7
7
|
[key: string]: any;
|
|
8
8
|
}
|
|
9
9
|
export declare class WebsocketMultiPathServer {
|
|
10
10
|
moduleService: IModuleService;
|
|
11
|
-
cache:
|
|
11
|
+
cache: IORedis.Redis | IORedis.Cluster;
|
|
12
12
|
private webSockets;
|
|
13
13
|
private _graphqlWs;
|
|
14
|
-
constructor(moduleService: IModuleService, cache:
|
|
14
|
+
constructor(moduleService: IModuleService, cache: IORedis.Redis | IORedis.Cluster, multiplePathConfig?: MultiWebsocketConfig);
|
|
15
15
|
httpServerUpgrade(httpServer: Server): Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
16
16
|
get graphqlWs(): WebSocketServer;
|
|
17
17
|
close(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebsocketMultipathUpdate.mjs","sources":["../../src/servers/WebsocketMultipathUpdate.ts"],"sourcesContent":[null],"names":[],"mappings":"6GAgBa,wBAAwB,CAAA;AAKtB,IAAA,aAAA,CAAA;AACA,IAAA,KAAA,CAAA;IALH,UAAU,GAAoB,EAAE,CAAC;;AAEjC,IAAA,UAAU,CAAkB;AACpC,IAAA,WAAA,CACW,aAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"WebsocketMultipathUpdate.mjs","sources":["../../src/servers/WebsocketMultipathUpdate.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|