@restorecommerce/facade 1.3.6 → 1.3.7
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.cjs +1 -11
- package/CHANGELOG.md +12 -0
- package/codegen/tsconfig.codegen.tsbuildinfo +1 -0
- package/debug-run.ts +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +5 -4
- package/tsconfig-base.json +8 -19
- package/tsconfig.codegen.json +0 -1
- package/tsconfig.debug.json +1 -5
- package/tsconfig.generate.json +0 -3
- package/tsconfig.lib.json +1 -2
- package/tsconfig.test.json +1 -22
- package/codegen/index.d.ts +0 -12
- package/codegen/index.js +0 -43
- package/dist/gql/index.d.ts +0 -1
- package/dist/gql/index.js +0 -1
- package/dist/gql/protos/federation.d.ts +0 -6
- package/dist/gql/protos/federation.js +0 -46
- package/dist/gql/protos/graphql.d.ts +0 -11
- package/dist/gql/protos/graphql.js +0 -158
- package/dist/gql/protos/index.d.ts +0 -6
- package/dist/gql/protos/index.js +0 -6
- package/dist/gql/protos/registry.d.ts +0 -23
- package/dist/gql/protos/registry.js +0 -366
- package/dist/gql/protos/resolvers.d.ts +0 -9
- package/dist/gql/protos/resolvers.js +0 -479
- package/dist/gql/protos/schema.d.ts +0 -14
- package/dist/gql/protos/schema.js +0 -224
- package/dist/gql/protos/stream-to-async-iterator.d.ts +0 -50
- package/dist/gql/protos/stream-to-async-iterator.js +0 -190
- package/dist/gql/protos/types.d.ts +0 -96
- package/dist/gql/protos/types.js +0 -1
- package/dist/gql/protos/utils.d.ts +0 -18
- package/dist/gql/protos/utils.js +0 -133
- package/dist/gql/types/AccessControlTypes.d.ts +0 -6
- package/dist/gql/types/AccessControlTypes.js +0 -97
- package/dist/gql/types/DateType.d.ts +0 -2
- package/dist/gql/types/DateType.js +0 -29
- package/dist/gql/types/FilterType.d.ts +0 -2
- package/dist/gql/types/FilterType.js +0 -72
- package/dist/gql/types/MetaType.d.ts +0 -2
- package/dist/gql/types/MetaType.js +0 -25
- package/dist/gql/types/ScopeType.d.ts +0 -2
- package/dist/gql/types/ScopeType.js +0 -13
- package/dist/gql/types/SortType.d.ts +0 -3
- package/dist/gql/types/SortType.js +0 -30
- package/dist/gql/types/StatusType.d.ts +0 -2
- package/dist/gql/types/StatusType.js +0 -15
- package/dist/gql/types/index.d.ts +0 -7
- package/dist/gql/types/index.js +0 -7
- package/dist/index.d.ts +0 -66
- package/dist/index.js +0 -312
- package/dist/interfaces.d.ts +0 -54
- package/dist/interfaces.js +0 -6
- package/dist/middlewares/index.d.ts +0 -1
- package/dist/middlewares/index.js +0 -1
- package/dist/middlewares/req-res-logger/index.d.ts +0 -14
- package/dist/middlewares/req-res-logger/index.js +0 -90
- package/dist/modules/access-control/gql/federation.d.ts +0 -2
- package/dist/modules/access-control/gql/federation.js +0 -13
- package/dist/modules/access-control/gql/schema.d.ts +0 -2
- package/dist/modules/access-control/gql/schema.generated.d.ts +0 -1124
- package/dist/modules/access-control/gql/schema.generated.js +0 -80
- package/dist/modules/access-control/gql/schema.js +0 -5
- package/dist/modules/access-control/gql/types.d.ts +0 -3
- package/dist/modules/access-control/gql/types.js +0 -14
- package/dist/modules/access-control/grpc/index.d.ts +0 -13
- package/dist/modules/access-control/grpc/index.js +0 -14
- package/dist/modules/access-control/index.d.ts +0 -2
- package/dist/modules/access-control/index.js +0 -26
- package/dist/modules/access-control/interfaces.d.ts +0 -15
- package/dist/modules/access-control/interfaces.js +0 -1
- package/dist/modules/catalog/gql/federation.d.ts +0 -2
- package/dist/modules/catalog/gql/federation.js +0 -13
- package/dist/modules/catalog/gql/schema.d.ts +0 -2
- package/dist/modules/catalog/gql/schema.generated.d.ts +0 -1503
- package/dist/modules/catalog/gql/schema.generated.js +0 -74
- package/dist/modules/catalog/gql/schema.js +0 -5
- package/dist/modules/catalog/gql/types.d.ts +0 -3
- package/dist/modules/catalog/gql/types.js +0 -16
- package/dist/modules/catalog/grpc/index.d.ts +0 -15
- package/dist/modules/catalog/grpc/index.js +0 -16
- package/dist/modules/catalog/index.d.ts +0 -2
- package/dist/modules/catalog/index.js +0 -26
- package/dist/modules/catalog/interfaces.d.ts +0 -16
- package/dist/modules/catalog/interfaces.js +0 -1
- package/dist/modules/facade-status/gql/index.d.ts +0 -1
- package/dist/modules/facade-status/gql/index.js +0 -11
- package/dist/modules/facade-status/gql/resolvers.d.ts +0 -2
- package/dist/modules/facade-status/gql/resolvers.js +0 -18
- package/dist/modules/facade-status/gql/schema.d.ts +0 -3
- package/dist/modules/facade-status/gql/schema.generated.d.ts +0 -109
- package/dist/modules/facade-status/gql/schema.generated.js +0 -1
- package/dist/modules/facade-status/gql/schema.js +0 -14
- package/dist/modules/facade-status/gql/types.d.ts +0 -2
- package/dist/modules/facade-status/gql/types.js +0 -10
- package/dist/modules/facade-status/index.d.ts +0 -2
- package/dist/modules/facade-status/index.js +0 -8
- package/dist/modules/facade-status/interfaces.d.ts +0 -4
- package/dist/modules/facade-status/interfaces.js +0 -1
- package/dist/modules/fulfillment/gql/federation.d.ts +0 -2
- package/dist/modules/fulfillment/gql/federation.js +0 -13
- package/dist/modules/fulfillment/gql/schema.d.ts +0 -2
- package/dist/modules/fulfillment/gql/schema.generated.d.ts +0 -1539
- package/dist/modules/fulfillment/gql/schema.generated.js +0 -79
- package/dist/modules/fulfillment/gql/schema.js +0 -5
- package/dist/modules/fulfillment/gql/types.d.ts +0 -3
- package/dist/modules/fulfillment/gql/types.js +0 -12
- package/dist/modules/fulfillment/grpc/index.d.ts +0 -9
- package/dist/modules/fulfillment/grpc/index.js +0 -10
- package/dist/modules/fulfillment/index.d.ts +0 -2
- package/dist/modules/fulfillment/index.js +0 -26
- package/dist/modules/fulfillment/interfaces.d.ts +0 -16
- package/dist/modules/fulfillment/interfaces.js +0 -1
- package/dist/modules/identity/api-key/api-key.d.ts +0 -11
- package/dist/modules/identity/api-key/api-key.js +0 -137
- package/dist/modules/identity/gql/federation.d.ts +0 -2
- package/dist/modules/identity/gql/federation.js +0 -5
- package/dist/modules/identity/gql/schema.d.ts +0 -2
- package/dist/modules/identity/gql/schema.generated.d.ts +0 -1661
- package/dist/modules/identity/gql/schema.generated.js +0 -75
- package/dist/modules/identity/gql/schema.js +0 -5
- package/dist/modules/identity/gql/types.d.ts +0 -3
- package/dist/modules/identity/gql/types.js +0 -18
- package/dist/modules/identity/grpc/index.d.ts +0 -15
- package/dist/modules/identity/grpc/index.js +0 -16
- package/dist/modules/identity/index.d.ts +0 -4
- package/dist/modules/identity/index.js +0 -54
- package/dist/modules/identity/interfaces.d.ts +0 -22
- package/dist/modules/identity/interfaces.js +0 -1
- package/dist/modules/identity/oauth/oauth.d.ts +0 -11
- package/dist/modules/identity/oauth/oauth.js +0 -170
- package/dist/modules/identity/oidc/adapter.d.ts +0 -4
- package/dist/modules/identity/oidc/adapter.js +0 -135
- package/dist/modules/identity/oidc/in-memory-adapter.d.ts +0 -16
- package/dist/modules/identity/oidc/in-memory-adapter.js +0 -85
- package/dist/modules/identity/oidc/index.d.ts +0 -18
- package/dist/modules/identity/oidc/index.js +0 -147
- package/dist/modules/identity/oidc/interfaces.d.ts +0 -73
- package/dist/modules/identity/oidc/interfaces.js +0 -7
- package/dist/modules/identity/oidc/password-grant.d.ts +0 -2
- package/dist/modules/identity/oidc/password-grant.js +0 -163
- package/dist/modules/identity/oidc/router.d.ts +0 -13
- package/dist/modules/identity/oidc/router.js +0 -164
- package/dist/modules/identity/oidc/templates.d.ts +0 -36
- package/dist/modules/identity/oidc/templates.js +0 -60
- package/dist/modules/identity/oidc/user.d.ts +0 -6
- package/dist/modules/identity/oidc/user.js +0 -91
- package/dist/modules/identity/oidc/utils.d.ts +0 -6
- package/dist/modules/identity/oidc/utils.js +0 -15
- package/dist/modules/index.d.ts +0 -13
- package/dist/modules/index.js +0 -13
- package/dist/modules/indexing/gql/federation.d.ts +0 -2
- package/dist/modules/indexing/gql/federation.js +0 -13
- package/dist/modules/indexing/gql/schema.d.ts +0 -2
- package/dist/modules/indexing/gql/schema.generated.d.ts +0 -226
- package/dist/modules/indexing/gql/schema.generated.js +0 -6
- package/dist/modules/indexing/gql/schema.js +0 -5
- package/dist/modules/indexing/gql/types.d.ts +0 -3
- package/dist/modules/indexing/gql/types.js +0 -8
- package/dist/modules/indexing/grpc/index.d.ts +0 -7
- package/dist/modules/indexing/grpc/index.js +0 -8
- package/dist/modules/indexing/index.d.ts +0 -2
- package/dist/modules/indexing/index.js +0 -26
- package/dist/modules/indexing/interfaces.d.ts +0 -13
- package/dist/modules/indexing/interfaces.js +0 -1
- package/dist/modules/invoicing/gql/federation.d.ts +0 -2
- package/dist/modules/invoicing/gql/federation.js +0 -13
- package/dist/modules/invoicing/gql/schema.d.ts +0 -2
- package/dist/modules/invoicing/gql/schema.generated.d.ts +0 -1150
- package/dist/modules/invoicing/gql/schema.generated.js +0 -75
- package/dist/modules/invoicing/gql/schema.js +0 -5
- package/dist/modules/invoicing/gql/types.d.ts +0 -3
- package/dist/modules/invoicing/gql/types.js +0 -8
- package/dist/modules/invoicing/grpc/index.d.ts +0 -7
- package/dist/modules/invoicing/grpc/index.js +0 -8
- package/dist/modules/invoicing/index.d.ts +0 -2
- package/dist/modules/invoicing/index.js +0 -26
- package/dist/modules/invoicing/interfaces.d.ts +0 -16
- package/dist/modules/invoicing/interfaces.js +0 -1
- package/dist/modules/master_data/gql/federation.d.ts +0 -2
- package/dist/modules/master_data/gql/federation.js +0 -13
- package/dist/modules/master_data/gql/schema.d.ts +0 -2
- package/dist/modules/master_data/gql/schema.generated.d.ts +0 -2520
- package/dist/modules/master_data/gql/schema.generated.js +0 -114
- package/dist/modules/master_data/gql/schema.js +0 -5
- package/dist/modules/master_data/gql/types.d.ts +0 -3
- package/dist/modules/master_data/gql/types.js +0 -32
- package/dist/modules/master_data/grpc/index.d.ts +0 -30
- package/dist/modules/master_data/grpc/index.js +0 -32
- package/dist/modules/master_data/index.d.ts +0 -2
- package/dist/modules/master_data/index.js +0 -26
- package/dist/modules/master_data/interfaces.d.ts +0 -16
- package/dist/modules/master_data/interfaces.js +0 -1
- package/dist/modules/notification/gql/federation.d.ts +0 -2
- package/dist/modules/notification/gql/federation.js +0 -13
- package/dist/modules/notification/gql/schema.d.ts +0 -2
- package/dist/modules/notification/gql/schema.generated.d.ts +0 -632
- package/dist/modules/notification/gql/schema.generated.js +0 -68
- package/dist/modules/notification/gql/schema.js +0 -5
- package/dist/modules/notification/gql/types.d.ts +0 -3
- package/dist/modules/notification/gql/types.js +0 -8
- package/dist/modules/notification/grpc/index.d.ts +0 -7
- package/dist/modules/notification/grpc/index.js +0 -8
- package/dist/modules/notification/index.d.ts +0 -2
- package/dist/modules/notification/index.js +0 -26
- package/dist/modules/notification/interfaces.d.ts +0 -16
- package/dist/modules/notification/interfaces.js +0 -1
- package/dist/modules/ordering/gql/federation.d.ts +0 -2
- package/dist/modules/ordering/gql/federation.js +0 -13
- package/dist/modules/ordering/gql/schema.d.ts +0 -2
- package/dist/modules/ordering/gql/schema.generated.d.ts +0 -1407
- package/dist/modules/ordering/gql/schema.generated.js +0 -91
- package/dist/modules/ordering/gql/schema.js +0 -5
- package/dist/modules/ordering/gql/types.d.ts +0 -3
- package/dist/modules/ordering/gql/types.js +0 -8
- package/dist/modules/ordering/grpc/index.d.ts +0 -7
- package/dist/modules/ordering/grpc/index.js +0 -8
- package/dist/modules/ordering/index.d.ts +0 -2
- package/dist/modules/ordering/index.js +0 -26
- package/dist/modules/ordering/interfaces.d.ts +0 -16
- package/dist/modules/ordering/interfaces.js +0 -1
- package/dist/modules/ostorage/gql/federation.d.ts +0 -2
- package/dist/modules/ostorage/gql/federation.js +0 -13
- package/dist/modules/ostorage/gql/schema.d.ts +0 -2
- package/dist/modules/ostorage/gql/schema.generated.d.ts +0 -846
- package/dist/modules/ostorage/gql/schema.generated.js +0 -31
- package/dist/modules/ostorage/gql/schema.js +0 -5
- package/dist/modules/ostorage/gql/types.d.ts +0 -3
- package/dist/modules/ostorage/gql/types.js +0 -8
- package/dist/modules/ostorage/grpc/index.d.ts +0 -7
- package/dist/modules/ostorage/grpc/index.js +0 -8
- package/dist/modules/ostorage/index.d.ts +0 -2
- package/dist/modules/ostorage/index.js +0 -46
- package/dist/modules/ostorage/interfaces.d.ts +0 -16
- package/dist/modules/ostorage/interfaces.js +0 -1
- package/dist/modules/ostorage/objectDownloadReqHandler.d.ts +0 -1
- package/dist/modules/ostorage/objectDownloadReqHandler.js +0 -134
- package/dist/modules/payment/gql/federation.d.ts +0 -2
- package/dist/modules/payment/gql/federation.js +0 -13
- package/dist/modules/payment/gql/schema.d.ts +0 -2
- package/dist/modules/payment/gql/schema.generated.d.ts +0 -647
- package/dist/modules/payment/gql/schema.generated.js +0 -156
- package/dist/modules/payment/gql/schema.js +0 -5
- package/dist/modules/payment/gql/types.d.ts +0 -3
- package/dist/modules/payment/gql/types.js +0 -8
- package/dist/modules/payment/grpc/index.d.ts +0 -7
- package/dist/modules/payment/grpc/index.js +0 -8
- package/dist/modules/payment/index.d.ts +0 -2
- package/dist/modules/payment/index.js +0 -26
- package/dist/modules/payment/interfaces.d.ts +0 -16
- package/dist/modules/payment/interfaces.js +0 -1
- package/dist/modules/scheduling/gql/federation.d.ts +0 -2
- package/dist/modules/scheduling/gql/federation.js +0 -13
- package/dist/modules/scheduling/gql/schema.d.ts +0 -2
- package/dist/modules/scheduling/gql/schema.generated.d.ts +0 -626
- package/dist/modules/scheduling/gql/schema.generated.js +0 -31
- package/dist/modules/scheduling/gql/schema.js +0 -5
- package/dist/modules/scheduling/gql/types.d.ts +0 -3
- package/dist/modules/scheduling/gql/types.js +0 -8
- package/dist/modules/scheduling/grpc/index.d.ts +0 -7
- package/dist/modules/scheduling/grpc/index.js +0 -8
- package/dist/modules/scheduling/index.d.ts +0 -2
- package/dist/modules/scheduling/index.js +0 -26
- package/dist/modules/scheduling/interfaces.d.ts +0 -16
- package/dist/modules/scheduling/interfaces.js +0 -1
- package/dist/utils.d.ts +0 -5
- package/dist/utils.js +0 -14
package/dist/index.js
DELETED
@@ -1,312 +0,0 @@
|
|
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 { 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
|
-
import graphqlUploadKoa from 'graphql-upload/graphqlUploadKoa.mjs';
|
35
|
-
export * from './modules/index.js';
|
36
|
-
export * from './middlewares/index.js';
|
37
|
-
export * from './interfaces.js';
|
38
|
-
export * from './utils.js';
|
39
|
-
export * from './gql/index.js';
|
40
|
-
export class RestoreCommerceFacade {
|
41
|
-
constructor({ koa, logger, port, hostname, env, kafka, fileUploadOptions }) {
|
42
|
-
this.apolloServices = {};
|
43
|
-
this.allResolvers = {};
|
44
|
-
this._initialized = false;
|
45
|
-
this.modules = [];
|
46
|
-
this.startFns = [];
|
47
|
-
this.stopFns = [];
|
48
|
-
this.logger = logger;
|
49
|
-
this.port = port !== null && port !== void 0 ? port : 5000;
|
50
|
-
this.hostname = hostname !== null && hostname !== void 0 ? hostname : '127.0.0.1';
|
51
|
-
this.koa = koa;
|
52
|
-
this.env = env !== null && env !== void 0 ? env : 'development';
|
53
|
-
this.kafkaConfig = kafka;
|
54
|
-
this.fileUploadOptionsConfig = fileUploadOptions;
|
55
|
-
setUseSubscriptions(!!kafka);
|
56
|
-
}
|
57
|
-
get server() {
|
58
|
-
return this._server;
|
59
|
-
}
|
60
|
-
get address() {
|
61
|
-
var _a;
|
62
|
-
const address = (_a = this._server) === null || _a === void 0 ? void 0 : _a.address();
|
63
|
-
if (address && typeof address === 'object') {
|
64
|
-
return address;
|
65
|
-
}
|
66
|
-
return undefined;
|
67
|
-
}
|
68
|
-
get listening() {
|
69
|
-
return !!this._server && this._server.listening;
|
70
|
-
}
|
71
|
-
useMiddleware(middleware) {
|
72
|
-
this.koa.use(middleware);
|
73
|
-
return this;
|
74
|
-
}
|
75
|
-
useModule(module) {
|
76
|
-
if (this.modules.some(m => module.moduleName === m.moduleName)) {
|
77
|
-
throw new Error(`module ${module.moduleName} already loaded`);
|
78
|
-
}
|
79
|
-
this.modules.push(module);
|
80
|
-
module(this);
|
81
|
-
return this;
|
82
|
-
}
|
83
|
-
supportsModule(module) {
|
84
|
-
return this.modules.some(m => module.moduleName === m.moduleName);
|
85
|
-
}
|
86
|
-
addApolloService({ name, schema, url }) {
|
87
|
-
if (schema instanceof GraphQLSchema) {
|
88
|
-
this.apolloServices[name] = { schema, url };
|
89
|
-
}
|
90
|
-
else if ('federatedSchema' in schema && 'resolvers' in schema) {
|
91
|
-
this.apolloServices[name] = { schema: schema.federatedSchema, url };
|
92
|
-
this.allResolvers = _.merge(this.allResolvers, schema.resolvers);
|
93
|
-
}
|
94
|
-
}
|
95
|
-
onStart(fn) {
|
96
|
-
debugger;
|
97
|
-
this.startFns.push(fn);
|
98
|
-
}
|
99
|
-
onStop(fn) {
|
100
|
-
this.stopFns.push(fn);
|
101
|
-
}
|
102
|
-
runFnQueue(fns) {
|
103
|
-
return __awaiter(this, void 0, void 0, function* () {
|
104
|
-
const _fns = [...fns];
|
105
|
-
const runQueue = () => __awaiter(this, void 0, void 0, function* () {
|
106
|
-
const fn = _fns.shift();
|
107
|
-
if (fn) {
|
108
|
-
try {
|
109
|
-
yield fn();
|
110
|
-
}
|
111
|
-
catch (error) {
|
112
|
-
this.logger.error('Error in start/stop function', error);
|
113
|
-
}
|
114
|
-
yield runQueue();
|
115
|
-
}
|
116
|
-
});
|
117
|
-
yield runQueue();
|
118
|
-
});
|
119
|
-
}
|
120
|
-
start() {
|
121
|
-
return __awaiter(this, void 0, void 0, function* () {
|
122
|
-
if (!this._initialized) {
|
123
|
-
this.runFnQueue(this.startFns);
|
124
|
-
yield this.mountApolloServer();
|
125
|
-
this._initialized = true;
|
126
|
-
}
|
127
|
-
return new Promise((resolve, reject) => {
|
128
|
-
var _a;
|
129
|
-
try {
|
130
|
-
(_a = this.server) === null || _a === void 0 ? void 0 : _a.listen(this.port, this.hostname, () => {
|
131
|
-
const address = this.address;
|
132
|
-
if (address) {
|
133
|
-
this.logger.info(`Service is listening on ${address.address}:${address.port}`);
|
134
|
-
}
|
135
|
-
else {
|
136
|
-
this.logger.info(`Service is listening`);
|
137
|
-
}
|
138
|
-
resolve();
|
139
|
-
});
|
140
|
-
}
|
141
|
-
catch (err) {
|
142
|
-
reject(err);
|
143
|
-
}
|
144
|
-
});
|
145
|
-
});
|
146
|
-
}
|
147
|
-
stop() {
|
148
|
-
return __awaiter(this, void 0, void 0, function* () {
|
149
|
-
return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
150
|
-
var _a;
|
151
|
-
yield this.runFnQueue(this.stopFns);
|
152
|
-
(_a = this.server) === null || _a === void 0 ? void 0 : _a.close((err) => {
|
153
|
-
if (err) {
|
154
|
-
this.logger.error(`Error stopping service`, err);
|
155
|
-
reject(err);
|
156
|
-
}
|
157
|
-
else {
|
158
|
-
this.logger.info(`Service stopped`);
|
159
|
-
this._server = undefined;
|
160
|
-
resolve();
|
161
|
-
}
|
162
|
-
});
|
163
|
-
}));
|
164
|
-
});
|
165
|
-
}
|
166
|
-
mountApolloServer() {
|
167
|
-
var _a, _b;
|
168
|
-
return __awaiter(this, void 0, void 0, function* () {
|
169
|
-
const serviceList = Object.keys(this.apolloServices).map(key => {
|
170
|
-
var _a;
|
171
|
-
return {
|
172
|
-
name: key,
|
173
|
-
url: (_a = this.apolloServices[key].url) !== null && _a !== void 0 ? _a : `local`,
|
174
|
-
};
|
175
|
-
});
|
176
|
-
const gateway = new ApolloGateway({
|
177
|
-
logger: this.logger,
|
178
|
-
// serviceList,
|
179
|
-
supergraphSdl: new IntrospectAndCompose({
|
180
|
-
subgraphs: serviceList
|
181
|
-
}),
|
182
|
-
debug: true,
|
183
|
-
buildService: ({ name, url }) => {
|
184
|
-
var _a;
|
185
|
-
if (url !== 'local') {
|
186
|
-
return new RemoteGraphQLDataSource({
|
187
|
-
url,
|
188
|
-
// TODO willSendRequest
|
189
|
-
});
|
190
|
-
}
|
191
|
-
else {
|
192
|
-
const schema = (_a = this.apolloServices[name]) === null || _a === void 0 ? void 0 : _a.schema;
|
193
|
-
if (schema) {
|
194
|
-
return new LocalGraphQLDataSource(schema);
|
195
|
-
}
|
196
|
-
else {
|
197
|
-
throw new Error('Invalid schema ' + name);
|
198
|
-
}
|
199
|
-
}
|
200
|
-
}
|
201
|
-
});
|
202
|
-
this._server = createServer(this.koa.callback());
|
203
|
-
const wsServer = new WebSocketServer({
|
204
|
-
server: this._server,
|
205
|
-
path: '/graphql',
|
206
|
-
});
|
207
|
-
let serverCleanup;
|
208
|
-
gateway.onSchemaLoadOrUpdate(schemaContext => {
|
209
|
-
const typeDefs = printSchema(new GraphQLSchema({
|
210
|
-
subscription: schemaContext.apiSchema.getSubscriptionType()
|
211
|
-
}));
|
212
|
-
let schema = makeExecutableSchema({
|
213
|
-
typeDefs: gql(typeDefs + `
|
214
|
-
type Query { sample: String }
|
215
|
-
`),
|
216
|
-
resolvers: {
|
217
|
-
Subscription: Object.assign({}, this.allResolvers['Subscription'])
|
218
|
-
}
|
219
|
-
});
|
220
|
-
if ('Subscription' in this.allResolvers) {
|
221
|
-
mergeSubscribeIntoSchema(schema.getSubscriptionType(), this.allResolvers['Subscription']);
|
222
|
-
}
|
223
|
-
serverCleanup = useServer({
|
224
|
-
schema,
|
225
|
-
context: (ctx, message, args) => __awaiter(this, void 0, void 0, function* () {
|
226
|
-
const newCtx = this.koa.createContext(ctx.extra.request, new ServerResponse(ctx.extra.request));
|
227
|
-
const fn = yield compose(this.koa.middleware);
|
228
|
-
yield fn(newCtx);
|
229
|
-
newCtx.kafkaConfig = this.kafkaConfig;
|
230
|
-
newCtx.logger = this.logger;
|
231
|
-
return newCtx;
|
232
|
-
}),
|
233
|
-
}, wsServer);
|
234
|
-
});
|
235
|
-
const gqlServer = new ApolloServer({
|
236
|
-
gateway,
|
237
|
-
introspection: true,
|
238
|
-
allowBatchedHttpRequests: true,
|
239
|
-
plugins: [
|
240
|
-
ApolloServerPluginDrainHttpServer({ httpServer: this._server }),
|
241
|
-
ApolloServerPluginLandingPageLocalDefault({
|
242
|
-
embed: true
|
243
|
-
}),
|
244
|
-
{
|
245
|
-
serverWillStart() {
|
246
|
-
return __awaiter(this, void 0, void 0, function* () {
|
247
|
-
return {
|
248
|
-
drainServer() {
|
249
|
-
return __awaiter(this, void 0, void 0, function* () {
|
250
|
-
yield serverCleanup.dispose();
|
251
|
-
});
|
252
|
-
},
|
253
|
-
};
|
254
|
-
});
|
255
|
-
},
|
256
|
-
},
|
257
|
-
],
|
258
|
-
includeStacktraceInErrorResponses: true,
|
259
|
-
formatError: (error) => {
|
260
|
-
this.logger.error('Error while processing request', { message: error.message });
|
261
|
-
this.logger.debug('Error while processing request', { error });
|
262
|
-
return {
|
263
|
-
message: error.message,
|
264
|
-
locations: error.locations,
|
265
|
-
stack: error
|
266
|
-
};
|
267
|
-
},
|
268
|
-
});
|
269
|
-
yield gqlServer.start();
|
270
|
-
// set maxFile size and maximum files via Facade config of `createFacade`
|
271
|
-
const maxFileSize = ((_a = this.fileUploadOptionsConfig) === null || _a === void 0 ? void 0 : _a.maxFileSize) ? this.fileUploadOptionsConfig.maxFileSize : 10000000;
|
272
|
-
const maxFiles = ((_b = this.fileUploadOptionsConfig) === null || _b === void 0 ? void 0 : _b.maxFiles) ? this.fileUploadOptionsConfig.maxFiles : 20;
|
273
|
-
this.koa.use(graphqlUploadKoa({
|
274
|
-
maxFileSize,
|
275
|
-
maxFiles
|
276
|
-
}));
|
277
|
-
this.koa.use(cors());
|
278
|
-
this.koa.use(bodyParser());
|
279
|
-
this.koa.use(koaMiddleware(gqlServer, {
|
280
|
-
context: ({ ctx }) => __awaiter(this, void 0, void 0, function* () { return ctx; }),
|
281
|
-
}));
|
282
|
-
});
|
283
|
-
}
|
284
|
-
}
|
285
|
-
export const createFacade = (config) => {
|
286
|
-
const koa = new Koa();
|
287
|
-
if (config.env) {
|
288
|
-
koa.env = config.env;
|
289
|
-
}
|
290
|
-
if (config.keys) {
|
291
|
-
koa.keys = config.keys;
|
292
|
-
}
|
293
|
-
let loggerCfg;
|
294
|
-
if (config.logger) {
|
295
|
-
loggerCfg = config.logger;
|
296
|
-
loggerCfg.esTransformer = (msg) => {
|
297
|
-
msg.fields = JSON.stringify(msg.fields);
|
298
|
-
return msg;
|
299
|
-
};
|
300
|
-
}
|
301
|
-
const logger = loggerCfg !== null && loggerCfg !== void 0 ? loggerCfg : createLogger(loggerCfg);
|
302
|
-
koa.context.logger = logger;
|
303
|
-
return new RestoreCommerceFacade({
|
304
|
-
koa,
|
305
|
-
logger,
|
306
|
-
port: config.port,
|
307
|
-
hostname: config.hostname,
|
308
|
-
env: config.env,
|
309
|
-
kafka: config.kafka,
|
310
|
-
fileUploadOptions: config.fileUploadOptions,
|
311
|
-
}).useModule(facadeStatusModule);
|
312
|
-
};
|
package/dist/interfaces.d.ts
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
/// <reference types="koa-websocket" />
|
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
|
-
type RequireAtLeastOne<T, Keys extends keyof T> = Pick<T, Exclude<keyof T, Keys>> & {
|
9
|
-
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
|
10
|
-
}[Keys];
|
11
|
-
export interface FacadeBaseContext extends Koa.Context {
|
12
|
-
logger: Logger;
|
13
|
-
facade: Facade;
|
14
|
-
}
|
15
|
-
export interface FacadeModuleBase<TContext extends FacadeBaseContext = FacadeBaseContext> {
|
16
|
-
moduleName: string;
|
17
|
-
}
|
18
|
-
export interface FacadeModule<TContext extends FacadeBaseContext = FacadeBaseContext> extends FacadeModuleBase<TContext> {
|
19
|
-
(facade: Facade<[FacadeModule<TContext>]>): void;
|
20
|
-
}
|
21
|
-
export interface FacadeModuleFactory<TConfig = any, TContext extends FacadeBaseContext = FacadeBaseContext> extends FacadeModuleBase<TContext> {
|
22
|
-
(config: TConfig): FacadeModule<TContext>;
|
23
|
-
}
|
24
|
-
export type ExtractModuleContext<TModule> = TModule extends FacadeModuleFactory<infer TConfig, infer TContext> ? TContext : TModule extends FacadeModule<infer TContext> ? TContext : never;
|
25
|
-
export type FacadeModulesContext<T extends FacadeModuleBase[]> = (T[0] extends FacadeModuleBase ? ExtractModuleContext<T[0]> : FacadeBaseContext) & (T[1] extends FacadeModuleBase ? ExtractModuleContext<T[1]> : FacadeBaseContext) & (T[2] extends FacadeModuleBase ? ExtractModuleContext<T[2]> : FacadeBaseContext) & (T[3] extends FacadeModuleBase ? ExtractModuleContext<T[3]> : FacadeBaseContext) & (T[4] extends FacadeModuleBase ? ExtractModuleContext<T[4]> : FacadeBaseContext) & (T[5] extends FacadeModuleBase ? ExtractModuleContext<T[5]> : FacadeBaseContext) & (T[6] extends FacadeModuleBase ? ExtractModuleContext<T[6]> : FacadeBaseContext) & (T[7] extends FacadeModuleBase ? ExtractModuleContext<T[7]> : FacadeBaseContext) & (T[8] extends FacadeModuleBase ? ExtractModuleContext<T[8]> : FacadeBaseContext) & (T[9] extends FacadeModuleBase ? ExtractModuleContext<T[9]> : FacadeBaseContext);
|
26
|
-
export type FacadeContext<T extends FacadeModuleBase[] | Facade<any> = []> = T extends FacadeModuleBase[] ? FacadeModulesContext<T> : T extends Facade<infer TFacadeModules> ? FacadeModulesContext<TFacadeModules> : FacadeBaseContext;
|
27
|
-
export interface Facade<TModules extends FacadeModuleBase[] = []> {
|
28
|
-
readonly logger: Logger;
|
29
|
-
readonly koa: Koa<any, FacadeModulesContext<TModules>>;
|
30
|
-
readonly server?: Server;
|
31
|
-
readonly address?: string | AddressInfo;
|
32
|
-
readonly listening: boolean;
|
33
|
-
readonly env: string;
|
34
|
-
start(): Promise<void>;
|
35
|
-
onStart(fn: () => Promise<void>): void;
|
36
|
-
onStop(fn: () => Promise<void>): void;
|
37
|
-
stop(): Promise<void>;
|
38
|
-
addApolloService({ name, schema, url }: RequireAtLeastOne<{
|
39
|
-
name: string;
|
40
|
-
url: string;
|
41
|
-
schema: any;
|
42
|
-
}, 'url' | 'schema'>): void;
|
43
|
-
useMiddleware<TNewState extends object = {}, TNewContext extends object = {}>(middleware: Koa.Middleware<TNewState, TNewContext & FacadeModulesContext<TModules>>): Facade<TModules>;
|
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
|
-
}
|
47
|
-
export interface FileUploadOptionsConfig {
|
48
|
-
fileUploadOptions: FileUploadOptions;
|
49
|
-
}
|
50
|
-
interface FileUploadOptions {
|
51
|
-
maxFileSize: number;
|
52
|
-
maxFiles: number;
|
53
|
-
}
|
54
|
-
export {};
|
@@ -1 +0,0 @@
|
|
1
|
-
export * from './req-res-logger/index.js';
|
@@ -1 +0,0 @@
|
|
1
|
-
export * from './req-res-logger/index.js';
|
@@ -1,14 +0,0 @@
|
|
1
|
-
import type * as koa from 'koa';
|
2
|
-
import { type Logger } from 'winston';
|
3
|
-
export interface ReqResLoggerOptions {
|
4
|
-
logger?: Logger;
|
5
|
-
logGraphQL?: boolean;
|
6
|
-
logGraphQLVariables?: boolean;
|
7
|
-
logResBody?: boolean;
|
8
|
-
}
|
9
|
-
/**
|
10
|
-
Middleware that logs incoming request and outgoing response
|
11
|
-
@param {Object} [options] - middleware options
|
12
|
-
@returns {Middleware}
|
13
|
-
*/
|
14
|
-
export declare const reqResLogger: (opts: ReqResLoggerOptions) => koa.Middleware<koa.DefaultState, koa.DefaultContext, any>;
|
@@ -1,90 +0,0 @@
|
|
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;
|
28
|
-
};
|
29
|
-
/**
|
30
|
-
Middleware that logs incoming request and outgoing response
|
31
|
-
@param {Object} [options] - middleware options
|
32
|
-
@returns {Middleware}
|
33
|
-
*/
|
34
|
-
export const reqResLogger = (opts) => {
|
35
|
-
let loggerCfg;
|
36
|
-
if (opts.logger) {
|
37
|
-
loggerCfg = opts.logger;
|
38
|
-
loggerCfg.esTransformer = (msg) => {
|
39
|
-
msg.fields = JSON.stringify(msg.fields);
|
40
|
-
return msg;
|
41
|
-
};
|
42
|
-
}
|
43
|
-
const logger = loggerCfg !== null && loggerCfg !== void 0 ? loggerCfg : createLogger(loggerCfg);
|
44
|
-
const fn = (ctx, next) => __awaiter(void 0, void 0, void 0, function* () {
|
45
|
-
const request = ctx.request;
|
46
|
-
debug('yield middleware: %s', reqResLogger.name);
|
47
|
-
const start = Date.now();
|
48
|
-
const reqLog = {
|
49
|
-
method: ctx.request.method,
|
50
|
-
url: ctx.request.url,
|
51
|
-
header: ctx.request.header
|
52
|
-
};
|
53
|
-
if (opts.logGraphQL === true && request.body) {
|
54
|
-
const graphQLData = getGraphQLData(opts, request.body);
|
55
|
-
if (graphQLData && Object.keys(graphQLData).length > 0) {
|
56
|
-
Object.assign(reqLog, {
|
57
|
-
graphql: graphQLData
|
58
|
-
});
|
59
|
-
}
|
60
|
-
}
|
61
|
-
// Log incoming request during downstream processing
|
62
|
-
logger.verbose('Request', reqLog);
|
63
|
-
// Call next middleware in stack
|
64
|
-
yield next();
|
65
|
-
const delta = Math.ceil(Date.now() - start);
|
66
|
-
// Log outgoing response during upstream
|
67
|
-
// Generally only response successful request
|
68
|
-
// Error will be handled in the Koa.js error handler
|
69
|
-
// The response body and procTime are not logged
|
70
|
-
const resLog = {
|
71
|
-
procTime: delta,
|
72
|
-
status: ctx.response.status,
|
73
|
-
header: ctx.response.header
|
74
|
-
};
|
75
|
-
if (opts.logGraphQL === true && !('graphql' in reqLog) && request.body) {
|
76
|
-
const graphQLData = getGraphQLData(opts, request.body);
|
77
|
-
if (graphQLData && Object.keys(graphQLData).length > 0) {
|
78
|
-
Object.assign(resLog, {
|
79
|
-
graphql: graphQLData
|
80
|
-
});
|
81
|
-
}
|
82
|
-
}
|
83
|
-
if (opts.logResBody === true) {
|
84
|
-
Object.assign(resLog, { body: ctx.body });
|
85
|
-
}
|
86
|
-
// `procTime` is in millisecond
|
87
|
-
logger.verbose('Response', resLog);
|
88
|
-
});
|
89
|
-
return fn;
|
90
|
-
};
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import { gql } from 'graphql-tag';
|
2
|
-
import { buildSubgraphSchema } from '@apollo/federation';
|
3
|
-
import { schema } from './schema.js';
|
4
|
-
import { namespace } from '../interfaces.js';
|
5
|
-
import { generateSubServiceResolvers } from '../../../gql/protos/index.js';
|
6
|
-
import { subServices } from './types.js';
|
7
|
-
import { printSchema } from 'graphql';
|
8
|
-
// TODO There is currently no way of building a federated schema from GraphQLSchema Object
|
9
|
-
// See https://github.com/apollographql/apollo-server/pull/4310
|
10
|
-
export const FederatedAccessControlSchema = (cfg) => buildSubgraphSchema({
|
11
|
-
typeDefs: gql(printSchema(schema(cfg))),
|
12
|
-
resolvers: generateSubServiceResolvers(subServices, cfg, namespace)
|
13
|
-
});
|