stentor-conditional 1.56.118 → 1.56.119
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/README.md +9 -0
- package/lib/ConditionalDeterminer.js +3 -3
- package/lib/ConditionalDeterminer.js.map +1 -1
- package/lib/getVM.d.ts +19 -0
- package/lib/getVM.js +59 -0
- package/lib/getVM.js.map +1 -0
- package/package.json +9 -4
package/README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
### stentor-conditional
|
|
2
|
+
|
|
3
|
+
Conditionals are objects with key `conditions` that are strings with simple expressions.
|
|
4
|
+
|
|
5
|
+
The conditional determiner will take an array of conditionals and evaluate each condition and return an array of all the conditionals that returned true.
|
|
6
|
+
|
|
7
|
+
### VM
|
|
8
|
+
|
|
9
|
+
By default, it uses the built-in Node VM but if you install vm2 or isolated-vm, it will then prefer that as your VM environment.
|
|
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ConditionalDeterminer = void 0;
|
|
4
4
|
/*! Copyright (c) 2020, XAPPmedia */
|
|
5
5
|
const stentor_logger_1 = require("stentor-logger");
|
|
6
|
-
const
|
|
6
|
+
const getVM_1 = require("./getVM");
|
|
7
7
|
/**
|
|
8
8
|
* ConditionalDeterminer is first configured with a set of conditional
|
|
9
9
|
* checks it can perform and then determines which is the best match.
|
|
@@ -50,7 +50,7 @@ class ConditionalDeterminer {
|
|
|
50
50
|
}
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
|
-
const vm =
|
|
53
|
+
const vm = (0, getVM_1.getVM)({
|
|
54
54
|
timeout: this.timeout,
|
|
55
55
|
sandbox: Object.assign({}, sandboxFunctions)
|
|
56
56
|
});
|
|
@@ -59,7 +59,7 @@ class ConditionalDeterminer {
|
|
|
59
59
|
result = vm.run(conditional.conditions);
|
|
60
60
|
}
|
|
61
61
|
catch (e) {
|
|
62
|
-
(0, stentor_logger_1.log)().error(
|
|
62
|
+
(0, stentor_logger_1.log)().error(`${vm.type}|Error evaluating conditions "${conditional.conditions}": ${e}`);
|
|
63
63
|
result = false;
|
|
64
64
|
}
|
|
65
65
|
// It should be a boolean but need to double check
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConditionalDeterminer.js","sourceRoot":"","sources":["../src/ConditionalDeterminer.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AACpC,mDAAqC;
|
|
1
|
+
{"version":3,"file":"ConditionalDeterminer.js","sourceRoot":"","sources":["../src/ConditionalDeterminer.ts"],"names":[],"mappings":"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"}
|
package/lib/getVM.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/*! Copyright (c) 2022, XAPP AI */
|
|
2
|
+
export interface VMable {
|
|
3
|
+
run(code: string): boolean;
|
|
4
|
+
type: string;
|
|
5
|
+
}
|
|
6
|
+
export declare type SandboxFunctions = {
|
|
7
|
+
[name: string]: ((input: any) => boolean | string | number);
|
|
8
|
+
};
|
|
9
|
+
export interface VMProps {
|
|
10
|
+
timeout: number;
|
|
11
|
+
sandbox: SandboxFunctions;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Returns a VM, defaults to Node's VM.
|
|
15
|
+
*
|
|
16
|
+
* @param props
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
export declare function getVM(props: VMProps): VMable;
|
package/lib/getVM.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*! Copyright (c) 2022, XAPP AI */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.getVM = void 0;
|
|
5
|
+
const node_vm_1 = require("node:vm");
|
|
6
|
+
/**
|
|
7
|
+
* Returns a VM, defaults to Node's VM.
|
|
8
|
+
*
|
|
9
|
+
* @param props
|
|
10
|
+
* @returns
|
|
11
|
+
*/
|
|
12
|
+
function getVM(props) {
|
|
13
|
+
let vm = {
|
|
14
|
+
run: (code) => {
|
|
15
|
+
const context = (0, node_vm_1.createContext)(props.sandbox);
|
|
16
|
+
return (0, node_vm_1.runInNewContext)(code, context);
|
|
17
|
+
},
|
|
18
|
+
type: "VM"
|
|
19
|
+
};
|
|
20
|
+
if (!process.env.SKIP_VM2) {
|
|
21
|
+
try {
|
|
22
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
23
|
+
const { VM } = require('vm2');
|
|
24
|
+
vm = new VM(props);
|
|
25
|
+
vm.type = "VM2";
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
// vm2 doesn't exist
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
if (!process.env.SKIP_IVM) {
|
|
32
|
+
try {
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
34
|
+
const ivm = require('isolated-vm');
|
|
35
|
+
const isolate = new ivm.Isolate({ memoryLimit: 128 });
|
|
36
|
+
vm = {
|
|
37
|
+
run: (code) => {
|
|
38
|
+
const context = isolate.createContextSync();
|
|
39
|
+
const jail = context.global;
|
|
40
|
+
Object.keys(props.sandbox).forEach((fnc) => {
|
|
41
|
+
const value = props.sandbox[fnc];
|
|
42
|
+
jail.setSync(fnc, (...args) => {
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
44
|
+
// @ts-ignore
|
|
45
|
+
return value(...args);
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
return context.evalSync(code);
|
|
49
|
+
},
|
|
50
|
+
type: "IVM"
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
catch (e) {
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return vm;
|
|
57
|
+
}
|
|
58
|
+
exports.getVM = getVM;
|
|
59
|
+
//# sourceMappingURL=getVM.js.map
|
package/lib/getVM.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getVM.js","sourceRoot":"","sources":["../src/getVM.ts"],"names":[],"mappings":";AAAA,kCAAkC;;;AAElC,qCAAyD;AAezD;;;;;GAKG;AACH,SAAgB,KAAK,CAAC,KAAc;IAEhC,IAAI,EAAE,GAAW;QACb,GAAG,EAAE,CAAC,IAAY,EAAW,EAAE;YAC3B,MAAM,OAAO,GAAG,IAAA,uBAAa,EAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,IAAA,yBAAe,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,EAAE,IAAI;KACb,CAAA;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvB,IAAI;YACA,8DAA8D;YAC9D,MAAM,EAAE,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9B,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC;YACnB,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC;SACnB;QAAC,OAAO,CAAC,EAAE;YACR,oBAAoB;SACvB;KACJ;IAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;QACvB,IAAI;YACA,8DAA8D;YAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YACtD,EAAE,GAAG;gBACD,GAAG,EAAE,CAAC,IAAY,EAAW,EAAE;oBAE3B,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;oBAE5C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;oBAE5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;wBACvC,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,IAAS,EAAE,EAAE;4BAC/B,6DAA6D;4BAC7D,aAAa;4BACb,OAAO,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;wBAC1B,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAClC,CAAC;gBACD,IAAI,EAAE,KAAK;aACd,CAAA;SAEJ;QAAC,OAAO,CAAC,EAAE;SAEX;KACJ;IAED,OAAO,EAAE,CAAC;AAEd,CAAC;AAtDD,sBAsDC"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "1.56.
|
|
7
|
+
"version": "1.56.119",
|
|
8
8
|
"description": "Conditionals for 📣 stentor",
|
|
9
9
|
"types": "lib/index",
|
|
10
10
|
"typings": "lib/index",
|
|
@@ -19,12 +19,17 @@
|
|
|
19
19
|
"@types/chai": "4.3.3",
|
|
20
20
|
"@xapp/config": "0.2.3",
|
|
21
21
|
"chai": "4.3.6",
|
|
22
|
+
"isolated-vm": "4.4.2",
|
|
22
23
|
"mocha": "9.2.2",
|
|
23
24
|
"stentor-models": "1.56.118",
|
|
24
|
-
"typescript": "4.8.4"
|
|
25
|
+
"typescript": "4.8.4",
|
|
26
|
+
"vm2": "3.9.11"
|
|
25
27
|
},
|
|
26
28
|
"dependencies": {
|
|
27
|
-
"stentor-logger": "1.56.118"
|
|
29
|
+
"stentor-logger": "1.56.118"
|
|
30
|
+
},
|
|
31
|
+
"optionalDependencies": {
|
|
32
|
+
"isolated-vm": "4.4.2",
|
|
28
33
|
"vm2": "3.9.11"
|
|
29
34
|
},
|
|
30
35
|
"peerDependencies": {
|
|
@@ -35,5 +40,5 @@
|
|
|
35
40
|
"clean": "rm -rf ./lib/*",
|
|
36
41
|
"test": "mocha --recursive -r ts-node/register \"./src/**/*.test.ts\""
|
|
37
42
|
},
|
|
38
|
-
"gitHead": "
|
|
43
|
+
"gitHead": "218f5238be6db31d0f89819ec65fc726b92c09a3"
|
|
39
44
|
}
|