@things-factory/integration-base 8.0.0-beta.0 → 8.0.0-beta.2

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 (136) hide show
  1. package/package.json +10 -10
  2. package/server/controllers/index.ts +0 -2
  3. package/server/controllers/publish-data.ts +0 -29
  4. package/server/controllers/scenario-controller.ts +0 -156
  5. package/server/engine/analyzer/analyze-integration.ts +0 -115
  6. package/server/engine/connection-manager.ts +0 -239
  7. package/server/engine/connector/echo-back-connector.ts +0 -51
  8. package/server/engine/connector/echo-back-server.ts +0 -72
  9. package/server/engine/connector/graphql-connector.ts +0 -126
  10. package/server/engine/connector/headless-connector.ts +0 -341
  11. package/server/engine/connector/http-connector.ts +0 -65
  12. package/server/engine/connector/index.ts +0 -13
  13. package/server/engine/connector/mqtt-connector.ts +0 -78
  14. package/server/engine/connector/mssql-connector.ts +0 -152
  15. package/server/engine/connector/mysql-connector.ts +0 -94
  16. package/server/engine/connector/operato-connector.ts +0 -264
  17. package/server/engine/connector/oracle-connector.ts +0 -218
  18. package/server/engine/connector/postgresql-connector.ts +0 -152
  19. package/server/engine/connector/proxy-connector.ts +0 -53
  20. package/server/engine/connector/socket-server.ts +0 -86
  21. package/server/engine/connector/sqlite-connector.ts +0 -69
  22. package/server/engine/edge-client.ts +0 -45
  23. package/server/engine/index.ts +0 -11
  24. package/server/engine/pending-queue.ts +0 -97
  25. package/server/engine/resource-pool/headless-pool.ts +0 -136
  26. package/server/engine/resource-pool/index.ts +0 -1
  27. package/server/engine/scenario-engine.ts +0 -106
  28. package/server/engine/task/book-up-scenario.ts +0 -73
  29. package/server/engine/task/csv-readline.ts +0 -127
  30. package/server/engine/task/data-accessor.ts +0 -36
  31. package/server/engine/task/data-mapper.ts +0 -47
  32. package/server/engine/task/database-query.ts +0 -56
  33. package/server/engine/task/echo-receive.ts +0 -21
  34. package/server/engine/task/echo-send.ts +0 -32
  35. package/server/engine/task/empty-check.ts +0 -38
  36. package/server/engine/task/end.ts +0 -18
  37. package/server/engine/task/floating-point.ts +0 -71
  38. package/server/engine/task/goto.ts +0 -27
  39. package/server/engine/task/graphql-mutate.ts +0 -79
  40. package/server/engine/task/graphql-query.ts +0 -78
  41. package/server/engine/task/headless-post.ts +0 -128
  42. package/server/engine/task/headless-scrap.ts +0 -83
  43. package/server/engine/task/http-get.ts +0 -117
  44. package/server/engine/task/http-post.ts +0 -148
  45. package/server/engine/task/index.ts +0 -45
  46. package/server/engine/task/jsonata.ts +0 -45
  47. package/server/engine/task/local-graphql-mutate.ts +0 -100
  48. package/server/engine/task/local-graphql-query.ts +0 -100
  49. package/server/engine/task/log.ts +0 -78
  50. package/server/engine/task/mqtt-publish.ts +0 -45
  51. package/server/engine/task/mqtt-subscribe.ts +0 -139
  52. package/server/engine/task/mssql-procedure.ts +0 -128
  53. package/server/engine/task/oracle-procedure.ts +0 -124
  54. package/server/engine/task/pick-pending-scenario.ts +0 -80
  55. package/server/engine/task/publish.ts +0 -40
  56. package/server/engine/task/random.ts +0 -53
  57. package/server/engine/task/reset-pending-queue.ts +0 -17
  58. package/server/engine/task/script.ts +0 -63
  59. package/server/engine/task/set-domain.ts +0 -37
  60. package/server/engine/task/sleep.ts +0 -34
  61. package/server/engine/task/socket-listener.ts +0 -96
  62. package/server/engine/task/state-group-read.ts +0 -69
  63. package/server/engine/task/state-read.ts +0 -56
  64. package/server/engine/task/state-write.ts +0 -65
  65. package/server/engine/task/stop-scenario.ts +0 -44
  66. package/server/engine/task/sub-scenario.ts +0 -57
  67. package/server/engine/task/switch-goto.ts +0 -43
  68. package/server/engine/task/switch-range-goto.ts +0 -53
  69. package/server/engine/task/switch-range-scenario.ts +0 -79
  70. package/server/engine/task/switch-range-set.ts +0 -48
  71. package/server/engine/task/switch-scenario.ts +0 -67
  72. package/server/engine/task/switch-set.ts +0 -37
  73. package/server/engine/task/throw.ts +0 -27
  74. package/server/engine/task/utils/headless-pool-for-scenario.ts +0 -71
  75. package/server/engine/task/utils/substitute.ts +0 -44
  76. package/server/engine/task/variables.ts +0 -17
  77. package/server/engine/task-registry.ts +0 -23
  78. package/server/engine/types.ts +0 -114
  79. package/server/index.ts +0 -20
  80. package/server/migrations/index.ts +0 -9
  81. package/server/restful/index.ts +0 -1
  82. package/server/restful/unstable/index.ts +0 -7
  83. package/server/restful/unstable/run-scenario.ts +0 -51
  84. package/server/restful/unstable/scenario-instance.ts +0 -52
  85. package/server/restful/unstable/scenario-instances.ts +0 -80
  86. package/server/restful/unstable/scenario.ts +0 -41
  87. package/server/restful/unstable/scenarios.ts +0 -69
  88. package/server/restful/unstable/start-scenario.ts +0 -33
  89. package/server/restful/unstable/stop-scenario.ts +0 -30
  90. package/server/routers/scenario-schedule-callback-router.ts +0 -69
  91. package/server/routers/scenario-view-router.ts +0 -46
  92. package/server/routes.ts +0 -30
  93. package/server/service/analysis/analysis-query.ts +0 -13
  94. package/server/service/analysis/index.ts +0 -3
  95. package/server/service/connection/connection-mutation.ts +0 -190
  96. package/server/service/connection/connection-query.ts +0 -87
  97. package/server/service/connection/connection-subscription.ts +0 -104
  98. package/server/service/connection/connection-type.ts +0 -288
  99. package/server/service/connection/index.ts +0 -7
  100. package/server/service/connector/connector-query.ts +0 -62
  101. package/server/service/connector/connector-type.ts +0 -29
  102. package/server/service/connector/index.ts +0 -4
  103. package/server/service/index.ts +0 -52
  104. package/server/service/payload-log/index.ts +0 -7
  105. package/server/service/payload-log/payload-log-mutation.ts +0 -151
  106. package/server/service/payload-log/payload-log-query.ts +0 -49
  107. package/server/service/payload-log/payload-log-type.ts +0 -36
  108. package/server/service/payload-log/payload-log.ts +0 -100
  109. package/server/service/property-spec.ts +0 -24
  110. package/server/service/scenario/index.ts +0 -6
  111. package/server/service/scenario/scenario-mutation.ts +0 -396
  112. package/server/service/scenario/scenario-query.ts +0 -109
  113. package/server/service/scenario/scenario-type.ts +0 -78
  114. package/server/service/scenario/scenario.ts +0 -124
  115. package/server/service/scenario-flow/scenario-flow.ts +0 -17
  116. package/server/service/scenario-instance/index.ts +0 -6
  117. package/server/service/scenario-instance/scenario-instance-mutation.ts +0 -44
  118. package/server/service/scenario-instance/scenario-instance-query.ts +0 -42
  119. package/server/service/scenario-instance/scenario-instance-subscription.ts +0 -118
  120. package/server/service/scenario-instance/scenario-instance-type.ts +0 -563
  121. package/server/service/scenario-queue/index.ts +0 -4
  122. package/server/service/scenario-queue/scenario-queue-subscription.ts +0 -55
  123. package/server/service/scenario-queue/scenario-queue-type.ts +0 -27
  124. package/server/service/state-register/data-resolver.ts +0 -56
  125. package/server/service/state-register/index.ts +0 -8
  126. package/server/service/state-register/state-register-mutation.ts +0 -166
  127. package/server/service/state-register/state-register-query.ts +0 -80
  128. package/server/service/state-register/state-register-type.ts +0 -80
  129. package/server/service/state-register/state-register.ts +0 -113
  130. package/server/service/step/index.ts +0 -6
  131. package/server/service/step/step-mutation.ts +0 -52
  132. package/server/service/step/step-query.ts +0 -55
  133. package/server/service/step/step-type.ts +0 -215
  134. package/server/service/task-type/index.ts +0 -4
  135. package/server/service/task-type/task-type-query.ts +0 -95
  136. 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)