@things-factory/integration-base 7.0.1-rc.5 → 7.0.1-rc.7
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/task/database-query.d.ts +1 -1
- package/dist-server/engine/task/database-query.js +16 -11
- package/dist-server/engine/task/database-query.js.map +1 -1
- package/dist-server/engine/task/graphql-mutate.d.ts +1 -1
- package/dist-server/engine/task/graphql-mutate.js +16 -11
- package/dist-server/engine/task/graphql-mutate.js.map +1 -1
- package/dist-server/engine/task/graphql-query.d.ts +1 -1
- package/dist-server/engine/task/graphql-query.js +16 -11
- package/dist-server/engine/task/graphql-query.js.map +1 -1
- package/dist-server/engine/task/http-get.d.ts +1 -1
- package/dist-server/engine/task/http-get.js +28 -12
- package/dist-server/engine/task/http-get.js.map +1 -1
- package/dist-server/engine/task/http-post.d.ts +1 -1
- package/dist-server/engine/task/http-post.js +22 -11
- package/dist-server/engine/task/http-post.js.map +1 -1
- package/dist-server/engine/task/local-graphql-mutate.d.ts +1 -1
- package/dist-server/engine/task/local-graphql-mutate.js +16 -10
- package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
- package/dist-server/engine/task/local-graphql-query.d.ts +1 -1
- package/dist-server/engine/task/local-graphql-query.js +16 -10
- package/dist-server/engine/task/local-graphql-query.js.map +1 -1
- package/dist-server/engine/task/log.d.ts +1 -1
- package/dist-server/engine/task/log.js +15 -11
- package/dist-server/engine/task/log.js.map +1 -1
- package/dist-server/engine/task/oracle-procedure.d.ts +1 -1
- package/dist-server/engine/task/oracle-procedure.js +18 -12
- package/dist-server/engine/task/oracle-procedure.js.map +1 -1
- package/dist-server/engine/task/script.d.ts +1 -1
- package/dist-server/engine/task/script.js +30 -18
- package/dist-server/engine/task/script.js.map +1 -1
- package/dist-server/service/index.d.ts +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -11
- package/server/engine/task/database-query.ts +16 -11
- package/server/engine/task/graphql-mutate.ts +16 -12
- package/server/engine/task/graphql-query.ts +15 -12
- package/server/engine/task/http-get.ts +26 -12
- package/server/engine/task/http-post.ts +22 -11
- package/server/engine/task/local-graphql-mutate.ts +16 -10
- package/server/engine/task/local-graphql-query.ts +16 -10
- package/server/engine/task/log.ts +14 -11
- package/server/engine/task/oracle-procedure.ts +19 -13
- package/server/engine/task/script.ts +28 -18
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@things-factory/integration-base",
|
3
|
-
"version": "7.0.1-rc.
|
3
|
+
"version": "7.0.1-rc.7",
|
4
4
|
"main": "dist-server/index.js",
|
5
5
|
"browser": "client/index.js",
|
6
6
|
"things-factory": true,
|
@@ -27,14 +27,14 @@
|
|
27
27
|
"dependencies": {
|
28
28
|
"@apollo/client": "^3.6.9",
|
29
29
|
"@operato/moment-timezone-es": "^7.0.0-rc",
|
30
|
-
"@things-factory/api": "^7.0.1-rc.
|
31
|
-
"@things-factory/auth-base": "^7.0.1-rc.
|
32
|
-
"@things-factory/cache-service": "^7.0.1-rc.
|
33
|
-
"@things-factory/env": "^7.0.1-rc.
|
34
|
-
"@things-factory/oauth2-client": "^7.0.1-rc.
|
35
|
-
"@things-factory/scheduler-client": "^7.0.1-rc.
|
36
|
-
"@things-factory/shell": "^7.0.1-rc.
|
37
|
-
"@things-factory/utils": "^7.0.1-rc.
|
30
|
+
"@things-factory/api": "^7.0.1-rc.7",
|
31
|
+
"@things-factory/auth-base": "^7.0.1-rc.7",
|
32
|
+
"@things-factory/cache-service": "^7.0.1-rc.7",
|
33
|
+
"@things-factory/env": "^7.0.1-rc.7",
|
34
|
+
"@things-factory/oauth2-client": "^7.0.1-rc.7",
|
35
|
+
"@things-factory/scheduler-client": "^7.0.1-rc.7",
|
36
|
+
"@things-factory/shell": "^7.0.1-rc.7",
|
37
|
+
"@things-factory/utils": "^7.0.1-rc.7",
|
38
38
|
"async-mqtt": "^2.5.0",
|
39
39
|
"chance": "^1.1.11",
|
40
40
|
"cross-fetch": "^3.0.4",
|
@@ -42,7 +42,7 @@
|
|
42
42
|
"node-fetch": "^2.6.0",
|
43
43
|
"promise-socket": "^7.0.0",
|
44
44
|
"readline": "^1.3.0",
|
45
|
-
"
|
45
|
+
"ses": "^1.5.0"
|
46
46
|
},
|
47
|
-
"gitHead": "
|
47
|
+
"gitHead": "0e8c627f3fbb83cc1c3fadac3ec342cb8f3f0149"
|
48
48
|
}
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import { VM } from 'vm2'
|
2
1
|
import { ConnectionManager } from '../connection-manager'
|
3
2
|
import { TaskRegistry } from '../task-registry'
|
4
3
|
import { InputStep } from '../../service/step/step-type'
|
5
4
|
import { Context } from '../types'
|
5
|
+
import 'ses'
|
6
6
|
|
7
7
|
async function DatabaseQuery(step: InputStep, context: Context) {
|
8
8
|
var { domain, user, data, variables, lng } = context
|
@@ -13,18 +13,23 @@ async function DatabaseQuery(step: InputStep, context: Context) {
|
|
13
13
|
|
14
14
|
var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
|
15
15
|
|
16
|
-
const
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
16
|
+
const compartment = new Compartment({
|
17
|
+
domain,
|
18
|
+
user,
|
19
|
+
lng,
|
20
|
+
data,
|
21
|
+
variables,
|
22
|
+
console
|
24
23
|
})
|
25
24
|
|
26
|
-
|
27
|
-
|
25
|
+
let evalQuery
|
26
|
+
try {
|
27
|
+
evalQuery = compartment.evaluate('`' + query + '`')
|
28
|
+
} catch (err) {
|
29
|
+
throw new Error(`Failed to evaluate query: ${err.message}`)
|
30
|
+
}
|
31
|
+
|
32
|
+
var queryResult = await dbconnection.query(evalQuery, [])
|
28
33
|
|
29
34
|
return {
|
30
35
|
data: queryResult
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import gql from 'graphql-tag'
|
2
|
-
import
|
2
|
+
import 'ses'
|
3
3
|
|
4
4
|
import { access } from '@things-factory/utils'
|
5
|
-
|
6
5
|
import { ConnectionManager } from '../connection-manager'
|
7
6
|
import { TaskRegistry } from '../task-registry'
|
8
7
|
import { InputStep } from '../../service/step/step-type'
|
@@ -14,17 +13,21 @@ async function GraphqlMutate(step: InputStep, context: Context) {
|
|
14
13
|
|
15
14
|
var { domain, user, data, variables, lng } = context
|
16
15
|
|
17
|
-
const
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
}
|
16
|
+
const compartment = new Compartment({
|
17
|
+
domain,
|
18
|
+
user,
|
19
|
+
lng,
|
20
|
+
data,
|
21
|
+
variables,
|
22
|
+
console
|
25
23
|
})
|
26
24
|
|
27
|
-
|
25
|
+
let evalMutation
|
26
|
+
try {
|
27
|
+
evalMutation = compartment.evaluate('`' + mutation + '`')
|
28
|
+
} catch (err) {
|
29
|
+
throw new Error(`Failed to evaluate mutation: ${err.message}`)
|
30
|
+
}
|
28
31
|
|
29
32
|
var client = ConnectionManager.getConnectionInstanceByName(context.domain, connectionName)
|
30
33
|
|
@@ -36,7 +39,7 @@ async function GraphqlMutate(step: InputStep, context: Context) {
|
|
36
39
|
|
37
40
|
var { data: mutateResult } = await client.mutate({
|
38
41
|
mutation: gql`
|
39
|
-
${
|
42
|
+
${evalMutation}
|
40
43
|
`,
|
41
44
|
variables: queryVariables,
|
42
45
|
headers
|
@@ -70,6 +73,7 @@ GraphqlMutate.parameterSpec = [
|
|
70
73
|
label: 'headers'
|
71
74
|
}
|
72
75
|
]
|
76
|
+
|
73
77
|
GraphqlMutate.help = 'integration/task/graphql-mutate'
|
74
78
|
|
75
79
|
TaskRegistry.registerTaskHandler('graphql-mutate', GraphqlMutate)
|
@@ -1,8 +1,7 @@
|
|
1
1
|
import gql from 'graphql-tag'
|
2
|
-
import
|
2
|
+
import 'ses'
|
3
3
|
|
4
4
|
import { access } from '@things-factory/utils'
|
5
|
-
|
6
5
|
import { ConnectionManager } from '../connection-manager'
|
7
6
|
import { TaskRegistry } from '../task-registry'
|
8
7
|
import { InputStep } from '../../service/step/step-type'
|
@@ -13,17 +12,21 @@ async function GraphqlQuery(step: InputStep, context: Context) {
|
|
13
12
|
var { query, variables: variablesAccessorMap, headers } = stepOptions || {}
|
14
13
|
var { domain, user, data, variables, lng } = context
|
15
14
|
|
16
|
-
const
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
15
|
+
const compartment = new Compartment({
|
16
|
+
domain,
|
17
|
+
user,
|
18
|
+
lng,
|
19
|
+
data,
|
20
|
+
variables,
|
21
|
+
console
|
24
22
|
})
|
25
23
|
|
26
|
-
|
24
|
+
let evalQuery
|
25
|
+
try {
|
26
|
+
evalQuery = compartment.evaluate('`' + query + '`')
|
27
|
+
} catch (err) {
|
28
|
+
throw new Error(`Failed to evaluate query: ${err.message}`)
|
29
|
+
}
|
27
30
|
|
28
31
|
var client = ConnectionManager.getConnectionInstanceByName(domain, connectionName)
|
29
32
|
|
@@ -35,7 +38,7 @@ async function GraphqlQuery(step: InputStep, context: Context) {
|
|
35
38
|
|
36
39
|
var { data: queryResult } = await client.query({
|
37
40
|
query: gql`
|
38
|
-
${
|
41
|
+
${evalQuery}
|
39
42
|
`,
|
40
43
|
variables: queryVariables,
|
41
44
|
headers
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import fetch from 'node-fetch'
|
2
|
-
import
|
2
|
+
import 'ses'
|
3
3
|
import { URL } from 'url'
|
4
4
|
import https from 'https'
|
5
5
|
import { TaskRegistry } from '../task-registry'
|
@@ -19,29 +19,43 @@ async function HttpGet(step: InputStep, { logger, data, domain, user, variables,
|
|
19
19
|
|
20
20
|
var { endpoint, params: connectionParams, authHeaders = {} } = connection
|
21
21
|
|
22
|
-
const
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
}
|
22
|
+
const compartment = new Compartment({
|
23
|
+
domain,
|
24
|
+
user,
|
25
|
+
lng,
|
26
|
+
data,
|
27
|
+
variables,
|
28
|
+
console
|
30
29
|
})
|
31
30
|
|
32
|
-
|
31
|
+
let evalPath
|
32
|
+
try {
|
33
|
+
evalPath = compartment.evaluate('`' + path + '`')
|
34
|
+
} catch (err) {
|
35
|
+
throw new Error(`Failed to evaluate path: ${err.message}`)
|
36
|
+
}
|
37
|
+
|
38
|
+
path = evalPath
|
33
39
|
|
34
40
|
requestHeaders =
|
35
41
|
requestHeaders &&
|
36
42
|
Object.entries(requestHeaders as { [key: string]: string }).reduce((sum, [key, value]) => {
|
37
|
-
|
43
|
+
try {
|
44
|
+
sum[key] = compartment.evaluate('`' + value + '`')
|
45
|
+
} catch (err) {
|
46
|
+
throw new Error(`Failed to evaluate header value: ${err.message}`)
|
47
|
+
}
|
38
48
|
return sum
|
39
49
|
}, {})
|
40
50
|
|
41
51
|
searchParams =
|
42
52
|
searchParams &&
|
43
53
|
Object.entries(searchParams as { [key: string]: string }).reduce((sum, [key, value]) => {
|
44
|
-
|
54
|
+
try {
|
55
|
+
sum[key] = compartment.evaluate('`' + value + '`')
|
56
|
+
} catch (err) {
|
57
|
+
throw new Error(`Failed to evaluate search param value: ${err.message}`)
|
58
|
+
}
|
45
59
|
return sum
|
46
60
|
}, {})
|
47
61
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import fetch from 'node-fetch'
|
2
2
|
import { URL } from 'url'
|
3
|
-
import
|
3
|
+
import 'ses'
|
4
4
|
import { access } from '@things-factory/utils'
|
5
5
|
import { TaskRegistry } from '../task-registry'
|
6
6
|
import { ConnectionManager } from '../connection-manager'
|
@@ -20,21 +20,32 @@ async function HttpPost(step: InputStep, { logger, data, domain, user, variables
|
|
20
20
|
|
21
21
|
var { endpoint, params: connectionParams, authHeaders = {} } = connection
|
22
22
|
|
23
|
-
const
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
}
|
23
|
+
const compartment = new Compartment({
|
24
|
+
domain,
|
25
|
+
user,
|
26
|
+
lng,
|
27
|
+
data,
|
28
|
+
variables,
|
29
|
+
console
|
31
30
|
})
|
32
31
|
|
33
|
-
|
32
|
+
let evalPath
|
33
|
+
try {
|
34
|
+
evalPath = compartment.evaluate('`' + path + '`')
|
35
|
+
} catch (err) {
|
36
|
+
throw new Error(`Failed to evaluate path: ${err.message}`)
|
37
|
+
}
|
38
|
+
|
39
|
+
path = evalPath
|
40
|
+
|
34
41
|
requestHeaders =
|
35
42
|
requestHeaders &&
|
36
43
|
Object.entries(requestHeaders as { [key: string]: string }).reduce((sum, [key, value]) => {
|
37
|
-
|
44
|
+
try {
|
45
|
+
sum[key] = compartment.evaluate('`' + value + '`')
|
46
|
+
} catch (err) {
|
47
|
+
throw new Error(`Failed to evaluate header value: ${err.message}`)
|
48
|
+
}
|
38
49
|
return sum
|
39
50
|
}, {})
|
40
51
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import gql from 'graphql-tag'
|
2
|
-
import
|
2
|
+
import 'ses'
|
3
3
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
5
5
|
import { getRepository } from '@things-factory/shell'
|
@@ -21,17 +21,23 @@ async function LocalGraphqlMutate(step: InputStep, context: Context) {
|
|
21
21
|
relations: ['domains']
|
22
22
|
}))
|
23
23
|
|
24
|
-
const
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
}
|
24
|
+
const compartment = new Compartment({
|
25
|
+
domain,
|
26
|
+
user,
|
27
|
+
lng,
|
28
|
+
data,
|
29
|
+
variables,
|
30
|
+
console
|
32
31
|
})
|
33
32
|
|
34
|
-
|
33
|
+
let evalMutation
|
34
|
+
try {
|
35
|
+
evalMutation = compartment.evaluate('`' + mutation + '`')
|
36
|
+
} catch (err) {
|
37
|
+
throw new Error(`Failed to evaluate mutation: ${err.message}`)
|
38
|
+
}
|
39
|
+
|
40
|
+
mutation = evalMutation
|
35
41
|
|
36
42
|
const queryVariables = Object.keys(variablesAccessorMap || {}).reduce((variables, key) => {
|
37
43
|
const accessor = variablesAccessorMap[key]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import gql from 'graphql-tag'
|
2
|
-
import
|
2
|
+
import 'ses'
|
3
3
|
|
4
4
|
import { User } from '@things-factory/auth-base'
|
5
5
|
import { getRepository } from '@things-factory/shell'
|
@@ -21,17 +21,23 @@ async function LocalGraphqlQuery(step: InputStep, context: Context) {
|
|
21
21
|
relations: ['domains']
|
22
22
|
}))
|
23
23
|
|
24
|
-
const
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
}
|
24
|
+
const compartment = new Compartment({
|
25
|
+
domain,
|
26
|
+
user,
|
27
|
+
lng,
|
28
|
+
data,
|
29
|
+
variables,
|
30
|
+
console
|
32
31
|
})
|
33
32
|
|
34
|
-
|
33
|
+
let evalQuery
|
34
|
+
try {
|
35
|
+
evalQuery = compartment.evaluate('`' + query + '`')
|
36
|
+
} catch (err) {
|
37
|
+
throw new Error(`Failed to evaluate query: ${err.message}`)
|
38
|
+
}
|
39
|
+
|
40
|
+
query = evalQuery
|
35
41
|
|
36
42
|
const queryVariables = Object.keys(variablesAccessorMap || {}).reduce((variables, key) => {
|
37
43
|
const accessor = variablesAccessorMap[key]
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { access, hasTemplateExpression } from '@things-factory/utils'
|
2
|
-
import
|
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
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
13
|
+
const compartment = new Compartment({
|
14
|
+
domain,
|
15
|
+
user,
|
16
|
+
lng,
|
17
|
+
data,
|
18
|
+
variables,
|
19
|
+
console
|
21
20
|
})
|
22
21
|
|
23
|
-
|
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,10 +1,10 @@
|
|
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')
|
@@ -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
|
-
|
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,7 +85,7 @@ async function OracleProcedure(step: InputStep, context: Context) {
|
|
79
85
|
|
80
86
|
if (calculated !== undefined) {
|
81
87
|
sum[name].val =
|
82
|
-
type
|
88
|
+
type === 'Date'
|
83
89
|
? new Date(calculated)
|
84
90
|
: type == 'Number'
|
85
91
|
? Number(calculated)
|
@@ -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
|
-
|
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
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
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
|
-
|
30
|
+
const scriptSource = `
|
31
|
+
(async () => {
|
32
|
+
${script}
|
33
|
+
})();
|
34
|
+
`
|
29
35
|
|
30
|
-
|
31
|
-
|
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
|
|