@common-stack/server-stack 5.0.4-alpha.0 → 5.0.4-alpha.12
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 +10 -0
- package/lib/api/resolver.cjs.map +1 -0
- package/lib/api/resolver.d.ts +10 -0
- package/lib/api/resolver.mjs +10 -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 +5 -0
- package/lib/middleware/sentry.cjs.map +1 -0
- package/lib/middleware/sentry.d.ts +2 -0
- package/lib/middleware/sentry.mjs +5 -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 +145 -0
- package/lib/servers/GraphqlServer.cjs.map +1 -0
- package/lib/servers/GraphqlServer.d.ts +18 -0
- package/lib/servers/GraphqlServer.mjs +145 -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 +25 -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,14 @@
|
|
|
1
|
+
'use strict';var graphql=require('graphql');// add any scalar types
|
|
2
|
+
// https://stackoverflow.com/questions/41557536/custom-map-keys-in-graphql-response
|
|
3
|
+
const GraphQLAnyObject = new graphql.GraphQLScalarType({
|
|
4
|
+
name: 'AnyObject',
|
|
5
|
+
description: 'Any JSON object. This type bypasses type checking.',
|
|
6
|
+
serialize: (value) => value,
|
|
7
|
+
parseValue: (value) => value,
|
|
8
|
+
parseLiteral: (ast) => {
|
|
9
|
+
if (ast.kind !== graphql.Kind.OBJECT) {
|
|
10
|
+
throw new graphql.GraphQLError(`Query error: Can only parse object but got a: ${ast.kind}`, [ast]);
|
|
11
|
+
}
|
|
12
|
+
return ast.fields;
|
|
13
|
+
},
|
|
14
|
+
});exports.GraphQLAnyObject=GraphQLAnyObject;//# sourceMappingURL=scalar.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar.cjs","sources":["../../src/api/scalar.ts"],"sourcesContent":[null],"names":["GraphQLScalarType","Kind","GraphQLError"],"mappings":"4CAAA;AAGA;AACa,MAAA,gBAAgB,GAAG,IAAIA,yBAAiB,CAAC;AAClD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,EAAE,oDAAoD;AACjE,IAAA,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK;AAC3B,IAAA,UAAU,EAAE,CAAC,KAAK,KAAK,KAAK;AAC5B,IAAA,YAAY,EAAE,CAAC,GAAG,KAAI;QAClB,IAAI,GAAG,CAAC,IAAI,KAAKC,YAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,MAAM,IAAIC,oBAAY,CAAC,CAAA,8CAAA,EAAiD,GAAG,CAAC,IAAI,CAAA,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9F;QACD,OAAO,GAAG,CAAC,MAAM,CAAC;KACrB;AACJ,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {GraphQLScalarType,Kind,GraphQLError}from'graphql';// add any scalar types
|
|
2
|
+
// https://stackoverflow.com/questions/41557536/custom-map-keys-in-graphql-response
|
|
3
|
+
const GraphQLAnyObject = new GraphQLScalarType({
|
|
4
|
+
name: 'AnyObject',
|
|
5
|
+
description: 'Any JSON object. This type bypasses type checking.',
|
|
6
|
+
serialize: (value) => value,
|
|
7
|
+
parseValue: (value) => value,
|
|
8
|
+
parseLiteral: (ast) => {
|
|
9
|
+
if (ast.kind !== Kind.OBJECT) {
|
|
10
|
+
throw new GraphQLError(`Query error: Can only parse object but got a: ${ast.kind}`, [ast]);
|
|
11
|
+
}
|
|
12
|
+
return ast.fields;
|
|
13
|
+
},
|
|
14
|
+
});export{GraphQLAnyObject};//# sourceMappingURL=scalar.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalar.mjs","sources":["../../src/api/scalar.ts"],"sourcesContent":[null],"names":[],"mappings":"0DAAA;AAGA;AACa,MAAA,gBAAgB,GAAG,IAAI,iBAAiB,CAAC;AAClD,IAAA,IAAI,EAAE,WAAW;AACjB,IAAA,WAAW,EAAE,oDAAoD;AACjE,IAAA,SAAS,EAAE,CAAC,KAAK,KAAK,KAAK;AAC3B,IAAA,UAAU,EAAE,CAAC,KAAK,KAAK,KAAK;AAC5B,IAAA,YAAY,EAAE,CAAC,GAAG,KAAI;QAClB,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,MAAM,EAAE;AAC1B,YAAA,MAAM,IAAI,YAAY,CAAC,CAAA,8CAAA,EAAiD,GAAG,CAAC,IAAI,CAAA,CAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;SAC9F;QACD,OAAO,GAAG,CAAC,MAAM,CAAC;KACrB;AACJ,CAAA"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
'use strict';var fs=require('fs'),path=require('path'),stitch=require('@graphql-tools/stitch'),schema=require('@graphql-tools/schema'),links=require('@graphql-tools/links'),wrap=require('@graphql-tools/wrap'),ws$1=require('ws'),utilities=require('@apollo/client/utilities'),ws=require('@apollo/client/link/ws'),index_js=require('@apollo/client/index.js'),serverCore=require('@common-stack/server-core'),http=require('@apollo/client/link/http'),fetch=require('isomorphic-fetch'),graphqlShield=require('graphql-shield'),graphqlMiddleware=require('graphql-middleware'),remoteConfig=require('./remote-config.cjs'),rootSchema=require('./root-schema.graphqls.cjs'),resolver=require('./resolver.cjs'),utils=require('./utils.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 fs__namespace=/*#__PURE__*/_interopNamespaceDefault(fs);var path__namespace=/*#__PURE__*/_interopNamespaceDefault(path);var ws__namespace=/*#__PURE__*/_interopNamespaceDefault(ws$1);var fetch__namespace=/*#__PURE__*/_interopNamespaceDefault(fetch);/* eslint-disable class-methods-use-this */
|
|
2
|
+
/* eslint-disable no-useless-constructor */
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
|
+
class GatewaySchemaBuilder {
|
|
5
|
+
options;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
async build() {
|
|
10
|
+
let gatewaySchema;
|
|
11
|
+
let ownSchema;
|
|
12
|
+
try {
|
|
13
|
+
ownSchema = this.createOwnSchema();
|
|
14
|
+
const remoteSchema = await this.load();
|
|
15
|
+
// techSchema = this.patchSchema(techSchema, 'TechService');
|
|
16
|
+
gatewaySchema = stitch.stitchSchemas({
|
|
17
|
+
subschemas: [ownSchema],
|
|
18
|
+
});
|
|
19
|
+
// Apply middleware to the schema
|
|
20
|
+
if (this.options.middlewares && this.options.middlewares.length > 0) {
|
|
21
|
+
gatewaySchema = graphqlMiddleware.applyMiddleware(gatewaySchema, ...this.options.middlewares, graphqlShield.shield(this.options.rules || {}, {
|
|
22
|
+
allowExternalErrors: true,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
// TODO after updating graphql-tools to v8
|
|
26
|
+
// addErrorLoggingToSchema(schema, { log: (e) => logger.error(e as Error) });
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
serverCore.logger.error('[Graphql Schema Errors] when building schema:', err.message);
|
|
30
|
+
gatewaySchema = ownSchema;
|
|
31
|
+
}
|
|
32
|
+
return gatewaySchema;
|
|
33
|
+
}
|
|
34
|
+
async load() {
|
|
35
|
+
const schemas = [];
|
|
36
|
+
// eslint-disable-next-line no-plusplus
|
|
37
|
+
for (let i = 0; i < remoteConfig.remoteSchemaDetails.length; i++) {
|
|
38
|
+
// eslint-disable-next-line no-await-in-loop
|
|
39
|
+
const schema = await this.loadRemoteSchema(remoteConfig.remoteSchemaDetails[i]);
|
|
40
|
+
schemas.push(schema);
|
|
41
|
+
}
|
|
42
|
+
return schemas;
|
|
43
|
+
}
|
|
44
|
+
async createRemoteSchema(service, iteration) {
|
|
45
|
+
serverCore.logger.info('Fetch service [%s] iteration [%s]', service, iteration);
|
|
46
|
+
const services = remoteConfig.remoteSchemaDetails;
|
|
47
|
+
if (!services.length) {
|
|
48
|
+
console.warn(`Service ${services} is undefined`);
|
|
49
|
+
if (iteration && iteration > 2) {
|
|
50
|
+
return Promise.reject(`tried upto ${iteration} attempts, now failing...`);
|
|
51
|
+
}
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
const timeout = iteration ? 1000 * iteration : 1000;
|
|
54
|
+
serverCore.logger.info('Wait for service startup %s', timeout);
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
this.createRemoteSchema(service, iteration ? iteration + 1 : 1)
|
|
57
|
+
.then(resolve)
|
|
58
|
+
.catch(reject);
|
|
59
|
+
}, timeout);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// instead need to loop it
|
|
63
|
+
// https://github.com/j-colter/graphql-gateway/blob/9c64d90a74727d2002d10b06f47e1f4a316070fc/src/schema.js#L50
|
|
64
|
+
const url = services[0].uri;
|
|
65
|
+
serverCore.logger.info('fetch service [%s]', url);
|
|
66
|
+
// 1. Create apollo Link that's connected to the underlying GraphQL API
|
|
67
|
+
const link = new http.HttpLink({ uri: url, fetch: fetch__namespace });
|
|
68
|
+
const executor = links.linkToExecutor(link);
|
|
69
|
+
// 2. Retrieve schema definition of the underlying GraphQL API
|
|
70
|
+
const remoteSchema = await wrap.introspectSchema(link);
|
|
71
|
+
// 3. Create the executable schema based on schema definition and Apollo Link
|
|
72
|
+
return wrap.wrapSchema({
|
|
73
|
+
schema: remoteSchema,
|
|
74
|
+
executor,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async loadRemoteSchema({ uri, wsUri }) {
|
|
78
|
+
try {
|
|
79
|
+
const httpLink = new http.HttpLink({ uri, fetch: fetch__namespace });
|
|
80
|
+
let link = null;
|
|
81
|
+
if (wsUri) {
|
|
82
|
+
const wsLink = new ws.WebSocketLink({
|
|
83
|
+
uri: wsUri,
|
|
84
|
+
options: {
|
|
85
|
+
reconnect: true,
|
|
86
|
+
},
|
|
87
|
+
webSocketImpl: ws__namespace,
|
|
88
|
+
});
|
|
89
|
+
link = index_js.split(
|
|
90
|
+
// split based on operatino type
|
|
91
|
+
({ query }) => {
|
|
92
|
+
const { kind, operation } = utilities.getMainDefinition(query);
|
|
93
|
+
return kind === 'OperationDefinition' && operation === 'subscription';
|
|
94
|
+
}, wsLink, httpLink);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
link = httpLink;
|
|
98
|
+
}
|
|
99
|
+
const executor = links.linkToExecutor(link);
|
|
100
|
+
const remoteSchema = await wrap.introspectSchema(link);
|
|
101
|
+
const executableSchema = wrap.wrapSchema({
|
|
102
|
+
schema: remoteSchema,
|
|
103
|
+
executor,
|
|
104
|
+
});
|
|
105
|
+
return executableSchema;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
this.options.logger.error('fetching schema error: ', err);
|
|
109
|
+
return {};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// disabled after updating to apollo-client to v3 and graphql-tools to v8
|
|
113
|
+
// private patchSchema(schema: GraphQLSchema, systemName: string) {
|
|
114
|
+
// return transformSchema(schema, [
|
|
115
|
+
// new RenameTypes((name: string) => (name === 'StatusInfo' ? `${systemName}StatusInfo` : undefined)),
|
|
116
|
+
// new RenameRootFields((_operation: string, name: string) =>
|
|
117
|
+
// name === 'status'
|
|
118
|
+
// ? `${systemName.substring(0, 1).toLowerCase()}${systemName.substring(1)}Status`
|
|
119
|
+
// : name,
|
|
120
|
+
// ),
|
|
121
|
+
// ]);
|
|
122
|
+
// }
|
|
123
|
+
createOwnSchema() {
|
|
124
|
+
const typeDefs = [rootSchema.default, this.options.schema].join('\n');
|
|
125
|
+
if (__DEV__) {
|
|
126
|
+
// @ts-ignore
|
|
127
|
+
import('@src/modules/module').then(({ ExternalModules }) => {
|
|
128
|
+
const externalSchema = ExternalModules?.schemas || ``;
|
|
129
|
+
const writeData = `${externalSchema}`;
|
|
130
|
+
const filePath = path__namespace.join(process.cwd(), 'generated-schema.graphql');
|
|
131
|
+
fs__namespace.writeFileSync(filePath, writeData);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
let mergedSchema = schema.makeExecutableSchema({
|
|
135
|
+
resolvers: [resolver.resolvers, this.options.resolvers],
|
|
136
|
+
typeDefs,
|
|
137
|
+
resolverValidationOptions: {
|
|
138
|
+
requireResolversForResolveType: 'warn',
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
// mergedSchema = this.options.directives.reduce((curSchema,transform) => transform(curSchema), mergedSchema);
|
|
142
|
+
if (this.options.directiveResolvers && Object.keys(this.options.directiveResolvers).length !== 0) {
|
|
143
|
+
this.options.logger.warn('directiveResolvers deprecated replaced with directives');
|
|
144
|
+
mergedSchema = utils.attachDirectiveResolvers(mergedSchema, this.options.directiveResolvers);
|
|
145
|
+
}
|
|
146
|
+
return mergedSchema;
|
|
147
|
+
}
|
|
148
|
+
}exports.GatewaySchemaBuilder=GatewaySchemaBuilder;//# sourceMappingURL=schema-builder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-builder.cjs","sources":["../../src/api/schema-builder.ts"],"sourcesContent":[null],"names":["stitchSchemas","applyMiddleware","shield","logger","remoteSchemaDetails","HttpLink","fetch","linkToExecutor","introspectSchema","wrapSchema","WebSocketLink","ws","split","getMainDefinition","rootSchemaDef","path","fs","makeExecutableSchema","rootResolver","attachDirectiveResolvers"],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { GraphQLSchema } from 'graphql';
|
|
2
|
+
import { IGraphqlShieldRules } from '@common-stack/server-core';
|
|
3
|
+
import { CdmLogger } from '@cdm-logger/core';
|
|
4
|
+
interface IGraphqlOptions {
|
|
5
|
+
schema: string | string[];
|
|
6
|
+
resolvers: any;
|
|
7
|
+
directives: any[];
|
|
8
|
+
directiveResolvers: {
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
};
|
|
11
|
+
middlewares: any[];
|
|
12
|
+
rules?: IGraphqlShieldRules;
|
|
13
|
+
logger: CdmLogger.ILogger;
|
|
14
|
+
}
|
|
15
|
+
export declare class GatewaySchemaBuilder {
|
|
16
|
+
private options;
|
|
17
|
+
constructor(options: IGraphqlOptions);
|
|
18
|
+
build(): Promise<GraphQLSchema>;
|
|
19
|
+
private load;
|
|
20
|
+
private createRemoteSchema;
|
|
21
|
+
private loadRemoteSchema;
|
|
22
|
+
private createOwnSchema;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import*as fs from'fs';import*as path from'path';import {stitchSchemas}from'@graphql-tools/stitch';import {makeExecutableSchema}from'@graphql-tools/schema';import {linkToExecutor}from'@graphql-tools/links';import {introspectSchema,wrapSchema}from'@graphql-tools/wrap';import*as ws from'ws';import {getMainDefinition}from'@apollo/client/utilities';import {WebSocketLink}from'@apollo/client/link/ws';import {split}from'@apollo/client/index.js';import {logger}from'@common-stack/server-core';import {HttpLink}from'@apollo/client/link/http';import*as fetch from'isomorphic-fetch';import {shield}from'graphql-shield';import {applyMiddleware}from'graphql-middleware';import {remoteSchemaDetails}from'./remote-config.mjs';import rootSchemaDef from'./root-schema.graphqls.mjs';import {resolvers}from'./resolver.mjs';import {attachDirectiveResolvers}from'./utils.mjs';/* eslint-disable class-methods-use-this */
|
|
2
|
+
/* eslint-disable no-useless-constructor */
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
|
+
class GatewaySchemaBuilder {
|
|
5
|
+
options;
|
|
6
|
+
constructor(options) {
|
|
7
|
+
this.options = options;
|
|
8
|
+
}
|
|
9
|
+
async build() {
|
|
10
|
+
let gatewaySchema;
|
|
11
|
+
let ownSchema;
|
|
12
|
+
try {
|
|
13
|
+
ownSchema = this.createOwnSchema();
|
|
14
|
+
const remoteSchema = await this.load();
|
|
15
|
+
// techSchema = this.patchSchema(techSchema, 'TechService');
|
|
16
|
+
gatewaySchema = stitchSchemas({
|
|
17
|
+
subschemas: [ownSchema],
|
|
18
|
+
});
|
|
19
|
+
// Apply middleware to the schema
|
|
20
|
+
if (this.options.middlewares && this.options.middlewares.length > 0) {
|
|
21
|
+
gatewaySchema = applyMiddleware(gatewaySchema, ...this.options.middlewares, shield(this.options.rules || {}, {
|
|
22
|
+
allowExternalErrors: true,
|
|
23
|
+
}));
|
|
24
|
+
}
|
|
25
|
+
// TODO after updating graphql-tools to v8
|
|
26
|
+
// addErrorLoggingToSchema(schema, { log: (e) => logger.error(e as Error) });
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
logger.error('[Graphql Schema Errors] when building schema:', err.message);
|
|
30
|
+
gatewaySchema = ownSchema;
|
|
31
|
+
}
|
|
32
|
+
return gatewaySchema;
|
|
33
|
+
}
|
|
34
|
+
async load() {
|
|
35
|
+
const schemas = [];
|
|
36
|
+
// eslint-disable-next-line no-plusplus
|
|
37
|
+
for (let i = 0; i < remoteSchemaDetails.length; i++) {
|
|
38
|
+
// eslint-disable-next-line no-await-in-loop
|
|
39
|
+
const schema = await this.loadRemoteSchema(remoteSchemaDetails[i]);
|
|
40
|
+
schemas.push(schema);
|
|
41
|
+
}
|
|
42
|
+
return schemas;
|
|
43
|
+
}
|
|
44
|
+
async createRemoteSchema(service, iteration) {
|
|
45
|
+
logger.info('Fetch service [%s] iteration [%s]', service, iteration);
|
|
46
|
+
const services = remoteSchemaDetails;
|
|
47
|
+
if (!services.length) {
|
|
48
|
+
console.warn(`Service ${services} is undefined`);
|
|
49
|
+
if (iteration && iteration > 2) {
|
|
50
|
+
return Promise.reject(`tried upto ${iteration} attempts, now failing...`);
|
|
51
|
+
}
|
|
52
|
+
return new Promise((resolve, reject) => {
|
|
53
|
+
const timeout = iteration ? 1000 * iteration : 1000;
|
|
54
|
+
logger.info('Wait for service startup %s', timeout);
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
this.createRemoteSchema(service, iteration ? iteration + 1 : 1)
|
|
57
|
+
.then(resolve)
|
|
58
|
+
.catch(reject);
|
|
59
|
+
}, timeout);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
// instead need to loop it
|
|
63
|
+
// https://github.com/j-colter/graphql-gateway/blob/9c64d90a74727d2002d10b06f47e1f4a316070fc/src/schema.js#L50
|
|
64
|
+
const url = services[0].uri;
|
|
65
|
+
logger.info('fetch service [%s]', url);
|
|
66
|
+
// 1. Create apollo Link that's connected to the underlying GraphQL API
|
|
67
|
+
const link = new HttpLink({ uri: url, fetch });
|
|
68
|
+
const executor = linkToExecutor(link);
|
|
69
|
+
// 2. Retrieve schema definition of the underlying GraphQL API
|
|
70
|
+
const remoteSchema = await introspectSchema(link);
|
|
71
|
+
// 3. Create the executable schema based on schema definition and Apollo Link
|
|
72
|
+
return wrapSchema({
|
|
73
|
+
schema: remoteSchema,
|
|
74
|
+
executor,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
async loadRemoteSchema({ uri, wsUri }) {
|
|
78
|
+
try {
|
|
79
|
+
const httpLink = new HttpLink({ uri, fetch });
|
|
80
|
+
let link = null;
|
|
81
|
+
if (wsUri) {
|
|
82
|
+
const wsLink = new WebSocketLink({
|
|
83
|
+
uri: wsUri,
|
|
84
|
+
options: {
|
|
85
|
+
reconnect: true,
|
|
86
|
+
},
|
|
87
|
+
webSocketImpl: ws,
|
|
88
|
+
});
|
|
89
|
+
link = split(
|
|
90
|
+
// split based on operatino type
|
|
91
|
+
({ query }) => {
|
|
92
|
+
const { kind, operation } = getMainDefinition(query);
|
|
93
|
+
return kind === 'OperationDefinition' && operation === 'subscription';
|
|
94
|
+
}, wsLink, httpLink);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
link = httpLink;
|
|
98
|
+
}
|
|
99
|
+
const executor = linkToExecutor(link);
|
|
100
|
+
const remoteSchema = await introspectSchema(link);
|
|
101
|
+
const executableSchema = wrapSchema({
|
|
102
|
+
schema: remoteSchema,
|
|
103
|
+
executor,
|
|
104
|
+
});
|
|
105
|
+
return executableSchema;
|
|
106
|
+
}
|
|
107
|
+
catch (err) {
|
|
108
|
+
this.options.logger.error('fetching schema error: ', err);
|
|
109
|
+
return {};
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
// disabled after updating to apollo-client to v3 and graphql-tools to v8
|
|
113
|
+
// private patchSchema(schema: GraphQLSchema, systemName: string) {
|
|
114
|
+
// return transformSchema(schema, [
|
|
115
|
+
// new RenameTypes((name: string) => (name === 'StatusInfo' ? `${systemName}StatusInfo` : undefined)),
|
|
116
|
+
// new RenameRootFields((_operation: string, name: string) =>
|
|
117
|
+
// name === 'status'
|
|
118
|
+
// ? `${systemName.substring(0, 1).toLowerCase()}${systemName.substring(1)}Status`
|
|
119
|
+
// : name,
|
|
120
|
+
// ),
|
|
121
|
+
// ]);
|
|
122
|
+
// }
|
|
123
|
+
createOwnSchema() {
|
|
124
|
+
const typeDefs = [rootSchemaDef, this.options.schema].join('\n');
|
|
125
|
+
if (__DEV__) {
|
|
126
|
+
// @ts-ignore
|
|
127
|
+
import('@src/modules/module').then(({ ExternalModules }) => {
|
|
128
|
+
const externalSchema = ExternalModules?.schemas || ``;
|
|
129
|
+
const writeData = `${externalSchema}`;
|
|
130
|
+
const filePath = path.join(process.cwd(), 'generated-schema.graphql');
|
|
131
|
+
fs.writeFileSync(filePath, writeData);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
let mergedSchema = makeExecutableSchema({
|
|
135
|
+
resolvers: [resolvers, this.options.resolvers],
|
|
136
|
+
typeDefs,
|
|
137
|
+
resolverValidationOptions: {
|
|
138
|
+
requireResolversForResolveType: 'warn',
|
|
139
|
+
},
|
|
140
|
+
});
|
|
141
|
+
// mergedSchema = this.options.directives.reduce((curSchema,transform) => transform(curSchema), mergedSchema);
|
|
142
|
+
if (this.options.directiveResolvers && Object.keys(this.options.directiveResolvers).length !== 0) {
|
|
143
|
+
this.options.logger.warn('directiveResolvers deprecated replaced with directives');
|
|
144
|
+
mergedSchema = attachDirectiveResolvers(mergedSchema, this.options.directiveResolvers);
|
|
145
|
+
}
|
|
146
|
+
return mergedSchema;
|
|
147
|
+
}
|
|
148
|
+
}export{GatewaySchemaBuilder};//# sourceMappingURL=schema-builder.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-builder.mjs","sources":["../../src/api/schema-builder.ts"],"sourcesContent":[null],"names":["rootResolver"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';var graphql=require('graphql'),utils=require('@graphql-tools/utils');function attachDirectiveResolvers(schema, directiveResolvers) {
|
|
2
|
+
// ... argument validation ...
|
|
3
|
+
return utils.mapSchema(schema, {
|
|
4
|
+
[utils.MapperKind.OBJECT_FIELD]: (fieldConfig) => {
|
|
5
|
+
const newFieldConfig = { ...fieldConfig };
|
|
6
|
+
const directives = utils.getDirectives(schema, fieldConfig);
|
|
7
|
+
for (const directive of directives) {
|
|
8
|
+
const directiveName = directive.name;
|
|
9
|
+
if (directiveResolvers[directiveName]) {
|
|
10
|
+
const resolver = directiveResolvers[directiveName];
|
|
11
|
+
const originalResolver = newFieldConfig.resolve != null ? newFieldConfig.resolve : graphql.defaultFieldResolver;
|
|
12
|
+
const directiveArgs = directive.args;
|
|
13
|
+
newFieldConfig.resolve = (source, originalArgs, context, info) => {
|
|
14
|
+
return resolver(() => new Promise((resolve, reject) => {
|
|
15
|
+
const result = originalResolver(source, originalArgs, context, info);
|
|
16
|
+
if (result instanceof Error) {
|
|
17
|
+
reject(result);
|
|
18
|
+
}
|
|
19
|
+
resolve(result);
|
|
20
|
+
}), source, directiveArgs, context, info);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return newFieldConfig;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}exports.attachDirectiveResolvers=attachDirectiveResolvers;//# sourceMappingURL=utils.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.cjs","sources":["../../src/api/utils.ts"],"sourcesContent":[null],"names":["mapSchema","MapperKind","getDirectives","defaultFieldResolver"],"mappings":"kFAGgB,SAAA,wBAAwB,CACpC,MAAqB,EACrB,kBAA6C,EAAA;;IAI7C,OAAOA,eAAS,CAAC,MAAM,EAAE;QACrB,CAACC,gBAAU,CAAC,YAAY,GAAG,CAAC,WAAW,KAAI;AACvC,YAAA,MAAM,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;YAE1C,MAAM,UAAU,GAAGC,mBAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACtD,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAChC,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;AACrC,gBAAA,IAAI,kBAAkB,CAAC,aAAa,CAAC,EAAE;AACnC,oBAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;AACnD,oBAAA,MAAM,gBAAgB,GAClB,cAAc,CAAC,OAAO,IAAI,IAAI,GAAG,cAAc,CAAC,OAAO,GAAGC,4BAAoB,CAAC;AACnF,oBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;AACrC,oBAAA,cAAc,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,KAAI;AAC7D,wBAAA,OAAO,QAAQ,CACX,MACI,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC5B,4BAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrE,4BAAA,IAAI,MAAM,YAAY,KAAK,EAAE;gCACzB,MAAM,CAAC,MAAM,CAAC,CAAC;6BAClB;4BACD,OAAO,CAAC,MAAM,CAAC,CAAC;yBACnB,CAAC,EACN,MAAM,EACN,aAAa,EACb,OAAO,EACP,IAAI,CACP,CAAC;AACN,qBAAC,CAAC;iBACL;aACJ;AAED,YAAA,OAAO,cAAc,CAAC;SACzB;AACJ,KAAA,CAAC,CAAC;AACP"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import {defaultFieldResolver}from'graphql';import {mapSchema,MapperKind,getDirectives}from'@graphql-tools/utils';function attachDirectiveResolvers(schema, directiveResolvers) {
|
|
2
|
+
// ... argument validation ...
|
|
3
|
+
return mapSchema(schema, {
|
|
4
|
+
[MapperKind.OBJECT_FIELD]: (fieldConfig) => {
|
|
5
|
+
const newFieldConfig = { ...fieldConfig };
|
|
6
|
+
const directives = getDirectives(schema, fieldConfig);
|
|
7
|
+
for (const directive of directives) {
|
|
8
|
+
const directiveName = directive.name;
|
|
9
|
+
if (directiveResolvers[directiveName]) {
|
|
10
|
+
const resolver = directiveResolvers[directiveName];
|
|
11
|
+
const originalResolver = newFieldConfig.resolve != null ? newFieldConfig.resolve : defaultFieldResolver;
|
|
12
|
+
const directiveArgs = directive.args;
|
|
13
|
+
newFieldConfig.resolve = (source, originalArgs, context, info) => {
|
|
14
|
+
return resolver(() => new Promise((resolve, reject) => {
|
|
15
|
+
const result = originalResolver(source, originalArgs, context, info);
|
|
16
|
+
if (result instanceof Error) {
|
|
17
|
+
reject(result);
|
|
18
|
+
}
|
|
19
|
+
resolve(result);
|
|
20
|
+
}), source, directiveArgs, context, info);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return newFieldConfig;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}export{attachDirectiveResolvers};//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","sources":["../../src/api/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"iHAGgB,SAAA,wBAAwB,CACpC,MAAqB,EACrB,kBAA6C,EAAA;;IAI7C,OAAO,SAAS,CAAC,MAAM,EAAE;QACrB,CAAC,UAAU,CAAC,YAAY,GAAG,CAAC,WAAW,KAAI;AACvC,YAAA,MAAM,cAAc,GAAG,EAAE,GAAG,WAAW,EAAE,CAAC;YAE1C,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AACtD,YAAA,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE;AAChC,gBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;AACrC,gBAAA,IAAI,kBAAkB,CAAC,aAAa,CAAC,EAAE;AACnC,oBAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;AACnD,oBAAA,MAAM,gBAAgB,GAClB,cAAc,CAAC,OAAO,IAAI,IAAI,GAAG,cAAc,CAAC,OAAO,GAAG,oBAAoB,CAAC;AACnF,oBAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;AACrC,oBAAA,cAAc,CAAC,OAAO,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,KAAI;AAC7D,wBAAA,OAAO,QAAQ,CACX,MACI,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAC5B,4BAAA,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AACrE,4BAAA,IAAI,MAAM,YAAY,KAAK,EAAE;gCACzB,MAAM,CAAC,MAAM,CAAC,CAAC;6BAClB;4BACD,OAAO,CAAC,MAAM,CAAC,CAAC;yBACnB,CAAC,EACN,MAAM,EACN,aAAa,EACb,OAAO,EACP,IAAI,CACP,CAAC;AACN,qBAAC,CAAC;iBACL;aACJ;AAED,YAAA,OAAO,cAAc,CAAC;SACzB;AACJ,KAAA,CAAC,CAAC;AACP"}
|
|
@@ -6,6 +6,10 @@ const config = envalid__namespace.cleanEnv(process.env,
|
|
|
6
6
|
NATS_URL: str(),
|
|
7
7
|
NATS_USER: str(),
|
|
8
8
|
NATS_PW: str(),
|
|
9
|
+
GRAPHQL_ENDPOINT: str({ default: '/graphql', devDefault: __GRAPHQL_ENDPOINT__ }),
|
|
10
|
+
BACKEND_URL: str({ devDefault: __BACKEND_URL__ }),
|
|
11
|
+
GRAPHQL_URL: str({ devDefault: __GRAPHQL_URL__ }),
|
|
12
|
+
CLIENT_URL: str({ devDefault: __BACKEND_URL__ }),
|
|
9
13
|
MONGO_URL: str(),
|
|
10
14
|
REDIS_CLUSTER_URL: json({
|
|
11
15
|
devDefault: '[{"port":6379,"host":"localhost"}]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.cjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":["envalid"],"mappings":"gZAEA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAGA,kBAAO,CAAC;AAEvB,MAAA,MAAM,GAAGA,kBAAO,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG;AACX;AACA;IACI,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE;IACf,SAAS,EAAE,GAAG,EAAE;IAChB,OAAO,EAAE,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"env-config.cjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":["envalid"],"mappings":"gZAEA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAGA,kBAAO,CAAC;AAEvB,MAAA,MAAM,GAAGA,kBAAO,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG;AACX;AACA;IACI,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE;IACf,SAAS,EAAE,GAAG,EAAE;IAChB,OAAO,EAAE,GAAG,EAAE;AACd,IAAA,gBAAgB,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC;IAChF,WAAW,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACjD,WAAW,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACjD,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAChD,SAAS,EAAE,GAAG,EAAE;IAChB,iBAAiB,EAAE,IAAI,CAAC;AACpB,QAAA,UAAU,EAAE,oCAAoC;AAChD,QAAA,OAAO,EAAE,oCAAoC;KAChD,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC3C,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClD,sBAAsB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACnD,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtC,IAAA,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3E"}
|
|
@@ -4,6 +4,10 @@ export declare const config: Readonly<{
|
|
|
4
4
|
NATS_URL: string;
|
|
5
5
|
NATS_USER: string;
|
|
6
6
|
NATS_PW: string;
|
|
7
|
+
GRAPHQL_ENDPOINT: string;
|
|
8
|
+
BACKEND_URL: string;
|
|
9
|
+
GRAPHQL_URL: string;
|
|
10
|
+
CLIENT_URL: string;
|
|
7
11
|
MONGO_URL: string;
|
|
8
12
|
REDIS_CLUSTER_URL: string;
|
|
9
13
|
REDIS_URL: string;
|
|
@@ -6,6 +6,10 @@ const config = envalid.cleanEnv(process.env,
|
|
|
6
6
|
NATS_URL: str(),
|
|
7
7
|
NATS_USER: str(),
|
|
8
8
|
NATS_PW: str(),
|
|
9
|
+
GRAPHQL_ENDPOINT: str({ default: '/graphql', devDefault: __GRAPHQL_ENDPOINT__ }),
|
|
10
|
+
BACKEND_URL: str({ devDefault: __BACKEND_URL__ }),
|
|
11
|
+
GRAPHQL_URL: str({ devDefault: __GRAPHQL_URL__ }),
|
|
12
|
+
CLIENT_URL: str({ devDefault: __BACKEND_URL__ }),
|
|
9
13
|
MONGO_URL: str(),
|
|
10
14
|
REDIS_CLUSTER_URL: json({
|
|
11
15
|
devDefault: '[{"port":6379,"host":"localhost"}]',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env-config.mjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"gCAEA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEvB,MAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG;AACX;AACA;IACI,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE;IACf,SAAS,EAAE,GAAG,EAAE;IAChB,OAAO,EAAE,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"env-config.mjs","sources":["../../src/config/env-config.ts"],"sourcesContent":[null],"names":[],"mappings":"gCAEA,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;AAEvB,MAAA,MAAM,GAAG,OAAO,CAAC,QAAQ,CAClC,OAAO,CAAC,GAAG;AACX;AACA;IACI,QAAQ,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,EAAE,CAAC;IACnG,QAAQ,EAAE,GAAG,EAAE;IACf,SAAS,EAAE,GAAG,EAAE;IAChB,OAAO,EAAE,GAAG,EAAE;AACd,IAAA,gBAAgB,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC;IAChF,WAAW,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACjD,WAAW,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACjD,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IAChD,SAAS,EAAE,GAAG,EAAE;IAChB,iBAAiB,EAAE,IAAI,CAAC;AACpB,QAAA,UAAU,EAAE,oCAAoC;AAChD,QAAA,OAAO,EAAE,oCAAoC;KAChD,CAAC;IACF,SAAS,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC3C,qBAAqB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAClD,sBAAsB,EAAE,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;IAClD,aAAa,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,eAAe,EAAE,CAAC;IACnD,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AACtC,IAAA,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;CAC3E"}
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
/// <reference types="mongoose" />
|
|
25
25
|
/// <reference types="mongoose/types/inferschematype" />
|
|
26
26
|
import { CdmLogger } from '@cdm-logger/core';
|
|
27
|
-
import { TransporterType } from '../
|
|
27
|
+
import { TransporterType } from '../interfaces/moleculer';
|
|
28
28
|
type ILogger = CdmLogger.ILogger;
|
|
29
29
|
/**
|
|
30
30
|
* Connection broker class
|
|
@@ -43,7 +43,7 @@ export declare class ConnectionBroker {
|
|
|
43
43
|
*/
|
|
44
44
|
constructor(transporter: TransporterType, logger: ILogger);
|
|
45
45
|
get mongoConnection(): Promise<import("mongoose").Connection>;
|
|
46
|
-
get redisDataloaderClient(): import("apollo-server-cache-redis").
|
|
46
|
+
get redisDataloaderClient(): import("apollo-server-cache-redis").RedisCache | import("apollo-server-cache-redis").RedisClusterCache;
|
|
47
47
|
get natsConnection(): import("nats").Client | Promise<import("nats").Client>;
|
|
48
48
|
get graphqlPubsub(): Promise<import("graphql-nats-subscriptions").NatsPubSub | import("graphql-subscriptions").PubSub>;
|
|
49
49
|
stop(): Promise<void>;
|
package/lib/index.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var StackServer=require('./StackServer.cjs'),MainStackServer=require('./MainStackServer.cjs');exports.StackServer=StackServer.StackServer;exports.MainStackServer=MainStackServer.MainStackServer;//# sourceMappingURL=index.cjs.map
|
package/lib/index.d.ts
CHANGED
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export { StackServer } from './
|
|
1
|
+
export { StackServer } from './StackServer';
|
|
2
|
+
export { MainStackServer } from './MainStackServer';
|
package/lib/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{StackServer}from'./
|
|
1
|
+
export{StackServer}from'./StackServer.mjs';export{MainStackServer}from'./MainStackServer.mjs';//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { GraphQLSchema } from 'graphql';
|
|
2
|
+
import { CdmLogger } from '@cdm-logger/core';
|
|
3
|
+
type ILogger = CdmLogger.ILogger;
|
|
4
|
+
export interface IModuleService {
|
|
5
|
+
serviceContainer: any;
|
|
6
|
+
serviceContext: any;
|
|
7
|
+
dataSource: any;
|
|
8
|
+
defaultPreferences: any;
|
|
9
|
+
createContext: any;
|
|
10
|
+
schema: GraphQLSchema;
|
|
11
|
+
logger: ILogger;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';var cors=require('cors'),server=require('@cdm-logger/server'),envConfig=require('../config/env-config.cjs');/* eslint-disable jest/require-hook */
|
|
2
|
+
const CLIENT_URL = envConfig.config.CLIENT_URL;
|
|
3
|
+
const BACKEND_URL = envConfig.config.BACKEND_URL;
|
|
4
|
+
const corsWhitelist = [
|
|
5
|
+
BACKEND_URL,
|
|
6
|
+
CLIENT_URL,
|
|
7
|
+
envConfig.config.GRAPHQL_URL,
|
|
8
|
+
// 'http://localhost:3000',
|
|
9
|
+
];
|
|
10
|
+
server.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
|
+
server.logger.error('url (%s) is not in the whitelist', origin);
|
|
19
|
+
// callback(new Error('Not allowed by CORS'))
|
|
20
|
+
server.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);exports.corsMiddleware=corsMiddleware;//# sourceMappingURL=cors.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.cjs","sources":["../../src/middleware/cors.ts"],"sourcesContent":[null],"names":["config","logger"],"mappings":"yHAAA;AAKA,MAAM,UAAU,GAAGA,gBAAM,CAAC,UAAU,CAAC;AACrC,MAAM,WAAW,GAAGA,gBAAM,CAAC,WAAW,CAAC;AAEvC,MAAM,aAAa,GAAG;IAClB,WAAW;IACX,UAAU;AACV,IAAAA,gBAAM,CAAC,WAAW;;CAErB,CAAC;AACFC,aAAM,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,YAAAA,aAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,MAAM,CAAC,CAAC;;AAEzD,YAAAA,aAAM,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"}
|