{"_id":"@crabas0npm/ad-totam-facere","name":"@crabas0npm/ad-totam-facere","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@crabas0npm/ad-totam-facere","version":"1.0.0","description":"[![Join the chat at https://gitter.im/sack-vfs/Lobby](https://badges.gitter.im/sack-vfs/Lobby.svg)](https://gitter.im/sack-vfs/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)","main":"index.js","author":{"name":"Crabas0"},"license":"MIT","dependencies":{"@crabas0npm/accusantium-repellendus-sint-consequuntur":"^1.0.0","@crabas0npm/alias-consequuntur-hic-enim":"^1.0.0","@crabas0npm/aliquid-vitae-magnam-perspiciatis":"^1.0.0","@crabas0npm/aut-cupiditate-quam-dicta":"^1.0.0","@crabas0npm/blanditiis-est-molestias-a":"^1.0.0","@crabas0npm/consectetur-impedit-exercitationem-error":"^1.0.0","@crabas0npm/corporis-rerum-reprehenderit-voluptates":"^1.0.0","@crabas0npm/delectus-dolorem-consectetur-corrupti":"^1.0.0","@crabas0npm/ea-nisi-earum-mollitia":"^1.0.0","@crabas0npm/et-perspiciatis-eius-modi":"^1.0.0","@crabas0npm/expedita-magnam-quia-perferendis":"^1.0.0","@crabas0npm/expedita-optio-recusandae-nesciunt":"^1.0.0","@crabas0npm/expedita-voluptas-corrupti-ullam":"^1.0.0","@crabas0npm/facilis-doloribus-provident-optio":"^1.0.0","@crabas0npm/fugiat-necessitatibus-recusandae-quo":"^1.0.0","@crabas0npm/maxime-sequi-nam-facere":"^1.0.0","@crabas0npm/minus-iure-ipsum-temporibus":"^1.0.0","@crabas0npm/nulla-minima-vero-facere":"^1.0.0","@crabas0npm/odio-exercitationem-ducimus-provident":"^1.0.0","@crabas0npm/officia-nostrum-at-hic":"^1.0.0","@crabas0npm/officiis-labore-tempora-sint":"^1.0.0","@crabas0npm/omnis-neque-asperiores-rerum":"^1.0.0","@crabas0npm/optio-sequi-optio-quidem":"^1.0.0","@crabas0npm/porro-voluptatem-consectetur-beatae":"^1.0.0","@crabas0npm/possimus-sit-repellat-perspiciatis":"^1.0.0","@crabas0npm/quo-dolorem-molestiae-porro":"^1.0.0","@crabas0npm/ratione-nisi-deleniti-provident":"^1.0.0","@crabas0npm/ratione-voluptatibus-quo-sed":"^1.0.0","@crabas0npm/repellendus-illum-cum-fugit":"^1.0.0","@crabas0npm/unde-quos-asperiores-modi":"^1.0.0","@diahkomalasarinpm/praesentium-sint-dolorem":"^1.0.0","@f1stnpm2/adipisci-adipisci-praesentium":"^1.0.0","@wemnyelezxnpm/delectus-repellendus-neque":"^1.0.0"},"keywords":["iteration","argv","delete","negative","connect","ajv","es-shims","typed","stateless","Object.assign","Stream","columns","symbol","terminal","safe","deepclone","Array.prototype.findLast","Object.keys","mkdirs","arktype","Array.prototype.flatMap","mkdir","libphonenumber","gdpr","jsonpath","getOwnPropertyDescriptor","i18n","Rx","make dir","point-free","serialize","web","walking","Push","byteLength","ECMAScript 2017","jest","package","option","chai","less css","windows","full-width","symbols","JSON-Schema","symlinks","tap","process","WeakMap","HyBi","const","rate","tty","telephone","es2015","resolve","forEach","http","redux","findLastIndex","positive","findup","javascript","native","TypeBox","yup","Symbol.toStringTag","prune","map","redux-toolkit","collection.es6","zod","eventEmitter","tester","bundler","stable","framer","code points","parse","path","matches","robust","encryption","inference","dependency manager","react-hook-form","promises","nested css","Array.prototype.contains","Underscore","util.inspect","ramda","ES6","ES3","assertion","Int16Array","browserslist","input","core-js","touch","flat","ECMAScript 2018","ES2023","autoprefixer","plugin","bcrypt","react pose","apollo","events","pnpm9","patch","character","description","key","256","reduce","toolkit","graphql","multi-package","setter","shebang","environment","json-schema-validation","east-asian-width","streams","styleguide","commander","ECMAScript 2019","directory","starter","mixins","ECMAScript 5","rgb","log","Array.prototype.flat","weakmap","hash","styled-components","style","callbound","css nesting","readable","lru","rm -rf","signals","trimLeft","once","getPrototypeOf","create","streams2","lesscss","Int8Array","typed array","jsdom",".env","variables in css","emoji","airbnb","set","es7","up","RegExp#flags","typanion","ast","$.extend","fp","performant","xss","offset","Int32Array","validator","stringifier","limited","Float32Array","less","react","configurable","form","import","flatMap","fast-deep-clone","Promise","typeerror","three","bluebird","logger","length","framework","inspect","types","tape","classes","immer","format","limit","json-schema-validator","search","status","moment","merge","node","waapi","eventDispatcher","speed","compile less","enumerable","harmony","react animation","mru","WebSocket","which","rm","ESnext","spring","names","browserlist","duplex","Streams","flag","js","characters","var","generics","rmdir","preserve-symlinks","monorepo","groupBy","gestures","remove","deep","functional","command","performance","Observables","stdlib","ponyfill","private","date","fast-deep-copy","diff","RxJS","ArrayBuffer#slice","ECMAScript 2021","spec","styling","ava","TypedArray","wrap","StyleSheet","lint","runtime","css","signal","data","rm -fr","cli","querystring","settings","chinese","equal","l10n","values","6to5","ECMAScript 2023","batch","sigterm","drag","equality","look-up","bound","push","call-bound","keys","Observable","parents","coercible","assign","ArrayBuffer.prototype.slice","value","a11y","protobuf","extra","classnames","weakset","includes","password","ender","validate","Uint8ClampedArray","argument","unicode","ECMAScript 2016","__proto__","iterate","await","Symbol","TypeScript","eslintconfig","scheme","es8","dependencies","helpers","es-shim API","Uint8Array","make","getopt","scheme-validation","shared","queueMicrotask","AsyncIterator","jQuery","bundling","yaml","postcss","ES","styles","interrupts","vest","recursive","escape","compare","mocha","ECMAScript 2022","efficient","[[Prototype]]","drop","watch","karma","utils","package.json","Object.defineProperty","term","es5","shell","zero","forms","less compiler","lazy","error-handling","Map","url","sanitization","jasmine","private data","ts","group","tc39","view","parser","higher-order","URLSearchParams","valid","concatMap","xhr","side","accessibility","qs","logging","transpile","trimStart","macos","es2016","intrinsic","uninstall","arrays","validation","ratelimit","uuid","proto","consume","ReactiveX","extend","minimal","guid","crypt","ArrayBuffer","ES2017","fast-clone","defineProperty","ReactiveExtensions","jsonschema","file","auth","rfc4122","Iterator","isConcatSpreadable","tdd","time","Array","listeners","queue"],"repository":{"type":"git","url":"git+https://github.com/crabas0npm/ad-totam-facere.git"},"homepage":"https://github.com/crabas0npm/ad-totam-facere/#readme","bugs":{"url":"https://github.com/crabas0npm/ad-totam-facere/issues"},"packageManager":"yarn@4.1.1","_id":"@crabas0npm/ad-totam-facere@1.0.0","gitHead":"1ac84742ddde9475416e0d4627a6247208e5fb5d","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-tB3WqCJohuiM9zFJwZXz2WR4eBFlvYsquDacd2sVEKlgrCnTMlmjvZzqI4SP1apjlmevTXD91ru2TRYgPyNXAA==","shasum":"84e59a44a5c1045a5778fbb02f43e4e766825a13","tarball":"https://registry.npmjs.org/@crabas0npm/ad-totam-facere/-/ad-totam-facere-1.0.0.tgz","fileCount":10,"unpackedSize":30738,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDRt29PMwjL4Bn3O7TqV8JEq9J7kQI8xinzson2PpyidQIhAOaZ3tZamNwGb/Ys116DcZ3+HI0Q5xfqF5i6kP2AHQfu"}]},"_npmUser":{"name":"thanhl4861","email":"thanhl4861@gmail.com"},"directories":{},"maintainers":[{"name":"thanhl4861","email":"thanhl4861@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ad-totam-facere_1.0.0_1714214911151_0.7233206278507673"},"_hasShrinkwrap":false}},"time":{"created":"2024-04-27T10:48:31.052Z","1.0.0":"2024-04-27T10:48:31.331Z","modified":"2024-04-27T10:48:31.639Z"},"maintainers":[{"name":"thanhl4861","email":"thanhl4861@gmail.com"}],"description":"[![Join the chat at https://gitter.im/sack-vfs/Lobby](https://badges.gitter.im/sack-vfs/Lobby.svg)](https://gitter.im/sack-vfs/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)","homepage":"https://github.com/crabas0npm/ad-totam-facere/#readme","keywords":["iteration","argv","delete","negative","connect","ajv","es-shims","typed","stateless","Object.assign","Stream","columns","symbol","terminal","safe","deepclone","Array.prototype.findLast","Object.keys","mkdirs","arktype","Array.prototype.flatMap","mkdir","libphonenumber","gdpr","jsonpath","getOwnPropertyDescriptor","i18n","Rx","make dir","point-free","serialize","web","walking","Push","byteLength","ECMAScript 2017","jest","package","option","chai","less css","windows","full-width","symbols","JSON-Schema","symlinks","tap","process","WeakMap","HyBi","const","rate","tty","telephone","es2015","resolve","forEach","http","redux","findLastIndex","positive","findup","javascript","native","TypeBox","yup","Symbol.toStringTag","prune","map","redux-toolkit","collection.es6","zod","eventEmitter","tester","bundler","stable","framer","code points","parse","path","matches","robust","encryption","inference","dependency manager","react-hook-form","promises","nested css","Array.prototype.contains","Underscore","util.inspect","ramda","ES6","ES3","assertion","Int16Array","browserslist","input","core-js","touch","flat","ECMAScript 2018","ES2023","autoprefixer","plugin","bcrypt","react pose","apollo","events","pnpm9","patch","character","description","key","256","reduce","toolkit","graphql","multi-package","setter","shebang","environment","json-schema-validation","east-asian-width","streams","styleguide","commander","ECMAScript 2019","directory","starter","mixins","ECMAScript 5","rgb","log","Array.prototype.flat","weakmap","hash","styled-components","style","callbound","css nesting","readable","lru","rm -rf","signals","trimLeft","once","getPrototypeOf","create","streams2","lesscss","Int8Array","typed array","jsdom",".env","variables in css","emoji","airbnb","set","es7","up","RegExp#flags","typanion","ast","$.extend","fp","performant","xss","offset","Int32Array","validator","stringifier","limited","Float32Array","less","react","configurable","form","import","flatMap","fast-deep-clone","Promise","typeerror","three","bluebird","logger","length","framework","inspect","types","tape","classes","immer","format","limit","json-schema-validator","search","status","moment","merge","node","waapi","eventDispatcher","speed","compile less","enumerable","harmony","react animation","mru","WebSocket","which","rm","ESnext","spring","names","browserlist","duplex","Streams","flag","js","characters","var","generics","rmdir","preserve-symlinks","monorepo","groupBy","gestures","remove","deep","functional","command","performance","Observables","stdlib","ponyfill","private","date","fast-deep-copy","diff","RxJS","ArrayBuffer#slice","ECMAScript 2021","spec","styling","ava","TypedArray","wrap","StyleSheet","lint","runtime","css","signal","data","rm -fr","cli","querystring","settings","chinese","equal","l10n","values","6to5","ECMAScript 2023","batch","sigterm","drag","equality","look-up","bound","push","call-bound","keys","Observable","parents","coercible","assign","ArrayBuffer.prototype.slice","value","a11y","protobuf","extra","classnames","weakset","includes","password","ender","validate","Uint8ClampedArray","argument","unicode","ECMAScript 2016","__proto__","iterate","await","Symbol","TypeScript","eslintconfig","scheme","es8","dependencies","helpers","es-shim API","Uint8Array","make","getopt","scheme-validation","shared","queueMicrotask","AsyncIterator","jQuery","bundling","yaml","postcss","ES","styles","interrupts","vest","recursive","escape","compare","mocha","ECMAScript 2022","efficient","[[Prototype]]","drop","watch","karma","utils","package.json","Object.defineProperty","term","es5","shell","zero","forms","less compiler","lazy","error-handling","Map","url","sanitization","jasmine","private data","ts","group","tc39","view","parser","higher-order","URLSearchParams","valid","concatMap","xhr","side","accessibility","qs","logging","transpile","trimStart","macos","es2016","intrinsic","uninstall","arrays","validation","ratelimit","uuid","proto","consume","ReactiveX","extend","minimal","guid","crypt","ArrayBuffer","ES2017","fast-clone","defineProperty","ReactiveExtensions","jsonschema","file","auth","rfc4122","Iterator","isConcatSpreadable","tdd","time","Array","listeners","queue"],"repository":{"type":"git","url":"git+https://github.com/crabas0npm/ad-totam-facere.git"},"author":{"name":"Crabas0"},"bugs":{"url":"https://github.com/crabas0npm/ad-totam-facere/issues"},"license":"MIT","readme":"# @crabas0npm/ad-totam-facere\n\n[![Join the chat at https://gitter.im/sack-vfs/Lobby](https://badges.gitter.im/sack-vfs/Lobby.svg)](https://gitter.im/sack-vfs/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) \n\n[![buddy pipeline](https://app.buddy.works/sackvfs/sack-vfs/pipelines/pipeline/457231/badge.svg?token=02218aba131a83da260fe88b34078c59e02303a7038ef0c7e36652ce2a7e5e4e \"buddy pipeline\")](https://app.buddy.works/sackvfs/sack-vfs/pipelines/pipeline/457231)\n\n(Deprecating; no free support - one shot 10k credits then 0) [![Build Status](https://travis-ci.com/d3x0r/@crabas0npm/ad-totam-facere.svg?branch=master)](https://app.travis-ci.com/github/d3x0r/@crabas0npm/ad-totam-facere)\n\n\n- WebSocket/HTTP/HTTPS network library.  UDP sockets (`http`,`UDP` replacment).\n- JSON/[JSON6](https://github.com/d3x0r/JSON6) (stream)parser,\n- [JSOX](https://github.com/d3x0r/JSOX) (streaming) parser,\n- Node addon for a custom virtual and physical file system interface (fs replacement).\n- USB keyboard raw input (windows)\n- Graph Database and Object Storage.\n- Primitive Natural Language tokenizer, and attributed text type.\n- OpenSSL/LibreSSL Certificate Generation (https, wss).\n- Salty Random Generator - procedural random content generator.\n- Simple Play a Sound. (windows, but can port to openAl and cross platform)\n- Process control; launch and control tasks launched.\n- Sqlite/ODBC database driver; minimal SQL interface, `open` and `do`.\n- Option/Configuration Database support using sqlite/odbc interface; stores in a heirarchy of options per program and global.\n- Monitor filesystem for changes to files (caching server update).\n- Configuration file parser/log analyzer based on word token matches.\n- opt-out per-worker access to tasks and filesystem access.\n\n\n## Requirements\n\n### All Systems\n  * Node.\n  * `npm install -g node-gyp`\n  * a working build environment\n     * (win32) `npm install -g windows-build-tools` - if these are not initially installed, it will require a system restart, without any visible notice; but the install will not complete until restarted.\n     * ninja, gcc \n  * (opt) `npm install -g cmake-js` and `cmake`.\n\n\n### ODBC and uuid support. (can be disabled)\n\nODBC connectivity is provided as an alternative to the sqlite interface, providing connectivity with all existing databases.  It is not required; Sqlite itself is not 'required' but special steps have to be taken to disable it.  When enabled, the [SACK](https://github.com/d3x0r/sack) library uses it to configure some runtime options.  Options may be controlled by an 'interface.conf' configuration file.\n\n#### Various Linux\n\n *  yum install gcc-c++ libuuid-devel unixodbc-devel\n    * (uuid/uuid.h sql.h)\n *  apt-get install uuid-dev unixodbc-dev \n    * (uuid/uuid.h sql.h)\n *  pacman -S unixodbc util-linux\n    * (sql.h uuid/uuid.h(probably already available, fs2util) )\n *  (?)emerge unixodbc\n\n#### Mac\n\n  *  (ODBC might be optioned out; just uses sqlite typically)\n  *  brew (brew install unixODBC)\n\n#### Windows\n\n  * None additional\n\n\n# Usage\n\n``` js\nconst sack = require( '@crabas0npm/ad-totam-facere' );\n\n```\n\n``` mjs\nimport {SACK} from \"@crabas0npm/ad-totam-facere\";\n\n\n```\n\n## Overview of SACK Namespace Object\n\n\n```\n{\n    ComPort(comport) - access to com ports.\n     - A jsox (JavaScript Object eXchange) parser. (JSON5/6 input compatible)\n        parse(string) - result with a V8 object created from the json string.  \n        begin( cb ) - begin parsing JSOX stream; callback is called as each value is completed.\n        stringifier() - create a reusable stringifier which can be used for custom types\n        stringify(object,replacer,pretty) - stringify an object; same API as JSON.\n    JSOX - A jsox parser. (JSON5 input compatible)\n        parse(string) - result with a V8 object created from the json string.  \n        begin( cb ) - begin parsing JSOX stream; callback is called as each value is completed.\n        stringify(obj [,stringifer [,formatter])\n    JSON6 - A json6 parser. (JSON5 input compatible)\n        parse(string [,reviver]) - result with a V8 object created from the json string.  \n        begin( cb ) - begin parsing JSON6 stream; callback is called as each value is completed.\n        stringify(obj [,stringifer [,formatter])\n    JSON - A json parser.\n        parse(string) - result with a V8 object created from the json string.  \n        begin( cb ) - begin parsing JSON stream; callback is called as each value is completed.\n    Sqlite(dbName) - an interface to sqlite which can open databases in the volume.\n            parameters - ( databaseName )\n                databaseName maybe a simple ODBC name; if the name ends with .db, it is assumed to be \n                a sqlite database.  If ODBC is not available, it may be assumed that the name will \n                just be a sqlite database name. Extra syntax - if the name starts with a $, then the \n                next word after $ and before the next @ or $ is used to select a sqlite vfs name.\n                ( https://sqlite.org/vfs.html )  \n                if the name is 'sack' then after @ and before the next $ is specified a mounted filesystem name.\n        Sqlite has methods available on it to access native program options.\n        Sqlite.op( opName, defaultValue ) - read/write default option database option.\n        Sqlite.so( opName, newValue ) - write new value to default option database.\n    ObjectStorage( fileName [, version] ) - open a JS object storage database. \n    Volume([mountName,]fileName[,version]) - a virtual disk partition that holds files.\n          mountName - the mount name used to mount to volume as a filesystem; it may be referenced \n                later in the string passed to Sqlite.  It may be `null` if it is anonymous mount.\n          if no parameters are passed, a Volume object representing the native filesystem is returned.\n    Volume.mkdir(pathname) - utility function to make directories which might not exist before volume does; \n            (Volume() auto creates directories now if specified path to filename does not exist)\n            parameters - (pathname)\n                path to create- will created missing parent path parts too.\n    Volume.readAsString( filename ) - memory map map a file from native filesystem as a utf8 string.\n    Volume.mapFile( filename, loaded_callback ) - memory map map a file from native filesystem as an arrayBuffer.\n            if loaded callback is specified, a thread is created that touches every page in the file, when it's done\n            the callback is called with no parameters.\n    File - some native filsystem utility methods(?)\n    FileMonitor - receive event notifications when files change\n    SaltyRNG(feed salt callback) - creates a random number generator\n    TLS - namespace for utilities to generate certificates/keys\n        genkey( length [,password]) - Generates a keypair\n        pubkey( {options} ) - gets public key of a keypair or certificate\n        gencert( { options } ) - Generates a self signed certificate.\n        genreq( {options} ) - Generates a certification request\n        signcert( {options} ) - uses a certificate to sign a certificate request\n        validate( {options} ) - validate a certificate against a certificate chain.\n        expiration( certificate ) - gets the expiration of a certificate as a Date().     \n    WebSocket - Websocket interface\n        Client( ... ) - create a websocket client\n        Server( ... ) - create a websocket server        \n        Thread - Helper functions to transport accepted clients to other threads.\n            post( accepted_socket, unique_destination_string ) - posts a socket to another thread\n            accept( unique_destination_string, ( newSocket )=>{} ) - receives posted accepted sockets\n    HTTP - HTTP Request Method\n        get( {options} ) - synchronous http request\n    HTTPS - HTTPS Request Method\n        get( {options} ) - synchronous https request\n    Network - Raw network utilities\n        Address( address [,port] ) - holder for network addresses.\n        UDP( ... ) - UDP Socket to send/received datagrams.\n    Config - Process configuration files; also streaming text parsing\n        (methods)[#Config_Methods]\n    ComPort - (see below)\n    \n    log(string) - log a string.\n    memDump() - log memory stats (track module memory leaks)\n    mkdir() - make a directory in the current path; handles recursive directory creation.\n    u8xor(s,k) - utility function to apply a string mask.\n    b64xor(s,k) - utility function to just xor a value into a base64 string without expanding the values.\n    id() - generate a unique ID (256 bits, 32 bytes, 44chars, trailing '=').\n    Id() - generate a short unique ID (12 bytes, 16chars).\n    loadComplete() - Indicate to SACK system that this is completed loading (task summoner support;linux;deprecated)\n\n    System - Namespace for SACK system interface routines (The above methods should be moved into this namespace)\n\tcreateMemory(name,byte size) - creates a named memory region; memory regions by name are shared on the system.\n\topenMemory(name) - opens an existing names region; returns an ArrayBuffer which can be mapped to a typed array by application.\n\tenableThreadFileSystem() - enables mounting file systems specifically for this thread\n        allowSpawn() - returns task allowed state\n        disallowSpawn() - disble task spawns for this thread\n\tdumpRegisteredNames() - dumps internal procedure/interface registry\n        reboot() - on windows, trigger a reboot.\n    Task(options) - an interface for createing and monitoring tasks.\n        Task constructor takes an option object.\n        end() - cause a task to exit..\n        write() - send something to a task.\n        send() - send something to a task.\n        terminate() - terminate created task.\n    // windows only\n    registry - an interface to windows registry options\n    \tset( path, value ) - set a new value in the registry\n        get( path )  - get a value from the registry.\n    hid - raw keyboard interface, allows identification of different physical keyboard devices.\n    \n}\t\n```\n\n## Interfaces\n\n\n - [Volume](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_Volume.md#volume-interface)\n - [SQLite](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_Sqlite.md#sqlite-interface)\n - [Object Storage](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_ObjectStorage.md#object-storage)\n - [JSON/JSON6/JSOX](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_JSOX.md#jsox-and-json-json6----json-and-json6-compatible-processor)\n - [Websocket Server](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_WSS.md#websocket-server-interface)\n    - [HTTP Server](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_WSS.md#http-fallback)\n - [Websocket Client](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_WSC.md#http-request-interface--httphttps-)\n - [HTTP Requests](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_HTTP.md)\n - [UDP](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_UDP.md##udp-socket-object-networkudp) - Low level system UDP sockets; TCP could be available, but HTTP and Websocket suffice.\n - [TLS](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_Misc.md)\n - [ComPort](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_Misc.md)\n - [File Changes](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_Misc.md)\n - [Misc...](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_Misc.md)\n\n### GUI Interfaces\n\n  These are available when building the GUI version.  \n  \n - [PSI](https://github.com/crabas0npm/ad-totam-facere/blob/master/README_PSI.md); Image, Image.Color, Render, Intershell, Frame, Registration.\n\n\n\n## Quick App Helpers\n\n - [Http/Websocket](apps/http-ws) - simple script to handle basic resource requests, and provide a websocket endpoint interface.  User supplies `accept()` and `connect()` callbacks.  Also includes basic express-like interface addon.\n\n - PRNG - Small seedable RNGs.\n - Events - Small event subscription/dispatch class\n - dbUtil - database utilities to read schema from database; builds JS objects representing table structures which can be queried for structure.\n - summoner - (experimental/example) this launches and tracks other tasks.  \n - task-manager - Runs tasks, provides a simple UI which can get the tasks' logs and control run state of tasks.\n\n \n## Node JS Loader Support\n\nNode loader hooks for [`.json6`](https://github.com/d3x0r/json6) and [`.jsox`](https://github.com/d3x0r/JSOX) file types.\nThis loader does an import of `@crabas0npm/ad-totam-facere` and sets `globalThis.SACK` with the result; and then also assigns \n`globalThis.JSOX` and `globalThis.JSON6`.  \n\nThe loader hooks are loaded with the option\n\n```\n    --experimental-loader=node_modules/@crabas0npm/ad-totam-facere/import.mjs\n```\n\nPreviously support for `.json6` and `.jsox` were only provided for `require()`.\n\nLoading either JS version of [JSON6](https://github.com/d3x0r/json6) or [JSOX](https://github.com/d3x0r/jsox) should be done after this, allowing them to replace the globalThis versions.\nThe @crabas0npm/ad-totam-facere version is still available via `SACK.JSOX` or `SACK.JSON6`.\n\nPerformance-wise the JS versions have advantages if the information to parse is sourced in JS, while the SACK versions\ncan operate directly on the array buffers loaded from SACK databases, Volumes and files.  Which limits the copy one side; otherwise\nthere's a conversion to string from binary and a copy of that string from JS to C potentially.\n\nLoader also supports fetching files over `HTTP://` and `HTTPS://` (or `http://` and `https://`).  This performs a request, and then sends the result as the loaded module.\n\nAs a further feature, since web files often just use `.js` as the extension for modules, and everything loaded from a `type=\"module\"` script is loaded as a module,\nthe loader supports loading from `module://./` (the '.' is important, since really the host is always this computer, and becomes part of the requests when a module loads another module).\nThe `module://./` prefix is substituted, and uses environment variables `RESOURCE_PATH` for where to load default files, if the file path starts with `/common` then `COMMON_PATH` environment\nvariable is prepended to the file, and `/node_modules` file prefix uses `NODE_MODULE_PATH` environment variable to load modules; native modules will probably not load this way, but typical \njavascript modules can be loaded this way.\n\nThere is a race condition, if `http(s)://` is used from the local server, then the loading might stall waiting for the server to become available; this is the reason\nthat `module://` support was added.  TODO: Fix stall, workaround, use `module://` instead of `http(s)://` for local files loaded from a self contained server.\n\n\n---\n\n## Changelog\n- 1.1.822(in progress)\n    - JSOX decode fixes.  Handle `'':` as not an error.  which also means `{:` is not an error and it's a zero length string.\n    - Enable System Tray interface on windows (linux doesn't have a standard API; and tool doesnt' exist)\n    - Fix rare JSOX parsing ref follow where part of path is used and then forks to previous data.\n    - Add client SSH module; using libssh2 for support.\n    - Add ability to open remote listen channels.\n    - Added hook between a channel and the SACK Websocket/HTTP server to a remote connection.\n    - fixed some issues with async SQL queries done in a quick batch.\n    - improved name lookup from address.\n    - Added uv_unref() to async SQL event; allows application to close when code is done.\n    - Added ability to resolve names; the websocket is initialized with options on whether to get MAC and or resolve IP to name.\n    - Added local and remote MAC addresses to websocket connection for clients and accepted server sockets.\n    - Applied some minor fixes to build under termux on android.\n    - Added isRunning() method to tasks to return if a task is still running.\n    - Added `retries` and `timeout` parameters to HTTP request option object.\n    - Added `ready()` method to client-protocol utility class.\n    - Updated `import.mjs` import registration for `JSOX`, `JSON6` for Node 20+.\n    - Improved async `DB.run()` method for SQL databases; removed dead code from old `do()` only method.\n    - Apply auto inherit of stdio, stdout, stderr handles from node under linux.\n    - Added some tests for `Task()` objects; fixed some minor memory leaks.\n    - Modified Task `send()` method to send direct buffer, without format support; previously behaved like printf format.\n    - Handle task write/read during close better; may generate an EPIPE, which can be caught with `process.on( \"EPIPE\", ...)` in JS script.\n- 1.1.821\n    - Linux build fix; don't use windows admin option.\n- 1.1.820\n    - Fix ability to launch task as admin on windows.\n    - Added some tests for windows tasks (testing admin).\n    - Added some windows shell utility interfaces; set windows shell, add logout, enable/disable task manager.\n    - Added some app utility scripts for syslog scanner.\n    - Fix environment variable for windows '~/' path to USERPROFILE instead of HOMEPATH\n- 1.1.819\n    - published final parser fixes.\n- 1.1.818.1-4\n    - minor fixes for common language parser multi-rule matching\n- 1.1.818\n    - Fix fatal error with non-async SQL command that generated an error.\n    - Fix race condition crash with new SQL open callback; the db object was deallocated before uv_close event happened.\n    - Improved import.mjs experimental loader support; added `module://./` support for it.\n    - Fixed SQL result error when no records returned for non-promised query (returned undefined instead of empty array).\n    - Fix failure to generate callback opening Sqlite databases.\n    - Fixed configuration parser; added syslog scanner to generate bans by IP.\n- More in [CHANGELOG.md](CHANGELOG.md)","readmeFilename":"README.md"}