@common-stack/server-stack 0.5.29
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 +21 -0
- package/README.md +10 -0
- package/lib/config/env-config.cjs +20 -0
- package/lib/config/env-config.cjs.map +1 -0
- package/lib/config/env-config.d.ts +15 -0
- package/lib/config/env-config.mjs +20 -0
- package/lib/config/env-config.mjs.map +1 -0
- package/lib/config/index.d.ts +1 -0
- package/lib/config/moleculer.config.cjs +195 -0
- package/lib/config/moleculer.config.cjs.map +1 -0
- package/lib/config/moleculer.config.d.ts +20 -0
- package/lib/config/moleculer.config.mjs +195 -0
- package/lib/config/moleculer.config.mjs.map +1 -0
- package/lib/connectors/connection-broker.cjs +57 -0
- package/lib/connectors/connection-broker.cjs.map +1 -0
- package/lib/connectors/connection-broker.d.ts +51 -0
- package/lib/connectors/connection-broker.mjs +57 -0
- package/lib/connectors/connection-broker.mjs.map +1 -0
- package/lib/connectors/graphql-pubsub-connector.cjs +25 -0
- package/lib/connectors/graphql-pubsub-connector.cjs.map +1 -0
- package/lib/connectors/graphql-pubsub-connector.d.ts +22 -0
- package/lib/connectors/graphql-pubsub-connector.mjs +25 -0
- package/lib/connectors/graphql-pubsub-connector.mjs.map +1 -0
- package/lib/connectors/mongo-connector.cjs +52 -0
- package/lib/connectors/mongo-connector.cjs.map +1 -0
- package/lib/connectors/mongo-connector.d.ts +21 -0
- package/lib/connectors/mongo-connector.mjs +52 -0
- package/lib/connectors/mongo-connector.mjs.map +1 -0
- package/lib/connectors/nats-connector.cjs +59 -0
- package/lib/connectors/nats-connector.cjs.map +1 -0
- package/lib/connectors/nats-connector.d.ts +20 -0
- package/lib/connectors/nats-connector.mjs +59 -0
- package/lib/connectors/nats-connector.mjs.map +1 -0
- package/lib/connectors/redis-connector.cjs +54 -0
- package/lib/connectors/redis-connector.cjs.map +1 -0
- package/lib/connectors/redis-connector.d.ts +31 -0
- package/lib/connectors/redis-connector.mjs +54 -0
- package/lib/connectors/redis-connector.mjs.map +1 -0
- package/lib/index.cjs +1 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.mjs +1 -0
- package/lib/index.mjs.map +1 -0
- package/lib/interface.d.ts +7 -0
- package/lib/middleware/moleculer-inter-namespace.cjs +44 -0
- package/lib/middleware/moleculer-inter-namespace.cjs.map +1 -0
- package/lib/middleware/moleculer-inter-namespace.d.ts +2 -0
- package/lib/middleware/moleculer-inter-namespace.mjs +44 -0
- package/lib/middleware/moleculer-inter-namespace.mjs.map +1 -0
- package/lib/stack-server.cjs +78 -0
- package/lib/stack-server.cjs.map +1 -0
- package/lib/stack-server.d.ts +20 -0
- package/lib/stack-server.mjs +78 -0
- package/lib/stack-server.mjs.map +1 -0
- package/package.json +40 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use strict';var moleculer=require('moleculer'),_=require('lodash');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 ___namespace=/*#__PURE__*/_interopNamespaceDefault(_);/* eslint-disable no-param-reassign */
|
|
2
|
+
const InterNamespaceMiddleware = function (options) {
|
|
3
|
+
if (!Array.isArray(options)) {
|
|
4
|
+
throw new Error('Must be an Array');
|
|
5
|
+
}
|
|
6
|
+
let thisBroker;
|
|
7
|
+
const brokers = {};
|
|
8
|
+
return {
|
|
9
|
+
created(broker) {
|
|
10
|
+
thisBroker = broker;
|
|
11
|
+
options.forEach((nsOpts) => {
|
|
12
|
+
if (___namespace.isString(nsOpts)) {
|
|
13
|
+
nsOpts = {
|
|
14
|
+
namespace: nsOpts,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const ns = nsOpts.namespace;
|
|
18
|
+
const brokerOpts = ___namespace.defaultsDeep({}, nsOpts, { nodeID: null, middlewares: null, created: null, started: null }, broker.options);
|
|
19
|
+
brokers[ns] = new moleculer.ServiceBroker(brokerOpts);
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
started() {
|
|
23
|
+
return Promise.all(Object.values(brokers).map((b) => b.start()));
|
|
24
|
+
},
|
|
25
|
+
stopped() {
|
|
26
|
+
return Promise.all(Object.values(brokers).map((b) => b.stop()));
|
|
27
|
+
},
|
|
28
|
+
call(next) {
|
|
29
|
+
return function (actionName, params, opts = {}) {
|
|
30
|
+
if (___namespace.isString(actionName) && actionName.includes('@')) {
|
|
31
|
+
const [action, namespace] = actionName.split('@');
|
|
32
|
+
if (brokers[namespace]) {
|
|
33
|
+
return brokers[namespace].call(action, params, opts);
|
|
34
|
+
}
|
|
35
|
+
if (namespace === thisBroker.namespace) {
|
|
36
|
+
return next(action, params, opts);
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`Unknown namespace: ${namespace}`);
|
|
39
|
+
}
|
|
40
|
+
return next(actionName, params, opts);
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
};exports.InterNamespaceMiddleware=InterNamespaceMiddleware;//# sourceMappingURL=moleculer-inter-namespace.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moleculer-inter-namespace.cjs","sources":["../../src/middleware/moleculer-inter-namespace.ts"],"sourcesContent":[null],"names":["_","ServiceBroker"],"mappings":"4ZAAA;AAIO,MAAM,wBAAwB,GAAG,UAAU,OAAO,EAAA;AACrD,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACvC,KAAA;AAED,IAAA,IAAI,UAAyB,CAAC;IAC9B,MAAM,OAAO,GAAqC,EAAE,CAAC;IAErD,OAAO;AACH,QAAA,OAAO,CAAC,MAAqB,EAAA;YACzB,UAAU,GAAG,MAAM,CAAC;AACpB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,IAAIA,YAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpB,oBAAA,MAAM,GAAG;AACL,wBAAA,SAAS,EAAE,MAAM;qBACpB,CAAC;AACL,iBAAA;AACD,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AAE5B,gBAAA,MAAM,UAAU,GAAGA,YAAC,CAAC,YAAY,CAC7B,EAAE,EACF,MAAM,EACN,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EACjE,MAAM,CAAC,OAAO,CACjB,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,GAAG,IAAIC,uBAAa,CAAC,UAAU,CAAC,CAAC;AAChD,aAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAA;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,OAAO,GAAA;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACnE;AAED,QAAA,IAAI,CAAC,IAAI,EAAA;AACL,YAAA,OAAO,UAAU,UAAU,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAA;AAC1C,gBAAA,IAAID,YAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpD,oBAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAElD,oBAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AACpB,wBAAA,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACxD,qBAAA;AACD,oBAAA,IAAI,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE;wBACpC,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,qBAAA;AACD,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAA,CAAE,CAAC,CAAC;AACtD,iBAAA;gBAED,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1C,aAAC,CAAC;SACL;KACJ,CAAC;AACN"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import {ServiceBroker}from'moleculer';import*as _ from'lodash';/* eslint-disable no-param-reassign */
|
|
2
|
+
const InterNamespaceMiddleware = function (options) {
|
|
3
|
+
if (!Array.isArray(options)) {
|
|
4
|
+
throw new Error('Must be an Array');
|
|
5
|
+
}
|
|
6
|
+
let thisBroker;
|
|
7
|
+
const brokers = {};
|
|
8
|
+
return {
|
|
9
|
+
created(broker) {
|
|
10
|
+
thisBroker = broker;
|
|
11
|
+
options.forEach((nsOpts) => {
|
|
12
|
+
if (_.isString(nsOpts)) {
|
|
13
|
+
nsOpts = {
|
|
14
|
+
namespace: nsOpts,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const ns = nsOpts.namespace;
|
|
18
|
+
const brokerOpts = _.defaultsDeep({}, nsOpts, { nodeID: null, middlewares: null, created: null, started: null }, broker.options);
|
|
19
|
+
brokers[ns] = new ServiceBroker(brokerOpts);
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
started() {
|
|
23
|
+
return Promise.all(Object.values(brokers).map((b) => b.start()));
|
|
24
|
+
},
|
|
25
|
+
stopped() {
|
|
26
|
+
return Promise.all(Object.values(brokers).map((b) => b.stop()));
|
|
27
|
+
},
|
|
28
|
+
call(next) {
|
|
29
|
+
return function (actionName, params, opts = {}) {
|
|
30
|
+
if (_.isString(actionName) && actionName.includes('@')) {
|
|
31
|
+
const [action, namespace] = actionName.split('@');
|
|
32
|
+
if (brokers[namespace]) {
|
|
33
|
+
return brokers[namespace].call(action, params, opts);
|
|
34
|
+
}
|
|
35
|
+
if (namespace === thisBroker.namespace) {
|
|
36
|
+
return next(action, params, opts);
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`Unknown namespace: ${namespace}`);
|
|
39
|
+
}
|
|
40
|
+
return next(actionName, params, opts);
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
};export{InterNamespaceMiddleware};//# sourceMappingURL=moleculer-inter-namespace.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moleculer-inter-namespace.mjs","sources":["../../src/middleware/moleculer-inter-namespace.ts"],"sourcesContent":[null],"names":[],"mappings":"+DAAA;AAIO,MAAM,wBAAwB,GAAG,UAAU,OAAO,EAAA;AACrD,IAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;AACvC,KAAA;AAED,IAAA,IAAI,UAAyB,CAAC;IAC9B,MAAM,OAAO,GAAqC,EAAE,CAAC;IAErD,OAAO;AACH,QAAA,OAAO,CAAC,MAAqB,EAAA;YACzB,UAAU,GAAG,MAAM,CAAC;AACpB,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACvB,gBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpB,oBAAA,MAAM,GAAG;AACL,wBAAA,SAAS,EAAE,MAAM;qBACpB,CAAC;AACL,iBAAA;AACD,gBAAA,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC;AAE5B,gBAAA,MAAM,UAAU,GAAG,CAAC,CAAC,YAAY,CAC7B,EAAE,EACF,MAAM,EACN,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,EACjE,MAAM,CAAC,OAAO,CACjB,CAAC;gBACF,OAAO,CAAC,EAAE,CAAC,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;AAChD,aAAC,CAAC,CAAC;SACN;QAED,OAAO,GAAA;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACpE;QAED,OAAO,GAAA;YACH,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;SACnE;AAED,QAAA,IAAI,CAAC,IAAI,EAAA;AACL,YAAA,OAAO,UAAU,UAAU,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAA;AAC1C,gBAAA,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACpD,oBAAA,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAElD,oBAAA,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE;AACpB,wBAAA,OAAO,OAAO,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACxD,qBAAA;AACD,oBAAA,IAAI,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE;wBACpC,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AACrC,qBAAA;AACD,oBAAA,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,CAAA,CAAE,CAAC,CAAC;AACtD,iBAAA;gBAED,OAAO,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;AAC1C,aAAC,CAAC;SACL;KACJ,CAAC;AACN"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
'use strict';var server=require('@cdm-logger/server'),serverCore=require('@common-stack/server-core'),inversify=require('inversify'),moleculer=require('moleculer'),core=require('@common-stack/core'),moleculer_config=require('./config/moleculer.config.cjs'),envConfig=require('./config/env-config.cjs'),connectionBroker=require('./connectors/connection-broker.cjs'),moleculerInterNamespace=require('./middleware/moleculer-inter-namespace.cjs');/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
+
/* eslint-disable import/namespace */
|
|
3
|
+
const infraModule = ({ broker, pubsub, mongoClient, logger }) => new inversify.ContainerModule((bind) => {
|
|
4
|
+
bind('Logger').toConstantValue(logger);
|
|
5
|
+
bind(core.CommonType.LOGGER).toConstantValue(logger);
|
|
6
|
+
bind('Environment').toConstantValue(envConfig.config.NODE_ENV || 'development');
|
|
7
|
+
bind(core.CommonType.ENVIRONMENT).toConstantValue(envConfig.config.NODE_ENV || 'development');
|
|
8
|
+
bind('PubSub').toConstantValue(pubsub);
|
|
9
|
+
bind(core.CommonType.PUBSUB).toConstantValue(pubsub);
|
|
10
|
+
bind(core.CommonType.MOLECULER_BROKER).toConstantValue(broker);
|
|
11
|
+
bind('MoleculerBroker').toConstantValue(broker);
|
|
12
|
+
bind('MongoDBConnection').toConstantValue(mongoClient);
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Controls the lifecycle of the Application Server
|
|
16
|
+
*
|
|
17
|
+
* @export
|
|
18
|
+
* @class StackServer
|
|
19
|
+
*/
|
|
20
|
+
class StackServer {
|
|
21
|
+
constructor(feature, settings) {
|
|
22
|
+
this.serverFeature = feature;
|
|
23
|
+
this.settings = settings;
|
|
24
|
+
this.logger = server.logger.child({ className: 'StackServer' });
|
|
25
|
+
}
|
|
26
|
+
async initialize() {
|
|
27
|
+
this.logger.info('StackServer initializing');
|
|
28
|
+
this.connectionBroker = new connectionBroker.ConnectionBroker(moleculer_config.default.transporter, this.logger);
|
|
29
|
+
this.connectionBroker.redisDataloaderClient;
|
|
30
|
+
const mongoClient = await this.connectionBroker.mongoConnection;
|
|
31
|
+
this.microserviceBroker = new moleculer.ServiceBroker(Object.assign(Object.assign({}, moleculer_config.default), { middlewares: [
|
|
32
|
+
moleculerInterNamespace.InterNamespaceMiddleware([
|
|
33
|
+
{
|
|
34
|
+
namespace: 'api-admin',
|
|
35
|
+
transporter: moleculer_config.default.transporter,
|
|
36
|
+
},
|
|
37
|
+
]),
|
|
38
|
+
], started: async () => {
|
|
39
|
+
await this.serverFeature.microservicePreStart(this.microserviceContainer);
|
|
40
|
+
await this.serverFeature.microservicePostStart(this.microserviceContainer);
|
|
41
|
+
} }));
|
|
42
|
+
const pubsub = await this.connectionBroker.graphqlPubsub;
|
|
43
|
+
const InfraStructureFeature = new serverCore.Feature({
|
|
44
|
+
createHemeraContainerFunc: [
|
|
45
|
+
() => infraModule({
|
|
46
|
+
broker: this.microserviceBroker,
|
|
47
|
+
pubsub,
|
|
48
|
+
mongoClient,
|
|
49
|
+
logger: server.logger,
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
const allModules = new serverCore.Feature(InfraStructureFeature, this.serverFeature);
|
|
54
|
+
this.microserviceContainer = await allModules.createHemeraContainers(Object.assign(Object.assign({}, this.settings), { mongoConnection: mongoClient }));
|
|
55
|
+
const serviceBroker = {
|
|
56
|
+
microserviceContainer: this.microserviceContainer,
|
|
57
|
+
logger: this.logger,
|
|
58
|
+
};
|
|
59
|
+
// set the service container
|
|
60
|
+
this.microserviceContainer = serviceBroker.microserviceContainer;
|
|
61
|
+
allModules.loadClientMoleculerService({
|
|
62
|
+
broker: this.microserviceBroker,
|
|
63
|
+
container: this.microserviceContainer,
|
|
64
|
+
settings: this.settings,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async start() {
|
|
68
|
+
await this.microserviceBroker.start();
|
|
69
|
+
}
|
|
70
|
+
async cleanup() {
|
|
71
|
+
if (this.connectionBroker) {
|
|
72
|
+
await this.connectionBroker.stop();
|
|
73
|
+
}
|
|
74
|
+
if (this.microserviceBroker) {
|
|
75
|
+
await this.microserviceBroker.stop();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}exports.StackServer=StackServer;//# sourceMappingURL=stack-server.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-server.cjs","sources":["../src/stack-server.ts"],"sourcesContent":[null],"names":["ContainerModule","CommonType","config","serverLogger","ConnectionBroker","brokerConfig","ServiceBroker","InterNamespaceMiddleware","ServerFeature"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Feature as ServerFeature } from '@common-stack/server-core';
|
|
2
|
+
/**
|
|
3
|
+
* Controls the lifecycle of the Application Server
|
|
4
|
+
*
|
|
5
|
+
* @export
|
|
6
|
+
* @class StackServer
|
|
7
|
+
*/
|
|
8
|
+
export declare class StackServer {
|
|
9
|
+
private logger;
|
|
10
|
+
private connectionBroker;
|
|
11
|
+
private microserviceBroker;
|
|
12
|
+
private serviceContainer;
|
|
13
|
+
private microserviceContainer;
|
|
14
|
+
private serverFeature;
|
|
15
|
+
private settings;
|
|
16
|
+
constructor(feature: ServerFeature, settings: any);
|
|
17
|
+
initialize(): Promise<void>;
|
|
18
|
+
start(): Promise<void>;
|
|
19
|
+
cleanup(): Promise<void>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import {logger}from'@cdm-logger/server';import {Feature}from'@common-stack/server-core';import {ContainerModule}from'inversify';import {ServiceBroker}from'moleculer';import {CommonType}from'@common-stack/core';import brokerConfig from'./config/moleculer.config.mjs';import {config}from'./config/env-config.mjs';import {ConnectionBroker}from'./connectors/connection-broker.mjs';import {InterNamespaceMiddleware}from'./middleware/moleculer-inter-namespace.mjs';/* eslint-disable import/no-extraneous-dependencies */
|
|
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
|
+
/**
|
|
15
|
+
* Controls the lifecycle of the Application Server
|
|
16
|
+
*
|
|
17
|
+
* @export
|
|
18
|
+
* @class StackServer
|
|
19
|
+
*/
|
|
20
|
+
class StackServer {
|
|
21
|
+
constructor(feature, settings) {
|
|
22
|
+
this.serverFeature = feature;
|
|
23
|
+
this.settings = settings;
|
|
24
|
+
this.logger = logger.child({ className: 'StackServer' });
|
|
25
|
+
}
|
|
26
|
+
async initialize() {
|
|
27
|
+
this.logger.info('StackServer initializing');
|
|
28
|
+
this.connectionBroker = new ConnectionBroker(brokerConfig.transporter, this.logger);
|
|
29
|
+
this.connectionBroker.redisDataloaderClient;
|
|
30
|
+
const mongoClient = await this.connectionBroker.mongoConnection;
|
|
31
|
+
this.microserviceBroker = new ServiceBroker(Object.assign(Object.assign({}, brokerConfig), { middlewares: [
|
|
32
|
+
InterNamespaceMiddleware([
|
|
33
|
+
{
|
|
34
|
+
namespace: 'api-admin',
|
|
35
|
+
transporter: brokerConfig.transporter,
|
|
36
|
+
},
|
|
37
|
+
]),
|
|
38
|
+
], started: async () => {
|
|
39
|
+
await this.serverFeature.microservicePreStart(this.microserviceContainer);
|
|
40
|
+
await this.serverFeature.microservicePostStart(this.microserviceContainer);
|
|
41
|
+
} }));
|
|
42
|
+
const pubsub = await this.connectionBroker.graphqlPubsub;
|
|
43
|
+
const InfraStructureFeature = new Feature({
|
|
44
|
+
createHemeraContainerFunc: [
|
|
45
|
+
() => infraModule({
|
|
46
|
+
broker: this.microserviceBroker,
|
|
47
|
+
pubsub,
|
|
48
|
+
mongoClient,
|
|
49
|
+
logger: logger,
|
|
50
|
+
}),
|
|
51
|
+
],
|
|
52
|
+
});
|
|
53
|
+
const allModules = new Feature(InfraStructureFeature, this.serverFeature);
|
|
54
|
+
this.microserviceContainer = await allModules.createHemeraContainers(Object.assign(Object.assign({}, this.settings), { mongoConnection: mongoClient }));
|
|
55
|
+
const serviceBroker = {
|
|
56
|
+
microserviceContainer: this.microserviceContainer,
|
|
57
|
+
logger: this.logger,
|
|
58
|
+
};
|
|
59
|
+
// set the service container
|
|
60
|
+
this.microserviceContainer = serviceBroker.microserviceContainer;
|
|
61
|
+
allModules.loadClientMoleculerService({
|
|
62
|
+
broker: this.microserviceBroker,
|
|
63
|
+
container: this.microserviceContainer,
|
|
64
|
+
settings: this.settings,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async start() {
|
|
68
|
+
await this.microserviceBroker.start();
|
|
69
|
+
}
|
|
70
|
+
async cleanup() {
|
|
71
|
+
if (this.connectionBroker) {
|
|
72
|
+
await this.connectionBroker.stop();
|
|
73
|
+
}
|
|
74
|
+
if (this.microserviceBroker) {
|
|
75
|
+
await this.microserviceBroker.stop();
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}export{StackServer};//# sourceMappingURL=stack-server.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-server.mjs","sources":["../src/stack-server.ts"],"sourcesContent":[null],"names":["serverLogger","ServerFeature"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@common-stack/server-stack",
|
|
3
|
+
"version": "0.5.29",
|
|
4
|
+
"description": "common core for higher packages to depend on",
|
|
5
|
+
"license": "ISC",
|
|
6
|
+
"author": "CDMBase LLC",
|
|
7
|
+
"main": "lib/index.cjs",
|
|
8
|
+
"module": "lib/index.mjs",
|
|
9
|
+
"types": "lib/index.d.ts",
|
|
10
|
+
"files": [
|
|
11
|
+
"lib"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "yarn build:clean && yarn build:lib",
|
|
15
|
+
"build:clean": "rimraf lib",
|
|
16
|
+
"build:lib": "rollup -c rollup.config.mjs",
|
|
17
|
+
"build:lib:watch": "yarn build:lib -- --watch",
|
|
18
|
+
"jest": "./node_modules/.bin/jest",
|
|
19
|
+
"prepublish": "yarn build",
|
|
20
|
+
"test": "jest",
|
|
21
|
+
"test:debug": "npm test -- --runInBand",
|
|
22
|
+
"test:watch": "npm test -- --watch",
|
|
23
|
+
"watch": "yarn build:lib:watch"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@common-stack/server-core": "^0.5.29"
|
|
27
|
+
},
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"@cdm-logger/core": ">=7.0.12",
|
|
30
|
+
"envalid": "*",
|
|
31
|
+
"moleculer": "*"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"gitHead": "4463f38cbb94646a5f8ee74a00f8158e9d36a854",
|
|
37
|
+
"typescript": {
|
|
38
|
+
"definition": "lib/index.d.ts"
|
|
39
|
+
}
|
|
40
|
+
}
|