@things-factory/integration-base 6.2.33 → 6.2.35

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 (64) hide show
  1. package/dist-server/engine/task/index.js +2 -0
  2. package/dist-server/engine/task/index.js.map +1 -1
  3. package/dist-server/engine/task/local-graphql-mutate.js +7 -2
  4. package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
  5. package/dist-server/engine/task/local-graphql-query.js +7 -2
  6. package/dist-server/engine/task/local-graphql-query.js.map +1 -1
  7. package/dist-server/engine/task/read-state.js +48 -0
  8. package/dist-server/engine/task/read-state.js.map +1 -0
  9. package/dist-server/engine/task/state-read.js +49 -0
  10. package/dist-server/engine/task/state-read.js.map +1 -0
  11. package/dist-server/engine/task/state-write.js +57 -0
  12. package/dist-server/engine/task/state-write.js.map +1 -0
  13. package/dist-server/engine/task/write-state.js +56 -0
  14. package/dist-server/engine/task/write-state.js.map +1 -0
  15. package/dist-server/service/index.js +6 -2
  16. package/dist-server/service/index.js.map +1 -1
  17. package/dist-server/service/state-register/index.js +10 -0
  18. package/dist-server/service/state-register/index.js.map +1 -0
  19. package/dist-server/service/state-register/state-register-mutation.js +153 -0
  20. package/dist-server/service/state-register/state-register-mutation.js.map +1 -0
  21. package/dist-server/service/state-register/state-register-query.js +113 -0
  22. package/dist-server/service/state-register/state-register-query.js.map +1 -0
  23. package/dist-server/service/state-register/state-register-type.js +90 -0
  24. package/dist-server/service/state-register/state-register-type.js.map +1 -0
  25. package/dist-server/service/state-register/state-register.js +105 -0
  26. package/dist-server/service/state-register/state-register.js.map +1 -0
  27. package/dist-server/tsconfig.tsbuildinfo +1 -1
  28. package/helps/integration/concept/scenario.ja.md +4 -0
  29. package/helps/integration/concept/scenario.ko.md +4 -0
  30. package/helps/integration/concept/scenario.md +3 -3
  31. package/helps/integration/concept/scenario.ms.md +4 -0
  32. package/helps/integration/concept/scenario.zh.md +4 -0
  33. package/helps/integration/concept/state-register.ja.md +8 -0
  34. package/helps/integration/concept/state-register.ko.md +8 -0
  35. package/helps/integration/concept/state-register.md +8 -0
  36. package/helps/integration/concept/state-register.ms.md +8 -0
  37. package/helps/integration/concept/state-register.zh.md +8 -0
  38. package/helps/integration/concept/task.ja.md +25 -0
  39. package/helps/integration/concept/task.ko.md +25 -0
  40. package/helps/integration/concept/task.md +17 -17
  41. package/helps/integration/concept/task.ms.md +28 -0
  42. package/helps/integration/concept/task.zh.md +25 -0
  43. package/helps/integration/task/state-read.ja.md +8 -0
  44. package/helps/integration/task/state-read.ko.md +8 -0
  45. package/helps/integration/task/state-read.md +8 -0
  46. package/helps/integration/task/state-read.ms.md +8 -0
  47. package/helps/integration/task/state-read.zh.md +8 -0
  48. package/helps/integration/task/state-write.ja.md +10 -0
  49. package/helps/integration/task/state-write.ko.md +10 -0
  50. package/helps/integration/task/state-write.md +10 -0
  51. package/helps/integration/task/state-write.ms.md +10 -0
  52. package/helps/integration/task/state-write.zh.md +10 -0
  53. package/package.json +7 -7
  54. package/server/engine/task/index.ts +2 -0
  55. package/server/engine/task/local-graphql-mutate.ts +8 -2
  56. package/server/engine/task/local-graphql-query.ts +8 -2
  57. package/server/engine/task/state-read.ts +54 -0
  58. package/server/engine/task/state-write.ts +63 -0
  59. package/server/service/index.ts +6 -2
  60. package/server/service/state-register/index.ts +7 -0
  61. package/server/service/state-register/state-register-mutation.ts +166 -0
  62. package/server/service/state-register/state-register-query.ts +72 -0
  63. package/server/service/state-register/state-register-type.ts +64 -0
  64. package/server/service/state-register/state-register.ts +91 -0
@@ -0,0 +1,4 @@
1
+ # シナリオ(Scenario)
2
+
3
+ - シナリオは、順番に実行される[タスク](./task.md)のシリーズです。
4
+ - シナリオを構成する各段階のタスクをステップと呼びます。
@@ -0,0 +1,4 @@
1
+ # scenario
2
+
3
+ - 시나리오는 순차적으로 실행되는 [태스크](./task.md)의 시리즈이다.
4
+ - 시나리오를 구성하는 각 단계의 태스크를 스텝이라고 한다.
@@ -1,4 +1,4 @@
1
- # scenario
1
+ # Scenario
2
2
 
3
- - 시나리오는 순차적으로 실행되는 [태스크](./task.md) 시리즈이다.
4
- - 시나리오를 구성하는 단계의 태스크를 스텝이라고 한다.
3
+ - A scenario is a series of [tasks](./task.md) that are executed sequentially.
4
+ - The tasks constituting each step of the scenario are referred to as steps.
@@ -0,0 +1,4 @@
1
+ # Senario (Scenario)
2
+
3
+ - Senario adalah siri [tugas](./task.md) yang dilaksanakan secara berurutan.
4
+ - Tugas yang membentuk setiap langkah senario disebut sebagai langkah.
@@ -0,0 +1,4 @@
1
+ # 场景(Scenario)
2
+
3
+ - 场景是按顺序执行的[任务](./task.md)系列。
4
+ - 构成场景的每个阶段的任务称为步骤。
@@ -0,0 +1,8 @@
1
+ # 状態登録簿(State-Register)
2
+
3
+ - 状態登録簿は、ある状態を長期間維持するために定義する機能を意味します。
4
+ - 各状態は独自の名前で識別できます。
5
+ - 各状態は文字列、数字、またはオブジェクトなど、任意の形式の値を保持できます。
6
+ - 各状態は TTL(Time To Live)によって、最後に設定された値の有効性を指定できます。(TTL が 0 より大きければ設定されたと判断します)
7
+ - もし、状態値が最後に設定された時刻が現在時刻に比べて TTL(秒)よりも前であれば、その値は無効になります。
8
+ - TTL が過ぎた状態値は null として表示されます。
@@ -0,0 +1,8 @@
1
+ # 상태등록부 (state-register)
2
+
3
+ - 상태등록부는 값을 일정기간 유지하고자하는 상태들을 정의하는 기능을 의미한다.
4
+ - 각 상태는 고유한 이름으로 식별할 수 있다.
5
+ - 각 상태는 문자열, 숫자 또는 오브젝트 등 어떤 형태의 값도 유지할 수 있다.
6
+ - 각 상태는 TTL(Time To Live)에 의해서 마지막 설정된 값의 유효성을 지정할 수도 있다.(TTL이 0보다 크면 설정된 것으로 판단한다)
7
+ - 만약, 상태값이 마지막으로 설정된 시간이 현재 시간대비 TTL(초)보다 더 이전이라면 그 값은 유효하지 않게된다.
8
+ - TTL이 지난 상태값은 null로 조회된다
@@ -0,0 +1,8 @@
1
+ # State-Register
2
+
3
+ - The state-register refers to a function that defines states that are intended to be maintained over a certain period.
4
+ - Each state can be identified by a unique name.
5
+ - Each state can maintain values in any form, such as strings, numbers, or objects.
6
+ - Each state's validity of the last set value can be determined by TTL (Time To Live). (It is considered set if TTL is greater than 0)
7
+ - If the state value was set at a time earlier than the current time compared to TTL (seconds), then that value becomes invalid.
8
+ - State values past their TTL are queried as null.
@@ -0,0 +1,8 @@
1
+ # Daftar Status (State-Register)
2
+
3
+ - Daftar Status adalah fungsi yang bermaksud untuk menentukan status yang ingin dikekalkan dalam tempoh tertentu.
4
+ - Setiap status boleh dikenalpasti melalui nama uniknya.
5
+ - Setiap status boleh mengekalkan nilai dalam bentuk apa pun, seperti string, nombor, atau objek.
6
+ - Setiap status boleh menetapkan keabsahan nilai terakhir yang ditetapkan melalui TTL (Time To Live). (Jika TTL lebih besar daripada 0, maka dianggap telah ditetapkan)
7
+ - Jika nilai status yang ditetapkan terakhir kali lebih awal daripada masa sekarang berbanding dengan TTL (saat), maka nilai tersebut menjadi tidak sah.
8
+ - Nilai status yang telah melebihi TTL akan ditunjukkan sebagai null.
@@ -0,0 +1,8 @@
1
+ # 状态注册簿(State-Register)
2
+
3
+ - 状态注册簿是指定义要长期保持某些状态的功能。
4
+ - 每个状态都可以通过唯一的名称来识别。
5
+ - 每个状态可以保持任何形式的值,如字符串、数字或对象等。
6
+ - 每个状态可以通过 TTL(Time To Live)来指定最后设置值的有效性。(如果 TTL 大于 0,则认为已设置)
7
+ - 如果状态值最后设置的时间比当前时间早于 TTL(秒),那么该值将变得无效。
8
+ - 过期的状态值将被视为 null。
@@ -0,0 +1,25 @@
1
+ # タスク(Task)
2
+
3
+ - タスクは、[シナリオエンジン](./scenario-engine.md)によって実行される最小単位の作業です。
4
+ - タスクは、[シナリオ](./scenario.md)の各ステップを定義するために実装されたプログラムです。
5
+ - タスクは、複雑な機能の組み合わせを避け、単純で明確な機能で実装することが望ましいです。
6
+ - タスク実装に必要な様々な情報と機能をサポートするために、シナリオでは[シナリオコンテキスト](./scenario-context.md)を提供しています。
7
+ - タスクの種類は以下のように区分されます。
8
+
9
+ ## 分類
10
+
11
+ - 独立タスク
12
+ - Sleep, Log,
13
+ - publish - タグ付きデータを購読者に通知
14
+ - フロー制御タスク
15
+ - Goto Step:Map, Range, ..
16
+ - サブシナリオ:Map, Range, ..
17
+ - Throw
18
+ - End
19
+ - [コネクション](./connection.md) ベースのタスク
20
+ - database-query
21
+ - graphql-query, mutator
22
+ - mqtt:subscribe/publish
23
+ - indydcp:Indy7 ロボット制御
24
+ - modbus:読み書き..
25
+ - ロボティクス関連:カメラ、マーカー等
@@ -0,0 +1,25 @@
1
+ # task
2
+
3
+ - 태스크는 [시나리오 엔진](./scenario-engine.md)에 의해서 실행되는 최소 단위의 작업이다.
4
+ - 태스크는 [시나리오](./scenario.md)의 각 스텝을 정의하기 위해 구현된 프로그램이다.
5
+ - 태스크는 여러가지 기능을 복합적으로 가지지 않도록 단순하고 명료한 기능으로 구현하는 것이 좋다.
6
+ - 태스크 구현에 필요한 여러가지 정보와 기능을 지원하기 위해서 시나리오에서는 [Scenario Context](./scenario-context.md)를 제공한다.
7
+ - 태스크 종류는 다음과 같이 구분될 수 있다.
8
+
9
+ ## 구분
10
+
11
+ - 독립 태스크
12
+ - Sleep, Log,
13
+ - publish - notify data with tag to subscribers
14
+ - 플로우 컨트롤 태스크
15
+ - Goto Step : Map, Range, ..
16
+ - Sub Scenario : Map, Range, ..
17
+ - Throw
18
+ - End
19
+ - [커넥션](./connection.md) 기반 태스크
20
+ - database-query
21
+ - graphql-query, mutator
22
+ - mqtt : subscribe/publish
23
+ - indydcp : Indy7 robot control
24
+ - modbus : read/writes..
25
+ - robotics related : camera, markers, ..
@@ -1,25 +1,25 @@
1
- # task
1
+ # Task
2
2
 
3
- - 태스크는 [시나리오 엔진](./scenario-engine.md)에 의해서 실행되는 최소 단위의 작업이다.
4
- - 태스크는 [시나리오](./scenario.md)의 각 스텝을 정의하기 위해 구현된 프로그램이다.
5
- - 태스크는 여러가지 기능을 복합적으로 가지지 않도록 단순하고 명료한 기능으로 구현하는 것이 좋다.
6
- - 태스크 구현에 필요한 여러가지 정보와 기능을 지원하기 위해서 시나리오에서는 [Scenario Context](./scenario-context.md)를 제공한다.
7
- - 태스크 종류는 다음과 같이 구분될 있다.
3
+ - A task is the smallest unit of work executed by the [Scenario Engine](./scenario-engine.md).
4
+ - A task is a program implemented to define each step of a [Scenario](./scenario.md).
5
+ - It is advisable to implement tasks with simple and clear functions, avoiding complex combinations of features.
6
+ - To support various information and functionalities needed for task implementation, the scenario provides a [Scenario Context](./scenario-context.md).
7
+ - Types of tasks can be distinguished as follows:
8
8
 
9
- ## 구분
9
+ ## Categories
10
10
 
11
- - 독립 태스크
11
+ - Independent Tasks
12
12
  - Sleep, Log,
13
- - publish - notify data with tag to subscribers
14
- - 플로우 컨트롤 태스크
15
- - Goto Step : Map, Range, ..
16
- - Sub Scenario : Map, Range, ..
13
+ - Publish - notify data with tag to subscribers
14
+ - Flow Control Tasks
15
+ - Goto Step: Map, Range, ..
16
+ - Sub Scenario: Map, Range, ..
17
17
  - Throw
18
18
  - End
19
- - [커넥션](./connection.md) 기반 태스크
19
+ - [Connection](./connection.md) Based Tasks
20
20
  - database-query
21
21
  - graphql-query, mutator
22
- - mqtt : subscribe/publish
23
- - indydcp : Indy7 robot control
24
- - modbus : read/writes..
25
- - robotics related : camera, markers, ..
22
+ - mqtt: subscribe/publish
23
+ - indydcp: Indy7 robot control
24
+ - modbus: read/writes..
25
+ - robotics related: camera, markers, ..
@@ -0,0 +1,28 @@
1
+ # Tugas (Task)
2
+
3
+ - Tugas adalah unit kerja terkecil yang dilaksanakan oleh [Enjin Senario](./scenario-engine.md).
4
+ - Tugas adalah program yang dilaksanakan untuk mendefinisikan
5
+
6
+ setiap langkah dalam [Senario](./scenario.md).
7
+
8
+ - Adalah disarankan untuk melaksanakan tugas dengan fungsi yang mudah dan jelas, mengelakkan gabungan ciri-ciri yang kompleks.
9
+ - Untuk menyokong pelbagai maklumat dan fungsi yang diperlukan untuk pelaksanaan tugas, senario menyediakan [Konteks Senario](./scenario-context.md).
10
+ - Jenis tugas boleh dibezakan seperti berikut:
11
+
12
+ ## Pengelasan
13
+
14
+ - Tugas Bebas
15
+ - Sleep, Log,
16
+ - Terbitkan - maklumkan data dengan tag kepada pelanggan
17
+ - Tugas Kawalan Aliran
18
+ - Pergi ke Langkah: Map, Range, ..
19
+ - Sub Senario: Map, Range, ..
20
+ - Lempar
21
+ - Akhir
22
+ - Tugas Berasaskan [Sambungan](./connection.md)
23
+ - pertanyaan-pangkalan data
24
+ - pertanyaan-graphql, mutator
25
+ - mqtt: langgan/terbitkan
26
+ - indydcp: kawalan robot Indy7
27
+ - modbus: baca/tulis..
28
+ - berkaitan robotik: kamera, penanda, ..
@@ -0,0 +1,25 @@
1
+ # 任务(Task)
2
+
3
+ - 任务是由[场景引擎](./scenario-engine.md)执行的最小工作单位。
4
+ - 任务是为了定义[场景](./scenario.md)的每个步骤而实现的程序。
5
+ - 建议将任务实现为简单明了的功能,避免复杂的功能组合。
6
+ - 为了支持任务实现所需的各种信息和功能,场景提供了[场景上下文](./scenario-context.md)。
7
+ - 任务类型可以如下分类:
8
+
9
+ ## 分类
10
+
11
+ - 独立任务
12
+ - Sleep, Log,
13
+ - Publish - 用标签通知数据给订阅者
14
+ - 流程控制任务
15
+ - Goto Step:Map, Range, ..
16
+ - 子场景:Map, Range, ..
17
+ - Throw
18
+ - End
19
+ - [连接](./connection.md) 基础任务
20
+ - database-query
21
+ - graphql-query, mutator
22
+ - mqtt:subscribe/publish
23
+ - indydcp:Indy7 机器人控制
24
+ - modbus:读/写..
25
+ - 与机器人相关:相机、标记点等
@@ -0,0 +1,8 @@
1
+ # 状態読み取り
2
+
3
+ [状態登録簿(state-register)](../concept/state-register.md)で定義されている状態の値を読み取るタスクです。
4
+
5
+ ## パラメーター
6
+
7
+ - 名前
8
+ - 取得する状態の「名前」を指定します
@@ -0,0 +1,8 @@
1
+ # state-read
2
+
3
+ [상태등록부(state-register)](../concept/state-register.md)에 정의된 하나의 상태의 값을 읽어오는 태스크이다.
4
+
5
+ ## parameters
6
+
7
+ - name
8
+ - 가져올 상태 "이름"을 지정한다
@@ -0,0 +1,8 @@
1
+ # state-read
2
+
3
+ [State Register](../concept/state-register.md) defines a task to read the value of a state.
4
+
5
+ ## parameters
6
+
7
+ - name
8
+ - Specifies the "name" of the state to be retrieved
@@ -0,0 +1,8 @@
1
+ # bacaan keadaan
2
+
3
+ [Daftar keadaan(state-register)](../concept/state-register.md) mendefinisikan tugas untuk membaca nilai suatu keadaan.
4
+
5
+ ## parameter
6
+
7
+ - nama
8
+ - Menentukan "nama" keadaan yang hendak diambil
@@ -0,0 +1,8 @@
1
+ # 读取状态
2
+
3
+ [状态登记册(state-register)](../concept/state-register.md)中定义了一个状态值的读取任务。
4
+
5
+ ## 参数
6
+
7
+ - 名称
8
+ - 指定要获取的状态的“名称”
@@ -0,0 +1,10 @@
1
+ # 状態書き込み
2
+
3
+ [状態登録簿(state-register)](../concept/state-register.md)に定義された一つの状態に値を書き込むタスクです。
4
+
5
+ ## パラメーター
6
+
7
+ - 名前
8
+ - 書き込みたい対象状態の「名前」を指定します
9
+ - [アクセサ](../concept/data-accessor.md)
10
+ - シナリオ内のステップ名で、書き込みたいデータを指定します。
@@ -0,0 +1,10 @@
1
+ # state-write
2
+
3
+ [상태등록부(state-register)](../concept/state-register.md)에 정의된 하나의 상태에 값을 쓰는 태스크이다.
4
+
5
+ ## parameters
6
+
7
+ - name
8
+ - 쓰고자 하는 대상 상태 "이름"을 지정한다
9
+ - [accessor](../concept/data-accessor.md)
10
+ - 시나리오 내의 하나의 스텝이름으로, 쓰고자 하는 데이타를 지정한다.
@@ -0,0 +1,10 @@
1
+ # state-write
2
+
3
+ [State Register](../concept/state-register.md) defines a task for writing a value to a state.
4
+
5
+ ## parameters
6
+
7
+ - name
8
+ - Specifies the "name" of the target state to be written
9
+ - [accessor](../concept/data-accessor.md)
10
+ - A step name within the scenario, specifying the data to be written.
@@ -0,0 +1,10 @@
1
+ # tulis-keadaan
2
+
3
+ [Daftar keadaan(state-register)](../concept/state-register.md) mendefinisikan tugas untuk menulis nilai ke dalam satu keadaan.
4
+
5
+ ## parameter
6
+
7
+ - nama
8
+ - Menentukan "nama" keadaan sasaran yang ingin ditulis
9
+ - [aksesor](../concept/data-accessor.md)
10
+ - Sebuah nama langkah dalam skenario, yang menentukan data yang ingin ditulis.
@@ -0,0 +1,10 @@
1
+ # 写入状态
2
+
3
+ [状态登记册(state-register)](../concept/state-register.md)中定义了将值写入一个状态的任务。
4
+
5
+ ## 参数
6
+
7
+ - 名称
8
+ - 指定要写入的目标状态的“名称”
9
+ - [访问器](../concept/data-accessor.md)
10
+ - 在场景中的一个步骤名称,用于指定要写入的数据。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@things-factory/integration-base",
3
- "version": "6.2.33",
3
+ "version": "6.2.35",
4
4
  "main": "dist-server/index.js",
5
5
  "browser": "client/index.js",
6
6
  "things-factory": true,
@@ -26,12 +26,12 @@
26
26
  },
27
27
  "dependencies": {
28
28
  "@apollo/client": "^3.6.9",
29
- "@things-factory/api": "^6.2.33",
30
- "@things-factory/auth-base": "^6.2.33",
29
+ "@things-factory/api": "^6.2.34",
30
+ "@things-factory/auth-base": "^6.2.34",
31
31
  "@things-factory/env": "^6.2.33",
32
- "@things-factory/oauth2-client": "^6.2.33",
33
- "@things-factory/scheduler-client": "^6.2.33",
34
- "@things-factory/shell": "^6.2.33",
32
+ "@things-factory/oauth2-client": "^6.2.34",
33
+ "@things-factory/scheduler-client": "^6.2.34",
34
+ "@things-factory/shell": "^6.2.34",
35
35
  "async-mqtt": "^2.5.0",
36
36
  "chance": "^1.1.11",
37
37
  "cross-fetch": "^3.0.4",
@@ -46,5 +46,5 @@
46
46
  "devDependencies": {
47
47
  "@types/cron": "^2.0.1"
48
48
  },
49
- "gitHead": "9fe5ab84786e99bc45027820fc50d3c5eca9600f"
49
+ "gitHead": "7f44fa314cdfcb84faf99e3db9d188efb53c2423"
50
50
  }
@@ -39,3 +39,5 @@ import './headless-scrap'
39
39
  import './set-domain'
40
40
  import './oracle-procedure'
41
41
  import './jsonata'
42
+ import './state-read'
43
+ import './state-write'
@@ -10,7 +10,7 @@ import { TaskRegistry } from '../task-registry'
10
10
  async function LocalGraphqlMutate(step, context) {
11
11
  var { params, updaterId } = step
12
12
  var { mutation, variables: variablesAccessorMap, headers } = params || {}
13
- var { client, domain, user, data, variables, lng } = context
13
+ var { logger, client, domain, user, data, variables, lng } = context
14
14
 
15
15
  user =
16
16
  user ||
@@ -37,7 +37,7 @@ async function LocalGraphqlMutate(step, context) {
37
37
  return variables
38
38
  }, {})
39
39
 
40
- var { data: mutateResult } = await client.mutate({
40
+ var { data: mutateResult, errors } = await client.mutate({
41
41
  mutation: gql`
42
42
  ${mutation}
43
43
  `,
@@ -51,6 +51,12 @@ async function LocalGraphqlMutate(step, context) {
51
51
  }
52
52
  })
53
53
 
54
+ if (errors) {
55
+ errors.forEach(error => {
56
+ logger.error('GraphQL Error: %s', error)
57
+ })
58
+ }
59
+
54
60
  return {
55
61
  data: mutateResult
56
62
  }
@@ -10,7 +10,7 @@ import { TaskRegistry } from '../task-registry'
10
10
  async function LocalGraphqlQuery(step, context) {
11
11
  var { params, updaterId } = step
12
12
  var { query, variables: variablesAccessorMap, headers } = params || {}
13
- var { client, domain, user, data, variables, lng } = context
13
+ var { logger, client, domain, user, data, variables, lng } = context
14
14
 
15
15
  user =
16
16
  user ||
@@ -37,7 +37,7 @@ async function LocalGraphqlQuery(step, context) {
37
37
  return variables
38
38
  }, {})
39
39
 
40
- var { data: queryResult } = await client.query({
40
+ var { data: queryResult, errors } = await client.query({
41
41
  query: gql`
42
42
  ${query}
43
43
  `,
@@ -51,6 +51,12 @@ async function LocalGraphqlQuery(step, context) {
51
51
  }
52
52
  })
53
53
 
54
+ if (errors) {
55
+ errors.forEach(error => {
56
+ logger.error('GraphQL Error: %s', error)
57
+ })
58
+ }
59
+
54
60
  return {
55
61
  data: queryResult
56
62
  }
@@ -0,0 +1,54 @@
1
+ import gql from 'graphql-tag'
2
+ import { TaskRegistry } from '../task-registry'
3
+
4
+ async function StateRead(step, { logger, publish, data, domain, user, client }) {
5
+ var {
6
+ params: { name }
7
+ } = step
8
+
9
+ if (!name) {
10
+ throw Error(`name should be defined: name - '${name}'`)
11
+ }
12
+
13
+ var { data: queryResult, errors } = await client.query({
14
+ query: gql`
15
+ query ($name: String!) {
16
+ stateRegisterByName(state: $state, name: $name) {
17
+ state
18
+ }
19
+ }
20
+ `,
21
+ variables: {
22
+ name
23
+ },
24
+ context: {
25
+ state: {
26
+ domain,
27
+ user
28
+ }
29
+ }
30
+ })
31
+
32
+ if (errors) {
33
+ errors.forEach(error => {
34
+ logger.error('GraphQL Error: %s', error)
35
+ })
36
+ }
37
+
38
+ return {
39
+ data: queryResult?.stateRegisterByName?.state
40
+ }
41
+ }
42
+
43
+ StateRead.parameterSpec = [
44
+ {
45
+ type: 'string',
46
+ name: 'name',
47
+ label: 'name'
48
+ }
49
+ ]
50
+
51
+ StateRead.connectorFree = true
52
+ StateRead.help = 'integration/task/state-read'
53
+
54
+ TaskRegistry.registerTaskHandler('state-read', StateRead)
@@ -0,0 +1,63 @@
1
+ import gql from 'graphql-tag'
2
+ import { access } from '@things-factory/utils'
3
+ import { TaskRegistry } from '../task-registry'
4
+
5
+ async function StateWrite(step, { logger, publish, data, domain, user, client }) {
6
+ var {
7
+ params: { name, accessor }
8
+ } = step
9
+
10
+ if (!name || !accessor) {
11
+ throw Error(`name and accessor should be defined: name - '${name}', accessor - '${accessor}'`)
12
+ }
13
+
14
+ var state = access(accessor, data)
15
+
16
+ var { data: mutateResult, errors } = await client.mutate({
17
+ mutation: gql`
18
+ mutation ($state: Object!, $name: String!) {
19
+ updateStateRegisterByName(state: $state, name: $name) {
20
+ state
21
+ }
22
+ }
23
+ `,
24
+ variables: {
25
+ name,
26
+ state
27
+ },
28
+ context: {
29
+ state: {
30
+ domain,
31
+ user
32
+ }
33
+ }
34
+ })
35
+
36
+ if (errors) {
37
+ errors.forEach(error => {
38
+ logger.error('GraphQL Error: %s', error)
39
+ })
40
+ }
41
+
42
+ return {
43
+ data: mutateResult?.updateStateRegisterByName?.state
44
+ }
45
+ }
46
+
47
+ StateWrite.parameterSpec = [
48
+ {
49
+ type: 'string',
50
+ name: 'name',
51
+ label: 'name'
52
+ },
53
+ {
54
+ type: 'scenario-step-input',
55
+ name: 'accessor',
56
+ label: 'accessor'
57
+ }
58
+ ]
59
+
60
+ StateWrite.connectorFree = true
61
+ StateWrite.help = 'integration/task/state-write'
62
+
63
+ TaskRegistry.registerTaskHandler('state-write', StateWrite)
@@ -6,6 +6,7 @@ import { entities as ScenarioQueueEntities, resolvers as ScenarioQueueResolvers
6
6
  import { entities as StepEntities, resolvers as StepResolvers } from './step'
7
7
  import { entities as TaskTypeEntities, resolvers as TaskTypeResolvers } from './task-type'
8
8
  import { entities as PayloadLogEntities, resolvers as PayloadLogResolvers } from './payload-log'
9
+ import { entities as StateRegisterEntities, resolvers as StateRegisterResolvers } from './state-register'
9
10
  import { resolvers as IntegrationAnalysisQuery } from './analysis'
10
11
 
11
12
  export * from './property-spec'
@@ -18,6 +19,7 @@ export * from './scenario-queue/scenario-queue-type'
18
19
  export * from './step/step-type'
19
20
  export * from './scenario-flow/scenario-flow'
20
21
  export * from './payload-log/payload-log'
22
+ export * from './state-register/state-register'
21
23
 
22
24
  export const entities = [
23
25
  ...TaskTypeEntities,
@@ -27,7 +29,8 @@ export const entities = [
27
29
  ...ScenarioInstanceEntities,
28
30
  ...ScenarioQueueEntities,
29
31
  ...StepEntities,
30
- ...PayloadLogEntities
32
+ ...PayloadLogEntities,
33
+ ...StateRegisterEntities
31
34
  ]
32
35
 
33
36
  export const schema = {
@@ -40,7 +43,8 @@ export const schema = {
40
43
  ...ScenarioQueueResolvers,
41
44
  ...StepResolvers,
42
45
  ...PayloadLogResolvers,
43
- ...IntegrationAnalysisQuery
46
+ ...IntegrationAnalysisQuery,
47
+ ...StateRegisterResolvers
44
48
  ]
45
49
  }
46
50
 
@@ -0,0 +1,7 @@
1
+ import { StateRegister } from './state-register'
2
+ import { StateRegisterQuery } from './state-register-query'
3
+ import { StateRegisterMutation } from './state-register-mutation'
4
+
5
+ export const entities = [StateRegister]
6
+ export const resolvers = [StateRegisterQuery, StateRegisterMutation]
7
+ export const subscribers = []