mirror of
https://github.com/The-Low-Code-Foundation/OpenNoodl.git
synced 2026-01-11 14:52:55 +01:00
Co-Authored-By: Eric Tuvesson <eric.tuvesson@gmail.com> Co-Authored-By: mikaeltellhed <2311083+mikaeltellhed@users.noreply.github.com> Co-Authored-By: kotte <14197736+mrtamagotchi@users.noreply.github.com> Co-Authored-By: Anders Larsson <64838990+anders-topp@users.noreply.github.com> Co-Authored-By: Johan <4934465+joolsus@users.noreply.github.com> Co-Authored-By: Tore Knudsen <18231882+torekndsn@users.noreply.github.com> Co-Authored-By: victoratndl <99176179+victoratndl@users.noreply.github.com>
122 lines
3.3 KiB
JavaScript
122 lines
3.3 KiB
JavaScript
import { CloudRunner } from '.';
|
|
|
|
console.log('Noodl Editor Cloud Runtime!');
|
|
console.log('Version: ' + _noodl_cloud_runtime_version);
|
|
|
|
const _runner = new CloudRunner({
|
|
webSocketClass: WebSocket,
|
|
connectToEditor: true,
|
|
editorAddress: 'ws://localhost:8574',
|
|
enableDebugInspectors: true
|
|
});
|
|
|
|
_runner.runtime.graphModel.on('editorImportComplete', () => {
|
|
ipcRenderer.send('noodl-cf-has-loaded-project');
|
|
});
|
|
|
|
const handleRequest = async (functionName, req) => {
|
|
return await _runner.run(functionName, req);
|
|
};
|
|
|
|
const eventQueue = [];
|
|
let hasScheduledProcessJobs = false;
|
|
const _noodl_process_jobs = () => {
|
|
hasScheduledProcessJobs = false;
|
|
while (eventQueue.length > 0) {
|
|
const cb = eventQueue.shift();
|
|
cb();
|
|
}
|
|
};
|
|
|
|
const _setImmediate = window.setImmediate;
|
|
window.setImmediate = (cb) => {
|
|
eventQueue.push(cb);
|
|
if (!hasScheduledProcessJobs) {
|
|
hasScheduledProcessJobs = true;
|
|
_setImmediate(_noodl_process_jobs);
|
|
}
|
|
};
|
|
|
|
const _fetch_response_handlers = {};
|
|
const _fetch = window.fetch;
|
|
window.fetch = function (url, args) {
|
|
if (args && args.platform === 'node') {
|
|
return new Promise((resolve, reject) => {
|
|
// Perform the fetch via the host node platform
|
|
const token = Math.random().toString(26).slice(2);
|
|
_fetch_response_handlers[token] = (args) => {
|
|
if (args.error === undefined) {
|
|
const res = {
|
|
body: args.body,
|
|
status: args.status,
|
|
headers: args.headers,
|
|
ok: args.status === 200 || args.status === 201
|
|
};
|
|
res.json = () => {
|
|
try {
|
|
return Promise.resolve(JSON.parse(res.body));
|
|
} catch (e) {
|
|
return Promise.reject('Failed to parse JSON response');
|
|
}
|
|
};
|
|
res.text = () => {
|
|
return Promise.resolve(res.body);
|
|
};
|
|
|
|
resolve(res);
|
|
} else reject(args.error);
|
|
};
|
|
|
|
ipcRenderer.send('noodl-cf-fetch', {
|
|
url,
|
|
method: args.method,
|
|
token,
|
|
headers: JSON.parse(JSON.stringify(args.headers)),
|
|
body: args.body
|
|
});
|
|
});
|
|
} else return _fetch(url, args);
|
|
};
|
|
|
|
ipcRenderer.on('noodl-cf-fetch-response', async function (event, args) {
|
|
if (typeof _fetch_response_handlers[args.token] === 'function') {
|
|
typeof _fetch_response_handlers[args.token](args);
|
|
delete _fetch_response_handlers[args.token];
|
|
}
|
|
});
|
|
|
|
ipcRenderer.on('noodl-cf-request', async function (event, args) {
|
|
if (args.cloudService) {
|
|
window._noodl_cloudservices = {
|
|
endpoint: args.cloudService.endpoint,
|
|
appId: args.cloudService.appId,
|
|
masterKey: args.cloudService.masterKey
|
|
};
|
|
}
|
|
|
|
console.info(`Cloud function ${args.function} called`);
|
|
|
|
try {
|
|
// args.function
|
|
// args.headers
|
|
// args.body
|
|
|
|
const res = await handleRequest(args.function, {
|
|
body: args.body,
|
|
headers: args.headers
|
|
});
|
|
|
|
console.info(`Cloud function ${args.function} response [${res.statusCode}]`);
|
|
|
|
event.sender.send('noodl-cf-response', Object.assign({}, res, { token: args.token }));
|
|
} catch (e) {
|
|
console.error(`Cloud function ${args.function} response [400] message: ${e.message}`);
|
|
|
|
event.sender.send('noodl-cf-response', {
|
|
token: args.token,
|
|
statusCode: 400,
|
|
body: JSON.stringify({ error: e.message })
|
|
});
|
|
}
|
|
});
|