@things-factory/integration-base 7.0.0-alpha.6 → 7.0.0-alpha.8
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/controllers/index.js +5 -0
- package/dist-server/controllers/index.js.map +1 -0
- package/dist-server/controllers/scenario-controller.js +87 -0
- package/dist-server/controllers/scenario-controller.js.map +1 -0
- package/dist-server/engine/connector/oracle-connector.js +113 -17
- package/dist-server/engine/connector/oracle-connector.js.map +1 -1
- package/dist-server/engine/task/oracle-procedure.js +1 -15
- package/dist-server/engine/task/oracle-procedure.js.map +1 -1
- package/dist-server/engine/task/utils/headless-pool-for-scenario.js +1 -1
- package/dist-server/engine/task/utils/headless-pool-for-scenario.js.map +1 -1
- package/dist-server/index.js +1 -0
- package/dist-server/index.js.map +1 -1
- package/dist-server/restful/unstable/run-scenario.js.map +1 -1
- package/dist-server/restful/unstable/start-scenario.js +1 -1
- package/dist-server/restful/unstable/start-scenario.js.map +1 -1
- package/dist-server/restful/unstable/stop-scenario.js +1 -1
- package/dist-server/restful/unstable/stop-scenario.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-mutation.js +4 -71
- package/dist-server/service/scenario-instance/scenario-instance-mutation.js.map +1 -1
- package/dist-server/service/scenario-instance/scenario-instance-type.js +6 -1
- package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
- package/dist-server/tsconfig.tsbuildinfo +1 -1
- package/helps/integration/connector/oracle-connector.ja.md +90 -0
- package/helps/integration/connector/oracle-connector.ko.md +87 -0
- package/helps/integration/connector/oracle-connector.md +46 -25
- package/helps/integration/connector/oracle-connector.ms.md +87 -0
- package/helps/integration/connector/oracle-connector.zh.md +87 -0
- package/openapi/unstable/scenario.yaml +100 -100
- package/openapi/unstable.yaml +11 -11
- package/package.json +7 -11
- package/server/controllers/index.ts +1 -0
- package/server/controllers/scenario-controller.ts +116 -0
- package/server/engine/connector/oracle-connector.ts +132 -22
- package/server/engine/task/oracle-procedure.ts +1 -16
- package/server/engine/task/utils/headless-pool-for-scenario.ts +1 -1
- package/server/index.ts +1 -0
- package/server/restful/unstable/run-scenario.ts +0 -1
- package/server/restful/unstable/start-scenario.ts +1 -1
- package/server/restful/unstable/stop-scenario.ts +1 -1
- package/server/service/scenario-instance/scenario-instance-mutation.ts +10 -121
- package/server/service/scenario-instance/scenario-instance-type.ts +11 -8
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/controllers/index.ts"],"names":[],"mappings":";;;AAAA,gEAAqC","sourcesContent":["export * from './scenario-controller'\n"]}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.stopScenario = exports.startScenario = exports.runScenario = void 0;
|
4
|
+
const shell_1 = require("@things-factory/shell");
|
5
|
+
const auth_base_1 = require("@things-factory/auth-base");
|
6
|
+
const scenario_engine_1 = require("../engine/scenario-engine");
|
7
|
+
const scenario_1 = require("../service/scenario/scenario");
|
8
|
+
const scenario_instance_type_1 = require("../service/scenario-instance/scenario-instance-type");
|
9
|
+
const debug = require('debug')('things-factory:integration-base:controller:run-scenario');
|
10
|
+
async function findScenario(scenarioName, domain) {
|
11
|
+
var repository = (0, shell_1.getRepository)(scenario_1.Scenario);
|
12
|
+
var scenario = await repository.findOne({
|
13
|
+
where: { domain: { id: domain.id }, name: scenarioName },
|
14
|
+
relations: ['domain', 'steps', 'creator', 'updater']
|
15
|
+
});
|
16
|
+
if (!scenario && domain.parentId) {
|
17
|
+
scenario = await repository.findOne({
|
18
|
+
where: { domain: { id: domain.parentId }, name: scenarioName },
|
19
|
+
relations: ['domain', 'steps', 'creator', 'updater']
|
20
|
+
});
|
21
|
+
}
|
22
|
+
return scenario;
|
23
|
+
}
|
24
|
+
async function runScenario(instanceName, scenarioName, variables, context) {
|
25
|
+
const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state;
|
26
|
+
debug('runScenario', scenarioName, instanceName, variables);
|
27
|
+
var scenario = await findScenario(scenarioName, domain);
|
28
|
+
if (!scenario) {
|
29
|
+
throw new Error(context.t('error.scenario not found', {
|
30
|
+
scenario: scenarioName
|
31
|
+
}));
|
32
|
+
}
|
33
|
+
if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
34
|
+
const { category, privilege } = scenario.privilege || {};
|
35
|
+
throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
|
36
|
+
}
|
37
|
+
/* 시나리오 인스턴스를 생성한다. */
|
38
|
+
instanceName = instanceName || scenarioName + '-' + String(Date.now());
|
39
|
+
var instance = new scenario_instance_type_1.ScenarioInstance(instanceName, scenario, {
|
40
|
+
domain,
|
41
|
+
user,
|
42
|
+
lng,
|
43
|
+
variables,
|
44
|
+
client: shell_1.GraphqlLocalClient.client
|
45
|
+
});
|
46
|
+
await instance.run();
|
47
|
+
return instance;
|
48
|
+
}
|
49
|
+
exports.runScenario = runScenario;
|
50
|
+
async function startScenario(instanceName, scenarioName, variables, context) {
|
51
|
+
const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state;
|
52
|
+
debug('startScenario', instanceName, scenarioName, variables);
|
53
|
+
var scenario = await findScenario(scenarioName, domain);
|
54
|
+
if (!scenario) {
|
55
|
+
throw new Error(context.t('error.scenario not found', {
|
56
|
+
scenario: scenarioName
|
57
|
+
}));
|
58
|
+
}
|
59
|
+
if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
60
|
+
const { category, privilege } = scenario.privilege || {};
|
61
|
+
throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
|
62
|
+
}
|
63
|
+
instanceName = instanceName || scenarioName;
|
64
|
+
return await scenario_engine_1.ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables });
|
65
|
+
}
|
66
|
+
exports.startScenario = startScenario;
|
67
|
+
async function stopScenario(instanceName, context) {
|
68
|
+
const { domain, user, unsafeIP, prohibitedPrivileges } = context.state;
|
69
|
+
debug('stopScenario', instanceName);
|
70
|
+
runScenario;
|
71
|
+
var scenarioInstance = scenario_engine_1.ScenarioEngine.getScenarioInstance(domain, instanceName);
|
72
|
+
if (!scenarioInstance) {
|
73
|
+
debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`);
|
74
|
+
throw new Error(context.t('error.scenario instance not found', {
|
75
|
+
instance: instanceName
|
76
|
+
}));
|
77
|
+
}
|
78
|
+
var scenario = await findScenario(scenarioInstance.scenarioName, domain);
|
79
|
+
if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
80
|
+
const { category, privilege } = scenario.privilege || {};
|
81
|
+
throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
|
82
|
+
}
|
83
|
+
await scenario_engine_1.ScenarioEngine.unload(domain, instanceName);
|
84
|
+
return scenarioInstance;
|
85
|
+
}
|
86
|
+
exports.stopScenario = stopScenario;
|
87
|
+
//# sourceMappingURL=scenario-controller.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"scenario-controller.js","sourceRoot":"","sources":["../../server/controllers/scenario-controller.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository, Domain, GraphqlLocalClient } from '@things-factory/shell'\nimport { PrivilegeObject, checkPermission } from '@things-factory/auth-base'\n\nimport { ScenarioEngine } from '../engine/scenario-engine'\nimport { Scenario } from '../service/scenario/scenario'\nimport { ScenarioInstance } from '../service/scenario-instance/scenario-instance-type'\nimport { Step } from '../service/step/step-type'\n\nconst debug = require('debug')('things-factory:integration-base:controller:run-scenario')\n\nasync function findScenario(scenarioName: string, domain: Domain): Promise<{ name: string; steps: Step[]; domain: Domain; privilege?: PrivilegeObject }> {\n var repository = getRepository(Scenario)\n\n var scenario = await repository.findOne({\n where: { domain: { id: domain.id }, name: scenarioName },\n relations: ['domain', 'steps', 'creator', 'updater']\n })\n\n if (!scenario && domain.parentId) {\n scenario = await repository.findOne({\n where: { domain: { id: domain.parentId }, name: scenarioName },\n relations: ['domain', 'steps', 'creator', 'updater']\n })\n }\n\n return scenario as any\n}\n\nexport async function runScenario(instanceName: string, scenarioName: string, variables: any, context: ResolverContext): Promise<ScenarioInstance> {\n const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('runScenario', scenarioName, instanceName, variables)\n\n var scenario = await findScenario(scenarioName, domain)\n\n if (!scenario) {\n throw new Error(\n context.t('error.scenario not found', {\n scenario: scenarioName\n })\n )\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`)\n }\n\n /* 시나리오 인스턴스를 생성한다. */\n instanceName = instanceName || scenarioName + '-' + String(Date.now())\n var instance = new ScenarioInstance(instanceName, scenario, {\n domain,\n user,\n lng,\n variables,\n client: GraphqlLocalClient.client\n })\n\n await instance.run()\n\n return instance\n}\n\nexport async function startScenario(instanceName: string, scenarioName: string, variables: any, context: ResolverContext): Promise<ScenarioInstance> {\n const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('startScenario', instanceName, scenarioName, variables)\n\n var scenario = await findScenario(scenarioName, domain)\n\n if (!scenario) {\n throw new Error(\n context.t('error.scenario not found', {\n scenario: scenarioName\n })\n )\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`)\n }\n\n instanceName = instanceName || scenarioName\n return await ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables })\n}\n\nexport async function stopScenario(instanceName: string, context: ResolverContext): Promise<ScenarioInstance | undefined> {\n const { domain, user, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('stopScenario', instanceName)\n\n runScenario\n\n var scenarioInstance = ScenarioEngine.getScenarioInstance(domain, instanceName)\n\n if (!scenarioInstance) {\n debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`)\n throw new Error(\n context.t('error.scenario instance not found', {\n instance: instanceName\n })\n )\n }\n\n var scenario = await findScenario(scenarioInstance.scenarioName, domain)\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`)\n }\n\n await ScenarioEngine.unload(domain, instanceName)\n\n return scenarioInstance\n}\n"]}
|
@@ -4,7 +4,7 @@ exports.OracleConnector = void 0;
|
|
4
4
|
const env_1 = require("@things-factory/env");
|
5
5
|
const connection_manager_1 = require("../connection-manager");
|
6
6
|
try {
|
7
|
-
var
|
7
|
+
var oracledb = require('oracledb');
|
8
8
|
}
|
9
9
|
catch (err) {
|
10
10
|
env_1.logger.error('oracledb module loading failed');
|
@@ -14,33 +14,108 @@ class OracleConnector {
|
|
14
14
|
await Promise.all(connectionConfigs.map(this.connect));
|
15
15
|
connection_manager_1.ConnectionManager.logger.info('oracle-connector connections are ready');
|
16
16
|
}
|
17
|
+
async recreatePool(connection) {
|
18
|
+
const { name, endpoint, params: { user, password, database, poolMin, poolMax, poolIncrement }, domain } = connection;
|
19
|
+
if (!oracledb) {
|
20
|
+
throw new Error('oracledb module loading failed');
|
21
|
+
}
|
22
|
+
const poolAlias = `${domain.name}-${name}`;
|
23
|
+
await oracledb.getPool(poolAlias).close(10);
|
24
|
+
await oracledb.createPool({
|
25
|
+
user,
|
26
|
+
password,
|
27
|
+
// when oracle not using default port must add connection string with port like localhost:port
|
28
|
+
connectString: `${endpoint.trim()}/${database}`,
|
29
|
+
poolMin,
|
30
|
+
poolMax,
|
31
|
+
poolIncrement,
|
32
|
+
poolAlias
|
33
|
+
});
|
34
|
+
connection_manager_1.ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} recreated.`);
|
35
|
+
}
|
17
36
|
async connect(connection) {
|
18
|
-
const { endpoint, params: { user, password, database } } = connection;
|
19
|
-
if (!
|
37
|
+
const { name, endpoint, params: { user, password, database, poolMin, poolMax, poolIncrement }, domain } = connection;
|
38
|
+
if (!oracledb) {
|
20
39
|
throw new Error('oracledb module loading failed');
|
21
40
|
}
|
22
|
-
|
23
|
-
|
41
|
+
const poolAlias = `${domain.name}-${name}`;
|
42
|
+
var enableStatistics = true;
|
43
|
+
const pool = await oracledb.createPool({
|
24
44
|
user,
|
25
45
|
password,
|
26
|
-
|
46
|
+
// when oracle not using default port must add connection string with port like localhost:port
|
47
|
+
connectString: `${endpoint.trim()}/${database}`,
|
48
|
+
poolMin,
|
49
|
+
poolMax,
|
50
|
+
poolIncrement,
|
51
|
+
poolAlias,
|
52
|
+
enableStatistics
|
27
53
|
});
|
28
54
|
connection_manager_1.ConnectionManager.addConnectionInstance(connection, {
|
29
55
|
query: async (query, params) => {
|
30
|
-
|
31
|
-
|
32
|
-
|
56
|
+
let dbConnection = {};
|
57
|
+
let taskResult = {};
|
58
|
+
try {
|
59
|
+
dbConnection = await oracledb.getConnection(poolAlias);
|
60
|
+
taskResult = (await dbConnection.execute(query, params, {
|
61
|
+
outFormat: oracledb.OBJECT
|
62
|
+
})).rows;
|
63
|
+
}
|
64
|
+
catch (e) {
|
65
|
+
if (e.name === 'Error' && e.message.includes('NJS-040')) {
|
66
|
+
await this.recreatePool(connection);
|
67
|
+
}
|
68
|
+
throw e;
|
69
|
+
}
|
70
|
+
finally {
|
71
|
+
await dbConnection.close();
|
72
|
+
}
|
73
|
+
return taskResult;
|
33
74
|
},
|
34
75
|
execute: async (procedure, params) => {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
76
|
+
let dbConnection = {};
|
77
|
+
let taskResult = {};
|
78
|
+
try {
|
79
|
+
// TODO: need to check if this is available when procedure string is a common query.
|
80
|
+
procedure = `BEGIN
|
81
|
+
${procedure}
|
82
|
+
END;`;
|
83
|
+
dbConnection = await oracledb.getConnection(poolAlias);
|
84
|
+
// console.log('\n************* stat after get ****************')
|
85
|
+
// await oracledb.getPool(poolAlias).logStatistics()
|
86
|
+
const result = await dbConnection.execute(procedure, params, {
|
87
|
+
outFormat: oracledb.OBJECT
|
88
|
+
});
|
89
|
+
let paramKeys = Object.keys(params);
|
90
|
+
for (const paramKey of paramKeys) {
|
91
|
+
if (params[paramKey].dir === (oracledb === null || oracledb === void 0 ? void 0 : oracledb.BIND_OUT)) {
|
92
|
+
if (params[paramKey].type === (oracledb === null || oracledb === void 0 ? void 0 : oracledb.CURSOR)) {
|
93
|
+
const resultSetTemp = result.outBinds[paramKey];
|
94
|
+
taskResult[paramKey] = await resultSetTemp.getRows();
|
95
|
+
await resultSetTemp.close();
|
96
|
+
}
|
97
|
+
else {
|
98
|
+
taskResult[paramKey] = result.outBinds[paramKey];
|
99
|
+
}
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
catch (e) {
|
104
|
+
if (e.name === 'Error' && e.message.includes('NJS-040')) {
|
105
|
+
await this.recreatePool(connection);
|
106
|
+
}
|
107
|
+
throw e;
|
108
|
+
}
|
109
|
+
finally {
|
110
|
+
await dbConnection.close();
|
111
|
+
// console.log('\n************* stat after close ****************')
|
112
|
+
// await oracledb.getPool(poolAlias).logStatistics()
|
113
|
+
}
|
114
|
+
return taskResult;
|
42
115
|
},
|
43
|
-
close:
|
116
|
+
close: async () => {
|
117
|
+
await oracledb.getPool(poolAlias).close(10);
|
118
|
+
}
|
44
119
|
});
|
45
120
|
connection_manager_1.ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`);
|
46
121
|
}
|
@@ -72,6 +147,27 @@ class OracleConnector {
|
|
72
147
|
name: 'database',
|
73
148
|
placeholder: 'SID',
|
74
149
|
label: 'database'
|
150
|
+
},
|
151
|
+
{
|
152
|
+
type: 'number',
|
153
|
+
name: 'poolMin',
|
154
|
+
placeholder: 'minimum connection-pool size',
|
155
|
+
label: 'pool-min',
|
156
|
+
value: 0
|
157
|
+
},
|
158
|
+
{
|
159
|
+
type: 'number',
|
160
|
+
name: 'poolMax',
|
161
|
+
placeholder: 'maximum connection-pool size',
|
162
|
+
label: 'pool-max',
|
163
|
+
value: 4
|
164
|
+
},
|
165
|
+
{
|
166
|
+
type: 'number',
|
167
|
+
name: 'poolIncrement',
|
168
|
+
placeholder: 'connection incremental size',
|
169
|
+
label: 'pool-increment',
|
170
|
+
value: 1
|
75
171
|
}
|
76
172
|
];
|
77
173
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"oracle-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/oracle-connector.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAE5C,8DAAyD;AAKzD,IAAI;IACF,IAAI,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;CACjC;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;CAC/C;AAED,MAAa,eAAe;IAC1B,KAAK,CAAC,KAAK,CAAC,iBAAoC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;QAEtD,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAA2B;QACvC,MAAM,EACJ,QAAQ,EACR,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EACrC,GAAG,UAAU,CAAA;QAEd,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAA;SAClD;QAED,6FAA6F;QAC7F,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC;YACxC,IAAI;YACJ,QAAQ;YACR,aAAa,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,IAAI,QAAQ,EAAE;SAChD,CAAC,CAAA;QAEF,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE;YAClD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC7B,OAAO,CACL,MAAM,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE;oBAClC,SAAS,EAAE,MAAM,CAAC,MAAM;iBACzB,CAAC,CACH,CAAC,IAAI,CAAA;YACR,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE;gBACnC,oFAAoF;gBACpF,SAAS,GAAG;YACR,SAAS;aACR,CAAA;gBAEL,OAAO,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE;oBAC7C,SAAS,EAAE,MAAM,CAAC,MAAM;iBACzB,CAAC,CAAA;YACJ,CAAC;YACD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;SACjC,CAAC,CAAA;QAEF,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,IAAI,QAAQ,QAAQ,QAAQ,aAAa,CAAC,CAAA;IAC5G,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAA2B;QAC1C,IAAI,MAAM,GAAG,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAEhE,IAAI;YACF,MAAM,MAAM,CAAC,KAAK,EAAE,CAAA;YACpB,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,WAAW,CAAC,CAAA;SAC7E;QAAC,OAAO,CAAC,EAAE;YACV,sCAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SAClC;QAED,sCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,aAAa;QACf,OAAO;YACL;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,MAAM;gBACZ,KAAK,EAAE,MAAM;aACd;YACD;gBACE,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,UAAU;aAClB;YACD;gBACE,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,UAAU;gBAChB,WAAW,EAAE,KAAK;gBAClB,KAAK,EAAE,UAAU;aAClB;SACF,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI,IAAI;QACN,OAAO,wCAAwC,CAAA;IACjD,CAAC;CACF;AAzFD,0CAyFC;AAED,sCAAiB,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,eAAe,EAAE,CAAC,CAAA;AAE9E,kBAAkB;AAClB,yHAAyH;AACzH,4DAA4D;AAE5D,2DAA2D","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\n\ntry {\n var Client = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\nexport class OracleConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('oracle-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n const {\n endpoint,\n params: { user, password, database }\n } = connection\n\n if (!Client) {\n throw new Error('oracledb module loading failed')\n }\n\n //when oracle not using default port must add connection string with port like localhsot:port\n const client = await Client.getConnection({\n user,\n password,\n connectString: `${endpoint.trim()}/${database}`\n })\n\n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n return (\n await client.execute(query, params, {\n outFormat: Client.OBJECT\n })\n ).rows\n },\n execute: async (procedure, params) => {\n // TODO: need to check if this is available when procedure string is a common query.\n procedure = `BEGIN\n ${procedure}\n END;`\n\n return await client.execute(procedure, params, {\n outFormat: Client.OBJECT\n })\n },\n close: client.close.bind(client)\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`)\n }\n\n async disconnect(connection: InputConnection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n\n try {\n await client.close()\n ConnectionManager.logger.info(`Oracle Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n placeholder: 'SID',\n label: 'database'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database', 'oracle']\n }\n\n get help() {\n return 'integration/connector/oracle-connector'\n }\n}\n\nConnectionManager.registerConnector('oracle-connector', new OracleConnector())\n\n// need reference:\n// https://download.oracle.com/otn_software/mac/instantclient/193000/instantclient-basiclite-macos.x64-19.3.0.0.0dbru.zip\n// https://node-oracledb.readthedocs.io/en/latest/index.html\n\n// docker pull store/oracle/database-instantclient:12.2.0.1\n"]}
|
1
|
+
{"version":3,"file":"oracle-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/oracle-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\ntry {\n var oracledb = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\nexport class OracleConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('oracle-connector connections are ready')\n }\n\n async recreatePool(connection: InputConnection) {\n const {\n name,\n endpoint,\n params: { user, password, database, poolMin, poolMax, poolIncrement },\n domain\n } = connection\n\n if (!oracledb) {\n throw new Error('oracledb module loading failed')\n }\n\n const poolAlias = `${domain.name}-${name}`\n await oracledb.getPool(poolAlias).close(10)\n await oracledb.createPool({\n user,\n password,\n // when oracle not using default port must add connection string with port like localhost:port\n connectString: `${endpoint.trim()}/${database}`,\n poolMin,\n poolMax,\n poolIncrement,\n poolAlias\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} recreated.`)\n }\n\n async connect(connection: InputConnection) {\n const {\n name,\n endpoint,\n params: { user, password, database, poolMin, poolMax, poolIncrement },\n domain\n } = connection\n\n if (!oracledb) {\n throw new Error('oracledb module loading failed')\n }\n\n const poolAlias = `${domain.name}-${name}`\n\n var enableStatistics = true\n const pool = await oracledb.createPool({\n user,\n password,\n // when oracle not using default port must add connection string with port like localhost:port\n connectString: `${endpoint.trim()}/${database}`,\n poolMin,\n poolMax,\n poolIncrement,\n poolAlias,\n enableStatistics\n })\n \n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n let dbConnection: any = {}\n let taskResult: any = {}\n try {\n dbConnection = await oracledb.getConnection(poolAlias)\n\n taskResult = (\n await dbConnection.execute(query, params, {\n outFormat: oracledb.OBJECT\n })\n ).rows\n } catch (e) {\n if (e.name === 'Error' && e.message.includes('NJS-040')) {\n await this.recreatePool(connection)\n }\n throw e\n }\n finally {\n await dbConnection.close()\n }\n return taskResult\n \n },\n execute: async (procedure, params) => {\n let dbConnection: any = {}\n let taskResult: any = {}\n try {\n // TODO: need to check if this is available when procedure string is a common query.\n procedure = `BEGIN\n ${procedure}\n END;`\n dbConnection = await oracledb.getConnection(poolAlias)\n \n // console.log('\\n************* stat after get ****************')\n // await oracledb.getPool(poolAlias).logStatistics()\n\n const result = await dbConnection.execute(procedure, params, {\n outFormat: oracledb.OBJECT\n })\n\n let paramKeys = Object.keys(params)\n\n for (const paramKey of paramKeys) {\n if (params[paramKey].dir === oracledb?.BIND_OUT) {\n if (params[paramKey].type === oracledb?.CURSOR) {\n const resultSetTemp = result.outBinds[paramKey]\n taskResult[paramKey] = await resultSetTemp.getRows()\n await resultSetTemp.close()\n } else {\n taskResult[paramKey] = result.outBinds[paramKey]\n }\n }\n }\n } catch (e) {\n if (e.name === 'Error' && e.message.includes('NJS-040')) {\n await this.recreatePool(connection)\n }\n throw e\n }\n finally {\n await dbConnection.close()\n\n // console.log('\\n************* stat after close ****************')\n // await oracledb.getPool(poolAlias).logStatistics()\n }\n return taskResult\n },\n close: async () => {\n await oracledb.getPool(poolAlias).close(10)\n }\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`)\n }\n\n async disconnect(connection: InputConnection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n\n try {\n await client.close()\n ConnectionManager.logger.info(`Oracle Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n placeholder: 'SID',\n label: 'database'\n },\n {\n type: 'number',\n name: 'poolMin',\n placeholder: 'minimum connection-pool size',\n label: 'pool-min',\n value: 0\n },\n {\n type: 'number',\n name: 'poolMax',\n placeholder: 'maximum connection-pool size',\n label: 'pool-max',\n value: 4\n },\n {\n type: 'number',\n name: 'poolIncrement',\n placeholder: 'connection incremental size',\n label: 'pool-increment',\n value: 1\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database', 'oracle']\n }\n\n get help() {\n return 'integration/connector/oracle-connector'\n }\n}\n\nConnectionManager.registerConnector('oracle-connector', new OracleConnector())\n\n// need reference:\n// https://download.oracle.com/otn_software/mac/instantclient/193000/instantclient-basiclite-macos.x64-19.3.0.0.0dbru.zip\n// https://node-oracledb.readthedocs.io/en/latest/index.html\n\n// docker pull store/oracle/database-instantclient:12.2.0.1\n"]}
|
@@ -66,22 +66,8 @@ async function OracleProcedure(step, context) {
|
|
66
66
|
return sum;
|
67
67
|
}, {});
|
68
68
|
const result = await dbconnection.execute(code, procedureParameters);
|
69
|
-
var taskResult = {};
|
70
|
-
let paramKeys = Object.keys(procedureParameters);
|
71
|
-
for (const paramKey of paramKeys) {
|
72
|
-
if (procedureParameters[paramKey].dir === (oracledb === null || oracledb === void 0 ? void 0 : oracledb.BIND_OUT)) {
|
73
|
-
if (procedureParameters[paramKey].type === (oracledb === null || oracledb === void 0 ? void 0 : oracledb.CURSOR)) {
|
74
|
-
const resultSetTemp = result.outBinds[paramKey];
|
75
|
-
taskResult[paramKey] = await resultSetTemp.getRows();
|
76
|
-
await resultSetTemp.close();
|
77
|
-
}
|
78
|
-
else {
|
79
|
-
taskResult[paramKey] = result.outBinds[paramKey];
|
80
|
-
}
|
81
|
-
}
|
82
|
-
}
|
83
69
|
return {
|
84
|
-
data:
|
70
|
+
data: result
|
85
71
|
};
|
86
72
|
}
|
87
73
|
OracleProcedure.parameterSpec = [
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"oracle-procedure.js","sourceRoot":"","sources":["../../../server/engine/task/oracle-procedure.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"oracle-procedure.js","sourceRoot":"","sources":["../../../server/engine/task/oracle-procedure.ts"],"names":[],"mappings":"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","sourcesContent":["import { VM } from 'vm2'\nimport { logger } from '@things-factory/env'\nimport { access } from '@things-factory/utils'\nimport { ConnectionManager } from '../connection-manager'\nimport { TaskRegistry } from '../task-registry'\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\ntry {\n var oracledb = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\ntype ProcedureParameterType = {\n name: string\n dir: string\n type: string\n val?: any\n accessor?: string\n maxSize?: number\n}\n\ntype ValueType = {\n code?: string\n procedure?: string\n parameters?: ProcedureParameterType[]\n}\n\nconst TYPES = {\n Number: oracledb?.NUMBER,\n String: oracledb?.STRING,\n Date: oracledb?.DATE,\n Buffer: oracledb?.BUFFER,\n Blob: oracledb?.BLOB,\n Clob: oracledb?.CLOB,\n Cursor: oracledb?.CURSOR\n}\n\nconst DIR = {\n In: oracledb?.BIND_IN,\n Inout: oracledb?.BIND_INOUT,\n Out: oracledb?.BIND_OUT\n}\n\nasync function OracleProcedure(step: InputStep, context: Context) {\n var { domain, user, data, variables, lng } = context\n var { connection: connectionName, params } = step\n\n var { code = '', parameters = [] } = params.parameters as ValueType\n\n var dbconnection = ConnectionManager.getConnectionInstanceByName(domain, connectionName)\n\n const vm = new VM({\n sandbox: {\n domain,\n user,\n lng,\n data,\n variables\n }\n })\n\n if (!code) {\n throw 'procedure code not defined'\n }\n\n code = vm.run('`' + code + '`')\n\n const procedureParameters =\n parameters &&\n parameters.reduce((sum, { name, val, dir, type, accessor, maxSize }) => {\n sum[name] = {\n dir: DIR[dir],\n type: TYPES[type]\n }\n\n const calculated = accessor ? access(accessor, data) || val : val\n\n if (calculated !== undefined) {\n sum[name].val =\n type == 'Date'\n ? new Date(calculated)\n : type == 'Number'\n ? Number(calculated)\n : type == 'String'\n ? String(calculated)\n : calculated\n }\n\n if (maxSize) {\n sum[name].maxSize = maxSize\n }\n\n return sum\n }, {})\n\n const result = await dbconnection.execute(code, procedureParameters)\n\n return {\n data: result\n }\n}\n\nOracleProcedure.parameterSpec = [\n {\n type: 'procedure-parameters',\n name: 'parameters',\n label: ''\n }\n]\n\nOracleProcedure.help = 'integration/task/oracle-procedure'\n\nTaskRegistry.registerTaskHandler('oracle-procedure', OracleProcedure)\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"headless-pool-for-scenario.js","sourceRoot":"","sources":["../../../../server/engine/task/utils/headless-pool-for-scenario.ts"],"names":[],"mappings":";;;;AAAA,kEAA2C;AAE3C,6CAAoD;AAEpD,IAAI;IACF,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CACrC;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;CAClB;AAED,IAAI,YAAY,CAAA;AAEhB,SAAgB,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,WAAW,CAAC,UAAU,CACnC;YACE,MAAM;gBACJ,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;gBACzD,OAAO,kBAAkB,EAAE,CAAA;YAC7B,CAAC;YACD,QAAQ,CAAC,OAAO;gBACd,OAAO,OAAO,CAAC,IAAI,CAAC;oBAClB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;oBACtD,OAAO;wBACL,YAAY;yBACX,OAAO,EAAE;yBACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;yBACf,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;iBACrB,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,OAAO;gBACb,YAAY;gBACZ,OAAO,OAAO,CAAC,KAAK,EAAE,CAAA;YACxB,CAAC;SACF,EACD;YACE,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,KAAK;SAC5B,CACF,CAAA;KACF;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAjCD,0CAiCC;AAED,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAEjD,KAAK,UAAU,kBAAkB;IAC/B,IAAI;QACF,IAAI,CAAC,SAAS,EAAE;YACd,OAAM;SACP;QAED,IAAI,aAAa,GAAG;YAClB,IAAI,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;YACtC,QAAQ,EAAE,
|
1
|
+
{"version":3,"file":"headless-pool-for-scenario.js","sourceRoot":"","sources":["../../../../server/engine/task/utils/headless-pool-for-scenario.ts"],"names":[],"mappings":";;;;AAAA,kEAA2C;AAE3C,6CAAoD;AAEpD,IAAI;IACF,IAAI,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;CACrC;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;CAClB;AAED,IAAI,YAAY,CAAA;AAEhB,SAAgB,eAAe;IAC7B,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG,WAAW,CAAC,UAAU,CACnC;YACE,MAAM;gBACJ,OAAO,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAA;gBACzD,OAAO,kBAAkB,EAAE,CAAA;YAC7B,CAAC;YACD,QAAQ,CAAC,OAAO;gBACd,OAAO,OAAO,CAAC,IAAI,CAAC;oBAClB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;oBACtD,OAAO;wBACL,YAAY;yBACX,OAAO,EAAE;yBACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC;yBACf,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC;iBACrB,CAAC,CAAA;YACJ,CAAC;YACD,OAAO,CAAC,OAAO;gBACb,YAAY;gBACZ,OAAO,OAAO,CAAC,KAAK,EAAE,CAAA;YACxB,CAAC;SACF,EACD;YACE,GAAG,EAAE,CAAC;YACN,GAAG,EAAE,EAAE;YACP,YAAY,EAAE,IAAI;YAClB,oBAAoB,EAAE,KAAK;SAC5B,CACF,CAAA;KACF;IAED,OAAO,YAAY,CAAA;AACrB,CAAC;AAjCD,0CAiCC;AAED,MAAM,aAAa,GAAG,YAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;AAEjD,KAAK,UAAU,kBAAkB;IAC/B,IAAI;QACF,IAAI,CAAC,SAAS,EAAE;YACd,OAAM;SACP;QAED,IAAI,aAAa,GAAG;YAClB,IAAI,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;YACtC,QAAQ,EAAE,OAAO;SAClB,CAAA;QAED,IAAI,aAAa,EAAE;YACjB,aAAa,CAAC,gBAAgB,CAAC,GAAG,aAAa,CAAA;SAChD;QAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;QAErD,OAAO,OAAO,CAAA;KACf;IAAC,OAAO,GAAG,EAAE;QACZ,YAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;KAClB;AACH,CAAC","sourcesContent":["import * as genericPool from 'generic-pool'\n\nimport { config, logger } from '@things-factory/env'\n\ntry {\n var puppeteer = require('puppeteer')\n} catch (err) {\n logger.error(err)\n}\n\nvar headlessPool\n\nexport function getHeadlessPool() {\n if (!headlessPool) {\n headlessPool = genericPool.createPool(\n {\n create() {\n console.log('headless-pool-for-scensrio about to create')\n return initializeChromium()\n },\n validate(browser) {\n return Promise.race([\n new Promise(res => setTimeout(() => res(false), 1500)),\n browser\n //@ts-ignore\n .version()\n .then(_ => true)\n .catch(_ => false)\n ])\n },\n destroy(browser) {\n //@ts-ignore\n return browser.close()\n }\n },\n {\n min: 2,\n max: 10,\n testOnBorrow: true,\n acquireTimeoutMillis: 15000\n }\n )\n }\n\n return headlessPool\n}\n\nconst CHROMIUM_PATH = config.get('CHROMIUM_PATH')\n\nasync function initializeChromium() {\n try {\n if (!puppeteer) {\n return\n }\n\n var launchSetting = {\n args: ['--mute-audio', '--no-sandbox'],\n headless: 'shell'\n }\n\n if (CHROMIUM_PATH) {\n launchSetting['executablePath'] = CHROMIUM_PATH\n }\n\n const browser = await puppeteer.launch(launchSetting)\n\n return browser\n } catch (err) {\n logger.error(err)\n }\n}\n"]}
|
package/dist-server/index.js
CHANGED
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
4
4
|
tslib_1.__exportStar(require("./migrations"), exports);
|
5
5
|
tslib_1.__exportStar(require("./engine"), exports);
|
6
|
+
tslib_1.__exportStar(require("./controllers"), exports);
|
6
7
|
tslib_1.__exportStar(require("./service"), exports);
|
7
8
|
require("./routes");
|
8
9
|
require("./restful"); /* APIs */
|
package/dist-server/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;AAAA,uDAA4B;AAC5B,mDAAwB;AACxB,oDAAyB;AAEzB,oBAAiB;AACjB,qBAAkB,CAAC,UAAU;AAE7B,qCAA4D;AAE5D,OAAO,CAAC,EAAE,CAAC,wBAA+B,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAO,EAAE,EAAE;IACjF,IAAI;QACF,MAAM,0BAAiB,CAAC,KAAK,EAAE,CAAA;QAC/B,MAAM,uBAAc,CAAC,OAAO,EAAE,CAAA;QAE9B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;KACjD;IAAC,OAAO,EAAE,EAAE;QACX,0BAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;KACzD;AACH,CAAC,CAAC,CAAA","sourcesContent":["export * from './migrations'\nexport * from './engine'\nexport * from './service'\n\nimport './routes'\nimport './restful' /* APIs */\n\nimport { ConnectionManager, ScenarioEngine } from './engine'\n\nprocess.on('bootstrap-module-start' as any, async ({ app, config, client }: any) => {\n try {\n await ConnectionManager.ready()\n await ScenarioEngine.loadAll()\n\n console.log('Scenario Engine has just started.')\n } catch (ex) {\n ConnectionManager.logger.error(ex)\n console.log('Just has failed to start Scenario Engine.')\n }\n})\n"]}
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../server/index.ts"],"names":[],"mappings":";;;AAAA,uDAA4B;AAC5B,mDAAwB;AACxB,wDAA6B;AAC7B,oDAAyB;AAEzB,oBAAiB;AACjB,qBAAkB,CAAC,UAAU;AAE7B,qCAA4D;AAE5D,OAAO,CAAC,EAAE,CAAC,wBAA+B,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAO,EAAE,EAAE;IACjF,IAAI;QACF,MAAM,0BAAiB,CAAC,KAAK,EAAE,CAAA;QAC/B,MAAM,uBAAc,CAAC,OAAO,EAAE,CAAA;QAE9B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;KACjD;IAAC,OAAO,EAAE,EAAE;QACX,0BAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAClC,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;KACzD;AACH,CAAC,CAAC,CAAA","sourcesContent":["export * from './migrations'\nexport * from './engine'\nexport * from './controllers'\nexport * from './service'\n\nimport './routes'\nimport './restful' /* APIs */\n\nimport { ConnectionManager, ScenarioEngine } from './engine'\n\nprocess.on('bootstrap-module-start' as any, async ({ app, config, client }: any) => {\n try {\n await ConnectionManager.ready()\n await ScenarioEngine.loadAll()\n\n console.log('Scenario Engine has just started.')\n } catch (ex) {\n ConnectionManager.logger.error(ex)\n console.log('Just has failed to start Scenario Engine.')\n }\n})\n"]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"run-scenario.js","sourceRoot":"","sources":["../../../server/restful/unstable/run-scenario.ts"],"names":[],"mappings":";;;AAAA,sEAA6B;AAE7B,6CAAgE;
|
1
|
+
{"version":3,"file":"run-scenario.js","sourceRoot":"","sources":["../../../server/restful/unstable/run-scenario.ts"],"names":[],"mappings":";;;AAAA,sEAA6B;AAE7B,6CAAgE;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,+DAA+D,CAAC,CAAA;AAE/F,sBAAM,CAAC,IAAI,CAAC,sCAAsC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;IACvC,IAAI,EAAE,YAAY,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,IAAI,CAAA;IAEhD,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACvC,SAAS,GAAG,IAAI,CAAA;KACjB;IAED,KAAK,CAAC,2CAA2C,EAAE,YAAY,CAAC,CAAA;IAChE,IAAI,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAA,qBAAG,EAAA;;;;;;;;;;;;KAYZ;QACD,SAAS,EAAE;YACT,YAAY;YACZ,YAAY;YACZ,SAAS;SACV;QACD,OAAO;KACR,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAA;IAEjC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,CAAC,MAAM,GAAG,GAAG,CAAA;QACpB,OAAO,CAAC,IAAI,GAAG,MAAM,CAAA;QAErB,OAAM;KACP;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAA;IAEnC,OAAO,CAAC,IAAI,GAAG,MAAM,CAAA;AACvB,CAAC,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\n\nimport { restfulApiRouter as router } from '@things-factory/api'\n\nconst debug = require('debug')('things-factory:integration-base:restful:unstable:run-scenario')\n\nrouter.post('/unstable/run-scenario/:scenarioName', async (context, next) => {\n const { client } = context.state\n const { scenarioName } = context.params\n const body = context.request.body || {}\n let { instanceName = '', variables = {} } = body\n\n if (Object.keys(variables).length === 0) {\n variables = body\n }\n\n debug('post:/unstable/run-scenario/:scenarioName', scenarioName)\n let response = await client.mutate({\n mutation: gql`\n mutation ($instanceName: String, $scenarioName: String!, $variables: Object) {\n runScenario(instanceName: $instanceName, scenarioName: $scenarioName, variables: $variables) {\n instanceName\n scenarioName\n state\n data\n result\n message\n timestamp\n }\n }\n `,\n variables: {\n instanceName,\n scenarioName,\n variables\n },\n context\n })\n\n const { errors, data } = response\n\n if (!data) {\n context.status = 500\n context.body = errors\n\n return\n }\n\n const { result } = data.runScenario\n\n context.body = result\n})\n"]}
|
@@ -11,7 +11,7 @@ api_1.restfulApiRouter.post('/unstable/start-scenario/:scenarioName', async (con
|
|
11
11
|
debug('post:/unstable/start-scenario/:scenarioName', scenarioName);
|
12
12
|
context.body = await client.mutate({
|
13
13
|
mutation: (0, graphql_tag_1.default) `
|
14
|
-
mutation($instanceName: String, $scenarioName: String!, $variables: Object) {
|
14
|
+
mutation ($instanceName: String, $scenarioName: String!, $variables: Object) {
|
15
15
|
startScenario(instanceName: $instanceName, scenarioName: $scenarioName, variables: $variables) {
|
16
16
|
instanceName
|
17
17
|
scenarioName
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"start-scenario.js","sourceRoot":"","sources":["../../../server/restful/unstable/start-scenario.ts"],"names":[],"mappings":";;;AAAA,sEAA6B;AAC7B,6CAAgE;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,iEAAiE,CAAC,CAAA;AAEjG,sBAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IACvC,MAAM,EAAE,YAAY,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;IAExE,KAAK,CAAC,6CAA6C,EAAE,YAAY,CAAC,CAAA;IAElE,OAAO,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAA,qBAAG,EAAA;;;;;;;;;;;KAWZ;QACD,SAAS,EAAE;YACT,YAAY;YACZ,YAAY;YACZ,SAAS;SACV;QACD,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\nimport { restfulApiRouter as router } from '@things-factory/api'\n\nconst debug = require('debug')('things-factory:integration-base:restful:unstable:start-scenario')\n\nrouter.post('/unstable/start-scenario/:scenarioName', async (context, next) => {\n const { client } = context.state\n const { scenarioName } = context.params\n const { instanceName = '', variables = {} } = context.request.body || {}\n\n debug('post:/unstable/start-scenario/:scenarioName', scenarioName)\n\n context.body = await client.mutate({\n mutation: gql`\n mutation($instanceName: String, $scenarioName: String!, $variables: Object) {\n startScenario(instanceName: $instanceName, scenarioName: $scenarioName, variables: $variables) {\n instanceName\n scenarioName\n state\n data\n message\n timestamp\n }\n }\n `,\n variables: {\n instanceName,\n scenarioName,\n variables\n },\n context\n })\n})\n"]}
|
1
|
+
{"version":3,"file":"start-scenario.js","sourceRoot":"","sources":["../../../server/restful/unstable/start-scenario.ts"],"names":[],"mappings":";;;AAAA,sEAA6B;AAC7B,6CAAgE;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,iEAAiE,CAAC,CAAA;AAEjG,sBAAM,CAAC,IAAI,CAAC,wCAAwC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC5E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IACvC,MAAM,EAAE,YAAY,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAA;IAExE,KAAK,CAAC,6CAA6C,EAAE,YAAY,CAAC,CAAA;IAElE,OAAO,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAA,qBAAG,EAAA;;;;;;;;;;;KAWZ;QACD,SAAS,EAAE;YACT,YAAY;YACZ,YAAY;YACZ,SAAS;SACV;QACD,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\nimport { restfulApiRouter as router } from '@things-factory/api'\n\nconst debug = require('debug')('things-factory:integration-base:restful:unstable:start-scenario')\n\nrouter.post('/unstable/start-scenario/:scenarioName', async (context, next) => {\n const { client } = context.state\n const { scenarioName } = context.params\n const { instanceName = '', variables = {} } = context.request.body || {}\n\n debug('post:/unstable/start-scenario/:scenarioName', scenarioName)\n\n context.body = await client.mutate({\n mutation: gql`\n mutation ($instanceName: String, $scenarioName: String!, $variables: Object) {\n startScenario(instanceName: $instanceName, scenarioName: $scenarioName, variables: $variables) {\n instanceName\n scenarioName\n state\n data\n message\n timestamp\n }\n }\n `,\n variables: {\n instanceName,\n scenarioName,\n variables\n },\n context\n })\n})\n"]}
|
@@ -10,7 +10,7 @@ api_1.restfulApiRouter.post('/unstable/stop-scenario/:instanceName', async (cont
|
|
10
10
|
debug('post:/unstable/stop-scenario/:scenarioName', instanceName);
|
11
11
|
context.body = await client.mutate({
|
12
12
|
mutation: (0, graphql_tag_1.default) `
|
13
|
-
mutation($instanceName: String!) {
|
13
|
+
mutation ($instanceName: String!) {
|
14
14
|
stopScenario(instanceName: $instanceName) {
|
15
15
|
instanceName
|
16
16
|
scenarioName
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"stop-scenario.js","sourceRoot":"","sources":["../../../server/restful/unstable/stop-scenario.ts"],"names":[],"mappings":";;;AAAA,sEAA6B;AAC7B,6CAAgE;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,gEAAgE,CAAC,CAAA;AAEhG,sBAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IAEvC,KAAK,CAAC,4CAA4C,EAAE,YAAY,CAAC,CAAA;IAEjE,OAAO,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAA,qBAAG,EAAA;;;;;;;;;;;KAWZ;QACD,SAAS,EAAE;YACT,YAAY;SACb;QACD,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\nimport { restfulApiRouter as router } from '@things-factory/api'\n\nconst debug = require('debug')('things-factory:integration-base:restful:unstable:stop-scenario')\n\nrouter.post('/unstable/stop-scenario/:instanceName', async (context, next) => {\n const { client } = context.state\n const { instanceName } = context.params\n\n debug('post:/unstable/stop-scenario/:scenarioName', instanceName)\n\n context.body = await client.mutate({\n mutation: gql`\n mutation($instanceName: String!) {\n stopScenario(instanceName: $instanceName) {\n instanceName\n scenarioName\n state\n data\n message\n timestamp\n }\n }\n `,\n variables: {\n instanceName\n },\n context\n })\n})\n"]}
|
1
|
+
{"version":3,"file":"stop-scenario.js","sourceRoot":"","sources":["../../../server/restful/unstable/stop-scenario.ts"],"names":[],"mappings":";;;AAAA,sEAA6B;AAC7B,6CAAgE;AAEhE,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,gEAAgE,CAAC,CAAA;AAEhG,sBAAM,CAAC,IAAI,CAAC,uCAAuC,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE;IAC3E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;IAChC,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,MAAM,CAAA;IAEvC,KAAK,CAAC,4CAA4C,EAAE,YAAY,CAAC,CAAA;IAEjE,OAAO,CAAC,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QACjC,QAAQ,EAAE,IAAA,qBAAG,EAAA;;;;;;;;;;;KAWZ;QACD,SAAS,EAAE;YACT,YAAY;SACb;QACD,OAAO;KACR,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA","sourcesContent":["import gql from 'graphql-tag'\nimport { restfulApiRouter as router } from '@things-factory/api'\n\nconst debug = require('debug')('things-factory:integration-base:restful:unstable:stop-scenario')\n\nrouter.post('/unstable/stop-scenario/:instanceName', async (context, next) => {\n const { client } = context.state\n const { instanceName } = context.params\n\n debug('post:/unstable/stop-scenario/:scenarioName', instanceName)\n\n context.body = await client.mutate({\n mutation: gql`\n mutation ($instanceName: String!) {\n stopScenario(instanceName: $instanceName) {\n instanceName\n scenarioName\n state\n data\n message\n timestamp\n }\n }\n `,\n variables: {\n instanceName\n },\n context\n })\n})\n"]}
|
@@ -4,84 +4,17 @@ exports.ScenarioInstanceMutation = void 0;
|
|
4
4
|
const tslib_1 = require("tslib");
|
5
5
|
const type_graphql_1 = require("type-graphql");
|
6
6
|
const shell_1 = require("@things-factory/shell");
|
7
|
-
const engine_1 = require("../../engine");
|
8
|
-
const scenario_1 = require("../scenario/scenario");
|
9
7
|
const scenario_instance_type_1 = require("./scenario-instance-type");
|
10
|
-
const
|
11
|
-
const debug = require('debug')('things-factory:integration-base:scenario-instance-mutation');
|
12
|
-
async function findScenario(scenarioName, domain) {
|
13
|
-
var repository = (0, shell_1.getRepository)(scenario_1.Scenario);
|
14
|
-
var scenario = await repository.findOne({
|
15
|
-
where: { domain: { id: domain.id }, name: scenarioName },
|
16
|
-
relations: ['domain', 'steps', 'creator', 'updater']
|
17
|
-
});
|
18
|
-
if (!scenario && domain.parentId) {
|
19
|
-
scenario = await repository.findOne({
|
20
|
-
where: { domain: { id: domain.parentId }, name: scenarioName },
|
21
|
-
relations: ['domain', 'steps', 'creator', 'updater']
|
22
|
-
});
|
23
|
-
}
|
24
|
-
return scenario;
|
25
|
-
}
|
8
|
+
const scenario_controller_1 = require("../../controllers/scenario-controller");
|
26
9
|
let ScenarioInstanceMutation = class ScenarioInstanceMutation {
|
27
10
|
async runScenario(instanceName, scenarioName, variables, context) {
|
28
|
-
|
29
|
-
debug('runScenario', scenarioName, instanceName, variables);
|
30
|
-
var scenario = await findScenario(scenarioName, domain);
|
31
|
-
if (!scenario) {
|
32
|
-
throw new Error(context.t('error.scenario not found', {
|
33
|
-
scenario: scenarioName
|
34
|
-
}));
|
35
|
-
}
|
36
|
-
if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
37
|
-
const { category, privilege } = scenario.privilege || {};
|
38
|
-
throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
|
39
|
-
}
|
40
|
-
/* 시나리오 인스턴스를 생성한다. */
|
41
|
-
instanceName = instanceName || scenarioName + '-' + String(Date.now());
|
42
|
-
var instance = new scenario_instance_type_1.ScenarioInstance(instanceName, scenario, {
|
43
|
-
domain,
|
44
|
-
user,
|
45
|
-
lng,
|
46
|
-
variables,
|
47
|
-
client: shell_1.GraphqlLocalClient.client
|
48
|
-
});
|
49
|
-
await instance.run();
|
50
|
-
return instance;
|
11
|
+
return await (0, scenario_controller_1.runScenario)(instanceName, scenarioName, variables, context);
|
51
12
|
}
|
52
13
|
async startScenario(instanceName, scenarioName, variables, context) {
|
53
|
-
|
54
|
-
debug('startScenario', instanceName, scenarioName, variables);
|
55
|
-
var scenario = await findScenario(scenarioName, domain);
|
56
|
-
if (!scenario) {
|
57
|
-
throw new Error(context.t('error.scenario not found', {
|
58
|
-
scenario: scenarioName
|
59
|
-
}));
|
60
|
-
}
|
61
|
-
if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
62
|
-
const { category, privilege } = scenario.privilege || {};
|
63
|
-
throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
|
64
|
-
}
|
65
|
-
instanceName = instanceName || scenarioName;
|
66
|
-
return await engine_1.ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables });
|
14
|
+
return await (0, scenario_controller_1.startScenario)(instanceName, scenarioName, variables, context);
|
67
15
|
}
|
68
16
|
async stopScenario(instanceName, context) {
|
69
|
-
|
70
|
-
debug('stopScenario', instanceName);
|
71
|
-
var scenarioInstance = engine_1.ScenarioEngine.getScenarioInstance(domain, instanceName);
|
72
|
-
if (!scenarioInstance) {
|
73
|
-
debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`);
|
74
|
-
throw new Error(context.t('error.scenario instance not found', {
|
75
|
-
instance: instanceName
|
76
|
-
}));
|
77
|
-
}
|
78
|
-
var scenario = await findScenario(scenarioInstance.scenarioName, domain);
|
79
|
-
if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
|
80
|
-
const { category, privilege } = scenario.privilege || {};
|
81
|
-
throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
|
82
|
-
}
|
83
|
-
await engine_1.ScenarioEngine.unload(domain, instanceName);
|
84
|
-
return scenarioInstance;
|
17
|
+
return await (0, scenario_controller_1.stopScenario)(instanceName, context);
|
85
18
|
}
|
86
19
|
};
|
87
20
|
tslib_1.__decorate([
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"scenario-instance-mutation.js","sourceRoot":"","sources":["../../../server/service/scenario-instance/scenario-instance-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository, Domain, GraphqlLocalClient, ScalarObject } from '@things-factory/shell'\n\nimport { ScenarioEngine } from '../../engine'\nimport { Scenario } from '../scenario/scenario'\nimport { ScenarioInstance } from './scenario-instance-type'\nimport { PrivilegeObject, User, checkPermission } from '@things-factory/auth-base'\nimport { Step } from '../step/step-type'\n\nconst debug = require('debug')('things-factory:integration-base:scenario-instance-mutation')\n\nasync function findScenario(\n scenarioName: string,\n domain: Domain\n): Promise<{ name: string; steps: Step[]; domain: Domain; privilege?: PrivilegeObject }> {\n var repository = getRepository(Scenario)\n\n var scenario = await repository.findOne({\n where: { domain: { id: domain.id }, name: scenarioName },\n relations: ['domain', 'steps', 'creator', 'updater']\n })\n\n if (!scenario && domain.parentId) {\n scenario = await repository.findOne({\n where: { domain: { id: domain.parentId }, name: scenarioName },\n relations: ['domain', 'steps', 'creator', 'updater']\n })\n }\n\n return scenario as any\n}\n\n@Resolver(ScenarioInstance)\nexport class ScenarioInstanceMutation {\n @Mutation(returns => ScenarioInstance, {\n description: 'To run new scenario instance and will return the result after the scenario stop.'\n })\n async runScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('runScenario', scenarioName, instanceName, variables)\n\n var scenario = await findScenario(scenarioName, domain)\n\n if (!scenario) {\n throw new Error(\n context.t('error.scenario not found', {\n scenario: scenarioName\n })\n )\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(\n `Unauthorized! ${\n category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'\n } required`\n )\n }\n\n /* 시나리오 인스턴스를 생성한다. */\n instanceName = instanceName || scenarioName + '-' + String(Date.now())\n var instance = new ScenarioInstance(instanceName, scenario, {\n domain,\n user,\n lng,\n variables,\n client: GraphqlLocalClient.client\n })\n\n await instance.run()\n\n return instance\n }\n\n @Mutation(returns => ScenarioInstance, { description: 'To start new scenario instance' })\n async startScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('startScenario', instanceName, scenarioName, variables)\n\n var scenario = await findScenario(scenarioName, domain)\n\n if (!scenario) {\n throw new Error(\n context.t('error.scenario not found', {\n scenario: scenarioName\n })\n )\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(\n `Unauthorized! ${\n category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'\n } required`\n )\n }\n\n instanceName = instanceName || scenarioName\n return await ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables })\n }\n\n @Mutation(returns => ScenarioInstance, { nullable: true, description: 'To start new scenario instance' })\n async stopScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance | undefined> {\n const { domain, user, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('stopScenario', instanceName)\n\n var scenarioInstance = ScenarioEngine.getScenarioInstance(domain, instanceName)\n\n if (!scenarioInstance) {\n debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`)\n throw new Error(\n context.t('error.scenario instance not found', {\n instance: instanceName\n })\n )\n }\n\n var scenario = await findScenario(scenarioInstance.scenarioName, domain)\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(\n `Unauthorized! ${\n category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'\n } required`\n )\n }\n\n await ScenarioEngine.unload(domain, instanceName)\n\n return scenarioInstance\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"scenario-instance-mutation.js","sourceRoot":"","sources":["../../../server/service/scenario-instance/scenario-instance-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,iDAAoD;AAEpD,qEAA2D;AAE3D,+EAI8C;AAGvC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAI7B,AAAN,KAAK,CAAC,WAAW,CAC0B,YAAoB,EACxC,YAAoB,EACmB,SAAc,EACnE,OAAwB;QAE/B,OAAO,MAAM,IAAA,iCAAqB,EAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACpF,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CACwB,YAAoB,EACxC,YAAoB,EACmB,SAAc,EACnE,OAAwB;QAE/B,OAAO,MAAM,IAAA,mCAAuB,EAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACtF,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAA0C,YAAoB,EAAS,OAAwB;QAC/G,OAAO,MAAM,IAAA,kCAAsB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;CACF,CAAA;AAvBO;IAHL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,yCAAgB,EAAE;QACrC,WAAW,EAAE,kFAAkF;KAChG,CAAC;IAEC,mBAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,mBAAA,IAAA,kBAAG,EAAC,cAAc,CAAC,CAAA;IACnB,mBAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;2DAGP;AAGK;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,yCAAgB,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IAEtF,mBAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,mBAAA,IAAA,kBAAG,EAAC,cAAc,CAAC,CAAA;IACnB,mBAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;6DAGP;AAGK;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,yCAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IACrF,mBAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAAwB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4DAEvF;AA1BU,wBAAwB;IADpC,IAAA,uBAAQ,EAAC,yCAAgB,CAAC;GACd,wBAAwB,CA2BpC;AA3BY,4DAAwB","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { ScalarObject } from '@things-factory/shell'\n\nimport { ScenarioInstance } from './scenario-instance-type'\n\nimport {\n runScenario as controllerRunScenario,\n startScenario as controllerStartScenario,\n stopScenario as controllerStopScenario\n} from '../../controllers/scenario-controller'\n\n@Resolver(ScenarioInstance)\nexport class ScenarioInstanceMutation {\n @Mutation(returns => ScenarioInstance, {\n description: 'To run new scenario instance and will return the result after the scenario stop.'\n })\n async runScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n return await controllerRunScenario(instanceName, scenarioName, variables, context)\n }\n\n @Mutation(returns => ScenarioInstance, { description: 'To start new scenario instance' })\n async startScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n return await controllerStartScenario(instanceName, scenarioName, variables, context)\n }\n\n @Mutation(returns => ScenarioInstance, { nullable: true, description: 'To start new scenario instance' })\n async stopScenario(@Arg('instanceName', { nullable: true }) instanceName: string, @Ctx() context: ResolverContext): Promise<ScenarioInstance | undefined> {\n return await controllerStopScenario(instanceName, context)\n }\n}\n"]}
|