@common-stack/generate-plugin 5.0.6-alpha.3 → 5.0.6-alpha.4
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/.eslintrc.json +1 -1
- package/CHANGELOG.md +4 -0
- package/executors.json +14 -0
- package/generators.json +15 -0
- package/lib/executors/sort-package-json/executor.cjs +46 -0
- package/lib/executors/sort-package-json/executor.cjs.map +1 -0
- package/lib/executors/sort-package-json/executor.d.ts +4 -0
- package/lib/executors/sort-package-json/executor.mjs +46 -0
- package/lib/executors/sort-package-json/executor.mjs.map +1 -0
- package/lib/executors/sort-package-json/executor.spec.d.ts +1 -0
- package/lib/executors/sort-package-json/schema.json +9 -0
- package/lib/executors/update-deploy-version/executor.cjs +22 -0
- package/lib/executors/update-deploy-version/executor.cjs.map +1 -0
- package/lib/executors/update-deploy-version/executor.d.ts +4 -0
- package/lib/executors/update-deploy-version/executor.mjs +22 -0
- package/lib/executors/update-deploy-version/executor.mjs.map +1 -0
- package/lib/executors/update-deploy-version/executor.spec.d.ts +1 -0
- package/lib/executors/update-deploy-version/schema.json +14 -0
- package/lib/generators/add-backend/files/package.json +5 -5
- package/lib/generators/add-backend/files/tsconfig.json +1 -1
- package/lib/generators/add-backend/files/webpack.config.js +6 -10
- package/lib/generators/add-browser-package/files/package.json +1 -1
- package/lib/generators/add-client-package/files/CHANGELOG.md +807 -0
- package/lib/generators/add-client-package/files/LICENSE +674 -0
- package/lib/generators/add-client-package/files/jest.config.js +13 -0
- package/lib/generators/add-client-package/files/package.json +31 -0
- package/lib/generators/add-client-package/files/rollup.config.mjs +29 -0
- package/lib/generators/add-client-package/files/src/components/index.tsx.template +1 -0
- package/lib/generators/add-client-package/files/src/index.ts.template +1 -0
- package/lib/generators/add-client-package/files/tsconfig.json +27 -0
- package/lib/generators/add-client-package/files/webpack.config.js +72 -0
- package/lib/generators/add-client-package/generator.cjs +19 -0
- package/lib/generators/add-client-package/generator.cjs.map +1 -0
- package/lib/generators/add-client-package/generator.d.ts +4 -0
- package/lib/generators/add-client-package/generator.mjs +19 -0
- package/lib/generators/add-client-package/generator.mjs.map +1 -0
- package/lib/generators/add-client-package/generator.spec.d.ts +1 -0
- package/lib/generators/add-client-package/schema.json +19 -0
- package/lib/generators/add-core-package/files/CHANGELOG.md +1076 -0
- package/lib/generators/add-core-package/files/LICENSE +39 -0
- package/lib/generators/add-core-package/files/jest.config.js +3 -0
- package/lib/generators/add-core-package/files/package.json +31 -0
- package/lib/generators/add-core-package/files/rollup.config.mjs +65 -0
- package/lib/generators/add-core-package/files/src/constants/index.ts.template +1 -0
- package/lib/generators/add-core-package/files/src/constants/types.ts.template +3 -0
- package/lib/generators/add-core-package/files/src/index.ts.template +2 -0
- package/lib/generators/add-core-package/files/src/types/index.ts.template +1 -0
- package/lib/generators/add-core-package/files/src/types/types.ts.template +17 -0
- package/lib/generators/add-core-package/files/tsconfig.json +22 -0
- package/lib/generators/add-core-package/files/webpack.config.js +53 -0
- package/lib/generators/add-core-package/generator.cjs +19 -0
- package/lib/generators/add-core-package/generator.cjs.map +1 -0
- package/lib/generators/add-core-package/generator.d.ts +4 -0
- package/lib/generators/add-core-package/generator.mjs +19 -0
- package/lib/generators/add-core-package/generator.mjs.map +1 -0
- package/lib/generators/add-core-package/generator.spec.d.ts +1 -0
- package/lib/generators/add-core-package/schema.json +19 -0
- package/lib/generators/add-frontend/templates/package.json +8 -8
- package/lib/generators/add-fullstack/files/package.json +1 -1
- package/lib/generators/add-moleculer/files/package.json +5 -5
- package/lib/generators/add-server-package/files/CHANGELOG.md +2599 -0
- package/lib/generators/add-server-package/files/LICENSE +674 -0
- package/lib/generators/add-server-package/files/jest.config.js +32 -0
- package/lib/generators/add-server-package/files/package.json +78 -0
- package/lib/generators/add-server-package/files/rollup.config.mjs +30 -0
- package/lib/generators/add-server-package/files/src/constants/constants.ts.template +62 -0
- package/lib/generators/add-server-package/files/src/constants/index.ts.template +1 -0
- package/lib/generators/add-server-package/files/src/constants/types.ts.template +21 -0
- package/lib/generators/add-server-package/files/src/index.ts.template +6 -0
- package/lib/generators/add-server-package/files/src/module.ts.template +6 -0
- package/lib/generators/add-server-package/files/tsconfig.json +27 -0
- package/lib/generators/add-server-package/generator.cjs +19 -0
- package/lib/generators/add-server-package/generator.cjs.map +1 -0
- package/lib/generators/add-server-package/generator.d.ts +4 -0
- package/lib/generators/add-server-package/generator.mjs +19 -0
- package/lib/generators/add-server-package/generator.mjs.map +1 -0
- package/lib/generators/add-server-package/generator.spec.d.ts +1 -0
- package/lib/generators/add-server-package/schema.json +19 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.mjs +1 -1
- package/package.json +3 -2
- package/project.json +12 -1
- package/rollup.config.mjs +8 -0
- package/src/executors/sort-package-json/executor.spec.ts +18 -0
- package/src/executors/sort-package-json/executor.ts +53 -0
- package/src/executors/sort-package-json/schema.d.ts +1 -0
- package/src/executors/sort-package-json/schema.json +9 -0
- package/src/executors/update-deploy-version/executor.spec.ts +18 -0
- package/src/executors/update-deploy-version/executor.ts +36 -0
- package/src/executors/update-deploy-version/schema.d.ts +3 -0
- package/src/executors/update-deploy-version/schema.json +14 -0
- package/src/generators/add-client-package/generator.spec.ts +20 -0
- package/src/generators/add-client-package/generator.ts +23 -0
- package/src/generators/add-client-package/schema.d.ts +4 -0
- package/src/generators/add-client-package/schema.json +19 -0
- package/src/generators/add-core-package/generator.spec.ts +20 -0
- package/src/generators/add-core-package/generator.ts +23 -0
- package/src/generators/add-core-package/schema.d.ts +4 -0
- package/src/generators/add-core-package/schema.json +19 -0
- package/src/generators/add-fullstack/files/package.json +1 -1
- package/src/generators/add-moleculer/files/package.json +5 -5
- package/src/generators/add-server-package/generator.spec.ts +20 -0
- package/src/generators/add-server-package/generator.ts +23 -0
- package/src/generators/add-server-package/schema.d.ts +4 -0
- package/src/generators/add-server-package/schema.json +19 -0
- package/src/index.ts +5 -0
- package/lib/generators/add-backend/files/knexfile.js +0 -63
- package/lib/generators/add-backend/files/src/api/remote-config.ts.template +0 -11
- package/lib/generators/add-backend/files/src/api/resolver.ts.template +0 -15
- package/lib/generators/add-backend/files/src/api/scalar.ts.template +0 -16
- package/lib/generators/add-backend/files/src/api/schema-builder.ts.template +0 -189
- package/lib/generators/add-backend/files/src/api/utils.ts.template +0 -44
- package/lib/generators/add-backend/files/src/config/moleculer.config.ts.template +0 -228
- package/lib/generators/add-backend/files/src/connectors/connection-broker.ts.template +0 -80
- package/lib/generators/add-backend/files/src/connectors/graphql-pubsub-connector.ts.template +0 -43
- package/lib/generators/add-backend/files/src/connectors/mongo-connector.ts.template +0 -78
- package/lib/generators/add-backend/files/src/connectors/nats-connector.ts.template +0 -82
- package/lib/generators/add-backend/files/src/connectors/redis-connector.ts.template +0 -73
- package/lib/generators/add-backend/files/src/express-app.ts.template +0 -67
- package/lib/generators/add-backend/files/src/interfaces/index.ts.template +0 -1
- package/lib/generators/add-backend/files/src/interfaces/module-interface.ts.template +0 -16
- package/lib/generators/add-backend/files/src/main.spec.ts.template +0 -129
- package/lib/generators/add-backend/files/src/middleware/__tests__/cors.test.ts.template +0 -12
- package/lib/generators/add-backend/files/src/middleware/cors.ts.template +0 -31
- package/lib/generators/add-backend/files/src/middleware/error.ts.template +0 -63
- package/lib/generators/add-backend/files/src/middleware/moleculer-inter-namespace.ts.template +0 -60
- package/lib/generators/add-backend/files/src/middleware/persistedQuery.ts.template +0 -40
- package/lib/generators/add-backend/files/src/middleware/sentry.ts.template +0 -9
- package/lib/generators/add-backend/files/src/middleware/services.ts.template +0 -16
- package/lib/generators/add-backend/files/src/middleware/tracer.ts.template +0 -24
- package/lib/generators/add-backend/files/src/modules/auth/schema/auth-schema.graphql +0 -25
- package/lib/generators/add-backend/files/src/server-setup/graphql-server.ts.template +0 -185
- package/lib/generators/add-backend/files/src/server-setup/graphql-subscription-server.ts.template +0 -113
- package/lib/generators/add-backend/files/src/server-setup/graphql-ws.ts.template +0 -158
- package/lib/generators/add-backend/files/src/server-setup/mongodb-migration-update.ts.template +0 -47
- package/lib/generators/add-backend/files/src/server-setup/utils.ts.template +0 -43
- package/lib/generators/add-backend/files/src/server-setup/websocket-multipath-update.ts.template +0 -88
- package/lib/generators/add-backend/files/src/stack-server.ts.template +0 -277
- package/lib/generators/add-backend/files/src/utils/migrations.ts.template +0 -32
- package/lib/generators/add-backend/files/uploads/3986781.ppt +0 -0
|
@@ -1,228 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-empty-function */
|
|
2
|
-
import { BrokerOptions, Errors } from 'moleculer';
|
|
3
|
-
import { config } from './env-config';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Moleculer ServiceBroker configuration file
|
|
7
|
-
*
|
|
8
|
-
* More info about options:
|
|
9
|
-
* https://moleculer.services/docs/0.14/configuration.html
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* Overwrite options in production:
|
|
13
|
-
* ================================
|
|
14
|
-
* You can overwrite any option with environment variables.
|
|
15
|
-
* For example to overwrite the 'logLevel', use `LOGLEVEL=warn` env var.
|
|
16
|
-
* To overwrite a nested parameter, e.g. retryPolicy.retries, use `RETRYPOLICY_RETRIES=10` env var.
|
|
17
|
-
*
|
|
18
|
-
* To overwrite broker’s deeply nested default options, which are not presented in 'moleculer.config.ts',
|
|
19
|
-
* via environment variables, use the `MOL_` prefix and double underscore `__` for nested properties in .env file.
|
|
20
|
-
* For example, to set the cacher prefix to `MYCACHE`, you should declare an env var as `MOL_CACHER__OPTIONS__PREFIX=MYCACHE`.
|
|
21
|
-
*/
|
|
22
|
-
const brokerConfig: BrokerOptions = {
|
|
23
|
-
// Namespace of nodes to segment your nodes on the same network.
|
|
24
|
-
namespace: config.NAMESPACE,
|
|
25
|
-
// namespace: null,
|
|
26
|
-
// Unique node identifier. Must be unique in a namespace.
|
|
27
|
-
// nodeID: config.CONNECTION_ID,
|
|
28
|
-
|
|
29
|
-
// Enable/disable logging or use custom logger. More info: https://moleculer.services/docs/0.14/logging.html
|
|
30
|
-
// Available logger types: 'Console', 'File', 'Pino', 'Winston', 'Bunyan', 'debug', 'Log4js', 'Datadog'
|
|
31
|
-
logger: {
|
|
32
|
-
type: 'Console',
|
|
33
|
-
options: {
|
|
34
|
-
// Using colors on the output
|
|
35
|
-
colors: true,
|
|
36
|
-
// Print module names with different colors (like docker-compose for containers)
|
|
37
|
-
moduleColors: false,
|
|
38
|
-
// Line formatter. It can be 'json', 'short',
|
|
39
|
-
// 'simple', 'full', a `Function` or a template string like '{timestamp} {level} {nodeID}/{mod}: {msg}'
|
|
40
|
-
formatter: 'full',
|
|
41
|
-
// Custom object printer. If not defined, it uses the `util.inspect` method.
|
|
42
|
-
objectPrinter: null,
|
|
43
|
-
// Auto-padding the module name in order to messages begin at the same column.
|
|
44
|
-
autoPadding: false,
|
|
45
|
-
},
|
|
46
|
-
},
|
|
47
|
-
// Default log level for built-in console logger. It can be overwritten in logger options above.
|
|
48
|
-
// Available values: trace, debug, info, warn, error, fatal
|
|
49
|
-
logLevel: config.HEMERA_LOG_LEVEL as any,
|
|
50
|
-
|
|
51
|
-
// Define transporter.
|
|
52
|
-
// More info: https://moleculer.services/docs/0.14/networking.html
|
|
53
|
-
// Note: During the development, you don't need to define it because all services will be loaded locally.
|
|
54
|
-
// In production you can set it via `TRANSPORTER=nats://localhost:4222` environment variable.
|
|
55
|
-
transporter:
|
|
56
|
-
config.NODE_ENV === 'development'
|
|
57
|
-
? 'TCP'
|
|
58
|
-
: {
|
|
59
|
-
type: 'NATS',
|
|
60
|
-
options: {
|
|
61
|
-
url: config.NATS_URL,
|
|
62
|
-
user: config.NATS_USER,
|
|
63
|
-
pass: config.NATS_PW,
|
|
64
|
-
reconnectTimeWait: 1000,
|
|
65
|
-
},
|
|
66
|
-
},
|
|
67
|
-
|
|
68
|
-
// Define a cacher.
|
|
69
|
-
// More info: https://moleculer.services/docs/0.14/caching.html
|
|
70
|
-
// cacher: {
|
|
71
|
-
// type: 'Redis',
|
|
72
|
-
// enabled: false,
|
|
73
|
-
// options: {
|
|
74
|
-
|
|
75
|
-
// // Redis settings
|
|
76
|
-
// redis: {
|
|
77
|
-
|
|
78
|
-
// }
|
|
79
|
-
// }
|
|
80
|
-
// },
|
|
81
|
-
|
|
82
|
-
// Define a serializer.
|
|
83
|
-
// Available values: 'JSON', 'Avro', 'ProtoBuf', 'MsgPack', 'Notepack', 'Thrift'.
|
|
84
|
-
// More info: https://moleculer.services/docs/0.13/networking.html
|
|
85
|
-
serializer: 'JSON',
|
|
86
|
-
|
|
87
|
-
// Number of milliseconds to wait before reject a request with a RequestTimeout error. Disabled: 0
|
|
88
|
-
requestTimeout: 10 * 1000,
|
|
89
|
-
|
|
90
|
-
// Retry policy settings. More info: https://moleculer.services/docs/0.13/fault-tolerance.html#Retry
|
|
91
|
-
retryPolicy: {
|
|
92
|
-
// Enable feature
|
|
93
|
-
enabled: false,
|
|
94
|
-
// Count of retries
|
|
95
|
-
retries: 5,
|
|
96
|
-
// First delay in milliseconds.
|
|
97
|
-
delay: 100,
|
|
98
|
-
// Maximum delay in milliseconds.
|
|
99
|
-
maxDelay: 1000,
|
|
100
|
-
// Backoff factor for delay. 2 means exponential backoff.
|
|
101
|
-
factor: 2,
|
|
102
|
-
// A function to check failed requests.
|
|
103
|
-
check: (err: Errors.MoleculerRetryableError) => err && !!err.retryable,
|
|
104
|
-
},
|
|
105
|
-
|
|
106
|
-
// Limit of calling level. If it reaches the limit, broker will throw an MaxCallLevelError error. (Infinite loop protection)
|
|
107
|
-
maxCallLevel: 100,
|
|
108
|
-
|
|
109
|
-
// Number of seconds to send heartbeat packet to other nodes.
|
|
110
|
-
heartbeatInterval: 5,
|
|
111
|
-
// Number of seconds to wait before setting node to unavailable status.
|
|
112
|
-
heartbeatTimeout: 15,
|
|
113
|
-
|
|
114
|
-
// tslint:disable-next-line:max-line-length
|
|
115
|
-
// Tracking requests and waiting for running requests before shutdowning. More info: https://moleculer.services/docs/0.13/fault-tolerance.html
|
|
116
|
-
tracking: {
|
|
117
|
-
// Enable feature
|
|
118
|
-
enabled: false,
|
|
119
|
-
// Number of milliseconds to wait before shutdowning the process
|
|
120
|
-
shutdownTimeout: 5000,
|
|
121
|
-
},
|
|
122
|
-
|
|
123
|
-
// Disable built-in request & emit balancer. (Transporter must support it, as well.)
|
|
124
|
-
disableBalancer: false,
|
|
125
|
-
|
|
126
|
-
// Settings of Service Registry. More info: https://moleculer.services/docs/0.14/registry.html
|
|
127
|
-
registry: {
|
|
128
|
-
// Define balancing strategy. More info: https://moleculer.services/docs/0.14/balancing.html
|
|
129
|
-
// Available values: 'RoundRobin', 'Random', 'CpuUsage', 'Latency'
|
|
130
|
-
strategy: 'RoundRobin',
|
|
131
|
-
// Enable local action call preferring.
|
|
132
|
-
preferLocal: true,
|
|
133
|
-
},
|
|
134
|
-
|
|
135
|
-
// Settings of Circuit Breaker. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Circuit-Breaker
|
|
136
|
-
circuitBreaker: {
|
|
137
|
-
// Enable feature
|
|
138
|
-
enabled: false,
|
|
139
|
-
// Threshold value. 0.5 means that 50% should be failed for tripping.
|
|
140
|
-
threshold: 0.5,
|
|
141
|
-
// Minimum request count. Below it, CB does not trip.
|
|
142
|
-
minRequestCount: 20,
|
|
143
|
-
// Number of seconds for time window.
|
|
144
|
-
windowTime: 60,
|
|
145
|
-
// Number of milliseconds to switch from open to half-open state
|
|
146
|
-
halfOpenTime: 10 * 1000,
|
|
147
|
-
// A function to check failed requests.
|
|
148
|
-
check: (err: Errors.MoleculerRetryableError) => err && err.code >= 500,
|
|
149
|
-
},
|
|
150
|
-
|
|
151
|
-
// Settings of bulkhead feature. More info: https://moleculer.services/docs/0.14/fault-tolerance.html#Bulkhead
|
|
152
|
-
bulkhead: {
|
|
153
|
-
// Enable feature.
|
|
154
|
-
enabled: false,
|
|
155
|
-
// Maximum concurrent executions.
|
|
156
|
-
concurrency: 10,
|
|
157
|
-
// Maximum size of queue
|
|
158
|
-
maxQueueSize: 100,
|
|
159
|
-
},
|
|
160
|
-
|
|
161
|
-
// Enable action & event parameter validation. More info: https://moleculer.services/docs/0.14/validating.html
|
|
162
|
-
validator: true,
|
|
163
|
-
|
|
164
|
-
errorHandler: null,
|
|
165
|
-
|
|
166
|
-
// Enable/disable built-in metrics function. More info: https://moleculer.services/docs/0.14/metrics.html
|
|
167
|
-
metrics: {
|
|
168
|
-
enabled: false,
|
|
169
|
-
// Available built-in reporters: 'Console', 'CSV', 'Event', 'Prometheus', 'Datadog', 'StatsD'
|
|
170
|
-
reporter: {
|
|
171
|
-
type: 'Prometheus',
|
|
172
|
-
options: {
|
|
173
|
-
// HTTP port
|
|
174
|
-
port: 3030,
|
|
175
|
-
// HTTP URL path
|
|
176
|
-
path: '/metrics',
|
|
177
|
-
// Default labels which are appended to all metrics labels
|
|
178
|
-
defaultLabels: (registry) => ({
|
|
179
|
-
namespace: registry.broker.namespace,
|
|
180
|
-
nodeID: registry.broker.nodeID,
|
|
181
|
-
}),
|
|
182
|
-
},
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
|
|
186
|
-
// Enable built-in tracing function. More info: https://moleculer.services/docs/0.14/tracing.html
|
|
187
|
-
tracing: {
|
|
188
|
-
enabled: true,
|
|
189
|
-
// Available built-in exporters: 'Console', 'Datadog', 'Event', 'EventLegacy', 'Jaeger', 'Zipkin'
|
|
190
|
-
exporter: {
|
|
191
|
-
type: 'Console', // Console exporter is only for development!
|
|
192
|
-
options: {
|
|
193
|
-
// Custom logger
|
|
194
|
-
logger: null,
|
|
195
|
-
// Using colors
|
|
196
|
-
colors: true,
|
|
197
|
-
// Width of row
|
|
198
|
-
width: 100,
|
|
199
|
-
// Gauge width in the row
|
|
200
|
-
gaugeWidth: 40,
|
|
201
|
-
},
|
|
202
|
-
},
|
|
203
|
-
},
|
|
204
|
-
|
|
205
|
-
// Register internal services ('$node'). More info: https://moleculer.services/docs/0.13/services.html#Internal-services
|
|
206
|
-
internalServices: true,
|
|
207
|
-
// Register internal middlewares. More info: https://moleculer.services/docs/0.13/middlewares.html#Internal-middlewares
|
|
208
|
-
internalMiddlewares: true,
|
|
209
|
-
|
|
210
|
-
// Watch the loaded services and hot reload if they changed.
|
|
211
|
-
// You can also enable it in Moleculer Runner with `--hot` argument
|
|
212
|
-
hotReload: false,
|
|
213
|
-
|
|
214
|
-
// Register custom middlewares
|
|
215
|
-
middlewares: [],
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
// Called after broker created.
|
|
219
|
-
created(broker) {},
|
|
220
|
-
|
|
221
|
-
// Called after broker starte.
|
|
222
|
-
started(broker) {},
|
|
223
|
-
|
|
224
|
-
// Called after broker stopped.
|
|
225
|
-
stopped(broker) {},
|
|
226
|
-
};
|
|
227
|
-
|
|
228
|
-
export { brokerConfig };
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
/* eslint-disable import/no-extraneous-dependencies */
|
|
2
|
-
/* eslint-disable no-unused-expressions */
|
|
3
|
-
/* eslint-disable no-underscore-dangle */
|
|
4
|
-
|
|
5
|
-
import { Transporter, GenericObject } from 'moleculer';
|
|
6
|
-
import { CdmLogger } from '@cdm-logger/core';
|
|
7
|
-
import { MongoConnector } from './mongo-connector';
|
|
8
|
-
import { NatsConnector } from './nats-connector';
|
|
9
|
-
import { RedisConnector } from './redis-connector';
|
|
10
|
-
import { config } from '../config';
|
|
11
|
-
import { GraphqlPubSubConnector } from './graphql-pubsub-connector';
|
|
12
|
-
|
|
13
|
-
type ILogger = CdmLogger.ILogger;
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
* Connection broker class
|
|
17
|
-
*
|
|
18
|
-
* @class ConnectionBroker
|
|
19
|
-
*/
|
|
20
|
-
export class ConnectionBroker {
|
|
21
|
-
private _mongoConnector: MongoConnector;
|
|
22
|
-
|
|
23
|
-
private _redisConnector: RedisConnector;
|
|
24
|
-
|
|
25
|
-
private _natsConnector: NatsConnector;
|
|
26
|
-
|
|
27
|
-
private _graphqlPubsubConnector: GraphqlPubSubConnector;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Creates an instance of ConnectionBroker.
|
|
31
|
-
* @param {*} options
|
|
32
|
-
* @memberof ConnectionBroker
|
|
33
|
-
*/
|
|
34
|
-
constructor(transporter: string | GenericObject, logger: ILogger) {
|
|
35
|
-
if (typeof transporter === 'string') {
|
|
36
|
-
if (transporter === 'TCP') {
|
|
37
|
-
this._graphqlPubsubConnector = new GraphqlPubSubConnector({ logger, type: 'TCP' });
|
|
38
|
-
} else if (transporter === 'NATS') {
|
|
39
|
-
this._natsConnector = new NatsConnector({});
|
|
40
|
-
this._graphqlPubsubConnector = new GraphqlPubSubConnector({
|
|
41
|
-
logger,
|
|
42
|
-
type: 'NATS',
|
|
43
|
-
client: this._natsConnector,
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
} else if (transporter.type === 'NATS') {
|
|
47
|
-
this._natsConnector = new NatsConnector(transporter.options);
|
|
48
|
-
this._graphqlPubsubConnector = new GraphqlPubSubConnector({
|
|
49
|
-
logger,
|
|
50
|
-
...transporter,
|
|
51
|
-
client: this._natsConnector,
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
this._mongoConnector = new MongoConnector(config.MONGO_URL);
|
|
56
|
-
this._redisConnector = new RedisConnector(); // TODO pass constructor options
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
public get mongoConnection() {
|
|
60
|
-
return this._mongoConnector.connect();
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
public get redisDataloaderClient() {
|
|
64
|
-
return this._redisConnector.getRedisDataloaderClient();
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
public get natsConnection() {
|
|
68
|
-
return this._natsConnector.connect();
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
public get graphqlPubsub() {
|
|
72
|
-
return this._graphqlPubsubConnector.getClient();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
public async stop() {
|
|
76
|
-
this._mongoConnector && (await this._mongoConnector.disconnect());
|
|
77
|
-
this._redisConnector && (await this._redisConnector.disconnect());
|
|
78
|
-
this._natsConnector && (await this._natsConnector.disconnect());
|
|
79
|
-
}
|
|
80
|
-
}
|
package/lib/generators/add-backend/files/src/connectors/graphql-pubsub-connector.ts.template
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/* eslint-disable no-return-assign */
|
|
2
|
-
import { PubSub, PubSubEngine } from 'graphql-subscriptions';
|
|
3
|
-
import { NatsPubSub } from 'graphql-nats-subscriptions';
|
|
4
|
-
import { logger } from '@cdm-logger/server';
|
|
5
|
-
import { GenericObject } from 'moleculer';
|
|
6
|
-
import { CdmLogger } from '@cdm-logger/core';
|
|
7
|
-
|
|
8
|
-
type ILogger = CdmLogger.ILogger;
|
|
9
|
-
|
|
10
|
-
type PubSubOptions = {
|
|
11
|
-
logger: ILogger;
|
|
12
|
-
} & GenericObject;
|
|
13
|
-
|
|
14
|
-
export class GraphqlPubSubConnector {
|
|
15
|
-
private client: PubSubEngine | NatsPubSub;
|
|
16
|
-
|
|
17
|
-
private opts: PubSubOptions;
|
|
18
|
-
|
|
19
|
-
private logger: ILogger;
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Creates an instance of GraphqlPubSubConnector.
|
|
23
|
-
* @param {*} opts
|
|
24
|
-
* @memberof GraphqlPubSubConnector
|
|
25
|
-
*/
|
|
26
|
-
constructor(opts?: PubSubOptions) {
|
|
27
|
-
this.opts = opts;
|
|
28
|
-
this.logger = opts.logger.child({ className: 'GraphqlPubSubConnector' });
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
public async getClient() {
|
|
32
|
-
if (this.opts.type === 'TCP') {
|
|
33
|
-
return (this.client = new PubSub());
|
|
34
|
-
}
|
|
35
|
-
if (this.opts.type === 'NATS') {
|
|
36
|
-
// console.log('--this.copts', this.opts.client)
|
|
37
|
-
const natsClient = await this.opts.client.connect();
|
|
38
|
-
return (this.client = new NatsPubSub({ client: natsClient, logger }));
|
|
39
|
-
}
|
|
40
|
-
this.logger.warn('Did not defined known transporter [%s], return default pubsub', this.opts.type);
|
|
41
|
-
return (this.client = new PubSub());
|
|
42
|
-
}
|
|
43
|
-
}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { connection, Connection, ConnectOptions, createConnection, plugin } from 'mongoose';
|
|
2
|
-
import { defaultsDeep } from 'lodash-es';
|
|
3
|
-
import { Db } from 'mongodb';
|
|
4
|
-
import { logExecutionTime, LoggerVerbosity } from 'mongoose-execution-time';
|
|
5
|
-
import { logger } from '@cdm-logger/server';
|
|
6
|
-
import { CdmLogger } from '@cdm-logger/core';
|
|
7
|
-
import { config } from '../config';
|
|
8
|
-
|
|
9
|
-
type ILogger = CdmLogger.ILogger;
|
|
10
|
-
|
|
11
|
-
export class MongoConnector {
|
|
12
|
-
private client: Connection;
|
|
13
|
-
|
|
14
|
-
private db: Db;
|
|
15
|
-
|
|
16
|
-
private opts: ConnectOptions;
|
|
17
|
-
|
|
18
|
-
private uri: string;
|
|
19
|
-
|
|
20
|
-
private logger: ILogger;
|
|
21
|
-
|
|
22
|
-
constructor(uri: string, opts?: ConnectOptions) {
|
|
23
|
-
this.opts = defaultsDeep(opts, {});
|
|
24
|
-
this.uri = uri;
|
|
25
|
-
this.logger = logger.child({ className: 'MongoConnector' });
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Connect to database
|
|
30
|
-
*
|
|
31
|
-
* @memberof MongoConnector
|
|
32
|
-
*/
|
|
33
|
-
public async connect(): Promise<Connection> {
|
|
34
|
-
if (this.client) {
|
|
35
|
-
return this.client;
|
|
36
|
-
}
|
|
37
|
-
const conn = createConnection(this.uri, this.opts).asPromise();
|
|
38
|
-
|
|
39
|
-
conn.then((result) => {
|
|
40
|
-
this.client = result;
|
|
41
|
-
this.db = result.db;
|
|
42
|
-
this.logger.info(' MongoDB has connected successfully.');
|
|
43
|
-
result.on('disconnected', () => this.logger.warn('Mongoose has disconnected.'));
|
|
44
|
-
result.on('error', (err) => this.logger.error('MongoDB error.', err));
|
|
45
|
-
result.on('reconnect', () => this.logger.info('Mongoose has reconnected.'));
|
|
46
|
-
});
|
|
47
|
-
if (
|
|
48
|
-
config.NODE_ENV === 'development' ||
|
|
49
|
-
__DEBUGGING__ ||
|
|
50
|
-
config.LOG_LEVEL === 'debug' ||
|
|
51
|
-
config.LOG_LEVEL === 'trace'
|
|
52
|
-
) {
|
|
53
|
-
plugin(logExecutionTime, {
|
|
54
|
-
logger: this.logger,
|
|
55
|
-
loggerVerbosity: LoggerVerbosity.High,
|
|
56
|
-
loggerLevel: config.LOG_LEVEL,
|
|
57
|
-
});
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires,global-require
|
|
61
|
-
// plugin(require('@kolinalabs/mongoose-consistent'), {
|
|
62
|
-
// actionDefault: 'no_action',
|
|
63
|
-
// });
|
|
64
|
-
return conn;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Disconnect from database
|
|
69
|
-
*
|
|
70
|
-
* @memberof MongoConnector
|
|
71
|
-
*/
|
|
72
|
-
public async disconnect() {
|
|
73
|
-
if (!this.client) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
await connection.close();
|
|
77
|
-
}
|
|
78
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import * as nats from 'nats';
|
|
2
|
-
import { defaultsDeep } from 'lodash-es';
|
|
3
|
-
import { logger } from '@cdm-logger/server';
|
|
4
|
-
import { CdmLogger } from '@cdm-logger/core';
|
|
5
|
-
|
|
6
|
-
type ILogger = CdmLogger.ILogger;
|
|
7
|
-
|
|
8
|
-
export class NatsConnector {
|
|
9
|
-
private opts: nats.ClientOpts;
|
|
10
|
-
|
|
11
|
-
private client: nats.Client;
|
|
12
|
-
|
|
13
|
-
private logger: ILogger;
|
|
14
|
-
|
|
15
|
-
private connected: boolean;
|
|
16
|
-
|
|
17
|
-
constructor(opts: nats.ClientOpts) {
|
|
18
|
-
this.opts = defaultsDeep(opts, {});
|
|
19
|
-
this.logger = logger.child({ className: 'NatsConnector' });
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
/**
|
|
23
|
-
* Connect to a NATS server
|
|
24
|
-
*
|
|
25
|
-
* @memberof NatsConnector
|
|
26
|
-
*/
|
|
27
|
-
public connect() {
|
|
28
|
-
if (this.client) {
|
|
29
|
-
return this.client;
|
|
30
|
-
}
|
|
31
|
-
return new Promise<nats.Client>((resolve, reject) => {
|
|
32
|
-
const client = nats.connect(this.opts);
|
|
33
|
-
|
|
34
|
-
client.on('connect', () => {
|
|
35
|
-
this.client = client;
|
|
36
|
-
this.connected = true;
|
|
37
|
-
this.logger.info('NATS client is connected.');
|
|
38
|
-
resolve(client);
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
client.on('reconnect', () => {
|
|
42
|
-
this.logger.info('NATS client is reconnected.');
|
|
43
|
-
this.connected = true;
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
client.on('reconnecting', () => {
|
|
47
|
-
this.logger.warn('NATS client is reconnecting...');
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
client.on('disconnect', () => {
|
|
51
|
-
if (this.connected) {
|
|
52
|
-
this.logger.warn('NATS client is disconnected.');
|
|
53
|
-
this.connected = false;
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
client.on('error', (e) => {
|
|
58
|
-
this.logger.error('NATS error.', e.message);
|
|
59
|
-
this.logger.debug(e);
|
|
60
|
-
reject(e);
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
client.on('close', () => {
|
|
64
|
-
this.logger.fatal('NATS connection close.');
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Disconnect from a NATS server
|
|
71
|
-
*
|
|
72
|
-
* @memberof NatsTransporter
|
|
73
|
-
*/
|
|
74
|
-
public disconnect() {
|
|
75
|
-
if (this.client) {
|
|
76
|
-
this.client.flush(() => {
|
|
77
|
-
this.client.close();
|
|
78
|
-
this.client = null;
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { defaultsDeep } from 'lodash-es';
|
|
4
|
-
import { RedisClusterCache, RedisCache } from 'apollo-server-cache-redis';
|
|
5
|
-
import * as IORedis from 'ioredis';
|
|
6
|
-
import { logger } from '@cdm-logger/server';
|
|
7
|
-
import { config } from '../config';
|
|
8
|
-
import { CdmLogger } from '@cdm-logger/core';
|
|
9
|
-
type ILogger = CdmLogger.ILogger;
|
|
10
|
-
|
|
11
|
-
export class RedisConnector {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
private client: RedisClusterCache | RedisCache;
|
|
15
|
-
private opts: IORedis.ClusterOptions | IORedis.RedisOptions;
|
|
16
|
-
private logger: ILogger;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Creats an instance of Redis.
|
|
20
|
-
*
|
|
21
|
-
* @param {object} opts
|
|
22
|
-
*/
|
|
23
|
-
constructor(opts?: IORedis.ClusterOptions | IORedis.RedisOptions) {
|
|
24
|
-
this.opts = defaultsDeep(opts, {
|
|
25
|
-
prefix: null,
|
|
26
|
-
});
|
|
27
|
-
this.logger = logger.child({ className: 'RedisConnector' });
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Connect to the server
|
|
32
|
-
*
|
|
33
|
-
* @memberof RedisConnector
|
|
34
|
-
*/
|
|
35
|
-
public connect() {
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
reject('this method not implemented');
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Return redis or redis.cluster Dataloader Client
|
|
44
|
-
*
|
|
45
|
-
* @memberof RedisConnection
|
|
46
|
-
*/
|
|
47
|
-
public getRedisDataloaderClient() {
|
|
48
|
-
let client: RedisClusterCache | RedisCache;
|
|
49
|
-
if (config.REDIS_CLUSTER_ENABLED) {
|
|
50
|
-
if (!config.REDIS_CLUSTER_URL) {
|
|
51
|
-
throw new Error(`No nodes defined for cluster, ${config.REDIS_CLUSTER_URL}`);
|
|
52
|
-
}
|
|
53
|
-
this.logger.info('Setting Redis.Cluster connection');
|
|
54
|
-
client = new RedisClusterCache(config.REDIS_CLUSTER_URL as any, this.opts);
|
|
55
|
-
} else {
|
|
56
|
-
this.logger.info('Setting Redis connection');
|
|
57
|
-
client = new RedisCache(config.REDIS_URL as any || this.opts);
|
|
58
|
-
}
|
|
59
|
-
return client;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Close Redis client connection.
|
|
64
|
-
*
|
|
65
|
-
* @memberof RedisConnection
|
|
66
|
-
*/
|
|
67
|
-
public disconnect() {
|
|
68
|
-
if (!this.client) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
return this.client.close();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
2
|
-
import * as express from 'express';
|
|
3
|
-
import * as bodyParser from 'body-parser';
|
|
4
|
-
import modules from './modules';
|
|
5
|
-
import { errorMiddleware } from './middleware/error';
|
|
6
|
-
import { contextServicesMiddleware } from './middleware/services';
|
|
7
|
-
import { sentryMiddleware, sentryErrorHandlerMiddleware } from './middleware/sentry';
|
|
8
|
-
import { IModuleService } from './interfaces';
|
|
9
|
-
import { corsMiddleware } from './middleware/cors';
|
|
10
|
-
|
|
11
|
-
const cookiesMiddleware = require('universal-cookie-express');
|
|
12
|
-
|
|
13
|
-
export function expressApp(options: IModuleService, middlewares, http?) {
|
|
14
|
-
const app: express.Express = express();
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
for (const applyBeforeware of modules.beforewares) {
|
|
18
|
-
applyBeforeware(app);
|
|
19
|
-
}
|
|
20
|
-
app.use(cookiesMiddleware());
|
|
21
|
-
app.use(contextServicesMiddleware(options.createContext, options.serviceContext));
|
|
22
|
-
|
|
23
|
-
// Don't rate limit heroku
|
|
24
|
-
app.enable('trust proxy');
|
|
25
|
-
|
|
26
|
-
app.use(sentryMiddleware);
|
|
27
|
-
|
|
28
|
-
if (middlewares !== null) {
|
|
29
|
-
app.use(middlewares);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
app.use('/', express.static(__FRONTEND_BUILD_DIR__, { maxAge: '180 days' }));
|
|
33
|
-
|
|
34
|
-
app.use(corsMiddleware);
|
|
35
|
-
app.use((req, res, next) => {
|
|
36
|
-
res.header('Access-Control-Allow-Credentials', JSON.stringify(true));
|
|
37
|
-
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
|
|
38
|
-
res.header(
|
|
39
|
-
'Access-Control-Allow-Headers',
|
|
40
|
-
'X-Requested-With, X-HTTP-Method-Override, X-CSP-Nonce, Content-Type, Accept',
|
|
41
|
-
);
|
|
42
|
-
next();
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
app.use(
|
|
46
|
-
bodyParser.json({
|
|
47
|
-
limit: '50mb',
|
|
48
|
-
verify: (req, res, buf) => {
|
|
49
|
-
// #Todo: Find some proper solution for it
|
|
50
|
-
(req as any).rawBody = buf;
|
|
51
|
-
},
|
|
52
|
-
}),
|
|
53
|
-
);
|
|
54
|
-
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true, parameterLimit: 50000 }));
|
|
55
|
-
|
|
56
|
-
for (const applyMiddleware of modules.middlewares) {
|
|
57
|
-
applyMiddleware(app);
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
if (__DEV__) {
|
|
61
|
-
app.use(errorMiddleware);
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
app.use(sentryErrorHandlerMiddleware);
|
|
65
|
-
|
|
66
|
-
return app;
|
|
67
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './module-interface';
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { GraphQLSchema } from 'graphql';
|
|
2
|
-
import { CdmLogger } from '@cdm-logger/core';
|
|
3
|
-
type ILogger = CdmLogger.ILogger;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export interface IModuleService {
|
|
7
|
-
serviceContainer: any;
|
|
8
|
-
serviceContext: any;
|
|
9
|
-
dataSource: any;
|
|
10
|
-
defaultPreferences: any;
|
|
11
|
-
createContext: any;
|
|
12
|
-
schema: GraphQLSchema;
|
|
13
|
-
logger: ILogger;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
|