@things-factory/shell 4.3.671 → 4.3.673
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/dist-server/graphql-local-client.js +36 -0
- package/dist-server/graphql-local-client.js.map +1 -0
- package/dist-server/index.js +25 -0
- package/dist-server/index.js.map +1 -0
- package/dist-server/initializers/database.js +30 -0
- package/dist-server/initializers/database.js.map +1 -0
- package/dist-server/initializers/naming-strategy.js +19 -0
- package/dist-server/initializers/naming-strategy.js.map +1 -0
- package/dist-server/middlewares/domain-middleware.js +23 -0
- package/dist-server/middlewares/domain-middleware.js.map +1 -0
- package/dist-server/middlewares/index.js +59 -0
- package/dist-server/middlewares/index.js.map +1 -0
- package/dist-server/migrations/1000000000000-SeedDomain.js +29 -0
- package/dist-server/migrations/1000000000000-SeedDomain.js.map +1 -0
- package/dist-server/migrations/index.js +12 -0
- package/dist-server/migrations/index.js.map +1 -0
- package/dist-server/pubsub-log-transport.js +27 -0
- package/dist-server/pubsub-log-transport.js.map +1 -0
- package/dist-server/pubsub.js +84 -0
- package/dist-server/pubsub.js.map +1 -0
- package/dist-server/routers/domain-router.js +20 -0
- package/dist-server/routers/domain-router.js.map +1 -0
- package/dist-server/routers/global-router.js +47 -0
- package/dist-server/routers/global-router.js.map +1 -0
- package/dist-server/routers/index.js +19 -0
- package/dist-server/routers/index.js.map +1 -0
- package/dist-server/schema.js +109 -0
- package/dist-server/schema.js.map +1 -0
- package/dist-server/server-dev.js +217 -0
- package/dist-server/server-dev.js.map +1 -0
- package/dist-server/server.js +177 -0
- package/dist-server/server.js.map +1 -0
- package/dist-server/service/common-types/index.js +23 -0
- package/dist-server/service/common-types/index.js.map +1 -0
- package/dist-server/service/common-types/list-param.js +83 -0
- package/dist-server/service/common-types/list-param.js.map +1 -0
- package/dist-server/service/common-types/log.js +37 -0
- package/dist-server/service/common-types/log.js.map +1 -0
- package/dist-server/service/common-types/object-ref.js +32 -0
- package/dist-server/service/common-types/object-ref.js.map +1 -0
- package/dist-server/service/common-types/scalar-any.js +45 -0
- package/dist-server/service/common-types/scalar-any.js.map +1 -0
- package/dist-server/service/common-types/scalar-date.js +25 -0
- package/dist-server/service/common-types/scalar-date.js.map +1 -0
- package/dist-server/service/common-types/scalar-object.js +18 -0
- package/dist-server/service/common-types/scalar-object.js.map +1 -0
- package/dist-server/service/directive-transaction/index.js +18 -0
- package/dist-server/service/directive-transaction/index.js.map +1 -0
- package/dist-server/service/directive-transaction/transaction.js +35 -0
- package/dist-server/service/directive-transaction/transaction.js.map +1 -0
- package/dist-server/service/domain/domain-resolver.js +150 -0
- package/dist-server/service/domain/domain-resolver.js.map +1 -0
- package/dist-server/service/domain/domain-types.js +89 -0
- package/dist-server/service/domain/domain-types.js.map +1 -0
- package/dist-server/service/domain/domain.js +113 -0
- package/dist-server/service/domain/domain.js.map +1 -0
- package/dist-server/service/domain/index.js +8 -0
- package/dist-server/service/domain/index.js.map +1 -0
- package/dist-server/service/index.js +45 -0
- package/dist-server/service/index.js.map +1 -0
- package/dist-server/service/subscription-data/data-resolver.js +62 -0
- package/dist-server/service/subscription-data/data-resolver.js.map +1 -0
- package/dist-server/service/subscription-data/data-types.js +35 -0
- package/dist-server/service/subscription-data/data-types.js.map +1 -0
- package/dist-server/service/subscription-data/index.js +7 -0
- package/dist-server/service/subscription-data/index.js.map +1 -0
- package/dist-server/utils/condition-builder.js +126 -0
- package/dist-server/utils/condition-builder.js.map +1 -0
- package/dist-server/utils/get-domain.js +128 -0
- package/dist-server/utils/get-domain.js.map +1 -0
- package/dist-server/utils/index.js +22 -0
- package/dist-server/utils/index.js.map +1 -0
- package/dist-server/utils/list-params-converter.js +102 -0
- package/dist-server/utils/list-params-converter.js.map +1 -0
- package/dist-server/utils/list-query-builder.js +51 -0
- package/dist-server/utils/list-query-builder.js.map +1 -0
- package/dist-server/utils/publish-progress.js +18 -0
- package/dist-server/utils/publish-progress.js.map +1 -0
- package/dist-server/webpack/koa-webpack/client.js +24 -0
- package/dist-server/webpack/koa-webpack/client.js.map +1 -0
- package/dist-server/webpack/koa-webpack/index.js +58 -0
- package/dist-server/webpack/koa-webpack/index.js.map +1 -0
- package/dist-server/webpack/koa-webpack/middleware.js +42 -0
- package/dist-server/webpack/koa-webpack/middleware.js.map +1 -0
- package/dist-server/webpack/koa-webpack/validate.js +26 -0
- package/dist-server/webpack/koa-webpack/validate.js.map +1 -0
- package/package.json +2 -2
- package/server/index.ts +0 -2
- package/server/pubsub.ts +1 -1
@@ -0,0 +1,36 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.GraphqlLocalClient = void 0;
|
4
|
+
const apollo_server_core_1 = require("apollo-server-core");
|
5
|
+
const graphql_1 = require("graphql");
|
6
|
+
class GraphqlLocalClient {
|
7
|
+
static init(schema, app) {
|
8
|
+
const resolve = async ({ query, mutation, variables, context }) => {
|
9
|
+
// Create a new Apollo Server for each request
|
10
|
+
const server = new apollo_server_core_1.ApolloServerBase({
|
11
|
+
schema,
|
12
|
+
context: Object.assign(Object.assign({}, context), { app })
|
13
|
+
});
|
14
|
+
const executeOperation = server.executeOperation.bind(server);
|
15
|
+
const operation = query || mutation;
|
16
|
+
if (!operation || (!!query && !!mutation)) {
|
17
|
+
throw new Error('Either query or mutation must be passed, but not both');
|
18
|
+
}
|
19
|
+
// Execute the actual operation
|
20
|
+
const res = await executeOperation({
|
21
|
+
variables,
|
22
|
+
query: typeof operation === 'string' ? operation : (0, graphql_1.print)(operation)
|
23
|
+
});
|
24
|
+
// Throw an error with all the messages of the
|
25
|
+
// errors to make them easy to match using Jest
|
26
|
+
if (!!res.errors && !!res.errors.length) {
|
27
|
+
const message = res.errors.map(error => error.message).join('\n');
|
28
|
+
throw new Error(message);
|
29
|
+
}
|
30
|
+
return res;
|
31
|
+
};
|
32
|
+
GraphqlLocalClient.client = { query: resolve, mutate: resolve };
|
33
|
+
}
|
34
|
+
}
|
35
|
+
exports.GraphqlLocalClient = GraphqlLocalClient;
|
36
|
+
//# sourceMappingURL=graphql-local-client.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"graphql-local-client.js","sourceRoot":"","sources":["../server/graphql-local-client.ts"],"names":[],"mappings":";;;AAAA,2DAAqD;AAErD,qCAA6C;AA4B7C,MAAa,kBAAkB;IAG7B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG;QACrB,MAAM,OAAO,GAAG,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE;YAChE,8CAA8C;YAC9C,MAAM,MAAM,GAAG,IAAI,qCAAgB,CAAC;gBAClC,MAAM;gBACN,OAAO,kCAOF,OAAO,KACV,GAAG,GACJ;aACF,CAAC,CAAA;YAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAC7D,MAAM,SAAS,GAAG,KAAK,IAAI,QAAQ,CAAA;YACnC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE;gBACzC,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAA;aACzE;YAED,+BAA+B;YAC/B,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC;gBACjC,SAAS;gBACT,KAAK,EAAE,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,eAAK,EAAC,SAAS,CAAC;aACpE,CAAC,CAAA;YAEF,8CAA8C;YAC9C,+CAA+C;YAC/C,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE;gBACvC,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;gBACjE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAA;aACzB;YAED,OAAO,GAAG,CAAA;QACZ,CAAC,CAAA;QAED,kBAAkB,CAAC,MAAM,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;IACjE,CAAC;CACF;AA5CD,gDA4CC"}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
"use strict";
|
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("./migrations"), exports);
|
18
|
+
__exportStar(require("./initializers/naming-strategy"), exports);
|
19
|
+
__exportStar(require("./utils"), exports);
|
20
|
+
__exportStar(require("./pubsub"), exports);
|
21
|
+
__exportStar(require("./pubsub-log-transport"), exports);
|
22
|
+
__exportStar(require("./middlewares"), exports);
|
23
|
+
__exportStar(require("./graphql-local-client"), exports);
|
24
|
+
__exportStar(require("./service"), exports);
|
25
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,+CAA4B;AAC5B,iEAA8C;AAC9C,0CAAuB;AACvB,2CAAwB;AACxB,yDAAsC;AACtC,gDAA6B;AAC7B,yDAAsC;AACtC,4CAAyB"}
|
@@ -0,0 +1,30 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.databaseInitializer = void 0;
|
4
|
+
const path = require('path');
|
5
|
+
const typeorm_1 = require("typeorm");
|
6
|
+
const env_1 = require("@things-factory/env");
|
7
|
+
var ormconfig;
|
8
|
+
try {
|
9
|
+
ormconfig = require(path.resolve(env_1.appRootPath, 'ormconfig'));
|
10
|
+
}
|
11
|
+
catch (e) {
|
12
|
+
ormconfig = require('@things-factory/shell/ormconfig');
|
13
|
+
}
|
14
|
+
const databaseInitializer = async () => {
|
15
|
+
try {
|
16
|
+
const connection = await (0, typeorm_1.createConnection)(ormconfig);
|
17
|
+
env_1.logger.info('Database connection established');
|
18
|
+
if (ormconfig.type == 'sqlite' && ormconfig.synchronize == false) {
|
19
|
+
await connection.query('PRAGMA foreign_keys=OFF');
|
20
|
+
await connection.synchronize();
|
21
|
+
await connection.query('PRAGMA foreign_keys=ON');
|
22
|
+
}
|
23
|
+
return connection;
|
24
|
+
}
|
25
|
+
catch (e) {
|
26
|
+
env_1.logger.error(e);
|
27
|
+
}
|
28
|
+
};
|
29
|
+
exports.databaseInitializer = databaseInitializer;
|
30
|
+
//# sourceMappingURL=database.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../server/initializers/database.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAE5B,qCAA0C;AAC1C,6CAAyD;AAEzD,IAAI,SAAS,CAAA;AACb,IAAI;IACF,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAW,EAAE,WAAW,CAAC,CAAC,CAAA;CAC5D;AAAC,OAAO,CAAC,EAAE;IACV,SAAS,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAA;CACvD;AAEM,MAAM,mBAAmB,GAAG,KAAK,IAAI,EAAE;IAC5C,IAAI;QACF,MAAM,UAAU,GAAG,MAAM,IAAA,0BAAgB,EAAC,SAAS,CAAC,CAAA;QACpD,YAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAA;QAE9C,IAAI,SAAS,CAAC,IAAI,IAAI,QAAQ,IAAI,SAAS,CAAC,WAAW,IAAI,KAAK,EAAE;YAChE,MAAM,UAAU,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAA;YACjD,MAAM,UAAU,CAAC,WAAW,EAAE,CAAA;YAC9B,MAAM,UAAU,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;SACjD;QAED,OAAO,UAAU,CAAA;KAClB;IAAC,OAAO,CAAC,EAAE;QACV,YAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;KAChB;AACH,CAAC,CAAA;AAfY,QAAA,mBAAmB,uBAe/B"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.NamingStrategy = void 0;
|
7
|
+
const typeorm_1 = require("typeorm");
|
8
|
+
const pluralize_1 = __importDefault(require("pluralize"));
|
9
|
+
const lodash_1 = __importDefault(require("lodash"));
|
10
|
+
class NamingStrategy extends typeorm_1.DefaultNamingStrategy {
|
11
|
+
tableName(targetName, userSpecifiedName) {
|
12
|
+
return userSpecifiedName || (0, pluralize_1.default)(lodash_1.default.snakeCase(targetName));
|
13
|
+
}
|
14
|
+
columnName(propertyName, customName, embeddedPrefixes) {
|
15
|
+
return lodash_1.default.snakeCase(embeddedPrefixes.concat(customName || propertyName).join('_'));
|
16
|
+
}
|
17
|
+
}
|
18
|
+
exports.NamingStrategy = NamingStrategy;
|
19
|
+
//# sourceMappingURL=naming-strategy.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"naming-strategy.js","sourceRoot":"","sources":["../../server/initializers/naming-strategy.ts"],"names":[],"mappings":";;;;;;AACA,qCAA+C;AAC/C,0DAAiC;AACjC,oDAAsB;AAEtB,MAAa,cAAe,SAAQ,+BAAqB;IACvD,SAAS,CAAC,UAAkB,EAAE,iBAAyB;QACrD,OAAO,iBAAiB,IAAI,IAAA,mBAAS,EAAC,gBAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;IAChE,CAAC;IAED,UAAU,CAAC,YAAoB,EAAE,UAAkB,EAAE,gBAA0B;QAC7E,OAAO,gBAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAU,IAAI,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;IACnF,CAAC;CACF;AARD,wCAQC"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.domainMiddleware = void 0;
|
4
|
+
const utils_1 = require("../utils");
|
5
|
+
const debug = require('debug')('things-factory:shell:domain-middleware');
|
6
|
+
async function domainMiddleware(context, next) {
|
7
|
+
var _a;
|
8
|
+
const { domain } = context.state;
|
9
|
+
if (domain) {
|
10
|
+
debug('already fetch domain', context.path, domain.subdomain);
|
11
|
+
return await next();
|
12
|
+
}
|
13
|
+
/*
|
14
|
+
* The domainType should be checked only when signin and checkin.
|
15
|
+
* For purposes such as API calls, the target domainType may be different from the system domainType.
|
16
|
+
* So, we don't check domainType here.
|
17
|
+
*/
|
18
|
+
context.state.domain = await (0, utils_1.getDomainFromURL)(context);
|
19
|
+
debug('subdomain', context.path, (_a = context.state.domain) === null || _a === void 0 ? void 0 : _a.subdomain);
|
20
|
+
await next();
|
21
|
+
}
|
22
|
+
exports.domainMiddleware = domainMiddleware;
|
23
|
+
//# sourceMappingURL=domain-middleware.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"domain-middleware.js","sourceRoot":"","sources":["../../server/middlewares/domain-middleware.ts"],"names":[],"mappings":";;;AAAA,oCAA2C;AAE3C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,wCAAwC,CAAC,CAAA;AAEjE,KAAK,UAAU,gBAAgB,CAAC,OAAY,EAAE,IAAS;;IAC5D,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,IAAI,MAAM,EAAE;QACV,KAAK,CAAC,sBAAsB,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7D,OAAO,MAAM,IAAI,EAAE,CAAA;KACpB;IAED;;;;OAIG;IACH,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,IAAA,wBAAgB,EAAC,OAAO,CAAC,CAAA;IAEtD,KAAK,CAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,MAAA,OAAO,CAAC,KAAK,CAAC,MAAM,0CAAE,SAAS,CAAC,CAAA;IAEjE,MAAM,IAAI,EAAE,CAAA;AACd,CAAC;AAjBD,4CAiBC"}
|
@@ -0,0 +1,59 @@
|
|
1
|
+
"use strict";
|
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
|
+
exports.initMiddlewares = void 0;
|
18
|
+
const env_1 = require("@things-factory/env");
|
19
|
+
const domain_middleware_1 = require("./domain-middleware");
|
20
|
+
const debug = require('debug')('things-factory:shell:middleware');
|
21
|
+
function initMiddlewares(app) {
|
22
|
+
app.subdomainOffset = env_1.config.get('subdomainOffset', 2);
|
23
|
+
app.on('error', (err, context) => {
|
24
|
+
env_1.logger.error(err);
|
25
|
+
});
|
26
|
+
/*
|
27
|
+
* Catching downstream errors
|
28
|
+
* - recommend to use context.throw, context.assert
|
29
|
+
*/
|
30
|
+
app.use(async (context, next) => {
|
31
|
+
try {
|
32
|
+
await next();
|
33
|
+
}
|
34
|
+
catch (err) {
|
35
|
+
context.status = err.status || 500;
|
36
|
+
context.body = err.message;
|
37
|
+
// emitting error to app.on('error', ...)
|
38
|
+
context.app.emit('error', err, context);
|
39
|
+
}
|
40
|
+
});
|
41
|
+
/*
|
42
|
+
* post:graphql 에 대해서는 domain을 확인한다.
|
43
|
+
* graphql app을 router에 적용하지 못하기 때문임.
|
44
|
+
*/
|
45
|
+
app.use(async (context, next) => {
|
46
|
+
const { method, path } = context;
|
47
|
+
if (method == 'POST' && path.startsWith('/graphql')) {
|
48
|
+
return await (0, domain_middleware_1.domainMiddleware)(context, next);
|
49
|
+
}
|
50
|
+
await next();
|
51
|
+
});
|
52
|
+
}
|
53
|
+
exports.initMiddlewares = initMiddlewares;
|
54
|
+
process.on('bootstrap-module-subscription', (app, subscriptionMiddleware) => {
|
55
|
+
debug('bootstrap-module-subscription');
|
56
|
+
subscriptionMiddleware.push(domain_middleware_1.domainMiddleware);
|
57
|
+
});
|
58
|
+
__exportStar(require("./domain-middleware"), exports);
|
59
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/middlewares/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6CAAoD;AACpD,2DAAsD;AAEtD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,iCAAiC,CAAC,CAAA;AAEjE,SAAgB,eAAe,CAAC,GAAG;IACjC,GAAG,CAAC,eAAe,GAAG,YAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IAEtD,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAC/B,YAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACnB,CAAC,CAAC,CAAA;IAEF;;;OAGG;IACH,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9B,IAAI;YACF,MAAM,IAAI,EAAE,CAAA;SACb;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAA;YAClC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,CAAA;YAE1B,yCAAyC;YACzC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;SACxC;IACH,CAAC,CAAC,CAAA;IAEF;;;OAGG;IACH,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;QAEhC,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;YACnD,OAAO,MAAM,IAAA,oCAAgB,EAAC,OAAO,EAAE,IAAI,CAAC,CAAA;SAC7C;QAED,MAAM,IAAI,EAAE,CAAA;IACd,CAAC,CAAC,CAAA;AACJ,CAAC;AApCD,0CAoCC;AAED,OAAO,CAAC,EAAE,CAAC,+BAAsC,EAAE,CAAC,GAAG,EAAE,sBAAsB,EAAE,EAAE;IACjF,KAAK,CAAC,+BAA+B,CAAC,CAAA;IAEtC,sBAAsB,CAAC,IAAI,CAAC,oCAAgB,CAAC,CAAA;AAC/C,CAAC,CAAC,CAAA;AAEF,sDAAmC"}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.SeedDomain1000000000000 = void 0;
|
4
|
+
const typeorm_1 = require("typeorm");
|
5
|
+
const domain_1 = require("../service/domain/domain");
|
6
|
+
const SEED_DOMAINS = [
|
7
|
+
{
|
8
|
+
name: 'SYSTEM',
|
9
|
+
subdomain: 'system',
|
10
|
+
systemFlag: true
|
11
|
+
}
|
12
|
+
];
|
13
|
+
class SeedDomain1000000000000 {
|
14
|
+
async up(queryRunner) {
|
15
|
+
const repository = (0, typeorm_1.getRepository)(domain_1.Domain);
|
16
|
+
return await Promise.all(SEED_DOMAINS.map(async (domain) => {
|
17
|
+
await repository.save(Object.assign({}, domain));
|
18
|
+
}));
|
19
|
+
}
|
20
|
+
async down(queryRunner) {
|
21
|
+
const repository = (0, typeorm_1.getRepository)(domain_1.Domain);
|
22
|
+
return await Promise.all(SEED_DOMAINS.reverse().map(async (domain) => {
|
23
|
+
let recode = await repository.findOne({ subdomain: domain.subdomain });
|
24
|
+
await repository.remove(recode);
|
25
|
+
}));
|
26
|
+
}
|
27
|
+
}
|
28
|
+
exports.SeedDomain1000000000000 = SeedDomain1000000000000;
|
29
|
+
//# sourceMappingURL=1000000000000-SeedDomain.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"1000000000000-SeedDomain.js","sourceRoot":"","sources":["../../server/migrations/1000000000000-SeedDomain.ts"],"names":[],"mappings":";;;AAAA,qCAAwE;AACxE,qDAAiD;AAEjD,MAAM,YAAY,GAAG;IACnB;QACE,IAAI,EAAE,QAAQ;QACd,SAAS,EAAE,QAAQ;QACnB,UAAU,EAAE,IAAI;KACjB;CACF,CAAA;AAED,MAAa,uBAAuB;IAC3B,KAAK,CAAC,EAAE,CAAC,WAAwB;QACtC,MAAM,UAAU,GAAG,IAAA,uBAAa,EAAC,eAAM,CAAC,CAAA;QAExC,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,YAAY,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;YAC9B,MAAM,UAAU,CAAC,IAAI,mBAChB,MAAM,EACT,CAAA;QACJ,CAAC,CAAC,CACH,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,WAAwB;QACxC,MAAM,UAAU,GAAG,IAAA,uBAAa,EAAC,eAAM,CAAC,CAAA;QAExC,OAAO,MAAM,OAAO,CAAC,GAAG,CACtB,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,KAAK,EAAC,MAAM,EAAC,EAAE;YACxC,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC,CAAA;YACtE,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC,CAAC,CACH,CAAA;IACH,CAAC;CACF;AAvBD,0DAuBC"}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.migrations = void 0;
|
4
|
+
const glob = require('glob');
|
5
|
+
const path = require('path');
|
6
|
+
exports.migrations = [];
|
7
|
+
glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function (file) {
|
8
|
+
if (file.indexOf('index.js') !== -1)
|
9
|
+
return;
|
10
|
+
exports.migrations = exports.migrations.concat(Object.values(require(path.resolve(file))) || []);
|
11
|
+
});
|
12
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/migrations/index.ts"],"names":[],"mappings":";;;AAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAEjB,QAAA,UAAU,GAAG,EAAE,CAAA;AAE1B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAS,IAAI;IACzE,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAE,OAAM;IAC3C,kBAAU,GAAG,kBAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAClF,CAAC,CAAC,CAAA"}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.PubSubLogTransport = void 0;
|
7
|
+
const camelCase_1 = __importDefault(require("lodash/camelCase"));
|
8
|
+
const winston_transport_1 = __importDefault(require("winston-transport"));
|
9
|
+
const pubsub_1 = require("./pubsub");
|
10
|
+
class PubSubLogTransport extends winston_transport_1.default {
|
11
|
+
constructor(opts) {
|
12
|
+
super(opts);
|
13
|
+
this.topic = opts.topic;
|
14
|
+
this.source = opts.source;
|
15
|
+
this.resolver = opts.resolver || (0, camelCase_1.default)(this.topic);
|
16
|
+
}
|
17
|
+
log(info, callback) {
|
18
|
+
setImmediate(() => {
|
19
|
+
pubsub_1.pubsub.publish(this.topic, {
|
20
|
+
[this.resolver]: Object.assign({ source: this.source }, info)
|
21
|
+
});
|
22
|
+
});
|
23
|
+
callback();
|
24
|
+
}
|
25
|
+
}
|
26
|
+
exports.PubSubLogTransport = PubSubLogTransport;
|
27
|
+
//# sourceMappingURL=pubsub-log-transport.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pubsub-log-transport.js","sourceRoot":"","sources":["../server/pubsub-log-transport.ts"],"names":[],"mappings":";;;;;;AAAA,iEAAwC;AACxC,0EAAyC;AACzC,qCAAiC;AAEjC,MAAa,kBAAmB,SAAQ,2BAAS;IAK/C,YAAY,IAAI;QACd,KAAK,CAAC,IAAI,CAAC,CAAA;QAEX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QACzB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAA,mBAAS,EAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACxD,CAAC;IAED,GAAG,CAAC,IAAI,EAAE,QAAQ;QAChB,YAAY,CAAC,GAAG,EAAE;YAChB,eAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE;gBACzB,CAAC,IAAI,CAAC,QAAQ,CAAC,kBACb,MAAM,EAAE,IAAI,CAAC,MAAM,IAChB,IAAI,CACR;aACF,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,QAAQ,EAAE,CAAA;IACZ,CAAC;CACF;AAzBD,gDAyBC"}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.pubsub = void 0;
|
7
|
+
const graphql_mqtt_subscriptions_1 = require("graphql-mqtt-subscriptions");
|
8
|
+
const graphql_redis_subscriptions_1 = require("graphql-redis-subscriptions");
|
9
|
+
const graphql_subscriptions_1 = require("graphql-subscriptions");
|
10
|
+
const ioredis_1 = __importDefault(require("ioredis"));
|
11
|
+
const mqtt_1 = require("mqtt");
|
12
|
+
const env_1 = require("@things-factory/env");
|
13
|
+
const { middleware, host, port, nodes, topic, options } = env_1.config.get('pubsub', {});
|
14
|
+
const debug = require('debug')('things-factory:shell');
|
15
|
+
let pubsub;
|
16
|
+
exports.pubsub = pubsub;
|
17
|
+
switch (middleware) {
|
18
|
+
case 'mqtt':
|
19
|
+
exports.pubsub = pubsub = new graphql_mqtt_subscriptions_1.MQTTPubSub({
|
20
|
+
client: (0, mqtt_1.connect)('mqtt://' + host, Object.assign({ reconnectPeriod: 1000 }, options))
|
21
|
+
});
|
22
|
+
break;
|
23
|
+
case 'redis':
|
24
|
+
const redisOption = Object.assign({ host,
|
25
|
+
port, retryStrategy: times => {
|
26
|
+
// reconnect after
|
27
|
+
return Math.min(times * 50, 2000);
|
28
|
+
} }, options);
|
29
|
+
exports.pubsub = pubsub = new graphql_redis_subscriptions_1.RedisPubSub({
|
30
|
+
publisher: new ioredis_1.default(redisOption),
|
31
|
+
subscriber: new ioredis_1.default(redisOption)
|
32
|
+
});
|
33
|
+
break;
|
34
|
+
case 'redisCluster':
|
35
|
+
const cluster = new ioredis_1.default.Cluster(nodes, options);
|
36
|
+
exports.pubsub = pubsub = new graphql_redis_subscriptions_1.RedisPubSub({
|
37
|
+
publisher: cluster,
|
38
|
+
subscriber: cluster
|
39
|
+
});
|
40
|
+
break;
|
41
|
+
case 'kafka':
|
42
|
+
try {
|
43
|
+
/*
|
44
|
+
* https://github.com/hatiolab/things-factory/issues/1239
|
45
|
+
*/
|
46
|
+
const { KafkaPubSub } = require('graphql-kafka-subscriptions');
|
47
|
+
exports.pubsub = pubsub = new KafkaPubSub(Object.assign({ topic,
|
48
|
+
host,
|
49
|
+
port }, options));
|
50
|
+
}
|
51
|
+
catch (e) {
|
52
|
+
console.error('graphql-kafka-subscriptions module is not installed, so application can not go further.');
|
53
|
+
throw e;
|
54
|
+
}
|
55
|
+
break;
|
56
|
+
default:
|
57
|
+
exports.pubsub = pubsub = new graphql_subscriptions_1.PubSub();
|
58
|
+
break;
|
59
|
+
}
|
60
|
+
debug(middleware || 'default', 'pubsub initialized.');
|
61
|
+
// kafka pubsub keeps connection and app port with 'ctrl+c' termination.
|
62
|
+
const exitHandler = async (evt) => {
|
63
|
+
if (pubsub.close) {
|
64
|
+
try {
|
65
|
+
await pubsub.close();
|
66
|
+
}
|
67
|
+
catch (err) {
|
68
|
+
console.error(err);
|
69
|
+
}
|
70
|
+
}
|
71
|
+
};
|
72
|
+
/*
|
73
|
+
* exit events hint from https://stackoverflow.com/a/14032965/14539284
|
74
|
+
*/
|
75
|
+
//do something when app is closing
|
76
|
+
process.on('exit', exitHandler.bind(null, { name: 'exit', exit: true }));
|
77
|
+
//catches ctrl+c event
|
78
|
+
process.on('SIGINT', exitHandler.bind(null, { name: 'SIGINT', exit: true }));
|
79
|
+
// catches "kill pid" (for example: nodemon restart)
|
80
|
+
process.on('SIGUSR1', exitHandler.bind(null, { name: 'SIGUSR1', exit: true }));
|
81
|
+
process.on('SIGUSR2', exitHandler.bind(null, { name: 'SIGUSR2', exit: true }));
|
82
|
+
//catches uncaught exceptions
|
83
|
+
process.on('uncaughtException', exitHandler.bind(null, { name: 'uncaughtException', exit: true }));
|
84
|
+
//# sourceMappingURL=pubsub.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../server/pubsub.ts"],"names":[],"mappings":";;;;;;AAAA,2EAAuD;AACvD,6EAAyD;AACzD,iEAA8C;AAC9C,sDAA2B;AAC3B,+BAA8B;AAE9B,6CAA4C;AAE5C,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,YAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAA;AAElF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,sBAAsB,CAAC,CAAA;AAEtD,IAAI,MAAW,CAAA;AAqFN,wBAAM;AAnFf,QAAQ,UAAU,EAAE;IAClB,KAAK,MAAM;QACT,iBAAA,MAAM,GAAG,IAAI,uCAAU,CAAC;YACtB,MAAM,EAAE,IAAA,cAAO,EAAC,SAAS,GAAG,IAAI,kBAC9B,eAAe,EAAE,IAAI,IAClB,OAAO,EACH;SACV,CAAC,CAAA;QACF,MAAK;IACP,KAAK,OAAO;QACV,MAAM,WAAW,mBACf,IAAI;YACJ,IAAI,EACJ,aAAa,EAAE,KAAK,CAAC,EAAE;gBACrB,kBAAkB;gBAClB,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,EAAE,IAAI,CAAC,CAAA;YACnC,CAAC,IACE,OAAO,CACX,CAAA;QACD,iBAAA,MAAM,GAAG,IAAI,yCAAW,CAAC;YACvB,SAAS,EAAE,IAAI,iBAAK,CAAC,WAAW,CAAC;YACjC,UAAU,EAAE,IAAI,iBAAK,CAAC,WAAW,CAAC;SACnC,CAAC,CAAA;QACF,MAAK;IACP,KAAK,cAAc;QACjB,MAAM,OAAO,GAAG,IAAI,iBAAK,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACjD,iBAAA,MAAM,GAAG,IAAI,yCAAW,CAAC;YACvB,SAAS,EAAE,OAAO;YAClB,UAAU,EAAE,OAAO;SACpB,CAAC,CAAA;QACF,MAAK;IACP,KAAK,OAAO;QACV,IAAI;YACF;;eAEG;YACH,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,6BAA6B,CAAC,CAAA;YAC9D,iBAAA,MAAM,GAAG,IAAI,WAAW,iBACtB,KAAK;gBACL,IAAI;gBACJ,IAAI,IACD,OAAO,EACV,CAAA;SACH;QAAC,OAAO,CAAC,EAAE;YACV,OAAO,CAAC,KAAK,CAAC,yFAAyF,CAAC,CAAA;YACxG,MAAM,CAAC,CAAA;SACR;QACD,MAAK;IACP;QACE,iBAAA,MAAM,GAAG,IAAI,8BAAM,EAAE,CAAA;QACrB,MAAK;CACR;AAED,KAAK,CAAC,UAAU,IAAI,SAAS,EAAE,qBAAqB,CAAC,CAAA;AAErD,wEAAwE;AACxE,MAAM,WAAW,GAAG,KAAK,EAAC,GAAG,EAAC,EAAE;IAC9B,IAAI,MAAM,CAAC,KAAK,EAAE;QAChB,IAAI;YACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;SACrB;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;SACnB;KACF;AACH,CAAC,CAAA;AAED;;GAEG;AAEH,kCAAkC;AAClC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAExE,sBAAsB;AACtB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAE5E,oDAAoD;AACpD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAC9E,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AAE9E,6BAA6B;AAC7B,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.domainPrivateRouter = exports.domainPublicRouter = void 0;
|
7
|
+
const koa_router_1 = __importDefault(require("koa-router"));
|
8
|
+
const domain_middleware_1 = require("../middlewares/domain-middleware");
|
9
|
+
const debug = require('debug')('things-factory:shell:domain-router');
|
10
|
+
exports.domainPublicRouter = new koa_router_1.default();
|
11
|
+
exports.domainPublicRouter.use(async (context, next) => {
|
12
|
+
debug('domain-public-router path, referer, matched', context.path, context.get('Referrer'), context._matchedRoute);
|
13
|
+
await next();
|
14
|
+
}, domain_middleware_1.domainMiddleware);
|
15
|
+
exports.domainPrivateRouter = new koa_router_1.default();
|
16
|
+
exports.domainPrivateRouter.use(async (context, next) => {
|
17
|
+
debug('domain-private-router path, referer, matched', context.path, context.get('Referrer'), context._matchedRoute);
|
18
|
+
await next();
|
19
|
+
}, domain_middleware_1.domainMiddleware);
|
20
|
+
//# sourceMappingURL=domain-router.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"domain-router.js","sourceRoot":"","sources":["../../server/routers/domain-router.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,wEAAmE;AAEnE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,oCAAoC,CAAC,CAAA;AAEvD,QAAA,kBAAkB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAC9C,0BAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC7C,KAAK,CAAC,6CAA6C,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IAClH,MAAM,IAAI,EAAE,CAAA;AACd,CAAC,EAAE,oCAAgB,CAAC,CAAA;AAEP,QAAA,mBAAmB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAC/C,2BAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9C,KAAK,CAAC,8CAA8C,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,CAAA;IACnH,MAAM,IAAI,EAAE,CAAA;AACd,CAAC,EAAE,oCAAgB,CAAC,CAAA"}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
exports.globalPrivateRouter = exports.globalPublicRouter = void 0;
|
7
|
+
const koa_router_1 = __importDefault(require("koa-router"));
|
8
|
+
const domain_middleware_1 = require("../middlewares/domain-middleware");
|
9
|
+
var crawler = require('npm-license-crawler');
|
10
|
+
const debug = require('debug')('things-factory:shell:global-router');
|
11
|
+
exports.globalPublicRouter = new koa_router_1.default();
|
12
|
+
exports.globalPrivateRouter = new koa_router_1.default();
|
13
|
+
/* even though global private router, catch domain for information */
|
14
|
+
exports.globalPrivateRouter.use(domain_middleware_1.domainMiddleware);
|
15
|
+
exports.globalPublicRouter.get('/dependencies', async (context, next) => {
|
16
|
+
const { dependencyGraph } = require('@things-factory/env');
|
17
|
+
await context.render('dependencies-view-graphviz', { model: dependencyGraph });
|
18
|
+
});
|
19
|
+
exports.globalPublicRouter.get('/licenses', (context, next) => {
|
20
|
+
return new Promise(function (resolve, reject) {
|
21
|
+
var options = {
|
22
|
+
start: ['.'],
|
23
|
+
exclude: [],
|
24
|
+
noColor: true,
|
25
|
+
production: true,
|
26
|
+
unknown: false
|
27
|
+
};
|
28
|
+
crawler.dumpLicenses(options, function (error, res) {
|
29
|
+
if (error) {
|
30
|
+
debug('get:/licenses', error);
|
31
|
+
reject(error);
|
32
|
+
}
|
33
|
+
else {
|
34
|
+
context.type = 'application/json';
|
35
|
+
context.body = res;
|
36
|
+
resolve(res);
|
37
|
+
}
|
38
|
+
});
|
39
|
+
});
|
40
|
+
});
|
41
|
+
/* Paths starting with /public are assumed to use the koa-view renderer. */
|
42
|
+
exports.globalPublicRouter.get('/public/(.[^.]*)', async (context, next) => {
|
43
|
+
const { path } = context;
|
44
|
+
debug('get:/public/(.[^.]*)', path);
|
45
|
+
await context.render(path.substr(1));
|
46
|
+
});
|
47
|
+
//# sourceMappingURL=global-router.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"global-router.js","sourceRoot":"","sources":["../../server/routers/global-router.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,wEAAmE;AAEnE,IAAI,OAAO,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;AAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,oCAAoC,CAAC,CAAA;AAEvD,QAAA,kBAAkB,GAAG,IAAI,oBAAM,EAAE,CAAA;AACjC,QAAA,mBAAmB,GAAG,IAAI,oBAAM,EAAE,CAAA;AAE/C,qEAAqE;AACrE,2BAAmB,CAAC,GAAG,CAAC,oCAAgB,CAAC,CAAA;AAEzC,0BAAkB,CAAC,GAAG,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC9D,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAAA;IAE1D,MAAM,OAAO,CAAC,MAAM,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAA;AAChF,CAAC,CAAC,CAAA;AAEF,0BAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE;IACpD,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM;QAC1C,IAAI,OAAO,GAAG;YACZ,KAAK,EAAE,CAAC,GAAG,CAAC;YACZ,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,KAAK;SACf,CAAA;QAED,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,UAAU,KAAK,EAAE,GAAG;YAChD,IAAI,KAAK,EAAE;gBACT,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,CAAA;gBAC7B,MAAM,CAAC,KAAK,CAAC,CAAA;aACd;iBAAM;gBACL,OAAO,CAAC,IAAI,GAAG,kBAAkB,CAAA;gBACjC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;gBAClB,OAAO,CAAC,GAAG,CAAC,CAAA;aACb;QACH,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,2EAA2E;AAC3E,0BAAkB,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IACjE,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IACxB,KAAK,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAA;IACnC,MAAM,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA"}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
"use strict";
|
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("./global-router"), exports);
|
18
|
+
__exportStar(require("./domain-router"), exports);
|
19
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/routers/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,kDAA+B"}
|
@@ -0,0 +1,109 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.schema = void 0;
|
4
|
+
const env_1 = require("@things-factory/env");
|
5
|
+
const graphql_upload_1 = require("graphql-upload");
|
6
|
+
const type_graphql_1 = require("type-graphql");
|
7
|
+
const utils_1 = require("@things-factory/utils");
|
8
|
+
const schema_1 = require("@graphql-tools/schema");
|
9
|
+
async function schema() {
|
10
|
+
const schemas = env_1.orderedModuleNames
|
11
|
+
.map(dep => (0, env_1.loader)(dep).schema)
|
12
|
+
.filter(schema => schema)
|
13
|
+
.reduce((sum, schema) => {
|
14
|
+
const { typeDefs, resolvers, resolverClasses, directives } = sum;
|
15
|
+
let { typeDefs: sTypeDefs = {}, resolvers: sResolvers = {}, resolverClasses: sResolverClasses = [], directives: sDirectives = {} } = schema;
|
16
|
+
return {
|
17
|
+
typeDefs: (0, utils_1.deepMerge)(typeDefs, sTypeDefs),
|
18
|
+
resolvers: (0, utils_1.deepMerge)(resolvers, sResolvers),
|
19
|
+
resolverClasses: [...resolverClasses, ...(sResolverClasses || [])],
|
20
|
+
directives: (0, utils_1.deepMerge)(directives, sDirectives)
|
21
|
+
};
|
22
|
+
}, {
|
23
|
+
typeDefs: {},
|
24
|
+
resolvers: {},
|
25
|
+
resolverClasses: [],
|
26
|
+
directives: {}
|
27
|
+
});
|
28
|
+
/* for typeDefs */
|
29
|
+
var typeDefs = schemas.typeDefs;
|
30
|
+
var { queries = [], mutations = [], subscriptions = [], directives = [], types = [] } = typeDefs;
|
31
|
+
queries = [...queries, ...(typeDefs.Query || [])];
|
32
|
+
mutations = [...mutations, ...(typeDefs.Mutation || [])];
|
33
|
+
subscriptions = [...subscriptions, ...(typeDefs.Subscription || [])];
|
34
|
+
directives = [...directives, ...(typeDefs.Directive || [])];
|
35
|
+
delete typeDefs.Query;
|
36
|
+
delete typeDefs.Mutation;
|
37
|
+
delete typeDefs.Subscription;
|
38
|
+
delete typeDefs.Directive;
|
39
|
+
delete typeDefs.queries;
|
40
|
+
delete typeDefs.mutations;
|
41
|
+
delete typeDefs.subscriptions;
|
42
|
+
delete typeDefs.directives;
|
43
|
+
delete typeDefs.types;
|
44
|
+
const defs = {
|
45
|
+
query: queries.length > 0 ? ['type Query {', ...queries, '}'].join('\n') : 'type Query { _ : Boolean }',
|
46
|
+
mutation: mutations.length > 0 ? ['type Mutation {', ...mutations, '}'].join('\n') : 'type Mutation { _ : Boolean }',
|
47
|
+
subscription: subscriptions.length > 0
|
48
|
+
? ['type Subscription {', ...subscriptions, '}'].join('\n')
|
49
|
+
: 'type Subscription { _ : Boolean }'
|
50
|
+
};
|
51
|
+
typeDefs = [
|
52
|
+
`
|
53
|
+
scalar Upload
|
54
|
+
`,
|
55
|
+
defs.query,
|
56
|
+
defs.mutation,
|
57
|
+
defs.subscription,
|
58
|
+
...directives,
|
59
|
+
...types,
|
60
|
+
...Object.values(typeDefs)
|
61
|
+
].filter(type => !!type);
|
62
|
+
/* for resolvers */
|
63
|
+
var { resolvers } = schemas;
|
64
|
+
var { queries = [], mutations = [], subscriptions = [], directives = [] } = resolvers;
|
65
|
+
var queryResolvers = queries.length > 0 &&
|
66
|
+
queries.reduce((sum, query) => {
|
67
|
+
return Object.assign(Object.assign({}, sum), query);
|
68
|
+
}, {});
|
69
|
+
var mutationResolvers = mutations.length > 0 &&
|
70
|
+
mutations.reduce((sum, mutation) => {
|
71
|
+
return Object.assign(Object.assign({}, sum), mutation);
|
72
|
+
}, {});
|
73
|
+
var subscriptionResolvers = subscriptions.length > 0 &&
|
74
|
+
subscriptions.reduce((sum, subscription) => {
|
75
|
+
return Object.assign(Object.assign({}, sum), subscription);
|
76
|
+
}, {});
|
77
|
+
var directiveResolvers = directives.reduce((sum, directive) => {
|
78
|
+
return Object.assign(Object.assign({}, sum), directive);
|
79
|
+
}, {});
|
80
|
+
delete resolvers.queries;
|
81
|
+
delete resolvers.mutations;
|
82
|
+
delete resolvers.subscriptions;
|
83
|
+
delete resolvers.directives;
|
84
|
+
var Query = resolvers.Query || {};
|
85
|
+
var Mutation = resolvers.Mutation || {};
|
86
|
+
var Subscription = resolvers.Subscription || {};
|
87
|
+
var Directive = resolvers.Directive || {};
|
88
|
+
delete resolvers.Query;
|
89
|
+
delete resolvers.Mutation;
|
90
|
+
delete resolvers.Subscription;
|
91
|
+
delete resolvers.Directive;
|
92
|
+
resolvers = Object.assign({ Upload: graphql_upload_1.GraphQLUpload, Query: (0, utils_1.deepMerge)(Query, queryResolvers), Mutation: (0, utils_1.deepMerge)(Mutation, mutationResolvers), Subscription: (0, utils_1.deepMerge)(Subscription, subscriptionResolvers) }, resolvers);
|
93
|
+
var merged = (0, schema_1.mergeSchemas)({
|
94
|
+
schemas: [
|
95
|
+
await (0, type_graphql_1.buildSchema)({
|
96
|
+
resolvers: schemas.resolverClasses,
|
97
|
+
dateScalarMode: 'timestamp'
|
98
|
+
})
|
99
|
+
],
|
100
|
+
typeDefs,
|
101
|
+
resolvers
|
102
|
+
});
|
103
|
+
Object.values(schemas.directives).map((directive) => {
|
104
|
+
merged = directive(merged);
|
105
|
+
});
|
106
|
+
return merged;
|
107
|
+
}
|
108
|
+
exports.schema = schema;
|
109
|
+
//# sourceMappingURL=schema.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../server/schema.ts"],"names":[],"mappings":"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"}
|