@things-factory/integration-base 7.0.1-rc.0 → 7.0.1-rc.10

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 (81) hide show
  1. package/dist-server/engine/connection-manager.js +7 -8
  2. package/dist-server/engine/connection-manager.js.map +1 -1
  3. package/dist-server/engine/connector/echo-back-connector.js +1 -1
  4. package/dist-server/engine/connector/echo-back-connector.js.map +1 -1
  5. package/dist-server/engine/connector/graphql-connector.js +2 -2
  6. package/dist-server/engine/connector/graphql-connector.js.map +1 -1
  7. package/dist-server/engine/connector/mqtt-connector.js +1 -1
  8. package/dist-server/engine/connector/mqtt-connector.js.map +1 -1
  9. package/dist-server/engine/connector/mssql-connector.js +1 -1
  10. package/dist-server/engine/connector/mssql-connector.js.map +1 -1
  11. package/dist-server/engine/connector/operato-connector.js +1 -1
  12. package/dist-server/engine/connector/operato-connector.js.map +1 -1
  13. package/dist-server/engine/connector/oracle-connector.js +1 -1
  14. package/dist-server/engine/connector/oracle-connector.js.map +1 -1
  15. package/dist-server/engine/connector/postgresql-connector.js +2 -2
  16. package/dist-server/engine/connector/postgresql-connector.js.map +1 -1
  17. package/dist-server/engine/connector/socket-server.js +1 -1
  18. package/dist-server/engine/connector/socket-server.js.map +1 -1
  19. package/dist-server/engine/connector/sqlite-connector.js +2 -2
  20. package/dist-server/engine/connector/sqlite-connector.js.map +1 -1
  21. package/dist-server/engine/task/database-query.d.ts +1 -1
  22. package/dist-server/engine/task/database-query.js +16 -11
  23. package/dist-server/engine/task/database-query.js.map +1 -1
  24. package/dist-server/engine/task/graphql-mutate.d.ts +1 -1
  25. package/dist-server/engine/task/graphql-mutate.js +16 -11
  26. package/dist-server/engine/task/graphql-mutate.js.map +1 -1
  27. package/dist-server/engine/task/graphql-query.d.ts +1 -1
  28. package/dist-server/engine/task/graphql-query.js +16 -11
  29. package/dist-server/engine/task/graphql-query.js.map +1 -1
  30. package/dist-server/engine/task/http-get.d.ts +1 -1
  31. package/dist-server/engine/task/http-get.js +28 -12
  32. package/dist-server/engine/task/http-get.js.map +1 -1
  33. package/dist-server/engine/task/http-post.d.ts +1 -1
  34. package/dist-server/engine/task/http-post.js +22 -11
  35. package/dist-server/engine/task/http-post.js.map +1 -1
  36. package/dist-server/engine/task/local-graphql-mutate.d.ts +1 -1
  37. package/dist-server/engine/task/local-graphql-mutate.js +16 -10
  38. package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
  39. package/dist-server/engine/task/local-graphql-query.d.ts +1 -1
  40. package/dist-server/engine/task/local-graphql-query.js +16 -10
  41. package/dist-server/engine/task/local-graphql-query.js.map +1 -1
  42. package/dist-server/engine/task/log.d.ts +1 -1
  43. package/dist-server/engine/task/log.js +15 -11
  44. package/dist-server/engine/task/log.js.map +1 -1
  45. package/dist-server/engine/task/oracle-procedure.d.ts +1 -1
  46. package/dist-server/engine/task/oracle-procedure.js +19 -13
  47. package/dist-server/engine/task/oracle-procedure.js.map +1 -1
  48. package/dist-server/engine/task/script.d.ts +1 -1
  49. package/dist-server/engine/task/script.js +30 -18
  50. package/dist-server/engine/task/script.js.map +1 -1
  51. package/dist-server/index.js +1 -2
  52. package/dist-server/index.js.map +1 -1
  53. package/dist-server/service/payload-log/payload-log-mutation.js +1 -1
  54. package/dist-server/service/payload-log/payload-log-mutation.js.map +1 -1
  55. package/dist-server/service/scenario-instance/scenario-instance-type.js +6 -6
  56. package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
  57. package/dist-server/tsconfig.tsbuildinfo +1 -1
  58. package/package.json +11 -11
  59. package/server/engine/connection-manager.ts +7 -8
  60. package/server/engine/connector/echo-back-connector.ts +2 -1
  61. package/server/engine/connector/graphql-connector.ts +8 -3
  62. package/server/engine/connector/mqtt-connector.ts +2 -1
  63. package/server/engine/connector/mssql-connector.ts +1 -1
  64. package/server/engine/connector/operato-connector.ts +10 -4
  65. package/server/engine/connector/oracle-connector.ts +5 -8
  66. package/server/engine/connector/postgresql-connector.ts +3 -2
  67. package/server/engine/connector/socket-server.ts +1 -1
  68. package/server/engine/connector/sqlite-connector.ts +2 -5
  69. package/server/engine/task/database-query.ts +16 -11
  70. package/server/engine/task/graphql-mutate.ts +16 -12
  71. package/server/engine/task/graphql-query.ts +15 -12
  72. package/server/engine/task/http-get.ts +26 -12
  73. package/server/engine/task/http-post.ts +22 -11
  74. package/server/engine/task/local-graphql-mutate.ts +16 -10
  75. package/server/engine/task/local-graphql-query.ts +16 -10
  76. package/server/engine/task/log.ts +14 -11
  77. package/server/engine/task/oracle-procedure.ts +24 -18
  78. package/server/engine/task/script.ts +28 -18
  79. package/server/index.ts +1 -2
  80. package/server/service/payload-log/payload-log-mutation.ts +1 -1
  81. package/server/service/scenario-instance/scenario-instance-type.ts +6 -6
@@ -1,5 +1,5 @@
1
1
  import { access, hasTemplateExpression } from '@things-factory/utils'
2
- import { VM } from 'vm2'
2
+ import 'ses'
3
3
  import { TaskRegistry } from '../task-registry'
4
4
  import { InputStep } from '../../service/step/step-type'
5
5
  import { Context } from '../types'
@@ -10,23 +10,26 @@ async function Log(step: InputStep, { logger, data, variables, domain, user, lng
10
10
  } = step
11
11
 
12
12
  if (hasTemplateExpression(message)) {
13
- const vm = new VM({
14
- sandbox: {
15
- domain,
16
- user,
17
- lng,
18
- data,
19
- variables
20
- }
13
+ const compartment = new Compartment({
14
+ domain,
15
+ user,
16
+ lng,
17
+ data,
18
+ variables,
19
+ console
21
20
  })
22
21
 
23
- message = vm.run('`' + message + '`')
22
+ try {
23
+ message = compartment.evaluate('`' + message + '`')
24
+ } catch (err) {
25
+ throw new Error(`Failed to evaluate message: ${err.message}`)
26
+ }
24
27
  }
25
28
 
26
29
  accessor = access(accessor, data)
27
30
 
28
31
  if (accessor) {
29
- if (accessor !== 'string') {
32
+ if (typeof accessor !== 'string') {
30
33
  accessor = JSON.stringify(accessor, null, 2)
31
34
  }
32
35
  message += ': ' + accessor
@@ -1,15 +1,15 @@
1
- import { VM } from 'vm2'
2
1
  import { logger } from '@things-factory/env'
3
2
  import { access } from '@things-factory/utils'
4
3
  import { ConnectionManager } from '../connection-manager'
5
4
  import { TaskRegistry } from '../task-registry'
6
5
  import { InputStep } from '../../service/step/step-type'
7
6
  import { Context } from '../types'
7
+ import 'ses'
8
8
 
9
9
  try {
10
10
  var oracledb = require('oracledb')
11
11
  } catch (err) {
12
- logger.error('oracledb module loading failed')
12
+ logger.error('oracledb module loading failed', err)
13
13
  }
14
14
 
15
15
  type ProcedureParameterType = {
@@ -51,21 +51,27 @@ async function OracleProcedure(step: InputStep, context: Context) {
51
51
 
52
52
  var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
53
53
 
54
- const vm = new VM({
55
- sandbox: {
56
- domain,
57
- user,
58
- lng,
59
- data,
60
- variables
61
- }
62
- })
63
-
64
54
  if (!code) {
65
55
  throw 'procedure code not defined'
66
56
  }
67
57
 
68
- code = vm.run('`' + code + '`')
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
69
75
 
70
76
  const procedureParameters =
71
77
  parameters &&
@@ -79,13 +85,13 @@ async function OracleProcedure(step: InputStep, context: Context) {
79
85
 
80
86
  if (calculated !== undefined) {
81
87
  sum[name].val =
82
- type == 'Date'
88
+ type === 'Date'
83
89
  ? new Date(calculated)
84
90
  : type == 'Number'
85
- ? Number(calculated)
86
- : type == 'String'
87
- ? String(calculated)
88
- : calculated
91
+ ? Number(calculated)
92
+ : type == 'String'
93
+ ? String(calculated)
94
+ : calculated
89
95
  }
90
96
 
91
97
  if (maxSize) {
@@ -1,34 +1,44 @@
1
1
  import { TaskRegistry } from '../task-registry'
2
- import { NodeVM } from 'vm2'
3
-
4
2
  import { InputStep } from '../../service/step/step-type'
5
3
  import { Context } from '../types'
4
+ import 'ses'
6
5
 
7
6
  async function Script(step: InputStep, context: Context) {
8
- var {
7
+ const {
9
8
  params: { script }
10
9
  } = step
11
10
 
12
11
  const { domain, user, data, variables, lng, logger } = context
13
12
 
14
- const vm = new NodeVM({
15
- timeout: 5000,
16
- wrapper: 'none',
17
- console: 'inherit',
18
- sandbox: {
19
- domain,
20
- user,
21
- lng,
22
- logger,
23
- data,
24
- variables
25
- }
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
26
28
  })
27
29
 
28
- var result = await vm.run(`return (async () => {\n${script}\n})()`)
30
+ const scriptSource = `
31
+ (async () => {
32
+ ${script}
33
+ })();
34
+ `
29
35
 
30
- return {
31
- data: result
36
+ try {
37
+ return {
38
+ data: await compartment.evaluate(scriptSource)
39
+ }
40
+ } catch (err) {
41
+ throw new Error(`Script execution failed: ${err.message}`)
32
42
  }
33
43
  }
34
44
 
package/server/index.ts CHANGED
@@ -15,7 +15,6 @@ process.on('bootstrap-module-start' as any, async ({ app, config, client }: any)
15
15
 
16
16
  console.log('Scenario Engine has just started.')
17
17
  } catch (ex) {
18
- ConnectionManager.logger.error(ex)
19
- console.log('Just has failed to start Scenario Engine.')
18
+ ConnectionManager.logger.error('Just has failed to start Scenario Engine.', ex)
20
19
  }
21
20
  })
@@ -146,6 +146,6 @@ export async function createPayloadLog(
146
146
  updatedAt: new Date()
147
147
  })
148
148
  } catch (error) {
149
- logger.error(`PayloadLog Error: ${error}`)
149
+ logger.error(`PayloadLog Error`, error)
150
150
  }
151
151
  }
@@ -18,10 +18,10 @@ import { Step } from '../step/step-type'
18
18
  import { handler as edgeHandler } from '../../engine/edge-client'
19
19
 
20
20
  const debug = require('debug')('things-factory:integration-base:scenario-instance')
21
- const { combine, timestamp, splat, printf } = format
21
+ const { combine, errors, splat, printf } = format
22
22
 
23
- const LOGFORMAT = printf(({ level, message, timestamp }) => {
24
- return `${timestamp} ${level}: ${message}`
23
+ const LOGFORMAT = printf(({ level, message, timestamp, stack }) => {
24
+ return `${timestamp} ${level}: ${stack || message}`
25
25
  })
26
26
 
27
27
  const SYSTEM_TZ = Intl.DateTimeFormat().resolvedOptions().timeZone
@@ -228,7 +228,7 @@ export class ScenarioInstance {
228
228
  logger:
229
229
  context?.logger ||
230
230
  createLogger({
231
- format: combine(systemTimestamp({ tz: SYSTEM_TZ }), splat(), LOGFORMAT),
231
+ format: combine(errors({ stack: true }), systemTimestamp({ tz: SYSTEM_TZ }), splat(), LOGFORMAT),
232
232
  transports: [
233
233
  new (transports as any).DailyRotateFile({
234
234
  filename: `logs/${domain.subdomain}/scenario-${scenarioName}-%DATE%.log`,
@@ -320,7 +320,7 @@ export class ScenarioInstance {
320
320
  const message = ex.stack ? ex.stack : ex
321
321
  const { scenarioName, domain } = this
322
322
 
323
- this.context.logger.error(ex.message ? ex.message : ex)
323
+ this.context.logger.error(ex)
324
324
 
325
325
  debug('failed to run ', `[ Domain: ${domain.name}, Scenario: ${scenarioName} ]\n`, ex)
326
326
  this.setState(
@@ -515,7 +515,7 @@ export class ScenarioInstance {
515
515
  try {
516
516
  step.params = JSON.parse(step.params)
517
517
  } catch (ex) {
518
- this.context.logger.error(`params(${step.params}) parsing error. params must be a JSON.`)
518
+ this.context.logger.error(`params(${step.params}) parsing error. params must be a JSON.`, ex)
519
519
  }
520
520
  step.params = step.params || {}
521
521