@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.
Files changed (174) 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 +3 -2
  10. package/dist-server/engine/index.js +3 -2
  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/engine/task/mqtt-publish.js +29 -6
  23. package/dist-server/engine/task/mqtt-publish.js.map +1 -1
  24. package/dist-server/engine/task/mqtt-subscribe.js +178 -64
  25. package/dist-server/engine/task/mqtt-subscribe.js.map +1 -1
  26. package/dist-server/index.d.ts +6 -6
  27. package/dist-server/index.js +10 -10
  28. package/dist-server/index.js.map +1 -1
  29. package/dist-server/routes.js +6 -6
  30. package/dist-server/routes.js.map +1 -1
  31. package/dist-server/service/connection/connection-mutation.js +17 -5
  32. package/dist-server/service/connection/connection-mutation.js.map +1 -1
  33. package/dist-server/service/connection/connection-query.js +3 -0
  34. package/dist-server/service/connection/connection-query.js.map +1 -1
  35. package/dist-server/service/index.d.ts +1 -1
  36. package/dist-server/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +12 -11
  38. package/translations/en.json +12 -4
  39. package/translations/ja.json +12 -4
  40. package/translations/ko.json +12 -4
  41. package/translations/ms.json +12 -4
  42. package/translations/zh.json +12 -4
  43. package/server/controllers/index.ts +0 -2
  44. package/server/controllers/publish-data.ts +0 -29
  45. package/server/controllers/scenario-controller.ts +0 -154
  46. package/server/engine/analyzer/analyze-integration.ts +0 -115
  47. package/server/engine/connection-manager.ts +0 -232
  48. package/server/engine/connector/echo-back-connector.ts +0 -51
  49. package/server/engine/connector/echo-back-server.ts +0 -72
  50. package/server/engine/connector/graphql-connector.ts +0 -126
  51. package/server/engine/connector/http-connector.ts +0 -65
  52. package/server/engine/connector/index.ts +0 -12
  53. package/server/engine/connector/mqtt-connector.ts +0 -78
  54. package/server/engine/connector/mssql-connector.ts +0 -152
  55. package/server/engine/connector/mysql-connector.ts +0 -94
  56. package/server/engine/connector/operato-connector.ts +0 -264
  57. package/server/engine/connector/oracle-connector.ts +0 -218
  58. package/server/engine/connector/postgresql-connector.ts +0 -152
  59. package/server/engine/connector/proxy-connector.ts +0 -53
  60. package/server/engine/connector/socket-server.ts +0 -86
  61. package/server/engine/connector/sqlite-connector.ts +0 -69
  62. package/server/engine/edge-client.ts +0 -45
  63. package/server/engine/index.ts +0 -10
  64. package/server/engine/pending-queue.ts +0 -97
  65. package/server/engine/scenario-engine.ts +0 -106
  66. package/server/engine/task/book-up-scenario.ts +0 -73
  67. package/server/engine/task/csv-readline.ts +0 -127
  68. package/server/engine/task/data-accessor.ts +0 -36
  69. package/server/engine/task/data-mapper.ts +0 -47
  70. package/server/engine/task/database-query.ts +0 -56
  71. package/server/engine/task/echo-receive.ts +0 -21
  72. package/server/engine/task/echo-send.ts +0 -32
  73. package/server/engine/task/empty-check.ts +0 -38
  74. package/server/engine/task/end.ts +0 -18
  75. package/server/engine/task/floating-point.ts +0 -71
  76. package/server/engine/task/goto.ts +0 -27
  77. package/server/engine/task/graphql-mutate.ts +0 -79
  78. package/server/engine/task/graphql-query.ts +0 -78
  79. package/server/engine/task/headless-post.ts +0 -147
  80. package/server/engine/task/headless-scrap.ts +0 -80
  81. package/server/engine/task/http-get.ts +0 -117
  82. package/server/engine/task/http-post.ts +0 -148
  83. package/server/engine/task/index.ts +0 -45
  84. package/server/engine/task/jsonata.ts +0 -45
  85. package/server/engine/task/local-graphql-mutate.ts +0 -100
  86. package/server/engine/task/local-graphql-query.ts +0 -100
  87. package/server/engine/task/log.ts +0 -78
  88. package/server/engine/task/mqtt-publish.ts +0 -45
  89. package/server/engine/task/mqtt-subscribe.ts +0 -139
  90. package/server/engine/task/mssql-procedure.ts +0 -128
  91. package/server/engine/task/oracle-procedure.ts +0 -124
  92. package/server/engine/task/pick-pending-scenario.ts +0 -80
  93. package/server/engine/task/publish.ts +0 -40
  94. package/server/engine/task/random.ts +0 -53
  95. package/server/engine/task/reset-pending-queue.ts +0 -17
  96. package/server/engine/task/script.ts +0 -63
  97. package/server/engine/task/set-domain.ts +0 -37
  98. package/server/engine/task/sleep.ts +0 -34
  99. package/server/engine/task/socket-listener.ts +0 -96
  100. package/server/engine/task/state-group-read.ts +0 -69
  101. package/server/engine/task/state-read.ts +0 -56
  102. package/server/engine/task/state-write.ts +0 -65
  103. package/server/engine/task/stop-scenario.ts +0 -44
  104. package/server/engine/task/sub-scenario.ts +0 -57
  105. package/server/engine/task/switch-goto.ts +0 -43
  106. package/server/engine/task/switch-range-goto.ts +0 -53
  107. package/server/engine/task/switch-range-scenario.ts +0 -79
  108. package/server/engine/task/switch-range-set.ts +0 -48
  109. package/server/engine/task/switch-scenario.ts +0 -67
  110. package/server/engine/task/switch-set.ts +0 -37
  111. package/server/engine/task/throw.ts +0 -27
  112. package/server/engine/task/utils/headless-pool-for-scenario.ts +0 -71
  113. package/server/engine/task/utils/substitute.ts +0 -44
  114. package/server/engine/task/variables.ts +0 -17
  115. package/server/engine/task-registry.ts +0 -23
  116. package/server/engine/types.ts +0 -114
  117. package/server/index.ts +0 -20
  118. package/server/migrations/index.ts +0 -9
  119. package/server/restful/index.ts +0 -1
  120. package/server/restful/unstable/index.ts +0 -7
  121. package/server/restful/unstable/run-scenario.ts +0 -51
  122. package/server/restful/unstable/scenario-instance.ts +0 -52
  123. package/server/restful/unstable/scenario-instances.ts +0 -80
  124. package/server/restful/unstable/scenario.ts +0 -41
  125. package/server/restful/unstable/scenarios.ts +0 -69
  126. package/server/restful/unstable/start-scenario.ts +0 -33
  127. package/server/restful/unstable/stop-scenario.ts +0 -30
  128. package/server/routers/scenario-schedule-callback-router.ts +0 -69
  129. package/server/routers/scenario-view-router.ts +0 -46
  130. package/server/routes.ts +0 -35
  131. package/server/service/analysis/analysis-query.ts +0 -13
  132. package/server/service/analysis/index.ts +0 -3
  133. package/server/service/connection/connection-mutation.ts +0 -190
  134. package/server/service/connection/connection-query.ts +0 -87
  135. package/server/service/connection/connection-subscription.ts +0 -104
  136. package/server/service/connection/connection-type.ts +0 -305
  137. package/server/service/connection/index.ts +0 -7
  138. package/server/service/connector/connector-query.ts +0 -62
  139. package/server/service/connector/connector-type.ts +0 -29
  140. package/server/service/connector/index.ts +0 -4
  141. package/server/service/index.ts +0 -52
  142. package/server/service/payload-log/index.ts +0 -7
  143. package/server/service/payload-log/payload-log-mutation.ts +0 -151
  144. package/server/service/payload-log/payload-log-query.ts +0 -49
  145. package/server/service/payload-log/payload-log-type.ts +0 -36
  146. package/server/service/payload-log/payload-log.ts +0 -100
  147. package/server/service/property-spec.ts +0 -24
  148. package/server/service/scenario/index.ts +0 -6
  149. package/server/service/scenario/scenario-mutation.ts +0 -396
  150. package/server/service/scenario/scenario-query.ts +0 -109
  151. package/server/service/scenario/scenario-type.ts +0 -78
  152. package/server/service/scenario/scenario.ts +0 -124
  153. package/server/service/scenario-flow/scenario-flow.ts +0 -17
  154. package/server/service/scenario-instance/index.ts +0 -6
  155. package/server/service/scenario-instance/scenario-instance-mutation.ts +0 -44
  156. package/server/service/scenario-instance/scenario-instance-query.ts +0 -42
  157. package/server/service/scenario-instance/scenario-instance-subscription.ts +0 -118
  158. package/server/service/scenario-instance/scenario-instance-type.ts +0 -557
  159. package/server/service/scenario-queue/index.ts +0 -4
  160. package/server/service/scenario-queue/scenario-queue-subscription.ts +0 -55
  161. package/server/service/scenario-queue/scenario-queue-type.ts +0 -27
  162. package/server/service/state-register/data-resolver.ts +0 -56
  163. package/server/service/state-register/index.ts +0 -8
  164. package/server/service/state-register/state-register-mutation.ts +0 -166
  165. package/server/service/state-register/state-register-query.ts +0 -80
  166. package/server/service/state-register/state-register-type.ts +0 -80
  167. package/server/service/state-register/state-register.ts +0 -113
  168. package/server/service/step/index.ts +0 -6
  169. package/server/service/step/step-mutation.ts +0 -52
  170. package/server/service/step/step-query.ts +0 -55
  171. package/server/service/step/step-type.ts +0 -238
  172. package/server/service/task-type/index.ts +0 -4
  173. package/server/service/task-type/task-type-query.ts +0 -95
  174. package/server/service/task-type/task-type-type.ts +0 -29
@@ -1,128 +0,0 @@
1
- import { logger } from '@things-factory/env'
2
- import { access } from '@things-factory/utils'
3
- import { ConnectionManager } from '../connection-manager'
4
- import { TaskRegistry } from '../task-registry'
5
- import { InputStep } from '../../service/step/step-type'
6
- import { Context } from '../types'
7
- import 'ses'
8
-
9
- try {
10
- var mssql = require('mssql')
11
- } catch (err) {
12
- logger.error('mssql module loading failed', err)
13
- }
14
-
15
- type ProcedureParameterType = {
16
- name: string
17
- dir: string
18
- type: string
19
- val?: any
20
- accessor?: string
21
- maxSize?: number
22
- }
23
-
24
- type ValueType = {
25
- code?: string
26
- procedure?: string
27
- parameters?: ProcedureParameterType[]
28
- }
29
-
30
- const DIR = {
31
- In: 'in',
32
- Out: 'out',
33
- Inout: 'inout' /* 초기값이 있는 out 파라미터 */
34
- }
35
-
36
- const NUMBER_TYPES = [
37
- 'TINYINT',
38
- 'SMALLINT',
39
- 'INT',
40
- 'BIGINT',
41
- 'FLOAT',
42
- 'READ',
43
- 'DECIMAL',
44
- 'NUMERIC',
45
- 'MONEY',
46
- 'SMALLMONEY'
47
- ]
48
-
49
- const DATE_TYPES = ['DATE', 'TIME', 'DATETIME', 'SMALLDATETIME', 'DATETIME2']
50
- const PARAMETERIZED_STRINGS = ['NCHAR', 'NVARCHAR', 'NTEXT', 'DECIMAL', 'NUMERIC']
51
-
52
- async function MssqlProcedure(step: InputStep, context: Context) {
53
- var { domain, user, data, variables, lng } = context
54
- var { connection: connectionName, params } = step
55
-
56
- var { code = '', procedure = '', parameters = [] } = params.parameters as ValueType
57
-
58
- var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
59
-
60
- if (!code) {
61
- throw 'procedure code not defined'
62
- }
63
-
64
- const compartment = new Compartment({
65
- domain,
66
- user,
67
- lng,
68
- data,
69
- variables,
70
- console
71
- })
72
-
73
- let evalCode
74
- try {
75
- evalCode = compartment.evaluate('`' + code + '`')
76
- } catch (err) {
77
- throw new Error(`Failed to evaluate code: ${err.message}`)
78
- }
79
-
80
- code = evalCode
81
-
82
- const procedureParameters =
83
- parameters &&
84
- parameters.reduce((sum, { name, val, dir, type, accessor, maxSize }) => {
85
- sum[name] = {
86
- dir: DIR[dir],
87
- type
88
- }
89
-
90
- const calculated = accessor ? access(accessor, data) || val : val
91
-
92
- if (calculated !== undefined) {
93
- sum[name].val = NUMBER_TYPES.includes(type)
94
- ? Number(calculated)
95
- : DATE_TYPES.includes(type)
96
- ? new Date(calculated)
97
- : String(calculated)
98
- }
99
-
100
- if ((dir == DIR.In || dir == DIR.Inout) && maxSize > 0 && type == 'String') {
101
- sum[name].type = mssql?.VarChar(maxSize)
102
- sum[name].maxSize = maxSize
103
- }
104
-
105
- return sum
106
- }, {})
107
-
108
- const result = await dbconnection.execute(procedure, procedureParameters)
109
-
110
- return {
111
- data: result
112
- }
113
- }
114
-
115
- MssqlProcedure.parameterSpec = [
116
- {
117
- type: 'procedure-parameters',
118
- name: 'parameters',
119
- label: '',
120
- property: {
121
- dbtype: 'mssql'
122
- }
123
- }
124
- ]
125
-
126
- MssqlProcedure.help = 'integration/task/mssql-procedure'
127
-
128
- TaskRegistry.registerTaskHandler('mssql-procedure', MssqlProcedure)
@@ -1,124 +0,0 @@
1
- import { logger } from '@things-factory/env'
2
- import { access } from '@things-factory/utils'
3
- import { ConnectionManager } from '../connection-manager'
4
- import { TaskRegistry } from '../task-registry'
5
- import { InputStep } from '../../service/step/step-type'
6
- import { Context } from '../types'
7
- import 'ses'
8
-
9
- try {
10
- var oracledb = require('oracledb')
11
- } catch (err) {
12
- logger.error('oracledb module loading failed', err)
13
- }
14
-
15
- type ProcedureParameterType = {
16
- name: string
17
- dir: string
18
- type: string
19
- val?: any
20
- accessor?: string
21
- maxSize?: number
22
- }
23
-
24
- type ValueType = {
25
- code?: string
26
- procedure?: string
27
- parameters?: ProcedureParameterType[]
28
- }
29
-
30
- const TYPES = {
31
- Number: oracledb?.NUMBER,
32
- String: oracledb?.STRING,
33
- Date: oracledb?.DATE,
34
- Buffer: oracledb?.BUFFER,
35
- Blob: oracledb?.BLOB,
36
- Clob: oracledb?.CLOB,
37
- Cursor: oracledb?.CURSOR
38
- }
39
-
40
- const DIR = {
41
- In: oracledb?.BIND_IN,
42
- Inout: oracledb?.BIND_INOUT,
43
- Out: oracledb?.BIND_OUT
44
- }
45
-
46
- async function OracleProcedure(step: InputStep, context: Context) {
47
- var { domain, user, data, variables, lng } = context
48
- var { connection: connectionName, params } = step
49
-
50
- var { code = '', parameters = [] } = params.parameters as ValueType
51
-
52
- var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
53
-
54
- if (!code) {
55
- throw 'procedure code not defined'
56
- }
57
-
58
- const compartment = new Compartment({
59
- domain,
60
- user,
61
- lng,
62
- data,
63
- variables,
64
- console
65
- })
66
-
67
- let evalCode
68
- try {
69
- evalCode = compartment.evaluate('`' + code + '`')
70
- } catch (err) {
71
- throw new Error(`Failed to evaluate code: ${err.message}`)
72
- }
73
-
74
- code = evalCode
75
-
76
- const procedureParameters =
77
- parameters &&
78
- parameters.reduce((sum, { name, val, dir, type, accessor, maxSize }) => {
79
- sum[name] = {
80
- dir: DIR[dir],
81
- type: TYPES[type]
82
- }
83
-
84
- const calculated = accessor ? access(accessor, data) || val : val
85
-
86
- if (calculated !== undefined) {
87
- sum[name].val =
88
- type === 'Date'
89
- ? new Date(calculated)
90
- : type == 'Number'
91
- ? Number(calculated)
92
- : type == 'String'
93
- ? String(calculated)
94
- : calculated
95
- }
96
-
97
- if (maxSize) {
98
- sum[name].maxSize = maxSize
99
- }
100
-
101
- return sum
102
- }, {})
103
-
104
- const result = await dbconnection.execute(code, procedureParameters)
105
-
106
- return {
107
- data: result
108
- }
109
- }
110
-
111
- OracleProcedure.parameterSpec = [
112
- {
113
- type: 'procedure-parameters',
114
- name: 'parameters',
115
- label: '',
116
- property: {
117
- dbtype: 'oracle'
118
- }
119
- }
120
- ]
121
-
122
- OracleProcedure.help = 'integration/task/oracle-procedure'
123
-
124
- TaskRegistry.registerTaskHandler('oracle-procedure', OracleProcedure)
@@ -1,80 +0,0 @@
1
- import { getRepository } from '@things-factory/shell'
2
- import { sleep } from '@things-factory/utils'
3
-
4
- import { Scenario } from '../../service/scenario/scenario'
5
- import { ScenarioEngine } from '../scenario-engine'
6
- import { TaskRegistry } from '../task-registry'
7
- import { InputStep } from '../../service/step/step-type'
8
- import { Context } from '../types'
9
-
10
- const debug = require('debug')('things-factory:integration-base:pick-pending-scenario')
11
-
12
- async function PickPendingScenario(step: InputStep, context: Context) {
13
- var { logger, load, domain } = context
14
- var { params } = step
15
- var { tag = '', waitFor = -1 } = params || {}
16
-
17
- waitFor = Number(waitFor) || -1
18
- const till = Date.now() + waitFor
19
-
20
- const pendingQueue = ScenarioEngine.getPendingQueue(domain)
21
-
22
- // long-term task need to check state whether this scenario is still going.
23
- while (true && context.checkState()) {
24
- var { stuff } = pendingQueue.pick(tag) || {}
25
- if (stuff) {
26
- break
27
- }
28
-
29
- let toTill = waitFor == -1 ? 1000 : till - Date.now()
30
- if (toTill <= 0) {
31
- return {}
32
- }
33
-
34
- await sleep(Math.min(1000, toTill))
35
- }
36
-
37
- if (!stuff) {
38
- return
39
- }
40
-
41
- var { scenario, variables } = stuff
42
-
43
- var subscenario = await getRepository(Scenario).findOne({
44
- where: {
45
- id: scenario
46
- },
47
- relations: ['steps', 'domain']
48
- })
49
-
50
- logger.info(`Scenario '${subscenario.name}' Started.`)
51
- var subContext = await load(step, subscenario, {
52
- ...context,
53
- data: {},
54
- variables
55
- })
56
- logger.info(`Scenario '${subscenario.name}' done.`)
57
-
58
- return {
59
- data: subContext.data
60
- }
61
- }
62
-
63
- PickPendingScenario.parameterSpec = [
64
- {
65
- type: 'string',
66
- name: 'tag',
67
- label: 'tag'
68
- },
69
- {
70
- type: 'number',
71
- name: 'waitFor',
72
- label: 'wait-for',
73
- placeHolder: 'milli-seconds'
74
- }
75
- ]
76
-
77
- PickPendingScenario.connectorFree = true
78
- PickPendingScenario.help = 'integration/task/pick-pending-scenario'
79
-
80
- TaskRegistry.registerTaskHandler('pick-pending-scenario', PickPendingScenario)
@@ -1,40 +0,0 @@
1
- import { access } from '@things-factory/utils'
2
- import { TaskRegistry } from '../task-registry'
3
- import { InputStep } from '../../service/step/step-type'
4
- import { Context } from '../types'
5
-
6
- async function Publish(step: InputStep, { logger, publish, data }: Context) {
7
- var {
8
- params: { tag, accessor }
9
- } = step
10
-
11
- if (!tag || !accessor) {
12
- throw Error(`tag and accessor should be defined: tag - '${tag}', accessor - '${accessor}'`)
13
- }
14
-
15
- var value = access(accessor, data)
16
-
17
- publish(tag, value)
18
-
19
- return {
20
- data: value
21
- }
22
- }
23
-
24
- Publish.parameterSpec = [
25
- {
26
- type: 'string',
27
- name: 'tag',
28
- label: 'tag'
29
- },
30
- {
31
- type: 'scenario-step-input',
32
- name: 'accessor',
33
- label: 'accessor'
34
- }
35
- ]
36
-
37
- Publish.connectorFree = true
38
- Publish.help = 'integration/task/publish'
39
-
40
- TaskRegistry.registerTaskHandler('publish', Publish)
@@ -1,53 +0,0 @@
1
- import { TaskRegistry } from '../task-registry'
2
- import Chance from 'chance'
3
-
4
- import { InputStep } from '../../service/step/step-type'
5
- import { Context } from '../types'
6
-
7
- const formats = [
8
- 'bool,character,floating,integer,letter,natural,string',
9
- 'paragraph,sentence,syllable,word',
10
- 'age,birthday,cf,cpf,first,gender,last,name,prefix,ssn,suffix',
11
- 'android_id,apple_token,bb_pin,wp7_anid,wp8_anid2,avatar,color',
12
- 'company,domain,email,fbid,google_analytics,hashtag,ip,ipv6,klout,profession,tld,twitter,url',
13
- 'address,altitude,areacode,city,coordinates,country,depth,geohash,latitude,longitude,phone,postal,province,state,street,zip',
14
- 'ampm,date,hammertime,hour,millisecond,minute,month,second,timestamp,timezone,weekday,year',
15
- 'cc,cc_type,currency,currency_pair,dollar,euro,exp,exp_month,exp_year',
16
- 'coin,d4,d6,d8,d10,d12,d20,d30,d100,guid,hash'
17
- ]
18
- .join(',')
19
- .split(',')
20
-
21
- async function Random(step: InputStep, { logger, publish, data }: Context) {
22
- var {
23
- params: { format = 'integer', count = 1 }
24
- } = step
25
-
26
- const chance = new Chance()
27
-
28
- return {
29
- data: chance.n(chance[format], count)
30
- }
31
- }
32
-
33
- Random.parameterSpec = [
34
- {
35
- type: 'select',
36
- label: 'format',
37
- name: 'format',
38
- property: {
39
- options: formats.map(format => ({ display: format, value: format }))
40
- }
41
- },
42
- {
43
- type: 'number',
44
- label: 'count',
45
- name: 'count',
46
- placeholder: '1'
47
- }
48
- ]
49
-
50
- Random.connectorFree = true
51
- Random.help = 'integration/task/random'
52
-
53
- TaskRegistry.registerTaskHandler('random', Random)
@@ -1,17 +0,0 @@
1
- import { TaskRegistry } from '../task-registry'
2
- import { ScenarioEngine } from '../scenario-engine'
3
- import { InputStep } from '../../service/step/step-type'
4
- import { Context } from '../types'
5
-
6
- async function ResetPendingScenario(step: InputStep, { domain }: Context) {
7
- const pendingQueue = ScenarioEngine.getPendingQueue(domain)
8
- pendingQueue.reset()
9
-
10
- return {}
11
- }
12
-
13
- ResetPendingScenario.parameterSpec = []
14
-
15
- ResetPendingScenario.connectorFree = true
16
-
17
- TaskRegistry.registerTaskHandler('reset-pending-scenario', ResetPendingScenario)
@@ -1,63 +0,0 @@
1
- import { TaskRegistry } from '../task-registry'
2
- import { InputStep } from '../../service/step/step-type'
3
- import { Context } from '../types'
4
- import 'ses'
5
-
6
- async function Script(step: InputStep, context: Context) {
7
- const {
8
- params: { script }
9
- } = step
10
-
11
- const { domain, user, data, variables, lng, logger } = context
12
-
13
- const compartment = new Compartment({
14
- domain,
15
- user,
16
- data,
17
- variables,
18
- logger,
19
- lng,
20
- console,
21
- Math,
22
- JSON,
23
- Date,
24
- setTimeout,
25
- setInterval,
26
- clearTimeout,
27
- clearInterval
28
- })
29
-
30
- const scriptSource = `
31
- (async () => {
32
- ${script}
33
- })();
34
- `
35
-
36
- try {
37
- return {
38
- data: await compartment.evaluate(scriptSource)
39
- }
40
- } catch (err) {
41
- throw new Error(`Script execution failed: ${err.message}`)
42
- }
43
- }
44
-
45
- Script.parameterSpec = [
46
- {
47
- type: 'textarea',
48
- name: 'script',
49
- label: 'script',
50
- property: {
51
- language: 'javascript',
52
- showLineNumbers: true
53
- },
54
- styles: {
55
- flex: '1'
56
- }
57
- }
58
- ]
59
-
60
- Script.connectorFree = true
61
- Script.help = 'integration/task/script'
62
-
63
- TaskRegistry.registerTaskHandler('script', Script)
@@ -1,37 +0,0 @@
1
- import { TaskRegistry } from '../task-registry'
2
- import { Domain, getRepository } from '@things-factory/shell'
3
-
4
- import { InputStep } from '../../service/step/step-type'
5
- import { Context } from '../types'
6
-
7
- async function SetDomain(step: InputStep, context: Context) {
8
- var {
9
- params: { subdomain }
10
- } = step
11
-
12
- var { logger, domain } = context || {}
13
-
14
- logger.info(`domain => ${subdomain}`)
15
-
16
- if (subdomain) {
17
- context.domain = (await getRepository(Domain).findOneBy({ subdomain })) || domain
18
- }
19
-
20
- return {
21
- data: domain.subdomain // previous domain
22
- }
23
- }
24
-
25
- SetDomain.parameterSpec = [
26
- {
27
- type: 'string',
28
- name: 'subdomain',
29
- placeholder: 'subdomain',
30
- label: 'subdomain'
31
- }
32
- ]
33
-
34
- SetDomain.connectorFree = true
35
- SetDomain.help = 'integration/task/set-domain'
36
-
37
- TaskRegistry.registerTaskHandler('set-domain', SetDomain)
@@ -1,34 +0,0 @@
1
- import { sleep } from '@things-factory/utils'
2
- import { TaskRegistry } from '../task-registry'
3
- import { InputStep } from '../../service/step/step-type'
4
- import { Context } from '../types'
5
-
6
- async function Sleep(step: InputStep, { logger }: Context) {
7
- var {
8
- params: { duration }
9
- } = step
10
-
11
- logger.info(`sleep ${duration}ms`)
12
-
13
- if (duration) {
14
- await sleep(duration)
15
- }
16
-
17
- return {
18
- data: duration
19
- }
20
- }
21
-
22
- Sleep.parameterSpec = [
23
- {
24
- type: 'number',
25
- name: 'duration',
26
- placeholder: 'milli-seconds',
27
- label: 'duration'
28
- }
29
- ]
30
-
31
- Sleep.connectorFree = true
32
- Sleep.help = 'integration/task/sleep'
33
-
34
- TaskRegistry.registerTaskHandler('sleep', Sleep)
@@ -1,96 +0,0 @@
1
- import { sleep } from '@things-factory/utils'
2
- import { TaskRegistry } from '../task-registry'
3
- import { ConnectionManager } from '../connection-manager'
4
- import { InputStep } from '../../service/step/step-type'
5
- import { Context } from '../types'
6
-
7
- function convertDataFormat(data, format) {
8
- try {
9
- if (format == 'json') {
10
- return JSON.parse(data)
11
- } else if (format == 'csv') {
12
- return data.split(',')
13
- }
14
- } catch (e) {
15
- return data.toString()
16
- }
17
-
18
- return data
19
- }
20
-
21
- async function SocketListener(step: InputStep, context: Context) {
22
- //get connection data
23
- const {
24
- connection: connectionName,
25
- params: { dataFormat = 'JSON' },
26
- name
27
- } = step
28
-
29
- const { domain, logger, closures, __socket_listener } = context
30
- logger.info('\r\n')
31
- if (!__socket_listener) {
32
- context.__socket_listener = {}
33
- }
34
-
35
- // get socket information from connection
36
- var connection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
37
- if (!connection) {
38
- throw new Error(`connector '${connectionName}' is not established.`)
39
- }
40
-
41
- /*
42
- * 1. listner list에서 listner를 찾는다. 없으면, 생성한다.
43
- */
44
- if (!context.__socket_listener[name]) {
45
- try {
46
- var MESSAGES = []
47
- context.__socket_listener[name] = async () => {
48
- while (MESSAGES.length == 0) {
49
- await sleep(100)
50
- }
51
- var message = MESSAGES.shift()
52
- return {
53
- message
54
- }
55
- }
56
-
57
- await connection.addListener('socket-message-arrive', async message => {
58
- logger.info(message.toString())
59
- MESSAGES.push(convertDataFormat(message.toString(), dataFormat))
60
- })
61
- } catch (e) {
62
- logger.error(e)
63
- }
64
- }
65
-
66
- var { message } = await context.__socket_listener[name]()
67
-
68
- return {
69
- data: message
70
- }
71
- }
72
-
73
- SocketListener.parameterSpec = [
74
- {
75
- type: 'select',
76
- label: 'data-format',
77
- name: 'dataFormat',
78
- property: {
79
- options: [
80
- {
81
- display: 'CSV',
82
- value: 'csv'
83
- },
84
- {
85
- display: 'JSON',
86
- value: 'json'
87
- },
88
- {
89
- display: 'String',
90
- value: 'string'
91
- }
92
- ]
93
- }
94
- }
95
- ]
96
- TaskRegistry.registerTaskHandler('socket-listener', SocketListener)