@things-factory/shell 8.0.38 → 9.0.0-9.0.0-beta.59.0

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.
Files changed (180) hide show
  1. package/_index.html +0 -1
  2. package/bin/things-factory-migration +6 -3
  3. package/client/themes/calendar-theme.css +3 -1
  4. package/client/themes/index.css +2 -1
  5. package/dist-server/index.d.ts +12 -12
  6. package/dist-server/index.js +12 -12
  7. package/dist-server/index.js.map +1 -1
  8. package/dist-server/initializers/database.js +4 -10
  9. package/dist-server/initializers/database.js.map +1 -1
  10. package/dist-server/initializers/ormconfig.d.ts +2 -0
  11. package/dist-server/initializers/ormconfig.js +30 -0
  12. package/dist-server/initializers/ormconfig.js.map +1 -0
  13. package/dist-server/middlewares/domain-middleware.js +2 -2
  14. package/dist-server/middlewares/domain-middleware.js.map +1 -1
  15. package/dist-server/middlewares/index.d.ts +1 -1
  16. package/dist-server/middlewares/index.js +3 -3
  17. package/dist-server/middlewares/index.js.map +1 -1
  18. package/dist-server/migrations/1000000000000-SeedDomain.js +4 -4
  19. package/dist-server/migrations/1000000000000-SeedDomain.js.map +1 -1
  20. package/dist-server/migrations/index.js.map +1 -1
  21. package/dist-server/process-cleaner.d.ts +1 -0
  22. package/dist-server/process-cleaner.js +92 -0
  23. package/dist-server/process-cleaner.js.map +1 -0
  24. package/dist-server/routers/domain-router.js +3 -3
  25. package/dist-server/routers/domain-router.js.map +1 -1
  26. package/dist-server/routers/global-router.js +6 -6
  27. package/dist-server/routers/global-router.js.map +1 -1
  28. package/dist-server/routers/index.d.ts +3 -3
  29. package/dist-server/routers/index.js +3 -3
  30. package/dist-server/routers/index.js.map +1 -1
  31. package/dist-server/schema.js +5 -4
  32. package/dist-server/schema.js.map +1 -1
  33. package/dist-server/server-dev.js +37 -39
  34. package/dist-server/server-dev.js.map +1 -1
  35. package/dist-server/server.js +34 -36
  36. package/dist-server/server.js.map +1 -1
  37. package/dist-server/service/attribute-set/attribute-set-item-type.js +3 -3
  38. package/dist-server/service/attribute-set/attribute-set-item-type.js.map +1 -1
  39. package/dist-server/service/attribute-set/attribute-set-mutation.d.ts +2 -2
  40. package/dist-server/service/attribute-set/attribute-set-mutation.js +16 -16
  41. package/dist-server/service/attribute-set/attribute-set-mutation.js.map +1 -1
  42. package/dist-server/service/attribute-set/attribute-set-query.d.ts +3 -3
  43. package/dist-server/service/attribute-set/attribute-set-query.js +15 -15
  44. package/dist-server/service/attribute-set/attribute-set-query.js.map +1 -1
  45. package/dist-server/service/attribute-set/attribute-set-type.d.ts +2 -2
  46. package/dist-server/service/attribute-set/attribute-set-type.js +5 -5
  47. package/dist-server/service/attribute-set/attribute-set-type.js.map +1 -1
  48. package/dist-server/service/attribute-set/attribute-set.d.ts +1 -1
  49. package/dist-server/service/attribute-set/attribute-set.js +2 -2
  50. package/dist-server/service/attribute-set/attribute-set.js.map +1 -1
  51. package/dist-server/service/attribute-set/index.d.ts +3 -3
  52. package/dist-server/service/attribute-set/index.js +5 -5
  53. package/dist-server/service/attribute-set/index.js.map +1 -1
  54. package/dist-server/service/common-types/index.d.ts +6 -6
  55. package/dist-server/service/common-types/index.js +6 -6
  56. package/dist-server/service/common-types/index.js.map +1 -1
  57. package/dist-server/service/common-types/list-param.js +2 -2
  58. package/dist-server/service/common-types/list-param.js.map +1 -1
  59. package/dist-server/service/common-types/log.js +2 -2
  60. package/dist-server/service/common-types/log.js.map +1 -1
  61. package/dist-server/service/common-types/scalar-object.d.ts +2 -1
  62. package/dist-server/service/common-types/scalar-object.js +2 -2
  63. package/dist-server/service/common-types/scalar-object.js.map +1 -1
  64. package/dist-server/service/directive-transaction/index.d.ts +1 -1
  65. package/dist-server/service/directive-transaction/index.js +1 -1
  66. package/dist-server/service/directive-transaction/index.js.map +1 -1
  67. package/dist-server/service/directive-transaction/transaction.js +2 -2
  68. package/dist-server/service/directive-transaction/transaction.js.map +1 -1
  69. package/dist-server/service/domain/domain-mutation.d.ts +2 -2
  70. package/dist-server/service/domain/domain-mutation.js +21 -21
  71. package/dist-server/service/domain/domain-mutation.js.map +1 -1
  72. package/dist-server/service/domain/domain-query.js +6 -6
  73. package/dist-server/service/domain/domain-query.js.map +1 -1
  74. package/dist-server/service/domain/domain-types.d.ts +2 -2
  75. package/dist-server/service/domain/domain-types.js +6 -6
  76. package/dist-server/service/domain/domain-types.js.map +1 -1
  77. package/dist-server/service/domain/index.d.ts +3 -3
  78. package/dist-server/service/domain/index.js +5 -5
  79. package/dist-server/service/domain/index.js.map +1 -1
  80. package/dist-server/service/index.d.ts +7 -7
  81. package/dist-server/service/index.js +16 -16
  82. package/dist-server/service/index.js.map +1 -1
  83. package/dist-server/service/subscription-data/data-resolver.d.ts +1 -1
  84. package/dist-server/service/subscription-data/data-resolver.js +4 -4
  85. package/dist-server/service/subscription-data/data-resolver.js.map +1 -1
  86. package/dist-server/service/subscription-data/data-types.d.ts +1 -1
  87. package/dist-server/service/subscription-data/data-types.js +5 -5
  88. package/dist-server/service/subscription-data/data-types.js.map +1 -1
  89. package/dist-server/service/subscription-data/index.d.ts +1 -1
  90. package/dist-server/service/subscription-data/index.js +2 -2
  91. package/dist-server/service/subscription-data/index.js.map +1 -1
  92. package/dist-server/tsconfig.tsbuildinfo +1 -1
  93. package/dist-server/typeorm/encrypt-transform.js +3 -3
  94. package/dist-server/typeorm/encrypt-transform.js.map +1 -1
  95. package/dist-server/utils/get-times-for-period.d.ts +24 -4
  96. package/dist-server/utils/get-times-for-period.js +42 -5
  97. package/dist-server/utils/get-times-for-period.js.map +1 -1
  98. package/dist-server/utils/index.d.ts +8 -8
  99. package/dist-server/utils/index.js +8 -8
  100. package/dist-server/utils/index.js.map +1 -1
  101. package/dist-server/utils/list-param-adjuster.d.ts +1 -1
  102. package/dist-server/utils/list-param-adjuster.js.map +1 -1
  103. package/dist-server/utils/list-params-converter.d.ts +2 -2
  104. package/dist-server/utils/list-params-converter.js +2 -2
  105. package/dist-server/utils/list-params-converter.js.map +1 -1
  106. package/dist-server/utils/list-query-builder.d.ts +1 -1
  107. package/dist-server/utils/list-query-builder.js +7 -7
  108. package/dist-server/utils/list-query-builder.js.map +1 -1
  109. package/dist-server/utils/publish-progress.js +2 -2
  110. package/dist-server/utils/publish-progress.js.map +1 -1
  111. package/package.json +14 -19
  112. package/translations/en.json +1 -0
  113. package/translations/ja.json +1 -0
  114. package/translations/ko.json +2 -1
  115. package/translations/ms.json +1 -0
  116. package/translations/zh.json +1 -0
  117. package/views/public/home.html +0 -1
  118. package/client/hot-client/hot.js +0 -140
  119. package/client/hot-client/index.js +0 -103
  120. package/client/hot-client/log.js +0 -44
  121. package/client/hot-client/socket.js +0 -63
  122. package/client/scene/scene-components.js +0 -3
  123. package/client/scene/scene-player.js +0 -103
  124. package/client/scene/scene-viewer.js +0 -106
  125. package/client/scene/things-scene-components.import +0 -1
  126. package/ormconfig.js +0 -31
  127. package/server/graphql-local-client.ts +0 -59
  128. package/server/index.ts +0 -13
  129. package/server/initializers/database.ts +0 -96
  130. package/server/initializers/naming-strategy.ts +0 -14
  131. package/server/middlewares/domain-middleware.ts +0 -60
  132. package/server/middlewares/index.ts +0 -43
  133. package/server/migrations/1000000000000-SeedDomain.ts +0 -37
  134. package/server/migrations/index.ts +0 -9
  135. package/server/pubsub-log-transport.ts +0 -59
  136. package/server/pubsub.ts +0 -84
  137. package/server/routers/domain-router.ts +0 -13
  138. package/server/routers/global-router.ts +0 -76
  139. package/server/routers/graphql-router.ts +0 -3
  140. package/server/routers/index.ts +0 -3
  141. package/server/schema.ts +0 -163
  142. package/server/server-dev.ts +0 -305
  143. package/server/server.ts +0 -296
  144. package/server/service/attribute-set/attribute-set-item-type.ts +0 -65
  145. package/server/service/attribute-set/attribute-set-mutation.ts +0 -125
  146. package/server/service/attribute-set/attribute-set-query.ts +0 -36
  147. package/server/service/attribute-set/attribute-set-type.ts +0 -46
  148. package/server/service/attribute-set/attribute-set.ts +0 -35
  149. package/server/service/attribute-set/index.ts +0 -6
  150. package/server/service/common-types/index.ts +0 -6
  151. package/server/service/common-types/list-param.ts +0 -61
  152. package/server/service/common-types/log.ts +0 -17
  153. package/server/service/common-types/object-ref.ts +0 -13
  154. package/server/service/common-types/scalar-any.ts +0 -44
  155. package/server/service/common-types/scalar-date.ts +0 -22
  156. package/server/service/common-types/scalar-object.ts +0 -15
  157. package/server/service/directive-transaction/index.ts +0 -1
  158. package/server/service/directive-transaction/transaction.ts +0 -40
  159. package/server/service/domain/domain-mutation.ts +0 -120
  160. package/server/service/domain/domain-query.ts +0 -55
  161. package/server/service/domain/domain-types.ts +0 -69
  162. package/server/service/domain/domain.ts +0 -112
  163. package/server/service/domain/index.ts +0 -6
  164. package/server/service/index.ts +0 -32
  165. package/server/service/subscription-data/data-resolver.ts +0 -37
  166. package/server/service/subscription-data/data-types.ts +0 -16
  167. package/server/service/subscription-data/index.ts +0 -4
  168. package/server/typeorm/encrypt-transform.ts +0 -70
  169. package/server/typeorm/get-data-encryption-key.ts +0 -13
  170. package/server/typeorm/json5-transform.ts +0 -26
  171. package/server/typeorm/round-transform.ts +0 -20
  172. package/server/utils/condition-builder.ts +0 -145
  173. package/server/utils/get-domain.ts +0 -228
  174. package/server/utils/get-query-builder-from-list-params.ts +0 -469
  175. package/server/utils/get-times-for-period.ts +0 -60
  176. package/server/utils/index.ts +0 -8
  177. package/server/utils/list-param-adjuster.ts +0 -21
  178. package/server/utils/list-params-converter.ts +0 -200
  179. package/server/utils/list-query-builder.ts +0 -120
  180. package/server/utils/publish-progress.ts +0 -23
@@ -1,96 +0,0 @@
1
- import { createConnection, DataSource, EntityManager, EntityTarget, Repository } from 'typeorm'
2
-
3
- import { appRootPath, config, logger } from '@things-factory/env'
4
-
5
- const path = require('path')
6
-
7
- var ormconfig
8
- try {
9
- ormconfig = require(path.resolve(appRootPath, 'ormconfig'))
10
- } catch (e) {
11
- ormconfig = require('@things-factory/shell/ormconfig')
12
- }
13
-
14
- const dataSources: { [name: string]: DataSource } = {}
15
-
16
- /**
17
- * Returns the specified DataSource by name.
18
- * @param {string} name - The name of the DataSource.
19
- * @returns {DataSource} - The DataSource with the specified name.
20
- */
21
- export function getDataSource(name?: string): DataSource {
22
- return dataSources[name || 'default']
23
- }
24
-
25
- /**
26
- * Adds a new DataSource with the specified name.
27
- * @param {string} name - The name of the DataSource to add.
28
- * @param {DataSource} dataSource - The DataSource to add.
29
- */
30
- export function addDataSource(name: string, dataSource: DataSource) {
31
- dataSources[name] = dataSource
32
- }
33
-
34
- /**
35
- * Removes a DataSource with the specified name.
36
- * @param {string} name - The name of the DataSource to remove.
37
- */
38
- export function removeDataSource(name: string) {
39
- delete dataSources[name]
40
- }
41
-
42
- /**
43
- * Returns an array of all registered DataSource names.
44
- * @returns {string[]} - An array of DataSource names.
45
- */
46
- export function getDataSourceNames() {
47
- return Object.keys(dataSources)
48
- }
49
-
50
- /**
51
- * Returns a repository for the specified entity.
52
- * @param {EntityTarget<X>} target - The target entity for which to get the repository.
53
- * @returns {Repository<X>} - The repository for the specified entity.
54
- */
55
- export function getRepository<X>(target: EntityTarget<X>, tx?: EntityManager): Repository<X> {
56
- return tx ? tx.getRepository<X>(target) : getDataSource('default').getRepository<X>(target)
57
- }
58
-
59
- /**
60
- * Initializes the database connections and data sources.
61
- */
62
- export const databaseInitializer = async () => {
63
- try {
64
- const readConnectionConfig = config.get('ormconfig')
65
-
66
- const dataSource = await createConnection({
67
- ...ormconfig,
68
- ...readConnectionConfig
69
- })
70
-
71
- addDataSource('default', dataSource)
72
-
73
- logger.info('Default DataSource established')
74
-
75
- if (readConnectionConfig.type == 'sqlite' && readConnectionConfig.synchronize == false) {
76
- await dataSource.query('PRAGMA foreign_keys=OFF')
77
- await dataSource.synchronize()
78
- await dataSource.query('PRAGMA foreign_keys=ON')
79
- }
80
-
81
- if (config.get('ormconfig4Tx')) {
82
- const dataSource4Tx = new DataSource({
83
- ...ormconfig,
84
- ...config.get('ormconfig4Tx')
85
- })
86
- await dataSource4Tx.initialize()
87
- addDataSource('tx', dataSource4Tx)
88
-
89
- logger.info('Transaction DataSource established')
90
- } else {
91
- addDataSource('tx', dataSource)
92
- }
93
- } catch (e) {
94
- logger.error(e)
95
- }
96
- }
@@ -1,14 +0,0 @@
1
- import { NamingStrategyInterface } from 'typeorm'
2
- import { DefaultNamingStrategy } from 'typeorm'
3
- import pluralize from 'pluralize'
4
- import _ from 'lodash'
5
-
6
- export class NamingStrategy extends DefaultNamingStrategy implements NamingStrategyInterface {
7
- tableName(targetName: string, userSpecifiedName: string): string {
8
- return userSpecifiedName || pluralize(_.snakeCase(targetName))
9
- }
10
-
11
- columnName(propertyName: string, customName: string, embeddedPrefixes: string[]): string {
12
- return _.snakeCase(embeddedPrefixes.concat(customName || propertyName).join('_'))
13
- }
14
- }
@@ -1,60 +0,0 @@
1
- import requestIp from 'request-ip'
2
- import { getDomainFromURL } from '../utils'
3
-
4
- export async function domainMiddleware(context: any, next: any) {
5
- var { domain } = context.state
6
- if (!domain) {
7
- /*
8
- * The domainTypes should be checked only when signin and checkin.
9
- * For purposes such as API calls, the target domainTypes may be different from the system domainTypes.
10
- * So, we don't check domainTypes here.
11
- */
12
- domain = await getDomainFromURL(context)
13
- }
14
-
15
- if (domain) {
16
- const ip = requestIp.getClientIp(context.req)
17
- const { whitelist = [], blacklist = [], protectedlist = [], privileges = [] } = domain.iplist || {}
18
-
19
- if (Array.isArray(whitelist) && whitelist.length > 0) {
20
- /* whitelist 우선 */
21
- const whitelisted =
22
- Array.isArray(whitelist) &&
23
- whitelist.some(item => {
24
- return new RegExp(item).test(ip)
25
- })
26
-
27
- if (!whitelisted) {
28
- context.status = 403
29
- return
30
- }
31
- } else {
32
- const blacklisted =
33
- Array.isArray(blacklist) &&
34
- blacklist.some(item => {
35
- return new RegExp(item).test(ip)
36
- })
37
-
38
- if (blacklisted) {
39
- context.status = 403
40
- return
41
- }
42
- }
43
-
44
- if (Array.isArray(protectedlist) && protectedlist.length > 0) {
45
- const safe = protectedlist.some(item => {
46
- return new RegExp(item).test(ip)
47
- })
48
-
49
- context.state.unsafeIP = !safe
50
-
51
- if (!safe) {
52
- context.state.prohibitedPrivileges = privileges
53
- }
54
- }
55
- }
56
-
57
- context.state.domain = domain
58
-
59
- return next()
60
- }
@@ -1,43 +0,0 @@
1
- import { config, logger } from '@things-factory/env'
2
-
3
- import { domainMiddleware } from './domain-middleware'
4
-
5
- export function initMiddlewares(app) {
6
- app.subdomainOffset = config.get('subdomainOffset', 2)
7
-
8
- app.on('error', (err, context) => {
9
- logger.error(err)
10
- })
11
-
12
- /*
13
- * Catching downstream errors
14
- * - recommend to use context.throw, context.assert
15
- */
16
- app.use(async (context, next) => {
17
- try {
18
- await next()
19
- } catch (err) {
20
- context.status = err?.status || 500
21
- context.body = err?.message
22
-
23
- // emitting error to app.on('error', ...)
24
- context.app.emit('error', err, context)
25
- }
26
- })
27
-
28
- /*
29
- * post:graphql 에 대해서는 domain을 확인한다.
30
- * graphql app을 router에 적용하지 못하기 때문임.
31
- */
32
- app.use(async (context, next) => {
33
- const { method, path } = context
34
-
35
- if (method == 'POST' && path.startsWith('/graphql')) {
36
- return await domainMiddleware(context, next)
37
- }
38
-
39
- await next()
40
- })
41
- }
42
-
43
- export * from './domain-middleware'
@@ -1,37 +0,0 @@
1
- import { MigrationInterface, QueryRunner } from 'typeorm'
2
-
3
- import { getRepository } from '../initializers/database'
4
- import { Domain } from '../service/domain/domain'
5
-
6
- const SEED_DOMAINS = [
7
- {
8
- name: 'SYSTEM',
9
- subdomain: 'system',
10
- systemFlag: true
11
- }
12
- ]
13
-
14
- export class SeedDomain1000000000000 implements MigrationInterface {
15
- public async up(queryRunner: QueryRunner): Promise<any> {
16
- const repository = getRepository(Domain)
17
-
18
- return await Promise.all(
19
- SEED_DOMAINS.map(async domain => {
20
- await repository.save({
21
- ...domain
22
- })
23
- })
24
- )
25
- }
26
-
27
- public async down(queryRunner: QueryRunner): Promise<any> {
28
- const repository = getRepository(Domain)
29
-
30
- return await Promise.all(
31
- SEED_DOMAINS.reverse().map(async domain => {
32
- let recode = await repository.findOneBy({ subdomain: domain.subdomain })
33
- await repository.remove(recode)
34
- })
35
- )
36
- }
37
- }
@@ -1,9 +0,0 @@
1
- const glob = require('glob')
2
- const path = require('path')
3
-
4
- export var migrations = []
5
-
6
- glob.sync(path.resolve(__dirname, '.', '**', '*.js')).forEach(function(file) {
7
- if (file.indexOf('index.js') !== -1) return
8
- migrations = migrations.concat(Object.values(require(path.resolve(file))) || [])
9
- })
@@ -1,59 +0,0 @@
1
- import camelCase from 'lodash/camelCase'
2
- import Transport from 'winston-transport'
3
- import { pubsub } from './pubsub'
4
-
5
- /**
6
- * PubSubLogTransport is a custom Winston transport that publishes log messages to a GraphQL Pub/Sub topic.
7
- */
8
- export class PubSubLogTransport extends Transport {
9
- /**
10
- * The source object providing the log messages.
11
- * @type {object}
12
- */
13
- source: object
14
-
15
- /**
16
- * The Pub/Sub topic to which log messages will be published.
17
- * @type {string}
18
- */
19
- topic: string
20
-
21
- /**
22
- * The name of the field resolver for log messages.
23
- * @type {string}
24
- */
25
- resolver: string /* field resolver name */
26
-
27
- /**
28
- * Creates an instance of PubSubLogTransport.
29
- * @param {object} opts - Options for configuring the transport.
30
- * @param {string} opts.topic - The Pub/Sub topic to which log messages will be published.
31
- * @param {object} opts.source - The source object providing the log messages.
32
- * @param {string} opts.resolver - The name of the field resolver for log messages (default: derived from the topic).
33
- */
34
- constructor(opts) {
35
- super(opts)
36
-
37
- this.topic = opts.topic
38
- this.source = opts.source
39
- this.resolver = opts.resolver || camelCase(this.topic)
40
- }
41
-
42
- /**
43
- * Publishes a log message to the configured Pub/Sub topic.
44
- * @param {object} info - The log message information.
45
- * @param {Function} callback - The callback function to be called after publishing the message.
46
- */
47
- log(info, callback) {
48
- setImmediate(() => {
49
- pubsub.publish(this.topic, {
50
- [this.resolver]: {
51
- source: this.source,
52
- ...info
53
- }
54
- })
55
- })
56
-
57
- callback()
58
- }
59
- }
package/server/pubsub.ts DELETED
@@ -1,84 +0,0 @@
1
- /**
2
- * @module pubsub
3
- * @description
4
- * This module provides a Pub/Sub (Publish/Subscribe) mechanism for handling messages and events.
5
- * Developers can use various middleware options such as Redis, Redis Cluster
6
- * to implement Pub/Sub functionality.
7
- */
8
-
9
- import { createPubSub } from 'graphql-yoga'
10
- import { createRedisEventTarget } from '@graphql-yoga/redis-event-target'
11
- import Redis from 'ioredis'
12
-
13
- import { config, logger } from '@things-factory/env'
14
- import { PubSub } from 'type-graphql'
15
-
16
- const { middleware, host, port, nodes, options } = config.get('pubsub', {})
17
-
18
- let pubsub: PubSub
19
-
20
- switch (middleware) {
21
- case 'redis':
22
- const redisOption = {
23
- host,
24
- port,
25
- retryStrategy: times => {
26
- // reconnect after
27
- return Math.min(times * 50, 2000)
28
- },
29
- ...options
30
- }
31
- //@ts-ignore
32
- pubsub = createPubSub({
33
- eventTarget: createRedisEventTarget({
34
- publishClient: new Redis(redisOption),
35
- subscribeClient: new Redis(redisOption)
36
- })
37
- })
38
- break
39
- case 'redisCluster':
40
- const cluster = new Redis.Cluster(nodes, options)
41
- //@ts-ignore
42
- pubsub = createPubSub({
43
- eventTarget: createRedisEventTarget({
44
- publishClient: cluster,
45
- subscribeClient: cluster
46
- })
47
- })
48
- break
49
- default:
50
- pubsub = createPubSub()
51
- break
52
- }
53
-
54
- // kafka pubsub keeps connection and app port with 'ctrl+c' termination.
55
- const exitHandler = async evt => {
56
- //@ts-ignore
57
- if (pubsub.close) {
58
- try {
59
- //@ts-ignore
60
- await pubsub.close()
61
- } catch (err) {
62
- logger.error(err)
63
- }
64
- }
65
- }
66
-
67
- /*
68
- * exit events hint from https://stackoverflow.com/a/14032965/14539284
69
- */
70
-
71
- //do something when app is closing
72
- process.on('exit', exitHandler.bind(null, { name: 'exit', exit: true }))
73
-
74
- //catches ctrl+c event
75
- process.on('SIGINT', exitHandler.bind(null, { name: 'SIGINT', exit: true }))
76
-
77
- // catches "kill pid" (for example: nodemon restart)
78
- process.on('SIGUSR1', exitHandler.bind(null, { name: 'SIGUSR1', exit: true }))
79
- process.on('SIGUSR2', exitHandler.bind(null, { name: 'SIGUSR2', exit: true }))
80
-
81
- //catches uncaught exceptions
82
- // process.on('uncaughtException', exitHandler.bind(null, { name: 'uncaughtException', exit: true }))
83
-
84
- export { pubsub }
@@ -1,13 +0,0 @@
1
- import Router from 'koa-router'
2
-
3
- import { domainMiddleware } from '../middlewares/domain-middleware'
4
-
5
- export const domainPublicRouter = new Router()
6
- domainPublicRouter.use(async (context, next) => {
7
- await next()
8
- }, domainMiddleware)
9
-
10
- export const domainPrivateRouter = new Router()
11
- domainPrivateRouter.use(async (context, next) => {
12
- await next()
13
- }, domainMiddleware)
@@ -1,76 +0,0 @@
1
- import Router from 'koa-router'
2
- import requestIp from 'request-ip'
3
-
4
- import { getLicenseInfo } from '@things-factory/operato-license-checker'
5
- import { domainMiddleware } from '../middlewares/domain-middleware'
6
-
7
- var crawler = require('npm-license-crawler')
8
-
9
- export const globalPublicRouter = new Router()
10
- export const globalPrivateRouter = new Router()
11
-
12
- /* even though global private router, catch domain for information */
13
- globalPrivateRouter.use(domainMiddleware)
14
-
15
- if (process.env.NODE_ENV != 'production') {
16
- globalPublicRouter.get('/graphql', async (context, next) => {
17
- const initialEndpoint = context.request.href
18
-
19
- await context.render('graphql', { initialEndpoint })
20
- })
21
- }
22
-
23
- globalPublicRouter.get('/dependencies', async (context, next) => {
24
- const { dependencyGraph } = require('@things-factory/env')
25
-
26
- await context.render('dependencies-view-graphviz', { model: dependencyGraph })
27
- })
28
-
29
- globalPublicRouter.get('/license-info', (context, next) => {
30
- context.type = 'application/json'
31
- context.body = getLicenseInfo()
32
- })
33
-
34
- globalPublicRouter.get('/opensource-licenses', (context, next) => {
35
- return new Promise(function (resolve, reject) {
36
- var options = {
37
- start: ['.'],
38
- exclude: [],
39
- noColor: true,
40
- production: true,
41
- unknown: false
42
- }
43
-
44
- crawler.dumpLicenses(options, function (error, res) {
45
- if (error) {
46
- console.error('get:/opensource-licenses', error)
47
- reject(error)
48
- } else {
49
- context.type = 'application/json'
50
- context.body = res
51
- resolve(res)
52
- }
53
- })
54
- })
55
- })
56
-
57
- globalPublicRouter.get('/request-info', context => {
58
- context.body = `
59
- Client info. from "requestIp": ${requestIp.getClientIp(context.req)}
60
-
61
- Client info. from "context.ip": ${context.ip}
62
- Client info. from "context.protocol": ${context.protocol}
63
- Client info. from "context.host": ${context.host}
64
-
65
- Client info. from "x-forwarded-for": ${context.headers['x-forwarded-for']}
66
- Client info. from "x-forwarded-proto": ${context.headers['x-forwarded-proto']}
67
- Client info. from "x-forwarded-host": ${context.headers['x-forwarded-host']}
68
- Client info. from "x-forwarded-port": ${context.headers['x-forwarded-port']}
69
- `
70
- })
71
-
72
- /* Paths starting with /public are assumed to use the koa-view renderer. */
73
- globalPublicRouter.get('/public/(.[^.]*)', async (context, next) => {
74
- const { path } = context
75
- await context.render(path.substr(1))
76
- })
@@ -1,3 +0,0 @@
1
- import Router from 'koa-router'
2
-
3
- export const graphqlRouter = new Router()
@@ -1,3 +0,0 @@
1
- export * from './global-router'
2
- export * from './domain-router'
3
- export * from './graphql-router'
package/server/schema.ts DELETED
@@ -1,163 +0,0 @@
1
- import { GraphQLSchema } from 'graphql'
2
- import { GraphQLUpload } from 'graphql-upload/GraphQLUpload.js'
3
- import { buildSchema } from 'type-graphql'
4
- import { typeDefs as scalarTypeDefs, resolvers as scalarResolvers } from 'graphql-scalars'
5
-
6
- import { mergeSchemas } from '@graphql-tools/schema'
7
- import { loader, orderedModuleNames } from '@things-factory/env'
8
- import { deepMerge } from '@things-factory/utils'
9
- import { pubsub } from './pubsub'
10
-
11
- const path = require('path')
12
-
13
- /**
14
- * Generates and returns a GraphQL schema by merging schemas and resolvers from various modules.
15
- * @returns {GraphQLSchema} The merged GraphQL schema.
16
- */
17
- export async function schema() {
18
- const schemas = orderedModuleNames
19
- .map(dep => loader(dep).schema)
20
- .filter(schema => schema)
21
- .reduce(
22
- (sum, schema) => {
23
- const { typeDefs, resolvers, resolverClasses, directives } = sum
24
- let { typeDefs: sTypeDefs = {}, resolvers: sResolvers = {}, resolverClasses: sResolverClasses = [], directives: sDirectives = {} } = schema
25
-
26
- return {
27
- typeDefs: deepMerge(typeDefs, sTypeDefs),
28
- resolvers: deepMerge(resolvers, sResolvers),
29
- resolverClasses: [...resolverClasses, ...(sResolverClasses || [])],
30
- directives: deepMerge(directives, sDirectives)
31
- }
32
- },
33
- {
34
- typeDefs: {},
35
- resolvers: {},
36
- resolverClasses: [],
37
- directives: {}
38
- }
39
- )
40
-
41
- /* for typeDefs */
42
- var typeDefs = schemas.typeDefs
43
- var { queries = [], mutations = [], subscriptions = [], directives = [], types = [] } = typeDefs
44
-
45
- queries = [...queries, ...(typeDefs.Query || [])]
46
- mutations = [...mutations, ...(typeDefs.Mutation || [])]
47
- subscriptions = [...subscriptions, ...(typeDefs.Subscription || [])]
48
- directives = [...directives, ...(typeDefs.Directive || [])]
49
-
50
- delete typeDefs.Query
51
- delete typeDefs.Mutation
52
- delete typeDefs.Subscription
53
- delete typeDefs.Directive
54
-
55
- delete typeDefs.queries
56
- delete typeDefs.mutations
57
- delete typeDefs.subscriptions
58
- delete typeDefs.directives
59
- delete typeDefs.types
60
-
61
- const defs = {
62
- query: queries.length > 0 ? ['type Query {', ...queries, '}'].join('\n') : 'type Query { _ : Boolean }',
63
- mutation: mutations.length > 0 ? ['type Mutation {', ...mutations, '}'].join('\n') : 'type Mutation { _ : Boolean }',
64
- subscription: subscriptions.length > 0 ? ['type Subscription {', ...subscriptions, '}'].join('\n') : 'type Subscription { _ : Boolean }'
65
- }
66
-
67
- typeDefs = [
68
- ...scalarTypeDefs,
69
- `
70
- scalar Upload
71
- `,
72
- defs.query,
73
- defs.mutation,
74
- defs.subscription,
75
- ...directives,
76
- ...types,
77
- ...Object.values(typeDefs)
78
- ].filter(type => !!type)
79
-
80
- /* for resolvers */
81
- var { resolvers } = schemas
82
- var { queries = [], mutations = [], subscriptions = [], directives = [] } = resolvers
83
-
84
- var queryResolvers =
85
- queries.length > 0 &&
86
- queries.reduce((sum, query) => {
87
- return {
88
- ...sum,
89
- ...query
90
- }
91
- }, {})
92
-
93
- var mutationResolvers =
94
- mutations.length > 0 &&
95
- mutations.reduce((sum, mutation) => {
96
- return {
97
- ...sum,
98
- ...mutation
99
- }
100
- }, {})
101
-
102
- var subscriptionResolvers =
103
- subscriptions.length > 0 &&
104
- subscriptions.reduce((sum, subscription) => {
105
- return {
106
- ...sum,
107
- ...subscription
108
- }
109
- }, {})
110
-
111
- var directiveResolvers = directives.reduce((sum, directive) => {
112
- return {
113
- ...sum,
114
- ...directive
115
- }
116
- }, {})
117
-
118
- delete resolvers.queries
119
- delete resolvers.mutations
120
- delete resolvers.subscriptions
121
- delete resolvers.directives
122
-
123
- var Query = resolvers.Query || {}
124
- var Mutation = resolvers.Mutation || {}
125
- var Subscription = resolvers.Subscription || {}
126
- var Directive = resolvers.Directive || {}
127
-
128
- delete resolvers.Query
129
- delete resolvers.Mutation
130
- delete resolvers.Subscription
131
- delete resolvers.Directive
132
-
133
- resolvers = {
134
- Upload: GraphQLUpload as any,
135
- Query: deepMerge(Query, queryResolvers),
136
- Mutation: deepMerge(Mutation, mutationResolvers),
137
- Subscription: deepMerge(Subscription, subscriptionResolvers),
138
- ...scalarResolvers,
139
- ...resolvers
140
- }
141
-
142
- var merged = mergeSchemas({
143
- schemas: [
144
- await buildSchema({
145
- pubSub: pubsub,
146
- resolvers: schemas.resolverClasses,
147
- // automatically create `schema.gql` file with schema definition
148
- // in project's working directory
149
- // or create the file with schema in selected path
150
- emitSchemaFile: process.env.NODE_ENV == 'development'
151
- // emitSchemaFile: path.resolve(__dirname, 'snapshots/schema', 'schema.gql')
152
- })
153
- ],
154
- typeDefs,
155
- resolvers
156
- })
157
-
158
- Object.values(schemas.directives).map((directive: (schema: GraphQLSchema) => {}) => {
159
- merged = directive(merged) as any
160
- })
161
-
162
- return merged
163
- }