======================== 0.0.56 ======================== - fixed `websocketclient.api()` error handling - updated file stats by adding `version.build` - fixed `U.decrypt_data()` - added `CONF.node_modules` that affects `NPMINSTALL()` method - replaced `duration2` property with `ts` in the FlowStrem Message - revitalized code in the `FlowStreamMessage` instance - improved `Tangular` by adding private helpers per template - improved `SMTP sender` - added `NEWTRANSFORM(name, [id], function($, value) {})` registers a new transformation - added `TRANSFORM(name, value, function(err, value) {})` executes all transformations - improved response from the ErrorBuilder (empty fields are removed from the response) - improved built-in sessions by added `return {Number}` to `.update()` and `.refresh()` method - updated Tangular template engine to `v5` - extended `$` by adding `uri` property linked with the `controller.req.uri` - added `NEWTHREAD(name, [data])` method, runs the `/workers/{name}.js` as `worker_threads` - added `NEWTHREADPOOL(name, count)` method creates a pool for `worker_threads` - added `NEWFORK(name)` method (a better alternative to the `WORKER()` method), runs the `/workers/{name}.js` as `fork` - added `NEWMACRO(script)` method for compiling custom Total.js macros - extended built-in Authorization by adding `opt.auth($)` method for additional authorization - added `COPY()` alias to `U.copy()` - added support for promises to `U.ls()` and `U.ls2()` method - added `QueryBuilder.autoquery()` method - added `DatabaseBuilder.autoquery()` method - added `BitExtractor` by [Peter Stolc](https://github.com/a50397) - added `U.extract(data, [from = 16], [to = 10])` returns `BitExtractor` instance ======================== 0.0.55 ======================== - fixed `download` command for the CodeEditor - fixed parsing data in the WebSocket ======================== 0.0.54 ======================== - `callback` argument is optional in `UIStream.load()` - `callback` argument is optional in `FlowStream.load()` - improved measuring of CPU usage - added `FlowStream.insert(schema, [callback])` method for inserting/modifying specific FlowStream instances - added `FlowStream.remove(keys, [callback])` method for removing specific FlowStream instances - added `FlowStream.export_instance(id)` method for exporting instance metadata - added `FlowStream.export_component(id)` method for exporting component metadata - added a simple ORM - `DB([conn])` and `NEWDB([conn], callback(builder, next(err, response)))` - extended `U.reader()` by adding `.assign(ORMQueryBuilder)` - removed UIStream (replaced by the FlowStream) - fixed parsing `close` message in the WebSocket & WebSocketClient - fixed `.autodestroy()` in the WebSocket controller - added `Database.assign(QueryBuilderData)` method - added `DatabaseBuilder.assign(QueryBuilderData)` method - fixed TextDB inserting with symbols for atomic operations - fixed `$def` in the JSON schemas - fixed converting Total.js Schema to the JSON Schema - improved error handling in JSON schemas ======================== 0.0.53 ======================== - fixed wrong counting of week number in the `Date.format()` - updated `flowstream.onreconfigure` by adding `init` argument - updated `flowstreaminstance.configure` by adding `init` argument - updated `uistream.onreconfigure` by adding `init` argument - updated `uistreaminstance.configure` by adding `init` argument - fixed `U.queue()` by [Martin Smola](https://github.com/molda/) - added `@{input('type', 'name')}` for creating `` in the FlowStream - fixed using `require()` in the components in the FlowStream - added a support for editing local files via Total.js Code Editor - extended Total.js terminal app by adding `total4 edit URL_TO_CODE_EDITOR?id=projectid` - extended `UID([type], [date])`, `UID16([type], [date])` and `UID1([type], [date])` by adding `date` argument - extended `U.queue(name, max, fn, [param])` by adding the `param` argument - added `flowmessage.input {String}` for determining input name (alias for `flowmessage.index`) - added a support dynamic inputs/outputs in the FlowStream - fixed a problem with multiple spaces in the `controller.runtest()` method - added support for external operations `OPERATION('https://..fn.js <5 minutes>', console.log)` - added support for external tasks `TASK('https://..fn.js <5 minutes>', 'init', console.log)` - allows `.ts` (MPEG stream) and `.m3u8` file types for the web server - extended `U.getContentType()` by adding `.ts` and `.m3u8` extensions - extended `NEWCALL()` by adding support for operations ======================== 0.0.45 ======================== - fixed parsing a lot of items via LDAP - added `noauth` option to the `LDAP()` method - added `TMSCLIENT(url, [token], [callback(client)])` that creates a connection to the Total.js Message Service server - extended Total.js Message Service by adding `call(name, data, callback)` functionality - added `NEWCALL(name, schema, [callback(data, next)])` that registers `call` - extended JSON stats by adding `cm` - calls per minute - added `destroy` event to the `WEBSOCKETCLIENT()` - fixed `U.extend()` method - fixed `CLONE()` method - added `F.extendreq(req)` method - added `F.extendres(res)` method - added `F.serverless(req, res, [callback], [types], [cwd])` method - fixed content-types for `application/*` content types - improved `NPMINSTALL()` by adding check for existing modules - added `FILESTORAGE().savejson(id, value, [callback(err, meta)], [custom], [expire])` - added `FILESTORAGE().readjson(id, callback(err, value, meta))` - added `FILESTORAGE().readbuffer(id, callback(err, buffer, meta))` - added `SafeString` type to the Schemas with a check for XSS and SQL Injections - added `Color` type to the Schemas - added `Icon` type to the Schemas - fixed `EACHSCHEMA()` method - improved schema types `Capitalize`, `Capitalize2` by adding a check for `XSS` - fixed a bad status code with the usage of `AUTH()` #22 - improved Total.js 4 command-line tool by [Helferino](https://github.com/Helferino/) - fixed loading of default values from the `default.resource` - fixed `FILESTORAGE().browse2()` method - added `FILESTORAGE().rename()` method ======================== 0.0.44 ======================== - fixed schema error handling with error code `{Number}` as the `err` argument in the `$.callback(err_code, response)` method - improved error handling in `WEBSOCKETCLIENT()` method - updated `$` arg by adding `websocket {Boolean}` property in `AUTH($)` delegate - added support for WebSocket API - extended `ROUTE('API @websocket_api_name opid *Schema --> operation')` method by adding `@websocketapi_endpoint_name` - added `websocket.api(url)` automatically processes `ROUTE()` with WebSocket APIs - extended `ROUTE('SOCKET / @websocket_api_name')` method by adding WebSocket API without action - added `websocketclient.api()` method - added `websocketclient.api(schema, [data], [callback], [timeout])` method - extended `U.copy()` by adding `all` argument - fixed `array.random(true)` with only the one item - improved WebSocket ping (updated interval to 20 seconds) - updated `WebSocketClient.ping(timeout)` by adding `timeout {Number}` argument - added `WebSocketClient.latency {Number}` with a latency in `ms` - allowed `.wasm` extension for handling static files - fixed sending emails via Total.js API services ======================== 0.0.43 ======================== - added `flowmessage.variables(str, [data])` method - updated `LOADCONFIG()` supports `hex/base64` encoding - improved `flowinstance.newmessage(data)` method - removed method `U.set()` - removed method `U.get()` - removed method `U.sync()` and `global.sync()` - removed method `U.sync2()` and `global.sync2()` ======================== 0.0.42 ======================== - added support for JSON schemas - added Total Messaging Service - added `jsonschemas` directory - added `schema.jsonschema(name)` method - added `JSONSCHEMA()` method - added `NEWJSONSCHEMA()` method - added `NEWPUBLISH()` method - added `NEWSUBSCRIBE()` method - added `PUBLISH()` method - added `SUBSCRIBE()` method - added `UNSUBSCRIBE()` method - added `watcher` event for the main process in `debug` or `release` mode with the watcher - added HTML escaping for meta tags - added `WebSocketClient.destroy()` method - added new command `refresh_cmd` - added `allow_totalapilogger {Boolean}` option to the configuration - added `allow_totalapi {Boolean}` option to the configuration - added `allow_tms {Boolean}` option to the configuration - added `secret_tms {String}` option to the configuration - added `schema.jsonschema_define()` method - added `flowstream.load(components, design, [callback])` method - added `flowstream.unload(components, design, [callback])` method - added new delegate `flowstream.onreconfigure = function(instance) {}` - added new delegate `flowstream.onconnect = function(instance) {}` - added new delegate `flowstream.ondisconnect = function(instance) {}` - added new delegate `flowstream.onregister = function(component) {}` - added new delegate `flowstream.onunregister = function(component) {}` - added `uistream.load(components, design, [callback])` method - added `uistream.unload(components, design, [callback])` method - added new delegate `uistream.onreconfigure = function(instance) {}` - added new delegate `uistream.onconnect = function(instance) {}` - added new delegate `uistream.ondisconnect = function(instance) {}` - added new delegate `uistream.onregister = function(component) {}` - added new delegate `uistream.onunregister = function(component) {}` - fixed `Mail.attachmentfs()` - fixed dynamic routing - fixed security issue when parsing query arguments (reported by ) - extended `schema.addTask()` by adding a new argument `callback` - added new method `flowstream.newmessage(data)` - added new method `flowstream_instance.newmessage(data)` - added `String.toJSONSchema(name, url)` - added `bundles.debug` enables watcher for `.src` directory only ======================== 0.0.41 ======================== - added TypeScript support - added support for static files in threads - fixed logging in threads by Tomas Novak - added `insecure` option to the `REQUEST()` method - added `builder.insecure()` method to the `RESTBuilder` instance - added `profile` type to the LDAP options - extended `base64` by adding support for `content-type;base64,data` format - updated `schema.define(key, type, required, [default_error_message])` - fixed `String.encrypt_uid()` - fixed `$.keys` in schemas with multiple operations - fixed wildcard routing combinated with dynamic arguments ======================== 0.0.40 ======================== - added `U.reader().list()` method - added `Array.findValue()` - added async/await mechanism to TextDB - added async/await mechanism to RESTBuilder - threads supports views - improved error handling in `TotalAPI()` - improved `Database.scalar()` by adding new argument - improved `QueryBuilder.in()` and `QueryBuilder.notin()` - fixed UTF8 chars in multi-part parser - fixed `NOSQL().autofill()` - fixed converting date via `Date.setTimeZone()` - fixed XML comments in `String.parseXML()` - fixed `Name` type in `Schemas` - fixed sorting in `U.reader()` ======================== 0.0.39 ======================== - added a new alias `request.proxy()` to `response.proxy()` - added `LDAP(opt, callback)` method for obtaining of users, groups or user profile (experimental) - added `U.normalize(path)` that normalizes path by adding `/` to begin and end of the phrase - added `U.link(path1, path2, pathN)` for creating of links - added `PATH.join()` alias to `Path.join()` - added `DEF.blacklist` object that performs IP blacklist - updated `filestorage.save()` by adding support for importing files from URL address - updated built-in session `AUTH()` mechanism by adding `options.strict {Boolean}` option - updated `$.extend([data], [callback])` method in SchemaOptions by adding `callback` argument that enables async processing - removed `allow_debug` option - fixed `abort` event for incoming `request` - fixed `controller.json()` method - fixed `array.quicksort()` method - fixed `controller.invalid()`, added missing second argument called `error` (optional) - fixed error handling in `TotalAPI` - fixed cookies transfering while redirecting in the `REQUEST()` method (can be disable via `opt.nocookies = true`) - fixed `language` in `WebSocketClient` - fixed merging files with the `auto` value defined in `versions` - fixed encoding in `content-disposition` header - fixed `UNAUTHORIZED()` - fixed `after` argument in the `PROXY()` and `res.proxy()` methods - improved error handling in WebSocket - improved HTTP caching in merged files - improved unit-testing - improved timeouts in the API endpoints ======================== 0.0.38 ======================== - added `PAUSE(is_paused)` method that can pause loading of all Total.js dependencies - added dynamic delegates for receiving of messages in FlowStream in the form `instance.mesage_` - added `response.proxy(target, [copypath], [after], [timeout])` - improved some parts of code - improved `MIDDLEWARE(name, fn, [assign], [first])` method - fixed measuring dimension for `.gif` images - fixed `BACKUP()` method (a problem with sockets) - fixed potential remote code execution in `U.set()` founded by [Snyk](https://snyk.io/vuln) - fixed routing with camel-Case URL addresses - fixed sending of messages via inline registered components in FlowStream - fixed a problem with FileStorage and opened file descriptors ======================== 0.0.37 ======================== - added CSRF - `CONF.secret_csrf` - `CONF.default_csrf_maxage` - `DEF.onCSRFcreate(req)` - `DEF.onCSRFcheck(req)` - `req.csrf()` generates a token - `controller.csrf()` generates a token - `@{csrf}` generates a token in View engine - `schema.csrf()` enables csrf for schemas and their routes - new `csrf` flag in `ROUTE()` method - `csrf` verification via `x-csrf-token` header or via URL argument `?csrf=TOKEN` - `RESTBuilder.csrf(token)` - added `HTMLMAIL(address, subject, body, [language], [callback])` for sending of raw HTML mail messages - added `NPMINSTALL(name, callback)` for installing of 3rd party NPM dependencies - added `FILESTORAGE().image()` method for reading of images - `CONF.default_errorbuilder_errors` for handling of all HTTP errors via ErrorBuilder - decreased `default_interval_websocket_ping` to `1` minute (from `3`) - improved image cache in `FILESTORAGE()` - fixed `message` with `closing bytes` in WebSocket and `WEBSOCKETCLIENT()` - fixed `@{resource()}` method in View engine - fixed read stream in `FILESTORAGE()` ======================== 0.0.36 ======================== - improved HTTP cache - fixed parsing of schema keys in `PATCH` method - fixed predefined session functionality (a problem with cache) - fixed `API` routes with empty model ======================== 0.0.35 ======================== - extended `EXEC()` by adding support for `Tasks` and `Operations` - fixed `DELETE` method for the schemas, now it works same like `PATCH` method - fixed `FlowStream.use()` method - fixed pausing of outputs/inputs in `FlowStream` - fixed inputs in `FlowStream` - fixed command injection in `Image.pipe()` and `Image.stream()` - fixed parsing of uploaded files (sometimes was the writeable stream unclosed) - fixed execution of system routes ======================== 0.0.31 ======================== - added `CONF.default_errorbuilder_forxhr` key (default: `true`) - errors in requests with `xhr` are serialized via ErrorBuilder - fixed reconnecting in `WEBSOCKETCLIENT()` - fixed `$.success()` and `$.done()` used in chaining