From 8766c27d33014cdb4b144e520da6ad5199524967 Mon Sep 17 00:00:00 2001 From: Shalitha Suranga Date: Tue, 8 Nov 2022 19:00:18 +0530 Subject: [PATCH] Add file streams support --- api/filesystem/filesystem.cpp | 159 +++++++++++++++++++++++++++++ api/filesystem/filesystem.h | 12 +++ bin/resources/js/neutralino.js | 12 +++ bin/resources/js/neutralino.js.map | 2 +- errors.cpp | 6 ++ errors.h | 3 + server/router.cpp | 3 + 7 files changed, 196 insertions(+), 1 deletion(-) diff --git a/api/filesystem/filesystem.cpp b/api/filesystem/filesystem.cpp index f6ab2519..3220459b 100644 --- a/api/filesystem/filesystem.cpp +++ b/api/filesystem/filesystem.cpp @@ -1,3 +1,5 @@ +#include +#include #include #include @@ -26,12 +28,57 @@ #include "errors.h" #include "api/filesystem/filesystem.h" #include "api/os/os.h" +#include "api/events/events.h" using namespace std; using json = nlohmann::json; +map openedFiles; +mutex openedFilesLock; + +#define NEU_DEFAULT_STREAM_BUF_SIZE 256 + namespace fs { +void __dispatchOpenedFileEvt(int virtualFileId, const string &action, const json &data) { + json evt; + evt["id"] = virtualFileId; + evt["action"] = action; + evt["data"] = data; + events::dispatch("openedFile", evt); +} + +void __readStreamBlock(const OpenedFileEvent &evt, ifstream *reader, vector &buffer) { + long long size = evt.size > -1 ? evt.size : NEU_DEFAULT_STREAM_BUF_SIZE; + + buffer.clear(); + buffer.resize(size); + reader->read(buffer.data(), size); + string result(buffer.begin(), buffer.end()); + + __dispatchOpenedFileEvt(evt.id, "data", result); +} + +void __readStream(const OpenedFileEvent &evt, ifstream *reader) { + if(reader->eof()) { + __dispatchOpenedFileEvt(evt.id, "end", nullptr); + return; + } + + vector buffer; + while(reader->peek() != char_traits::eof()) { + __readStreamBlock(evt, reader, buffer); + + if(evt.type == "read") { + break; + } + } + + if(reader->eof()) { + __dispatchOpenedFileEvt(evt.id, "end", nullptr); + } +} + #if defined(_WIN32) // From: https://stackoverflow.com/a/6161842/3565513 long long __winTickToUnixMS(long long windowsTicks) { @@ -131,6 +178,44 @@ bool writeFile(const fs::FileWriterOptions &fileWriterOptions) { return true; } +int openFile(const string &filename) { + int virtualFileId = openedFiles.size(); + ifstream *reader = new ifstream(filename.c_str(), ios::binary); + if(!reader->is_open()) { + delete reader; + return -1; + } + lock_guard guard(openedFilesLock); + openedFiles[virtualFileId] = reader; + return virtualFileId; +} + +bool updateOpenedFile(const OpenedFileEvent &evt) { + lock_guard guard(openedFilesLock); + if(openedFiles.find(evt.id) == openedFiles.end()) { + return false; + } + ifstream *reader = openedFiles[evt.id]; + + if(evt.type == "close") { + reader->close(); + delete reader; + openedFiles.erase(evt.id); + } + else if(evt.type == "read" || evt.type == "readAll") { + __readStream(evt, reader); + } + else if(evt.type == "seek") { + long long pos = evt.pos > -1 ? evt.pos : 0; + reader->clear(); + reader->seekg(pos, ios::beg); + } + else { + return false; + } + return true; +} + fs::FileStats getStats(const string &path) { fs::FileStats fileStats; #if defined(__linux__) || defined(__APPLE__) || defined(__FreeBSD__) @@ -370,6 +455,80 @@ json appendBinaryFile(const json &input) { return __writeOrAppendBinaryFile(input, true); } +json openFile(const json &input) { + json output; + if(!helpers::hasRequiredFields(input, {"path"})) { + output["error"] = errors::makeMissingArgErrorPayload(); + return output; + } + string path = input["path"].get(); + int fileId = fs::openFile(path); + if(fileId == -1) { + output["error"] = errors::makeErrorPayload(errors::NE_FS_FILOPER, path); + } + else { + output["returnValue"] = fileId; + output["success"] = true; + } + return output; +} + +json updateOpenedFile(const json &input) { + json output; + if(!helpers::hasRequiredFields(input, {"id", "event"})) { + output["error"] = errors::makeMissingArgErrorPayload(); + return output; + } + + fs::OpenedFileEvent fileEvt; + fileEvt.id = input["id"].get(); + fileEvt.type = input["event"].get(); + + if(helpers::hasField(input, "data")) { + if(fileEvt.type == "read" || fileEvt.type == "readAll") { + fileEvt.size = input["data"].get(); + } + else if(fileEvt.type == "seek") { + fileEvt.pos = input["data"].get(); + } + } + + if(fs::updateOpenedFile(fileEvt)) { + output["success"] = true; + } + else { + output["error"] = errors::makeErrorPayload(errors::NE_FS_UNLTOUP, to_string(fileEvt.id)); + } + return output; +} + +json getOpenedFileInfo(const json &input) { + json output; + lock_guard guard(openedFilesLock); + + if(!helpers::hasRequiredFields(input, {"id"})) { + output["error"] = errors::makeMissingArgErrorPayload(); + return output; + } + int fileId = input["id"].get(); + + if(openedFiles.find(fileId) == openedFiles.end()) { + output["error"] = errors::makeErrorPayload(errors::NE_FS_UNLTFOP, to_string(fileId)); + return output; + } + ifstream *reader = openedFiles[fileId]; + long long pos = reader->tellg(); + + json file; + file["id"] = fileId; + file["eof"] = reader->eof(); + file["pos"] = pos; + + output["returnValue"] = file; + output["success"] = true; + return output; +} + json removeFile(const json &input) { json output; if(!helpers::hasRequiredFields(input, {"path"})) { diff --git a/api/filesystem/filesystem.h b/api/filesystem/filesystem.h index 8924f5e5..36d5dff5 100644 --- a/api/filesystem/filesystem.h +++ b/api/filesystem/filesystem.h @@ -28,6 +28,13 @@ struct FileWriterOptions { bool append = false; }; +struct OpenedFileEvent { + int id = -1; + string type = ""; + long long pos = -1; + long long size = -1; +}; + enum EntryType { EntryTypeFile, EntryTypeDir, EntryTypeOther }; struct FileStats { @@ -55,6 +62,8 @@ bool writeFile(const fs::FileWriterOptions &fileWriterOptions); string getDirectoryName(const string &filename); string getCurrentDirectory(); string getFullPathFromRelative(const string &path); +int openFile(const string &path); +bool updateOpenedFile(const OpenedFileEvent &evt); fs::FileStats getStats(const string &path); fs::DirReaderResult readDirectory(const string &path); @@ -68,6 +77,9 @@ json appendFile(const json &input); json appendBinaryFile(const json &input); json readFile(const json &input); json readBinaryFile(const json &input); +json openFile(const json &input); +json updateOpenedFile(const json &input); +json getOpenedFileInfo(const json &input); json removeFile(const json &input); json readDirectory(const json &input); json copyFile(const json &input); diff --git a/bin/resources/js/neutralino.js b/bin/resources/js/neutralino.js index d853c608..af5e57ff 100644 --- a/bin/resources/js/neutralino.js +++ b/bin/resources/js/neutralino.js @@ -211,6 +211,15 @@ var Neutralino = (function (exports) { }); }); } + function openFile(path) { + return sendMessage('filesystem.openFile', { path }); + } + function updateOpenedFile(id, event, data) { + return sendMessage('filesystem.updateOpenedFile', { id, event, data }); + } + function getOpenedFileInfo(id) { + return sendMessage('filesystem.getOpenedFileInfo', { id }); + } function removeFile(path) { return sendMessage('filesystem.removeFile', { path }); } @@ -245,6 +254,9 @@ var Neutralino = (function (exports) { appendBinaryFile: appendBinaryFile, readFile: readFile, readBinaryFile: readBinaryFile, + openFile: openFile, + updateOpenedFile: updateOpenedFile, + getOpenedFileInfo: getOpenedFileInfo, removeFile: removeFile, readDirectory: readDirectory, copyFile: copyFile, diff --git a/bin/resources/js/neutralino.js.map b/bin/resources/js/neutralino.js.map index 7ac2e550..a5db46d4 100644 --- a/bin/resources/js/neutralino.js.map +++ b/bin/resources/js/neutralino.js.map @@ -1 +1 @@ -{"version":3,"file":"neutralino.js","sources":["node_modules/tslib/tslib.es6.js","src/browser/events.ts","src/ws/websocket.ts","src/api/filesystem.ts","src/api/os.ts","src/api/computer.ts","src/api/storage.ts","src/api/debug.ts","src/api/app.ts","src/api/window.ts","src/api/events.ts","src/api/extensions.ts","src/api/updater.ts","src/api/clipboard.ts","src/api/custom.ts","src/api/init.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export interface Response {\n success: boolean;\n message: string;\n}\n\nexport type Builtin =\n 'ready' |\n 'trayMenuItemClicked' |\n 'windowClose' |\n 'serverOffline' |\n 'clientConnect' |\n 'clientDisconnect' |\n 'appClientConnect' |\n 'appClientDisconnect' |\n 'extClientConnect' |\n 'extClientDisconnect' |\n 'extensionReady' |\n 'neuDev_reloadApp'\n\nexport function on(event: string, handler: (ev: CustomEvent) => void): Promise {\n window.addEventListener(event, handler);\n return Promise.resolve({\n success: true,\n message: 'Event listener added'\n });\n};\n\nexport function off(event: string, handler: (ev: CustomEvent) => void): Promise {\n window.removeEventListener(event, handler);\n return Promise.resolve({\n success: true,\n message: 'Event listener removed'\n });\n};\n\nexport function dispatch(event: string, data?: any): Promise {\n let customEvent = new CustomEvent(event, {detail: data});\n window.dispatchEvent(customEvent);\n return Promise.resolve({\n success: true,\n message: 'Message dispatched'\n });\n};\n","import * as events from '../browser/events';\n\nlet ws;\nlet nativeCalls = {};\nlet offlineMessageQueue = [];\nlet extensionMessageQueue = {}\n\nexport function init() {\n initAuth();\n ws = new WebSocket(`ws://${window.location.hostname}:${window.NL_PORT}`);\n registerLibraryEvents();\n registerSocketEvents();\n}\n\nexport function sendMessage(method: string, data?: any): Promise {\n return new Promise((resolve: any, reject: any) => {\n\n if(ws?.readyState != WebSocket.OPEN) {\n sendWhenReady({method, data, resolve, reject});\n return;\n }\n\n const id: string = uuidv4();\n const accessToken: string = getAuthToken();\n\n nativeCalls[id] = {resolve, reject};\n\n ws.send(JSON.stringify({\n id,\n method,\n data,\n accessToken\n }));\n\n });\n}\n\nexport function sendWhenReady(message: any) {\n offlineMessageQueue.push(message);\n}\n\nexport function sendWhenExtReady(extensionId: string, message: any) {\n if(extensionId in extensionMessageQueue) {\n extensionMessageQueue[extensionId].push(message);\n }\n else {\n extensionMessageQueue[extensionId] = [message];\n }\n}\n\nfunction registerLibraryEvents() {\n Neutralino.events.on('ready', async () => {\n await processQueue(offlineMessageQueue);\n\n if(!window.NL_EXTENABLED) {\n return;\n }\n\n let stats = await Neutralino.extensions.getStats();\n for(let extension of stats.connected) {\n events.dispatch('extensionReady', extension);\n }\n });\n\n Neutralino.events.on('extClientConnect', (evt) => {\n events.dispatch('extensionReady', evt.detail);\n });\n\n if(!window.NL_EXTENABLED) {\n return;\n }\n\n Neutralino.events.on('extensionReady', async (evt) => {\n if(evt.detail in extensionMessageQueue) {\n await processQueue(extensionMessageQueue[evt.detail]);\n delete extensionMessageQueue[evt.detail];\n }\n });\n}\n\nfunction registerSocketEvents() {\n ws.addEventListener('message', (event) => {\n const message = JSON.parse(event.data);\n\n if(message.id && message.id in nativeCalls) {\n // Native call response\n if(message.data?.error) {\n nativeCalls[message.id].reject(message.data.error);\n if(message.data.error.code == 'NE_RT_INVTOKN') {\n // critical auth error\n // Perhaps, someone tried to open app from anoher client,\n // with 'one-time' token mode\n handleAuthError();\n }\n }\n else if(message.data?.success) {\n nativeCalls[message.id]\n .resolve(message.data.hasOwnProperty('returnValue') ? message.data.returnValue\n : message.data);\n }\n delete nativeCalls[message.id];\n }\n else if(message.event) {\n // Event from process\n events.dispatch(message.event, message.data);\n }\n });\n\n ws.addEventListener('open', async (event) => {\n events.dispatch('ready');\n });\n\n ws.addEventListener('close', async (event) => {\n let error = {\n code: 'NE_CL_NSEROFF',\n message: 'Neutralino server is offline. Try restarting the application'\n };\n events.dispatch('serverOffline', error);\n });\n}\n\nasync function processQueue(messageQueue: any[]) {\n while(messageQueue.length > 0) {\n let message = messageQueue.shift();\n try {\n let response = await sendMessage(message.method, message.data);\n message.resolve(response);\n }\n catch(err: any) {\n message.reject(err);\n }\n }\n}\n\nfunction handleAuthError() {\n ws.close();\n document.body.innerText = '';\n document.write('NE_RT_INVTOKN: Neutralinojs application configuration' +\n ' prevents accepting native calls from this client.');\n}\n\nfunction initAuth() {\n if (window.NL_TOKEN) {\n sessionStorage.setItem('NL_TOKEN', window.NL_TOKEN);\n }\n}\nfunction getAuthToken() {\n return window.NL_TOKEN || sessionStorage.getItem('NL_TOKEN') || '';\n}\n\n// From: https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid\nfunction uuidv4(): string {\n return \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, (c: any) =>\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n}\n","import { sendMessage } from '../ws/websocket';\n\nexport interface DirectoryEntry {\n entry: string;\n type: string;\n}\n\nexport interface FileReaderOptions {\n pos: number;\n size: number;\n}\n\nexport interface Stats {\n size: number;\n isFile: boolean;\n isDirectory: boolean;\n createdAt: number;\n modifiedAt: number;\n}\n\nexport function createDirectory(path: string): Promise {\n return sendMessage('filesystem.createDirectory', { path });\n};\n\nexport function removeDirectory(path: string): Promise {\n return sendMessage('filesystem.removeDirectory', { path });\n};\n\nexport function writeFile(path: string, data: string): Promise {\n return sendMessage('filesystem.writeFile', { path, data });\n};\n\nexport function appendFile(path: string, data: string): Promise {\n return sendMessage('filesystem.appendFile', { path, data });\n};\n\nexport function writeBinaryFile(path: string, data: ArrayBuffer): Promise {\n return sendMessage('filesystem.writeBinaryFile', {\n path,\n data: arrayBufferToBase64(data)\n });\n};\n\nexport function appendBinaryFile(path: string, data: ArrayBuffer): Promise {\n return sendMessage('filesystem.appendBinaryFile', {\n path,\n data: arrayBufferToBase64(data)\n });\n};\n\nexport function readFile(path: string, options?: FileReaderOptions): Promise {\n return sendMessage('filesystem.readFile', { path, ...options });\n};\n\nexport function readBinaryFile(path: string, options?: FileReaderOptions): Promise {\n return new Promise((resolve: any, reject: any) => {\n sendMessage('filesystem.readBinaryFile', { path, ...options })\n .then((base64Data: string) => {\n let binaryData: string = window.atob(base64Data);\n let len: number = binaryData.length;\n let bytes: Uint8Array = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryData.charCodeAt(i);\n }\n resolve(bytes.buffer);\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n};\n\nexport function removeFile(path: string): Promise {\n return sendMessage('filesystem.removeFile', { path });\n};\n\nexport function readDirectory(path: string): Promise {\n return sendMessage('filesystem.readDirectory', { path });\n};\n\nexport function copyFile(source: string, destination: string): Promise {\n return sendMessage('filesystem.copyFile', { source, destination } );\n};\n\nexport function moveFile(source: string, destination: string): Promise {\n return sendMessage('filesystem.moveFile', { source, destination });\n};\n\nexport function getStats(path: string): Promise {\n return sendMessage('filesystem.getStats', { path });\n};\n\nfunction arrayBufferToBase64(data: ArrayBuffer): string {\n let bytes: Uint8Array = new Uint8Array(data);\n let asciiStr: string = '';\n\n for(let byte of bytes) {\n asciiStr += String.fromCharCode(byte);\n }\n\n return window.btoa(asciiStr);\n};\n\n\n","import { sendMessage } from '../ws/websocket';\n\nexport interface ExecCommandOptions {\n stdIn?: string;\n background?: boolean;\n}\n\nexport interface ExecCommandResult {\n pid: number;\n stdOut: string;\n stdErr: string;\n exitCode: number;\n}\n\nexport interface SpawnedProcess {\n id: number;\n pid: number;\n}\n\nexport interface Envs {\n [key: string]: string;\n}\n\nexport interface OpenDialogOptions {\n multiSelections?: boolean;\n filters?: Filter[];\n defaultPath?: string;\n}\n\nexport interface FolderDialogOptions {\n defaultPath?: string;\n}\n\nexport interface SaveDialogOptions {\n forceOverwrite?: boolean;\n filters?: Filter[];\n defaultPath?: string;\n}\n\nexport interface Filter {\n name: string;\n extensions: string[];\n}\n\nexport interface TrayOptions {\n icon?: string;\n menu?: TrayMenuItem[];\n}\n\nexport interface TrayMenuItem {\n id?: string;\n text: string;\n isDisabled?: boolean;\n isChecked?: boolean;\n}\n\nexport enum Icon {\n WARNING = 'WARNING',\n ERROR = 'ERROR',\n INFO = 'INFO',\n QUESTION = 'QUESTION'\n};\n\nexport enum MessageBoxChoice {\n OK = 'OK',\n OK_CANCEL = 'OK_CANCEL',\n YES_NO = 'YES_NO',\n YES_NO_CANCEL = 'YES_NO_CANCEL',\n RETRY_CANCEL = 'RETRY_CANCEL',\n ABORT_RETRY_IGNORE = 'ABORT_RETRY_IGNORE'\n};\n\nexport type KnownPath =\n 'config' |\n 'data' |\n 'cache' |\n 'documents' |\n 'pictures' |\n 'music' |\n 'video' |\n 'downloads' |\n 'savedGames1' |\n 'savedGames2'\n\nexport function execCommand(command: string, options?: ExecCommandOptions): Promise {\n return sendMessage('os.execCommand', { command, ...options });\n};\n\nexport function spawnProcess(command: string): Promise {\n return sendMessage('os.spawnProcess', { command });\n};\n\nexport function updateSpawnedProcess(id: number, event: string, data?:any): Promise {\n return sendMessage('os.updateSpawnedProcess', { id, event, data });\n};\n\nexport function getSpawnedProcesses(): Promise {\n return sendMessage('os.getSpawnedProcesses');\n};\n\nexport function getEnv(key: string): Promise {\n return sendMessage('os.getEnv', { key });\n};\n\nexport function getEnvs(): Promise {\n return sendMessage('os.getEnvs');\n};\n\nexport function showOpenDialog(title?: string, options?: OpenDialogOptions): Promise {\n return sendMessage('os.showOpenDialog', { title, ...options });\n};\n\nexport function showFolderDialog(title?: string, options?: FolderDialogOptions): Promise {\n return sendMessage('os.showFolderDialog', { title, ...options });\n};\n\nexport function showSaveDialog(title?: string, options?: SaveDialogOptions): Promise {\n return sendMessage('os.showSaveDialog', { title, ...options });\n};\n\nexport function showNotification(title: string, content: string, icon?: Icon): Promise {\n return sendMessage('os.showNotification', { title, content, icon });\n};\n\nexport function showMessageBox(title: string, content: string,\n choice?: MessageBoxChoice, icon?: Icon): Promise {\n return sendMessage('os.showMessageBox', { title, content, choice, icon });\n};\n\nexport function setTray(options: TrayOptions): Promise {\n return sendMessage('os.setTray', options);\n};\n\nexport function open(url: string): Promise {\n return sendMessage('os.open', { url });\n};\n\nexport function getPath(name: KnownPath): Promise {\n return sendMessage('os.getPath', { name });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport interface MemoryInfo {\n total: number;\n available: number;\n}\n\nexport interface KernelInfo {\n variant: string;\n version: string;\n}\n\nexport interface OSInfo {\n name: string;\n description: string;\n version: string;\n}\n\nexport interface CPUInfo {\n vendor: string;\n model: string;\n frequency: number;\n architecture: string;\n logicalThreads: number;\n physicalCores: number;\n physicalUnits: number;\n}\n\nexport interface Display {\n id: number;\n resolution: Resolution;\n dpi: number;\n bpp: number;\n refreshRate: number;\n}\n\ninterface Resolution {\n width: number;\n height: number;\n}\n\ninterface MousePosition {\n x: number;\n y: number;\n}\n\nexport function getMemoryInfo(): Promise {\n return sendMessage('computer.getMemoryInfo');\n};\n\nexport function getArch(): Promise {\n return sendMessage('computer.getArch');\n};\n\nexport function getKernelInfo(): Promise {\n return sendMessage('computer.getKernelInfo');\n};\n\nexport function getOSInfo(): Promise {\n return sendMessage('computer.getOSInfo');\n};\n\nexport function getCPUInfo(): Promise {\n return sendMessage('computer.getCPUInfo');\n};\n\nexport function getDisplays(): Promise {\n return sendMessage('computer.getDisplays');\n};\n\nexport function getMousePosition(): Promise {\n return sendMessage('computer.getMousePosition');\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport function setData(key: string, data: string): Promise {\n return sendMessage('storage.setData', { key, data });\n};\n\nexport function getData(key: string): Promise {\n return sendMessage('storage.getData', { key });\n};\n\nexport function getKeys(): Promise {\n return sendMessage('storage.getKeys');\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport enum LoggerType {\n WARNING = 'WARNING',\n ERROR = 'ERROR',\n INFO = 'INFO'\n};\n\nexport function log(message: string, type?: LoggerType): Promise {\n return sendMessage('debug.log', { message, type });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport interface OpenActionOptions {\n url: string;\n}\n\nexport interface RestartOptions {\n args: string;\n}\n\nexport function exit(code?: number): Promise {\n return sendMessage('app.exit', { code });\n};\n\nexport function killProcess(): Promise {\n return sendMessage('app.killProcess');\n};\n\nexport function restartProcess(options?: RestartOptions): Promise {\n return new Promise(async (resolve: () => void) => {\n let command = window.NL_ARGS.reduce((acc: string, arg: string) => {\n acc += ' ' + arg;\n return acc;\n }, '');\n\n if(options?.args) {\n command += ' ' + options.args;\n }\n\n await Neutralino.os.execCommand(command, {background: true});\n Neutralino.app.exit();\n resolve();\n });\n};\n\nexport function getConfig(): Promise {\n return sendMessage('app.getConfig');\n};\n\nexport function broadcast(event: string, data?: any): Promise {\n return sendMessage('app.broadcast', {event, data});\n};\n","import { sendMessage } from '../ws/websocket';\n\nconst draggableRegions: WeakMap = new WeakMap();\n\nexport interface WindowOptions extends WindowSizeOptions {\n title?: string;\n icon?: string;\n fullScreen?: boolean;\n alwaysOnTop?: boolean;\n enableInspector?: boolean;\n borderless?: boolean;\n maximize?: boolean;\n hidden?: boolean;\n maximizable?: boolean;\n processArgs?: string;\n}\n\nexport interface WindowSizeOptions {\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n resizable?: boolean;\n}\n\nexport interface WindowPosOptions {\n x: number;\n y: number;\n}\n\nexport function setTitle(title: string): Promise {\n return sendMessage('window.setTitle', { title });\n};\n\nexport function getTitle(): Promise {\n return sendMessage('window.getTitle');\n};\n\nexport function maximize(): Promise {\n return sendMessage('window.maximize');\n};\n\nexport function unmaximize(): Promise {\n return sendMessage('window.unmaximize');\n};\n\nexport function isMaximized(): Promise {\n return sendMessage('window.isMaximized');\n};\n\nexport function minimize(): Promise {\n return sendMessage('window.minimize');\n};\n\nexport function setFullScreen(): Promise {\n return sendMessage('window.setFullScreen');\n};\n\nexport function exitFullScreen(): Promise {\n return sendMessage('window.exitFullScreen');\n};\n\nexport function isFullScreen(): Promise {\n return sendMessage('window.isFullScreen');\n};\n\nexport function show(): Promise {\n return sendMessage('window.show');\n};\n\nexport function hide(): Promise {\n return sendMessage('window.hide');\n};\n\nexport function isVisible(): Promise {\n return sendMessage('window.isVisible');\n};\n\nexport function focus(): Promise {\n return sendMessage('window.focus');\n};\n\nexport function setIcon(icon: string): Promise {\n return sendMessage('window.setIcon', { icon });\n};\n\nexport function move(x: number, y: number): Promise {\n return sendMessage('window.move', { x, y });\n};\n\nexport function setDraggableRegion(domElementOrId: string | HTMLElement): Promise {\n return new Promise((resolve: any, reject: any) => {\n const draggableRegion: HTMLElement = domElementOrId instanceof Element ?\n domElementOrId : document.getElementById(domElementOrId);\n let initialClientX: number = 0;\n let initialClientY: number = 0;\n\n if (!draggableRegion) {\n return reject({\n code: 'NE_WD_DOMNOTF',\n message: 'Unable to find DOM element'\n });\n }\n\n if (draggableRegions.has(draggableRegion)) {\n return reject({\n code: 'NE_WD_ALRDREL',\n message: 'This DOM element is already an active draggable region'\n });\n }\n\n draggableRegion.addEventListener('pointerdown', startPointerCapturing);\n draggableRegion.addEventListener('pointerup', endPointerCapturing);\n\n draggableRegions.set(draggableRegion, { pointerdown: startPointerCapturing, pointerup: endPointerCapturing });\n\n async function onPointerMove(evt: PointerEvent) {\n await Neutralino.window.move(\n evt.screenX - initialClientX,\n evt.screenY - initialClientY\n );\n }\n\n function startPointerCapturing(evt: PointerEvent) {\n if (evt.button !== 0) return;\n initialClientX = evt.clientX;\n initialClientY = evt.clientY;\n draggableRegion.addEventListener('pointermove', onPointerMove);\n draggableRegion.setPointerCapture(evt.pointerId);\n }\n\n function endPointerCapturing(evt: PointerEvent) {\n draggableRegion.removeEventListener('pointermove', onPointerMove);\n draggableRegion.releasePointerCapture(evt.pointerId);\n }\n\n resolve({\n success: true,\n message: 'Draggable region was activated'\n });\n });\n};\n\nexport function unsetDraggableRegion(domElementOrId: string | HTMLElement): Promise {\n return new Promise((resolve: any, reject: any) => {\n const draggableRegion: HTMLElement = domElementOrId instanceof Element ?\n domElementOrId : document.getElementById(domElementOrId);\n\n if (!draggableRegion) {\n return reject({\n code: 'NE_WD_DOMNOTF',\n message: 'Unable to find DOM element'\n });\n }\n if (!draggableRegions.has(draggableRegion)) {\n return reject({\n code: 'NE_WD_NOTDRRE',\n message: 'DOM element is not an active draggable region'\n });\n }\n\n const { pointerdown, pointerup } = draggableRegions.get(draggableRegion);\n draggableRegion.removeEventListener('pointerdown', pointerdown);\n draggableRegion.removeEventListener('pointerup', pointerup);\n draggableRegions.delete(draggableRegion);\n\n resolve({\n success: true,\n message: 'Draggable region was deactivated'\n });\n });\n}\n\nexport function setSize(options: WindowSizeOptions): Promise {\n return new Promise(async (resolve: any, reject: any) => {\n let sizeOptions = await Neutralino.window.getSize();\n\n options = {...sizeOptions, ...options}; // merge prioritizing options arg\n\n sendMessage('window.setSize', options)\n .then((response: any) => {\n resolve(response);\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n};\n\nexport function getSize(): Promise {\n return sendMessage('window.getSize');\n};\n\nexport function getPosition(): Promise {\n return sendMessage('window.getPosition');\n};\n\nexport function setAlwaysOnTop(onTop: boolean): Promise {\n return sendMessage('window.setAlwaysOnTop', { onTop });\n};\n\nexport function create(url: string, options?: WindowOptions): Promise {\n return new Promise((resolve: any, reject: any) => {\n\n function normalize(arg: any) {\n if(typeof arg != \"string\")\n return arg;\n arg = arg.trim();\n if(arg.includes(\" \")) {\n arg = `\"${arg}\"`;\n }\n return arg;\n }\n\n let command = window.NL_ARGS.reduce((acc: string, arg: string, index: number) => {\n if(arg.includes(\"--path=\") || arg.includes(\"--debug-mode\") ||\n arg.includes(\"--load-dir-res\") || index == 0) {\n acc += \" \" + normalize(arg);\n }\n return acc;\n }, \"\");\n\n command += \" --url=\" + normalize(url);\n\n for(let key in options) {\n if(key == \"processArgs\")\n continue;\n\n let cliKey: string = key.replace(/[A-Z]|^[a-z]/g, (token: string) => (\n \"-\" + token.toLowerCase()\n ));\n command += ` --window${cliKey}=${normalize(options[key])}`\n }\n if(options && options.processArgs)\n command += \" \" + options.processArgs;\n\n Neutralino.os.execCommand(command, { background: true })\n .then((processInfo: any) => {\n resolve(processInfo);\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport * from '../browser/events';\n\nexport function broadcast(event: string, data?: any): Promise {\n return sendMessage('events.broadcast', {event, data});\n};\n","import * as websocket from '../ws/websocket';\n\nexport interface ExtensionStats {\n loaded: string[];\n connected: string[];\n}\n\nexport function dispatch(extensionId: string, event: string, data?: any): Promise {\n return new Promise(async (resolve: any, reject: any) => {\n let stats = await Neutralino.extensions.getStats();\n if(!stats.loaded.includes(extensionId)) {\n reject({\n code: 'NE_EX_EXTNOTL',\n message: `${extensionId} is not loaded`\n });\n }\n else if(stats.connected.includes(extensionId)) {\n try {\n let result = await websocket.sendMessage('extensions.dispatch', {extensionId, event, data});\n resolve(result);\n }\n catch(err: any) {\n reject(err);\n }\n }\n else {\n // loaded but not connected yet.\n websocket.sendWhenExtReady(extensionId, {\n method: 'extensions.dispatch',\n data: {extensionId, event, data}, resolve, reject\n });\n }\n });\n};\n\nexport function broadcast(event: string, data?: any): Promise {\n return websocket.sendMessage('extensions.broadcast', {event, data});\n};\n\nexport function getStats(): Promise {\n return websocket.sendMessage('extensions.getStats');\n};\n","import { Error } from './protocol';\n\nexport interface Manifest {\n applicationId: string;\n version: string;\n resourcesURL: string;\n}\n\nlet manifest: Manifest = null;\n\nexport function checkForUpdates(url: string): Promise {\n function isValidManifest(manifest: any): manifest is Manifest {\n if(manifest.applicationId && manifest.applicationId == window.NL_APPID\n && manifest.version && manifest.resourcesURL) {\n return true;\n }\n return false;\n }\n\n return new Promise(async (resolve: (m: Manifest) => void, reject: (e: Error) => void) => {\n if(!url) {\n return reject({\n code: 'NE_RT_NATRTER',\n message: 'Missing require parameter: url'\n });\n }\n try {\n let response = await fetch(url);\n manifest = JSON.parse(await response.text());\n\n if(isValidManifest(manifest)) {\n resolve(manifest);\n }\n else {\n reject({\n code: 'NE_UP_CUPDMER',\n message: 'Invalid update manifest or mismatching applicationId'\n });\n }\n }\n catch(err) {\n reject({\n code: 'NE_UP_CUPDERR',\n message: 'Unable to fetch update manifest'\n });\n }\n\n });\n};\n\nexport function install(): Promise {\n return new Promise(async (resolve: any, reject: any) => {\n if(!manifest) {\n return reject({\n code: 'NE_UP_UPDNOUF',\n message: 'No update manifest loaded'\n });\n }\n try {\n let response = await fetch(manifest.resourcesURL);\n let resourcesBuffer = await response.arrayBuffer();\n await Neutralino.filesystem.writeBinaryFile(window.NL_PATH + \"/resources.neu\", resourcesBuffer);\n\n resolve({\n success: true,\n message: 'Update installed. Restart the process to see updates'\n });\n }\n catch(err) {\n reject({\n code: 'NE_UP_UPDINER',\n message: 'Update installation error'\n });\n }\n\n });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport function readText(key: string, data: string): Promise {\n return sendMessage('clipboard.readText', { key, data });\n\n};\n\nexport function writeText(data: string): Promise {\n return sendMessage('clipboard.writeText', { data });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport function getMethods(): Promise {\n return sendMessage('custom.getMethods');\n};\n","import * as websocket from '../ws/websocket';\nimport { version } from '../../package.json';\n\nlet initialized = false;\n\nexport interface InitOptions {\n exportCustomMethods?: boolean;\n}\n\nexport function init(options: InitOptions = {}): void {\n options = {...{\n exportCustomMethods: true\n } ,...options};\n\n if(initialized) {\n return;\n }\n\n websocket.init();\n\n if(window.NL_ARGS.find((arg) => arg == '--neu-dev-auto-reload')) {\n Neutralino.events.on('neuDev_reloadApp', async () => {\n await Neutralino.debug.log('Reloading the application...');\n location.reload();\n });\n }\n\n if(options.exportCustomMethods && window.NL_CMETHODS && window.NL_CMETHODS.length > 0) {\n for(let method of window.NL_CMETHODS) {\n Neutralino.custom[method] = (...args) => {\n let data = {};\n for(let [argi, argv] of args.entries()) {\n if(typeof argv == 'object' && !Array.isArray(argv) && argv != null) {\n data = {...data, ...argv};\n }\n else {\n data = {...data, ['arg' + argi]: argv};\n }\n }\n return websocket.sendMessage('custom.' + method, data);\n };\n }\n }\n\n window.NL_CVERSION = version;\n window.NL_CCOMMIT = '19e52c6d44988de048df4ab80c92f100ece9a6ae'; // only the build server will update this\n initialized = true;\n}\n"],"names":["dispatch","init","events.dispatch","getStats","broadcast","websocket.sendMessage","websocket.sendWhenExtReady","websocket.init"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"neutralino.js","sources":["node_modules/tslib/tslib.es6.js","src/browser/events.ts","src/ws/websocket.ts","src/api/filesystem.ts","src/api/os.ts","src/api/computer.ts","src/api/storage.ts","src/api/debug.ts","src/api/app.ts","src/api/window.ts","src/api/events.ts","src/api/extensions.ts","src/api/updater.ts","src/api/clipboard.ts","src/api/custom.ts","src/api/init.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export interface Response {\n success: boolean;\n message: string;\n}\n\nexport type Builtin =\n 'ready' |\n 'trayMenuItemClicked' |\n 'windowClose' |\n 'serverOffline' |\n 'clientConnect' |\n 'clientDisconnect' |\n 'appClientConnect' |\n 'appClientDisconnect' |\n 'extClientConnect' |\n 'extClientDisconnect' |\n 'extensionReady' |\n 'neuDev_reloadApp'\n\nexport function on(event: string, handler: (ev: CustomEvent) => void): Promise {\n window.addEventListener(event, handler);\n return Promise.resolve({\n success: true,\n message: 'Event listener added'\n });\n};\n\nexport function off(event: string, handler: (ev: CustomEvent) => void): Promise {\n window.removeEventListener(event, handler);\n return Promise.resolve({\n success: true,\n message: 'Event listener removed'\n });\n};\n\nexport function dispatch(event: string, data?: any): Promise {\n let customEvent = new CustomEvent(event, {detail: data});\n window.dispatchEvent(customEvent);\n return Promise.resolve({\n success: true,\n message: 'Message dispatched'\n });\n};\n","import * as events from '../browser/events';\n\nlet ws;\nlet nativeCalls = {};\nlet offlineMessageQueue = [];\nlet extensionMessageQueue = {}\n\nexport function init() {\n initAuth();\n ws = new WebSocket(`ws://${window.location.hostname}:${window.NL_PORT}`);\n registerLibraryEvents();\n registerSocketEvents();\n}\n\nexport function sendMessage(method: string, data?: any): Promise {\n return new Promise((resolve: any, reject: any) => {\n\n if(ws?.readyState != WebSocket.OPEN) {\n sendWhenReady({method, data, resolve, reject});\n return;\n }\n\n const id: string = uuidv4();\n const accessToken: string = getAuthToken();\n\n nativeCalls[id] = {resolve, reject};\n\n ws.send(JSON.stringify({\n id,\n method,\n data,\n accessToken\n }));\n\n });\n}\n\nexport function sendWhenReady(message: any) {\n offlineMessageQueue.push(message);\n}\n\nexport function sendWhenExtReady(extensionId: string, message: any) {\n if(extensionId in extensionMessageQueue) {\n extensionMessageQueue[extensionId].push(message);\n }\n else {\n extensionMessageQueue[extensionId] = [message];\n }\n}\n\nfunction registerLibraryEvents() {\n Neutralino.events.on('ready', async () => {\n await processQueue(offlineMessageQueue);\n\n if(!window.NL_EXTENABLED) {\n return;\n }\n\n let stats = await Neutralino.extensions.getStats();\n for(let extension of stats.connected) {\n events.dispatch('extensionReady', extension);\n }\n });\n\n Neutralino.events.on('extClientConnect', (evt) => {\n events.dispatch('extensionReady', evt.detail);\n });\n\n if(!window.NL_EXTENABLED) {\n return;\n }\n\n Neutralino.events.on('extensionReady', async (evt) => {\n if(evt.detail in extensionMessageQueue) {\n await processQueue(extensionMessageQueue[evt.detail]);\n delete extensionMessageQueue[evt.detail];\n }\n });\n}\n\nfunction registerSocketEvents() {\n ws.addEventListener('message', (event) => {\n const message = JSON.parse(event.data);\n\n if(message.id && message.id in nativeCalls) {\n // Native call response\n if(message.data?.error) {\n nativeCalls[message.id].reject(message.data.error);\n if(message.data.error.code == 'NE_RT_INVTOKN') {\n // critical auth error\n // Perhaps, someone tried to open app from anoher client,\n // with 'one-time' token mode\n handleAuthError();\n }\n }\n else if(message.data?.success) {\n nativeCalls[message.id]\n .resolve(message.data.hasOwnProperty('returnValue') ? message.data.returnValue\n : message.data);\n }\n delete nativeCalls[message.id];\n }\n else if(message.event) {\n // Event from process\n events.dispatch(message.event, message.data);\n }\n });\n\n ws.addEventListener('open', async (event) => {\n events.dispatch('ready');\n });\n\n ws.addEventListener('close', async (event) => {\n let error = {\n code: 'NE_CL_NSEROFF',\n message: 'Neutralino server is offline. Try restarting the application'\n };\n events.dispatch('serverOffline', error);\n });\n}\n\nasync function processQueue(messageQueue: any[]) {\n while(messageQueue.length > 0) {\n let message = messageQueue.shift();\n try {\n let response = await sendMessage(message.method, message.data);\n message.resolve(response);\n }\n catch(err: any) {\n message.reject(err);\n }\n }\n}\n\nfunction handleAuthError() {\n ws.close();\n document.body.innerText = '';\n document.write('NE_RT_INVTOKN: Neutralinojs application configuration' +\n ' prevents accepting native calls from this client.');\n}\n\nfunction initAuth() {\n if (window.NL_TOKEN) {\n sessionStorage.setItem('NL_TOKEN', window.NL_TOKEN);\n }\n}\nfunction getAuthToken() {\n return window.NL_TOKEN || sessionStorage.getItem('NL_TOKEN') || '';\n}\n\n// From: https://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid\nfunction uuidv4(): string {\n return \"10000000-1000-4000-8000-100000000000\".replace(/[018]/g, (c: any) =>\n (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)\n );\n}\n","import { sendMessage } from '../ws/websocket';\n\nexport interface DirectoryEntry {\n entry: string;\n type: string;\n}\n\nexport interface FileReaderOptions {\n pos: number;\n size: number;\n}\n\nexport interface OpenedFile {\n id: number;\n eof: boolean;\n pos: number;\n}\n\nexport interface Stats {\n size: number;\n isFile: boolean;\n isDirectory: boolean;\n createdAt: number;\n modifiedAt: number;\n}\n\nexport function createDirectory(path: string): Promise {\n return sendMessage('filesystem.createDirectory', { path });\n};\n\nexport function removeDirectory(path: string): Promise {\n return sendMessage('filesystem.removeDirectory', { path });\n};\n\nexport function writeFile(path: string, data: string): Promise {\n return sendMessage('filesystem.writeFile', { path, data });\n};\n\nexport function appendFile(path: string, data: string): Promise {\n return sendMessage('filesystem.appendFile', { path, data });\n};\n\nexport function writeBinaryFile(path: string, data: ArrayBuffer): Promise {\n return sendMessage('filesystem.writeBinaryFile', {\n path,\n data: arrayBufferToBase64(data)\n });\n};\n\nexport function appendBinaryFile(path: string, data: ArrayBuffer): Promise {\n return sendMessage('filesystem.appendBinaryFile', {\n path,\n data: arrayBufferToBase64(data)\n });\n};\n\nexport function readFile(path: string, options?: FileReaderOptions): Promise {\n return sendMessage('filesystem.readFile', { path, ...options });\n};\n\nexport function readBinaryFile(path: string, options?: FileReaderOptions): Promise {\n return new Promise((resolve: any, reject: any) => {\n sendMessage('filesystem.readBinaryFile', { path, ...options })\n .then((base64Data: string) => {\n let binaryData: string = window.atob(base64Data);\n let len: number = binaryData.length;\n let bytes: Uint8Array = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binaryData.charCodeAt(i);\n }\n resolve(bytes.buffer);\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n};\n\nexport function openFile(path: string): Promise {\n return sendMessage('filesystem.openFile', { path });\n};\n\nexport function updateOpenedFile(id: number, event: string, data?: any): Promise {\n return sendMessage('filesystem.updateOpenedFile', { id, event, data });\n};\n\nexport function getOpenedFileInfo(id: number): Promise {\n return sendMessage('filesystem.getOpenedFileInfo', { id });\n};\n\nexport function removeFile(path: string): Promise {\n return sendMessage('filesystem.removeFile', { path });\n};\n\nexport function readDirectory(path: string): Promise {\n return sendMessage('filesystem.readDirectory', { path });\n};\n\nexport function copyFile(source: string, destination: string): Promise {\n return sendMessage('filesystem.copyFile', { source, destination } );\n};\n\nexport function moveFile(source: string, destination: string): Promise {\n return sendMessage('filesystem.moveFile', { source, destination });\n};\n\nexport function getStats(path: string): Promise {\n return sendMessage('filesystem.getStats', { path });\n};\n\nfunction arrayBufferToBase64(data: ArrayBuffer): string {\n let bytes: Uint8Array = new Uint8Array(data);\n let asciiStr: string = '';\n\n for(let byte of bytes) {\n asciiStr += String.fromCharCode(byte);\n }\n\n return window.btoa(asciiStr);\n};\n\n\n","import { sendMessage } from '../ws/websocket';\n\nexport interface ExecCommandOptions {\n stdIn?: string;\n background?: boolean;\n}\n\nexport interface ExecCommandResult {\n pid: number;\n stdOut: string;\n stdErr: string;\n exitCode: number;\n}\n\nexport interface SpawnedProcess {\n id: number;\n pid: number;\n}\n\nexport interface Envs {\n [key: string]: string;\n}\n\nexport interface OpenDialogOptions {\n multiSelections?: boolean;\n filters?: Filter[];\n defaultPath?: string;\n}\n\nexport interface FolderDialogOptions {\n defaultPath?: string;\n}\n\nexport interface SaveDialogOptions {\n forceOverwrite?: boolean;\n filters?: Filter[];\n defaultPath?: string;\n}\n\nexport interface Filter {\n name: string;\n extensions: string[];\n}\n\nexport interface TrayOptions {\n icon?: string;\n menu?: TrayMenuItem[];\n}\n\nexport interface TrayMenuItem {\n id?: string;\n text: string;\n isDisabled?: boolean;\n isChecked?: boolean;\n}\n\nexport enum Icon {\n WARNING = 'WARNING',\n ERROR = 'ERROR',\n INFO = 'INFO',\n QUESTION = 'QUESTION'\n};\n\nexport enum MessageBoxChoice {\n OK = 'OK',\n OK_CANCEL = 'OK_CANCEL',\n YES_NO = 'YES_NO',\n YES_NO_CANCEL = 'YES_NO_CANCEL',\n RETRY_CANCEL = 'RETRY_CANCEL',\n ABORT_RETRY_IGNORE = 'ABORT_RETRY_IGNORE'\n};\n\nexport type KnownPath =\n 'config' |\n 'data' |\n 'cache' |\n 'documents' |\n 'pictures' |\n 'music' |\n 'video' |\n 'downloads' |\n 'savedGames1' |\n 'savedGames2'\n\nexport function execCommand(command: string, options?: ExecCommandOptions): Promise {\n return sendMessage('os.execCommand', { command, ...options });\n};\n\nexport function spawnProcess(command: string): Promise {\n return sendMessage('os.spawnProcess', { command });\n};\n\nexport function updateSpawnedProcess(id: number, event: string, data?: any): Promise {\n return sendMessage('os.updateSpawnedProcess', { id, event, data });\n};\n\nexport function getSpawnedProcesses(): Promise {\n return sendMessage('os.getSpawnedProcesses');\n};\n\nexport function getEnv(key: string): Promise {\n return sendMessage('os.getEnv', { key });\n};\n\nexport function getEnvs(): Promise {\n return sendMessage('os.getEnvs');\n};\n\nexport function showOpenDialog(title?: string, options?: OpenDialogOptions): Promise {\n return sendMessage('os.showOpenDialog', { title, ...options });\n};\n\nexport function showFolderDialog(title?: string, options?: FolderDialogOptions): Promise {\n return sendMessage('os.showFolderDialog', { title, ...options });\n};\n\nexport function showSaveDialog(title?: string, options?: SaveDialogOptions): Promise {\n return sendMessage('os.showSaveDialog', { title, ...options });\n};\n\nexport function showNotification(title: string, content: string, icon?: Icon): Promise {\n return sendMessage('os.showNotification', { title, content, icon });\n};\n\nexport function showMessageBox(title: string, content: string,\n choice?: MessageBoxChoice, icon?: Icon): Promise {\n return sendMessage('os.showMessageBox', { title, content, choice, icon });\n};\n\nexport function setTray(options: TrayOptions): Promise {\n return sendMessage('os.setTray', options);\n};\n\nexport function open(url: string): Promise {\n return sendMessage('os.open', { url });\n};\n\nexport function getPath(name: KnownPath): Promise {\n return sendMessage('os.getPath', { name });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport interface MemoryInfo {\n total: number;\n available: number;\n}\n\nexport interface KernelInfo {\n variant: string;\n version: string;\n}\n\nexport interface OSInfo {\n name: string;\n description: string;\n version: string;\n}\n\nexport interface CPUInfo {\n vendor: string;\n model: string;\n frequency: number;\n architecture: string;\n logicalThreads: number;\n physicalCores: number;\n physicalUnits: number;\n}\n\nexport interface Display {\n id: number;\n resolution: Resolution;\n dpi: number;\n bpp: number;\n refreshRate: number;\n}\n\ninterface Resolution {\n width: number;\n height: number;\n}\n\ninterface MousePosition {\n x: number;\n y: number;\n}\n\nexport function getMemoryInfo(): Promise {\n return sendMessage('computer.getMemoryInfo');\n};\n\nexport function getArch(): Promise {\n return sendMessage('computer.getArch');\n};\n\nexport function getKernelInfo(): Promise {\n return sendMessage('computer.getKernelInfo');\n};\n\nexport function getOSInfo(): Promise {\n return sendMessage('computer.getOSInfo');\n};\n\nexport function getCPUInfo(): Promise {\n return sendMessage('computer.getCPUInfo');\n};\n\nexport function getDisplays(): Promise {\n return sendMessage('computer.getDisplays');\n};\n\nexport function getMousePosition(): Promise {\n return sendMessage('computer.getMousePosition');\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport function setData(key: string, data: string): Promise {\n return sendMessage('storage.setData', { key, data });\n};\n\nexport function getData(key: string): Promise {\n return sendMessage('storage.getData', { key });\n};\n\nexport function getKeys(): Promise {\n return sendMessage('storage.getKeys');\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport enum LoggerType {\n WARNING = 'WARNING',\n ERROR = 'ERROR',\n INFO = 'INFO'\n};\n\nexport function log(message: string, type?: LoggerType): Promise {\n return sendMessage('debug.log', { message, type });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport interface OpenActionOptions {\n url: string;\n}\n\nexport interface RestartOptions {\n args: string;\n}\n\nexport function exit(code?: number): Promise {\n return sendMessage('app.exit', { code });\n};\n\nexport function killProcess(): Promise {\n return sendMessage('app.killProcess');\n};\n\nexport function restartProcess(options?: RestartOptions): Promise {\n return new Promise(async (resolve: () => void) => {\n let command = window.NL_ARGS.reduce((acc: string, arg: string) => {\n acc += ' ' + arg;\n return acc;\n }, '');\n\n if(options?.args) {\n command += ' ' + options.args;\n }\n\n await Neutralino.os.execCommand(command, {background: true});\n Neutralino.app.exit();\n resolve();\n });\n};\n\nexport function getConfig(): Promise {\n return sendMessage('app.getConfig');\n};\n\nexport function broadcast(event: string, data?: any): Promise {\n return sendMessage('app.broadcast', {event, data});\n};\n","import { sendMessage } from '../ws/websocket';\n\nconst draggableRegions: WeakMap = new WeakMap();\n\nexport interface WindowOptions extends WindowSizeOptions {\n title?: string;\n icon?: string;\n fullScreen?: boolean;\n alwaysOnTop?: boolean;\n enableInspector?: boolean;\n borderless?: boolean;\n maximize?: boolean;\n hidden?: boolean;\n maximizable?: boolean;\n processArgs?: string;\n}\n\nexport interface WindowSizeOptions {\n width?: number;\n height?: number;\n minWidth?: number;\n minHeight?: number;\n maxWidth?: number;\n maxHeight?: number;\n resizable?: boolean;\n}\n\nexport interface WindowPosOptions {\n x: number;\n y: number;\n}\n\nexport function setTitle(title: string): Promise {\n return sendMessage('window.setTitle', { title });\n};\n\nexport function getTitle(): Promise {\n return sendMessage('window.getTitle');\n};\n\nexport function maximize(): Promise {\n return sendMessage('window.maximize');\n};\n\nexport function unmaximize(): Promise {\n return sendMessage('window.unmaximize');\n};\n\nexport function isMaximized(): Promise {\n return sendMessage('window.isMaximized');\n};\n\nexport function minimize(): Promise {\n return sendMessage('window.minimize');\n};\n\nexport function setFullScreen(): Promise {\n return sendMessage('window.setFullScreen');\n};\n\nexport function exitFullScreen(): Promise {\n return sendMessage('window.exitFullScreen');\n};\n\nexport function isFullScreen(): Promise {\n return sendMessage('window.isFullScreen');\n};\n\nexport function show(): Promise {\n return sendMessage('window.show');\n};\n\nexport function hide(): Promise {\n return sendMessage('window.hide');\n};\n\nexport function isVisible(): Promise {\n return sendMessage('window.isVisible');\n};\n\nexport function focus(): Promise {\n return sendMessage('window.focus');\n};\n\nexport function setIcon(icon: string): Promise {\n return sendMessage('window.setIcon', { icon });\n};\n\nexport function move(x: number, y: number): Promise {\n return sendMessage('window.move', { x, y });\n};\n\nexport function setDraggableRegion(domElementOrId: string | HTMLElement): Promise {\n return new Promise((resolve: any, reject: any) => {\n const draggableRegion: HTMLElement = domElementOrId instanceof Element ?\n domElementOrId : document.getElementById(domElementOrId);\n let initialClientX: number = 0;\n let initialClientY: number = 0;\n\n if (!draggableRegion) {\n return reject({\n code: 'NE_WD_DOMNOTF',\n message: 'Unable to find DOM element'\n });\n }\n\n if (draggableRegions.has(draggableRegion)) {\n return reject({\n code: 'NE_WD_ALRDREL',\n message: 'This DOM element is already an active draggable region'\n });\n }\n\n draggableRegion.addEventListener('pointerdown', startPointerCapturing);\n draggableRegion.addEventListener('pointerup', endPointerCapturing);\n\n draggableRegions.set(draggableRegion, { pointerdown: startPointerCapturing, pointerup: endPointerCapturing });\n\n async function onPointerMove(evt: PointerEvent) {\n await Neutralino.window.move(\n evt.screenX - initialClientX,\n evt.screenY - initialClientY\n );\n }\n\n function startPointerCapturing(evt: PointerEvent) {\n if (evt.button !== 0) return;\n initialClientX = evt.clientX;\n initialClientY = evt.clientY;\n draggableRegion.addEventListener('pointermove', onPointerMove);\n draggableRegion.setPointerCapture(evt.pointerId);\n }\n\n function endPointerCapturing(evt: PointerEvent) {\n draggableRegion.removeEventListener('pointermove', onPointerMove);\n draggableRegion.releasePointerCapture(evt.pointerId);\n }\n\n resolve({\n success: true,\n message: 'Draggable region was activated'\n });\n });\n};\n\nexport function unsetDraggableRegion(domElementOrId: string | HTMLElement): Promise {\n return new Promise((resolve: any, reject: any) => {\n const draggableRegion: HTMLElement = domElementOrId instanceof Element ?\n domElementOrId : document.getElementById(domElementOrId);\n\n if (!draggableRegion) {\n return reject({\n code: 'NE_WD_DOMNOTF',\n message: 'Unable to find DOM element'\n });\n }\n if (!draggableRegions.has(draggableRegion)) {\n return reject({\n code: 'NE_WD_NOTDRRE',\n message: 'DOM element is not an active draggable region'\n });\n }\n\n const { pointerdown, pointerup } = draggableRegions.get(draggableRegion);\n draggableRegion.removeEventListener('pointerdown', pointerdown);\n draggableRegion.removeEventListener('pointerup', pointerup);\n draggableRegions.delete(draggableRegion);\n\n resolve({\n success: true,\n message: 'Draggable region was deactivated'\n });\n });\n}\n\nexport function setSize(options: WindowSizeOptions): Promise {\n return new Promise(async (resolve: any, reject: any) => {\n let sizeOptions = await Neutralino.window.getSize();\n\n options = {...sizeOptions, ...options}; // merge prioritizing options arg\n\n sendMessage('window.setSize', options)\n .then((response: any) => {\n resolve(response);\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n};\n\nexport function getSize(): Promise {\n return sendMessage('window.getSize');\n};\n\nexport function getPosition(): Promise {\n return sendMessage('window.getPosition');\n};\n\nexport function setAlwaysOnTop(onTop: boolean): Promise {\n return sendMessage('window.setAlwaysOnTop', { onTop });\n};\n\nexport function create(url: string, options?: WindowOptions): Promise {\n return new Promise((resolve: any, reject: any) => {\n\n function normalize(arg: any) {\n if(typeof arg != \"string\")\n return arg;\n arg = arg.trim();\n if(arg.includes(\" \")) {\n arg = `\"${arg}\"`;\n }\n return arg;\n }\n\n let command = window.NL_ARGS.reduce((acc: string, arg: string, index: number) => {\n if(arg.includes(\"--path=\") || arg.includes(\"--debug-mode\") ||\n arg.includes(\"--load-dir-res\") || index == 0) {\n acc += \" \" + normalize(arg);\n }\n return acc;\n }, \"\");\n\n command += \" --url=\" + normalize(url);\n\n for(let key in options) {\n if(key == \"processArgs\")\n continue;\n\n let cliKey: string = key.replace(/[A-Z]|^[a-z]/g, (token: string) => (\n \"-\" + token.toLowerCase()\n ));\n command += ` --window${cliKey}=${normalize(options[key])}`\n }\n if(options && options.processArgs)\n command += \" \" + options.processArgs;\n\n Neutralino.os.execCommand(command, { background: true })\n .then((processInfo: any) => {\n resolve(processInfo);\n })\n .catch((error: any) => {\n reject(error);\n });\n });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport * from '../browser/events';\n\nexport function broadcast(event: string, data?: any): Promise {\n return sendMessage('events.broadcast', {event, data});\n};\n","import * as websocket from '../ws/websocket';\n\nexport interface ExtensionStats {\n loaded: string[];\n connected: string[];\n}\n\nexport function dispatch(extensionId: string, event: string, data?: any): Promise {\n return new Promise(async (resolve: any, reject: any) => {\n let stats = await Neutralino.extensions.getStats();\n if(!stats.loaded.includes(extensionId)) {\n reject({\n code: 'NE_EX_EXTNOTL',\n message: `${extensionId} is not loaded`\n });\n }\n else if(stats.connected.includes(extensionId)) {\n try {\n let result = await websocket.sendMessage('extensions.dispatch', {extensionId, event, data});\n resolve(result);\n }\n catch(err: any) {\n reject(err);\n }\n }\n else {\n // loaded but not connected yet.\n websocket.sendWhenExtReady(extensionId, {\n method: 'extensions.dispatch',\n data: {extensionId, event, data}, resolve, reject\n });\n }\n });\n};\n\nexport function broadcast(event: string, data?: any): Promise {\n return websocket.sendMessage('extensions.broadcast', {event, data});\n};\n\nexport function getStats(): Promise {\n return websocket.sendMessage('extensions.getStats');\n};\n","import { Error } from './protocol';\n\nexport interface Manifest {\n applicationId: string;\n version: string;\n resourcesURL: string;\n}\n\nlet manifest: Manifest = null;\n\nexport function checkForUpdates(url: string): Promise {\n function isValidManifest(manifest: any): manifest is Manifest {\n if(manifest.applicationId && manifest.applicationId == window.NL_APPID\n && manifest.version && manifest.resourcesURL) {\n return true;\n }\n return false;\n }\n\n return new Promise(async (resolve: (m: Manifest) => void, reject: (e: Error) => void) => {\n if(!url) {\n return reject({\n code: 'NE_RT_NATRTER',\n message: 'Missing require parameter: url'\n });\n }\n try {\n let response = await fetch(url);\n manifest = JSON.parse(await response.text());\n\n if(isValidManifest(manifest)) {\n resolve(manifest);\n }\n else {\n reject({\n code: 'NE_UP_CUPDMER',\n message: 'Invalid update manifest or mismatching applicationId'\n });\n }\n }\n catch(err) {\n reject({\n code: 'NE_UP_CUPDERR',\n message: 'Unable to fetch update manifest'\n });\n }\n\n });\n};\n\nexport function install(): Promise {\n return new Promise(async (resolve: any, reject: any) => {\n if(!manifest) {\n return reject({\n code: 'NE_UP_UPDNOUF',\n message: 'No update manifest loaded'\n });\n }\n try {\n let response = await fetch(manifest.resourcesURL);\n let resourcesBuffer = await response.arrayBuffer();\n await Neutralino.filesystem.writeBinaryFile(window.NL_PATH + \"/resources.neu\", resourcesBuffer);\n\n resolve({\n success: true,\n message: 'Update installed. Restart the process to see updates'\n });\n }\n catch(err) {\n reject({\n code: 'NE_UP_UPDINER',\n message: 'Update installation error'\n });\n }\n\n });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport function readText(key: string, data: string): Promise {\n return sendMessage('clipboard.readText', { key, data });\n\n};\n\nexport function writeText(data: string): Promise {\n return sendMessage('clipboard.writeText', { data });\n};\n","import { sendMessage } from '../ws/websocket';\n\nexport function getMethods(): Promise {\n return sendMessage('custom.getMethods');\n};\n","import * as websocket from '../ws/websocket';\nimport { version } from '../../package.json';\n\nlet initialized = false;\n\nexport interface InitOptions {\n exportCustomMethods?: boolean;\n}\n\nexport function init(options: InitOptions = {}): void {\n options = {...{\n exportCustomMethods: true\n } ,...options};\n\n if(initialized) {\n return;\n }\n\n websocket.init();\n\n if(window.NL_ARGS.find((arg) => arg == '--neu-dev-auto-reload')) {\n Neutralino.events.on('neuDev_reloadApp', async () => {\n await Neutralino.debug.log('Reloading the application...');\n location.reload();\n });\n }\n\n if(options.exportCustomMethods && window.NL_CMETHODS && window.NL_CMETHODS.length > 0) {\n for(let method of window.NL_CMETHODS) {\n Neutralino.custom[method] = (...args) => {\n let data = {};\n for(let [argi, argv] of args.entries()) {\n if(typeof argv == 'object' && !Array.isArray(argv) && argv != null) {\n data = {...data, ...argv};\n }\n else {\n data = {...data, ['arg' + argi]: argv};\n }\n }\n return websocket.sendMessage('custom.' + method, data);\n };\n }\n }\n\n window.NL_CVERSION = version;\n window.NL_CCOMMIT = '19e52c6d44988de048df4ab80c92f100ece9a6ae'; // only the build server will update this\n initialized = true;\n}\n"],"names":["dispatch","init","events.dispatch","getStats","broadcast","websocket.sendMessage","websocket.sendWhenExtReady","websocket.init"],"mappings":"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"} \ No newline at end of file diff --git a/errors.cpp b/errors.cpp index 30577f7d..1842d09a 100644 --- a/errors.cpp +++ b/errors.cpp @@ -35,6 +35,9 @@ string __getStatusCodeString(const errors::StatusCode code) { case errors::NE_FS_NOPATHE: return "NE_FS_NOPATHE"; case errors::NE_FS_COPYFER: return "NE_FS_COPYFER"; case errors::NE_FS_MOVEFER: return "NE_FS_MOVEFER"; + case errors::NE_FS_FILOPER: return "NE_FS_FILOPER"; + case errors::NE_FS_UNLTOUP: return "NE_FS_UNLTOUP"; + case errors::NE_FS_UNLTFOP: return "NE_FS_UNLTFOP"; // router case errors::NE_RT_INVTOKN: return "NE_RT_INVTOKN"; case errors::NE_RT_APIPRME: return "NE_RT_APIPRME"; @@ -80,6 +83,9 @@ string __findStatusCodeDesc(errors::StatusCode code) { case errors::NE_FS_NOPATHE: return "Unable to open path %1"; case errors::NE_FS_COPYFER: return "Cannot perform copy: %1"; case errors::NE_FS_MOVEFER: return "Cannot perform move: %1"; + case errors::NE_FS_FILOPER: return "Unable to open file: %1"; + case errors::NE_FS_UNLTOUP: return "Unable to update opened file id: %1"; + case errors::NE_FS_UNLTFOP: return "Unable to find opened file id: %1"; // router case errors::NE_RT_INVTOKN: return "Invalid or expired NL_TOKEN value from client"; case errors::NE_RT_APIPRME: return "Missing permission to access Native API"; diff --git a/errors.h b/errors.h index 614a383b..49e1bbf5 100644 --- a/errors.h +++ b/errors.h @@ -35,6 +35,9 @@ enum StatusCode { NE_FS_NOPATHE, NE_FS_COPYFER, NE_FS_MOVEFER, + NE_FS_FILOPER, + NE_FS_UNLTOUP, + NE_FS_UNLTFOP, // router NE_RT_INVTOKN, NE_RT_APIPRME, diff --git a/server/router.cpp b/server/router.cpp index f234f4ab..a80e2dea 100644 --- a/server/router.cpp +++ b/server/router.cpp @@ -81,6 +81,9 @@ map methodMap = { {"filesystem.writeBinaryFile", fs::controllers::writeBinaryFile}, {"filesystem.appendFile", fs::controllers::appendFile}, {"filesystem.appendBinaryFile", fs::controllers::appendBinaryFile}, + {"filesystem.openFile", fs::controllers::openFile}, + {"filesystem.updateOpenedFile", fs::controllers::updateOpenedFile}, + {"filesystem.getOpenedFileInfo", fs::controllers::getOpenedFileInfo}, {"filesystem.removeFile", fs::controllers::removeFile}, {"filesystem.readDirectory", fs::controllers::readDirectory}, {"filesystem.copyFile", fs::controllers::copyFile},