@restorecommerce/facade 1.2.0 → 1.3.1
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/.eslintignore +3 -0
- package/.eslintrc.cjs +13 -0
- package/CHANGELOG.md +22 -0
- package/codegen/index.d.ts +1 -1
- package/codegen/index.js +18 -44
- package/debug-run.ts +7 -6
- package/dist/gql/index.d.ts +1 -1
- package/dist/gql/index.js +1 -17
- package/dist/gql/protos/federation.d.ts +3 -3
- package/dist/gql/protos/federation.js +16 -24
- package/dist/gql/protos/graphql.d.ts +4 -4
- package/dist/gql/protos/graphql.js +64 -42
- package/dist/gql/protos/index.d.ts +6 -6
- package/dist/gql/protos/index.js +6 -22
- package/dist/gql/protos/registry.d.ts +6 -6
- package/dist/gql/protos/registry.js +157 -176
- package/dist/gql/protos/resolvers.d.ts +3 -3
- package/dist/gql/protos/resolvers.js +78 -104
- package/dist/gql/protos/schema.d.ts +4 -4
- package/dist/gql/protos/schema.js +40 -53
- package/dist/gql/protos/types.d.ts +3 -3
- package/dist/gql/protos/types.js +1 -4
- package/dist/gql/protos/utils.d.ts +3 -3
- package/dist/gql/protos/utils.js +23 -62
- package/dist/gql/types/AccessControlTypes.js +13 -16
- package/dist/gql/types/DateType.js +4 -7
- package/dist/gql/types/FilterType.js +7 -10
- package/dist/gql/types/MetaType.js +8 -11
- package/dist/gql/types/ScopeType.js +4 -7
- package/dist/gql/types/SortType.js +5 -8
- package/dist/gql/types/StatusType.js +4 -7
- package/dist/gql/types/index.d.ts +7 -7
- package/dist/gql/types/index.js +7 -23
- package/dist/index.d.ts +14 -14
- package/dist/index.js +195 -207
- package/dist/interfaces.d.ts +8 -8
- package/dist/interfaces.js +1 -2
- package/dist/middlewares/index.d.ts +1 -1
- package/dist/middlewares/index.js +1 -17
- package/dist/middlewares/req-res-logger/index.d.ts +2 -2
- package/dist/middlewares/req-res-logger/index.js +33 -31
- package/dist/modules/access-control/gql/federation.d.ts +1 -1
- package/dist/modules/access-control/gql/federation.js +10 -17
- package/dist/modules/access-control/gql/schema.d.ts +1 -1
- package/dist/modules/access-control/gql/schema.generated.d.ts +136 -110
- package/dist/modules/access-control/gql/schema.generated.js +22 -25
- package/dist/modules/access-control/gql/schema.js +5 -9
- package/dist/modules/access-control/gql/types.d.ts +2 -2
- package/dist/modules/access-control/gql/types.js +13 -17
- package/dist/modules/access-control/grpc/index.d.ts +5 -5
- package/dist/modules/access-control/grpc/index.js +10 -14
- package/dist/modules/access-control/index.d.ts +2 -2
- package/dist/modules/access-control/index.js +20 -17
- package/dist/modules/access-control/interfaces.d.ts +3 -3
- package/dist/modules/access-control/interfaces.js +1 -4
- package/dist/modules/catalog/gql/federation.d.ts +1 -1
- package/dist/modules/catalog/gql/federation.js +10 -17
- package/dist/modules/catalog/gql/schema.d.ts +1 -1
- package/dist/modules/catalog/gql/schema.generated.d.ts +252 -226
- package/dist/modules/catalog/gql/schema.generated.js +20 -23
- package/dist/modules/catalog/gql/schema.js +5 -9
- package/dist/modules/catalog/gql/types.d.ts +2 -2
- package/dist/modules/catalog/gql/types.js +15 -19
- package/dist/modules/catalog/grpc/index.d.ts +6 -6
- package/dist/modules/catalog/grpc/index.js +12 -16
- package/dist/modules/catalog/index.d.ts +2 -2
- package/dist/modules/catalog/index.js +20 -17
- package/dist/modules/catalog/interfaces.d.ts +3 -3
- package/dist/modules/catalog/interfaces.js +1 -4
- package/dist/modules/facade-status/gql/index.js +8 -14
- package/dist/modules/facade-status/gql/resolvers.d.ts +1 -1
- package/dist/modules/facade-status/gql/resolvers.js +14 -8
- package/dist/modules/facade-status/gql/schema.d.ts +1 -1
- package/dist/modules/facade-status/gql/schema.generated.d.ts +34 -11
- package/dist/modules/facade-status/gql/schema.generated.js +1 -2
- package/dist/modules/facade-status/gql/schema.js +6 -9
- package/dist/modules/facade-status/gql/types.js +3 -6
- package/dist/modules/facade-status/index.d.ts +1 -1
- package/dist/modules/facade-status/index.js +4 -7
- package/dist/modules/facade-status/interfaces.d.ts +1 -1
- package/dist/modules/facade-status/interfaces.js +1 -2
- package/dist/modules/fulfillment/gql/federation.d.ts +1 -1
- package/dist/modules/fulfillment/gql/federation.js +10 -17
- package/dist/modules/fulfillment/gql/schema.d.ts +1 -1
- package/dist/modules/fulfillment/gql/schema.generated.d.ts +249 -223
- package/dist/modules/fulfillment/gql/schema.generated.js +20 -23
- package/dist/modules/fulfillment/gql/schema.js +5 -9
- package/dist/modules/fulfillment/gql/types.d.ts +2 -2
- package/dist/modules/fulfillment/gql/types.js +11 -15
- package/dist/modules/fulfillment/grpc/index.d.ts +3 -3
- package/dist/modules/fulfillment/grpc/index.js +6 -10
- package/dist/modules/fulfillment/index.d.ts +2 -2
- package/dist/modules/fulfillment/index.js +20 -17
- package/dist/modules/fulfillment/interfaces.d.ts +3 -3
- package/dist/modules/fulfillment/interfaces.js +1 -4
- package/dist/modules/identity/api-key/api-key.d.ts +2 -2
- package/dist/modules/identity/api-key/api-key.js +45 -65
- package/dist/modules/identity/gql/federation.d.ts +2 -2
- package/dist/modules/identity/gql/federation.js +5 -9
- package/dist/modules/identity/gql/schema.d.ts +1 -1
- package/dist/modules/identity/gql/schema.generated.d.ts +284 -255
- package/dist/modules/identity/gql/schema.generated.js +20 -23
- package/dist/modules/identity/gql/schema.js +5 -9
- package/dist/modules/identity/gql/types.d.ts +2 -2
- package/dist/modules/identity/gql/types.js +17 -21
- package/dist/modules/identity/grpc/index.d.ts +6 -6
- package/dist/modules/identity/grpc/index.js +12 -16
- package/dist/modules/identity/index.d.ts +4 -4
- package/dist/modules/identity/index.js +24 -21
- package/dist/modules/identity/interfaces.d.ts +5 -5
- package/dist/modules/identity/interfaces.js +1 -4
- package/dist/modules/identity/oauth/oauth.d.ts +4 -4
- package/dist/modules/identity/oauth/oauth.js +109 -135
- package/dist/modules/identity/oidc/adapter.d.ts +3 -3
- package/dist/modules/identity/oidc/adapter.js +111 -92
- package/dist/modules/identity/oidc/in-memory-adapter.d.ts +1 -1
- package/dist/modules/identity/oidc/in-memory-adapter.js +64 -50
- package/dist/modules/identity/oidc/index.d.ts +6 -6
- package/dist/modules/identity/oidc/index.js +29 -30
- package/dist/modules/identity/oidc/interfaces.d.ts +6 -6
- package/dist/modules/identity/oidc/interfaces.js +2 -6
- package/dist/modules/identity/oidc/password-grant.d.ts +1 -1
- package/dist/modules/identity/oidc/password-grant.js +43 -66
- package/dist/modules/identity/oidc/router.d.ts +6 -6
- package/dist/modules/identity/oidc/router.js +31 -26
- package/dist/modules/identity/oidc/templates.d.ts +1 -1
- package/dist/modules/identity/oidc/templates.js +45 -41
- package/dist/modules/identity/oidc/user.d.ts +4 -4
- package/dist/modules/identity/oidc/user.js +31 -29
- package/dist/modules/identity/oidc/utils.d.ts +2 -2
- package/dist/modules/identity/oidc/utils.js +6 -13
- package/dist/modules/index.d.ts +13 -13
- package/dist/modules/index.js +13 -29
- package/dist/modules/indexing/gql/federation.d.ts +1 -1
- package/dist/modules/indexing/gql/federation.js +10 -17
- package/dist/modules/indexing/gql/schema.d.ts +1 -1
- package/dist/modules/indexing/gql/schema.generated.d.ts +45 -19
- package/dist/modules/indexing/gql/schema.generated.js +2 -5
- package/dist/modules/indexing/gql/schema.js +5 -9
- package/dist/modules/indexing/gql/types.d.ts +2 -2
- package/dist/modules/indexing/gql/types.js +7 -11
- package/dist/modules/indexing/grpc/index.d.ts +2 -2
- package/dist/modules/indexing/grpc/index.js +4 -8
- package/dist/modules/indexing/index.d.ts +2 -2
- package/dist/modules/indexing/index.js +20 -17
- package/dist/modules/indexing/interfaces.d.ts +3 -3
- package/dist/modules/indexing/interfaces.js +1 -4
- package/dist/modules/invoicing/gql/federation.d.ts +1 -1
- package/dist/modules/invoicing/gql/federation.js +10 -17
- package/dist/modules/invoicing/gql/schema.d.ts +1 -1
- package/dist/modules/invoicing/gql/schema.generated.d.ts +209 -183
- package/dist/modules/invoicing/gql/schema.generated.js +20 -23
- package/dist/modules/invoicing/gql/schema.js +5 -9
- package/dist/modules/invoicing/gql/types.d.ts +2 -2
- package/dist/modules/invoicing/gql/types.js +7 -11
- package/dist/modules/invoicing/grpc/index.d.ts +2 -2
- package/dist/modules/invoicing/grpc/index.js +4 -8
- package/dist/modules/invoicing/index.d.ts +2 -2
- package/dist/modules/invoicing/index.js +20 -17
- package/dist/modules/invoicing/interfaces.d.ts +3 -3
- package/dist/modules/invoicing/interfaces.js +1 -4
- package/dist/modules/notification/gql/federation.d.ts +1 -1
- package/dist/modules/notification/gql/federation.js +10 -17
- package/dist/modules/notification/gql/schema.d.ts +1 -1
- package/dist/modules/notification/gql/schema.generated.d.ts +100 -74
- package/dist/modules/notification/gql/schema.generated.js +18 -21
- package/dist/modules/notification/gql/schema.js +5 -9
- package/dist/modules/notification/gql/types.d.ts +2 -2
- package/dist/modules/notification/gql/types.js +7 -11
- package/dist/modules/notification/grpc/index.d.ts +2 -2
- package/dist/modules/notification/grpc/index.js +4 -8
- package/dist/modules/notification/index.d.ts +2 -2
- package/dist/modules/notification/index.js +20 -17
- package/dist/modules/notification/interfaces.d.ts +3 -3
- package/dist/modules/notification/interfaces.js +1 -4
- package/dist/modules/ordering/gql/federation.d.ts +1 -1
- package/dist/modules/ordering/gql/federation.js +10 -17
- package/dist/modules/ordering/gql/schema.d.ts +1 -1
- package/dist/modules/ordering/gql/schema.generated.d.ts +221 -195
- package/dist/modules/ordering/gql/schema.generated.js +22 -25
- package/dist/modules/ordering/gql/schema.js +5 -9
- package/dist/modules/ordering/gql/types.d.ts +2 -2
- package/dist/modules/ordering/gql/types.js +7 -11
- package/dist/modules/ordering/grpc/index.d.ts +2 -2
- package/dist/modules/ordering/grpc/index.js +4 -8
- package/dist/modules/ordering/index.d.ts +2 -2
- package/dist/modules/ordering/index.js +20 -17
- package/dist/modules/ordering/interfaces.d.ts +3 -3
- package/dist/modules/ordering/interfaces.js +1 -4
- package/dist/modules/ostorage/gql/federation.d.ts +1 -1
- package/dist/modules/ostorage/gql/federation.js +10 -17
- package/dist/modules/ostorage/gql/schema.d.ts +1 -1
- package/dist/modules/ostorage/gql/schema.generated.d.ts +126 -94
- package/dist/modules/ostorage/gql/schema.generated.js +8 -11
- package/dist/modules/ostorage/gql/schema.js +5 -9
- package/dist/modules/ostorage/gql/types.d.ts +2 -2
- package/dist/modules/ostorage/gql/types.js +7 -11
- package/dist/modules/ostorage/grpc/index.d.ts +2 -2
- package/dist/modules/ostorage/grpc/index.js +4 -8
- package/dist/modules/ostorage/index.d.ts +2 -2
- package/dist/modules/ostorage/index.js +20 -17
- package/dist/modules/ostorage/interfaces.d.ts +3 -3
- package/dist/modules/ostorage/interfaces.js +1 -4
- package/dist/modules/payment/gql/federation.d.ts +1 -1
- package/dist/modules/payment/gql/federation.js +10 -17
- package/dist/modules/payment/gql/schema.d.ts +1 -1
- package/dist/modules/payment/gql/schema.generated.d.ts +67 -44
- package/dist/modules/payment/gql/schema.generated.js +4 -7
- package/dist/modules/payment/gql/schema.js +5 -9
- package/dist/modules/payment/gql/types.d.ts +2 -2
- package/dist/modules/payment/gql/types.js +7 -11
- package/dist/modules/payment/grpc/index.d.ts +2 -2
- package/dist/modules/payment/grpc/index.js +4 -8
- package/dist/modules/payment/index.d.ts +2 -2
- package/dist/modules/payment/index.js +20 -17
- package/dist/modules/payment/interfaces.d.ts +3 -3
- package/dist/modules/payment/interfaces.js +1 -4
- package/dist/modules/resource/gql/federation.d.ts +1 -1
- package/dist/modules/resource/gql/federation.js +10 -17
- package/dist/modules/resource/gql/schema.d.ts +1 -1
- package/dist/modules/resource/gql/schema.generated.d.ts +348 -322
- package/dist/modules/resource/gql/schema.generated.js +28 -31
- package/dist/modules/resource/gql/schema.js +5 -9
- package/dist/modules/resource/gql/types.d.ts +2 -2
- package/dist/modules/resource/gql/types.js +31 -35
- package/dist/modules/resource/grpc/index.d.ts +13 -13
- package/dist/modules/resource/grpc/index.js +28 -32
- package/dist/modules/resource/index.d.ts +2 -2
- package/dist/modules/resource/index.js +20 -17
- package/dist/modules/resource/interfaces.d.ts +3 -3
- package/dist/modules/resource/interfaces.js +1 -4
- package/dist/modules/scheduling/gql/federation.d.ts +1 -1
- package/dist/modules/scheduling/gql/federation.js +10 -17
- package/dist/modules/scheduling/gql/schema.d.ts +1 -1
- package/dist/modules/scheduling/gql/schema.generated.d.ts +109 -83
- package/dist/modules/scheduling/gql/schema.generated.js +10 -13
- package/dist/modules/scheduling/gql/schema.js +5 -9
- package/dist/modules/scheduling/gql/types.d.ts +2 -2
- package/dist/modules/scheduling/gql/types.js +7 -11
- package/dist/modules/scheduling/grpc/index.d.ts +2 -2
- package/dist/modules/scheduling/grpc/index.js +4 -8
- package/dist/modules/scheduling/index.d.ts +2 -2
- package/dist/modules/scheduling/index.js +20 -17
- package/dist/modules/scheduling/interfaces.d.ts +3 -3
- package/dist/modules/scheduling/interfaces.js +1 -4
- package/dist/utils.d.ts +3 -3
- package/dist/utils.js +4 -9
- package/generate.ts +42 -42
- package/jest.config.cjs +23 -0
- package/package.json +18 -13
- package/tsconfig-base.json +8 -0
- package/tsconfig.debug.json +5 -1
- package/tsconfig.test.json +17 -2
- package/jest.config.js +0 -14
package/dist/index.js
CHANGED
@@ -1,62 +1,42 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
-
}) : function(o, v) {
|
16
|
-
o["default"] = v;
|
17
|
-
});
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
-
if (mod && mod.__esModule) return mod;
|
20
|
-
var result = {};
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
-
__setModuleDefault(result, mod);
|
23
|
-
return result;
|
24
|
-
};
|
25
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
26
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
27
9
|
};
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
__exportStar(require("./gql/index"), exports);
|
59
|
-
class RestoreCommerceFacade {
|
10
|
+
import { createLogger } from '@restorecommerce/logger';
|
11
|
+
import { ServerResponse } from 'node:http';
|
12
|
+
import Koa from 'koa';
|
13
|
+
import { ApolloServer } from '@apollo/server';
|
14
|
+
import { koaMiddleware } from '@as-integrations/koa';
|
15
|
+
import { GraphQLSchema, printSchema } from 'graphql';
|
16
|
+
import { ApolloGateway, LocalGraphQLDataSource, RemoteGraphQLDataSource, IntrospectAndCompose } from '@apollo/gateway';
|
17
|
+
import { facadeStatusModule } from './modules/index.js';
|
18
|
+
/* eslint-disable */
|
19
|
+
import { ApolloServerPluginDrainHttpServer } from '@apollo/server/plugin/drainHttpServer';
|
20
|
+
/* eslint-disable */
|
21
|
+
import { ApolloServerPluginLandingPageLocalDefault } from '@apollo/server/plugin/landingPage/default';
|
22
|
+
import { createServer } from 'node:http';
|
23
|
+
import { WebSocketServer } from 'ws';
|
24
|
+
/* eslint-disable */
|
25
|
+
import { useServer } from 'graphql-ws/lib/use/ws';
|
26
|
+
import _ from 'lodash';
|
27
|
+
import { makeExecutableSchema } from 'graphql-tools';
|
28
|
+
import { gql } from 'graphql-tag';
|
29
|
+
import { mergeSubscribeIntoSchema } from './gql/protos/index.js';
|
30
|
+
import compose from 'koa-compose';
|
31
|
+
import { setUseSubscriptions } from './gql/protos/utils.js';
|
32
|
+
import bodyParser from 'koa-bodyparser';
|
33
|
+
import cors from '@koa/cors';
|
34
|
+
export * from './modules/index.js';
|
35
|
+
export * from './middlewares/index.js';
|
36
|
+
export * from './interfaces.js';
|
37
|
+
export * from './utils.js';
|
38
|
+
export * from './gql/index.js';
|
39
|
+
export class RestoreCommerceFacade {
|
60
40
|
constructor({ koa, logger, port, hostname, env, kafka }) {
|
61
41
|
this.apolloServices = {};
|
62
42
|
this.allResolvers = {};
|
@@ -70,7 +50,7 @@ class RestoreCommerceFacade {
|
|
70
50
|
this.koa = koa;
|
71
51
|
this.env = env !== null && env !== void 0 ? env : 'development';
|
72
52
|
this.kafkaConfig = kafka;
|
73
|
-
|
53
|
+
setUseSubscriptions(!!kafka);
|
74
54
|
}
|
75
55
|
get server() {
|
76
56
|
return this._server;
|
@@ -102,7 +82,7 @@ class RestoreCommerceFacade {
|
|
102
82
|
return this.modules.some(m => module.moduleName === m.moduleName);
|
103
83
|
}
|
104
84
|
addApolloService({ name, schema, url }) {
|
105
|
-
if (schema instanceof
|
85
|
+
if (schema instanceof GraphQLSchema) {
|
106
86
|
this.apolloServices[name] = { schema, url };
|
107
87
|
}
|
108
88
|
else if ('federatedSchema' in schema && 'resolvers' in schema) {
|
@@ -117,174 +97,183 @@ class RestoreCommerceFacade {
|
|
117
97
|
onStop(fn) {
|
118
98
|
this.stopFns.push(fn);
|
119
99
|
}
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
const
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
catch (error) {
|
129
|
-
this.logger.error('Error in start/stop function', error);
|
130
|
-
}
|
131
|
-
await runQueue();
|
132
|
-
}
|
133
|
-
};
|
134
|
-
await runQueue();
|
135
|
-
}
|
136
|
-
async start() {
|
137
|
-
if (!this._initialized) {
|
138
|
-
this.runFnQueue(this.startFns);
|
139
|
-
await this.mountApolloServer();
|
140
|
-
this._initialized = true;
|
141
|
-
}
|
142
|
-
return new Promise((resolve, reject) => {
|
143
|
-
var _a;
|
144
|
-
try {
|
145
|
-
(_a = this.server) === null || _a === void 0 ? void 0 : _a.listen(this.port, this.hostname, () => {
|
146
|
-
const address = this.address;
|
147
|
-
if (address) {
|
148
|
-
this.logger.info(`Service is listening on ${address.address}:${address.port}`);
|
100
|
+
runFnQueue(fns) {
|
101
|
+
return __awaiter(this, void 0, void 0, function* () {
|
102
|
+
const _fns = [...fns];
|
103
|
+
const runQueue = () => __awaiter(this, void 0, void 0, function* () {
|
104
|
+
const fn = _fns.shift();
|
105
|
+
if (fn) {
|
106
|
+
try {
|
107
|
+
yield fn();
|
149
108
|
}
|
150
|
-
|
151
|
-
this.logger.
|
109
|
+
catch (error) {
|
110
|
+
this.logger.error('Error in start/stop function', error);
|
152
111
|
}
|
153
|
-
|
154
|
-
}
|
155
|
-
}
|
156
|
-
|
157
|
-
reject(err);
|
158
|
-
}
|
112
|
+
yield runQueue();
|
113
|
+
}
|
114
|
+
});
|
115
|
+
yield runQueue();
|
159
116
|
});
|
160
117
|
}
|
161
|
-
|
162
|
-
return
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
118
|
+
start() {
|
119
|
+
return __awaiter(this, void 0, void 0, function* () {
|
120
|
+
if (!this._initialized) {
|
121
|
+
this.runFnQueue(this.startFns);
|
122
|
+
yield this.mountApolloServer();
|
123
|
+
this._initialized = true;
|
124
|
+
}
|
125
|
+
return new Promise((resolve, reject) => {
|
126
|
+
var _a;
|
127
|
+
try {
|
128
|
+
(_a = this.server) === null || _a === void 0 ? void 0 : _a.listen(this.port, this.hostname, () => {
|
129
|
+
const address = this.address;
|
130
|
+
if (address) {
|
131
|
+
this.logger.info(`Service is listening on ${address.address}:${address.port}`);
|
132
|
+
}
|
133
|
+
else {
|
134
|
+
this.logger.info(`Service is listening`);
|
135
|
+
}
|
136
|
+
resolve();
|
137
|
+
});
|
169
138
|
}
|
170
|
-
|
171
|
-
|
172
|
-
this._server = undefined;
|
173
|
-
resolve();
|
139
|
+
catch (err) {
|
140
|
+
reject(err);
|
174
141
|
}
|
175
142
|
});
|
176
143
|
});
|
177
144
|
}
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
145
|
+
stop() {
|
146
|
+
return __awaiter(this, void 0, void 0, function* () {
|
147
|
+
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
148
|
+
var _a;
|
149
|
+
yield this.runFnQueue(this.stopFns);
|
150
|
+
(_a = this.server) === null || _a === void 0 ? void 0 : _a.close((err) => {
|
151
|
+
if (err) {
|
152
|
+
this.logger.error(`Error stopping service`, err);
|
153
|
+
reject(err);
|
154
|
+
}
|
155
|
+
else {
|
156
|
+
this.logger.info(`Service stopped`);
|
157
|
+
this._server = undefined;
|
158
|
+
resolve();
|
159
|
+
}
|
160
|
+
});
|
161
|
+
}));
|
185
162
|
});
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
subgraphs: serviceList
|
191
|
-
}),
|
192
|
-
debug: true,
|
193
|
-
buildService: ({ name, url }) => {
|
163
|
+
}
|
164
|
+
mountApolloServer() {
|
165
|
+
return __awaiter(this, void 0, void 0, function* () {
|
166
|
+
const serviceList = Object.keys(this.apolloServices).map(key => {
|
194
167
|
var _a;
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
168
|
+
return {
|
169
|
+
name: key,
|
170
|
+
url: (_a = this.apolloServices[key].url) !== null && _a !== void 0 ? _a : `local`,
|
171
|
+
};
|
172
|
+
});
|
173
|
+
const gateway = new ApolloGateway({
|
174
|
+
logger: this.logger,
|
175
|
+
// serviceList,
|
176
|
+
supergraphSdl: new IntrospectAndCompose({
|
177
|
+
subgraphs: serviceList
|
178
|
+
}),
|
179
|
+
debug: true,
|
180
|
+
buildService: ({ name, url }) => {
|
181
|
+
var _a;
|
182
|
+
if (url !== 'local') {
|
183
|
+
return new RemoteGraphQLDataSource({
|
184
|
+
url,
|
185
|
+
// TODO willSendRequest
|
186
|
+
});
|
205
187
|
}
|
206
188
|
else {
|
207
|
-
|
189
|
+
const schema = (_a = this.apolloServices[name]) === null || _a === void 0 ? void 0 : _a.schema;
|
190
|
+
if (schema) {
|
191
|
+
return new LocalGraphQLDataSource(schema);
|
192
|
+
}
|
193
|
+
else {
|
194
|
+
throw new Error('Invalid schema ' + name);
|
195
|
+
}
|
208
196
|
}
|
209
197
|
}
|
210
|
-
}
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
typeDefs: (0, graphql_tag_1.default)(typeDefs + `
|
198
|
+
});
|
199
|
+
this._server = createServer(this.koa.callback());
|
200
|
+
const wsServer = new WebSocketServer({
|
201
|
+
server: this._server,
|
202
|
+
path: '/graphql',
|
203
|
+
});
|
204
|
+
let serverCleanup;
|
205
|
+
gateway.onSchemaLoadOrUpdate(schemaContext => {
|
206
|
+
const typeDefs = printSchema(new GraphQLSchema({
|
207
|
+
subscription: schemaContext.apiSchema.getSubscriptionType()
|
208
|
+
}));
|
209
|
+
let schema = makeExecutableSchema({
|
210
|
+
typeDefs: gql(typeDefs + `
|
224
211
|
type Query { sample: String }
|
225
212
|
`),
|
226
|
-
|
227
|
-
|
228
|
-
...this.allResolvers['Subscription']
|
213
|
+
resolvers: {
|
214
|
+
Subscription: Object.assign({}, this.allResolvers['Subscription'])
|
229
215
|
}
|
216
|
+
});
|
217
|
+
if ('Subscription' in this.allResolvers) {
|
218
|
+
mergeSubscribeIntoSchema(schema.getSubscriptionType(), this.allResolvers['Subscription']);
|
230
219
|
}
|
220
|
+
serverCleanup = useServer({
|
221
|
+
schema,
|
222
|
+
context: (ctx, message, args) => __awaiter(this, void 0, void 0, function* () {
|
223
|
+
const newCtx = this.koa.createContext(ctx.extra.request, new ServerResponse(ctx.extra.request));
|
224
|
+
const fn = yield compose(this.koa.middleware);
|
225
|
+
yield fn(newCtx);
|
226
|
+
newCtx.kafkaConfig = this.kafkaConfig;
|
227
|
+
newCtx.logger = this.logger;
|
228
|
+
return newCtx;
|
229
|
+
}),
|
230
|
+
}, wsServer);
|
231
231
|
});
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
(0, default_1.ApolloServerPluginLandingPageLocalDefault)({
|
254
|
-
embed: true
|
255
|
-
}),
|
256
|
-
{
|
257
|
-
async serverWillStart() {
|
258
|
-
return {
|
259
|
-
async drainServer() {
|
260
|
-
await serverCleanup.dispose();
|
261
|
-
},
|
262
|
-
};
|
232
|
+
const gqlServer = new ApolloServer({
|
233
|
+
gateway,
|
234
|
+
introspection: true,
|
235
|
+
allowBatchedHttpRequests: true,
|
236
|
+
plugins: [
|
237
|
+
ApolloServerPluginDrainHttpServer({ httpServer: this._server }),
|
238
|
+
ApolloServerPluginLandingPageLocalDefault({
|
239
|
+
embed: true
|
240
|
+
}),
|
241
|
+
{
|
242
|
+
serverWillStart() {
|
243
|
+
return __awaiter(this, void 0, void 0, function* () {
|
244
|
+
return {
|
245
|
+
drainServer() {
|
246
|
+
return __awaiter(this, void 0, void 0, function* () {
|
247
|
+
yield serverCleanup.dispose();
|
248
|
+
});
|
249
|
+
},
|
250
|
+
};
|
251
|
+
});
|
252
|
+
},
|
263
253
|
},
|
254
|
+
],
|
255
|
+
includeStacktraceInErrorResponses: true,
|
256
|
+
formatError: (error) => {
|
257
|
+
this.logger.error('Error while processing request', { message: error.message });
|
258
|
+
this.logger.debug('Error while processing request', { error });
|
259
|
+
return {
|
260
|
+
message: error.message,
|
261
|
+
locations: error.locations,
|
262
|
+
stack: error
|
263
|
+
};
|
264
264
|
},
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
return
|
271
|
-
|
272
|
-
locations: error.locations,
|
273
|
-
stack: error
|
274
|
-
};
|
275
|
-
},
|
265
|
+
});
|
266
|
+
yield gqlServer.start();
|
267
|
+
this.koa.use(cors());
|
268
|
+
this.koa.use(bodyParser());
|
269
|
+
this.koa.use(koaMiddleware(gqlServer, {
|
270
|
+
context: ({ ctx }) => __awaiter(this, void 0, void 0, function* () { return ctx; }),
|
271
|
+
}));
|
276
272
|
});
|
277
|
-
await gqlServer.start();
|
278
|
-
this.koa.use(cors());
|
279
|
-
this.koa.use(bodyParser());
|
280
|
-
this.koa.use((0, koa_2.koaMiddleware)(gqlServer, {
|
281
|
-
context: async ({ ctx }) => ctx,
|
282
|
-
}));
|
283
273
|
}
|
284
274
|
}
|
285
|
-
|
286
|
-
|
287
|
-
const koa = new koa_1.default();
|
275
|
+
export const createFacade = (config) => {
|
276
|
+
const koa = new Koa();
|
288
277
|
if (config.env) {
|
289
278
|
koa.env = config.env;
|
290
279
|
}
|
@@ -299,7 +288,7 @@ function createFacade(config) {
|
|
299
288
|
return msg;
|
300
289
|
};
|
301
290
|
}
|
302
|
-
const logger = loggerCfg !== null && loggerCfg !== void 0 ? loggerCfg :
|
291
|
+
const logger = loggerCfg !== null && loggerCfg !== void 0 ? loggerCfg : createLogger(loggerCfg);
|
303
292
|
koa.context.logger = logger;
|
304
293
|
return new RestoreCommerceFacade({
|
305
294
|
koa,
|
@@ -308,6 +297,5 @@ function createFacade(config) {
|
|
308
297
|
hostname: config.hostname,
|
309
298
|
env: config.env,
|
310
299
|
kafka: config.kafka
|
311
|
-
}).useModule(
|
312
|
-
}
|
313
|
-
exports.createFacade = createFacade;
|
300
|
+
}).useModule(facadeStatusModule);
|
301
|
+
};
|
package/dist/interfaces.d.ts
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
/// <reference types="koa-websocket" />
|
2
|
-
/// <reference types="node" />
|
3
|
-
/// <reference types="node" />
|
4
|
-
import Koa from 'koa';
|
5
|
-
import { Logger } from 'winston';
|
6
|
-
import { Server } from 'http';
|
7
|
-
import { AddressInfo } from 'net';
|
2
|
+
/// <reference types="node" resolution-mode="require"/>
|
3
|
+
/// <reference types="node" resolution-mode="require"/>
|
4
|
+
import type Koa from 'koa';
|
5
|
+
import { type Logger } from 'winston';
|
6
|
+
import { type Server } from 'node:http';
|
7
|
+
import { type AddressInfo } from 'node:net';
|
8
8
|
type RequireAtLeastOne<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
|
9
9
|
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
10
10
|
}[Keys];
|
@@ -41,7 +41,7 @@ export interface Facade<TModules extends FacadeModuleBase[] = []> {
|
|
41
41
|
schema: any;
|
42
42
|
}, 'url' | 'schema'>): void;
|
43
43
|
useMiddleware<TNewState extends object = {}, TNewContext extends object = {}>(middleware: Koa.Middleware<TNewState, TNewContext & FacadeModulesContext<TModules>>): Facade<TModules>;
|
44
|
-
useModule<TNewModule extends FacadeModule>(
|
45
|
-
supportsModule<TSupportedModule extends FacadeModuleBase>(
|
44
|
+
useModule<TNewModule extends FacadeModule>(mod: TNewModule): Facade<[...TModules, TNewModule]>;
|
45
|
+
supportsModule<TSupportedModule extends FacadeModuleBase>(mod: TSupportedModule): this is Facade<[TSupportedModule, ...TModules]> & Facade<[...TModules]>;
|
46
46
|
}
|
47
47
|
export {};
|
package/dist/interfaces.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
export * from './req-res-logger/index';
|
1
|
+
export * from './req-res-logger/index.js';
|
@@ -1,17 +1 @@
|
|
1
|
-
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
-
if (k2 === undefined) k2 = k;
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
-
}
|
8
|
-
Object.defineProperty(o, k2, desc);
|
9
|
-
}) : (function(o, m, k, k2) {
|
10
|
-
if (k2 === undefined) k2 = k;
|
11
|
-
o[k2] = m[k];
|
12
|
-
}));
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
15
|
-
};
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
17
|
-
__exportStar(require("./req-res-logger/index"), exports);
|
1
|
+
export * from './req-res-logger/index.js';
|
@@ -1,18 +1,37 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
return (
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8
|
+
});
|
9
|
+
};
|
10
|
+
import _debug from 'debug';
|
11
|
+
import { createLogger } from '@restorecommerce/logger';
|
12
|
+
const debug = _debug('@restorecommerce/koa-req-res-logger');
|
13
|
+
const getGraphQLData = (opts, body) => {
|
14
|
+
if (typeof body !== 'object' || !body) {
|
15
|
+
return;
|
16
|
+
}
|
17
|
+
const line = {};
|
18
|
+
if ('operationName' in body) {
|
19
|
+
Object.assign(line, { operationName: body.operationName });
|
20
|
+
}
|
21
|
+
if ('query' in body) {
|
22
|
+
Object.assign(line, { query: body.query });
|
23
|
+
}
|
24
|
+
if (opts.logGraphQLVariables === true && 'variables' in body) {
|
25
|
+
Object.assign(line, { variables: body.variables });
|
26
|
+
}
|
27
|
+
return line;
|
4
28
|
};
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.reqResLogger = void 0;
|
7
|
-
const debug_1 = __importDefault(require("debug"));
|
8
|
-
const logger_1 = require("@restorecommerce/logger");
|
9
|
-
const debug = (0, debug_1.default)('@restorecommerce/koa-req-res-logger');
|
10
29
|
/**
|
11
30
|
Middleware that logs incoming request and outgoing response
|
12
31
|
@param {Object} [options] - middleware options
|
13
32
|
@returns {Middleware}
|
14
33
|
*/
|
15
|
-
const reqResLogger = (opts) => {
|
34
|
+
export const reqResLogger = (opts) => {
|
16
35
|
let loggerCfg;
|
17
36
|
if (opts.logger) {
|
18
37
|
loggerCfg = opts.logger;
|
@@ -21,10 +40,10 @@ const reqResLogger = (opts) => {
|
|
21
40
|
return msg;
|
22
41
|
};
|
23
42
|
}
|
24
|
-
const logger = loggerCfg !== null && loggerCfg !== void 0 ? loggerCfg :
|
25
|
-
const fn =
|
43
|
+
const logger = loggerCfg !== null && loggerCfg !== void 0 ? loggerCfg : createLogger(loggerCfg);
|
44
|
+
const fn = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
26
45
|
const request = ctx.request;
|
27
|
-
debug('yield middleware: %s',
|
46
|
+
debug('yield middleware: %s', reqResLogger.name);
|
28
47
|
const start = Date.now();
|
29
48
|
const reqLog = {
|
30
49
|
method: ctx.request.method,
|
@@ -42,7 +61,7 @@ const reqResLogger = (opts) => {
|
|
42
61
|
// Log incoming request during downstream processing
|
43
62
|
logger.verbose('Request', reqLog);
|
44
63
|
// Call next middleware in stack
|
45
|
-
|
64
|
+
yield next();
|
46
65
|
const delta = Math.ceil(Date.now() - start);
|
47
66
|
// Log outgoing response during upstream
|
48
67
|
// Generally only response successful request
|
@@ -66,23 +85,6 @@ const reqResLogger = (opts) => {
|
|
66
85
|
}
|
67
86
|
// `procTime` is in millisecond
|
68
87
|
logger.verbose('Response', resLog);
|
69
|
-
};
|
88
|
+
});
|
70
89
|
return fn;
|
71
90
|
};
|
72
|
-
exports.reqResLogger = reqResLogger;
|
73
|
-
function getGraphQLData(opts, body) {
|
74
|
-
if (typeof body !== 'object' || !body) {
|
75
|
-
return;
|
76
|
-
}
|
77
|
-
const line = {};
|
78
|
-
if ('operationName' in body) {
|
79
|
-
Object.assign(line, { operationName: body.operationName });
|
80
|
-
}
|
81
|
-
if ('query' in body) {
|
82
|
-
Object.assign(line, { query: body.query });
|
83
|
-
}
|
84
|
-
if (opts.logGraphQLVariables === true && 'variables' in body) {
|
85
|
-
Object.assign(line, { variables: body.variables });
|
86
|
-
}
|
87
|
-
return line;
|
88
|
-
}
|
@@ -1,2 +1,2 @@
|
|
1
|
-
import { AccessControlServiceConfig } from
|
1
|
+
import { type AccessControlServiceConfig } from '../interfaces.js';
|
2
2
|
export declare const FederatedAccessControlSchema: (cfg: AccessControlServiceConfig) => import("graphql").GraphQLSchema;
|