@things-factory/integration-base 8.0.5 → 9.0.0-beta.12

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 (160) hide show
  1. package/dist-server/engine/connector/headless-connector.d.ts +23 -0
  2. package/dist-server/engine/connector/headless-connector.js +357 -0
  3. package/dist-server/engine/connector/headless-connector.js.map +1 -0
  4. package/dist-server/engine/connector/http-connector.js +1 -1
  5. package/dist-server/engine/connector/http-connector.js.map +1 -1
  6. package/dist-server/engine/connector/index.d.ts +1 -0
  7. package/dist-server/engine/connector/index.js +1 -0
  8. package/dist-server/engine/connector/index.js.map +1 -1
  9. package/dist-server/engine/index.d.ts +1 -0
  10. package/dist-server/engine/index.js +1 -0
  11. package/dist-server/engine/index.js.map +1 -1
  12. package/dist-server/engine/resource-pool/headless-pool.d.ts +1 -0
  13. package/dist-server/engine/resource-pool/headless-pool.js +62 -0
  14. package/dist-server/engine/resource-pool/headless-pool.js.map +1 -0
  15. package/dist-server/engine/resource-pool/index.d.ts +1 -0
  16. package/dist-server/engine/resource-pool/index.js +5 -0
  17. package/dist-server/engine/resource-pool/index.js.map +1 -0
  18. package/dist-server/engine/task/headless-post.js +19 -33
  19. package/dist-server/engine/task/headless-post.js.map +1 -1
  20. package/dist-server/engine/task/headless-scrap.js +20 -13
  21. package/dist-server/engine/task/headless-scrap.js.map +1 -1
  22. package/dist-server/tsconfig.tsbuildinfo +1 -1
  23. package/package.json +12 -11
  24. package/translations/en.json +12 -4
  25. package/translations/ja.json +12 -4
  26. package/translations/ko.json +12 -4
  27. package/translations/ms.json +12 -4
  28. package/translations/zh.json +12 -4
  29. package/server/controllers/index.ts +0 -2
  30. package/server/controllers/publish-data.ts +0 -29
  31. package/server/controllers/scenario-controller.ts +0 -154
  32. package/server/engine/analyzer/analyze-integration.ts +0 -115
  33. package/server/engine/connection-manager.ts +0 -239
  34. package/server/engine/connector/echo-back-connector.ts +0 -51
  35. package/server/engine/connector/echo-back-server.ts +0 -72
  36. package/server/engine/connector/graphql-connector.ts +0 -126
  37. package/server/engine/connector/http-connector.ts +0 -65
  38. package/server/engine/connector/index.ts +0 -12
  39. package/server/engine/connector/mqtt-connector.ts +0 -78
  40. package/server/engine/connector/mssql-connector.ts +0 -152
  41. package/server/engine/connector/mysql-connector.ts +0 -94
  42. package/server/engine/connector/operato-connector.ts +0 -264
  43. package/server/engine/connector/oracle-connector.ts +0 -218
  44. package/server/engine/connector/postgresql-connector.ts +0 -152
  45. package/server/engine/connector/proxy-connector.ts +0 -53
  46. package/server/engine/connector/socket-server.ts +0 -86
  47. package/server/engine/connector/sqlite-connector.ts +0 -69
  48. package/server/engine/edge-client.ts +0 -45
  49. package/server/engine/index.ts +0 -10
  50. package/server/engine/pending-queue.ts +0 -97
  51. package/server/engine/scenario-engine.ts +0 -106
  52. package/server/engine/task/book-up-scenario.ts +0 -73
  53. package/server/engine/task/csv-readline.ts +0 -127
  54. package/server/engine/task/data-accessor.ts +0 -36
  55. package/server/engine/task/data-mapper.ts +0 -47
  56. package/server/engine/task/database-query.ts +0 -56
  57. package/server/engine/task/echo-receive.ts +0 -21
  58. package/server/engine/task/echo-send.ts +0 -32
  59. package/server/engine/task/empty-check.ts +0 -38
  60. package/server/engine/task/end.ts +0 -18
  61. package/server/engine/task/floating-point.ts +0 -71
  62. package/server/engine/task/goto.ts +0 -27
  63. package/server/engine/task/graphql-mutate.ts +0 -79
  64. package/server/engine/task/graphql-query.ts +0 -78
  65. package/server/engine/task/headless-post.ts +0 -147
  66. package/server/engine/task/headless-scrap.ts +0 -80
  67. package/server/engine/task/http-get.ts +0 -117
  68. package/server/engine/task/http-post.ts +0 -148
  69. package/server/engine/task/index.ts +0 -45
  70. package/server/engine/task/jsonata.ts +0 -45
  71. package/server/engine/task/local-graphql-mutate.ts +0 -100
  72. package/server/engine/task/local-graphql-query.ts +0 -100
  73. package/server/engine/task/log.ts +0 -78
  74. package/server/engine/task/mqtt-publish.ts +0 -45
  75. package/server/engine/task/mqtt-subscribe.ts +0 -139
  76. package/server/engine/task/mssql-procedure.ts +0 -128
  77. package/server/engine/task/oracle-procedure.ts +0 -124
  78. package/server/engine/task/pick-pending-scenario.ts +0 -80
  79. package/server/engine/task/publish.ts +0 -40
  80. package/server/engine/task/random.ts +0 -53
  81. package/server/engine/task/reset-pending-queue.ts +0 -17
  82. package/server/engine/task/script.ts +0 -63
  83. package/server/engine/task/set-domain.ts +0 -37
  84. package/server/engine/task/sleep.ts +0 -34
  85. package/server/engine/task/socket-listener.ts +0 -96
  86. package/server/engine/task/state-group-read.ts +0 -69
  87. package/server/engine/task/state-read.ts +0 -56
  88. package/server/engine/task/state-write.ts +0 -65
  89. package/server/engine/task/stop-scenario.ts +0 -44
  90. package/server/engine/task/sub-scenario.ts +0 -57
  91. package/server/engine/task/switch-goto.ts +0 -43
  92. package/server/engine/task/switch-range-goto.ts +0 -53
  93. package/server/engine/task/switch-range-scenario.ts +0 -79
  94. package/server/engine/task/switch-range-set.ts +0 -48
  95. package/server/engine/task/switch-scenario.ts +0 -67
  96. package/server/engine/task/switch-set.ts +0 -37
  97. package/server/engine/task/throw.ts +0 -27
  98. package/server/engine/task/utils/headless-pool-for-scenario.ts +0 -71
  99. package/server/engine/task/utils/substitute.ts +0 -44
  100. package/server/engine/task/variables.ts +0 -17
  101. package/server/engine/task-registry.ts +0 -23
  102. package/server/engine/types.ts +0 -114
  103. package/server/index.ts +0 -20
  104. package/server/migrations/index.ts +0 -9
  105. package/server/restful/index.ts +0 -1
  106. package/server/restful/unstable/index.ts +0 -7
  107. package/server/restful/unstable/run-scenario.ts +0 -51
  108. package/server/restful/unstable/scenario-instance.ts +0 -52
  109. package/server/restful/unstable/scenario-instances.ts +0 -80
  110. package/server/restful/unstable/scenario.ts +0 -41
  111. package/server/restful/unstable/scenarios.ts +0 -69
  112. package/server/restful/unstable/start-scenario.ts +0 -33
  113. package/server/restful/unstable/stop-scenario.ts +0 -30
  114. package/server/routers/scenario-schedule-callback-router.ts +0 -69
  115. package/server/routers/scenario-view-router.ts +0 -46
  116. package/server/routes.ts +0 -30
  117. package/server/service/analysis/analysis-query.ts +0 -13
  118. package/server/service/analysis/index.ts +0 -3
  119. package/server/service/connection/connection-mutation.ts +0 -190
  120. package/server/service/connection/connection-query.ts +0 -87
  121. package/server/service/connection/connection-subscription.ts +0 -104
  122. package/server/service/connection/connection-type.ts +0 -288
  123. package/server/service/connection/index.ts +0 -7
  124. package/server/service/connector/connector-query.ts +0 -62
  125. package/server/service/connector/connector-type.ts +0 -29
  126. package/server/service/connector/index.ts +0 -4
  127. package/server/service/index.ts +0 -52
  128. package/server/service/payload-log/index.ts +0 -7
  129. package/server/service/payload-log/payload-log-mutation.ts +0 -151
  130. package/server/service/payload-log/payload-log-query.ts +0 -49
  131. package/server/service/payload-log/payload-log-type.ts +0 -36
  132. package/server/service/payload-log/payload-log.ts +0 -100
  133. package/server/service/property-spec.ts +0 -24
  134. package/server/service/scenario/index.ts +0 -6
  135. package/server/service/scenario/scenario-mutation.ts +0 -396
  136. package/server/service/scenario/scenario-query.ts +0 -109
  137. package/server/service/scenario/scenario-type.ts +0 -78
  138. package/server/service/scenario/scenario.ts +0 -124
  139. package/server/service/scenario-flow/scenario-flow.ts +0 -17
  140. package/server/service/scenario-instance/index.ts +0 -6
  141. package/server/service/scenario-instance/scenario-instance-mutation.ts +0 -44
  142. package/server/service/scenario-instance/scenario-instance-query.ts +0 -42
  143. package/server/service/scenario-instance/scenario-instance-subscription.ts +0 -118
  144. package/server/service/scenario-instance/scenario-instance-type.ts +0 -563
  145. package/server/service/scenario-queue/index.ts +0 -4
  146. package/server/service/scenario-queue/scenario-queue-subscription.ts +0 -55
  147. package/server/service/scenario-queue/scenario-queue-type.ts +0 -27
  148. package/server/service/state-register/data-resolver.ts +0 -56
  149. package/server/service/state-register/index.ts +0 -8
  150. package/server/service/state-register/state-register-mutation.ts +0 -166
  151. package/server/service/state-register/state-register-query.ts +0 -80
  152. package/server/service/state-register/state-register-type.ts +0 -80
  153. package/server/service/state-register/state-register.ts +0 -113
  154. package/server/service/step/index.ts +0 -6
  155. package/server/service/step/step-mutation.ts +0 -52
  156. package/server/service/step/step-query.ts +0 -55
  157. package/server/service/step/step-type.ts +0 -215
  158. package/server/service/task-type/index.ts +0 -4
  159. package/server/service/task-type/task-type-query.ts +0 -95
  160. package/server/service/task-type/task-type-type.ts +0 -29
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/integration-base",
3
- "version": "8.0.5",
3
+ "version": "9.0.0-beta.12",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -26,23 +26,24 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@apollo/client": "^3.6.9",
29
- "@operato/moment-timezone-es": "^8.0.0",
30
- "@things-factory/api": "^8.0.5",
31
- "@things-factory/auth-base": "^8.0.5",
32
- "@things-factory/cache-service": "^8.0.5",
33
- "@things-factory/env": "^8.0.2",
34
- "@things-factory/oauth2-client": "^8.0.5",
35
- "@things-factory/scheduler-client": "^8.0.5",
36
- "@things-factory/shell": "^8.0.2",
37
- "@things-factory/utils": "^8.0.0",
29
+ "@operato/moment-timezone-es": "^9.0.0-beta",
30
+ "@things-factory/api": "^9.0.0-beta.12",
31
+ "@things-factory/auth-base": "^9.0.0-beta.12",
32
+ "@things-factory/cache-service": "^9.0.0-beta.12",
33
+ "@things-factory/env": "^9.0.0-beta.5",
34
+ "@things-factory/oauth2-client": "^9.0.0-beta.12",
35
+ "@things-factory/scheduler-client": "^9.0.0-beta.12",
36
+ "@things-factory/shell": "^9.0.0-beta.12",
37
+ "@things-factory/utils": "^9.0.0-beta.0",
38
38
  "async-mqtt": "^2.5.0",
39
39
  "chance": "^1.1.11",
40
40
  "cross-fetch": "^3.0.4",
41
41
  "ieee754": "^1.2.1",
42
42
  "node-fetch": "^2.6.0",
43
43
  "promise-socket": "^7.0.0",
44
+ "puppeteer": "^23.0.0",
44
45
  "readline": "^1.3.0",
45
46
  "ses": "^1.5.0"
46
47
  },
47
- "gitHead": "9ab6fca18eeb58b9d2f3411661508a39d0ab6aee"
48
+ "gitHead": "5e9ade1c2d4b4c96b89396e36c3afa1caaf18ef0"
48
49
  }
@@ -1,14 +1,22 @@
1
1
  {
2
+ "error.scenario instance not found": "scenario instance '{instance}' not found.",
2
3
  "error.scenario not found": "scenario '{scenario}' not found.",
3
4
  "error.scenario run error": "an error occurred while processing the '{scenario}' request. please contact the administrator.",
4
5
  "error.scenario run unauthorized": "you do not have permission to run the '{scenario}' scenario. please contact the administrator.",
5
6
  "error.schedule is not set": "schedule should be set for the scenario '{scenario}' in order to register as a schedule",
6
7
  "error.timezone is not set": "timezone should be set for the scenario '{scenario}' in order to register as a schedule",
7
- "error.scenario instance not found": "scenario instance '{instance}' not found.",
8
8
  "label.auth-key": "authentication key",
9
+ "label.connectionTimeoutMillis": "Connection Timeout (milliseconds)",
10
+ "label.idleTimeoutMillis": "Idle Timeout (milliseconds)",
11
+ "label.login-api-url": "login API URL",
12
+ "label.login-page-path": "login page path",
13
+ "label.maxPoolConnection": "Max Pool Connection",
14
+ "label.maximum-retries": "maximum retry count",
15
+ "label.password-selector": "password selector",
16
+ "label.shadow-dom-selectors": "Shadow-DOM selector",
17
+ "label.submit-selector": "submit selector",
9
18
  "label.subscription-handlers": "subscription handlers",
19
+ "label.success-selector": "success selector",
10
20
  "label.trust-server-certificate": "trust server certificate",
11
- "label.maxPoolConnection": "Max Pool Connection",
12
- "label.idleTimeoutMillis": "Idle Timeout (milliseconds)",
13
- "label.connectionTimeoutMillis": "Connection Timeout (milliseconds)"
21
+ "label.username-selector": "username selector"
14
22
  }
@@ -1,14 +1,22 @@
1
1
  {
2
+ "error.scenario instance not found": "シナリオ インスタンス'{instance}'が見つかりません. 既に終了している可能性があります.",
2
3
  "error.scenario not found": "シナリオ'{scenario}'が見つかりません.",
3
4
  "error.scenario run error": "シナリオ '{scenario}' のリクエストを処理中にエラーが発生しました。管理者に連絡してください。",
4
5
  "error.scenario run unauthorized": "シナリオ '{scenario}' を実行する権限がありません。管理者に連絡してください。",
5
6
  "error.schedule is not set": "スケジュールとして登録するためにはシナリオ'{scenario}'にスケジュール情報が設定される必要があります.",
6
7
  "error.timezone is not set": "スケジュールとして登録するためにはシナリオ'{scenario}'にタイム ゾーン情報が設定される必要があります.",
7
- "error.scenario instance not found": "シナリオ インスタンス'{instance}'が見つかりません. 既に終了している可能性があります.",
8
8
  "label.auth-key": "認証キー",
9
+ "label.connectionTimeoutMillis": "接続タイムアウト(ミリ秒)",
10
+ "label.idleTimeoutMillis": "アイドルタイムアウト(ミリ秒)",
11
+ "label.login-api-url": "ログインAPI URL",
12
+ "label.login-page-path": "ログインページパス",
13
+ "label.maxPoolConnection": "最大プール接続数",
14
+ "label.maximum-retries": "最大リトライ回数",
15
+ "label.password-selector": "パスワードセレクター",
16
+ "label.shadow-dom-selectors": "Shadow-DOMセレクター",
17
+ "label.submit-selector": "送信セレクター",
9
18
  "label.subscription-handlers": "サブスクリプションハンドラー",
19
+ "label.success-selector": "成功セレクター",
10
20
  "label.trust-server-certificate": "サーバー証明書を信頼する",
11
- "label.maxPoolConnection": "最大プール接続数",
12
- "label.idleTimeoutMillis": "アイドルタイムアウト(ミリ秒)",
13
- "label.connectionTimeoutMillis": "接続タイムアウト(ミリ秒)"
21
+ "label.username-selector": "ユーザー名セレクター"
14
22
  }
@@ -1,14 +1,22 @@
1
1
  {
2
+ "error.scenario instance not found": "시나리오 인스턴스 '{instance}'를 찾을 수 없습니다. 이미 종료되었을 수 있습니다.",
2
3
  "error.scenario not found": "시나리오 '{scenario}'를 찾을 수 없습니다.",
3
4
  "error.scenario run error": "시나리오 '{scenario}' 요청을 처리하는 중 오류가 발생했습니다. 관리자에게 문의하십시오.",
4
5
  "error.scenario run unauthorized": "시나리오 '{scenario}'를 실행할 권한이 없습니다. 관리자에게 문의하십히오.",
5
6
  "error.schedule is not set": "스케쥴로 등록하기 위해서는 시나리오 '{scenario}'에 스케쥴 정보가 설정되어야 합니다.",
6
7
  "error.timezone is not set": "스케쥴로 등록하기 위해서는 시나리오 '{scenario}'에 타임존 정보가 설정되어야 합니다.",
7
- "error.scenario instance not found": "시나리오 인스턴스 '{instance}'를 찾을 수 없습니다. 이미 종료되었을 수 있습니다.",
8
8
  "label.auth-key": "인증 키",
9
+ "label.connectionTimeoutMillis": "연결 시간 제한 (밀리초)",
10
+ "label.idleTimeoutMillis": "유휴 시간 제한 (밀리초)",
11
+ "label.login-api-url": "로그인 API URL",
12
+ "label.login-page-path": "로그인 페이지 경로",
13
+ "label.maxPoolConnection": "최대 풀 연결 수",
14
+ "label.maximum-retries": "최대 재시도 횟수",
15
+ "label.password-selector": "비밀번호 선택자",
16
+ "label.shadow-dom-selectors": "Shadow-DOM 선택자",
17
+ "label.submit-selector": "제출 선택자",
9
18
  "label.subscription-handlers": "구독 핸들러",
19
+ "label.success-selector": "성공 선택자",
10
20
  "label.trust-server-certificate": "서버 인증서 신뢰",
11
- "label.maxPoolConnection": "최대 연결 수",
12
- "label.idleTimeoutMillis": "유휴 시간 제한 (밀리초)",
13
- "label.connectionTimeoutMillis": "연결 시간 제한 (밀리초)"
21
+ "label.username-selector": "사용자 이름 선택자"
14
22
  }
@@ -1,14 +1,22 @@
1
1
  {
2
+ "error.scenario instance not found": "Tidak dapat mencari instans senario '{instance}'. Mungkin telah berakhir.",
2
3
  "error.scenario not found": "Tidak dapat mencari senario '{scenario}'.",
3
4
  "error.scenario run error": "Ralat berlaku semasa memproses permintaan senario '{scenario}'. Sila hubungi pentadbir.",
4
5
  "error.scenario run unauthorized": "Anda tidak mempunyai kebenaran untuk menjalankan senario '{scenario}'. Sila hubungi pentadbir.",
5
6
  "error.schedule is not set": "Untuk mendaftarkan sebagai jadual, maklumat jadual mesti diset dalam senario '{scenario}'.",
6
7
  "error.timezone is not set": "Untuk mendaftarkan sebagai jadual, maklumat zon masa mesti diset dalam senario '{scenario}'.",
7
- "error.scenario instance not found": "Tidak dapat mencari instans senario '{instance}'. Mungkin telah berakhir.",
8
8
  "label.auth-key": "Kunci pengesahan",
9
+ "label.connectionTimeoutMillis": "Had Masa Sambungan (milisaat)",
10
+ "label.idleTimeoutMillis": "Had Masa Tanpa Aktiviti (milisaat)",
11
+ "label.login-api-url": "URL API log masuk",
12
+ "label.login-page-path": "laluan halaman log masuk",
13
+ "label.maxPoolConnection": "Sambungan Pool Maksimum",
14
+ "label.maximum-retries": "bilangan cubaan semula maksimum",
15
+ "label.password-selector": "pemilih kata laluan",
16
+ "label.shadow-dom-selectors": "pemilih Shadow-DOM",
17
+ "label.submit-selector": "pemilih serah",
9
18
  "label.subscription-handlers": "pengendali langganan",
19
+ "label.success-selector": "pemilih kejayaan",
10
20
  "label.trust-server-certificate": "percaya sijil pelayan",
11
- "label.maxPoolConnection": "Sambungan Pool Maksimum",
12
- "label.idleTimeoutMillis": "Had Masa Tanpa Aktiviti (milisaat)",
13
- "label.connectionTimeoutMillis": "Had Masa Sambungan (milisaat)"
21
+ "label.username-selector": "pemilih nama pengguna"
14
22
  }
@@ -1,14 +1,22 @@
1
1
  {
2
+ "error.scenario instance not found": "无法找到场景实例 '{instance}'。它可能已经结束。",
2
3
  "error.scenario not found": "无法找到场景 '{scenario}'。",
3
4
  "error.scenario run error": "处理场景 '{scenario}' 请求时发生错误。请联系管理员。",
4
5
  "error.scenario run unauthorized": "没有执行场景 '{scenario}' 的权限。请联系管理员。",
5
6
  "error.schedule is not set": "要注册为计划,场景 '{scenario}' 需要设置计划信息。",
6
7
  "error.timezone is not set": "要注册为计划,场景 '{scenario}' 需要设置时区信息。",
7
- "error.scenario instance not found": "无法找到场景实例 '{instance}'。它可能已经结束。",
8
8
  "label.auth-key": "认证密钥",
9
+ "label.connectionTimeoutMillis": "连接超时时间(毫秒)",
10
+ "label.idleTimeoutMillis": "空闲超时时间(毫秒)",
11
+ "label.login-api-url": "登录API URL",
12
+ "label.login-page-path": "登录页面路径",
13
+ "label.maxPoolConnection": "最大连接池连接数",
14
+ "label.maximum-retries": "最大重试次数",
15
+ "label.password-selector": "密码选择器",
16
+ "label.shadow-dom-selectors": "Shadow-DOM选择器",
17
+ "label.submit-selector": "提交选择器",
9
18
  "label.subscription-handlers": "订阅处理程序",
19
+ "label.success-selector": "成功选择器",
10
20
  "label.trust-server-certificate": "信任服务器证书",
11
- "label.maxPoolConnection": "最大连接池连接数",
12
- "label.idleTimeoutMillis": "空闲超时时间(毫秒)",
13
- "label.connectionTimeoutMillis": "连接超时时间(毫秒)"
21
+ "label.username-selector": "用户名选择器"
14
22
  }
@@ -1,2 +0,0 @@
1
- export * from './scenario-controller'
2
- export * from './publish-data'
@@ -1,29 +0,0 @@
1
- import { Domain, getRepository, pubsub } from '@things-factory/shell'
2
- import { User } from '@things-factory/auth-base'
3
-
4
- import { StateRegister } from '../service/state-register/state-register'
5
-
6
- export async function publishData(tag: string, data: any, { domain, user }: { domain: Domain; user: User }) {
7
- const repository = getRepository(StateRegister)
8
-
9
- const stateRegister = await repository.findOne({
10
- where: { domain: { id: domain?.id }, name: tag }
11
- })
12
-
13
- if (stateRegister) {
14
- await repository.save({
15
- ...stateRegister,
16
- state: data,
17
- writer: user,
18
- wroteAt: new Date()
19
- })
20
- }
21
-
22
- pubsub.publish('data', {
23
- data: {
24
- domain,
25
- tag,
26
- data
27
- }
28
- })
29
- }
@@ -1,154 +0,0 @@
1
- import { getRepository, Domain, GraphqlLocalClient } from '@things-factory/shell'
2
- import { checkUserHasRole } from '@things-factory/auth-base'
3
- import { cacheService } from '@things-factory/cache-service'
4
-
5
- import { ScenarioEngine } from '../engine/scenario-engine'
6
- import { Scenario } from '../service/scenario/scenario'
7
- import { ScenarioInstance, ScenarioInstanceRunResult } from '../service/scenario-instance/scenario-instance-type'
8
- import { Step } from '../service/step/step-type'
9
-
10
- const debug = require('debug')('things-factory:integration-base:controller:run-scenario')
11
-
12
- async function findScenario(
13
- scenarioName: string,
14
- domain: Domain
15
- ): Promise<{
16
- id: string
17
- ttl: number
18
- name: string
19
- steps: Step[]
20
- domain: Domain
21
- }> {
22
- var repository = getRepository(Scenario)
23
-
24
- var scenario = await repository.findOne({
25
- where: { domain: { id: domain.id }, name: scenarioName },
26
- relations: ['domain', 'steps', 'role', 'creator', 'updater']
27
- })
28
-
29
- if (!scenario && domain.parentId) {
30
- scenario = await repository.findOne({
31
- where: { domain: { id: domain.parentId }, name: scenarioName },
32
- relations: ['domain', 'steps', 'role', 'creator', 'updater']
33
- })
34
- }
35
-
36
- return scenario as any
37
- }
38
-
39
- export async function checkHasRole(scenario: Partial<Scenario>, context: ResolverContext): Promise<void> {
40
- const { domain, user } = context.state
41
- if (!(await checkUserHasRole(scenario.roleId, domain, user))) {
42
- throw new Error(
43
- context.t('error.scenario run unauthorized', {
44
- scenario: scenario.name
45
- })
46
- )
47
- }
48
- }
49
-
50
- export async function runScenario(
51
- instanceName: string,
52
- scenarioName: string,
53
- variables: any,
54
- context: ResolverContext
55
- ): Promise<ScenarioInstanceRunResult> {
56
- const { domain, user, lng } = context.state
57
-
58
- debug('runScenario', scenarioName, instanceName, variables)
59
-
60
- var scenario = await findScenario(scenarioName, domain)
61
-
62
- if (!scenario) {
63
- throw new Error(
64
- context.t('error.scenario not found', {
65
- scenario: scenarioName
66
- })
67
- )
68
- }
69
-
70
- await checkHasRole(scenario, context)
71
-
72
- if (scenario.ttl > 0) {
73
- const cachedValue = await cacheService.getFromCache(scenario.id, { domain: domain.id, variables: variables || {} })
74
- if (cachedValue) {
75
- return cachedValue.value
76
- }
77
- }
78
-
79
- /* 시나리오 인스턴스를 생성한다. */
80
- instanceName = instanceName || scenarioName + '-' + String(Date.now())
81
- var instance = new ScenarioInstance(instanceName, scenario, {
82
- domain,
83
- user,
84
- lng,
85
- variables,
86
- client: GraphqlLocalClient.client
87
- })
88
-
89
- try {
90
- return await instance.run()
91
- } catch (err) {
92
- console.error(err)
93
-
94
- throw new Error(
95
- context.t('error.scenario run error', {
96
- scenario: scenarioName
97
- })
98
- )
99
- }
100
- }
101
-
102
- export async function startScenario(
103
- instanceName: string,
104
- scenarioName: string,
105
- variables: any,
106
- context: ResolverContext
107
- ): Promise<ScenarioInstance> {
108
- const { domain, user, lng } = context.state
109
-
110
- debug('startScenario', instanceName, scenarioName, variables)
111
-
112
- var scenario = await findScenario(scenarioName, domain)
113
-
114
- if (!scenario) {
115
- throw new Error(
116
- context.t('error.scenario not found', {
117
- scenario: scenarioName
118
- })
119
- )
120
- }
121
-
122
- await checkHasRole(scenario, context)
123
-
124
- instanceName = instanceName || scenarioName
125
- return await ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables })
126
- }
127
-
128
- export async function stopScenario(
129
- instanceName: string,
130
- context: ResolverContext
131
- ): Promise<ScenarioInstance | undefined> {
132
- const { domain, user, unsafeIP, prohibitedPrivileges } = context.state
133
-
134
- debug('stopScenario', instanceName)
135
-
136
- var scenarioInstance = ScenarioEngine.getScenarioInstance(domain, instanceName)
137
-
138
- if (!scenarioInstance) {
139
- debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`)
140
- throw new Error(
141
- context.t('error.scenario instance not found', {
142
- instance: instanceName
143
- })
144
- )
145
- }
146
-
147
- var scenario = await findScenario(scenarioInstance.scenarioName, domain)
148
-
149
- await checkHasRole(scenario, context)
150
-
151
- await ScenarioEngine.unload(domain, instanceName)
152
-
153
- return scenarioInstance
154
- }
@@ -1,115 +0,0 @@
1
- import uniq from 'lodash/uniq'
2
-
3
- import { Domain, getRepository } from '@things-factory/shell'
4
- import { Scenario } from '../../service/scenario/scenario'
5
- import { Connection } from '../../service/connection/connection-type'
6
-
7
- export async function analyzeIntegration(domain: Domain) {
8
- const tagNames = []
9
-
10
- const model = {
11
- nodes: [],
12
- relationships: []
13
- }
14
-
15
- var id = 0
16
-
17
- const scenarios = await getRepository(Scenario).find({
18
- where: { domain: { id: domain.id } },
19
- relations: ['steps']
20
- })
21
-
22
- const connections = await getRepository(Connection).find({
23
- where: { domain: { id: domain.id } }
24
- })
25
-
26
- model.nodes = model.nodes.concat(
27
- scenarios.map(scenario => {
28
- return {
29
- id: scenario.id,
30
- labels: ['Scenario'],
31
- text: scenario.name,
32
- icon: 'settings',
33
- properties: {
34
- name: scenario.name,
35
- description: scenario.description
36
- }
37
- }
38
- })
39
- )
40
-
41
- model.nodes = model.nodes.concat(
42
- connections.map(connection => {
43
- return {
44
- id: connection.id,
45
- labels: ['Connection'],
46
- text: connection.name,
47
- icon: 'link',
48
- properties: {
49
- name: connection.name,
50
- description: connection.description
51
- }
52
- }
53
- })
54
- )
55
-
56
- scenarios.forEach(scenario => {
57
- const connectionNames = uniq(scenario.steps.map(step => step.connection).filter(Boolean))
58
- const connectionList = connectionNames
59
- .map(connectionName => connections.find(connection => connection.name == connectionName))
60
- .filter(Boolean)
61
-
62
- const relationships = connectionList.map(connection => {
63
- return {
64
- id: ++id,
65
- type: 'using',
66
- startNode: scenario.id,
67
- endNode: connection.id,
68
- properties: {}
69
- }
70
- })
71
-
72
- model.relationships = model.relationships.concat(relationships)
73
- })
74
-
75
- scenarios.forEach(scenario => {
76
- const tags = uniq(
77
- scenario.steps
78
- .filter(step => !step.connection && step.task == 'publish')
79
- .map(step => JSON.parse(step.params)?.tag)
80
- .filter(Boolean)
81
- )
82
-
83
- for (const tag of tags) {
84
- if (tagNames.includes(tag)) {
85
- continue
86
- }
87
-
88
- model.nodes.push({
89
- id: `tag-${tag}`,
90
- labels: ['Tag'],
91
- text: tag,
92
- icon: 'label',
93
- properties: {
94
- tag
95
- }
96
- })
97
-
98
- tagNames.push(tag)
99
- }
100
-
101
- const relationships = tags.map(tag => {
102
- return {
103
- id: ++id,
104
- type: 'publish',
105
- startNode: scenario.id,
106
- endNode: `tag-${tag}`,
107
- properties: {}
108
- }
109
- })
110
-
111
- model.relationships = model.relationships.concat(relationships)
112
- })
113
-
114
- return model
115
- }