@common-stack/server-stack 8.0.2-alpha.0 → 8.2.1-alpha.0
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/LICENSE +34 -21
- package/lib/MainStackServer.cjs +126 -146
- package/lib/MainStackServer.cjs.map +1 -1
- package/lib/MainStackServer.d.ts +12 -6
- package/lib/MainStackServer.mjs +126 -146
- package/lib/MainStackServer.mjs.map +1 -1
- package/lib/StackServer.cjs +23 -66
- package/lib/StackServer.cjs.map +1 -1
- package/lib/StackServer.d.ts +4 -5
- package/lib/StackServer.mjs +23 -66
- package/lib/StackServer.mjs.map +1 -1
- package/lib/api/schema-builder.cjs +13 -12
- package/lib/api/schema-builder.cjs.map +1 -1
- package/lib/api/schema-builder.mjs +13 -12
- package/lib/api/schema-builder.mjs.map +1 -1
- package/lib/api/sub-graph-schema-builder.cjs +147 -0
- package/lib/api/sub-graph-schema-builder.cjs.map +1 -0
- package/lib/api/sub-graph-schema-builder.d.ts +24 -0
- package/lib/api/sub-graph-schema-builder.mjs +147 -0
- package/lib/api/sub-graph-schema-builder.mjs.map +1 -0
- package/lib/config/env-config.cjs +6 -0
- package/lib/config/env-config.cjs.map +1 -1
- package/lib/config/env-config.d.ts +6 -0
- package/lib/config/env-config.mjs +6 -0
- package/lib/config/env-config.mjs.map +1 -1
- package/lib/examples/tenant-feature-example.d.ts +13 -0
- package/lib/examples/tenant-feature-integration.d.ts +14 -0
- package/lib/features/multi-module-example.d.ts +17 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.mjs +1 -1
- package/lib/infrastructure/container-module.cjs +27 -0
- package/lib/infrastructure/container-module.cjs.map +1 -0
- package/lib/infrastructure/container-module.d.ts +3 -0
- package/lib/infrastructure/container-module.mjs +27 -0
- package/lib/infrastructure/container-module.mjs.map +1 -0
- package/lib/infrastructure/example-workflows.d.ts +16 -0
- package/lib/infrastructure/index.d.ts +5 -0
- package/lib/infrastructure/infrastructure-factory.cjs +172 -0
- package/lib/infrastructure/infrastructure-factory.cjs.map +1 -0
- package/lib/infrastructure/infrastructure-factory.d.ts +36 -0
- package/lib/infrastructure/infrastructure-factory.mjs +172 -0
- package/lib/infrastructure/infrastructure-factory.mjs.map +1 -0
- package/lib/infrastructure/inngest-factory.cjs +47 -0
- package/lib/infrastructure/inngest-factory.cjs.map +1 -0
- package/lib/infrastructure/inngest-factory.d.ts +8 -0
- package/lib/infrastructure/inngest-factory.mjs +47 -0
- package/lib/infrastructure/inngest-factory.mjs.map +1 -0
- package/lib/infrastructure/types.d.ts +28 -0
- package/lib/infrastructure/usage-examples.d.ts +9 -0
- package/lib/infrastructure/workflow-orchestrator.cjs +59 -0
- package/lib/infrastructure/workflow-orchestrator.cjs.map +1 -0
- package/lib/infrastructure/workflow-orchestrator.d.ts +10 -0
- package/lib/infrastructure/workflow-orchestrator.mjs +59 -0
- package/lib/infrastructure/workflow-orchestrator.mjs.map +1 -0
- package/lib/inngest/client-id-generator.d.ts +29 -0
- package/lib/inngest/handler-factory.d.ts +24 -0
- package/lib/inngest/middleware/auto-resolve-invoke.middleware.cjs +275 -0
- package/lib/inngest/middleware/auto-resolve-invoke.middleware.cjs.map +1 -0
- package/lib/inngest/middleware/auto-resolve-invoke.middleware.d.ts +111 -0
- package/lib/inngest/middleware/auto-resolve-invoke.middleware.mjs +275 -0
- package/lib/inngest/middleware/auto-resolve-invoke.middleware.mjs.map +1 -0
- package/lib/inngest/middleware/function-reference-helper.cjs +363 -0
- package/lib/inngest/middleware/function-reference-helper.cjs.map +1 -0
- package/lib/inngest/middleware/function-reference-helper.d.ts +211 -0
- package/lib/inngest/middleware/function-reference-helper.mjs +363 -0
- package/lib/inngest/middleware/function-reference-helper.mjs.map +1 -0
- package/lib/inngest/middleware/index.d.ts +31 -0
- package/lib/inngest/middleware/types.d.ts +162 -0
- package/lib/inngest/multi-module-functions.d.ts +133 -0
- package/lib/inngest/setup.cjs +55 -0
- package/lib/inngest/setup.cjs.map +1 -0
- package/lib/inngest/setup.d.ts +10 -0
- package/lib/inngest/setup.mjs +55 -0
- package/lib/inngest/setup.mjs.map +1 -0
- package/lib/interfaces/graphql-request-context.d.ts +5 -0
- package/lib/middleware/index.d.ts +5 -0
- package/lib/middleware/redis-client.cjs +18 -0
- package/lib/middleware/redis-client.cjs.map +1 -0
- package/lib/middleware/redis-client.d.ts +16 -0
- package/lib/middleware/redis-client.mjs +18 -0
- package/lib/middleware/redis-client.mjs.map +1 -0
- package/lib/plugins/responseCachePlugin.cjs +2 -2
- package/lib/plugins/responseCachePlugin.cjs.map +1 -1
- package/lib/plugins/responseCachePlugin.mjs +2 -2
- package/lib/plugins/responseCachePlugin.mjs.map +1 -1
- package/lib/servers/ExpressApp.cjs +8 -3
- package/lib/servers/ExpressApp.cjs.map +1 -1
- package/lib/servers/ExpressApp.d.ts +1 -1
- package/lib/servers/ExpressApp.mjs +8 -3
- package/lib/servers/ExpressApp.mjs.map +1 -1
- package/lib/servers/GraphqlServer.cjs +7 -2
- package/lib/servers/GraphqlServer.cjs.map +1 -1
- package/lib/servers/GraphqlServer.d.ts +8 -6
- package/lib/servers/GraphqlServer.mjs +7 -2
- package/lib/servers/GraphqlServer.mjs.map +1 -1
- package/lib/servers/GraphqlWs.cjs +3 -44
- package/lib/servers/GraphqlWs.cjs.map +1 -1
- package/lib/servers/GraphqlWs.mjs +3 -44
- package/lib/servers/GraphqlWs.mjs.map +1 -1
- package/lib/servers/WebsocketMultipathUpdate.cjs +4 -2
- package/lib/servers/WebsocketMultipathUpdate.cjs.map +1 -1
- package/lib/servers/WebsocketMultipathUpdate.mjs +4 -2
- package/lib/servers/WebsocketMultipathUpdate.mjs.map +1 -1
- package/lib/servers/mongodb-migration-update.d.ts +1 -1
- package/lib/servers/websocket-context.cjs +70 -0
- package/lib/servers/websocket-context.cjs.map +1 -0
- package/lib/servers/websocket-context.d.ts +30 -0
- package/lib/servers/websocket-context.mjs +70 -0
- package/lib/servers/websocket-context.mjs.map +1 -0
- package/lib/utils/add-shareable-directive-to-schema.cjs +44 -0
- package/lib/utils/add-shareable-directive-to-schema.cjs.map +1 -0
- package/lib/utils/add-shareable-directive-to-schema.d.ts +1 -0
- package/lib/utils/add-shareable-directive-to-schema.mjs +44 -0
- package/lib/utils/add-shareable-directive-to-schema.mjs.map +1 -0
- package/lib/utils/index.d.ts +2 -0
- package/lib/utils/safe-model-factory.d.ts +18 -0
- package/package.json +15 -11
- package/lib/api/resolver.cjs +0 -12
- package/lib/api/resolver.cjs.map +0 -1
- package/lib/api/resolver.mjs +0 -12
- package/lib/api/resolver.mjs.map +0 -1
- package/lib/api/root-schema.graphqls.cjs +0 -2
- package/lib/api/root-schema.graphqls.cjs.map +0 -1
- package/lib/api/root-schema.graphqls.mjs +0 -2
- package/lib/api/root-schema.graphqls.mjs.map +0 -1
- package/lib/api/scalar.cjs +0 -16
- package/lib/api/scalar.cjs.map +0 -1
- package/lib/api/scalar.mjs +0 -16
- package/lib/api/scalar.mjs.map +0 -1
- package/lib/graphql/directives/index.cjs +0 -10
- package/lib/graphql/directives/index.cjs.map +0 -1
- package/lib/graphql/directives/index.d.ts +0 -7
- package/lib/graphql/directives/index.mjs +0 -10
- package/lib/graphql/directives/index.mjs.map +0 -1
- package/lib/graphql/index.d.ts +0 -2
- package/lib/graphql/schema/directives.graphql.cjs +0 -1
- package/lib/graphql/schema/directives.graphql.cjs.map +0 -1
- package/lib/graphql/schema/directives.graphql.mjs +0 -1
- package/lib/graphql/schema/directives.graphql.mjs.map +0 -1
- package/lib/graphql/schema/index.cjs +0 -1
- package/lib/graphql/schema/index.cjs.map +0 -1
- package/lib/graphql/schema/index.d.ts +0 -1
- package/lib/graphql/schema/index.mjs +0 -1
- package/lib/graphql/schema/index.mjs.map +0 -1
- package/lib/plugins/invalidateCachePlugin.test.d.ts +0 -1
- package/lib/plugins/response-cache-plugin.test.d.ts +0 -1
package/lib/StackServer.mjs
CHANGED
|
@@ -1,92 +1,49 @@
|
|
|
1
|
-
import {logger}from'@cdm-logger/server';import
|
|
1
|
+
import {logger}from'@cdm-logger/server';import'inversify';import'@common-stack/core';import {InfrastructureFactory}from'./infrastructure/infrastructure-factory.mjs';import'inngest';import'./config/env-config.mjs';/* eslint-disable import/no-extraneous-dependencies */
|
|
2
2
|
/* eslint-disable import/namespace */
|
|
3
|
-
const infraModule = ({ broker, pubsub, mongoClient, logger }) => new ContainerModule((bind) => {
|
|
4
|
-
bind('Logger').toConstantValue(logger);
|
|
5
|
-
bind(CommonType.LOGGER).toConstantValue(logger);
|
|
6
|
-
bind('Environment').toConstantValue(config.NODE_ENV || 'development');
|
|
7
|
-
bind(CommonType.ENVIRONMENT).toConstantValue(config.NODE_ENV || 'development');
|
|
8
|
-
bind('PubSub').toConstantValue(pubsub);
|
|
9
|
-
bind(CommonType.PUBSUB).toConstantValue(pubsub);
|
|
10
|
-
bind(CommonType.MOLECULER_BROKER).toConstantValue(broker);
|
|
11
|
-
bind('MoleculerBroker').toConstantValue(broker);
|
|
12
|
-
bind('MongoDBConnection').toConstantValue(mongoClient);
|
|
13
|
-
});
|
|
14
3
|
/**
|
|
15
|
-
* Controls the lifecycle of the
|
|
4
|
+
* Controls the lifecycle of the Microservice Server
|
|
16
5
|
*
|
|
17
6
|
* @export
|
|
18
7
|
* @class StackServer
|
|
19
8
|
*/
|
|
20
9
|
class StackServer {
|
|
21
10
|
logger;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
serviceContainer;
|
|
25
|
-
microserviceContainer;
|
|
11
|
+
infrastructureFactory;
|
|
12
|
+
microserviceContext;
|
|
26
13
|
serverFeature;
|
|
27
14
|
settings;
|
|
28
15
|
constructor(feature, settings) {
|
|
29
16
|
this.serverFeature = feature;
|
|
30
17
|
this.settings = settings;
|
|
31
18
|
this.logger = logger.child({ className: 'StackServer' });
|
|
19
|
+
this.infrastructureFactory = new InfrastructureFactory(this.logger);
|
|
32
20
|
}
|
|
33
21
|
async initialize() {
|
|
34
22
|
this.logger.info('StackServer initializing');
|
|
35
|
-
|
|
36
|
-
await this.
|
|
37
|
-
|
|
38
|
-
this.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
started: async () => {
|
|
49
|
-
await this.serverFeature.microservicePreStart(this.microserviceContainer);
|
|
50
|
-
await this.serverFeature.microservicePostStart(this.microserviceContainer);
|
|
51
|
-
},
|
|
52
|
-
});
|
|
53
|
-
const pubsub = await this.connectionBroker.graphqlPubsub;
|
|
54
|
-
const InfraStructureFeature = new Feature({
|
|
55
|
-
createHemeraContainerFunc: [
|
|
56
|
-
() => infraModule({
|
|
57
|
-
broker: this.microserviceBroker,
|
|
58
|
-
pubsub,
|
|
59
|
-
mongoClient,
|
|
60
|
-
logger: logger,
|
|
61
|
-
}),
|
|
62
|
-
],
|
|
63
|
-
});
|
|
64
|
-
const allModules = new Feature(InfraStructureFeature, this.serverFeature);
|
|
65
|
-
this.microserviceContainer = await allModules.createHemeraContainers({
|
|
66
|
-
...this.settings,
|
|
67
|
-
mongoConnection: mongoClient,
|
|
68
|
-
});
|
|
69
|
-
const serviceBroker = {
|
|
70
|
-
microserviceContainer: this.microserviceContainer,
|
|
71
|
-
logger: this.logger,
|
|
23
|
+
// Initialize infrastructure factory
|
|
24
|
+
await this.infrastructureFactory.initialize();
|
|
25
|
+
// Create microservice broker and container with all required bindings
|
|
26
|
+
this.microserviceContext = await this.infrastructureFactory.createBrokerAndContainer(InfrastructureFactory.createMicroserviceConfig(), this.serverFeature, this.settings);
|
|
27
|
+
// Setup microservice broker lifecycle
|
|
28
|
+
this.setupMicroserviceBrokerLifecycle();
|
|
29
|
+
}
|
|
30
|
+
setupMicroserviceBrokerLifecycle() {
|
|
31
|
+
const originalStart = this.microserviceContext.broker.start.bind(this.microserviceContext.broker);
|
|
32
|
+
this.microserviceContext.broker.start = async () => {
|
|
33
|
+
await originalStart();
|
|
34
|
+
await this.serverFeature.microservicePreStart(this.microserviceContext.container);
|
|
35
|
+
await this.serverFeature.microservicePostStart(this.microserviceContext.container);
|
|
72
36
|
};
|
|
73
|
-
// set the service container
|
|
74
|
-
this.microserviceContainer = serviceBroker.microserviceContainer;
|
|
75
|
-
allModules.loadClientMoleculerService({
|
|
76
|
-
broker: this.microserviceBroker,
|
|
77
|
-
container: this.microserviceContainer,
|
|
78
|
-
settings: this.settings,
|
|
79
|
-
});
|
|
80
37
|
}
|
|
81
38
|
async start() {
|
|
82
|
-
await this.
|
|
39
|
+
await this.microserviceContext.broker.start();
|
|
83
40
|
}
|
|
84
41
|
async cleanup() {
|
|
85
|
-
if (this.
|
|
86
|
-
await this.
|
|
42
|
+
if (this.infrastructureFactory) {
|
|
43
|
+
await this.infrastructureFactory.cleanup();
|
|
87
44
|
}
|
|
88
|
-
if (this.
|
|
89
|
-
await this.
|
|
45
|
+
if (this.microserviceContext?.broker) {
|
|
46
|
+
await this.microserviceContext.broker.stop();
|
|
90
47
|
}
|
|
91
48
|
}
|
|
92
49
|
}export{StackServer};//# sourceMappingURL=StackServer.mjs.map
|
package/lib/StackServer.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackServer.mjs","sources":["../src/StackServer.ts"],"sourcesContent":[null],"names":["serverLogger"
|
|
1
|
+
{"version":3,"file":"StackServer.mjs","sources":["../src/StackServer.ts"],"sourcesContent":[null],"names":["serverLogger"],"mappings":"qNAAA;AACA;AAaA;;;;;AAKG;MACU,WAAW,CAAA;AACZ,IAAA,MAAM,CAAU;AAEhB,IAAA,qBAAqB,CAAwB;AAE7C,IAAA,mBAAmB,CAIzB;AAEM,IAAA,aAAa,CAAgB;AAE7B,IAAA,QAAQ,CAAC;IAEjB,WAAY,CAAA,OAAsB,EAAE,QAAQ,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC;AAC7B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,GAAGA,MAAY,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,qBAAqB,GAAG,IAAI,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KACvE;AAEM,IAAA,MAAM,UAAU,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;;AAG7C,QAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,CAAC;;QAG9C,IAAI,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,CAChF,qBAAqB,CAAC,wBAAwB,EAAE,EAChD,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,QAAQ,CAChB,CAAC;;QAGF,IAAI,CAAC,gCAAgC,EAAE,CAAC;KAC3C;IAEO,gCAAgC,GAAA;AACpC,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAClG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,GAAG,YAAW;YAC/C,MAAM,aAAa,EAAE,CAAC;AACtB,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAClF,YAAA,MAAM,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AACvF,SAAC,CAAC;KACL;AAEM,IAAA,MAAM,KAAK,GAAA;QACd,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;KACjD;AAEM,IAAA,MAAM,OAAO,GAAA;AAChB,QAAA,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC5B,YAAA,MAAM,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;SAC9C;AACD,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,MAAM,EAAE;YAClC,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SAChD;KACJ;AACJ"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
'use strict';var
|
|
1
|
+
'use strict';var 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'),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 ws__namespace=/*#__PURE__*/_interopNamespaceDefault(ws$1);var fetch__namespace=/*#__PURE__*/_interopNamespaceDefault(fetch);/// <reference path='../../../../typings/index.d.ts' />
|
|
2
2
|
/* eslint-disable class-methods-use-this */
|
|
3
3
|
/* eslint-disable no-useless-constructor */
|
|
4
4
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
@@ -122,18 +122,19 @@ class GatewaySchemaBuilder {
|
|
|
122
122
|
// ]);
|
|
123
123
|
// }
|
|
124
124
|
createOwnSchema() {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
console.log('✅ GatewaySchemaBuilder: Creating schema...');
|
|
126
|
+
const typeDefs = Array.isArray(this.options.schema) ? this.options.schema.join('\n') : this.options.schema;
|
|
127
|
+
// Handle both array and single object cases for resolvers
|
|
128
|
+
const resolvers = Array.isArray(this.options.resolvers)
|
|
129
|
+
? this.options.resolvers.reduce((acc, curr) => {
|
|
130
|
+
return {
|
|
131
|
+
...acc,
|
|
132
|
+
...curr,
|
|
133
|
+
};
|
|
134
|
+
}, {})
|
|
135
|
+
: this.options.resolvers;
|
|
135
136
|
let mergedSchema = schema.makeExecutableSchema({
|
|
136
|
-
resolvers
|
|
137
|
+
resolvers,
|
|
137
138
|
typeDefs,
|
|
138
139
|
resolverValidationOptions: {
|
|
139
140
|
requireResolversForResolveType: 'warn',
|
|
@@ -1 +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","schemaFromExecutor","wrapSchema","WebSocketLink","ws","split","getMainDefinition","
|
|
1
|
+
{"version":3,"file":"schema-builder.cjs","sources":["../../src/api/schema-builder.ts"],"sourcesContent":[null],"names":["stitchSchemas","applyMiddleware","shield","logger","remoteSchemaDetails","HttpLink","fetch","linkToExecutor","schemaFromExecutor","wrapSchema","WebSocketLink","ws","split","getMainDefinition","makeExecutableSchema","attachDirectiveResolvers"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {stitchSchemas}from'@graphql-tools/stitch';import {makeExecutableSchema}from'@graphql-tools/schema';import {linkToExecutor}from'@graphql-tools/links';import {schemaFromExecutor,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 {attachDirectiveResolvers}from'./utils.mjs';/// <reference path='../../../../typings/index.d.ts' />
|
|
2
2
|
/* eslint-disable class-methods-use-this */
|
|
3
3
|
/* eslint-disable no-useless-constructor */
|
|
4
4
|
/* eslint-disable import/no-extraneous-dependencies */
|
|
@@ -122,18 +122,19 @@ class GatewaySchemaBuilder {
|
|
|
122
122
|
// ]);
|
|
123
123
|
// }
|
|
124
124
|
createOwnSchema() {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
125
|
+
console.log('✅ GatewaySchemaBuilder: Creating schema...');
|
|
126
|
+
const typeDefs = Array.isArray(this.options.schema) ? this.options.schema.join('\n') : this.options.schema;
|
|
127
|
+
// Handle both array and single object cases for resolvers
|
|
128
|
+
const resolvers = Array.isArray(this.options.resolvers)
|
|
129
|
+
? this.options.resolvers.reduce((acc, curr) => {
|
|
130
|
+
return {
|
|
131
|
+
...acc,
|
|
132
|
+
...curr,
|
|
133
|
+
};
|
|
134
|
+
}, {})
|
|
135
|
+
: this.options.resolvers;
|
|
135
136
|
let mergedSchema = makeExecutableSchema({
|
|
136
|
-
resolvers
|
|
137
|
+
resolvers,
|
|
137
138
|
typeDefs,
|
|
138
139
|
resolverValidationOptions: {
|
|
139
140
|
requireResolversForResolveType: 'warn',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema-builder.mjs","sources":["../../src/api/schema-builder.ts"],"sourcesContent":[null],"names":[
|
|
1
|
+
{"version":3,"file":"schema-builder.mjs","sources":["../../src/api/schema-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
'use strict';var subgraph=require('@apollo/subgraph'),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'),gql=require('graphql-tag'),remoteConfig=require('./remote-config.cjs'),utils=require('./utils.cjs');require('../utils/migrations.cjs');var addShareableDirectiveToSchema=require('../utils/add-shareable-directive-to-schema.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 ws__namespace=/*#__PURE__*/_interopNamespaceDefault(ws$1);var fetch__namespace=/*#__PURE__*/_interopNamespaceDefault(fetch);/// <reference path='../../../../typings/index.d.ts' />
|
|
2
|
+
/* eslint-disable class-methods-use-this */
|
|
3
|
+
/* eslint-disable no-useless-constructor */
|
|
4
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
5
|
+
class SubGraphSchemaBuilder {
|
|
6
|
+
options;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
async build() {
|
|
11
|
+
let gatewaySchema;
|
|
12
|
+
let ownSchema;
|
|
13
|
+
try {
|
|
14
|
+
ownSchema = this.createOwnSchema();
|
|
15
|
+
const remoteSchema = await this.load();
|
|
16
|
+
// techSchema = this.patchSchema(techSchema, 'TechService');
|
|
17
|
+
gatewaySchema = ownSchema;
|
|
18
|
+
// Apply middleware to the schema
|
|
19
|
+
if (this.options.middlewares && this.options.middlewares.length > 0) {
|
|
20
|
+
gatewaySchema = graphqlMiddleware.applyMiddleware(gatewaySchema, ...this.options.middlewares, graphqlShield.shield(this.options.rules || {}, {
|
|
21
|
+
allowExternalErrors: true,
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
// TODO after updating graphql-tools to v8
|
|
25
|
+
// addErrorLoggingToSchema(schema, { log: (e) => logger.error(e as Error) });
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
serverCore.logger.error(err, '[Graphql Schema Errors] when building schema:', err.message);
|
|
29
|
+
gatewaySchema = ownSchema;
|
|
30
|
+
}
|
|
31
|
+
return gatewaySchema;
|
|
32
|
+
}
|
|
33
|
+
async load() {
|
|
34
|
+
const schemas = [];
|
|
35
|
+
// eslint-disable-next-line no-plusplus
|
|
36
|
+
for (const element of remoteConfig.remoteSchemaDetails) {
|
|
37
|
+
// eslint-disable-next-line no-await-in-loop
|
|
38
|
+
const schema = await this.loadRemoteSchema(element);
|
|
39
|
+
schemas.push(schema);
|
|
40
|
+
}
|
|
41
|
+
return schemas;
|
|
42
|
+
}
|
|
43
|
+
async createRemoteSchema(service, iteration) {
|
|
44
|
+
serverCore.logger.info('Fetch service [%s] iteration [%s]', service, iteration);
|
|
45
|
+
const services = remoteConfig.remoteSchemaDetails;
|
|
46
|
+
if (!services.length) {
|
|
47
|
+
console.warn(`Service ${services} is undefined`);
|
|
48
|
+
if (iteration && iteration > 2) {
|
|
49
|
+
return Promise.reject(new Error(`tried upto ${iteration} attempts, now failing...`));
|
|
50
|
+
}
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const timeout = iteration ? 1000 * iteration : 1000;
|
|
53
|
+
serverCore.logger.info('Wait for service startup %s', timeout);
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
this.createRemoteSchema(service, iteration ? iteration + 1 : 1)
|
|
56
|
+
.then(resolve)
|
|
57
|
+
.catch(reject);
|
|
58
|
+
}, timeout);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// instead need to loop it
|
|
62
|
+
// https://github.com/j-colter/graphql-gateway/blob/9c64d90a74727d2002d10b06f47e1f4a316070fc/src/schema.js#L50
|
|
63
|
+
const url = services[0].uri;
|
|
64
|
+
serverCore.logger.info('fetch service [%s]', url);
|
|
65
|
+
// 1. Create apollo Link that's connected to the underlying GraphQL API
|
|
66
|
+
const link = new http.HttpLink({ uri: url, fetch: fetch__namespace });
|
|
67
|
+
const executor = links.linkToExecutor(link);
|
|
68
|
+
// 2. Retrieve schema definition of the underlying GraphQL API
|
|
69
|
+
const remoteSchema = await wrap.schemaFromExecutor(link);
|
|
70
|
+
// 3. Create the executable schema based on schema definition and Apollo Link
|
|
71
|
+
return wrap.wrapSchema({
|
|
72
|
+
schema: remoteSchema,
|
|
73
|
+
executor,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async loadRemoteSchema({ uri, wsUri }) {
|
|
77
|
+
try {
|
|
78
|
+
const httpLink = new http.HttpLink({ uri, fetch: fetch__namespace });
|
|
79
|
+
let link = null;
|
|
80
|
+
if (wsUri) {
|
|
81
|
+
const wsLink = new ws.WebSocketLink({
|
|
82
|
+
uri: wsUri,
|
|
83
|
+
options: {
|
|
84
|
+
reconnect: true,
|
|
85
|
+
},
|
|
86
|
+
webSocketImpl: ws__namespace,
|
|
87
|
+
});
|
|
88
|
+
link = index_js.split(
|
|
89
|
+
// split based on operatino type
|
|
90
|
+
({ query }) => {
|
|
91
|
+
const { kind, operation } = utilities.getMainDefinition(query);
|
|
92
|
+
return kind === 'OperationDefinition' && operation === 'subscription';
|
|
93
|
+
}, wsLink, httpLink);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
link = httpLink;
|
|
97
|
+
}
|
|
98
|
+
const executor = links.linkToExecutor(link);
|
|
99
|
+
const remoteSchema = await wrap.schemaFromExecutor(link);
|
|
100
|
+
return wrap.wrapSchema({
|
|
101
|
+
schema: remoteSchema,
|
|
102
|
+
executor,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
this.options.logger.error(err, 'fetching schema error: ', err);
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
createOwnSchema() {
|
|
111
|
+
console.log('✅ SubGraphSchemaBuilder: Creating schema...');
|
|
112
|
+
const schemasArray = Array.isArray(this.options.schema) ? this.options.schema : [this.options.schema];
|
|
113
|
+
const typeDefs = schemasArray.map((schema) => addShareableDirectiveToSchema.addShareableDirectiveToSchema(schema)).join('\n');
|
|
114
|
+
// Handle both array and single object cases for resolvers
|
|
115
|
+
const resolvers = Array.isArray(this.options.resolvers)
|
|
116
|
+
? this.options.resolvers.reduce((acc, curr) => {
|
|
117
|
+
return {
|
|
118
|
+
...acc,
|
|
119
|
+
...curr,
|
|
120
|
+
};
|
|
121
|
+
}, {})
|
|
122
|
+
: this.options.resolvers;
|
|
123
|
+
let mergedSchema = subgraph.buildSubgraphSchema({
|
|
124
|
+
resolvers,
|
|
125
|
+
typeDefs: gql `
|
|
126
|
+
${typeDefs}
|
|
127
|
+
`,
|
|
128
|
+
});
|
|
129
|
+
try {
|
|
130
|
+
// Check if directives are provided and are iterable
|
|
131
|
+
if (Array.isArray(this.options.directives) && this.options.directives.length > 0) {
|
|
132
|
+
this.options.directives.forEach((transform) => {
|
|
133
|
+
mergedSchema = transform(mergedSchema);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Handle deprecated directiveResolvers if they exist
|
|
137
|
+
if (this.options.directiveResolvers && Object.keys(this.options.directiveResolvers).length !== 0) {
|
|
138
|
+
this.options.logger.warn('directiveResolvers deprecated replaced with directives');
|
|
139
|
+
mergedSchema = utils.attachDirectiveResolvers(mergedSchema, this.options.directiveResolvers);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
this.options.logger.error(err, 'Error in schema directives [%j], and directiveResolvers [%j]', this.options.directives, this.options.directiveResolvers);
|
|
144
|
+
}
|
|
145
|
+
return mergedSchema;
|
|
146
|
+
}
|
|
147
|
+
}exports.SubGraphSchemaBuilder=SubGraphSchemaBuilder;//# sourceMappingURL=sub-graph-schema-builder.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-graph-schema-builder.cjs","sources":["../../src/api/sub-graph-schema-builder.ts"],"sourcesContent":[null],"names":["applyMiddleware","shield","logger","remoteSchemaDetails","HttpLink","fetch","linkToExecutor","schemaFromExecutor","wrapSchema","WebSocketLink","ws","split","getMainDefinition","addShareableDirectiveToSchema","buildSubgraphSchema","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 SubGraphSchemaBuilder {
|
|
16
|
+
private readonly 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,147 @@
|
|
|
1
|
+
import {buildSubgraphSchema}from'@apollo/subgraph';import {linkToExecutor}from'@graphql-tools/links';import {schemaFromExecutor,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 gql from'graphql-tag';import {remoteSchemaDetails}from'./remote-config.mjs';import {attachDirectiveResolvers}from'./utils.mjs';import'../utils/migrations.mjs';import {addShareableDirectiveToSchema}from'../utils/add-shareable-directive-to-schema.mjs';/// <reference path='../../../../typings/index.d.ts' />
|
|
2
|
+
/* eslint-disable class-methods-use-this */
|
|
3
|
+
/* eslint-disable no-useless-constructor */
|
|
4
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
5
|
+
class SubGraphSchemaBuilder {
|
|
6
|
+
options;
|
|
7
|
+
constructor(options) {
|
|
8
|
+
this.options = options;
|
|
9
|
+
}
|
|
10
|
+
async build() {
|
|
11
|
+
let gatewaySchema;
|
|
12
|
+
let ownSchema;
|
|
13
|
+
try {
|
|
14
|
+
ownSchema = this.createOwnSchema();
|
|
15
|
+
const remoteSchema = await this.load();
|
|
16
|
+
// techSchema = this.patchSchema(techSchema, 'TechService');
|
|
17
|
+
gatewaySchema = ownSchema;
|
|
18
|
+
// Apply middleware to the schema
|
|
19
|
+
if (this.options.middlewares && this.options.middlewares.length > 0) {
|
|
20
|
+
gatewaySchema = applyMiddleware(gatewaySchema, ...this.options.middlewares, shield(this.options.rules || {}, {
|
|
21
|
+
allowExternalErrors: true,
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
// TODO after updating graphql-tools to v8
|
|
25
|
+
// addErrorLoggingToSchema(schema, { log: (e) => logger.error(e as Error) });
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
logger.error(err, '[Graphql Schema Errors] when building schema:', err.message);
|
|
29
|
+
gatewaySchema = ownSchema;
|
|
30
|
+
}
|
|
31
|
+
return gatewaySchema;
|
|
32
|
+
}
|
|
33
|
+
async load() {
|
|
34
|
+
const schemas = [];
|
|
35
|
+
// eslint-disable-next-line no-plusplus
|
|
36
|
+
for (const element of remoteSchemaDetails) {
|
|
37
|
+
// eslint-disable-next-line no-await-in-loop
|
|
38
|
+
const schema = await this.loadRemoteSchema(element);
|
|
39
|
+
schemas.push(schema);
|
|
40
|
+
}
|
|
41
|
+
return schemas;
|
|
42
|
+
}
|
|
43
|
+
async createRemoteSchema(service, iteration) {
|
|
44
|
+
logger.info('Fetch service [%s] iteration [%s]', service, iteration);
|
|
45
|
+
const services = remoteSchemaDetails;
|
|
46
|
+
if (!services.length) {
|
|
47
|
+
console.warn(`Service ${services} is undefined`);
|
|
48
|
+
if (iteration && iteration > 2) {
|
|
49
|
+
return Promise.reject(new Error(`tried upto ${iteration} attempts, now failing...`));
|
|
50
|
+
}
|
|
51
|
+
return new Promise((resolve, reject) => {
|
|
52
|
+
const timeout = iteration ? 1000 * iteration : 1000;
|
|
53
|
+
logger.info('Wait for service startup %s', timeout);
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
this.createRemoteSchema(service, iteration ? iteration + 1 : 1)
|
|
56
|
+
.then(resolve)
|
|
57
|
+
.catch(reject);
|
|
58
|
+
}, timeout);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// instead need to loop it
|
|
62
|
+
// https://github.com/j-colter/graphql-gateway/blob/9c64d90a74727d2002d10b06f47e1f4a316070fc/src/schema.js#L50
|
|
63
|
+
const url = services[0].uri;
|
|
64
|
+
logger.info('fetch service [%s]', url);
|
|
65
|
+
// 1. Create apollo Link that's connected to the underlying GraphQL API
|
|
66
|
+
const link = new HttpLink({ uri: url, fetch });
|
|
67
|
+
const executor = linkToExecutor(link);
|
|
68
|
+
// 2. Retrieve schema definition of the underlying GraphQL API
|
|
69
|
+
const remoteSchema = await schemaFromExecutor(link);
|
|
70
|
+
// 3. Create the executable schema based on schema definition and Apollo Link
|
|
71
|
+
return wrapSchema({
|
|
72
|
+
schema: remoteSchema,
|
|
73
|
+
executor,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
async loadRemoteSchema({ uri, wsUri }) {
|
|
77
|
+
try {
|
|
78
|
+
const httpLink = new HttpLink({ uri, fetch });
|
|
79
|
+
let link = null;
|
|
80
|
+
if (wsUri) {
|
|
81
|
+
const wsLink = new WebSocketLink({
|
|
82
|
+
uri: wsUri,
|
|
83
|
+
options: {
|
|
84
|
+
reconnect: true,
|
|
85
|
+
},
|
|
86
|
+
webSocketImpl: ws,
|
|
87
|
+
});
|
|
88
|
+
link = split(
|
|
89
|
+
// split based on operatino type
|
|
90
|
+
({ query }) => {
|
|
91
|
+
const { kind, operation } = getMainDefinition(query);
|
|
92
|
+
return kind === 'OperationDefinition' && operation === 'subscription';
|
|
93
|
+
}, wsLink, httpLink);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
link = httpLink;
|
|
97
|
+
}
|
|
98
|
+
const executor = linkToExecutor(link);
|
|
99
|
+
const remoteSchema = await schemaFromExecutor(link);
|
|
100
|
+
return wrapSchema({
|
|
101
|
+
schema: remoteSchema,
|
|
102
|
+
executor,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
this.options.logger.error(err, 'fetching schema error: ', err);
|
|
107
|
+
return {};
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
createOwnSchema() {
|
|
111
|
+
console.log('✅ SubGraphSchemaBuilder: Creating schema...');
|
|
112
|
+
const schemasArray = Array.isArray(this.options.schema) ? this.options.schema : [this.options.schema];
|
|
113
|
+
const typeDefs = schemasArray.map((schema) => addShareableDirectiveToSchema(schema)).join('\n');
|
|
114
|
+
// Handle both array and single object cases for resolvers
|
|
115
|
+
const resolvers = Array.isArray(this.options.resolvers)
|
|
116
|
+
? this.options.resolvers.reduce((acc, curr) => {
|
|
117
|
+
return {
|
|
118
|
+
...acc,
|
|
119
|
+
...curr,
|
|
120
|
+
};
|
|
121
|
+
}, {})
|
|
122
|
+
: this.options.resolvers;
|
|
123
|
+
let mergedSchema = buildSubgraphSchema({
|
|
124
|
+
resolvers,
|
|
125
|
+
typeDefs: gql `
|
|
126
|
+
${typeDefs}
|
|
127
|
+
`,
|
|
128
|
+
});
|
|
129
|
+
try {
|
|
130
|
+
// Check if directives are provided and are iterable
|
|
131
|
+
if (Array.isArray(this.options.directives) && this.options.directives.length > 0) {
|
|
132
|
+
this.options.directives.forEach((transform) => {
|
|
133
|
+
mergedSchema = transform(mergedSchema);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
// Handle deprecated directiveResolvers if they exist
|
|
137
|
+
if (this.options.directiveResolvers && Object.keys(this.options.directiveResolvers).length !== 0) {
|
|
138
|
+
this.options.logger.warn('directiveResolvers deprecated replaced with directives');
|
|
139
|
+
mergedSchema = attachDirectiveResolvers(mergedSchema, this.options.directiveResolvers);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
this.options.logger.error(err, 'Error in schema directives [%j], and directiveResolvers [%j]', this.options.directives, this.options.directiveResolvers);
|
|
144
|
+
}
|
|
145
|
+
return mergedSchema;
|
|
146
|
+
}
|
|
147
|
+
}export{SubGraphSchemaBuilder};//# sourceMappingURL=sub-graph-schema-builder.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sub-graph-schema-builder.mjs","sources":["../../src/api/sub-graph-schema-builder.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|