@common-stack/server-stack 5.0.4-alpha.7 → 5.0.5-alpha.2
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 +222 -0
- package/lib/MainStackServer.cjs.map +1 -0
- package/lib/MainStackServer.d.ts +28 -0
- package/lib/MainStackServer.mjs +222 -0
- package/lib/MainStackServer.mjs.map +1 -0
- package/lib/{stack-server.cjs → StackServer.cjs} +1 -1
- package/lib/StackServer.cjs.map +1 -0
- package/lib/{stack-server.mjs → StackServer.mjs} +1 -1
- package/lib/StackServer.mjs.map +1 -0
- package/lib/api/remote-config.cjs +6 -0
- package/lib/api/remote-config.cjs.map +1 -0
- package/lib/api/remote-config.d.ts +6 -0
- package/lib/api/remote-config.mjs +6 -0
- package/lib/api/remote-config.mjs.map +1 -0
- package/lib/api/resolver.cjs +11 -0
- package/lib/api/resolver.cjs.map +1 -0
- package/lib/api/resolver.d.ts +10 -0
- package/lib/api/resolver.mjs +11 -0
- package/lib/api/resolver.mjs.map +1 -0
- package/lib/api/root-schema.graphqls.cjs +2 -0
- package/lib/api/root-schema.graphqls.cjs.map +1 -0
- package/lib/api/root-schema.graphqls.mjs +2 -0
- package/lib/api/root-schema.graphqls.mjs.map +1 -0
- package/lib/api/scalar.cjs +14 -0
- package/lib/api/scalar.cjs.map +1 -0
- package/lib/api/scalar.d.ts +2 -0
- package/lib/api/scalar.mjs +14 -0
- package/lib/api/scalar.mjs.map +1 -0
- package/lib/api/schema-builder.cjs +148 -0
- package/lib/api/schema-builder.cjs.map +1 -0
- package/lib/api/schema-builder.d.ts +24 -0
- package/lib/api/schema-builder.mjs +148 -0
- package/lib/api/schema-builder.mjs.map +1 -0
- package/lib/api/utils.cjs +27 -0
- package/lib/api/utils.cjs.map +1 -0
- package/lib/api/utils.d.ts +4 -0
- package/lib/api/utils.mjs +27 -0
- package/lib/api/utils.mjs.map +1 -0
- package/lib/config/env-config.cjs +4 -0
- package/lib/config/env-config.cjs.map +1 -1
- package/lib/config/env-config.d.ts +4 -0
- package/lib/config/env-config.mjs +4 -0
- package/lib/config/env-config.mjs.map +1 -1
- package/lib/connectors/connection-broker.d.ts +2 -2
- package/lib/connectors/redis-connector.d.ts +1 -1
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.mjs +1 -1
- package/lib/interfaces/dbMigration.d.ts +8 -0
- package/lib/interfaces/index.d.ts +3 -0
- package/lib/interfaces/module-interface.d.ts +13 -0
- package/lib/middleware/cors.cjs +26 -0
- package/lib/middleware/cors.cjs.map +1 -0
- package/lib/middleware/cors.d.ts +6 -0
- package/lib/middleware/cors.mjs +26 -0
- package/lib/middleware/cors.mjs.map +1 -0
- package/lib/middleware/error.cjs +48 -0
- package/lib/middleware/error.cjs.map +1 -0
- package/lib/middleware/error.d.ts +10 -0
- package/lib/middleware/error.mjs +48 -0
- package/lib/middleware/error.mjs.map +1 -0
- package/lib/middleware/sentry.cjs +3 -0
- package/lib/middleware/sentry.cjs.map +1 -0
- package/lib/middleware/sentry.d.ts +3 -0
- package/lib/middleware/sentry.mjs +3 -0
- package/lib/middleware/sentry.mjs.map +1 -0
- package/lib/middleware/services.cjs +12 -0
- package/lib/middleware/services.cjs.map +1 -0
- package/lib/middleware/services.d.ts +2 -0
- package/lib/middleware/services.mjs +12 -0
- package/lib/middleware/services.mjs.map +1 -0
- package/lib/plugins/index.d.ts +1 -0
- package/lib/plugins/invalidateCachePlugin.cjs +29 -0
- package/lib/plugins/invalidateCachePlugin.cjs.map +1 -0
- package/lib/plugins/invalidateCachePlugin.d.ts +5 -0
- package/lib/plugins/invalidateCachePlugin.mjs +29 -0
- package/lib/plugins/invalidateCachePlugin.mjs.map +1 -0
- package/lib/servers/ExpressApp.cjs +40 -0
- package/lib/servers/ExpressApp.cjs.map +1 -0
- package/lib/servers/ExpressApp.d.ts +3 -0
- package/lib/servers/ExpressApp.mjs +40 -0
- package/lib/servers/ExpressApp.mjs.map +1 -0
- package/lib/servers/GraphqlServer.cjs +146 -0
- package/lib/servers/GraphqlServer.cjs.map +1 -0
- package/lib/servers/GraphqlServer.d.ts +18 -0
- package/lib/servers/GraphqlServer.mjs +146 -0
- package/lib/servers/GraphqlServer.mjs.map +1 -0
- package/lib/servers/GraphqlWs.cjs +95 -0
- package/lib/servers/GraphqlWs.cjs.map +1 -0
- package/lib/servers/GraphqlWs.d.ts +14 -0
- package/lib/servers/GraphqlWs.mjs +95 -0
- package/lib/servers/GraphqlWs.mjs.map +1 -0
- package/lib/servers/WebsocketMultipathUpdate.cjs +63 -0
- package/lib/servers/WebsocketMultipathUpdate.cjs.map +1 -0
- package/lib/servers/WebsocketMultipathUpdate.d.ts +19 -0
- package/lib/servers/WebsocketMultipathUpdate.mjs +63 -0
- package/lib/servers/WebsocketMultipathUpdate.mjs.map +1 -0
- package/lib/servers/mongodb-migration-update.d.ts +36 -0
- package/lib/servers/utils.d.ts +14 -0
- package/lib/utils/migrations.cjs +26 -0
- package/lib/utils/migrations.cjs.map +1 -0
- package/lib/utils/migrations.d.ts +32 -0
- package/lib/utils/migrations.mjs +26 -0
- package/lib/utils/migrations.mjs.map +1 -0
- package/package.json +40 -3
- package/lib/stack-server.cjs.map +0 -1
- package/lib/stack-server.mjs.map +0 -1
- /package/lib/{stack-server.d.ts → StackServer.d.ts} +0 -0
- /package/lib/{interface.d.ts → interfaces/moleculer.d.ts} +0 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import cors from'cors';import {logger}from'@cdm-logger/server';import {config}from'../config/env-config.mjs';/* eslint-disable jest/require-hook */
|
|
2
|
+
const CLIENT_URL = config.CLIENT_URL;
|
|
3
|
+
const BACKEND_URL = config.BACKEND_URL;
|
|
4
|
+
const corsWhitelist = [
|
|
5
|
+
BACKEND_URL,
|
|
6
|
+
CLIENT_URL,
|
|
7
|
+
config.GRAPHQL_URL,
|
|
8
|
+
// 'http://localhost:3000',
|
|
9
|
+
];
|
|
10
|
+
logger.info('Cors whitelist: %j', corsWhitelist);
|
|
11
|
+
const corsOptions = {
|
|
12
|
+
origin: (origin, callback) => {
|
|
13
|
+
if (corsWhitelist.indexOf(origin) !== -1) {
|
|
14
|
+
callback(null, true);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// TODO: only throw when in debug mode
|
|
18
|
+
logger.error('url (%s) is not in the whitelist', origin);
|
|
19
|
+
// callback(new Error('Not allowed by CORS'))
|
|
20
|
+
logger.warn('allowing all origins temporarily, you need to disable it.');
|
|
21
|
+
callback(null, true);
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
credentials: true,
|
|
25
|
+
};
|
|
26
|
+
const corsMiddleware = cors(corsOptions);export{corsMiddleware};//# sourceMappingURL=cors.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.mjs","sources":["../../src/middleware/cors.ts"],"sourcesContent":[null],"names":[],"mappings":"6GAAA;AAKA,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AACrC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEvC,MAAM,aAAa,GAAG;IAClB,WAAW;IACX,UAAU;AACV,IAAA,MAAM,CAAC,WAAW;;CAErB,CAAC;AACF,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;AACjD,MAAM,WAAW,GAAG;AAChB,IAAA,MAAM,EAAE,CAAC,MAAM,EAAE,QAAQ,KAAI;QACzB,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AACtC,YAAA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACxB;aAAM;;AAEH,YAAA,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;;AAEzD,YAAA,MAAM,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;AACzE,YAAA,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACxB;KACJ;AACD,IAAA,WAAW,EAAE,IAAI;CACpB,CAAC;MAEW,cAAc,GAAG,IAAI,CAAC,WAAW"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
'use strict';var path=require('path'),fs=require('fs'),url=require('url'),server=require('@cdm-logger/server');function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var path__namespace=/*#__PURE__*/_interopNamespaceDefault(path);var fs__namespace=/*#__PURE__*/_interopNamespaceDefault(fs);var url__namespace=/*#__PURE__*/_interopNamespaceDefault(url);/// <reference path='../../../../typings/index.d.ts' />
|
|
2
|
+
let assetMap;
|
|
3
|
+
const stripCircular = (from, seen) => {
|
|
4
|
+
const to = Array.isArray(from) ? [] : {};
|
|
5
|
+
seen = seen || [];
|
|
6
|
+
seen.push(from);
|
|
7
|
+
Object.getOwnPropertyNames(from).forEach(key => {
|
|
8
|
+
if (!from[key] || (typeof from[key] !== 'object' && !Array.isArray(from[key]))) {
|
|
9
|
+
to[key] = from[key];
|
|
10
|
+
}
|
|
11
|
+
else if (seen.indexOf(from[key]) < 0) {
|
|
12
|
+
to[key] = stripCircular(from[key], seen.slice(0));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
to[key] = '[Circular]';
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
const { pathname } = url__namespace.parse(__BACKEND_URL__);
|
|
21
|
+
/**
|
|
22
|
+
* Middleware function that takes 4 arguments is classified as "error handling middleware"
|
|
23
|
+
* and will only get called if an error occurs.
|
|
24
|
+
* @param e
|
|
25
|
+
* @param req
|
|
26
|
+
* @param res
|
|
27
|
+
* @param next
|
|
28
|
+
*/
|
|
29
|
+
const errorMiddleware = (e, req, res, next) => {
|
|
30
|
+
if (req.path === pathname) {
|
|
31
|
+
const stack = e.stack.toString().replace(/[\n]/g, '\\n');
|
|
32
|
+
res.status(200).send(`[{"data": {}, "errors":[{"message": "${stack}"}]}]`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
server.logger.error(e);
|
|
36
|
+
if (__DEV__ || !assetMap) {
|
|
37
|
+
assetMap = JSON.parse(fs__namespace.readFileSync(path__namespace.join(__FRONTEND_BUILD_DIR__, 'assets.json')).toString());
|
|
38
|
+
}
|
|
39
|
+
const serverErrorScript = `<script charset="UTF-8">window.__SERVER_ERROR__=${JSON.stringify(stripCircular(e))};</script>`;
|
|
40
|
+
const vendorScript = assetMap['vendor.js']
|
|
41
|
+
? `<script src="/${assetMap['vendor.js']}" charSet="utf-8"></script>`
|
|
42
|
+
: '';
|
|
43
|
+
res.status(200).send(`<html>${serverErrorScript}<body><div id="content"></div>
|
|
44
|
+
${vendorScript}
|
|
45
|
+
<script src="/${assetMap['index.js']}" charSet="utf-8"></script>
|
|
46
|
+
</body></html>`);
|
|
47
|
+
}
|
|
48
|
+
};exports.errorMiddleware=errorMiddleware;//# sourceMappingURL=error.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.cjs","sources":["../../src/middleware/error.ts"],"sourcesContent":[null],"names":["url","logger","fs","path"],"mappings":"ukBAAA;AAQA,IAAI,QAAQ,CAAC;AAEb,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAU,KAAI;AACvC,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAClB,IAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC5E,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SACvB;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,EAAE,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACrD;aAAM;AAAE,YAAA,EAAE,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;SAAE;AACtC,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,EAAE,QAAQ,EAAE,GAAGA,cAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAEhD;;;;;;;AAOG;AACI,MAAM,eAAe,GACxB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;AAClB,IAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAwC,qCAAA,EAAA,KAAK,CAAO,KAAA,CAAA,CAAC,CAAC;KAC9E;SAAM;AACH,QAAAC,aAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhB,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE;YACtB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAACC,aAAE,CAAC,YAAY,CAACC,eAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvG;AAED,QAAA,MAAM,iBAAiB,GAAG,CAAmD,gDAAA,EAAA,IAAI,CAAC,SAAS,CACvF,aAAa,CAAC,CAAC,CAAC,CACnB,YAAY,CAAC;AACd,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC;AACtC,cAAE,CAAiB,cAAA,EAAA,QAAQ,CAAC,WAAW,CAAC,CAA6B,2BAAA,CAAA;cACnE,EAAE,CAAC;QAET,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAChB,CAAA,MAAA,EAAS,iBAAiB,CAAA;UAChC,YAAY,CAAA;4BACM,QAAQ,CAAC,UAAU,CAAC,CAAA;AACrB,0BAAA,CAAA,CACd,CAAC;KACL;AACL"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/// <reference types="typings" />
|
|
2
|
+
/**
|
|
3
|
+
* Middleware function that takes 4 arguments is classified as "error handling middleware"
|
|
4
|
+
* and will only get called if an error occurs.
|
|
5
|
+
* @param e
|
|
6
|
+
* @param req
|
|
7
|
+
* @param res
|
|
8
|
+
* @param next
|
|
9
|
+
*/
|
|
10
|
+
export declare const errorMiddleware: (e: any, req: any, res: any, next: any) => void;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import*as path from'path';import*as fs from'fs';import*as url from'url';import {logger}from'@cdm-logger/server';/// <reference path='../../../../typings/index.d.ts' />
|
|
2
|
+
let assetMap;
|
|
3
|
+
const stripCircular = (from, seen) => {
|
|
4
|
+
const to = Array.isArray(from) ? [] : {};
|
|
5
|
+
seen = seen || [];
|
|
6
|
+
seen.push(from);
|
|
7
|
+
Object.getOwnPropertyNames(from).forEach(key => {
|
|
8
|
+
if (!from[key] || (typeof from[key] !== 'object' && !Array.isArray(from[key]))) {
|
|
9
|
+
to[key] = from[key];
|
|
10
|
+
}
|
|
11
|
+
else if (seen.indexOf(from[key]) < 0) {
|
|
12
|
+
to[key] = stripCircular(from[key], seen.slice(0));
|
|
13
|
+
}
|
|
14
|
+
else {
|
|
15
|
+
to[key] = '[Circular]';
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
const { pathname } = url.parse(__BACKEND_URL__);
|
|
21
|
+
/**
|
|
22
|
+
* Middleware function that takes 4 arguments is classified as "error handling middleware"
|
|
23
|
+
* and will only get called if an error occurs.
|
|
24
|
+
* @param e
|
|
25
|
+
* @param req
|
|
26
|
+
* @param res
|
|
27
|
+
* @param next
|
|
28
|
+
*/
|
|
29
|
+
const errorMiddleware = (e, req, res, next) => {
|
|
30
|
+
if (req.path === pathname) {
|
|
31
|
+
const stack = e.stack.toString().replace(/[\n]/g, '\\n');
|
|
32
|
+
res.status(200).send(`[{"data": {}, "errors":[{"message": "${stack}"}]}]`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
logger.error(e);
|
|
36
|
+
if (__DEV__ || !assetMap) {
|
|
37
|
+
assetMap = JSON.parse(fs.readFileSync(path.join(__FRONTEND_BUILD_DIR__, 'assets.json')).toString());
|
|
38
|
+
}
|
|
39
|
+
const serverErrorScript = `<script charset="UTF-8">window.__SERVER_ERROR__=${JSON.stringify(stripCircular(e))};</script>`;
|
|
40
|
+
const vendorScript = assetMap['vendor.js']
|
|
41
|
+
? `<script src="/${assetMap['vendor.js']}" charSet="utf-8"></script>`
|
|
42
|
+
: '';
|
|
43
|
+
res.status(200).send(`<html>${serverErrorScript}<body><div id="content"></div>
|
|
44
|
+
${vendorScript}
|
|
45
|
+
<script src="/${assetMap['index.js']}" charSet="utf-8"></script>
|
|
46
|
+
</body></html>`);
|
|
47
|
+
}
|
|
48
|
+
};export{errorMiddleware};//# sourceMappingURL=error.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error.mjs","sources":["../../src/middleware/error.ts"],"sourcesContent":[null],"names":[],"mappings":"gHAAA;AAQA,IAAI,QAAQ,CAAC;AAEb,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,IAAU,KAAI;AACvC,IAAA,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACzC,IAAA,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AAClB,IAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAG;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC5E,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;SACvB;AAAM,aAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE;AACpC,YAAA,EAAE,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACrD;aAAM;AAAE,YAAA,EAAE,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;SAAE;AACtC,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,EAAE,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,EAAE,QAAQ,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;AAEhD;;;;;;;AAOG;AACI,MAAM,eAAe,GACxB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;AAClB,IAAA,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE;AACvB,QAAA,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACzD,QAAA,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAwC,qCAAA,EAAA,KAAK,CAAO,KAAA,CAAA,CAAC,CAAC;KAC9E;SAAM;AACH,QAAA,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEhB,QAAA,IAAI,OAAO,IAAI,CAAC,QAAQ,EAAE;YACtB,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;SACvG;AAED,QAAA,MAAM,iBAAiB,GAAG,CAAmD,gDAAA,EAAA,IAAI,CAAC,SAAS,CACvF,aAAa,CAAC,CAAC,CAAC,CACnB,YAAY,CAAC;AACd,QAAA,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC;AACtC,cAAE,CAAiB,cAAA,EAAA,QAAQ,CAAC,WAAW,CAAC,CAA6B,2BAAA,CAAA;cACnE,EAAE,CAAC;QAET,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAChB,CAAA,MAAA,EAAS,iBAAiB,CAAA;UAChC,YAAY,CAAA;4BACM,QAAQ,CAAC,UAAU,CAAC,CAAA;AACrB,0BAAA,CAAA,CACd,CAAC;KACL;AACL"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
'use strict';var node=require('@sentry/node');node.init({ dsn: process.env.SENTRY_DSN_BACKEND });
|
|
2
|
+
const sentryMiddleware = node.Handlers.requestHandler();
|
|
3
|
+
const sentryErrorHandlerMiddleware = node.Handlers.errorHandler();exports.sentryErrorHandlerMiddleware=sentryErrorHandlerMiddleware;exports.sentryMiddleware=sentryMiddleware;//# sourceMappingURL=sentry.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.cjs","sources":["../../src/middleware/sentry.ts"],"sourcesContent":[null],"names":["init","Handlers"],"mappings":"8CAEAA,SAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;MAGjC,gBAAgB,GAAGC,aAAQ,CAAC,cAAc,GAAG;MAE7C,4BAA4B,GAAGA,aAAQ,CAAC,YAAY"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {init,Handlers}from'@sentry/node';init({ dsn: process.env.SENTRY_DSN_BACKEND });
|
|
2
|
+
const sentryMiddleware = Handlers.requestHandler();
|
|
3
|
+
const sentryErrorHandlerMiddleware = Handlers.errorHandler();export{sentryErrorHandlerMiddleware,sentryMiddleware};//# sourceMappingURL=sentry.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentry.mjs","sources":["../../src/middleware/sentry.ts"],"sourcesContent":[null],"names":[],"mappings":"yCAEA,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;MAGjC,gBAAgB,GAAG,QAAQ,CAAC,cAAc,GAAG;MAE7C,4BAA4B,GAAG,QAAQ,CAAC,YAAY"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';require('isomorphic-fetch');const contextServicesMiddleware = (createContext, serviceContext) => (req, res, next) => {
|
|
2
|
+
Promise.all([
|
|
3
|
+
createContext(req, res),
|
|
4
|
+
serviceContext(req, res),
|
|
5
|
+
])
|
|
6
|
+
.then(([context, services]) => {
|
|
7
|
+
req.context = context;
|
|
8
|
+
req.services = services;
|
|
9
|
+
next();
|
|
10
|
+
})
|
|
11
|
+
.catch((err) => next());
|
|
12
|
+
};exports.contextServicesMiddleware=contextServicesMiddleware;//# sourceMappingURL=services.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.cjs","sources":["../../src/middleware/services.ts"],"sourcesContent":[null],"names":[],"mappings":"yCAEa,MAAA,yBAAyB,GAAG,CAAC,aAAa,EAAE,cAAc,KAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;IAC5F,OAAO,CAAC,GAAG,CAAC;AACR,QAAA,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC;AACvB,QAAA,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;KAC3B,CAAC;SACG,IAAI,CAAC,CAAC,CAAE,OAAO,EAAE,QAAQ,CAAE,KAAI;AAC5B,QAAA,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AACtB,QAAA,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAExB,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;AAChC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import'isomorphic-fetch';const contextServicesMiddleware = (createContext, serviceContext) => (req, res, next) => {
|
|
2
|
+
Promise.all([
|
|
3
|
+
createContext(req, res),
|
|
4
|
+
serviceContext(req, res),
|
|
5
|
+
])
|
|
6
|
+
.then(([context, services]) => {
|
|
7
|
+
req.context = context;
|
|
8
|
+
req.services = services;
|
|
9
|
+
next();
|
|
10
|
+
})
|
|
11
|
+
.catch((err) => next());
|
|
12
|
+
};export{contextServicesMiddleware};//# sourceMappingURL=services.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services.mjs","sources":["../../src/middleware/services.ts"],"sourcesContent":[null],"names":[],"mappings":"yBAEa,MAAA,yBAAyB,GAAG,CAAC,aAAa,EAAE,cAAc,KAAM,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;IAC5F,OAAO,CAAC,GAAG,CAAC;AACR,QAAA,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC;AACvB,QAAA,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC;KAC3B,CAAC;SACG,IAAI,CAAC,CAAC,CAAE,OAAO,EAAE,QAAQ,CAAE,KAAI;AAC5B,QAAA,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC;AACtB,QAAA,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAExB,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC;AAChC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './invalidateCachePlugin';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';const invalidateCachePlugin = ({ cache }) => {
|
|
2
|
+
return {
|
|
3
|
+
requestDidStart(requestContext) {
|
|
4
|
+
return {
|
|
5
|
+
async willSendResponse(responseContext) {
|
|
6
|
+
try {
|
|
7
|
+
const hasErrors = !!requestContext.errors?.length;
|
|
8
|
+
const { queriesToInvalidate } = requestContext.context;
|
|
9
|
+
const [{ operation }] = responseContext.document.definitions;
|
|
10
|
+
const isMutation = operation === 'mutation';
|
|
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);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};exports.invalidateCachePlugin=invalidateCachePlugin;//# sourceMappingURL=invalidateCachePlugin.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidateCachePlugin.cjs","sources":["../../src/plugins/invalidateCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"mBASa,qBAAqB,GAAG,CAAC,EAAE,KAAK,EAAyB,KAAI;IACtE,OAAO;AACH,QAAA,eAAe,CAAC,cAAc,EAAA;YAC1B,OAAO;gBACH,MAAM,gBAAgB,CAAC,eAAe,EAAA;AAClC,oBAAA,IAAI;wBACA,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;AAClD,wBAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;wBACvD,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,WAAwC,CAAC;AAC1F,wBAAA,MAAM,UAAU,GAAG,SAAS,KAAK,UAAU,CAAC;wBAC5C,IAAI,SAAS,IAAI,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;4BAC1D,OAAO;yBACV;;AAED,wBAAA,MAAM,WAAW,GAAG,KAAK,EAAE,MAAe,CAAC;wBAC3C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAW,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,CAAY,SAAA,EAAA,KAAK,CAAI,EAAA,CAAA,CAAC,CAAC,CAAC,CAAC;AAC5H,wBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;AAC/B,wBAAA,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBAC/B;oBAAC,OAAO,CAAC,EAAE;AACR,wBAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AACvE,wBAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC/B,OAAO;qBACV;iBACJ;aACJ,CAAA;SACJ;KAC2B,CAAC;AACrC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const invalidateCachePlugin = ({ cache }) => {
|
|
2
|
+
return {
|
|
3
|
+
requestDidStart(requestContext) {
|
|
4
|
+
return {
|
|
5
|
+
async willSendResponse(responseContext) {
|
|
6
|
+
try {
|
|
7
|
+
const hasErrors = !!requestContext.errors?.length;
|
|
8
|
+
const { queriesToInvalidate } = requestContext.context;
|
|
9
|
+
const [{ operation }] = responseContext.document.definitions;
|
|
10
|
+
const isMutation = operation === 'mutation';
|
|
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);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
};export{invalidateCachePlugin};//# sourceMappingURL=invalidateCachePlugin.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invalidateCachePlugin.mjs","sources":["../../src/plugins/invalidateCachePlugin.ts"],"sourcesContent":[null],"names":[],"mappings":"MASa,qBAAqB,GAAG,CAAC,EAAE,KAAK,EAAyB,KAAI;IACtE,OAAO;AACH,QAAA,eAAe,CAAC,cAAc,EAAA;YAC1B,OAAO;gBACH,MAAM,gBAAgB,CAAC,eAAe,EAAA;AAClC,oBAAA,IAAI;wBACA,MAAM,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC;AAClD,wBAAA,MAAM,EAAE,mBAAmB,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC;wBACvD,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,eAAe,CAAC,QAAQ,CAAC,WAAwC,CAAC;AAC1F,wBAAA,MAAM,UAAU,GAAG,SAAS,KAAK,UAAU,CAAC;wBAC5C,IAAI,SAAS,IAAI,CAAC,mBAAmB,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;4BAC1D,OAAO;yBACV;;AAED,wBAAA,MAAM,WAAW,GAAG,KAAK,EAAE,MAAe,CAAC;wBAC3C,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,GAAG,CAAW,mBAAmB,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,CAAY,SAAA,EAAA,KAAK,CAAI,EAAA,CAAA,CAAC,CAAC,CAAC,CAAC;AAC5H,wBAAA,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC;AAC/B,wBAAA,MAAM,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;qBAC/B;oBAAC,OAAO,CAAC,EAAE;AACR,wBAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;AACvE,wBAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;wBAC/B,OAAO;qBACV;iBACJ;aACJ,CAAA;SACJ;KAC2B,CAAC;AACrC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';var express=require('express'),bodyParser=require('body-parser'),error=require('../middleware/error.cjs'),services=require('../middleware/services.cjs'),sentry=require('../middleware/sentry.cjs'),cors=require('../middleware/cors.cjs');function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=='default'){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})}n.default=e;return Object.freeze(n)}var bodyParser__namespace=/*#__PURE__*/_interopNamespaceDefault(bodyParser);/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
+
const cookiesMiddleware = require('universal-cookie-express');
|
|
3
|
+
function expressApp(modules, options, middlewares, http) {
|
|
4
|
+
const app = express();
|
|
5
|
+
for (const applyBeforeware of modules.beforewares) {
|
|
6
|
+
applyBeforeware(app);
|
|
7
|
+
}
|
|
8
|
+
app.use(cookiesMiddleware());
|
|
9
|
+
app.use(services.contextServicesMiddleware(options.createContext, options.serviceContext));
|
|
10
|
+
// Don't rate limit heroku
|
|
11
|
+
app.enable('trust proxy');
|
|
12
|
+
app.use(sentry.sentryMiddleware);
|
|
13
|
+
if (middlewares !== null) {
|
|
14
|
+
app.use(middlewares);
|
|
15
|
+
}
|
|
16
|
+
app.use('/', express.static(__FRONTEND_BUILD_DIR__, { maxAge: '180 days' }));
|
|
17
|
+
app.use(cors.corsMiddleware);
|
|
18
|
+
app.use((req, res, next) => {
|
|
19
|
+
res.header('Access-Control-Allow-Credentials', JSON.stringify(true));
|
|
20
|
+
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
|
|
21
|
+
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, X-CSP-Nonce, Content-Type, Accept');
|
|
22
|
+
next();
|
|
23
|
+
});
|
|
24
|
+
app.use(bodyParser__namespace.json({
|
|
25
|
+
limit: '50mb',
|
|
26
|
+
verify: (req, res, buf) => {
|
|
27
|
+
// #Todo: Find some proper solution for it
|
|
28
|
+
req.rawBody = buf;
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
app.use(bodyParser__namespace.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000 }));
|
|
32
|
+
for (const applyMiddleware of modules.middlewares) {
|
|
33
|
+
applyMiddleware(app);
|
|
34
|
+
}
|
|
35
|
+
if (__DEV__) {
|
|
36
|
+
app.use(error.errorMiddleware);
|
|
37
|
+
}
|
|
38
|
+
app.use(sentry.sentryErrorHandlerMiddleware);
|
|
39
|
+
return app;
|
|
40
|
+
}exports.expressApp=expressApp;//# sourceMappingURL=ExpressApp.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpressApp.cjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":["contextServicesMiddleware","sentryMiddleware","corsMiddleware","bodyParser","errorMiddleware","sentryErrorHandlerMiddleware"],"mappings":"kmBAAA;AAUA,MAAM,iBAAiB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAExD,SAAU,UAAU,CAAC,OAAgB,EAAE,OAAuB,EAAE,WAAW,EAAE,IAAK,EAAA;AACpF,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;AACD,IAAA,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC7B,IAAA,GAAG,CAAC,GAAG,CAACA,kCAAyB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;;AAGlF,IAAA,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE1B,IAAA,GAAG,CAAC,GAAG,CAACC,uBAAgB,CAAC,CAAC;AAE1B,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACtB,QAAA,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACxB;AAED,IAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAE7E,IAAA,GAAG,CAAC,GAAG,CAACC,mBAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;AACvB,QAAA,GAAG,CAAC,MAAM,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAC;AAClE,QAAA,GAAG,CAAC,MAAM,CACN,8BAA8B,EAC9B,6EAA6E,CAChF,CAAC;AACF,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC,CAAC;AAEH,IAAA,GAAG,CAAC,GAAG,CACHC,qBAAU,CAAC,IAAI,CAAC;AACZ,QAAA,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAI;;AAErB,YAAA,GAAW,CAAC,OAAO,GAAG,GAAG,CAAC;SAC9B;AACJ,KAAA,CAAC,CACL,CAAC;IACF,GAAG,CAAC,GAAG,CAACA,qBAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzF,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,IAAI,OAAO,EAAE;AACT,QAAA,GAAG,CAAC,GAAG,CAACC,qBAAe,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,GAAG,CAACC,mCAA4B,CAAC,CAAC;AAEtC,IAAA,OAAO,GAAG,CAAC;AACf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import express from'express';import*as bodyParser from'body-parser';import {errorMiddleware}from'../middleware/error.mjs';import {contextServicesMiddleware}from'../middleware/services.mjs';import {sentryMiddleware,sentryErrorHandlerMiddleware}from'../middleware/sentry.mjs';import {corsMiddleware}from'../middleware/cors.mjs';/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
+
const cookiesMiddleware = require('universal-cookie-express');
|
|
3
|
+
function expressApp(modules, options, middlewares, http) {
|
|
4
|
+
const app = express();
|
|
5
|
+
for (const applyBeforeware of modules.beforewares) {
|
|
6
|
+
applyBeforeware(app);
|
|
7
|
+
}
|
|
8
|
+
app.use(cookiesMiddleware());
|
|
9
|
+
app.use(contextServicesMiddleware(options.createContext, options.serviceContext));
|
|
10
|
+
// Don't rate limit heroku
|
|
11
|
+
app.enable('trust proxy');
|
|
12
|
+
app.use(sentryMiddleware);
|
|
13
|
+
if (middlewares !== null) {
|
|
14
|
+
app.use(middlewares);
|
|
15
|
+
}
|
|
16
|
+
app.use('/', express.static(__FRONTEND_BUILD_DIR__, { maxAge: '180 days' }));
|
|
17
|
+
app.use(corsMiddleware);
|
|
18
|
+
app.use((req, res, next) => {
|
|
19
|
+
res.header('Access-Control-Allow-Credentials', JSON.stringify(true));
|
|
20
|
+
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
|
|
21
|
+
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, X-CSP-Nonce, Content-Type, Accept');
|
|
22
|
+
next();
|
|
23
|
+
});
|
|
24
|
+
app.use(bodyParser.json({
|
|
25
|
+
limit: '50mb',
|
|
26
|
+
verify: (req, res, buf) => {
|
|
27
|
+
// #Todo: Find some proper solution for it
|
|
28
|
+
req.rawBody = buf;
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
31
|
+
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000 }));
|
|
32
|
+
for (const applyMiddleware of modules.middlewares) {
|
|
33
|
+
applyMiddleware(app);
|
|
34
|
+
}
|
|
35
|
+
if (__DEV__) {
|
|
36
|
+
app.use(errorMiddleware);
|
|
37
|
+
}
|
|
38
|
+
app.use(sentryErrorHandlerMiddleware);
|
|
39
|
+
return app;
|
|
40
|
+
}export{expressApp};//# sourceMappingURL=ExpressApp.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExpressApp.mjs","sources":["../../src/servers/ExpressApp.ts"],"sourcesContent":[null],"names":[],"mappings":"sUAAA;AAUA,MAAM,iBAAiB,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAExD,SAAU,UAAU,CAAC,OAAgB,EAAE,OAAuB,EAAE,WAAW,EAAE,IAAK,EAAA;AACpF,IAAA,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;AACD,IAAA,GAAG,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAC7B,IAAA,GAAG,CAAC,GAAG,CAAC,yBAAyB,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC;;AAGlF,IAAA,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAE1B,IAAA,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AAE1B,IAAA,IAAI,WAAW,KAAK,IAAI,EAAE;AACtB,QAAA,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;KACxB;AAED,IAAA,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAE7E,IAAA,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,KAAI;AACvB,QAAA,GAAG,CAAC,MAAM,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AACrE,QAAA,GAAG,CAAC,MAAM,CAAC,8BAA8B,EAAE,qBAAqB,CAAC,CAAC;AAClE,QAAA,GAAG,CAAC,MAAM,CACN,8BAA8B,EAC9B,6EAA6E,CAChF,CAAC;AACF,QAAA,IAAI,EAAE,CAAC;AACX,KAAC,CAAC,CAAC;AAEH,IAAA,GAAG,CAAC,GAAG,CACH,UAAU,CAAC,IAAI,CAAC;AACZ,QAAA,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,KAAI;;AAErB,YAAA,GAAW,CAAC,OAAO,GAAG,GAAG,CAAC;SAC9B;AACJ,KAAA,CAAC,CACL,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAEzF,IAAA,KAAK,MAAM,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE;QAC/C,eAAe,CAAC,GAAG,CAAC,CAAC;KACxB;IAED,IAAI,OAAO,EAAE;AACT,QAAA,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;KAC5B;AAED,IAAA,GAAG,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;AAEtC,IAAA,OAAO,GAAG,CAAC;AACf"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use strict';var apolloServerExpress=require('apollo-server-express'),apolloServerCore=require('apollo-server-core'),responseCachePluginSource=require('apollo-server-plugin-response-cache');require('isomorphic-fetch');var Keyv=require('keyv'),KeyvRedis=require('@keyv/redis'),utils_keyvadapter=require('@apollo/utils.keyvadapter'),invalidateCachePlugin=require('../plugins/invalidateCachePlugin.cjs'),ws=require('ws'),GraphqlWs=require('./GraphqlWs.cjs'),envConfig=require('../config/env-config.cjs');const responseCachePlugin = responseCachePluginSource.default ?? responseCachePluginSource;
|
|
2
|
+
let debug = false;
|
|
3
|
+
if ((process.env.LOG_LEVEL && process.env.LOG_LEVEL === 'trace') || process.env.LOG_LEVEL === 'debug') {
|
|
4
|
+
debug = true;
|
|
5
|
+
}
|
|
6
|
+
// @workaround as the `dataSources` not available in Subscription (websocket) Context.
|
|
7
|
+
// https://github.com/apollographql/apollo-server/issues/1526 need to revisit in Apollo-Server v3.
|
|
8
|
+
const constructDataSourcesForSubscriptions = (context, cache, dataSources) => {
|
|
9
|
+
const intializeDataSource = (instance) => {
|
|
10
|
+
instance.initialize({ context, cache });
|
|
11
|
+
};
|
|
12
|
+
// tslint:disable-next-line:forin
|
|
13
|
+
// eslint-disable-next-line guard-for-in
|
|
14
|
+
for (const prop in dataSources) {
|
|
15
|
+
intializeDataSource(dataSources[prop]);
|
|
16
|
+
}
|
|
17
|
+
return dataSources;
|
|
18
|
+
};
|
|
19
|
+
let wsServerCleanup;
|
|
20
|
+
class GraphqlServer {
|
|
21
|
+
app;
|
|
22
|
+
httpServer;
|
|
23
|
+
cache;
|
|
24
|
+
moduleService;
|
|
25
|
+
enableSubscription;
|
|
26
|
+
logger;
|
|
27
|
+
constructor(app, httpServer, cache, moduleService, enableSubscription = true) {
|
|
28
|
+
this.app = app;
|
|
29
|
+
this.httpServer = httpServer;
|
|
30
|
+
this.cache = cache;
|
|
31
|
+
this.moduleService = moduleService;
|
|
32
|
+
this.enableSubscription = enableSubscription;
|
|
33
|
+
this.logger = this.moduleService.logger.child({ className: 'GraphqlServer' });
|
|
34
|
+
if (enableSubscription) {
|
|
35
|
+
const wsServer = new ws.WebSocketServer({
|
|
36
|
+
server: this.httpServer,
|
|
37
|
+
path: envConfig.config.GRAPHQL_ENDPOINT,
|
|
38
|
+
});
|
|
39
|
+
const graphqlWs = new GraphqlWs.GraphqlWs(wsServer, this.moduleService, this.cache);
|
|
40
|
+
wsServerCleanup = graphqlWs.create();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async initialize() {
|
|
44
|
+
this.logger.info('GraphqlServer initializing...');
|
|
45
|
+
const apolloServer = this.configureApolloServer();
|
|
46
|
+
await apolloServer.start();
|
|
47
|
+
const corsOptions = {
|
|
48
|
+
origin: [envConfig.config.CLIENT_URL],
|
|
49
|
+
credentials: true,
|
|
50
|
+
};
|
|
51
|
+
apolloServer.applyMiddleware({
|
|
52
|
+
app: this.app,
|
|
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, }) => {
|
|
80
|
+
let context;
|
|
81
|
+
let addons = {};
|
|
82
|
+
try {
|
|
83
|
+
if (connection) {
|
|
84
|
+
context = connection.context;
|
|
85
|
+
if (!context.dataSources) {
|
|
86
|
+
addons = {
|
|
87
|
+
// @workaround for apollo server issue #1526
|
|
88
|
+
dataSources: constructDataSourcesForSubscriptions(connection.context, this.cache, this.moduleService.dataSource),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
addons = {
|
|
93
|
+
// @workaround for apollo server issue #1526
|
|
94
|
+
dataSources: context.dataSources,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
const pureContext = await this.moduleService.createContext(req, res);
|
|
100
|
+
const contextServices = await this.moduleService.serviceContext(req, res);
|
|
101
|
+
context = {
|
|
102
|
+
...pureContext,
|
|
103
|
+
...contextServices,
|
|
104
|
+
preferences: this.moduleService.defaultPreferences,
|
|
105
|
+
// update: updateContainers,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
context.userIp = this.getUserIpAddress(req);
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
this.logger.error('Adding context to GraphQL failed', { error: err });
|
|
112
|
+
throw err;
|
|
113
|
+
}
|
|
114
|
+
return {
|
|
115
|
+
req,
|
|
116
|
+
res,
|
|
117
|
+
...context,
|
|
118
|
+
...addons,
|
|
119
|
+
};
|
|
120
|
+
},
|
|
121
|
+
plugins: [
|
|
122
|
+
apolloServerCore.ApolloServerPluginDrainHttpServer({ httpServer: this.httpServer }),
|
|
123
|
+
apolloServerCore.ApolloServerPluginCacheControl(),
|
|
124
|
+
responseCachePlugin({
|
|
125
|
+
sessionId: ({ context }) => context?.userContext?.accountId ?? null,
|
|
126
|
+
generateCacheKey({ queryHash, operationName }, keyData) {
|
|
127
|
+
return `${operationName}:${queryHash}`;
|
|
128
|
+
},
|
|
129
|
+
}),
|
|
130
|
+
invalidateCachePlugin.invalidateCachePlugin({ cache: this.cache }),
|
|
131
|
+
],
|
|
132
|
+
};
|
|
133
|
+
if (this.enableSubscription) {
|
|
134
|
+
serverConfig.plugins.push({
|
|
135
|
+
async serverWillStart() {
|
|
136
|
+
return {
|
|
137
|
+
drainServer: async () => {
|
|
138
|
+
await wsServerCleanup.dispose();
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
return new apolloServerExpress.ApolloServer(serverConfig);
|
|
145
|
+
}
|
|
146
|
+
}exports.GraphqlServer=GraphqlServer;//# sourceMappingURL=GraphqlServer.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphqlServer.cjs","sources":["../../src/servers/GraphqlServer.ts"],"sourcesContent":[null],"names":["WebSocketServer","config","GraphqlWs","KeyvAdapter","ApolloServerPluginDrainHttpServer","ApolloServerPluginCacheControl","invalidateCachePlugin","ApolloServer"],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
2
|
+
import 'isomorphic-fetch';
|
|
3
|
+
import { Express } from 'express';
|
|
4
|
+
import * as http from 'http';
|
|
5
|
+
import { RedisCache, RedisClusterCache } from 'apollo-server-cache-redis';
|
|
6
|
+
import { IModuleService } from '../interfaces';
|
|
7
|
+
export declare class GraphqlServer {
|
|
8
|
+
private app;
|
|
9
|
+
private httpServer;
|
|
10
|
+
private cache;
|
|
11
|
+
private moduleService;
|
|
12
|
+
private enableSubscription;
|
|
13
|
+
private logger;
|
|
14
|
+
constructor(app: Express, httpServer: http.Server, cache: RedisCache | RedisClusterCache, moduleService: IModuleService, enableSubscription?: boolean);
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
getUserIpAddress(req: any): any;
|
|
17
|
+
private configureApolloServer;
|
|
18
|
+
}
|