@things-factory/integration-base 7.0.0-alpha.0 → 7.0.0-alpha.18

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 (202) hide show
  1. package/dist-server/controllers/index.js +5 -0
  2. package/dist-server/controllers/index.js.map +1 -0
  3. package/dist-server/controllers/scenario-controller.js +87 -0
  4. package/dist-server/controllers/scenario-controller.js.map +1 -0
  5. package/dist-server/engine/connection-manager.js +37 -6
  6. package/dist-server/engine/connection-manager.js.map +1 -1
  7. package/dist-server/engine/connector/echo-back-connector.js +1 -1
  8. package/dist-server/engine/connector/echo-back-connector.js.map +1 -1
  9. package/dist-server/engine/connector/echo-back-server.js +1 -1
  10. package/dist-server/engine/connector/echo-back-server.js.map +1 -1
  11. package/dist-server/engine/connector/graphql-connector.js +6 -6
  12. package/dist-server/engine/connector/graphql-connector.js.map +1 -1
  13. package/dist-server/engine/connector/http-connector.js.map +1 -1
  14. package/dist-server/engine/connector/mqtt-connector.js.map +1 -1
  15. package/dist-server/engine/connector/mssql-connector.js.map +1 -1
  16. package/dist-server/engine/connector/mysql-connector.js +3 -3
  17. package/dist-server/engine/connector/mysql-connector.js.map +1 -1
  18. package/dist-server/engine/connector/operato-connector.js +19 -22
  19. package/dist-server/engine/connector/operato-connector.js.map +1 -1
  20. package/dist-server/engine/connector/oracle-connector.js +113 -17
  21. package/dist-server/engine/connector/oracle-connector.js.map +1 -1
  22. package/dist-server/engine/connector/postgresql-connector.js.map +1 -1
  23. package/dist-server/engine/connector/proxy-connector.js +44 -0
  24. package/dist-server/engine/connector/proxy-connector.js.map +1 -0
  25. package/dist-server/engine/connector/socket-server.js +1 -1
  26. package/dist-server/engine/connector/socket-server.js.map +1 -1
  27. package/dist-server/engine/connector/sqlite-connector.js.map +1 -1
  28. package/dist-server/engine/edge-client.js +38 -0
  29. package/dist-server/engine/edge-client.js.map +1 -0
  30. package/dist-server/engine/index.js +1 -0
  31. package/dist-server/engine/index.js.map +1 -1
  32. package/dist-server/engine/task/book-up-scenario.js.map +1 -1
  33. package/dist-server/engine/task/csv-readline.js.map +1 -1
  34. package/dist-server/engine/task/data-accessor.js.map +1 -1
  35. package/dist-server/engine/task/data-mapper.js.map +1 -1
  36. package/dist-server/engine/task/database-query.js.map +1 -1
  37. package/dist-server/engine/task/echo-receive.js.map +1 -1
  38. package/dist-server/engine/task/echo-send.js.map +1 -1
  39. package/dist-server/engine/task/empty-check.js.map +1 -1
  40. package/dist-server/engine/task/end.js.map +1 -1
  41. package/dist-server/engine/task/floating-point.js.map +1 -1
  42. package/dist-server/engine/task/goto.js.map +1 -1
  43. package/dist-server/engine/task/graphql-mutate.js.map +1 -1
  44. package/dist-server/engine/task/graphql-query.js.map +1 -1
  45. package/dist-server/engine/task/headless-post.js.map +1 -1
  46. package/dist-server/engine/task/headless-scrap.js.map +1 -1
  47. package/dist-server/engine/task/http-get.js.map +1 -1
  48. package/dist-server/engine/task/http-post.js.map +1 -1
  49. package/dist-server/engine/task/jsonata.js +1 -1
  50. package/dist-server/engine/task/jsonata.js.map +1 -1
  51. package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
  52. package/dist-server/engine/task/local-graphql-query.js.map +1 -1
  53. package/dist-server/engine/task/log.js.map +1 -1
  54. package/dist-server/engine/task/mqtt-publish.js.map +1 -1
  55. package/dist-server/engine/task/mqtt-subscribe.js.map +1 -1
  56. package/dist-server/engine/task/oracle-procedure.js +1 -15
  57. package/dist-server/engine/task/oracle-procedure.js.map +1 -1
  58. package/dist-server/engine/task/pick-pending-scenario.js.map +1 -1
  59. package/dist-server/engine/task/publish.js.map +1 -1
  60. package/dist-server/engine/task/random.js.map +1 -1
  61. package/dist-server/engine/task/reset-pending-queue.js.map +1 -1
  62. package/dist-server/engine/task/script.js +1 -0
  63. package/dist-server/engine/task/script.js.map +1 -1
  64. package/dist-server/engine/task/set-domain.js.map +1 -1
  65. package/dist-server/engine/task/sleep.js.map +1 -1
  66. package/dist-server/engine/task/socket-listener.js.map +1 -1
  67. package/dist-server/engine/task/state-read.js.map +1 -1
  68. package/dist-server/engine/task/state-write.js.map +1 -1
  69. package/dist-server/engine/task/stop-scenario.js.map +1 -1
  70. package/dist-server/engine/task/sub-scenario.js.map +1 -1
  71. package/dist-server/engine/task/switch-goto.js.map +1 -1
  72. package/dist-server/engine/task/switch-range-goto.js.map +1 -1
  73. package/dist-server/engine/task/switch-range-scenario.js.map +1 -1
  74. package/dist-server/engine/task/switch-range-set.js.map +1 -1
  75. package/dist-server/engine/task/switch-scenario.js.map +1 -1
  76. package/dist-server/engine/task/switch-set.js.map +1 -1
  77. package/dist-server/engine/task/throw.js.map +1 -1
  78. package/dist-server/engine/task/utils/headless-pool-for-scenario.js +1 -1
  79. package/dist-server/engine/task/utils/headless-pool-for-scenario.js.map +1 -1
  80. package/dist-server/engine/task/variables.js.map +1 -1
  81. package/dist-server/engine/types.js.map +1 -1
  82. package/dist-server/index.js +1 -0
  83. package/dist-server/index.js.map +1 -1
  84. package/dist-server/restful/unstable/run-scenario.js.map +1 -1
  85. package/dist-server/restful/unstable/start-scenario.js +1 -1
  86. package/dist-server/restful/unstable/start-scenario.js.map +1 -1
  87. package/dist-server/restful/unstable/stop-scenario.js +1 -1
  88. package/dist-server/restful/unstable/stop-scenario.js.map +1 -1
  89. package/dist-server/service/connection/connection-mutation.js +4 -8
  90. package/dist-server/service/connection/connection-mutation.js.map +1 -1
  91. package/dist-server/service/connection/connection-query.js +17 -14
  92. package/dist-server/service/connection/connection-query.js.map +1 -1
  93. package/dist-server/service/connection/connection-subscription.js +11 -14
  94. package/dist-server/service/connection/connection-subscription.js.map +1 -1
  95. package/dist-server/service/connection/connection-type.js +66 -13
  96. package/dist-server/service/connection/connection-type.js.map +1 -1
  97. package/dist-server/service/scenario-instance/scenario-instance-mutation.js +4 -71
  98. package/dist-server/service/scenario-instance/scenario-instance-mutation.js.map +1 -1
  99. package/dist-server/service/scenario-instance/scenario-instance-subscription.js +8 -9
  100. package/dist-server/service/scenario-instance/scenario-instance-subscription.js.map +1 -1
  101. package/dist-server/service/scenario-instance/scenario-instance-type.js +18 -5
  102. package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
  103. package/dist-server/service/scenario-queue/scenario-queue-subscription.js +4 -4
  104. package/dist-server/service/scenario-queue/scenario-queue-subscription.js.map +1 -1
  105. package/dist-server/service/step/step-type.js +41 -28
  106. package/dist-server/service/step/step-type.js.map +1 -1
  107. package/dist-server/tsconfig.tsbuildinfo +1 -1
  108. package/helps/integration/concept/script-internal-variables.ja.md +21 -1
  109. package/helps/integration/concept/script-internal-variables.ko.md +17 -0
  110. package/helps/integration/concept/script-internal-variables.md +18 -0
  111. package/helps/integration/concept/script-internal-variables.ms.md +19 -1
  112. package/helps/integration/concept/script-internal-variables.zh.md +18 -0
  113. package/helps/integration/connector/oracle-connector.ja.md +90 -0
  114. package/helps/integration/connector/oracle-connector.ko.md +87 -0
  115. package/helps/integration/connector/oracle-connector.md +46 -25
  116. package/helps/integration/connector/oracle-connector.ms.md +87 -0
  117. package/helps/integration/connector/oracle-connector.zh.md +87 -0
  118. package/helps/integration/task/script.ja.md +1 -1
  119. package/helps/integration/task/script.ko.md +1 -1
  120. package/helps/integration/task/script.md +1 -1
  121. package/helps/integration/task/script.ms.md +1 -1
  122. package/helps/integration/task/script.zh.md +1 -1
  123. package/openapi/unstable/scenario.yaml +100 -100
  124. package/openapi/unstable.yaml +11 -11
  125. package/package.json +8 -11
  126. package/server/controllers/index.ts +1 -0
  127. package/server/controllers/scenario-controller.ts +116 -0
  128. package/server/engine/connection-manager.ts +49 -7
  129. package/server/engine/connector/echo-back-connector.ts +4 -3
  130. package/server/engine/connector/echo-back-server.ts +5 -4
  131. package/server/engine/connector/graphql-connector.ts +12 -13
  132. package/server/engine/connector/http-connector.ts +4 -3
  133. package/server/engine/connector/mqtt-connector.ts +4 -3
  134. package/server/engine/connector/mssql-connector.ts +4 -3
  135. package/server/engine/connector/mysql-connector.ts +8 -6
  136. package/server/engine/connector/operato-connector.ts +27 -35
  137. package/server/engine/connector/oracle-connector.ts +136 -23
  138. package/server/engine/connector/postgresql-connector.ts +4 -3
  139. package/server/engine/connector/proxy-connector.ts +53 -0
  140. package/server/engine/connector/socket-server.ts +5 -4
  141. package/server/engine/connector/sqlite-connector.ts +5 -3
  142. package/server/engine/edge-client.ts +45 -0
  143. package/server/engine/index.ts +1 -0
  144. package/server/engine/task/book-up-scenario.ts +3 -1
  145. package/server/engine/task/csv-readline.ts +4 -1
  146. package/server/engine/task/data-accessor.ts +4 -1
  147. package/server/engine/task/data-mapper.ts +4 -1
  148. package/server/engine/task/database-query.ts +3 -1
  149. package/server/engine/task/echo-receive.ts +4 -1
  150. package/server/engine/task/echo-send.ts +3 -1
  151. package/server/engine/task/empty-check.ts +4 -1
  152. package/server/engine/task/end.ts +4 -1
  153. package/server/engine/task/floating-point.ts +4 -1
  154. package/server/engine/task/goto.ts +4 -1
  155. package/server/engine/task/graphql-mutate.ts +3 -1
  156. package/server/engine/task/graphql-query.ts +3 -1
  157. package/server/engine/task/headless-post.ts +4 -1
  158. package/server/engine/task/headless-scrap.ts +3 -1
  159. package/server/engine/task/http-get.ts +3 -1
  160. package/server/engine/task/http-post.ts +3 -1
  161. package/server/engine/task/jsonata.ts +5 -2
  162. package/server/engine/task/local-graphql-mutate.ts +5 -1
  163. package/server/engine/task/local-graphql-query.ts +3 -1
  164. package/server/engine/task/log.ts +3 -1
  165. package/server/engine/task/mqtt-publish.ts +3 -1
  166. package/server/engine/task/mqtt-subscribe.ts +3 -1
  167. package/server/engine/task/oracle-procedure.ts +4 -17
  168. package/server/engine/task/pick-pending-scenario.ts +3 -1
  169. package/server/engine/task/publish.ts +3 -1
  170. package/server/engine/task/random.ts +4 -1
  171. package/server/engine/task/reset-pending-queue.ts +3 -1
  172. package/server/engine/task/script.ts +5 -1
  173. package/server/engine/task/set-domain.ts +4 -1
  174. package/server/engine/task/sleep.ts +3 -1
  175. package/server/engine/task/socket-listener.ts +3 -1
  176. package/server/engine/task/state-read.ts +3 -1
  177. package/server/engine/task/state-write.ts +3 -1
  178. package/server/engine/task/stop-scenario.ts +3 -1
  179. package/server/engine/task/sub-scenario.ts +3 -1
  180. package/server/engine/task/switch-goto.ts +4 -1
  181. package/server/engine/task/switch-range-goto.ts +3 -1
  182. package/server/engine/task/switch-range-scenario.ts +3 -1
  183. package/server/engine/task/switch-range-set.ts +3 -1
  184. package/server/engine/task/switch-scenario.ts +3 -1
  185. package/server/engine/task/switch-set.ts +3 -1
  186. package/server/engine/task/throw.ts +3 -1
  187. package/server/engine/task/utils/headless-pool-for-scenario.ts +1 -1
  188. package/server/engine/task/variables.ts +3 -1
  189. package/server/engine/types.ts +80 -4
  190. package/server/index.ts +1 -0
  191. package/server/restful/unstable/run-scenario.ts +0 -1
  192. package/server/restful/unstable/start-scenario.ts +1 -1
  193. package/server/restful/unstable/stop-scenario.ts +1 -1
  194. package/server/service/connection/connection-mutation.ts +9 -29
  195. package/server/service/connection/connection-query.ts +13 -12
  196. package/server/service/connection/connection-subscription.ts +18 -24
  197. package/server/service/connection/connection-type.ts +100 -21
  198. package/server/service/scenario-instance/scenario-instance-mutation.ts +10 -121
  199. package/server/service/scenario-instance/scenario-instance-subscription.ts +16 -23
  200. package/server/service/scenario-instance/scenario-instance-type.ts +24 -13
  201. package/server/service/scenario-queue/scenario-queue-subscription.ts +7 -7
  202. package/server/service/step/step-type.ts +78 -22
@@ -1,6 +1,8 @@
1
1
  import { sleep } from '@things-factory/utils'
2
2
  import { TaskRegistry } from '../task-registry'
3
3
  import { ConnectionManager } from '../connection-manager'
4
+ import { InputStep } from '../../service/step/step-type'
5
+ import { Context } from '../types'
4
6
 
5
7
  function convertDataFormat(data, format) {
6
8
  try {
@@ -16,7 +18,7 @@ function convertDataFormat(data, format) {
16
18
  return data
17
19
  }
18
20
 
19
- async function SocketListener(step, context) {
21
+ async function SocketListener(step: InputStep, context: Context) {
20
22
  //get connection data
21
23
  const {
22
24
  connection: connectionName,
@@ -1,7 +1,9 @@
1
1
  import gql from 'graphql-tag'
2
2
  import { TaskRegistry } from '../task-registry'
3
+ import { InputStep } from '../../service/step/step-type'
4
+ import { Context } from '../types'
3
5
 
4
- async function StateRead(step, { logger, publish, data, domain, user, client }) {
6
+ async function StateRead(step: InputStep, { logger, publish, data, domain, user, client }: Context) {
5
7
  var {
6
8
  params: { name }
7
9
  } = step
@@ -1,8 +1,10 @@
1
1
  import gql from 'graphql-tag'
2
2
  import { access } from '@things-factory/utils'
3
3
  import { TaskRegistry } from '../task-registry'
4
+ import { InputStep } from '../../service/step/step-type'
5
+ import { Context } from '../types'
4
6
 
5
- async function StateWrite(step, { logger, publish, data, domain, user, client }) {
7
+ async function StateWrite(step: InputStep, { logger, publish, data, domain, user, client }: Context) {
6
8
  var {
7
9
  params: { name, accessor }
8
10
  } = step
@@ -3,8 +3,10 @@ import { getRepository } from '@things-factory/shell'
3
3
  import { Scenario } from '../../service/scenario/scenario'
4
4
  import { ScenarioEngine } from '../../engine'
5
5
  import { TaskRegistry } from '../task-registry'
6
+ import { InputStep } from '../../service/step/step-type'
7
+ import { Context } from '../types'
6
8
 
7
- async function StopScenario(step, context) {
9
+ async function StopScenario(step: InputStep, context: Context) {
8
10
  var { logger, domain } = context
9
11
  var {
10
12
  params: { scenario }
@@ -3,8 +3,10 @@ import { access, deepClone } from '@things-factory/utils'
3
3
 
4
4
  import { Scenario } from '../../service/scenario/scenario'
5
5
  import { TaskRegistry } from '../task-registry'
6
+ import { InputStep } from '../../service/step/step-type'
7
+ import { Context } from '../types'
6
8
 
7
- async function SubScenario(step, context) {
9
+ async function SubScenario(step: InputStep, context: Context) {
8
10
  var { logger, load, data } = context
9
11
  var {
10
12
  params: { scenario, variables }
@@ -2,7 +2,10 @@ import { access } from '@things-factory/utils'
2
2
 
3
3
  import { TaskRegistry } from '../task-registry'
4
4
 
5
- async function SwitchGoTo(step, { logger, data }) {
5
+ import { InputStep } from '../../service/step/step-type'
6
+ import { Context } from '../types'
7
+
8
+ async function SwitchGoTo(step: InputStep, { logger, data }: Context) {
6
9
  var {
7
10
  params: { accessor, cases }
8
11
  } = step
@@ -1,8 +1,10 @@
1
1
  import { access } from '@things-factory/utils'
2
2
 
3
3
  import { TaskRegistry } from '../task-registry'
4
+ import { InputStep } from '../../service/step/step-type'
5
+ import { Context } from '../types'
4
6
 
5
- async function SwitchRangeGoTo(step, { logger, data }) {
7
+ async function SwitchRangeGoTo(step: InputStep, { logger, data }: Context) {
6
8
  var {
7
9
  params: { accessor, cases }
8
10
  } = step
@@ -3,8 +3,10 @@ import { access, deepClone } from '@things-factory/utils'
3
3
 
4
4
  import { Scenario } from '../../service/scenario/scenario'
5
5
  import { TaskRegistry } from '../task-registry'
6
+ import { InputStep } from '../../service/step/step-type'
7
+ import { Context } from '../types'
6
8
 
7
- async function SwitchRangeScenario(step, context) {
9
+ async function SwitchRangeScenario(step: InputStep, context: Context) {
8
10
  var { logger, data, load } = context
9
11
  var {
10
12
  params: { accessor, cases, variables }
@@ -1,7 +1,9 @@
1
1
  import { access } from '@things-factory/utils'
2
2
  import { TaskRegistry } from '../task-registry'
3
+ import { InputStep } from '../../service/step/step-type'
4
+ import { Context } from '../types'
3
5
 
4
- async function SwitchRangeSet(step, { logger, data }) {
6
+ async function SwitchRangeSet(step: InputStep, { logger, data }: Context) {
5
7
  var {
6
8
  params: { accessor, cases }
7
9
  } = step
@@ -3,8 +3,10 @@ import { access, deepClone } from '@things-factory/utils'
3
3
 
4
4
  import { Scenario } from '../../service/scenario/scenario'
5
5
  import { TaskRegistry } from '../task-registry'
6
+ import { InputStep } from '../../service/step/step-type'
7
+ import { Context } from '../types'
6
8
 
7
- async function SwitchScenario(step, context) {
9
+ async function SwitchScenario(step: InputStep, context: Context) {
8
10
  var { logger, data, load } = context
9
11
  var {
10
12
  params: { accessor, cases, variables }
@@ -1,7 +1,9 @@
1
1
  import { access } from '@things-factory/utils'
2
2
  import { TaskRegistry } from '../task-registry'
3
+ import { InputStep } from '../../service/step/step-type'
4
+ import { Context } from '../types'
3
5
 
4
- async function SwitchSet(step, { logger, data }) {
6
+ async function SwitchSet(step: InputStep, { logger, data }: Context) {
5
7
  var {
6
8
  params: { accessor, cases }
7
9
  } = step
@@ -1,6 +1,8 @@
1
1
  import { TaskRegistry } from '../task-registry'
2
+ import { InputStep } from '../../service/step/step-type'
3
+ import { Context } from '../types'
2
4
 
3
- async function Throw(step, { logger }) {
5
+ async function Throw(step: InputStep, { logger }: Context) {
4
6
  var {
5
7
  name,
6
8
  params: { message }
@@ -55,7 +55,7 @@ async function initializeChromium() {
55
55
 
56
56
  var launchSetting = {
57
57
  args: ['--mute-audio', '--no-sandbox'],
58
- headless: 'new'
58
+ headless: 'shell'
59
59
  }
60
60
 
61
61
  if (CHROMIUM_PATH) {
@@ -1,6 +1,8 @@
1
1
  import { TaskRegistry } from '../task-registry'
2
+ import { InputStep } from '../../service/step/step-type'
3
+ import { Context } from '../types'
2
4
 
3
- async function Variables(step, { variables }) {
5
+ async function Variables(step: InputStep, { variables }: Context) {
4
6
  return {
5
7
  data: variables instanceof Array ? [...variables] : typeof variables == 'object' ? { ...variables } : variables
6
8
  }
@@ -1,4 +1,6 @@
1
1
  import { Connection, PropertySpec, ScenarioInstanceStatus, Step } from '../service'
2
+ import { Domain } from '@things-factory/shell'
3
+ import { User } from '@things-factory/auth-base'
2
4
 
3
5
  export interface Connector {
4
6
  ready(connections: Connection[]): Promise<any>
@@ -11,21 +13,95 @@ export interface Connector {
11
13
  }
12
14
 
13
15
  export type Context = {
14
- domain: Object
15
- user: Object
16
+ /**
17
+ * Represents the domain context.
18
+ */
19
+ domain: Domain
20
+
21
+ /**
22
+ * User information.
23
+ */
24
+ user: User
25
+
26
+ /**
27
+ * Language code, for example 'en', 'ko'.
28
+ */
16
29
  lng: string
30
+
31
+ /**
32
+ * Flag to indicate if the IP is unsafe, can be undefined.
33
+ */
17
34
  unsafeIP: boolean | undefined
35
+
36
+ /**
37
+ * List of prohibited privileges, can be undefined.
38
+ */
18
39
  prohibitedPrivileges: { category: string; privilege: string }[] | undefined
40
+
41
+ /**
42
+ * Logger for logging purposes.
43
+ */
19
44
  logger: any
45
+
46
+ /**
47
+ * Function to publish events or messages.
48
+ */
20
49
  publish: Function
50
+
51
+ /**
52
+ * Function to load resources or data.
53
+ */
21
54
  load: Function
55
+
56
+ /**
57
+ * Current status of the scenario instance.
58
+ */
22
59
  state: ScenarioInstanceStatus
23
- data: Object
60
+
61
+ /**
62
+ * General data storage object.
63
+ */
64
+ data: any
65
+
66
+ /**
67
+ * Variables related to the context.
68
+ */
24
69
  variables: Object
25
- client: Object /* graphql local client */
70
+
71
+ /**
72
+ * Local GraphQL client object.
73
+ */
74
+ client: any /* graphql local client */
75
+
76
+ /**
77
+ * Root object, can be used for various purposes.
78
+ */
26
79
  root: Object
80
+
81
+ /**
82
+ * Array of function closures.
83
+ */
27
84
  closures: Function[]
85
+
86
+ /**
87
+ * Function to check the state.
88
+ */
28
89
  checkState: Function
90
+
91
+ /**
92
+ * MQTT subscriber context object.
93
+ */
94
+ __mqtt_subscriber?: any
95
+
96
+ /**
97
+ * socket listener context object.
98
+ */
99
+ __socket_listener?: any
100
+
101
+ /**
102
+ * csv readline context object.
103
+ */
104
+ __csv_resources?: any
29
105
  }
30
106
 
31
107
  export type TaskHandler = (
package/server/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './migrations'
2
2
  export * from './engine'
3
+ export * from './controllers'
3
4
  export * from './service'
4
5
 
5
6
  import './routes'
@@ -1,7 +1,6 @@
1
1
  import gql from 'graphql-tag'
2
2
 
3
3
  import { restfulApiRouter as router } from '@things-factory/api'
4
- import { ScenarioInstanceStatus } from '../../service/scenario-instance/scenario-instance-type'
5
4
 
6
5
  const debug = require('debug')('things-factory:integration-base:restful:unstable:run-scenario')
7
6
 
@@ -12,7 +12,7 @@ router.post('/unstable/start-scenario/:scenarioName', async (context, next) => {
12
12
 
13
13
  context.body = await client.mutate({
14
14
  mutation: gql`
15
- mutation($instanceName: String, $scenarioName: String!, $variables: Object) {
15
+ mutation ($instanceName: String, $scenarioName: String!, $variables: Object) {
16
16
  startScenario(instanceName: $instanceName, scenarioName: $scenarioName, variables: $variables) {
17
17
  instanceName
18
18
  scenarioName
@@ -11,7 +11,7 @@ router.post('/unstable/stop-scenario/:instanceName', async (context, next) => {
11
11
 
12
12
  context.body = await client.mutate({
13
13
  mutation: gql`
14
- mutation($instanceName: String!) {
14
+ mutation ($instanceName: String!) {
15
15
  stopScenario(instanceName: $instanceName) {
16
16
  instanceName
17
17
  scenarioName
@@ -10,10 +10,7 @@ import { Connection, ConnectionPatch, ConnectionStatus, NewConnection } from './
10
10
  export class ConnectionMutation {
11
11
  @Directive('@transaction')
12
12
  @Mutation(returns => Connection, { description: 'To create new connection' })
13
- async createConnection(
14
- @Arg('connection') connection: NewConnection,
15
- @Ctx() context: ResolverContext
16
- ): Promise<Connection> {
13
+ async createConnection(@Arg('connection') connection: NewConnection, @Ctx() context: ResolverContext): Promise<Connection> {
17
14
  const { domain, user, tx } = context.state
18
15
 
19
16
  return await tx.getRepository(Connection).save({
@@ -26,11 +23,7 @@ export class ConnectionMutation {
26
23
 
27
24
  @Directive('@transaction')
28
25
  @Mutation(returns => Connection, { description: 'To modify connection information' })
29
- async updateConnection(
30
- @Arg('name') name: string,
31
- @Arg('patch') patch: ConnectionPatch,
32
- @Ctx() context: ResolverContext
33
- ): Promise<Connection> {
26
+ async updateConnection(@Arg('name') name: string, @Arg('patch') patch: ConnectionPatch, @Ctx() context: ResolverContext): Promise<Connection> {
34
27
  const { domain, user, tx } = context.state
35
28
 
36
29
  const repository = tx.getRepository(Connection)
@@ -47,10 +40,7 @@ export class ConnectionMutation {
47
40
 
48
41
  @Directive('@transaction')
49
42
  @Mutation(returns => [Connection], { description: "To modify multiple connections' information" })
50
- async updateMultipleConnection(
51
- @Arg('patches', type => [ConnectionPatch]) patches: ConnectionPatch[],
52
- @Ctx() context: ResolverContext
53
- ): Promise<Connection[]> {
43
+ async updateMultipleConnection(@Arg('patches', type => [ConnectionPatch]) patches: ConnectionPatch[], @Ctx() context: ResolverContext): Promise<Connection[]> {
54
44
  const { domain, user, tx } = context.state
55
45
 
56
46
  let results = []
@@ -102,10 +92,7 @@ export class ConnectionMutation {
102
92
 
103
93
  @Directive('@transaction')
104
94
  @Mutation(returns => Boolean, { description: 'To delete multiple connections' })
105
- async deleteConnections(
106
- @Arg('names', type => [String]) names: string[],
107
- @Ctx() context: ResolverContext
108
- ): Promise<boolean> {
95
+ async deleteConnections(@Arg('names', type => [String]) names: string[], @Ctx() context: ResolverContext): Promise<boolean> {
109
96
  const { domain, tx } = context.state
110
97
 
111
98
  await tx.getRepository(Connection).delete({
@@ -122,7 +109,7 @@ export class ConnectionMutation {
122
109
  var repository = getRepository(Connection)
123
110
  var connection = await repository.findOne({
124
111
  where: { domain: { id: domain.id }, name },
125
- relations: ['domain']
112
+ relations: ['domain', 'edge']
126
113
  })
127
114
 
128
115
  await connection.connect()
@@ -130,9 +117,7 @@ export class ConnectionMutation {
130
117
 
131
118
  return {
132
119
  ...connection,
133
- state: ConnectionManager.getConnectionInstance(connection)
134
- ? ConnectionStatus.CONNECTED
135
- : ConnectionStatus.DISCONNECTED
120
+ state: ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED
136
121
  } as Connection
137
122
  }
138
123
 
@@ -143,7 +128,7 @@ export class ConnectionMutation {
143
128
  var repository = getRepository(Connection)
144
129
  var connection = await repository.findOne({
145
130
  where: { domain: { id: domain.id }, name },
146
- relations: ['domain']
131
+ relations: ['domain', 'edge']
147
132
  })
148
133
 
149
134
  await connection.disconnect()
@@ -151,19 +136,14 @@ export class ConnectionMutation {
151
136
 
152
137
  return {
153
138
  ...connection,
154
- state: ConnectionManager.getConnectionInstance(connection)
155
- ? ConnectionStatus.CONNECTED
156
- : ConnectionStatus.DISCONNECTED
139
+ state: ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED
157
140
  }
158
141
  }
159
142
 
160
143
  @Directive('@transaction')
161
144
  // @Directive('@privilege(category: "connection", privilege: "mutation", domainOwnerGranted: true)')
162
145
  @Mutation(returns => Boolean, { description: 'To import multiple connections' })
163
- async importConnections(
164
- @Arg('connections', type => [ConnectionPatch]) connections: Connection[],
165
- @Ctx() context: ResolverContext
166
- ): Promise<boolean> {
146
+ async importConnections(@Arg('connections', type => [ConnectionPatch]) connections: Connection[], @Ctx() context: ResolverContext): Promise<boolean> {
167
147
  const { tx, domain, user } = context.state
168
148
 
169
149
  const repository = tx.getRepository(Connection)
@@ -1,6 +1,6 @@
1
1
  import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'
2
2
 
3
- import { User } from '@things-factory/auth-base'
3
+ import { Appliance, User } from '@things-factory/auth-base'
4
4
  import { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'
5
5
 
6
6
  import { ConnectionManager } from '../../engine/connection-manager'
@@ -19,9 +19,7 @@ export class ConnectionQuery {
19
19
 
20
20
  return {
21
21
  ...connection,
22
- state: ConnectionManager.getConnectionInstance(connection)
23
- ? ConnectionStatus.CONNECTED
24
- : ConnectionStatus.DISCONNECTED
22
+ state: ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED
25
23
  } as Connection
26
24
  }
27
25
 
@@ -40,9 +38,7 @@ export class ConnectionQuery {
40
38
  const [items, total] = await queryBuilder.leftJoinAndSelect('connection.domain', 'domain').getManyAndCount()
41
39
 
42
40
  items.forEach(connection => {
43
- connection['state'] = ConnectionManager.getConnectionInstance(connection)
44
- ? ConnectionStatus.CONNECTED
45
- : ConnectionStatus.DISCONNECTED
41
+ connection['state'] = ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED
46
42
  })
47
43
 
48
44
  return { items, total }
@@ -52,26 +48,31 @@ export class ConnectionQuery {
52
48
  fetchConnectionState(@Arg('name') name: string, @Ctx() context: ResolverContext): ConnectionState {
53
49
  const { domain } = context.state
54
50
 
55
- var connection = ConnectionManager.getConnectionInstanceByName(domain, name)
51
+ const connection = ConnectionManager.getConnectionInstanceEntityByName(domain, name)
56
52
 
57
53
  return {
58
- name,
54
+ ...connection,
59
55
  state: connection ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED
60
56
  }
61
57
  }
62
58
 
59
+ @FieldResolver(type => Domain)
60
+ async edge(@Root() connection: Connection) {
61
+ return connection.edgeId && (await getRepository(Appliance).findOneBy({ id: connection.edgeId }))
62
+ }
63
+
63
64
  @FieldResolver(type => Domain)
64
65
  async domain(@Root() connection: Connection) {
65
- return connection.domain || (await getRepository(Domain).findOneBy({ id: connection.domainId }))
66
+ return connection.domain || (connection.domainId && (await getRepository(Domain).findOneBy({ id: connection.domainId })))
66
67
  }
67
68
 
68
69
  @FieldResolver(type => User)
69
70
  async updater(@Root() connection: Connection): Promise<User> {
70
- return await getRepository(User).findOneBy({ id: connection.updaterId })
71
+ return connection.updaterId && (await getRepository(User).findOneBy({ id: connection.updaterId }))
71
72
  }
72
73
 
73
74
  @FieldResolver(type => User)
74
75
  async creator(@Root() connection: Connection): Promise<User> {
75
- return await getRepository(User).findOneBy({ id: connection.creatorId })
76
+ return connection.creatorId && (await getRepository(User).findOneBy({ id: connection.creatorId }))
76
77
  }
77
78
  }
@@ -1,4 +1,4 @@
1
- import { withFilter } from 'graphql-subscriptions'
1
+ import { filter, pipe } from 'graphql-yoga'
2
2
  import { Arg, Resolver, Root, Subscription } from 'type-graphql'
3
3
 
4
4
  import { getRepository, Log, pubsub } from '@things-factory/shell'
@@ -11,7 +11,7 @@ const debug = require('debug')('things-factory:integration:connection-subscripti
11
11
  @Resolver(Connection)
12
12
  export class ConnectionSubscription {
13
13
  @Subscription({
14
- subscribe: (_, args, context, info) => {
14
+ subscribe: ({ args, context, info }) => {
15
15
  const { domain, user } = context.state
16
16
  const { name } = args
17
17
  const subdomain = domain?.subdomain
@@ -26,49 +26,43 @@ export class ConnectionSubscription {
26
26
  }
27
27
 
28
28
  process.nextTick(async () => {
29
- var where = { domain }
29
+ var where = { domain: { id: domain.id } }
30
30
  if (name) {
31
31
  where['name'] = name
32
32
  }
33
33
 
34
34
  var connections = await getRepository(Connection).find({
35
35
  where,
36
- relations: ['domain']
36
+ relations: ['domain', 'edge']
37
37
  })
38
38
 
39
39
  connections.forEach(connection => {
40
40
  pubsub.publish('connection-state', {
41
41
  connectionState: {
42
42
  ...connection,
43
- state: ConnectionManager.getConnectionInstance(connection)
44
- ? ConnectionStatus.CONNECTED
45
- : ConnectionStatus.DISCONNECTED,
43
+ state: ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED,
46
44
  timestamp: new Date()
47
45
  }
48
46
  })
49
47
  })
50
48
  })
51
49
 
52
- return withFilter(
53
- () => pubsub.asyncIterator('connection-state'),
54
- (payload, variables, context, info) => {
50
+ return pipe(
51
+ pubsub.subscribe('connection-state'),
52
+ filter(async (payload: { connectionState: ConnectionState }) => {
55
53
  const { domain: pdomain, name: pname } = payload.connectionState
56
- const { name } = variables
57
54
 
58
55
  return (!name || name === pname) && subdomain === pdomain?.subdomain
59
- }
60
- )(_, args, context, info)
56
+ })
57
+ )
61
58
  }
62
59
  })
63
- connectionState(
64
- @Root() payload: { connectionState: ConnectionState },
65
- @Arg('name', { nullable: true }) name: string
66
- ): ConnectionState {
60
+ connectionState(@Root() payload: { connectionState: ConnectionState }, @Arg('name', { nullable: true }) name: string): ConnectionState {
67
61
  return payload.connectionState
68
62
  }
69
63
 
70
64
  @Subscription({
71
- subscribe: (_, args, context, info) => {
65
+ subscribe: ({ args, context, info }) => {
72
66
  const { domain, user } = context.state
73
67
  const { level } = args
74
68
 
@@ -84,11 +78,11 @@ export class ConnectionSubscription {
84
78
  throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)
85
79
  }
86
80
 
87
- return withFilter(
88
- () => pubsub.asyncIterator('connection-log'),
89
- (payload, variables, context, info) => {
81
+ return pipe(
82
+ pubsub.subscribe('connection-log'),
83
+ filter(async (payload: { log: Log }) => {
90
84
  // TODO support domain filtering
91
- const { /* source, */ level: plevel } = payload.connectionLog
85
+ const { /* source, */ level: plevel } = payload.log
92
86
  // const { domain: pdomain } = source
93
87
 
94
88
  // if (subdomain !== pdomain?.subdomain) {
@@ -100,8 +94,8 @@ export class ConnectionSubscription {
100
94
  }
101
95
 
102
96
  return true
103
- }
104
- )(_, args, context, info)
97
+ })
98
+ )
105
99
  }
106
100
  })
107
101
  connectionLog(@Root() payload: { log: Log }, @Arg('level', { nullable: true }) level: string): Log {