@oneuptime/common 10.0.15 → 10.0.16
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.
|
@@ -1,13 +1,159 @@
|
|
|
1
1
|
import ReturnResult from "../../../Types/IsolatedVM/ReturnResult";
|
|
2
|
-
import { JSONObject } from "../../../Types/JSON";
|
|
2
|
+
import { JSONObject, JSONValue } from "../../../Types/JSON";
|
|
3
3
|
import axios, { AxiosResponse } from "axios";
|
|
4
4
|
import crypto from "crypto";
|
|
5
5
|
import http from "http";
|
|
6
6
|
import https from "https";
|
|
7
7
|
import ivm from "isolated-vm";
|
|
8
8
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
9
|
+
import Dictionary from "../../../Types/Dictionary";
|
|
10
|
+
import GenericObject from "../../../Types/GenericObject";
|
|
11
|
+
import vm, { Context } from "vm";
|
|
9
12
|
|
|
10
13
|
export default class VMRunner {
|
|
14
|
+
@CaptureSpan()
|
|
15
|
+
public static async runCodeInNodeVM(data: {
|
|
16
|
+
code: string;
|
|
17
|
+
options: {
|
|
18
|
+
timeout?: number;
|
|
19
|
+
args?: JSONObject | undefined;
|
|
20
|
+
context?: Dictionary<GenericObject | string> | undefined;
|
|
21
|
+
};
|
|
22
|
+
}): Promise<ReturnResult> {
|
|
23
|
+
const { code, options } = data;
|
|
24
|
+
const timeout: number = options.timeout || 5000;
|
|
25
|
+
|
|
26
|
+
const logMessages: string[] = [];
|
|
27
|
+
const MAX_LOG_BYTES: number = 1_000_000; // 1MB cap
|
|
28
|
+
let totalLogBytes: number = 0;
|
|
29
|
+
|
|
30
|
+
// Track timer handles so we can clean them up after execution
|
|
31
|
+
type TimerHandle = ReturnType<typeof setTimeout>;
|
|
32
|
+
const pendingTimeouts: TimerHandle[] = [];
|
|
33
|
+
const pendingIntervals: TimerHandle[] = [];
|
|
34
|
+
|
|
35
|
+
const wrappedSetTimeout: (
|
|
36
|
+
fn: (...args: unknown[]) => void,
|
|
37
|
+
ms?: number,
|
|
38
|
+
...rest: unknown[]
|
|
39
|
+
) => TimerHandle = (
|
|
40
|
+
fn: (...args: unknown[]) => void,
|
|
41
|
+
ms?: number,
|
|
42
|
+
...rest: unknown[]
|
|
43
|
+
): TimerHandle => {
|
|
44
|
+
const handle: TimerHandle = setTimeout(fn, ms, ...rest);
|
|
45
|
+
pendingTimeouts.push(handle);
|
|
46
|
+
return handle;
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const wrappedClearTimeout: (handle: TimerHandle) => void = (
|
|
50
|
+
handle: TimerHandle,
|
|
51
|
+
): void => {
|
|
52
|
+
clearTimeout(handle);
|
|
53
|
+
const idx: number = pendingTimeouts.indexOf(handle);
|
|
54
|
+
if (idx !== -1) {
|
|
55
|
+
pendingTimeouts.splice(idx, 1);
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const wrappedSetInterval: (
|
|
60
|
+
fn: (...args: unknown[]) => void,
|
|
61
|
+
ms?: number,
|
|
62
|
+
...rest: unknown[]
|
|
63
|
+
) => TimerHandle = (
|
|
64
|
+
fn: (...args: unknown[]) => void,
|
|
65
|
+
ms?: number,
|
|
66
|
+
...rest: unknown[]
|
|
67
|
+
): TimerHandle => {
|
|
68
|
+
const handle: TimerHandle = setInterval(fn, ms, ...rest);
|
|
69
|
+
pendingIntervals.push(handle);
|
|
70
|
+
return handle;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
const wrappedClearInterval: (handle: TimerHandle) => void = (
|
|
74
|
+
handle: TimerHandle,
|
|
75
|
+
): void => {
|
|
76
|
+
clearInterval(handle);
|
|
77
|
+
const idx: number = pendingIntervals.indexOf(handle);
|
|
78
|
+
if (idx !== -1) {
|
|
79
|
+
pendingIntervals.splice(idx, 1);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
let sandbox: Context = {
|
|
84
|
+
process: Object.freeze(Object.create(null)),
|
|
85
|
+
console: {
|
|
86
|
+
log: (...args: JSONValue[]) => {
|
|
87
|
+
const msg: string = args.join(" ");
|
|
88
|
+
totalLogBytes += msg.length;
|
|
89
|
+
if (totalLogBytes <= MAX_LOG_BYTES) {
|
|
90
|
+
logMessages.push(msg);
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
http: http,
|
|
95
|
+
https: https,
|
|
96
|
+
axios: axios,
|
|
97
|
+
crypto: crypto,
|
|
98
|
+
setTimeout: wrappedSetTimeout,
|
|
99
|
+
clearTimeout: wrappedClearTimeout,
|
|
100
|
+
setInterval: wrappedSetInterval,
|
|
101
|
+
clearInterval: wrappedClearInterval,
|
|
102
|
+
...options.context,
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
if (options.args) {
|
|
106
|
+
sandbox = {
|
|
107
|
+
...sandbox,
|
|
108
|
+
args: options.args,
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
vm.createContext(sandbox);
|
|
113
|
+
|
|
114
|
+
const script: string = `(async()=>{
|
|
115
|
+
${code}
|
|
116
|
+
})()`;
|
|
117
|
+
|
|
118
|
+
try {
|
|
119
|
+
/*
|
|
120
|
+
* vm timeout only covers synchronous CPU time, so wrap with
|
|
121
|
+
* Promise.race to also cover async operations (network, timers, etc.)
|
|
122
|
+
*/
|
|
123
|
+
const vmPromise: Promise<unknown> = vm.runInContext(script, sandbox, {
|
|
124
|
+
timeout: timeout,
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const overallTimeout: Promise<never> = new Promise(
|
|
128
|
+
(_resolve: (value: never) => void, reject: (reason: Error) => void) => {
|
|
129
|
+
const handle: NodeJS.Timeout = global.setTimeout(() => {
|
|
130
|
+
reject(new Error("Script execution timed out"));
|
|
131
|
+
}, timeout + 5000);
|
|
132
|
+
// Don't let this timer keep the process alive
|
|
133
|
+
handle.unref();
|
|
134
|
+
},
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
const returnVal: unknown = await Promise.race([
|
|
138
|
+
vmPromise,
|
|
139
|
+
overallTimeout,
|
|
140
|
+
]);
|
|
141
|
+
|
|
142
|
+
return {
|
|
143
|
+
returnValue: returnVal,
|
|
144
|
+
logMessages,
|
|
145
|
+
};
|
|
146
|
+
} finally {
|
|
147
|
+
// Clean up any lingering timers to prevent resource leaks
|
|
148
|
+
for (const handle of pendingTimeouts) {
|
|
149
|
+
clearTimeout(handle);
|
|
150
|
+
}
|
|
151
|
+
for (const handle of pendingIntervals) {
|
|
152
|
+
clearInterval(handle);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
11
157
|
@CaptureSpan()
|
|
12
158
|
public static async runCodeInSandbox(data: {
|
|
13
159
|
code: string;
|
|
@@ -13,7 +13,90 @@ import http from "http";
|
|
|
13
13
|
import https from "https";
|
|
14
14
|
import ivm from "isolated-vm";
|
|
15
15
|
import CaptureSpan from "../Telemetry/CaptureSpan";
|
|
16
|
+
import vm from "vm";
|
|
16
17
|
export default class VMRunner {
|
|
18
|
+
static async runCodeInNodeVM(data) {
|
|
19
|
+
const { code, options } = data;
|
|
20
|
+
const timeout = options.timeout || 5000;
|
|
21
|
+
const logMessages = [];
|
|
22
|
+
const MAX_LOG_BYTES = 1000000; // 1MB cap
|
|
23
|
+
let totalLogBytes = 0;
|
|
24
|
+
const pendingTimeouts = [];
|
|
25
|
+
const pendingIntervals = [];
|
|
26
|
+
const wrappedSetTimeout = (fn, ms, ...rest) => {
|
|
27
|
+
const handle = setTimeout(fn, ms, ...rest);
|
|
28
|
+
pendingTimeouts.push(handle);
|
|
29
|
+
return handle;
|
|
30
|
+
};
|
|
31
|
+
const wrappedClearTimeout = (handle) => {
|
|
32
|
+
clearTimeout(handle);
|
|
33
|
+
const idx = pendingTimeouts.indexOf(handle);
|
|
34
|
+
if (idx !== -1) {
|
|
35
|
+
pendingTimeouts.splice(idx, 1);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const wrappedSetInterval = (fn, ms, ...rest) => {
|
|
39
|
+
const handle = setInterval(fn, ms, ...rest);
|
|
40
|
+
pendingIntervals.push(handle);
|
|
41
|
+
return handle;
|
|
42
|
+
};
|
|
43
|
+
const wrappedClearInterval = (handle) => {
|
|
44
|
+
clearInterval(handle);
|
|
45
|
+
const idx = pendingIntervals.indexOf(handle);
|
|
46
|
+
if (idx !== -1) {
|
|
47
|
+
pendingIntervals.splice(idx, 1);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
let sandbox = Object.assign({ process: Object.freeze(Object.create(null)), console: {
|
|
51
|
+
log: (...args) => {
|
|
52
|
+
const msg = args.join(" ");
|
|
53
|
+
totalLogBytes += msg.length;
|
|
54
|
+
if (totalLogBytes <= MAX_LOG_BYTES) {
|
|
55
|
+
logMessages.push(msg);
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
}, http: http, https: https, axios: axios, crypto: crypto, setTimeout: wrappedSetTimeout, clearTimeout: wrappedClearTimeout, setInterval: wrappedSetInterval, clearInterval: wrappedClearInterval }, options.context);
|
|
59
|
+
if (options.args) {
|
|
60
|
+
sandbox = Object.assign(Object.assign({}, sandbox), { args: options.args });
|
|
61
|
+
}
|
|
62
|
+
vm.createContext(sandbox);
|
|
63
|
+
const script = `(async()=>{
|
|
64
|
+
${code}
|
|
65
|
+
})()`;
|
|
66
|
+
try {
|
|
67
|
+
/*
|
|
68
|
+
* vm timeout only covers synchronous CPU time, so wrap with
|
|
69
|
+
* Promise.race to also cover async operations (network, timers, etc.)
|
|
70
|
+
*/
|
|
71
|
+
const vmPromise = vm.runInContext(script, sandbox, {
|
|
72
|
+
timeout: timeout,
|
|
73
|
+
});
|
|
74
|
+
const overallTimeout = new Promise((_resolve, reject) => {
|
|
75
|
+
const handle = global.setTimeout(() => {
|
|
76
|
+
reject(new Error("Script execution timed out"));
|
|
77
|
+
}, timeout + 5000);
|
|
78
|
+
// Don't let this timer keep the process alive
|
|
79
|
+
handle.unref();
|
|
80
|
+
});
|
|
81
|
+
const returnVal = await Promise.race([
|
|
82
|
+
vmPromise,
|
|
83
|
+
overallTimeout,
|
|
84
|
+
]);
|
|
85
|
+
return {
|
|
86
|
+
returnValue: returnVal,
|
|
87
|
+
logMessages,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
// Clean up any lingering timers to prevent resource leaks
|
|
92
|
+
for (const handle of pendingTimeouts) {
|
|
93
|
+
clearTimeout(handle);
|
|
94
|
+
}
|
|
95
|
+
for (const handle of pendingIntervals) {
|
|
96
|
+
clearInterval(handle);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
17
100
|
static async runCodeInSandbox(data) {
|
|
18
101
|
const { code, options } = data;
|
|
19
102
|
const timeout = options.timeout || 5000;
|
|
@@ -432,6 +515,12 @@ export default class VMRunner {
|
|
|
432
515
|
}
|
|
433
516
|
}
|
|
434
517
|
}
|
|
518
|
+
__decorate([
|
|
519
|
+
CaptureSpan(),
|
|
520
|
+
__metadata("design:type", Function),
|
|
521
|
+
__metadata("design:paramtypes", [Object]),
|
|
522
|
+
__metadata("design:returntype", Promise)
|
|
523
|
+
], VMRunner, "runCodeInNodeVM", null);
|
|
435
524
|
__decorate([
|
|
436
525
|
CaptureSpan(),
|
|
437
526
|
__metadata("design:type", Function),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VMRunner.js","sourceRoot":"","sources":["../../../../../Server/Utils/VM/VMRunner.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,KAAwB,MAAM,OAAO,CAAC;AAC7C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,aAAa,CAAC;AAC9B,OAAO,WAAW,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"VMRunner.js","sourceRoot":"","sources":["../../../../../Server/Utils/VM/VMRunner.ts"],"names":[],"mappings":"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"}
|