From edcee33780cb38b5a1dfddc82ffe7c3a9c3a6248 Mon Sep 17 00:00:00 2001 From: Zaid Abdulla Date: Thu, 7 Jan 2021 01:25:06 -0800 Subject: [PATCH] Apply Prettier to config and markdown files --- .eslintignore | 2 - .eslintrc.json | 21 +++++-- .gitignore | 2 - .npmignore | 25 -------- .prettierignore | 2 + CHANGELOG.md | 143 +++++++++++++++++++++++---------------------- CONTRIBUTING.md | 19 +++--- README.md | 17 +++--- ava.config.js | 5 +- docs/ext-sample.js | 33 ++++++----- package.json | 2 +- tsconfig.json | 16 +++-- 12 files changed, 136 insertions(+), 151 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .npmignore create mode 100644 .prettierignore diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 95ef3e6..0000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -!/bin/.*.ts -!/tools/.*.ts \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 997e246..bdf85c3 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,19 +8,30 @@ "project": "./tsconfig.json" }, "plugins": ["@typescript-eslint"], - "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "prettier/@typescript-eslint"], + "extends": [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + "prettier/@typescript-eslint" + ], "rules": { "no-shadow": ["error", { "allow": ["err"] }], "handle-callback-err": "error", "prefer-arrow-callback": "error", "curly": ["error", "multi-or-nest", "consistent"], "no-buffer-constructor": "error", - "prefer-const": ["error", {"destructuring": "all"}], - "eqeqeq": ["error", "always", {"null": "ignore"}], + "prefer-const": ["error", { "destructuring": "all" }], + "eqeqeq": ["error", "always", { "null": "ignore" }], "no-return-await": "error", "@typescript-eslint/no-explicit-any": 0, - "@typescript-eslint/no-use-before-define": ["error", { "functions": false }], - "@typescript-eslint/explicit-function-return-type": ["error", { "allowExpressions": true }], + "@typescript-eslint/no-use-before-define": [ + "error", + { "functions": false } + ], + "@typescript-eslint/explicit-function-return-type": [ + "error", + { "allowExpressions": true } + ], "@typescript-eslint/no-floating-promises": "error", "require-atomic-updates": 0, "no-prototype-builtins": 0 diff --git a/.gitignore b/.gitignore index adfc721..87b41df 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ *~ node_modules dist -bin/.*.ts -tools/.*.ts docs/_build diff --git a/.npmignore b/.npmignore deleted file mode 100644 index 6474b2f..0000000 --- a/.npmignore +++ /dev/null @@ -1,25 +0,0 @@ -*~ -.npmignore - -config/config.json -config/cwmp.key -config/cwmp.crt -config/cwmp.ca-bundle -config/nbi.key -config/nbi.crt -config/nbi.ca-bundle -config/fs.key -config/fs.crt -config/fs.ca-bundle -config/ext - -debug/* -!debug/.gitkeep - -dist -.eslintrc.json -.eslintignore -ava.config.js -tsconfig.json -bin/.* -tools/.* diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..cf495e2 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +dist +npm-shrinkwrap.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fbbf1f..ef0cd7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,18 +3,18 @@ ## 1.2.3 (2020-10-26) - New config option 'cwmp.skipWritableCheck' for when some CPEs incorrectly -report writable parameters as non-writable. When set to true, the scripts will -no longer respect the 'writable' attribute of the CPE parameters and will send -a SetParamteerValues, AddObject, or DeleteObject request anyway. + report writable parameters as non-writable. When set to true, the scripts will + no longer respect the 'writable' attribute of the CPE parameters and will send + a SetParamteerValues, AddObject, or DeleteObject request anyway. - Tags no longer restrict what characters are allowed. Any character other than -alphanumeric characters, hyphen, or underscore is now encoded in the data -model (i.e. Tags.\) using its hex value preceded by "0x". + alphanumeric characters, hyphen, or underscore is now encoded in the data + model (i.e. Tags.\) using its hex value preceded by "0x". - Ask for a confirmation before closing a pop-up dialog with unsaved changes. - Better XML validation to avoid crashes caused by invalid CPE requests. - Fix confusing 404 error message when the user attempts to modify a resource -when they don't have the necessary permissions. + when they don't have the necessary permissions. - Fix a rare issue where genieacs-cwmp stops accepting new connections after -running for a few weeks. + running for a few weeks. - Fix exception when IS NULL operator is used in certain situations. ## 1.2.2 (2020-10-03) @@ -24,81 +24,80 @@ running for a few weeks. - Fix exception that can happen and persist after a Download request. - Fix validation bug preventing running refreshObject task on data model root. - Fix invalid arguments fault in refresh preset configuration when upgrading -from v1.1. + from v1.1. ## 1.2.1 (2020-09-08) - Fix bug causing faults to not be displayed in the UI. - Fix bug where deleting objects does not get reflected immediately in the UI. - Improve conversion between filters written in the expression format and -MongoDB queries. There should now be fewer edge cases where the two are not -equisatisfiable. + MongoDB queries. There should now be fewer edge cases where the two are not + equisatisfiable. ## 1.2.0 (2020-09-01) - Support GetParameterAttributes and SetParameterAttributes TR-069 methods. - Support CASE statement and COALESCE function in expressions. - Provision arguments can now be a list of expressions that are dynamically -evaluated. + evaluated. - Support Forwarded HTTP header to display in the logs the correct IP of CPEs -behind a reverse proxy. Must be configured using FORWARDED_HEADER option. + behind a reverse proxy. Must be configured using FORWARDED_HEADER option. - Config expressions can now access all available device parameters, not only -serial number, product class, and OUI. -- Use relative URLs throughout the UI to allow serving from a subdirectory -using a reverse proxy. + serial number, product class, and OUI. +- Use relative URLs throughout the UI to allow serving from a subdirectory using + a reverse proxy. - Make Date.parse() and Date.UTC() available to provision scripts. - libxmljs has been entirely removed in favor of our bespoke XML parser. -- Removed the config option CWMP_KEEP_ALIVE_TIMEOUT. SESSION_TIMEOUT is now -used to determine the TCP connection timeout. -- The all-parameters component now limits the number of parameters displayed -for better performance. +- Removed the config option CWMP_KEEP_ALIVE_TIMEOUT. SESSION_TIMEOUT is now used + to determine the TCP connection timeout. +- The all-parameters component now limits the number of parameters displayed for + better performance. - The process genieacs-cwmp is now much less likely to throw exceptions as a -result of invalid requests from CPE. + result of invalid requests from CPE. - A large number of bug fixes and stability improvements. ## 1.2.0-beta.0 (2019-07-30) - A brand new UI superseding genieacs-gui. - New initialization wizard on first run. -- New expression/query language used in search filters and preset -preconditions. +- New expression/query language used in search filters and preset preconditions. - CPE -> ACS authentication is now supported. - New config option (CWMP_KEEP_ALIVE_TIMEOUT) to specify how long to wait for a -reply from the CPE before closing the TCP connection. + reply from the CPE before closing the TCP connection. - Debug logging has been reimplemented utilizing YAML format for logs. - Handle 9005 faults (Invalid Parameter Name) gracefully by attempting to -rediscover the path of the missing parameter recursively. + rediscover the path of the missing parameter recursively. - declare() statements not followed by an explicit commit() are now deferred -until all currently active scripts have been executed. + until all currently active scripts have been executed. - FS_HOSTNAME now defaults to the server's hostname or IP. - The API now validates the structure of task objects before saving. - New XML parser implementation for better performance. You can revert to the -old parser by enabling the config option XML_LIBXMLJS. Requires Node.js v11 or -v10. + old parser by enabling the config option XML_LIBXMLJS. Requires Node.js v11 or + v10. - Performance optimizations. While performance has improved for the majority of -use cases, there may be situations where performance has degraded. It's -recommended to revisit your hardware requirements. + use cases, there may be situations where performance has degraded. It's + recommended to revisit your hardware requirements. - Connection request authentication no longer uses 'auth.js' file. Instead, the -connection request authentication behavior can now be customized using an -'expression'. + connection request authentication behavior can now be customized using an + 'expression'. - The config file (config.json) has been deprecated. System configuration (e.g. -listen ports, worker count) are now recommended to be passed as environment. -variables. Other general configuration options are stored in the database so as -to not require service restart for changes to take effect. + listen ports, worker count) are now recommended to be passed as environment. + variables. Other general configuration options are stored in the database so + as to not require service restart for changes to take effect. - Optional redis dependency has been removed completely. - Tags now allow only alphanumeric characters and underscore. - Supported versions of NodeJs and MongoDB are 10.x and up and 2.6 and up -respectively. + respectively. ## 1.1.3 (2018-10-23) - New config option (MAX_COMMIT_ITERATIONS) to avoid max commit iterations -faults for more complex scripts. + faults for more complex scripts. - Support base64 and hexBinary parameter types. - Strict parsing of number values in queries (e.g. "123abc" no longer accepted -as 123). + as 123). - Mixing $ne and $not operators is not allowed. Now it throws an error instead -of returning incorrect results. + of returning incorrect results. - When a task expires, any associated fault is also deleted. - API now accepts 'timeout' argument when posting a task. - A number of stability fixes. @@ -108,66 +107,68 @@ of returning incorrect results. - A large number of bug fixes as well as stability and performance improvements. - Three security vulnerabilities disclosed by Maximilian Hils have been patched. - New config option UDP_CONNECTION_REQUEST_PORT to specify binding port for UDP -connection requests. + connection requests. - New config option DATETIME_MILLISECONDS to strip milliseconds from dateTime -values. + values. - New config option BOOLEAN_LITERAL to use 1/0 or true/false for boolean values. - Parameter values that cannot be parsed according to the reported type now show -a warning message. + a warning message. - Virtual parameter scripts now use the variable 'args' instead of the special -'TIMESTAMPS' and 'VALUES' variables. The content of the args array is: {declare -timestamps}, {declare values}, {current timestamps}, {current values}. + 'TIMESTAMPS' and 'VALUES' variables. The content of the args array is: + {declare timestamps}, {declare values}, {current timestamps}, {current + values}. - Virtual parameter value types are now inferred from the JavaScript type if the -returned value attribute is not a value-type pair. + returned value attribute is not a value-type pair. - Show a fault when a virtual parameter script doesn't return the required -attributes. + attributes. - Redis is now optional (and disabled by default), reducing the complexity of -scalable deployments. + scalable deployments. - Better detection of cyclical presets resulting in fewer faults for complex -provisioning scripts. + provisioning scripts. - Math.random() is now deterministic on per-device basis. A function has been -added to allow specifying a seed value (e.g. Math.random.seed(Date.now())). + added to allow specifying a seed value (e.g. Math.random.seed(Date.now())). - Overload spikes are now handled gracefully by refusing to accept new sessions -temporarily when under abnormal load. + temporarily when under abnormal load. - Added log messages for session timeouts, connection drops, and XML parsing -errors. + errors. - Date.now() now takes an optional argument to specify "time steps" (in -milliseconds). This can be used to ensure a group of parameters are all -refreshed at the same time intervals. + milliseconds). This can be used to ensure a group of parameters are all + refreshed at the same time intervals. - Only the non-default configuration options are now logged at process start. - Faults caused by errors from extensions now show a cleaner stack trace. - Exit main process if there are too many worker crashes (e.g. when DB is down). - Updated dependencies and included a lockfile to ensure installations get the -exact dependencies it was tested against. + exact dependencies it was tested against. ## 1.1.1 (2017-03-23) - Avoid crashing when connection request credentials are missing. - Show a warning instead of crashing when failing to parse parameter values -according to the expected value type. + according to the expected value type. - Add missing "Registered" event. - Fix bug where in certain cases many more instances than declared are created. - Fix parameter discovery bug when declared path timestamp is 1 or is not set. - Fix preset precondition failing when testing against datetime parameters and -certain other parameters like \_deviceId.\_ProductClass. + certain other parameters like \_deviceId.\_ProductClass. ## 1.1.0 (2017-03-10) - Provisions enable implementing dynamic device configuration or complex device -provisioning work flow using arbitrary scripts. + provisioning work flow using arbitrary scripts. - Virtual parameters are user-defined parameters whose values are evaluated from -a custom script. + a custom script. - Extensions are sandboxed Node.js scripts that are accessible from provision -and virtual parameter scripts to facilitate integration with external entities. -- Support for UDP/STUN based connection requests for reaching devices behind -NAT (TR-069 Annex G). + and virtual parameter scripts to facilitate integration with external + entities. +- Support for UDP/STUN based connection requests for reaching devices behind NAT + (TR-069 Annex G). - Presets can now be scheduled using a cron-like expression. - Presets can now be tied to specific device events (e.g. boot). -- Presets precondition queries no longer support "$or" or other MongoDB logical -operators. +- Presets precondition queries no longer support "\$or" or other MongoDB logical + operators. - Faults are no longer a part of tasks but are now first class objects. - Presets are now assigned to channels. A fault in one channel only blocks -presets in that channel. + presets in that channel. - New API CRUD functions for provisions, virtual parameters, and faults. - New config options for XML output. - API responses now include "GenieACS-Version" header. @@ -176,19 +177,19 @@ presets in that channel. - Supported Node.js versions are 6.x and 7.x. - Supported MongoDB versions are 2.6 through 3.4. - Expect performance differences due to major under the hood changes. Some -operations are faster and some are slower. Overall performance is improved. + operations are faster and some are slower. Overall performance is improved. - GenieACS will no longer fetch the entire device data model upon first contact -but will instead only fetch the parameters it needs to fulfill the presets. + but will instead only fetch the parameters it needs to fulfill the presets. - Logs have been overhauled and split into two streams: process log (stderr) and -access log (stdout). Also added config options to dump logs to files rather than -standard streams. + access log (stdout). Also added config options to dump logs to files rather + than standard streams. - Connection request authentication credentials are picked up from the device -data model if available. config/auth.js is still supported as a fallback and now -supports an optional callback argument. + data model if available. config/auth.js is still supported as a fallback and + now supports an optional callback argument. - Custom commands have been removed. Use virtual parameters and/or extensions. - Aliases and value normalizers (config/parameters.json) have been removed. Use -virtual parameters. + virtual parameters. - The API /devices//preset has been removed. - Rarely used RequestDownload method no longer supported. - The TR-069 client simulator has moved to its own repo at -https://github.com/zaidka/genieacs-sim + https://github.com/zaidka/genieacs-sim diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c8f44e..7161d13 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,8 +5,8 @@ tracker is strictly for bug reports. # Issues -We use GitHub issues to track bugs. Please ensure your bug description is -clear and has sufficient instructions to be able to reproduce the issue. +We use GitHub issues to track bugs. Please ensure your bug description is clear +and has sufficient instructions to be able to reproduce the issue. If you face interoperability issues with your CPE, more often than not it's a device related issue. Please consult the [forum] before submitting an Issue. @@ -26,13 +26,14 @@ By submitting a pull request to this repository, you acknowledge that, while maintaining copyright, you grant Zaid Abdulla a perpetual, worldwide, non- exclusive, no-charge, royalty-free, irrevocable license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and -distribute your contributions and such derivative works under the AGPLv3 -license or any other license terms, including, but not limited to, proprietary -or commercial license terms. +distribute your contributions and such derivative works under the AGPLv3 license +or any other license terms, including, but not limited to, proprietary or +commercial license terms. -You confirm that you own or have rights to distribute and sublicense the -source code contained therein, and that your content does not infringe upon -the intellectual property rights of a third party. +You confirm that you own or have rights to distribute and sublicense the source +code contained therein, and that your content does not infringe upon the +intellectual property rights of a third party. -[commit-guidelines]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html +[commit-guidelines]: + http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html [forum]: https://forum.genieacs.com diff --git a/README.md b/README.md index 1541acb..feb8ebb 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Install GenieACS from NPM: sudo npm install -g --unsafe-perm genieacs To build from source instead, clone this repo or download the source archive -then *cd* into the source directory then run: +then _cd_ into the source directory then run: npm install npm run build @@ -30,8 +30,8 @@ source): ### genieacs-cwmp -This is the service that the CPEs will communicate with. It listens on port -7547 by default. Configure the ACS URL in your devices accordingly. +This is the service that the CPEs will communicate with. It listens on port 7547 +by default. Configure the ACS URL in your devices accordingly. You may optionally use [genieacs-sim](https://github.com/genieacs/genieacs-sim) as a dummy TR-069 simulator if you don't have a CPE at hand. @@ -50,7 +50,7 @@ such. It listens on port 7567 by default. ### genieacs-ui This serves the web based user interface. It listens on port 3000 by default. -You must pass *--ui-jwt-secret* argument to supply the secret key used for +You must pass _--ui-jwt-secret_ argument to supply the secret key used for signing browser cookies: genieacs-ui --ui-jwt-secret secret @@ -64,14 +64,13 @@ a complete installation guide for production deployments. ## Support -The [forum](https://forum.genieacs.com) is a good place to get guidance and -help from the community. Head on over and join the conversation! +The [forum](https://forum.genieacs.com) is a good place to get guidance and help +from the community. Head on over and join the conversation! For commercial support options, please visit [genieacs.com](https://genieacs.com/support/). ## License -Copyright 2013-2020 GenieACS Inc. GenieACS is released under the [AGPLv3 -license -terms](https://raw.githubusercontent.com/genieacs/genieacs/master/LICENSE). +Copyright 2013-2020 GenieACS Inc. GenieACS is released under the +[AGPLv3 license terms](https://raw.githubusercontent.com/genieacs/genieacs/master/LICENSE). diff --git a/ava.config.js b/ava.config.js index d809dce..9831f64 100644 --- a/ava.config.js +++ b/ava.config.js @@ -1,5 +1,4 @@ export default { - "extensions": ["ts"], - "require": ["esm", "ts-node/register/transpile-only"] + extensions: ["ts"], + require: ["esm", "ts-node/register/transpile-only"], }; - diff --git a/docs/ext-sample.js b/docs/ext-sample.js index 9386014..a4b0885 100644 --- a/docs/ext-sample.js +++ b/docs/ext-sample.js @@ -10,25 +10,28 @@ let cache = null; let cacheExpire = 0; function latlong(args, callback) { - if (Date.now() < cacheExpire) - return callback(null, cache); + if (Date.now() < cacheExpire) return callback(null, cache); - http.get("http://api.open-notify.org/iss-now.json", (res) => { - if (res.statusCode !== 200) - return callback(new Error(`Request failed (status code: ${res.statusCode})`)); + http + .get("http://api.open-notify.org/iss-now.json", (res) => { + if (res.statusCode !== 200) + return callback( + new Error(`Request failed (status code: ${res.statusCode})`) + ); - let rawData = ""; - res.on("data", (chunk) => rawData += chunk); + let rawData = ""; + res.on("data", (chunk) => (rawData += chunk)); - res.on("end", () => { - let pos = JSON.parse(rawData)["iss_position"]; - cache = [+pos["latitude"], +pos["longitude"]]; - cacheExpire = Date.now() + 10000; - callback(null, cache); + res.on("end", () => { + let pos = JSON.parse(rawData)["iss_position"]; + cache = [+pos["latitude"], +pos["longitude"]]; + cacheExpire = Date.now() + 10000; + callback(null, cache); + }); + }) + .on("error", (err) => { + callback(err); }); - }).on("error", (err) => { - callback(err); - }); } exports.latlong = latlong; diff --git a/package.json b/package.json index 3170831..c8fa757 100644 --- a/package.json +++ b/package.json @@ -80,7 +80,7 @@ "scripts": { "test": "ava --verbose --color", "lint-eslint": "eslint --fix \"bin/*.ts\" \"lib/**/*.ts\" \"ui/**/*.ts\" \"test/**/*.ts\" \"build/**/*.ts\" \"tools/*.ts\"", - "lint-prettier": "prettier --parser typescript --write \"bin/**/*.ts\" \"lib/**/*.ts\" \"ui/**/*.ts\" \"test/**/*.ts\" \"build/**/*.ts\" \"tools/**/*.ts\"", + "lint-prettier": "prettier --prose-wrap always --write .", "lint-tsc": "tsc --noEmit", "lint": "npm run lint-eslint && npm run lint-prettier && npm run lint-tsc", "build": "node -r esm -r ts-node/register/transpile-only build/build" diff --git a/tsconfig.json b/tsconfig.json index 0df50f3..af20786 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,6 @@ { "compilerOptions": { - "lib": [ - "esnext", "dom" - ], + "lib": ["esnext", "dom"], "module": "esnext", "moduleResolution": "node", "target": "esnext", @@ -14,11 +12,11 @@ "allowJs": true }, "include": [ - "./bin/*.ts", - "./lib/**/*", - "./ui/**/*", - "./test/**/*", - "./build/**/*", - "./tools/*.ts" + "./bin/*.ts", + "./lib/**/*", + "./ui/**/*", + "./test/**/*", + "./build/**/*", + "./tools/*.ts" ] }