@things-factory/integration-base 8.0.39 → 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.
- package/dist-server/engine/connector/headless-connector.d.ts +23 -0
- package/dist-server/engine/connector/headless-connector.js +357 -0
- package/dist-server/engine/connector/headless-connector.js.map +1 -0
- package/dist-server/engine/connector/http-connector.js +1 -1
- package/dist-server/engine/connector/http-connector.js.map +1 -1
- package/dist-server/engine/connector/index.d.ts +1 -0
- package/dist-server/engine/connector/index.js +1 -0
- package/dist-server/engine/connector/index.js.map +1 -1
- package/dist-server/engine/index.d.ts +3 -2
- package/dist-server/engine/index.js +3 -2
- package/dist-server/engine/index.js.map +1 -1
- package/dist-server/engine/resource-pool/headless-pool.d.ts +1 -0
- package/dist-server/engine/resource-pool/headless-pool.js +62 -0
- package/dist-server/engine/resource-pool/headless-pool.js.map +1 -0
- package/dist-server/engine/resource-pool/index.d.ts +1 -0
- package/dist-server/engine/resource-pool/index.js +5 -0
- package/dist-server/engine/resource-pool/index.js.map +1 -0
- package/dist-server/engine/task/headless-post.js +19 -33
- package/dist-server/engine/task/headless-post.js.map +1 -1
- package/dist-server/engine/task/headless-scrap.js +20 -13
- package/dist-server/engine/task/headless-scrap.js.map +1 -1
- package/dist-server/engine/task/mqtt-publish.js +29 -6
- package/dist-server/engine/task/mqtt-publish.js.map +1 -1
- package/dist-server/engine/task/mqtt-subscribe.js +178 -64
- package/dist-server/engine/task/mqtt-subscribe.js.map +1 -1
- package/dist-server/index.d.ts +6 -6
- package/dist-server/index.js +10 -10
- package/dist-server/index.js.map +1 -1
- package/dist-server/routes.js +6 -6
- package/dist-server/routes.js.map +1 -1
- package/dist-server/service/connection/connection-mutation.js +17 -5
- package/dist-server/service/connection/connection-mutation.js.map +1 -1
- package/dist-server/service/connection/connection-query.js +3 -0
- package/dist-server/service/connection/connection-query.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +12 -11
- package/translations/en.json +12 -4
- package/translations/ja.json +12 -4
- package/translations/ko.json +12 -4
- package/translations/ms.json +12 -4
- package/translations/zh.json +12 -4
- package/server/controllers/index.ts +0 -2
- package/server/controllers/publish-data.ts +0 -29
- package/server/controllers/scenario-controller.ts +0 -154
- package/server/engine/analyzer/analyze-integration.ts +0 -115
- package/server/engine/connection-manager.ts +0 -232
- package/server/engine/connector/echo-back-connector.ts +0 -51
- package/server/engine/connector/echo-back-server.ts +0 -72
- package/server/engine/connector/graphql-connector.ts +0 -126
- package/server/engine/connector/http-connector.ts +0 -65
- package/server/engine/connector/index.ts +0 -12
- package/server/engine/connector/mqtt-connector.ts +0 -78
- package/server/engine/connector/mssql-connector.ts +0 -152
- package/server/engine/connector/mysql-connector.ts +0 -94
- package/server/engine/connector/operato-connector.ts +0 -264
- package/server/engine/connector/oracle-connector.ts +0 -218
- package/server/engine/connector/postgresql-connector.ts +0 -152
- package/server/engine/connector/proxy-connector.ts +0 -53
- package/server/engine/connector/socket-server.ts +0 -86
- package/server/engine/connector/sqlite-connector.ts +0 -69
- package/server/engine/edge-client.ts +0 -45
- package/server/engine/index.ts +0 -10
- package/server/engine/pending-queue.ts +0 -97
- package/server/engine/scenario-engine.ts +0 -106
- package/server/engine/task/book-up-scenario.ts +0 -73
- package/server/engine/task/csv-readline.ts +0 -127
- package/server/engine/task/data-accessor.ts +0 -36
- package/server/engine/task/data-mapper.ts +0 -47
- package/server/engine/task/database-query.ts +0 -56
- package/server/engine/task/echo-receive.ts +0 -21
- package/server/engine/task/echo-send.ts +0 -32
- package/server/engine/task/empty-check.ts +0 -38
- package/server/engine/task/end.ts +0 -18
- package/server/engine/task/floating-point.ts +0 -71
- package/server/engine/task/goto.ts +0 -27
- package/server/engine/task/graphql-mutate.ts +0 -79
- package/server/engine/task/graphql-query.ts +0 -78
- package/server/engine/task/headless-post.ts +0 -147
- package/server/engine/task/headless-scrap.ts +0 -80
- package/server/engine/task/http-get.ts +0 -117
- package/server/engine/task/http-post.ts +0 -148
- package/server/engine/task/index.ts +0 -45
- package/server/engine/task/jsonata.ts +0 -45
- package/server/engine/task/local-graphql-mutate.ts +0 -100
- package/server/engine/task/local-graphql-query.ts +0 -100
- package/server/engine/task/log.ts +0 -78
- package/server/engine/task/mqtt-publish.ts +0 -45
- package/server/engine/task/mqtt-subscribe.ts +0 -139
- package/server/engine/task/mssql-procedure.ts +0 -128
- package/server/engine/task/oracle-procedure.ts +0 -124
- package/server/engine/task/pick-pending-scenario.ts +0 -80
- package/server/engine/task/publish.ts +0 -40
- package/server/engine/task/random.ts +0 -53
- package/server/engine/task/reset-pending-queue.ts +0 -17
- package/server/engine/task/script.ts +0 -63
- package/server/engine/task/set-domain.ts +0 -37
- package/server/engine/task/sleep.ts +0 -34
- package/server/engine/task/socket-listener.ts +0 -96
- package/server/engine/task/state-group-read.ts +0 -69
- package/server/engine/task/state-read.ts +0 -56
- package/server/engine/task/state-write.ts +0 -65
- package/server/engine/task/stop-scenario.ts +0 -44
- package/server/engine/task/sub-scenario.ts +0 -57
- package/server/engine/task/switch-goto.ts +0 -43
- package/server/engine/task/switch-range-goto.ts +0 -53
- package/server/engine/task/switch-range-scenario.ts +0 -79
- package/server/engine/task/switch-range-set.ts +0 -48
- package/server/engine/task/switch-scenario.ts +0 -67
- package/server/engine/task/switch-set.ts +0 -37
- package/server/engine/task/throw.ts +0 -27
- package/server/engine/task/utils/headless-pool-for-scenario.ts +0 -71
- package/server/engine/task/utils/substitute.ts +0 -44
- package/server/engine/task/variables.ts +0 -17
- package/server/engine/task-registry.ts +0 -23
- package/server/engine/types.ts +0 -114
- package/server/index.ts +0 -20
- package/server/migrations/index.ts +0 -9
- package/server/restful/index.ts +0 -1
- package/server/restful/unstable/index.ts +0 -7
- package/server/restful/unstable/run-scenario.ts +0 -51
- package/server/restful/unstable/scenario-instance.ts +0 -52
- package/server/restful/unstable/scenario-instances.ts +0 -80
- package/server/restful/unstable/scenario.ts +0 -41
- package/server/restful/unstable/scenarios.ts +0 -69
- package/server/restful/unstable/start-scenario.ts +0 -33
- package/server/restful/unstable/stop-scenario.ts +0 -30
- package/server/routers/scenario-schedule-callback-router.ts +0 -69
- package/server/routers/scenario-view-router.ts +0 -46
- package/server/routes.ts +0 -35
- package/server/service/analysis/analysis-query.ts +0 -13
- package/server/service/analysis/index.ts +0 -3
- package/server/service/connection/connection-mutation.ts +0 -190
- package/server/service/connection/connection-query.ts +0 -87
- package/server/service/connection/connection-subscription.ts +0 -104
- package/server/service/connection/connection-type.ts +0 -305
- package/server/service/connection/index.ts +0 -7
- package/server/service/connector/connector-query.ts +0 -62
- package/server/service/connector/connector-type.ts +0 -29
- package/server/service/connector/index.ts +0 -4
- package/server/service/index.ts +0 -52
- package/server/service/payload-log/index.ts +0 -7
- package/server/service/payload-log/payload-log-mutation.ts +0 -151
- package/server/service/payload-log/payload-log-query.ts +0 -49
- package/server/service/payload-log/payload-log-type.ts +0 -36
- package/server/service/payload-log/payload-log.ts +0 -100
- package/server/service/property-spec.ts +0 -24
- package/server/service/scenario/index.ts +0 -6
- package/server/service/scenario/scenario-mutation.ts +0 -396
- package/server/service/scenario/scenario-query.ts +0 -109
- package/server/service/scenario/scenario-type.ts +0 -78
- package/server/service/scenario/scenario.ts +0 -124
- package/server/service/scenario-flow/scenario-flow.ts +0 -17
- package/server/service/scenario-instance/index.ts +0 -6
- package/server/service/scenario-instance/scenario-instance-mutation.ts +0 -44
- package/server/service/scenario-instance/scenario-instance-query.ts +0 -42
- package/server/service/scenario-instance/scenario-instance-subscription.ts +0 -118
- package/server/service/scenario-instance/scenario-instance-type.ts +0 -557
- package/server/service/scenario-queue/index.ts +0 -4
- package/server/service/scenario-queue/scenario-queue-subscription.ts +0 -55
- package/server/service/scenario-queue/scenario-queue-type.ts +0 -27
- package/server/service/state-register/data-resolver.ts +0 -56
- package/server/service/state-register/index.ts +0 -8
- package/server/service/state-register/state-register-mutation.ts +0 -166
- package/server/service/state-register/state-register-query.ts +0 -80
- package/server/service/state-register/state-register-type.ts +0 -80
- package/server/service/state-register/state-register.ts +0 -113
- package/server/service/step/index.ts +0 -6
- package/server/service/step/step-mutation.ts +0 -52
- package/server/service/step/step-query.ts +0 -55
- package/server/service/step/step-type.ts +0 -238
- package/server/service/task-type/index.ts +0 -4
- package/server/service/task-type/task-type-query.ts +0 -95
- 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": "
|
3
|
+
"version": "9.0.0-9.0.0-beta.59.0",
|
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": "^
|
30
|
-
"@things-factory/api": "^
|
31
|
-
"@things-factory/auth-base": "^
|
32
|
-
"@things-factory/cache-service": "^
|
33
|
-
"@things-factory/env": "^
|
34
|
-
"@things-factory/oauth2-client": "^
|
35
|
-
"@things-factory/scheduler-client": "^
|
36
|
-
"@things-factory/shell": "^
|
37
|
-
"@things-factory/utils": "^
|
29
|
+
"@operato/moment-timezone-es": "^9.0.0-beta",
|
30
|
+
"@things-factory/api": "^9.0.0-9.0.0-beta.59.0",
|
31
|
+
"@things-factory/auth-base": "^9.0.0-9.0.0-beta.59.0",
|
32
|
+
"@things-factory/cache-service": "^9.0.0-9.0.0-beta.59.0",
|
33
|
+
"@things-factory/env": "^9.0.0-9.0.0-beta.59.0",
|
34
|
+
"@things-factory/oauth2-client": "^9.0.0-9.0.0-beta.59.0",
|
35
|
+
"@things-factory/scheduler-client": "^9.0.0-9.0.0-beta.59.0",
|
36
|
+
"@things-factory/shell": "^9.0.0-9.0.0-beta.59.0",
|
37
|
+
"@things-factory/utils": "^9.0.0-9.0.0-beta.59.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": "^24.5.0",
|
44
45
|
"readline": "^1.3.0",
|
45
46
|
"ses": "^1.5.0"
|
46
47
|
},
|
47
|
-
"gitHead": "
|
48
|
+
"gitHead": "cf6ee84b991f469a4e71198b0e6314b45e9e10b8"
|
48
49
|
}
|
package/translations/en.json
CHANGED
@@ -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.
|
12
|
-
"label.idleTimeoutMillis": "Idle Timeout (milliseconds)",
|
13
|
-
"label.connectionTimeoutMillis": "Connection Timeout (milliseconds)"
|
21
|
+
"label.username-selector": "username selector"
|
14
22
|
}
|
package/translations/ja.json
CHANGED
@@ -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.
|
12
|
-
"label.idleTimeoutMillis": "アイドルタイムアウト(ミリ秒)",
|
13
|
-
"label.connectionTimeoutMillis": "接続タイムアウト(ミリ秒)"
|
21
|
+
"label.username-selector": "ユーザー名セレクター"
|
14
22
|
}
|
package/translations/ko.json
CHANGED
@@ -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.
|
12
|
-
"label.idleTimeoutMillis": "유휴 시간 제한 (밀리초)",
|
13
|
-
"label.connectionTimeoutMillis": "연결 시간 제한 (밀리초)"
|
21
|
+
"label.username-selector": "사용자 이름 선택자"
|
14
22
|
}
|
package/translations/ms.json
CHANGED
@@ -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.
|
12
|
-
"label.idleTimeoutMillis": "Had Masa Tanpa Aktiviti (milisaat)",
|
13
|
-
"label.connectionTimeoutMillis": "Had Masa Sambungan (milisaat)"
|
21
|
+
"label.username-selector": "pemilih nama pengguna"
|
14
22
|
}
|
package/translations/zh.json
CHANGED
@@ -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.
|
12
|
-
"label.idleTimeoutMillis": "空闲超时时间(毫秒)",
|
13
|
-
"label.connectionTimeoutMillis": "连接超时时间(毫秒)"
|
21
|
+
"label.username-selector": "用户名选择器"
|
14
22
|
}
|
@@ -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 => 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
|
-
}
|