diff --git a/.nvmrc b/.nvmrc index 805b5a4..ee09fac 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v20.9.0 +v20.11.1 diff --git a/2FAS - Two factor authentication/2FAS - Two Factor Authentication.xcodeproj/project.pbxproj b/2FAS - Two factor authentication/2FAS - Two Factor Authentication.xcodeproj/project.pbxproj index f92d139..35d657a 100644 --- a/2FAS - Two factor authentication/2FAS - Two Factor Authentication.xcodeproj/project.pbxproj +++ b/2FAS - Two factor authentication/2FAS - Two Factor Authentication.xcodeproj/project.pbxproj @@ -431,7 +431,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 54; + CURRENT_PROJECT_VERSION = 57; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ZY8UR5ADFW; ENABLE_HARDENED_RUNTIME = YES; @@ -445,7 +445,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.6.4; + MARKETING_VERSION = 1.7.0; OTHER_LDFLAGS = ( "-framework", SafariServices, @@ -467,7 +467,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 54; + CURRENT_PROJECT_VERSION = 57; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ZY8UR5ADFW; ENABLE_HARDENED_RUNTIME = YES; @@ -481,7 +481,7 @@ "@executable_path/../../../../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.6.4; + MARKETING_VERSION = 1.7.0; OTHER_LDFLAGS = ( "-framework", SafariServices, @@ -505,7 +505,7 @@ CODE_SIGN_ENTITLEMENTS = "macOS (App)/2FAS - Two factor authentication.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 54; + CURRENT_PROJECT_VERSION = 57; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ZY8UR5ADFW; ENABLE_HARDENED_RUNTIME = YES; @@ -520,7 +520,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.6.4; + MARKETING_VERSION = 1.7.0; OTHER_LDFLAGS = ( "-framework", SafariServices, @@ -546,7 +546,7 @@ CODE_SIGN_IDENTITY = "Apple Distribution"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 54; + CURRENT_PROJECT_VERSION = 57; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = ZY8UR5ADFW; ENABLE_HARDENED_RUNTIME = YES; @@ -561,7 +561,7 @@ "@executable_path/../Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = 1.6.4; + MARKETING_VERSION = 1.7.0; OTHER_LDFLAGS = ( "-framework", SafariServices, diff --git a/logsCodes.txt b/logsCodes.txt index 84e0e35..edffcf2 100644 --- a/logsCodes.txt +++ b/logsCodes.txt @@ -49,13 +49,13 @@ 16 - inputFocus 17 - contentOnMessage 18 - neverShowNotificationInfo -*19 - openOptionsPage [redundant] -39 - removedNodes - loadFromLocalStorage -40 - removedNodes - saveToLocalStorage -41 - hiddenNodes - loadFromLocalStorage -42 - hiddenNodes - saveToLocalStorage -43 - pageLoadComplete - loadFromLocalStorage -44 - pageLoadComplete - saveToLocalStorage +*19 - openOptionsPage [deprecated] +*39 - removedNodes - loadFromLocalStorage [deprecated] +*40 - removedNodes - saveToLocalStorage [deprecated] +*41 - hiddenNodes - loadFromLocalStorage [deprecated] +*42 - hiddenNodes - saveToLocalStorage [deprecated] +*43 - pageLoadComplete - loadFromLocalStorage [deprecated] +*44 - pageLoadComplete - saveToLocalStorage [deprecated] 46 - clickSubmit - loadFromLocalStorage // INSTALL PAGE diff --git a/open-source-licenses.html b/open-source-licenses.html index d72d130..5b414bd 100644 --- a/open-source-licenses.html +++ b/open-source-licenses.html @@ -1798,3 +1798,153 @@ th, td {
departmentrelated tonamelicense periodmaterial / not materiallicense typelinkremote versioninstalled versiondefined versionauthor
kesslerstuff@babel/runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.07.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuffqrcodeperpetualmaterialMITgit://github.com/soldair/node-qrcode.git1.5.31.5.3^1.5.3Ryan Day
kesslerstuffuuidperpetualmaterialMITgit+https://github.com/uuidjs/uuid.git9.0.19.0.1^9.0.0n/a
kesslerstuff@babel/coreperpetualmaterialMIThttps://github.com/babel/babel.git7.24.07.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/eslint-parserperpetualmaterialMIThttps://github.com/babel/babel.git7.23.107.23.10^7.23.10The Babel Team (https://babel.dev/team)
kesslerstuff@babel/plugin-transform-runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.07.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/preset-envperpetualmaterialMIThttps://github.com/babel/babel.git7.24.07.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/registerperpetualmaterialMIThttps://github.com/babel/babel.git7.23.77.23.7^7.22.15The Babel Team (https://babel.dev/team)
kesslerstuffautoprefixerperpetualmaterialMITgit+https://github.com/postcss/autoprefixer.git10.4.1810.4.18^10.4.18Andrey Sitnik
kesslerstuffbabel-loaderperpetualmaterialMIThttps://github.com/babel/babel-loader.git9.1.39.1.3^9.1.3Luis Couto
kesslerstuffbabel-plugin-transform-minify-booleansperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-plugin-transform-remove-debuggerperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-preset-minifyperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-preset-minify0.5.20.5.2^0.5.2amasad
kesslerstuffbrowserslistperpetualmaterialMITgit+https://github.com/browserslist/browserslist.git4.23.04.23.0^4.23.0Andrey Sitnik
kesslerstuffcopy-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/copy-webpack-plugin.git12.0.212.0.2^12.0.2Len Boyette
kesslerstuffcross-envperpetualmaterialMITgit+https://github.com/kentcdodds/cross-env.git7.0.37.0.3^7.0.3Kent C. Dodds (https://kentcdodds.com)
kesslerstuffcrypto-browserifyperpetualmaterialMITgit://github.com/crypto-browserify/crypto-browserify.git3.12.03.12.0^3.12.0Dominic Tarr (dominictarr.com)
kesslerstuffcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/css-loader.git6.10.06.10.0^6.10.0Tobias Koppers @sokra
kesslerstuffcss-minimizer-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git6.0.06.0.0^6.0.0Loann Neveu
kesslerstuffdotenvperpetualmaterialBSD-2-Clausegit://github.com/motdotla/dotenv.git16.4.516.4.5^16.4.5n/a
kesslerstuffdotenv-webpackperpetualmaterialMITgit+https://github.com/mrsteele/dotenv-webpack.git8.0.18.0.1^8.0.1Matt Steele (http://omnionline.us/)
kesslerstuffeslintperpetualmaterialMITgit+https://github.com/eslint/eslint.git8.57.08.57.08.57.0Nicholas C. Zakas
kesslerstuffeslint-config-standardperpetualmaterialMITgit://github.com/standard/eslint-config-standard.git17.1.017.1.0^17.1.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-friendly-formatterperpetualmaterialMITgit+https://github.com/royriojas/eslint-friendly-formatter.git4.0.14.0.1^4.0.1Roy Riojas http://royriojas.com
kesslerstuffeslint-plugin-importperpetualmaterialMITgit+https://github.com/import-js/eslint-plugin-import.git2.29.12.29.1^2.29.0Ben Mosher
kesslerstuffeslint-plugin-nperpetualmaterialMITgit+https://github.com/eslint-community/eslint-plugin-n.git16.6.216.6.2^16.6.2Toru Nagashima
kesslerstuffeslint-plugin-promiseperpetualmaterialISCgit+https://github.com/eslint-community/eslint-plugin-promise.git6.1.16.1.1^6.1.1jden
kesslerstuffeslint-plugin-standardperpetualmaterialMITgit+https://github.com/standard/eslint-plugin-standard.git5.0.05.0.0^5.0.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/eslint-webpack-plugin.git4.0.14.0.1^4.0.1Ricardo Gobbo de Souza
kesslerstuffexports-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/exports-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstufffile-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/file-loader.git6.2.06.2.0^6.0.0Tobias Koppers @sokra
kesslerstuffhtml-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/html-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffhtml-webpack-pluginperpetualmaterialMITgit+https://github.com/jantimon/html-webpack-plugin.git5.6.05.6.0^5.5.3Jan Nicklas (https://github.com/jantimon)
kesslerstuffmini-css-extract-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/mini-css-extract-plugin.git2.8.12.8.1^2.8.1Tobias Koppers @sokra
kesslerstuffnoop-loaderperpetualmaterialISCgit+https://github.com/KnutHelland/noop-loader.git1.0.01.0.0^1.0.0Knut Helland
kesslerstuffpathperpetualmaterialMITgit://github.com/jinder/path.git0.12.70.12.7^0.12.7Joyent http://www.joyent.com
kesslerstuffpostcssperpetualmaterialMITgit+https://github.com/postcss/postcss.git8.4.358.4.35^8.4.35Andrey Sitnik
kesslerstuffpostcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/postcss-loader.git8.1.18.1.1^8.1.1Andrey Sitnik
kesslerstuffpostcss-sassperpetualmaterialMITgit+https://github.com/AleshaOleg/postcss-sass.git0.5.00.5.0^0.5.0Oleh Aloshkin
kesslerstuffprecssperpetualmaterialCC0-1.0git+https://github.com/jonathantneal/precss.git4.0.04.0.0^4.0.0Jonathan Neal
kesslerstuffrequire-dirperpetualmaterialMITgit://github.com/aseemk/requireDir.git1.2.01.2.0^1.2.0Aseem Kishore
kesslerstuffrimrafperpetualmaterialISCgit://github.com/isaacs/rimraf.git5.0.55.0.5^5.0.1Isaac Z. Schlueter (http://blog.izs.me/)
kesslerstuffsassperpetualmaterialMITgit+https://github.com/sass/dart-sass.git1.71.11.71.1^1.71.1Natalie Weizenbaum nweiz@google.com https://github.com/nex3
kesslerstuffsass-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/sass-loader.git14.1.114.1.1^14.1.1J. Tangelder
kesslerstuffsource-map-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/source-map-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffstream-browserifyperpetualmaterialMITgit://github.com/browserify/stream-browserify.git3.0.03.0.0^3.0.0James Halliday mail@substack.net http://substack.net
kesslerstuffstreamifyperpetualmaterialMITgit://github.com/fent/node-streamify.git1.0.01.0.0^1.0.0fent (https://github.com/fent)
kesslerstuffstyle-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/style-loader.git3.3.43.3.4^3.3.4Tobias Koppers @sokra
kesslerstuffstylelintperpetualmaterialMITgit+https://github.com/stylelint/stylelint.git16.2.116.2.1^16.2.1stylelint
kesslerstuffstylelint-config-recommended-scssperpetualmaterialMITgit+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git14.0.014.0.0^14.0.0kristerkari
kesslerstuffstylelint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/stylelint-webpack-plugin.git5.0.05.0.0^5.0.0Ricardo Gobbo de Souza
kesslerstuffsvg-inline-loaderperpetualmaterialMITgit+ssh://git@github.com/sairion/svg-inline-loader.git0.8.20.8.2^0.8.2Jaeho Lee
kesslerstuffterser-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/terser-webpack-plugin.git5.3.105.3.10^5.3.9webpack Contrib Team
kesslerstuffurl-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/url-loader.git4.1.14.1.1^4.1.0Tobias Koppers @sokra
kesslerstuffwebextension-polyfillperpetualmaterialMPL-2.0git+https://github.com/mozilla/webextension-polyfill.git0.10.00.10.0^0.10.0Mozilla
kesslerstuffwebpackperpetualmaterialMITgit+https://github.com/webpack/webpack.git5.90.35.90.3^5.90.3Tobias Koppers @sokra
kesslerstuffwebpack-cliperpetualmaterialMITgit+https://github.com/webpack/webpack-cli.git5.1.45.1.4^5.1.4n/a
kesslerstuffwebpack-node-externalsperpetualmaterialMITgit+https://github.com/liady/webpack-node-externals.git3.0.03.0.0^3.0.0Liad Yosef https://github.com/liady
kesslerstuffwsperpetualmaterialMITgit+https://github.com/websockets/ws.git8.16.08.16.0^8.14.1Einar Otto Stangvik (http://2x.io)
kesslerstuffyarn-or-npmperpetualmaterialMITgit@github.com:camacho/yarn-or-npm.git3.0.13.0.1^3.0.1Patrick Camacho
+ + + +
departmentrelated tonamelicense periodmaterial / not materiallicense typelinkremote versioninstalled versiondefined versionauthor
kesslerstuff@babel/runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.17.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuffqrcodeperpetualmaterialMITgit://github.com/soldair/node-qrcode.git1.5.31.5.3^1.5.3Ryan Day
kesslerstuffuuidperpetualmaterialMITgit+https://github.com/uuidjs/uuid.git9.0.19.0.1^9.0.0n/a
kesslerstuff@babel/coreperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/eslint-parserperpetualmaterialMIThttps://github.com/babel/babel.git7.24.17.23.10^7.23.10The Babel Team (https://babel.dev/team)
kesslerstuff@babel/plugin-transform-runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/preset-envperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.0^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/registerperpetualmaterialMIThttps://github.com/babel/babel.git7.23.77.23.7^7.22.15The Babel Team (https://babel.dev/team)
kesslerstuffautoprefixerperpetualmaterialMITgit+https://github.com/postcss/autoprefixer.git10.4.1910.4.18^10.4.18Andrey Sitnik
kesslerstuffbabel-loaderperpetualmaterialMIThttps://github.com/babel/babel-loader.git9.1.39.1.3^9.1.3Luis Couto
kesslerstuffbabel-plugin-transform-minify-booleansperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-plugin-transform-remove-debuggerperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-preset-minifyperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-preset-minify0.5.20.5.2^0.5.2amasad
kesslerstuffbrowserslistperpetualmaterialMITgit+https://github.com/browserslist/browserslist.git4.23.04.23.0^4.23.0Andrey Sitnik
kesslerstuffcopy-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/copy-webpack-plugin.git12.0.212.0.2^12.0.2Len Boyette
kesslerstuffcross-envperpetualmaterialMITgit+https://github.com/kentcdodds/cross-env.git7.0.37.0.3^7.0.3Kent C. Dodds (https://kentcdodds.com)
kesslerstuffcrypto-browserifyperpetualmaterialMITgit://github.com/crypto-browserify/crypto-browserify.git3.12.03.12.0^3.12.0Dominic Tarr (dominictarr.com)
kesslerstuffcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/css-loader.git6.10.06.10.0^6.10.0Tobias Koppers @sokra
kesslerstuffcss-minimizer-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git6.0.06.0.0^6.0.0Loann Neveu
kesslerstuffdotenvperpetualmaterialBSD-2-Clausegit://github.com/motdotla/dotenv.git16.4.516.4.5^16.4.5n/a
kesslerstuffdotenv-webpackperpetualmaterialMITgit+https://github.com/mrsteele/dotenv-webpack.git8.1.08.0.1^8.0.1Matt Steele (http://omnionline.us/)
kesslerstuffeslintperpetualmaterialMITgit+https://github.com/eslint/eslint.git8.57.08.57.08.57.0Nicholas C. Zakas
kesslerstuffeslint-config-standardperpetualmaterialMITgit://github.com/standard/eslint-config-standard.git17.1.017.1.0^17.1.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-friendly-formatterperpetualmaterialMITgit+https://github.com/royriojas/eslint-friendly-formatter.git4.0.14.0.1^4.0.1Roy Riojas http://royriojas.com
kesslerstuffeslint-plugin-importperpetualmaterialMITgit+https://github.com/import-js/eslint-plugin-import.git2.29.12.29.1^2.29.0Ben Mosher
kesslerstuffeslint-plugin-nperpetualmaterialMITgit+https://github.com/eslint-community/eslint-plugin-n.git16.6.216.6.2^16.6.2Toru Nagashima
kesslerstuffeslint-plugin-promiseperpetualmaterialISCgit+https://github.com/eslint-community/eslint-plugin-promise.git6.1.16.1.1^6.1.1jden
kesslerstuffeslint-plugin-standardperpetualmaterialMITgit+https://github.com/standard/eslint-plugin-standard.git5.0.05.0.0^5.0.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/eslint-webpack-plugin.git4.1.04.1.0^4.1.0Ricardo Gobbo de Souza
kesslerstuffexports-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/exports-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstufffile-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/file-loader.git6.2.06.2.0^6.0.0Tobias Koppers @sokra
kesslerstuffhtml-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/html-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffhtml-webpack-pluginperpetualmaterialMITgit+https://github.com/jantimon/html-webpack-plugin.git5.6.05.6.0^5.5.3Jan Nicklas (https://github.com/jantimon)
kesslerstuffmini-css-extract-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/mini-css-extract-plugin.git2.8.12.8.1^2.8.1Tobias Koppers @sokra
kesslerstuffnoop-loaderperpetualmaterialISCgit+https://github.com/KnutHelland/noop-loader.git1.0.01.0.0^1.0.0Knut Helland
kesslerstuffpathperpetualmaterialMITgit://github.com/jinder/path.git0.12.70.12.7^0.12.7Joyent http://www.joyent.com
kesslerstuffpostcssperpetualmaterialMITgit+https://github.com/postcss/postcss.git8.4.388.4.36^8.4.36Andrey Sitnik
kesslerstuffpostcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/postcss-loader.git8.1.18.1.1^8.1.1Andrey Sitnik
kesslerstuffpostcss-sassperpetualmaterialMITgit+https://github.com/AleshaOleg/postcss-sass.git0.5.00.5.0^0.5.0Oleh Aloshkin
kesslerstuffprecssperpetualmaterialCC0-1.0git+https://github.com/jonathantneal/precss.git4.0.04.0.0^4.0.0Jonathan Neal
kesslerstuffrequire-dirperpetualmaterialMITgit://github.com/aseemk/requireDir.git1.2.01.2.0^1.2.0Aseem Kishore
kesslerstuffrimrafperpetualmaterialISCgit://github.com/isaacs/rimraf.git5.0.55.0.5^5.0.1Isaac Z. Schlueter (http://blog.izs.me/)
kesslerstuffsassperpetualmaterialMITgit+https://github.com/sass/dart-sass.git1.72.01.72.0^1.72.0Natalie Weizenbaum nweiz@google.com https://github.com/nex3
kesslerstuffsass-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/sass-loader.git14.1.114.1.1^14.1.1J. Tangelder
kesslerstuffsource-map-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/source-map-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffstream-browserifyperpetualmaterialMITgit://github.com/browserify/stream-browserify.git3.0.03.0.0^3.0.0James Halliday mail@substack.net http://substack.net
kesslerstuffstreamifyperpetualmaterialMITgit://github.com/fent/node-streamify.git1.0.01.0.0^1.0.0fent (https://github.com/fent)
kesslerstuffstyle-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/style-loader.git3.3.43.3.4^3.3.4Tobias Koppers @sokra
kesslerstuffstylelintperpetualmaterialMITgit+https://github.com/stylelint/stylelint.git16.3.016.2.1^16.2.1stylelint
kesslerstuffstylelint-config-recommended-scssperpetualmaterialMITgit+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git14.0.014.0.0^14.0.0kristerkari
kesslerstuffstylelint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/stylelint-webpack-plugin.git5.0.05.0.0^5.0.0Ricardo Gobbo de Souza
kesslerstuffsvg-inline-loaderperpetualmaterialMITgit+ssh://git@github.com/sairion/svg-inline-loader.git0.8.20.8.2^0.8.2Jaeho Lee
kesslerstuffterser-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/terser-webpack-plugin.git5.3.105.3.10^5.3.9webpack Contrib Team
kesslerstuffurl-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/url-loader.git4.1.14.1.1^4.1.0Tobias Koppers @sokra
kesslerstuffwebextension-polyfillperpetualmaterialMPL-2.0git+https://github.com/mozilla/webextension-polyfill.git0.10.00.10.0^0.10.0Mozilla
kesslerstuffwebpackperpetualmaterialMITgit+https://github.com/webpack/webpack.git5.91.05.90.3^5.90.3Tobias Koppers @sokra
kesslerstuffwebpack-cliperpetualmaterialMITgit+https://github.com/webpack/webpack-cli.git5.1.45.1.4^5.1.4n/a
kesslerstuffwebpack-node-externalsperpetualmaterialMITgit+https://github.com/liady/webpack-node-externals.git3.0.03.0.0^3.0.0Liad Yosef https://github.com/liady
kesslerstuffwsperpetualmaterialMITgit+https://github.com/websockets/ws.git8.16.08.16.0^8.14.1Einar Otto Stangvik (http://2x.io)
kesslerstuffyarn-or-npmperpetualmaterialMITgit@github.com:camacho/yarn-or-npm.git3.0.13.0.1^3.0.1Patrick Camacho
+ + + + + +
departmentrelated tonamelicense periodmaterial / not materiallicense typelinkremote versioninstalled versiondefined versionauthor
kesslerstuff@babel/runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.17.24.1^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuffqrcodeperpetualmaterialMITgit://github.com/soldair/node-qrcode.git1.5.31.5.3^1.5.3Ryan Day
kesslerstuffuuidperpetualmaterialMITgit+https://github.com/uuidjs/uuid.git9.0.19.0.1^9.0.0n/a
kesslerstuff@babel/coreperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.3^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/eslint-parserperpetualmaterialMIThttps://github.com/babel/babel.git7.24.17.24.1^7.23.10The Babel Team (https://babel.dev/team)
kesslerstuff@babel/plugin-transform-runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.3^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/preset-envperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.3^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/registerperpetualmaterialMIThttps://github.com/babel/babel.git7.23.77.23.7^7.22.15The Babel Team (https://babel.dev/team)
kesslerstuffautoprefixerperpetualmaterialMITgit+https://github.com/postcss/autoprefixer.git10.4.1910.4.19^10.4.18Andrey Sitnik
kesslerstuffbabel-loaderperpetualmaterialMIThttps://github.com/babel/babel-loader.git9.1.39.1.3^9.1.3Luis Couto
kesslerstuffbabel-plugin-transform-minify-booleansperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-plugin-transform-remove-debuggerperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-preset-minifyperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-preset-minify0.5.20.5.2^0.5.2amasad
kesslerstuffbrowserslistperpetualmaterialMITgit+https://github.com/browserslist/browserslist.git4.23.04.23.0^4.23.0Andrey Sitnik
kesslerstuffcopy-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/copy-webpack-plugin.git12.0.212.0.2^12.0.2Len Boyette
kesslerstuffcross-envperpetualmaterialMITgit+https://github.com/kentcdodds/cross-env.git7.0.37.0.3^7.0.3Kent C. Dodds (https://kentcdodds.com)
kesslerstuffcrypto-browserifyperpetualmaterialMITgit://github.com/crypto-browserify/crypto-browserify.git3.12.03.12.0^3.12.0Dominic Tarr (dominictarr.com)
kesslerstuffcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/css-loader.git6.10.06.10.0^6.10.0Tobias Koppers @sokra
kesslerstuffcss-minimizer-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git6.0.06.0.0^6.0.0Loann Neveu
kesslerstuffdotenvperpetualmaterialBSD-2-Clausegit://github.com/motdotla/dotenv.git16.4.516.4.5^16.4.5n/a
kesslerstuffdotenv-webpackperpetualmaterialMITgit+https://github.com/mrsteele/dotenv-webpack.git8.1.08.1.0^8.0.1Matt Steele (http://omnionline.us/)
kesslerstuffeslintperpetualmaterialMITgit+https://github.com/eslint/eslint.git8.57.08.57.08.57.0Nicholas C. Zakas
kesslerstuffeslint-config-standardperpetualmaterialMITgit://github.com/standard/eslint-config-standard.git17.1.017.1.0^17.1.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-friendly-formatterperpetualmaterialMITgit+https://github.com/royriojas/eslint-friendly-formatter.git4.0.14.0.1^4.0.1Roy Riojas http://royriojas.com
kesslerstuffeslint-plugin-importperpetualmaterialMITgit+https://github.com/import-js/eslint-plugin-import.git2.29.12.29.1^2.29.0Ben Mosher
kesslerstuffeslint-plugin-nperpetualmaterialMITgit+https://github.com/eslint-community/eslint-plugin-n.git16.6.216.6.2^16.6.2Toru Nagashima
kesslerstuffeslint-plugin-promiseperpetualmaterialISCgit+https://github.com/eslint-community/eslint-plugin-promise.git6.1.16.1.1^6.1.1jden
kesslerstuffeslint-plugin-standardperpetualmaterialMITgit+https://github.com/standard/eslint-plugin-standard.git5.0.05.0.0^5.0.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/eslint-webpack-plugin.git4.1.04.1.0^4.1.0Ricardo Gobbo de Souza
kesslerstuffexports-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/exports-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstufffile-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/file-loader.git6.2.06.2.0^6.0.0Tobias Koppers @sokra
kesslerstuffhtml-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/html-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffhtml-webpack-pluginperpetualmaterialMITgit+https://github.com/jantimon/html-webpack-plugin.git5.6.05.6.0^5.5.3Jan Nicklas (https://github.com/jantimon)
kesslerstuffmini-css-extract-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/mini-css-extract-plugin.git2.8.12.8.1^2.8.1Tobias Koppers @sokra
kesslerstuffnoop-loaderperpetualmaterialISCgit+https://github.com/KnutHelland/noop-loader.git1.0.01.0.0^1.0.0Knut Helland
kesslerstuffpathperpetualmaterialMITgit://github.com/jinder/path.git0.12.70.12.7^0.12.7Joyent http://www.joyent.com
kesslerstuffpostcssperpetualmaterialMITgit+https://github.com/postcss/postcss.git8.4.388.4.38^8.4.36Andrey Sitnik
kesslerstuffpostcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/postcss-loader.git8.1.18.1.1^8.1.1Andrey Sitnik
kesslerstuffpostcss-sassperpetualmaterialMITgit+https://github.com/AleshaOleg/postcss-sass.git0.5.00.5.0^0.5.0Oleh Aloshkin
kesslerstuffprecssperpetualmaterialCC0-1.0git+https://github.com/jonathantneal/precss.git4.0.04.0.0^4.0.0Jonathan Neal
kesslerstuffrequire-dirperpetualmaterialMITgit://github.com/aseemk/requireDir.git1.2.01.2.0^1.2.0Aseem Kishore
kesslerstuffrimrafperpetualmaterialISCgit://github.com/isaacs/rimraf.git5.0.55.0.5^5.0.1Isaac Z. Schlueter (http://blog.izs.me/)
kesslerstuffsassperpetualmaterialMITgit+https://github.com/sass/dart-sass.git1.72.01.72.0^1.72.0Natalie Weizenbaum nweiz@google.com https://github.com/nex3
kesslerstuffsass-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/sass-loader.git14.1.114.1.1^14.1.1J. Tangelder
kesslerstuffsource-map-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/source-map-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffstream-browserifyperpetualmaterialMITgit://github.com/browserify/stream-browserify.git3.0.03.0.0^3.0.0James Halliday mail@substack.net http://substack.net
kesslerstuffstreamifyperpetualmaterialMITgit://github.com/fent/node-streamify.git1.0.01.0.0^1.0.0fent (https://github.com/fent)
kesslerstuffstyle-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/style-loader.git3.3.43.3.4^3.3.4Tobias Koppers @sokra
kesslerstuffstylelintperpetualmaterialMITgit+https://github.com/stylelint/stylelint.git16.3.116.3.0^16.2.1stylelint
kesslerstuffstylelint-config-recommended-scssperpetualmaterialMITgit+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git14.0.014.0.0^14.0.0kristerkari
kesslerstuffstylelint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/stylelint-webpack-plugin.git5.0.05.0.0^5.0.0Ricardo Gobbo de Souza
kesslerstuffsvg-inline-loaderperpetualmaterialMITgit+ssh://git@github.com/sairion/svg-inline-loader.git0.8.20.8.2^0.8.2Jaeho Lee
kesslerstuffterser-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/terser-webpack-plugin.git5.3.105.3.10^5.3.9webpack Contrib Team
kesslerstuffurl-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/url-loader.git4.1.14.1.1^4.1.0Tobias Koppers @sokra
kesslerstuffwebextension-polyfillperpetualmaterialMPL-2.0git+https://github.com/mozilla/webextension-polyfill.git0.10.00.10.0^0.10.0Mozilla
kesslerstuffwebpackperpetualmaterialMITgit+https://github.com/webpack/webpack.git5.91.05.91.0^5.90.3Tobias Koppers @sokra
kesslerstuffwebpack-cliperpetualmaterialMITgit+https://github.com/webpack/webpack-cli.git5.1.45.1.4^5.1.4n/a
kesslerstuffwebpack-node-externalsperpetualmaterialMITgit+https://github.com/liady/webpack-node-externals.git3.0.03.0.0^3.0.0Liad Yosef https://github.com/liady
kesslerstuffwsperpetualmaterialMITgit+https://github.com/websockets/ws.git8.16.08.16.0^8.14.1Einar Otto Stangvik (http://2x.io)
kesslerstuffyarn-or-npmperpetualmaterialMITgit@github.com:camacho/yarn-or-npm.git3.0.13.0.1^3.0.1Patrick Camacho
+ + + + + +
departmentrelated tonamelicense periodmaterial / not materiallicense typelinkremote versioninstalled versiondefined versionauthor
kesslerstuff@babel/runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.17.24.1^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuffqrcodeperpetualmaterialMITgit://github.com/soldair/node-qrcode.git1.5.31.5.3^1.5.3Ryan Day
kesslerstuffuuidperpetualmaterialMITgit+https://github.com/uuidjs/uuid.git9.0.19.0.1^9.0.0n/a
kesslerstuff@babel/coreperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.3^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/eslint-parserperpetualmaterialMIThttps://github.com/babel/babel.git7.24.17.24.1^7.23.10The Babel Team (https://babel.dev/team)
kesslerstuff@babel/plugin-transform-runtimeperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.3^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/preset-envperpetualmaterialMIThttps://github.com/babel/babel.git7.24.37.24.3^7.24.0The Babel Team (https://babel.dev/team)
kesslerstuff@babel/registerperpetualmaterialMIThttps://github.com/babel/babel.git7.23.77.23.7^7.22.15The Babel Team (https://babel.dev/team)
kesslerstuffautoprefixerperpetualmaterialMITgit+https://github.com/postcss/autoprefixer.git10.4.1910.4.19^10.4.18Andrey Sitnik
kesslerstuffbabel-loaderperpetualmaterialMIThttps://github.com/babel/babel-loader.git9.1.39.1.3^9.1.3Luis Couto
kesslerstuffbabel-plugin-transform-minify-booleansperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-plugin-transform-remove-debuggerperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger6.9.46.9.4^6.9.4amasad
kesslerstuffbabel-preset-minifyperpetualmaterialMIThttps://github.com/babel/minify/tree/master/packages/babel-preset-minify0.5.20.5.2^0.5.2amasad
kesslerstuffbrowserslistperpetualmaterialMITgit+https://github.com/browserslist/browserslist.git4.23.04.23.0^4.23.0Andrey Sitnik
kesslerstuffcopy-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/copy-webpack-plugin.git12.0.212.0.2^12.0.2Len Boyette
kesslerstuffcross-envperpetualmaterialMITgit+https://github.com/kentcdodds/cross-env.git7.0.37.0.3^7.0.3Kent C. Dodds (https://kentcdodds.com)
kesslerstuffcrypto-browserifyperpetualmaterialMITgit://github.com/crypto-browserify/crypto-browserify.git3.12.03.12.0^3.12.0Dominic Tarr (dominictarr.com)
kesslerstuffcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/css-loader.git6.10.06.10.0^6.10.0Tobias Koppers @sokra
kesslerstuffcss-minimizer-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git6.0.06.0.0^6.0.0Loann Neveu
kesslerstuffdotenvperpetualmaterialBSD-2-Clausegit://github.com/motdotla/dotenv.git16.4.516.4.5^16.4.5n/a
kesslerstuffdotenv-webpackperpetualmaterialMITgit+https://github.com/mrsteele/dotenv-webpack.git8.1.08.1.0^8.0.1Matt Steele (http://omnionline.us/)
kesslerstuffeslintperpetualmaterialMITgit+https://github.com/eslint/eslint.git8.57.08.57.08.57.0Nicholas C. Zakas
kesslerstuffeslint-config-standardperpetualmaterialMITgit://github.com/standard/eslint-config-standard.git17.1.017.1.0^17.1.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-friendly-formatterperpetualmaterialMITgit+https://github.com/royriojas/eslint-friendly-formatter.git4.0.14.0.1^4.0.1Roy Riojas http://royriojas.com
kesslerstuffeslint-plugin-importperpetualmaterialMITgit+https://github.com/import-js/eslint-plugin-import.git2.29.12.29.1^2.29.0Ben Mosher
kesslerstuffeslint-plugin-nperpetualmaterialMITgit+https://github.com/eslint-community/eslint-plugin-n.git16.6.216.6.2^16.6.2Toru Nagashima
kesslerstuffeslint-plugin-promiseperpetualmaterialISCgit+https://github.com/eslint-community/eslint-plugin-promise.git6.1.16.1.1^6.1.1jden
kesslerstuffeslint-plugin-standardperpetualmaterialMITgit+https://github.com/standard/eslint-plugin-standard.git5.0.05.0.0^5.0.0Feross Aboukhadijeh feross@feross.org https://feross.org
kesslerstuffeslint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/eslint-webpack-plugin.git4.1.04.1.0^4.1.0Ricardo Gobbo de Souza
kesslerstuffexports-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/exports-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstufffile-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/file-loader.git6.2.06.2.0^6.0.0Tobias Koppers @sokra
kesslerstuffhtml-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/html-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffhtml-webpack-pluginperpetualmaterialMITgit+https://github.com/jantimon/html-webpack-plugin.git5.6.05.6.0^5.5.3Jan Nicklas (https://github.com/jantimon)
kesslerstuffmini-css-extract-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/mini-css-extract-plugin.git2.8.12.8.1^2.8.1Tobias Koppers @sokra
kesslerstuffnoop-loaderperpetualmaterialISCgit+https://github.com/KnutHelland/noop-loader.git1.0.01.0.0^1.0.0Knut Helland
kesslerstuffpathperpetualmaterialMITgit://github.com/jinder/path.git0.12.70.12.7^0.12.7Joyent http://www.joyent.com
kesslerstuffpostcssperpetualmaterialMITgit+https://github.com/postcss/postcss.git8.4.388.4.38^8.4.36Andrey Sitnik
kesslerstuffpostcss-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/postcss-loader.git8.1.18.1.1^8.1.1Andrey Sitnik
kesslerstuffpostcss-sassperpetualmaterialMITgit+https://github.com/AleshaOleg/postcss-sass.git0.5.00.5.0^0.5.0Oleh Aloshkin
kesslerstuffprecssperpetualmaterialCC0-1.0git+https://github.com/jonathantneal/precss.git4.0.04.0.0^4.0.0Jonathan Neal
kesslerstuffrequire-dirperpetualmaterialMITgit://github.com/aseemk/requireDir.git1.2.01.2.0^1.2.0Aseem Kishore
kesslerstuffrimrafperpetualmaterialISCgit://github.com/isaacs/rimraf.git5.0.55.0.5^5.0.1Isaac Z. Schlueter (http://blog.izs.me/)
kesslerstuffsassperpetualmaterialMITgit+https://github.com/sass/dart-sass.git1.72.01.72.0^1.72.0Natalie Weizenbaum nweiz@google.com https://github.com/nex3
kesslerstuffsass-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/sass-loader.git14.1.114.1.1^14.1.1J. Tangelder
kesslerstuffsource-map-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/source-map-loader.git5.0.05.0.0^5.0.0Tobias Koppers @sokra
kesslerstuffstream-browserifyperpetualmaterialMITgit://github.com/browserify/stream-browserify.git3.0.03.0.0^3.0.0James Halliday mail@substack.net http://substack.net
kesslerstuffstreamifyperpetualmaterialMITgit://github.com/fent/node-streamify.git1.0.01.0.0^1.0.0fent (https://github.com/fent)
kesslerstuffstyle-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/style-loader.git3.3.43.3.4^3.3.4Tobias Koppers @sokra
kesslerstuffstylelintperpetualmaterialMITgit+https://github.com/stylelint/stylelint.git16.3.116.3.0^16.2.1stylelint
kesslerstuffstylelint-config-recommended-scssperpetualmaterialMITgit+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git14.0.014.0.0^14.0.0kristerkari
kesslerstuffstylelint-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/stylelint-webpack-plugin.git5.0.05.0.0^5.0.0Ricardo Gobbo de Souza
kesslerstuffsvg-inline-loaderperpetualmaterialMITgit+ssh://git@github.com/sairion/svg-inline-loader.git0.8.20.8.2^0.8.2Jaeho Lee
kesslerstuffterser-webpack-pluginperpetualmaterialMITgit+https://github.com/webpack-contrib/terser-webpack-plugin.git5.3.105.3.10^5.3.9webpack Contrib Team
kesslerstuffurl-loaderperpetualmaterialMITgit+https://github.com/webpack-contrib/url-loader.git4.1.14.1.1^4.1.0Tobias Koppers @sokra
kesslerstuffwebextension-polyfillperpetualmaterialMPL-2.0git+https://github.com/mozilla/webextension-polyfill.git0.10.00.10.0^0.10.0Mozilla
kesslerstuffwebpackperpetualmaterialMITgit+https://github.com/webpack/webpack.git5.91.05.91.0^5.90.3Tobias Koppers @sokra
kesslerstuffwebpack-cliperpetualmaterialMITgit+https://github.com/webpack/webpack-cli.git5.1.45.1.4^5.1.4n/a
kesslerstuffwebpack-node-externalsperpetualmaterialMITgit+https://github.com/liady/webpack-node-externals.git3.0.03.0.0^3.0.0Liad Yosef https://github.com/liady
kesslerstuffwsperpetualmaterialMITgit+https://github.com/websockets/ws.git8.16.08.16.0^8.14.1Einar Otto Stangvik (http://2x.io)
kesslerstuffyarn-or-npmperpetualmaterialMITgit@github.com:camacho/yarn-or-npm.git3.0.13.0.1^3.0.1Patrick Camacho
+ + diff --git a/open-source-licenses.json b/open-source-licenses.json index d27df0d..c94d131 100644 --- a/open-source-licenses.json +++ b/open-source-licenses.json @@ -34,3 +34,6 @@ [{"department":"kessler","relatedTo":"stuff","name":"qrcode","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/soldair/node-qrcode.git","remoteVersion":"1.5.3","installedVersion":"1.5.3","definedVersion":"^1.5.3","author":"Ryan Day "},{"department":"kessler","relatedTo":"stuff","name":"uuid","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uuidjs/uuid.git","remoteVersion":"9.0.1","installedVersion":"9.0.1","definedVersion":"^9.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@babel/core","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.9","installedVersion":"7.23.9","definedVersion":"^7.23.9","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/eslint-parser","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.10","installedVersion":"7.23.10","definedVersion":"^7.23.10","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/plugin-transform-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.9","installedVersion":"7.23.9","definedVersion":"^7.23.9","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/preset-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.9","installedVersion":"7.23.9","definedVersion":"^7.23.9","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/register","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.7","installedVersion":"7.23.7","definedVersion":"^7.22.15","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.9","installedVersion":"7.23.9","definedVersion":"^7.23.9","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.17","installedVersion":"10.4.17","definedVersion":"^10.4.17","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"babel-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel-loader.git","remoteVersion":"9.1.3","installedVersion":"9.1.3","definedVersion":"^9.1.3","author":"Luis Couto "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-dynamic-import-node","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/airbnb/babel-plugin-dynamic-import-node.git","remoteVersion":"2.3.3","installedVersion":"2.3.3","definedVersion":"^2.3.3","author":"Jordan Gensler "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-minify-booleans","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-console","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-console","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-debugger","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-preset-minify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-preset-minify","remoteVersion":"0.5.2","installedVersion":"0.5.2","definedVersion":"^0.5.2","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"browserslist","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/browserslist/browserslist.git","remoteVersion":"4.23.0","installedVersion":"4.23.0","definedVersion":"^4.23.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"copy-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/copy-webpack-plugin.git","remoteVersion":"12.0.2","installedVersion":"12.0.2","definedVersion":"^12.0.2","author":"Len Boyette"},{"department":"kessler","relatedTo":"stuff","name":"cross-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kentcdodds/cross-env.git","remoteVersion":"7.0.3","installedVersion":"7.0.3","definedVersion":"^7.0.3","author":"Kent C. Dodds (https://kentcdodds.com)"},{"department":"kessler","relatedTo":"stuff","name":"crypto-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/crypto-browserify/crypto-browserify.git","remoteVersion":"3.12.0","installedVersion":"3.12.0","definedVersion":"^3.12.0","author":"Dominic Tarr (dominictarr.com)"},{"department":"kessler","relatedTo":"stuff","name":"css-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-loader.git","remoteVersion":"6.10.0","installedVersion":"6.10.0","definedVersion":"^6.10.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"css-minimizer-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git","remoteVersion":"6.0.0","installedVersion":"6.0.0","definedVersion":"^6.0.0","author":"Loann Neveu"},{"department":"kessler","relatedTo":"stuff","name":"dotenv","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git://github.com/motdotla/dotenv.git","remoteVersion":"16.4.5","installedVersion":"16.4.5","definedVersion":"^16.4.5","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"dotenv-webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrsteele/dotenv-webpack.git","remoteVersion":"8.0.1","installedVersion":"8.0.1","definedVersion":"^8.0.1","author":"Matt Steele (http://omnionline.us/)"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.0","installedVersion":"8.57.0","definedVersion":"8.57.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-config-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/standard/eslint-config-standard.git","remoteVersion":"17.1.0","installedVersion":"17.1.0","definedVersion":"^17.1.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-friendly-formatter","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/royriojas/eslint-friendly-formatter.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Roy Riojas http://royriojas.com"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.29.1","installedVersion":"2.29.1","definedVersion":"^2.29.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-n","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint-community/eslint-plugin-n.git","remoteVersion":"16.6.2","installedVersion":"16.6.2","definedVersion":"^16.6.2","author":"Toru Nagashima"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-promise","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/eslint-community/eslint-plugin-promise.git","remoteVersion":"6.1.1","installedVersion":"6.1.1","definedVersion":"^6.1.1","author":"jden "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/standard/eslint-plugin-standard.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/eslint-webpack-plugin.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"exports-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/exports-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"file-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/file-loader.git","remoteVersion":"6.2.0","installedVersion":"6.2.0","definedVersion":"^6.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/html-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jantimon/html-webpack-plugin.git","remoteVersion":"5.6.0","installedVersion":"5.6.0","definedVersion":"^5.5.3","author":"Jan Nicklas (https://github.com/jantimon)"},{"department":"kessler","relatedTo":"stuff","name":"mini-css-extract-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/mini-css-extract-plugin.git","remoteVersion":"2.8.0","installedVersion":"2.8.0","definedVersion":"^2.8.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"noop-loader","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/KnutHelland/noop-loader.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"Knut Helland"},{"department":"kessler","relatedTo":"stuff","name":"path","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/jinder/path.git","remoteVersion":"0.12.7","installedVersion":"0.12.7","definedVersion":"^0.12.7","author":"Joyent http://www.joyent.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.35","installedVersion":"8.4.35","definedVersion":"^8.4.35","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/postcss-loader.git","remoteVersion":"8.1.0","installedVersion":"8.1.0","definedVersion":"^8.1.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/AleshaOleg/postcss-sass.git","remoteVersion":"0.5.0","installedVersion":"0.5.0","definedVersion":"^0.5.0","author":"Oleh Aloshkin "},{"department":"kessler","relatedTo":"stuff","name":"precss","licensePeriod":"perpetual","material":"material","licenseType":"CC0-1.0","link":"git+https://github.com/jonathantneal/precss.git","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"Jonathan Neal "},{"department":"kessler","relatedTo":"stuff","name":"require-dir","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/aseemk/requireDir.git","remoteVersion":"1.2.0","installedVersion":"1.2.0","definedVersion":"^1.2.0","author":"Aseem Kishore "},{"department":"kessler","relatedTo":"stuff","name":"rimraf","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git://github.com/isaacs/rimraf.git","remoteVersion":"5.0.5","installedVersion":"5.0.5","definedVersion":"^5.0.1","author":"Isaac Z. Schlueter (http://blog.izs.me/)"},{"department":"kessler","relatedTo":"stuff","name":"sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sass/dart-sass.git","remoteVersion":"1.71.1","installedVersion":"1.71.1","definedVersion":"^1.71.1","author":"Natalie Weizenbaum nweiz@google.com https://github.com/nex3"},{"department":"kessler","relatedTo":"stuff","name":"sass-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/sass-loader.git","remoteVersion":"14.1.1","installedVersion":"14.1.1","definedVersion":"^14.1.1","author":"J. Tangelder"},{"department":"kessler","relatedTo":"stuff","name":"source-map-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/source-map-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stream-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/browserify/stream-browserify.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"James Halliday mail@substack.net http://substack.net"},{"department":"kessler","relatedTo":"stuff","name":"streamify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/fent/node-streamify.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"fent (https://github.com/fent)"},{"department":"kessler","relatedTo":"stuff","name":"style-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/style-loader.git","remoteVersion":"3.3.4","installedVersion":"3.3.4","definedVersion":"^3.3.4","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stylelint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint/stylelint.git","remoteVersion":"15.11.0","installedVersion":"15.11.0","definedVersion":"^15.10.3","author":"stylelint"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-config-recommended-scss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git","remoteVersion":"13.1.0","installedVersion":"13.1.0","definedVersion":"^13.1.0","author":"kristerkari"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/stylelint-webpack-plugin.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.1","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"svg-inline-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/sairion/svg-inline-loader.git","remoteVersion":"0.8.2","installedVersion":"0.8.2","definedVersion":"^0.8.2","author":"Jaeho Lee "},{"department":"kessler","relatedTo":"stuff","name":"terser-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/terser-webpack-plugin.git","remoteVersion":"5.3.10","installedVersion":"5.3.10","definedVersion":"^5.3.9","author":"webpack Contrib Team"},{"department":"kessler","relatedTo":"stuff","name":"url-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/url-loader.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webextension-polyfill","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/mozilla/webextension-polyfill.git","remoteVersion":"0.10.0","installedVersion":"0.10.0","definedVersion":"^0.10.0","author":"Mozilla"},{"department":"kessler","relatedTo":"stuff","name":"webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack.git","remoteVersion":"5.90.3","installedVersion":"5.90.3","definedVersion":"^5.90.3","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webpack-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack-cli.git","remoteVersion":"5.1.4","installedVersion":"5.1.4","definedVersion":"^5.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"webpack-node-externals","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/liady/webpack-node-externals.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"Liad Yosef https://github.com/liady"},{"department":"kessler","relatedTo":"stuff","name":"ws","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/websockets/ws.git","remoteVersion":"8.16.0","installedVersion":"8.16.0","definedVersion":"^8.14.1","author":"Einar Otto Stangvik (http://2x.io)"}] [{"department":"kessler","relatedTo":"stuff","name":"qrcode","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/soldair/node-qrcode.git","remoteVersion":"1.5.3","installedVersion":"1.5.3","definedVersion":"^1.5.3","author":"Ryan Day "},{"department":"kessler","relatedTo":"stuff","name":"uuid","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uuidjs/uuid.git","remoteVersion":"9.0.1","installedVersion":"9.0.1","definedVersion":"^9.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@babel/core","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/eslint-parser","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.10","installedVersion":"7.23.10","definedVersion":"^7.23.10","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/plugin-transform-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/preset-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/register","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.7","installedVersion":"7.23.7","definedVersion":"^7.22.15","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.18","installedVersion":"10.4.18","definedVersion":"^10.4.18","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"babel-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel-loader.git","remoteVersion":"9.1.3","installedVersion":"9.1.3","definedVersion":"^9.1.3","author":"Luis Couto "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-dynamic-import-node","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/airbnb/babel-plugin-dynamic-import-node.git","remoteVersion":"2.3.3","installedVersion":"2.3.3","definedVersion":"^2.3.3","author":"Jordan Gensler "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-minify-booleans","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-console","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-console","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-debugger","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-preset-minify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-preset-minify","remoteVersion":"0.5.2","installedVersion":"0.5.2","definedVersion":"^0.5.2","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"browserslist","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/browserslist/browserslist.git","remoteVersion":"4.23.0","installedVersion":"4.23.0","definedVersion":"^4.23.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"copy-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/copy-webpack-plugin.git","remoteVersion":"12.0.2","installedVersion":"12.0.2","definedVersion":"^12.0.2","author":"Len Boyette"},{"department":"kessler","relatedTo":"stuff","name":"cross-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kentcdodds/cross-env.git","remoteVersion":"7.0.3","installedVersion":"7.0.3","definedVersion":"^7.0.3","author":"Kent C. Dodds (https://kentcdodds.com)"},{"department":"kessler","relatedTo":"stuff","name":"crypto-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/crypto-browserify/crypto-browserify.git","remoteVersion":"3.12.0","installedVersion":"3.12.0","definedVersion":"^3.12.0","author":"Dominic Tarr (dominictarr.com)"},{"department":"kessler","relatedTo":"stuff","name":"css-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-loader.git","remoteVersion":"6.10.0","installedVersion":"6.10.0","definedVersion":"^6.10.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"css-minimizer-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git","remoteVersion":"6.0.0","installedVersion":"6.0.0","definedVersion":"^6.0.0","author":"Loann Neveu"},{"department":"kessler","relatedTo":"stuff","name":"dotenv","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git://github.com/motdotla/dotenv.git","remoteVersion":"16.4.5","installedVersion":"16.4.5","definedVersion":"^16.4.5","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"dotenv-webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrsteele/dotenv-webpack.git","remoteVersion":"8.0.1","installedVersion":"8.0.1","definedVersion":"^8.0.1","author":"Matt Steele (http://omnionline.us/)"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.0","installedVersion":"8.57.0","definedVersion":"8.57.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-config-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/standard/eslint-config-standard.git","remoteVersion":"17.1.0","installedVersion":"17.1.0","definedVersion":"^17.1.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-friendly-formatter","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/royriojas/eslint-friendly-formatter.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Roy Riojas http://royriojas.com"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.29.1","installedVersion":"2.29.1","definedVersion":"^2.29.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-n","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint-community/eslint-plugin-n.git","remoteVersion":"16.6.2","installedVersion":"16.6.2","definedVersion":"^16.6.2","author":"Toru Nagashima"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-promise","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/eslint-community/eslint-plugin-promise.git","remoteVersion":"6.1.1","installedVersion":"6.1.1","definedVersion":"^6.1.1","author":"jden "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/standard/eslint-plugin-standard.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/eslint-webpack-plugin.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"exports-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/exports-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"file-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/file-loader.git","remoteVersion":"6.2.0","installedVersion":"6.2.0","definedVersion":"^6.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/html-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jantimon/html-webpack-plugin.git","remoteVersion":"5.6.0","installedVersion":"5.6.0","definedVersion":"^5.5.3","author":"Jan Nicklas (https://github.com/jantimon)"},{"department":"kessler","relatedTo":"stuff","name":"mini-css-extract-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/mini-css-extract-plugin.git","remoteVersion":"2.8.1","installedVersion":"2.8.1","definedVersion":"^2.8.1","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"noop-loader","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/KnutHelland/noop-loader.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"Knut Helland"},{"department":"kessler","relatedTo":"stuff","name":"path","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/jinder/path.git","remoteVersion":"0.12.7","installedVersion":"0.12.7","definedVersion":"^0.12.7","author":"Joyent http://www.joyent.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.35","installedVersion":"8.4.35","definedVersion":"^8.4.35","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/postcss-loader.git","remoteVersion":"8.1.1","installedVersion":"8.1.1","definedVersion":"^8.1.1","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/AleshaOleg/postcss-sass.git","remoteVersion":"0.5.0","installedVersion":"0.5.0","definedVersion":"^0.5.0","author":"Oleh Aloshkin "},{"department":"kessler","relatedTo":"stuff","name":"precss","licensePeriod":"perpetual","material":"material","licenseType":"CC0-1.0","link":"git+https://github.com/jonathantneal/precss.git","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"Jonathan Neal "},{"department":"kessler","relatedTo":"stuff","name":"require-dir","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/aseemk/requireDir.git","remoteVersion":"1.2.0","installedVersion":"1.2.0","definedVersion":"^1.2.0","author":"Aseem Kishore "},{"department":"kessler","relatedTo":"stuff","name":"rimraf","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git://github.com/isaacs/rimraf.git","remoteVersion":"5.0.5","installedVersion":"5.0.5","definedVersion":"^5.0.1","author":"Isaac Z. Schlueter (http://blog.izs.me/)"},{"department":"kessler","relatedTo":"stuff","name":"sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sass/dart-sass.git","remoteVersion":"1.71.1","installedVersion":"1.71.1","definedVersion":"^1.71.1","author":"Natalie Weizenbaum nweiz@google.com https://github.com/nex3"},{"department":"kessler","relatedTo":"stuff","name":"sass-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/sass-loader.git","remoteVersion":"14.1.1","installedVersion":"14.1.1","definedVersion":"^14.1.1","author":"J. Tangelder"},{"department":"kessler","relatedTo":"stuff","name":"source-map-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/source-map-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stream-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/browserify/stream-browserify.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"James Halliday mail@substack.net http://substack.net"},{"department":"kessler","relatedTo":"stuff","name":"streamify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/fent/node-streamify.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"fent (https://github.com/fent)"},{"department":"kessler","relatedTo":"stuff","name":"style-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/style-loader.git","remoteVersion":"3.3.4","installedVersion":"3.3.4","definedVersion":"^3.3.4","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stylelint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint/stylelint.git","remoteVersion":"15.11.0","installedVersion":"15.11.0","definedVersion":"^15.10.3","author":"stylelint"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-config-recommended-scss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git","remoteVersion":"13.1.0","installedVersion":"13.1.0","definedVersion":"^13.1.0","author":"kristerkari"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/stylelint-webpack-plugin.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.1","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"svg-inline-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/sairion/svg-inline-loader.git","remoteVersion":"0.8.2","installedVersion":"0.8.2","definedVersion":"^0.8.2","author":"Jaeho Lee "},{"department":"kessler","relatedTo":"stuff","name":"terser-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/terser-webpack-plugin.git","remoteVersion":"5.3.10","installedVersion":"5.3.10","definedVersion":"^5.3.9","author":"webpack Contrib Team"},{"department":"kessler","relatedTo":"stuff","name":"url-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/url-loader.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webextension-polyfill","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/mozilla/webextension-polyfill.git","remoteVersion":"0.10.0","installedVersion":"0.10.0","definedVersion":"^0.10.0","author":"Mozilla"},{"department":"kessler","relatedTo":"stuff","name":"webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack.git","remoteVersion":"5.90.3","installedVersion":"5.90.3","definedVersion":"^5.90.3","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webpack-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack-cli.git","remoteVersion":"5.1.4","installedVersion":"5.1.4","definedVersion":"^5.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"webpack-node-externals","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/liady/webpack-node-externals.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"Liad Yosef https://github.com/liady"},{"department":"kessler","relatedTo":"stuff","name":"ws","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/websockets/ws.git","remoteVersion":"8.16.0","installedVersion":"8.16.0","definedVersion":"^8.14.1","author":"Einar Otto Stangvik (http://2x.io)"},{"department":"kessler","relatedTo":"stuff","name":"yarn-or-npm","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git@github.com:camacho/yarn-or-npm.git","remoteVersion":"3.0.1","installedVersion":"3.0.1","definedVersion":"^3.0.1","author":"Patrick Camacho "}] [{"department":"kessler","relatedTo":"stuff","name":"@babel/runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"qrcode","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/soldair/node-qrcode.git","remoteVersion":"1.5.3","installedVersion":"1.5.3","definedVersion":"^1.5.3","author":"Ryan Day "},{"department":"kessler","relatedTo":"stuff","name":"uuid","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uuidjs/uuid.git","remoteVersion":"9.0.1","installedVersion":"9.0.1","definedVersion":"^9.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@babel/core","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/eslint-parser","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.10","installedVersion":"7.23.10","definedVersion":"^7.23.10","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/plugin-transform-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/preset-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.0","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/register","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.7","installedVersion":"7.23.7","definedVersion":"^7.22.15","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.18","installedVersion":"10.4.18","definedVersion":"^10.4.18","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"babel-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel-loader.git","remoteVersion":"9.1.3","installedVersion":"9.1.3","definedVersion":"^9.1.3","author":"Luis Couto "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-minify-booleans","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-debugger","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-preset-minify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-preset-minify","remoteVersion":"0.5.2","installedVersion":"0.5.2","definedVersion":"^0.5.2","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"browserslist","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/browserslist/browserslist.git","remoteVersion":"4.23.0","installedVersion":"4.23.0","definedVersion":"^4.23.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"copy-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/copy-webpack-plugin.git","remoteVersion":"12.0.2","installedVersion":"12.0.2","definedVersion":"^12.0.2","author":"Len Boyette"},{"department":"kessler","relatedTo":"stuff","name":"cross-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kentcdodds/cross-env.git","remoteVersion":"7.0.3","installedVersion":"7.0.3","definedVersion":"^7.0.3","author":"Kent C. Dodds (https://kentcdodds.com)"},{"department":"kessler","relatedTo":"stuff","name":"crypto-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/crypto-browserify/crypto-browserify.git","remoteVersion":"3.12.0","installedVersion":"3.12.0","definedVersion":"^3.12.0","author":"Dominic Tarr (dominictarr.com)"},{"department":"kessler","relatedTo":"stuff","name":"css-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-loader.git","remoteVersion":"6.10.0","installedVersion":"6.10.0","definedVersion":"^6.10.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"css-minimizer-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git","remoteVersion":"6.0.0","installedVersion":"6.0.0","definedVersion":"^6.0.0","author":"Loann Neveu"},{"department":"kessler","relatedTo":"stuff","name":"dotenv","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git://github.com/motdotla/dotenv.git","remoteVersion":"16.4.5","installedVersion":"16.4.5","definedVersion":"^16.4.5","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"dotenv-webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrsteele/dotenv-webpack.git","remoteVersion":"8.0.1","installedVersion":"8.0.1","definedVersion":"^8.0.1","author":"Matt Steele (http://omnionline.us/)"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.0","installedVersion":"8.57.0","definedVersion":"8.57.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-config-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/standard/eslint-config-standard.git","remoteVersion":"17.1.0","installedVersion":"17.1.0","definedVersion":"^17.1.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-friendly-formatter","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/royriojas/eslint-friendly-formatter.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Roy Riojas http://royriojas.com"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.29.1","installedVersion":"2.29.1","definedVersion":"^2.29.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-n","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint-community/eslint-plugin-n.git","remoteVersion":"16.6.2","installedVersion":"16.6.2","definedVersion":"^16.6.2","author":"Toru Nagashima"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-promise","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/eslint-community/eslint-plugin-promise.git","remoteVersion":"6.1.1","installedVersion":"6.1.1","definedVersion":"^6.1.1","author":"jden "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/standard/eslint-plugin-standard.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/eslint-webpack-plugin.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"exports-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/exports-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"file-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/file-loader.git","remoteVersion":"6.2.0","installedVersion":"6.2.0","definedVersion":"^6.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/html-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jantimon/html-webpack-plugin.git","remoteVersion":"5.6.0","installedVersion":"5.6.0","definedVersion":"^5.5.3","author":"Jan Nicklas (https://github.com/jantimon)"},{"department":"kessler","relatedTo":"stuff","name":"mini-css-extract-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/mini-css-extract-plugin.git","remoteVersion":"2.8.1","installedVersion":"2.8.1","definedVersion":"^2.8.1","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"noop-loader","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/KnutHelland/noop-loader.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"Knut Helland"},{"department":"kessler","relatedTo":"stuff","name":"path","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/jinder/path.git","remoteVersion":"0.12.7","installedVersion":"0.12.7","definedVersion":"^0.12.7","author":"Joyent http://www.joyent.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.35","installedVersion":"8.4.35","definedVersion":"^8.4.35","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/postcss-loader.git","remoteVersion":"8.1.1","installedVersion":"8.1.1","definedVersion":"^8.1.1","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/AleshaOleg/postcss-sass.git","remoteVersion":"0.5.0","installedVersion":"0.5.0","definedVersion":"^0.5.0","author":"Oleh Aloshkin "},{"department":"kessler","relatedTo":"stuff","name":"precss","licensePeriod":"perpetual","material":"material","licenseType":"CC0-1.0","link":"git+https://github.com/jonathantneal/precss.git","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"Jonathan Neal "},{"department":"kessler","relatedTo":"stuff","name":"require-dir","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/aseemk/requireDir.git","remoteVersion":"1.2.0","installedVersion":"1.2.0","definedVersion":"^1.2.0","author":"Aseem Kishore "},{"department":"kessler","relatedTo":"stuff","name":"rimraf","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git://github.com/isaacs/rimraf.git","remoteVersion":"5.0.5","installedVersion":"5.0.5","definedVersion":"^5.0.1","author":"Isaac Z. Schlueter (http://blog.izs.me/)"},{"department":"kessler","relatedTo":"stuff","name":"sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sass/dart-sass.git","remoteVersion":"1.71.1","installedVersion":"1.71.1","definedVersion":"^1.71.1","author":"Natalie Weizenbaum nweiz@google.com https://github.com/nex3"},{"department":"kessler","relatedTo":"stuff","name":"sass-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/sass-loader.git","remoteVersion":"14.1.1","installedVersion":"14.1.1","definedVersion":"^14.1.1","author":"J. Tangelder"},{"department":"kessler","relatedTo":"stuff","name":"source-map-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/source-map-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stream-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/browserify/stream-browserify.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"James Halliday mail@substack.net http://substack.net"},{"department":"kessler","relatedTo":"stuff","name":"streamify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/fent/node-streamify.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"fent (https://github.com/fent)"},{"department":"kessler","relatedTo":"stuff","name":"style-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/style-loader.git","remoteVersion":"3.3.4","installedVersion":"3.3.4","definedVersion":"^3.3.4","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stylelint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint/stylelint.git","remoteVersion":"16.2.1","installedVersion":"16.2.1","definedVersion":"^16.2.1","author":"stylelint"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-config-recommended-scss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git","remoteVersion":"14.0.0","installedVersion":"14.0.0","definedVersion":"^14.0.0","author":"kristerkari"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/stylelint-webpack-plugin.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"svg-inline-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/sairion/svg-inline-loader.git","remoteVersion":"0.8.2","installedVersion":"0.8.2","definedVersion":"^0.8.2","author":"Jaeho Lee "},{"department":"kessler","relatedTo":"stuff","name":"terser-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/terser-webpack-plugin.git","remoteVersion":"5.3.10","installedVersion":"5.3.10","definedVersion":"^5.3.9","author":"webpack Contrib Team"},{"department":"kessler","relatedTo":"stuff","name":"url-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/url-loader.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webextension-polyfill","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/mozilla/webextension-polyfill.git","remoteVersion":"0.10.0","installedVersion":"0.10.0","definedVersion":"^0.10.0","author":"Mozilla"},{"department":"kessler","relatedTo":"stuff","name":"webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack.git","remoteVersion":"5.90.3","installedVersion":"5.90.3","definedVersion":"^5.90.3","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webpack-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack-cli.git","remoteVersion":"5.1.4","installedVersion":"5.1.4","definedVersion":"^5.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"webpack-node-externals","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/liady/webpack-node-externals.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"Liad Yosef https://github.com/liady"},{"department":"kessler","relatedTo":"stuff","name":"ws","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/websockets/ws.git","remoteVersion":"8.16.0","installedVersion":"8.16.0","definedVersion":"^8.14.1","author":"Einar Otto Stangvik (http://2x.io)"},{"department":"kessler","relatedTo":"stuff","name":"yarn-or-npm","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git@github.com:camacho/yarn-or-npm.git","remoteVersion":"3.0.1","installedVersion":"3.0.1","definedVersion":"^3.0.1","author":"Patrick Camacho "}] +[{"department":"kessler","relatedTo":"stuff","name":"@babel/runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.1","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"qrcode","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/soldair/node-qrcode.git","remoteVersion":"1.5.3","installedVersion":"1.5.3","definedVersion":"^1.5.3","author":"Ryan Day "},{"department":"kessler","relatedTo":"stuff","name":"uuid","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uuidjs/uuid.git","remoteVersion":"9.0.1","installedVersion":"9.0.1","definedVersion":"^9.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@babel/core","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/eslint-parser","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.1","installedVersion":"7.23.10","definedVersion":"^7.23.10","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/plugin-transform-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/preset-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.0","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/register","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.7","installedVersion":"7.23.7","definedVersion":"^7.22.15","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.19","installedVersion":"10.4.18","definedVersion":"^10.4.18","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"babel-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel-loader.git","remoteVersion":"9.1.3","installedVersion":"9.1.3","definedVersion":"^9.1.3","author":"Luis Couto "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-minify-booleans","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-debugger","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-preset-minify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-preset-minify","remoteVersion":"0.5.2","installedVersion":"0.5.2","definedVersion":"^0.5.2","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"browserslist","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/browserslist/browserslist.git","remoteVersion":"4.23.0","installedVersion":"4.23.0","definedVersion":"^4.23.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"copy-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/copy-webpack-plugin.git","remoteVersion":"12.0.2","installedVersion":"12.0.2","definedVersion":"^12.0.2","author":"Len Boyette"},{"department":"kessler","relatedTo":"stuff","name":"cross-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kentcdodds/cross-env.git","remoteVersion":"7.0.3","installedVersion":"7.0.3","definedVersion":"^7.0.3","author":"Kent C. Dodds (https://kentcdodds.com)"},{"department":"kessler","relatedTo":"stuff","name":"crypto-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/crypto-browserify/crypto-browserify.git","remoteVersion":"3.12.0","installedVersion":"3.12.0","definedVersion":"^3.12.0","author":"Dominic Tarr (dominictarr.com)"},{"department":"kessler","relatedTo":"stuff","name":"css-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-loader.git","remoteVersion":"6.10.0","installedVersion":"6.10.0","definedVersion":"^6.10.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"css-minimizer-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git","remoteVersion":"6.0.0","installedVersion":"6.0.0","definedVersion":"^6.0.0","author":"Loann Neveu"},{"department":"kessler","relatedTo":"stuff","name":"dotenv","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git://github.com/motdotla/dotenv.git","remoteVersion":"16.4.5","installedVersion":"16.4.5","definedVersion":"^16.4.5","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"dotenv-webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrsteele/dotenv-webpack.git","remoteVersion":"8.1.0","installedVersion":"8.0.1","definedVersion":"^8.0.1","author":"Matt Steele (http://omnionline.us/)"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.0","installedVersion":"8.57.0","definedVersion":"8.57.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-config-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/standard/eslint-config-standard.git","remoteVersion":"17.1.0","installedVersion":"17.1.0","definedVersion":"^17.1.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-friendly-formatter","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/royriojas/eslint-friendly-formatter.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Roy Riojas http://royriojas.com"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.29.1","installedVersion":"2.29.1","definedVersion":"^2.29.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-n","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint-community/eslint-plugin-n.git","remoteVersion":"16.6.2","installedVersion":"16.6.2","definedVersion":"^16.6.2","author":"Toru Nagashima"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-promise","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/eslint-community/eslint-plugin-promise.git","remoteVersion":"6.1.1","installedVersion":"6.1.1","definedVersion":"^6.1.1","author":"jden "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/standard/eslint-plugin-standard.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/eslint-webpack-plugin.git","remoteVersion":"4.1.0","installedVersion":"4.1.0","definedVersion":"^4.1.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"exports-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/exports-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"file-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/file-loader.git","remoteVersion":"6.2.0","installedVersion":"6.2.0","definedVersion":"^6.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/html-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jantimon/html-webpack-plugin.git","remoteVersion":"5.6.0","installedVersion":"5.6.0","definedVersion":"^5.5.3","author":"Jan Nicklas (https://github.com/jantimon)"},{"department":"kessler","relatedTo":"stuff","name":"mini-css-extract-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/mini-css-extract-plugin.git","remoteVersion":"2.8.1","installedVersion":"2.8.1","definedVersion":"^2.8.1","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"noop-loader","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/KnutHelland/noop-loader.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"Knut Helland"},{"department":"kessler","relatedTo":"stuff","name":"path","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/jinder/path.git","remoteVersion":"0.12.7","installedVersion":"0.12.7","definedVersion":"^0.12.7","author":"Joyent http://www.joyent.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.38","installedVersion":"8.4.36","definedVersion":"^8.4.36","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/postcss-loader.git","remoteVersion":"8.1.1","installedVersion":"8.1.1","definedVersion":"^8.1.1","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/AleshaOleg/postcss-sass.git","remoteVersion":"0.5.0","installedVersion":"0.5.0","definedVersion":"^0.5.0","author":"Oleh Aloshkin "},{"department":"kessler","relatedTo":"stuff","name":"precss","licensePeriod":"perpetual","material":"material","licenseType":"CC0-1.0","link":"git+https://github.com/jonathantneal/precss.git","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"Jonathan Neal "},{"department":"kessler","relatedTo":"stuff","name":"require-dir","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/aseemk/requireDir.git","remoteVersion":"1.2.0","installedVersion":"1.2.0","definedVersion":"^1.2.0","author":"Aseem Kishore "},{"department":"kessler","relatedTo":"stuff","name":"rimraf","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git://github.com/isaacs/rimraf.git","remoteVersion":"5.0.5","installedVersion":"5.0.5","definedVersion":"^5.0.1","author":"Isaac Z. Schlueter (http://blog.izs.me/)"},{"department":"kessler","relatedTo":"stuff","name":"sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sass/dart-sass.git","remoteVersion":"1.72.0","installedVersion":"1.72.0","definedVersion":"^1.72.0","author":"Natalie Weizenbaum nweiz@google.com https://github.com/nex3"},{"department":"kessler","relatedTo":"stuff","name":"sass-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/sass-loader.git","remoteVersion":"14.1.1","installedVersion":"14.1.1","definedVersion":"^14.1.1","author":"J. Tangelder"},{"department":"kessler","relatedTo":"stuff","name":"source-map-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/source-map-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stream-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/browserify/stream-browserify.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"James Halliday mail@substack.net http://substack.net"},{"department":"kessler","relatedTo":"stuff","name":"streamify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/fent/node-streamify.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"fent (https://github.com/fent)"},{"department":"kessler","relatedTo":"stuff","name":"style-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/style-loader.git","remoteVersion":"3.3.4","installedVersion":"3.3.4","definedVersion":"^3.3.4","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stylelint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint/stylelint.git","remoteVersion":"16.3.0","installedVersion":"16.2.1","definedVersion":"^16.2.1","author":"stylelint"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-config-recommended-scss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git","remoteVersion":"14.0.0","installedVersion":"14.0.0","definedVersion":"^14.0.0","author":"kristerkari"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/stylelint-webpack-plugin.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"svg-inline-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/sairion/svg-inline-loader.git","remoteVersion":"0.8.2","installedVersion":"0.8.2","definedVersion":"^0.8.2","author":"Jaeho Lee "},{"department":"kessler","relatedTo":"stuff","name":"terser-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/terser-webpack-plugin.git","remoteVersion":"5.3.10","installedVersion":"5.3.10","definedVersion":"^5.3.9","author":"webpack Contrib Team"},{"department":"kessler","relatedTo":"stuff","name":"url-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/url-loader.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webextension-polyfill","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/mozilla/webextension-polyfill.git","remoteVersion":"0.10.0","installedVersion":"0.10.0","definedVersion":"^0.10.0","author":"Mozilla"},{"department":"kessler","relatedTo":"stuff","name":"webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack.git","remoteVersion":"5.91.0","installedVersion":"5.90.3","definedVersion":"^5.90.3","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webpack-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack-cli.git","remoteVersion":"5.1.4","installedVersion":"5.1.4","definedVersion":"^5.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"webpack-node-externals","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/liady/webpack-node-externals.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"Liad Yosef https://github.com/liady"},{"department":"kessler","relatedTo":"stuff","name":"ws","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/websockets/ws.git","remoteVersion":"8.16.0","installedVersion":"8.16.0","definedVersion":"^8.14.1","author":"Einar Otto Stangvik (http://2x.io)"},{"department":"kessler","relatedTo":"stuff","name":"yarn-or-npm","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git@github.com:camacho/yarn-or-npm.git","remoteVersion":"3.0.1","installedVersion":"3.0.1","definedVersion":"^3.0.1","author":"Patrick Camacho "}] +[{"department":"kessler","relatedTo":"stuff","name":"@babel/runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.1","installedVersion":"7.24.1","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"qrcode","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/soldair/node-qrcode.git","remoteVersion":"1.5.3","installedVersion":"1.5.3","definedVersion":"^1.5.3","author":"Ryan Day "},{"department":"kessler","relatedTo":"stuff","name":"uuid","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uuidjs/uuid.git","remoteVersion":"9.0.1","installedVersion":"9.0.1","definedVersion":"^9.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@babel/core","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.3","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/eslint-parser","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.1","installedVersion":"7.24.1","definedVersion":"^7.23.10","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/plugin-transform-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.3","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/preset-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.3","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/register","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.7","installedVersion":"7.23.7","definedVersion":"^7.22.15","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.19","installedVersion":"10.4.19","definedVersion":"^10.4.18","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"babel-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel-loader.git","remoteVersion":"9.1.3","installedVersion":"9.1.3","definedVersion":"^9.1.3","author":"Luis Couto "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-minify-booleans","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-debugger","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-preset-minify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-preset-minify","remoteVersion":"0.5.2","installedVersion":"0.5.2","definedVersion":"^0.5.2","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"browserslist","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/browserslist/browserslist.git","remoteVersion":"4.23.0","installedVersion":"4.23.0","definedVersion":"^4.23.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"copy-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/copy-webpack-plugin.git","remoteVersion":"12.0.2","installedVersion":"12.0.2","definedVersion":"^12.0.2","author":"Len Boyette"},{"department":"kessler","relatedTo":"stuff","name":"cross-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kentcdodds/cross-env.git","remoteVersion":"7.0.3","installedVersion":"7.0.3","definedVersion":"^7.0.3","author":"Kent C. Dodds (https://kentcdodds.com)"},{"department":"kessler","relatedTo":"stuff","name":"crypto-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/crypto-browserify/crypto-browserify.git","remoteVersion":"3.12.0","installedVersion":"3.12.0","definedVersion":"^3.12.0","author":"Dominic Tarr (dominictarr.com)"},{"department":"kessler","relatedTo":"stuff","name":"css-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-loader.git","remoteVersion":"6.10.0","installedVersion":"6.10.0","definedVersion":"^6.10.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"css-minimizer-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git","remoteVersion":"6.0.0","installedVersion":"6.0.0","definedVersion":"^6.0.0","author":"Loann Neveu"},{"department":"kessler","relatedTo":"stuff","name":"dotenv","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git://github.com/motdotla/dotenv.git","remoteVersion":"16.4.5","installedVersion":"16.4.5","definedVersion":"^16.4.5","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"dotenv-webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrsteele/dotenv-webpack.git","remoteVersion":"8.1.0","installedVersion":"8.1.0","definedVersion":"^8.0.1","author":"Matt Steele (http://omnionline.us/)"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.0","installedVersion":"8.57.0","definedVersion":"8.57.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-config-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/standard/eslint-config-standard.git","remoteVersion":"17.1.0","installedVersion":"17.1.0","definedVersion":"^17.1.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-friendly-formatter","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/royriojas/eslint-friendly-formatter.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Roy Riojas http://royriojas.com"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.29.1","installedVersion":"2.29.1","definedVersion":"^2.29.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-n","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint-community/eslint-plugin-n.git","remoteVersion":"16.6.2","installedVersion":"16.6.2","definedVersion":"^16.6.2","author":"Toru Nagashima"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-promise","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/eslint-community/eslint-plugin-promise.git","remoteVersion":"6.1.1","installedVersion":"6.1.1","definedVersion":"^6.1.1","author":"jden "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/standard/eslint-plugin-standard.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/eslint-webpack-plugin.git","remoteVersion":"4.1.0","installedVersion":"4.1.0","definedVersion":"^4.1.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"exports-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/exports-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"file-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/file-loader.git","remoteVersion":"6.2.0","installedVersion":"6.2.0","definedVersion":"^6.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/html-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jantimon/html-webpack-plugin.git","remoteVersion":"5.6.0","installedVersion":"5.6.0","definedVersion":"^5.5.3","author":"Jan Nicklas (https://github.com/jantimon)"},{"department":"kessler","relatedTo":"stuff","name":"mini-css-extract-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/mini-css-extract-plugin.git","remoteVersion":"2.8.1","installedVersion":"2.8.1","definedVersion":"^2.8.1","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"noop-loader","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/KnutHelland/noop-loader.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"Knut Helland"},{"department":"kessler","relatedTo":"stuff","name":"path","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/jinder/path.git","remoteVersion":"0.12.7","installedVersion":"0.12.7","definedVersion":"^0.12.7","author":"Joyent http://www.joyent.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.38","installedVersion":"8.4.38","definedVersion":"^8.4.36","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/postcss-loader.git","remoteVersion":"8.1.1","installedVersion":"8.1.1","definedVersion":"^8.1.1","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/AleshaOleg/postcss-sass.git","remoteVersion":"0.5.0","installedVersion":"0.5.0","definedVersion":"^0.5.0","author":"Oleh Aloshkin "},{"department":"kessler","relatedTo":"stuff","name":"precss","licensePeriod":"perpetual","material":"material","licenseType":"CC0-1.0","link":"git+https://github.com/jonathantneal/precss.git","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"Jonathan Neal "},{"department":"kessler","relatedTo":"stuff","name":"require-dir","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/aseemk/requireDir.git","remoteVersion":"1.2.0","installedVersion":"1.2.0","definedVersion":"^1.2.0","author":"Aseem Kishore "},{"department":"kessler","relatedTo":"stuff","name":"rimraf","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git://github.com/isaacs/rimraf.git","remoteVersion":"5.0.5","installedVersion":"5.0.5","definedVersion":"^5.0.1","author":"Isaac Z. Schlueter (http://blog.izs.me/)"},{"department":"kessler","relatedTo":"stuff","name":"sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sass/dart-sass.git","remoteVersion":"1.72.0","installedVersion":"1.72.0","definedVersion":"^1.72.0","author":"Natalie Weizenbaum nweiz@google.com https://github.com/nex3"},{"department":"kessler","relatedTo":"stuff","name":"sass-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/sass-loader.git","remoteVersion":"14.1.1","installedVersion":"14.1.1","definedVersion":"^14.1.1","author":"J. Tangelder"},{"department":"kessler","relatedTo":"stuff","name":"source-map-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/source-map-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stream-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/browserify/stream-browserify.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"James Halliday mail@substack.net http://substack.net"},{"department":"kessler","relatedTo":"stuff","name":"streamify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/fent/node-streamify.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"fent (https://github.com/fent)"},{"department":"kessler","relatedTo":"stuff","name":"style-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/style-loader.git","remoteVersion":"3.3.4","installedVersion":"3.3.4","definedVersion":"^3.3.4","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stylelint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint/stylelint.git","remoteVersion":"16.3.1","installedVersion":"16.3.0","definedVersion":"^16.2.1","author":"stylelint"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-config-recommended-scss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git","remoteVersion":"14.0.0","installedVersion":"14.0.0","definedVersion":"^14.0.0","author":"kristerkari"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/stylelint-webpack-plugin.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"svg-inline-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/sairion/svg-inline-loader.git","remoteVersion":"0.8.2","installedVersion":"0.8.2","definedVersion":"^0.8.2","author":"Jaeho Lee "},{"department":"kessler","relatedTo":"stuff","name":"terser-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/terser-webpack-plugin.git","remoteVersion":"5.3.10","installedVersion":"5.3.10","definedVersion":"^5.3.9","author":"webpack Contrib Team"},{"department":"kessler","relatedTo":"stuff","name":"url-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/url-loader.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webextension-polyfill","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/mozilla/webextension-polyfill.git","remoteVersion":"0.10.0","installedVersion":"0.10.0","definedVersion":"^0.10.0","author":"Mozilla"},{"department":"kessler","relatedTo":"stuff","name":"webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack.git","remoteVersion":"5.91.0","installedVersion":"5.91.0","definedVersion":"^5.90.3","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webpack-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack-cli.git","remoteVersion":"5.1.4","installedVersion":"5.1.4","definedVersion":"^5.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"webpack-node-externals","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/liady/webpack-node-externals.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"Liad Yosef https://github.com/liady"},{"department":"kessler","relatedTo":"stuff","name":"ws","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/websockets/ws.git","remoteVersion":"8.16.0","installedVersion":"8.16.0","definedVersion":"^8.14.1","author":"Einar Otto Stangvik (http://2x.io)"},{"department":"kessler","relatedTo":"stuff","name":"yarn-or-npm","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git@github.com:camacho/yarn-or-npm.git","remoteVersion":"3.0.1","installedVersion":"3.0.1","definedVersion":"^3.0.1","author":"Patrick Camacho "}] +[{"department":"kessler","relatedTo":"stuff","name":"@babel/runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.1","installedVersion":"7.24.1","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"qrcode","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/soldair/node-qrcode.git","remoteVersion":"1.5.3","installedVersion":"1.5.3","definedVersion":"^1.5.3","author":"Ryan Day "},{"department":"kessler","relatedTo":"stuff","name":"uuid","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/uuidjs/uuid.git","remoteVersion":"9.0.1","installedVersion":"9.0.1","definedVersion":"^9.0.0","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"@babel/core","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.3","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/eslint-parser","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.1","installedVersion":"7.24.1","definedVersion":"^7.23.10","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/plugin-transform-runtime","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.3","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/preset-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.24.3","installedVersion":"7.24.3","definedVersion":"^7.24.0","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"@babel/register","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel.git","remoteVersion":"7.23.7","installedVersion":"7.23.7","definedVersion":"^7.22.15","author":"The Babel Team (https://babel.dev/team)"},{"department":"kessler","relatedTo":"stuff","name":"autoprefixer","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/autoprefixer.git","remoteVersion":"10.4.19","installedVersion":"10.4.19","definedVersion":"^10.4.18","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"babel-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/babel-loader.git","remoteVersion":"9.1.3","installedVersion":"9.1.3","definedVersion":"^9.1.3","author":"Luis Couto "},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-minify-booleans","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-minify-booleans","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-plugin-transform-remove-debugger","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-plugin-transform-remove-debugger","remoteVersion":"6.9.4","installedVersion":"6.9.4","definedVersion":"^6.9.4","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"babel-preset-minify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"https://github.com/babel/minify/tree/master/packages/babel-preset-minify","remoteVersion":"0.5.2","installedVersion":"0.5.2","definedVersion":"^0.5.2","author":"amasad"},{"department":"kessler","relatedTo":"stuff","name":"browserslist","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/browserslist/browserslist.git","remoteVersion":"4.23.0","installedVersion":"4.23.0","definedVersion":"^4.23.0","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"copy-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/copy-webpack-plugin.git","remoteVersion":"12.0.2","installedVersion":"12.0.2","definedVersion":"^12.0.2","author":"Len Boyette"},{"department":"kessler","relatedTo":"stuff","name":"cross-env","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/kentcdodds/cross-env.git","remoteVersion":"7.0.3","installedVersion":"7.0.3","definedVersion":"^7.0.3","author":"Kent C. Dodds (https://kentcdodds.com)"},{"department":"kessler","relatedTo":"stuff","name":"crypto-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/crypto-browserify/crypto-browserify.git","remoteVersion":"3.12.0","installedVersion":"3.12.0","definedVersion":"^3.12.0","author":"Dominic Tarr (dominictarr.com)"},{"department":"kessler","relatedTo":"stuff","name":"css-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-loader.git","remoteVersion":"6.10.0","installedVersion":"6.10.0","definedVersion":"^6.10.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"css-minimizer-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/css-minimizer-webpack-plugin.git","remoteVersion":"6.0.0","installedVersion":"6.0.0","definedVersion":"^6.0.0","author":"Loann Neveu"},{"department":"kessler","relatedTo":"stuff","name":"dotenv","licensePeriod":"perpetual","material":"material","licenseType":"BSD-2-Clause","link":"git://github.com/motdotla/dotenv.git","remoteVersion":"16.4.5","installedVersion":"16.4.5","definedVersion":"^16.4.5","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"dotenv-webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/mrsteele/dotenv-webpack.git","remoteVersion":"8.1.0","installedVersion":"8.1.0","definedVersion":"^8.0.1","author":"Matt Steele (http://omnionline.us/)"},{"department":"kessler","relatedTo":"stuff","name":"eslint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint/eslint.git","remoteVersion":"8.57.0","installedVersion":"8.57.0","definedVersion":"8.57.0","author":"Nicholas C. Zakas "},{"department":"kessler","relatedTo":"stuff","name":"eslint-config-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/standard/eslint-config-standard.git","remoteVersion":"17.1.0","installedVersion":"17.1.0","definedVersion":"^17.1.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-friendly-formatter","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/royriojas/eslint-friendly-formatter.git","remoteVersion":"4.0.1","installedVersion":"4.0.1","definedVersion":"^4.0.1","author":"Roy Riojas http://royriojas.com"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-import","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/import-js/eslint-plugin-import.git","remoteVersion":"2.29.1","installedVersion":"2.29.1","definedVersion":"^2.29.0","author":"Ben Mosher "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-n","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/eslint-community/eslint-plugin-n.git","remoteVersion":"16.6.2","installedVersion":"16.6.2","definedVersion":"^16.6.2","author":"Toru Nagashima"},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-promise","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/eslint-community/eslint-plugin-promise.git","remoteVersion":"6.1.1","installedVersion":"6.1.1","definedVersion":"^6.1.1","author":"jden "},{"department":"kessler","relatedTo":"stuff","name":"eslint-plugin-standard","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/standard/eslint-plugin-standard.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Feross Aboukhadijeh feross@feross.org https://feross.org"},{"department":"kessler","relatedTo":"stuff","name":"eslint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/eslint-webpack-plugin.git","remoteVersion":"4.1.0","installedVersion":"4.1.0","definedVersion":"^4.1.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"exports-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/exports-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"file-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/file-loader.git","remoteVersion":"6.2.0","installedVersion":"6.2.0","definedVersion":"^6.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/html-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"html-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/jantimon/html-webpack-plugin.git","remoteVersion":"5.6.0","installedVersion":"5.6.0","definedVersion":"^5.5.3","author":"Jan Nicklas (https://github.com/jantimon)"},{"department":"kessler","relatedTo":"stuff","name":"mini-css-extract-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/mini-css-extract-plugin.git","remoteVersion":"2.8.1","installedVersion":"2.8.1","definedVersion":"^2.8.1","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"noop-loader","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git+https://github.com/KnutHelland/noop-loader.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"Knut Helland"},{"department":"kessler","relatedTo":"stuff","name":"path","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/jinder/path.git","remoteVersion":"0.12.7","installedVersion":"0.12.7","definedVersion":"^0.12.7","author":"Joyent http://www.joyent.com"},{"department":"kessler","relatedTo":"stuff","name":"postcss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/postcss/postcss.git","remoteVersion":"8.4.38","installedVersion":"8.4.38","definedVersion":"^8.4.36","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/postcss-loader.git","remoteVersion":"8.1.1","installedVersion":"8.1.1","definedVersion":"^8.1.1","author":"Andrey Sitnik "},{"department":"kessler","relatedTo":"stuff","name":"postcss-sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/AleshaOleg/postcss-sass.git","remoteVersion":"0.5.0","installedVersion":"0.5.0","definedVersion":"^0.5.0","author":"Oleh Aloshkin "},{"department":"kessler","relatedTo":"stuff","name":"precss","licensePeriod":"perpetual","material":"material","licenseType":"CC0-1.0","link":"git+https://github.com/jonathantneal/precss.git","remoteVersion":"4.0.0","installedVersion":"4.0.0","definedVersion":"^4.0.0","author":"Jonathan Neal "},{"department":"kessler","relatedTo":"stuff","name":"require-dir","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/aseemk/requireDir.git","remoteVersion":"1.2.0","installedVersion":"1.2.0","definedVersion":"^1.2.0","author":"Aseem Kishore "},{"department":"kessler","relatedTo":"stuff","name":"rimraf","licensePeriod":"perpetual","material":"material","licenseType":"ISC","link":"git://github.com/isaacs/rimraf.git","remoteVersion":"5.0.5","installedVersion":"5.0.5","definedVersion":"^5.0.1","author":"Isaac Z. Schlueter (http://blog.izs.me/)"},{"department":"kessler","relatedTo":"stuff","name":"sass","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/sass/dart-sass.git","remoteVersion":"1.72.0","installedVersion":"1.72.0","definedVersion":"^1.72.0","author":"Natalie Weizenbaum nweiz@google.com https://github.com/nex3"},{"department":"kessler","relatedTo":"stuff","name":"sass-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/sass-loader.git","remoteVersion":"14.1.1","installedVersion":"14.1.1","definedVersion":"^14.1.1","author":"J. Tangelder"},{"department":"kessler","relatedTo":"stuff","name":"source-map-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/source-map-loader.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stream-browserify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/browserify/stream-browserify.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"James Halliday mail@substack.net http://substack.net"},{"department":"kessler","relatedTo":"stuff","name":"streamify","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git://github.com/fent/node-streamify.git","remoteVersion":"1.0.0","installedVersion":"1.0.0","definedVersion":"^1.0.0","author":"fent (https://github.com/fent)"},{"department":"kessler","relatedTo":"stuff","name":"style-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/style-loader.git","remoteVersion":"3.3.4","installedVersion":"3.3.4","definedVersion":"^3.3.4","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"stylelint","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint/stylelint.git","remoteVersion":"16.3.1","installedVersion":"16.3.0","definedVersion":"^16.2.1","author":"stylelint"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-config-recommended-scss","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/stylelint-scss/stylelint-config-recommended-scss.git","remoteVersion":"14.0.0","installedVersion":"14.0.0","definedVersion":"^14.0.0","author":"kristerkari"},{"department":"kessler","relatedTo":"stuff","name":"stylelint-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/stylelint-webpack-plugin.git","remoteVersion":"5.0.0","installedVersion":"5.0.0","definedVersion":"^5.0.0","author":"Ricardo Gobbo de Souza "},{"department":"kessler","relatedTo":"stuff","name":"svg-inline-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+ssh://git@github.com/sairion/svg-inline-loader.git","remoteVersion":"0.8.2","installedVersion":"0.8.2","definedVersion":"^0.8.2","author":"Jaeho Lee "},{"department":"kessler","relatedTo":"stuff","name":"terser-webpack-plugin","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/terser-webpack-plugin.git","remoteVersion":"5.3.10","installedVersion":"5.3.10","definedVersion":"^5.3.9","author":"webpack Contrib Team"},{"department":"kessler","relatedTo":"stuff","name":"url-loader","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack-contrib/url-loader.git","remoteVersion":"4.1.1","installedVersion":"4.1.1","definedVersion":"^4.1.0","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webextension-polyfill","licensePeriod":"perpetual","material":"material","licenseType":"MPL-2.0","link":"git+https://github.com/mozilla/webextension-polyfill.git","remoteVersion":"0.10.0","installedVersion":"0.10.0","definedVersion":"^0.10.0","author":"Mozilla"},{"department":"kessler","relatedTo":"stuff","name":"webpack","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack.git","remoteVersion":"5.91.0","installedVersion":"5.91.0","definedVersion":"^5.90.3","author":"Tobias Koppers @sokra"},{"department":"kessler","relatedTo":"stuff","name":"webpack-cli","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/webpack/webpack-cli.git","remoteVersion":"5.1.4","installedVersion":"5.1.4","definedVersion":"^5.1.4","author":"n/a"},{"department":"kessler","relatedTo":"stuff","name":"webpack-node-externals","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/liady/webpack-node-externals.git","remoteVersion":"3.0.0","installedVersion":"3.0.0","definedVersion":"^3.0.0","author":"Liad Yosef https://github.com/liady"},{"department":"kessler","relatedTo":"stuff","name":"ws","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git+https://github.com/websockets/ws.git","remoteVersion":"8.16.0","installedVersion":"8.16.0","definedVersion":"^8.14.1","author":"Einar Otto Stangvik (http://2x.io)"},{"department":"kessler","relatedTo":"stuff","name":"yarn-or-npm","licensePeriod":"perpetual","material":"material","licenseType":"MIT","link":"git@github.com:camacho/yarn-or-npm.git","remoteVersion":"3.0.1","installedVersion":"3.0.1","definedVersion":"^3.0.1","author":"Patrick Camacho "}] diff --git a/package.json b/package.json index a374708..84c0cc6 100644 --- a/package.json +++ b/package.json @@ -1,9 +1,9 @@ { "name": "2fas-browser-extension", - "version": "1.6.4", + "version": "1.7.0", "description": "This is the official Browser Extension for the Open Source 2FAS project.", "engines": { - "node": "20.9.0" + "node": "20.11.1" }, "scripts": { "clean": "npx -y rimraf --glob ./public/*", @@ -23,7 +23,7 @@ "safari-dev": "yon clean && yon generate-locales && npx -y cross-env EXT_PLATFORM=Safari node_modules/.bin/webpack --mode development --progress --config webpack/development.config.js", "safari-prod": "yon clean && yon generate-locales && yon browserlist-update && npx -y cross-env EXT_PLATFORM=Safari NODE_ENV=production node_modules/.bin/webpack --mode production --progress --config webpack/production.config.js", "all-build": "npx -y rimraf --glob ./build/* && yon generate-license-info && yon chrome-build && yon opera-build && yon firefox-build && yon edge-build", - "browserlist-update": "npx -y update-browserslist-db@latest", + "browserlist-update": "npx -y browserslist@latest --update-db", "loco-export": "node webpack/utils/locoExport.js", "loco-import": "node webpack/utils/locoImport.js", "check-build-directory": "node webpack/utils/checkBuildDirectoryExists.js", @@ -76,7 +76,7 @@ "eslint-plugin-n": "^16.6.2", "eslint-plugin-promise": "^6.1.1", "eslint-plugin-standard": "^5.0.0", - "eslint-webpack-plugin": "^4.0.1", + "eslint-webpack-plugin": "^4.1.0", "exports-loader": "^5.0.0", "file-loader": "^6.0.0", "html-loader": "^5.0.0", @@ -84,13 +84,13 @@ "mini-css-extract-plugin": "^2.8.1", "noop-loader": "^1.0.0", "path": "^0.12.7", - "postcss": "^8.4.35", + "postcss": "^8.4.36", "postcss-loader": "^8.1.1", "postcss-sass": "^0.5.0", "precss": "^4.0.0", "require-dir": "^1.2.0", "rimraf": "^5.0.1", - "sass": "^1.71.1", + "sass": "^1.72.0", "sass-loader": "^14.1.1", "source-map-loader": "^5.0.0", "stream-browserify": "^3.0.0", diff --git a/src/_locales/en/notifications.json b/src/_locales/en/notifications.json index c0dcb06..70d01af 100644 --- a/src/_locales/en/notifications.json +++ b/src/_locales/en/notifications.json @@ -35,10 +35,10 @@ "errorStorageIntegrityMessage": "Please reinstall browser extension or contact with 2FAS Support on Discord", "warningTooSoonTitle": "Wait a moment", "warningTooSoonMessage": "Please wait DIFF seconds before sending another request.", - "warningSelectInputTitle": "Select the text field first", - "warningSelectInputMessage": "Select the text field for the 2FA token then click the extension icon or use the chosen shortcut.", "successPushSentTitle": "Push sent", "successPushSentMessage": "Please check your phone and accept your login request.", + "successPushSentClipboardTitle": "Push sent", + "successPushSentClipboardMessage": "Please check your phone and accept your login request. Copy your token and paste it into the correct input on the website.", "successExtNameUpdatedTitle": "Success", "successExtNameUpdatedMessage": "Extension name updated", "successDeviceDisconnectedTitle": "Success", @@ -56,6 +56,8 @@ "infoUnsupportedProtocolMessage": "Only HTTP and HTTPS protocols are supported by 2FAS Extension", "infoBrowserActionWithoutTabTitle": "Info", "infoBrowserActionWithoutTabMessage": "Using outside the browser is not supported by 2FAS Extension", + "infoCopiedToClipboardTitle": "Successfully copied to clipboard", + "infoCopiedToClipboardMessage": "You can now paste the token into the input field", "infoTestTitle": "2FAS Notification", "infoTestMessage": "Hi! This is just a test" } \ No newline at end of file diff --git a/src/_locales/en/token.json b/src/_locales/en/token.json new file mode 100644 index 0000000..69c256f --- /dev/null +++ b/src/_locales/en/token.json @@ -0,0 +1,6 @@ +{ + "tokenHeader": "Your token", + "tokenCopy": "Copy", + "tokenCopied": "Copied", + "tokenDescription": "Copy the token and paste it in the input field. The token will expire in 30 seconds." +} diff --git a/src/content/observer/observerFunctions/getChildNodes.js b/src/background/functions/handleFrontElement.js similarity index 50% rename from src/content/observer/observerFunctions/getChildNodes.js rename to src/background/functions/handleFrontElement.js index a4f0931..8c9cf02 100644 --- a/src/content/observer/observerFunctions/getChildNodes.js +++ b/src/background/functions/handleFrontElement.js @@ -17,13 +17,25 @@ // along with this program. If not, see // -/* global HTMLElement */ -const getChildNodes = node => { - if (!(node instanceof HTMLElement)) { - return []; +const config = require('../../config'); +const TwoFasNotification = require('../../notification'); +const saveToLocalStorage = require('../../localStorage/saveToLocalStorage'); + +const handleFrontElement = async (activeElements, tabId, storage) => { + let properElements = []; + + if (activeElements && activeElements.length > 0) { + properElements = activeElements.filter(el => el.id && (el.nodeName === 'input' || el.nodeName === 'textarea')); } - return Array.from(node.getElementsByTagName('*')); + if (properElements.length > 0) { + const tabData = storage[`tabData-${tabId}`] || {}; + tabData.lastFocusedInput = properElements[0].id; + await saveToLocalStorage({ [`tabData-${tabId}`]: tabData }, storage); + return TwoFasNotification.show(config.Texts.Success.PushSent, tabId); + } + + return TwoFasNotification.show(config.Texts.Success.PushSentClipboard, tabId); }; -module.exports = getChildNodes; +module.exports = handleFrontElement; diff --git a/src/background/functions/index.js b/src/background/functions/index.js index bcea189..dcb34ed 100644 --- a/src/background/functions/index.js +++ b/src/background/functions/index.js @@ -32,6 +32,7 @@ exports.dummyGetLocalStorage = require('./dummyGetLocalStorage'); exports.generateDefaultStorage = require('./generateDefaultStorage'); exports.getBrowserInfo = require('./getBrowserInfo'); exports.getOSName = require('./getOSName'); +exports.handleFrontElement = require('./handleFrontElement'); exports.initBEAction = require('./initBEAction'); exports.onCommand = require('./onCommand'); exports.onConnect = require('./onConnect'); @@ -41,6 +42,7 @@ exports.onMessage = require('./onMessage'); exports.onStartup = require('./onStartup'); exports.openBrowserPage = require('./openBrowserPage'); exports.openInstallPage = require('./openInstallPage'); +exports.sendMessageToAllFrames = require('./sendMessageToAllFrames'); exports.sendNotificationInfo = require('./sendNotificationInfo'); exports.setIcon = require('./setIcon'); exports.subscribeChannel = require('./subscribeChannel'); diff --git a/src/background/functions/initBEAction.js b/src/background/functions/initBEAction.js index ee8d87f..b7446e6 100644 --- a/src/background/functions/initBEAction.js +++ b/src/background/functions/initBEAction.js @@ -23,6 +23,8 @@ const subscribeChannel = require('./subscribeChannel'); const TwoFasNotification = require('../../notification'); const SDK = require('../../sdk'); const storeLog = require('../../partials/storeLog'); +const sendMessageToAllFrames = require('./sendMessageToAllFrames'); +const handleFrontElement = require('./handleFrontElement'); const initBEAction = (url, tab, storageData) => { const now = new Date().getTime(); @@ -36,10 +38,6 @@ const initBEAction = (url, tab, storageData) => { const tabData = storage[`tabData-${tab.id}`]; - if (!storage[`tabData-${tab?.id}`]?.lastFocusedInput) { - return TwoFasNotification.show(config.Texts.Warning.SelectInput, tab?.id); - } - if (!storage[`tabData-${tab?.id}`]?.lastAction) { condition = true; } else { @@ -71,7 +69,8 @@ const initBEAction = (url, tab, storageData) => { }); }) .then(channel => channel.connect()) - .then(() => TwoFasNotification.show(config.Texts.Success.PushSent, tab?.id)) + .then(() => sendMessageToAllFrames(tab?.id, { action: 'getActiveElement' })) + .then(elements => handleFrontElement(elements, tab?.id, storage)) .catch(async err => { await storeLog('error', 5, err, tabData?.url); return TwoFasNotification.show(config.Texts.Error.UndefinedError, tab?.id); diff --git a/src/background/functions/onMessage.js b/src/background/functions/onMessage.js index 28545e4..cbaf0b6 100644 --- a/src/background/functions/onMessage.js +++ b/src/background/functions/onMessage.js @@ -21,6 +21,7 @@ const getBrowserInfo = require('./getBrowserInfo'); const generateDefaultStorage = require('./generateDefaultStorage'); const storeLog = require('../../partials/storeLog'); +const TwoFasNotification = require('../../notification'); const onMessage = (request, sender) => { return new Promise(resolve => { @@ -56,6 +57,14 @@ const onMessage = (request, sender) => { .catch(async err => await storeLog('error', 37, err, 'storageReset')); } + case 'notificationOnBackground': { + if (!request.data) { + return resolve({ status: 'No data' }); + } + + return TwoFasNotification.show(request.data, request.tabID); + } + default: { return resolve({ status: 'Empty action' }); } diff --git a/src/content/functions/addInputListener.js b/src/background/functions/sendMessageToAllFrames.js similarity index 58% rename from src/content/functions/addInputListener.js rename to src/background/functions/sendMessageToAllFrames.js index a554787..8c6537b 100644 --- a/src/content/functions/addInputListener.js +++ b/src/background/functions/sendMessageToAllFrames.js @@ -17,29 +17,30 @@ // along with this program. If not, see // -const updateEventListener = require('./updateEventListener'); -const inputFocus = require('./inputFocus'); +const browser = require('webextension-polyfill'); -const addInputListener = (elements, tabID) => { - if (!Array.isArray(elements) || elements?.length <= 0) { - return false; - } - - let func = event => inputFocus(event, tabID); +const sendMessageToAllFrames = async (tabId, message) => { + const frames = await browser.webNavigation.getAllFrames({ tabId }); - elements.map(input => { - if (input?.dataset?.twofasInputListener === 'true' && input?.dataset.twofasInput) { - if (input === document.activeElement || input.matches(':focus')) { - return func({ target: input }); - } else { + return Promise.all(frames.map(frame => { + return browser.tabs.sendMessage(tabId, message, { frameId: frame.frameId }).catch(() => Promise.resolve(false)); + })).then(res => { + return res.map(frame => { + if (!frame) { return false; } - } - return updateEventListener(input, func); - }); - - func = null; + switch (frame?.status) { + case 'activeElement': { + return frame; + } + + default: { + return false; + } + } + }); + }).catch(() => false); }; -module.exports = addInputListener; +module.exports = sendMessageToAllFrames; diff --git a/src/config.js b/src/config.js index 6e6a19d..3876244 100644 --- a/src/config.js +++ b/src/config.js @@ -23,7 +23,7 @@ const t = require('./_locales/en/notifications.json'); const config = { WebSocketTimeout: 3, // in minutes ResendPushTimeout: 10, // in seconds - ExtensionVersion: '1.6.4', + ExtensionVersion: '1.7.0', Texts: { Error: { @@ -104,10 +104,6 @@ const config = { Title: browser.i18n.getMessage('warningTooSoonTitle') || t.warningTooSoonTitle, Message: (browser.i18n.getMessage('warningTooSoonMessage') || t.warningTooSoonMessage).replace('DIFF', 10 - Math.round(diff)) } - }, - SelectInput: { - Title: browser.i18n.getMessage('warningSelectInputTitle') || t.warningSelectInputTitle, - Message: browser.i18n.getMessage('warningSelectInputMessage') || t.warningSelectInputMessage } }, Success: { @@ -115,6 +111,10 @@ const config = { Title: browser.i18n.getMessage('successPushSentTitle') || t.successPushSentTitle, Message: browser.i18n.getMessage('successPushSentMessage') || t.successPushSentMessage }, + PushSentClipboard: { + Title: browser.i18n.getMessage('successPushSentClipboardTitle') || t.successPushSentClipboardTitle, + Message: browser.i18n.getMessage('successPushSentClipboardMessage') || t.successPushSentClipboardMessage + }, ExtNameUpdated: { Title: browser.i18n.getMessage('successExtNameUpdatedTitle') || t.successExtNameUpdatedTitle, Message: browser.i18n.getMessage('successExtNameUpdatedMessage') || t.successExtNameUpdatedMessage @@ -150,10 +150,20 @@ const config = { Title: browser.i18n.getMessage('infoBrowserActionWithoutTabTitle') || t.infoBrowserActionWithoutTabTitle, Message: browser.i18n.getMessage('infoBrowserActionWithoutTabMessage') || t.infoBrowserActionWithoutTabMessage }, + CopiedToClipboard: { + Title: browser.i18n.getMessage('infoCopiedToClipboardTitle') || t.infoCopiedToClipboardTitle, + Message: browser.i18n.getMessage('infoCopiedToClipboardMessage') || t.infoCopiedToClipboardMessage + }, Test: { Title: browser.i18n.getMessage('infoTestTitle') || t.infoTestTitle, Message: browser.i18n.getMessage('infoTestMessage') || t.infoTestMessage } + }, + Token: { + Header: browser.i18n.getMessage('tokenHeader') || t.tokenHeader, + Copy: browser.i18n.getMessage('tokenCopy') || t.tokenCopy, + Copied: browser.i18n.getMessage('tokenCopied') || t.tokenCopied, + Description: browser.i18n.getMessage('tokenDescription') || t.tokenDescription } } }; diff --git a/src/content/content_script.js b/src/content/content_script.js index 3c3c7d0..f4b77f7 100644 --- a/src/content/content_script.js +++ b/src/content/content_script.js @@ -19,8 +19,7 @@ import './styles/content_script.scss'; const browser = require('webextension-polyfill'); -const { observe, createObserver } = require('./observer'); -const { getTabData, getInputs, addInputListener, portSetup, isInFrame, addFormElementsNumber, getFormElements } = require('./functions'); +const { getTabData, portSetup, isInFrame } = require('./functions'); const contentOnMessage = require('./events/contentOnMessage'); const { loadFromLocalStorage, saveToLocalStorage } = require('../localStorage'); const storeLog = require('../partials/storeLog'); @@ -67,14 +66,7 @@ const contentScriptRun = async () => { storage = null; } - addInputListener(getInputs(), tabData?.id); - addFormElementsNumber(getFormElements()); - - const mutationObserver = createObserver(tabData); - observe(mutationObserver); - window.addEventListener('beforeunload', async () => { - mutationObserver.disconnect(); browser.runtime.onMessage.removeListener(onMessageListener); }, { once: true }); }; diff --git a/src/content/events/contentOnMessage.js b/src/content/events/contentOnMessage.js index 48c5e99..692a005 100644 --- a/src/content/events/contentOnMessage.js +++ b/src/content/events/contentOnMessage.js @@ -19,7 +19,7 @@ const config = require('../../config'); const loadFromLocalStorage = require('../../localStorage/loadFromLocalStorage'); -const { notification, inputToken, getTokenInput, showNotificationInfo, loadFonts, isInFrame, pageLoadComplete } = require('../functions'); +const { notification, inputToken, getTokenInput, showNotificationInfo, loadFonts, isInFrame, getActiveElement, tokenNotification } = require('../functions'); const storeLog = require('../../partials/storeLog'); const contentOnMessage = async (request, tabData) => { @@ -37,20 +37,7 @@ const contentOnMessage = async (request, tabData) => { return storeLog('error', 17, err, 'contentOnMessage loadFromLocalStorage'); } - if (!storage || !storage[`tabData-${tabData?.id}`]) { - if (isInFrame()) { - return false; - } - - return { - status: 'notification', - title: config.Texts.Warning.SelectInput.Title, - message: config.Texts.Warning.SelectInput.Message - }; - } - - if (storage[`tabData-${tabData?.id}`].requestID !== request.token_request_id) { - // No matching requestID + if (!storage || !storage[`tabData-${tabData?.id}`] || storage[`tabData-${tabData?.id}`].requestID !== request.token_request_id) { if (isInFrame()) { return false; } @@ -63,17 +50,25 @@ const contentOnMessage = async (request, tabData) => { } const lastFocusedInput = storage[`tabData-${tabData?.id}`].lastFocusedInput; - const tokenInput = getTokenInput(lastFocusedInput); + let tokenInput; - if (!tokenInput) { - return { status: 'elementNotFound' }; + if (lastFocusedInput) { + tokenInput = getTokenInput(lastFocusedInput); } + + if (!lastFocusedInput || !tokenInput) { + return tokenNotification(request.token); + } else { + return inputToken(request, tokenInput, tabData?.url); + } + } - return inputToken(request, tokenInput, tabData?.url); + case 'getActiveElement': { + return getActiveElement(); } case 'pageLoadComplete': { - return pageLoadComplete(tabData?.id); + return { status: 'ok' }; // Possibly for future use } case 'notification': @@ -83,7 +78,7 @@ const contentOnMessage = async (request, tabData) => { if (request.action === 'notification') { return notification(request); } else if (request.action === 'notificationInfo') { - return showNotificationInfo(request); + return showNotificationInfo(); } break; diff --git a/src/content/functions/updateEventListener.js b/src/content/functions/clearAfterInputToken.js similarity index 54% rename from src/content/functions/updateEventListener.js rename to src/content/functions/clearAfterInputToken.js index 9f92a4e..2f3d8a0 100644 --- a/src/content/functions/updateEventListener.js +++ b/src/content/functions/clearAfterInputToken.js @@ -17,28 +17,27 @@ // along with this program. If not, see // -const updateEventListener = (input, func) => { - const removeListener = () => { - if (typeof input.removeEventListener === 'function') { - input.removeEventListener('focus', func); +const { loadFromLocalStorage, saveToLocalStorage } = require('../../localStorage') + +const clearAfterInputToken = (inputElement, tabID) => { + // CLEAR INPUT + if (inputElement) { + if (typeof inputElement?.removeAttribute === 'function') { + inputElement.removeAttribute('data-twofas-input'); } - }; - - removeListener(); - - if (typeof input.addEventListener === 'function') { - input.addEventListener('focus', func); } - if (input && input?.dataset) { - input.dataset.twofasInputListener = 'true'; - } + // CLEAR STORAGE + return loadFromLocalStorage([`tabData-${tabID}`]) + .then(storage => { + if (storage[`tabData-${tabID}`] && storage[`tabData-${tabID}`].lastFocusedInput) { + delete storage[`tabData-${tabID}`].lastFocusedInput; + return saveToLocalStorage({ [`tabData-${tabID}`]: storage[`tabData-${tabID}`] }); + } - if (input === document.activeElement || input.matches(':focus')) { - func({ target: input }); - } - - window.addEventListener('onbeforeunload', removeListener, { once: true }); + return true; + }) + .catch(() => {}); }; -module.exports = updateEventListener; +module.exports = clearAfterInputToken; diff --git a/src/content/functions/pageLoadComplete.js b/src/content/functions/getActiveElement.js similarity index 53% rename from src/content/functions/pageLoadComplete.js rename to src/content/functions/getActiveElement.js index bc0fe18..f28d1fc 100644 --- a/src/content/functions/pageLoadComplete.js +++ b/src/content/functions/getActiveElement.js @@ -17,14 +17,38 @@ // along with this program. If not, see // -const addInputListener = require('../functions/addInputListener'); -const getInputs = require('../functions/getInputs'); -const addFormElementsNumber = require('../functions/addFormElementsNumber'); -const getFormElements = require('../functions/getFormElements'); +const { v4: uuidv4 } = require('uuid'); +const clearFormElementsNumber = require('./clearFormElementsNumber'); +const addFormElementsNumber = require('./addFormElementsNumber'); +const getFormElements = require('./getFormElements'); -const pageLoadComplete = async tabID => { - addInputListener(getInputs(), tabID); +const getActiveElement = () => { + const activeElement = document.activeElement; + let nodeName; + + if (activeElement) { + nodeName = activeElement.nodeName.toLowerCase(); + } + + if (!activeElement || (nodeName !== 'input' && nodeName !== 'textarea')) { + return { + status: 'activeElement', + nodeName, + id: null + }; + } + + const inputUUID = uuidv4(); + activeElement.setAttribute('data-twofas-input', inputUUID); + + clearFormElementsNumber(); addFormElementsNumber(getFormElements()); + + return { + status: 'activeElement', + nodeName, + id: inputUUID + }; }; -module.exports = pageLoadComplete; +module.exports = getActiveElement; diff --git a/src/content/functions/getInputs.js b/src/content/functions/getInputs.js deleted file mode 100644 index bce21c1..0000000 --- a/src/content/functions/getInputs.js +++ /dev/null @@ -1,27 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const inputsSelectors = require('../../partials/inputsSelectors')(); - -const getInputs = node => { - const el = node || document; - return Array.from(el.querySelectorAll(inputsSelectors)); -}; - -module.exports = getInputs; diff --git a/src/content/functions/index.js b/src/content/functions/index.js index 9280f77..9db0ac7 100644 --- a/src/content/functions/index.js +++ b/src/content/functions/index.js @@ -18,24 +18,21 @@ // exports.addFormElementsNumber = require('./addFormElementsNumber'); -exports.addInputListener = require('./addInputListener'); +exports.clearAfterInputToken = require('./clearAfterInputToken'); exports.clearFormElementsNumber = require('./clearFormElementsNumber'); exports.clickSubmit = require('./clickSubmit'); exports.closeNotificationInfo = require('./closeNotificationInfo'); +exports.getActiveElement = require('./getActiveElement'); exports.getFormElements = require('./getFormElements'); exports.getFormSubmitElements = require('./getFormSubmitElements'); -exports.getInputs = require('./getInputs'); exports.getTabData = require('./getTabData'); exports.getTokenInput = require('./getTokenInput'); -exports.inputFocus = require('./inputFocus'); exports.inputToken = require('./inputToken'); exports.isInFrame = require('./isInFrame'); -exports.isVisible = require('./isVisible'); exports.loadFonts = require('./loadFonts'); exports.neverShowNotificationInfo = require('./neverShowNotificationInfo'); exports.notification = require('./notification'); exports.openOptionsPage = require('./openOptionsPage'); -exports.pageLoadComplete = require('./pageLoadComplete'); exports.portSetup = require('./portSetup'); exports.showNotificationInfo = require('./showNotificationInfo'); -exports.updateEventListener = require('./updateEventListener'); +exports.tokenNotification = require('./tokenNotification'); diff --git a/src/content/functions/inputFocus.js b/src/content/functions/inputFocus.js deleted file mode 100644 index dea44f2..0000000 --- a/src/content/functions/inputFocus.js +++ /dev/null @@ -1,61 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const browser = require('webextension-polyfill'); -const { loadFromLocalStorage, saveToLocalStorage } = require('../../localStorage'); -const storeLog = require('../../partials/storeLog'); -const { v4: uuidv4 } = require('uuid'); - -const inputFocus = async (event, tabID) => { - if (!browser?.runtime?.id || !event || !event?.target) { - return false; - } - - let storage; - const el = event.target; - - try { - storage = await loadFromLocalStorage([`tabData-${tabID}`]); - } catch (err) { - return storeLog('error', 16, err, 'inputFocus - no URL/tabID'); - } - - try { - const tabData = storage[`tabData-${tabID}`] ? storage[`tabData-${tabID}`] : {}; - - if ( - el?.dataset?.twofasInput?.length > 0 && - (typeof el?.dataset?.twofasInput === 'string' || el?.dataset?.twofasInput instanceof String) - ) { - tabData.lastFocusedInput = el.dataset.twofasInput; - } else { - if (typeof el?.setAttribute === 'function') { - const inputUUID = uuidv4(); - el.setAttribute('data-twofas-input', inputUUID); - tabData.lastFocusedInput = inputUUID; - } - } - - return saveToLocalStorage({ [`tabData-${tabID}`]: tabData }, storage); - } catch (err) { - return storeLog('error', 16, err, storage[`tabData-${tabID}`]?.url); - } -}; - -module.exports = inputFocus; diff --git a/src/content/functions/inputToken.js b/src/content/functions/inputToken.js index 0efc846..f54b349 100644 --- a/src/content/functions/inputToken.js +++ b/src/content/functions/inputToken.js @@ -21,6 +21,7 @@ const delay = require('../../partials/delay'); const getTabData = require('./getTabData'); const clickSubmit = require('./clickSubmit'); +const clearAfterInputToken = require('./clearAfterInputToken'); const inputToken = (request, inputElement, siteURL) => { return new Promise(resolve => { @@ -81,6 +82,8 @@ const inputToken = (request, inputElement, siteURL) => { clickSubmit(inputElement, siteURL); } + clearAfterInputToken(inputElement, tab.id); + return resolve({ status: 'completed', url: siteURL diff --git a/src/content/functions/isVisible.js b/src/content/functions/isVisible.js deleted file mode 100644 index 927a3dc..0000000 --- a/src/content/functions/isVisible.js +++ /dev/null @@ -1,32 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -/* global IntersectionObserver */ -const isVisible = domElement => { - return new Promise(resolve => { - const o = new IntersectionObserver(([entry]) => { - resolve(entry.intersectionRatio === 1); - o.disconnect(); - }); - - o.observe(domElement); - }); -}; - -module.exports = isVisible; diff --git a/src/content/functions/notification.js b/src/content/functions/notification.js index 5422e69..64d993c 100644 --- a/src/content/functions/notification.js +++ b/src/content/functions/notification.js @@ -69,21 +69,30 @@ const notification = request => { setTimeout(() => n.notification.classList.add('visible'), 300); window.addEventListener('beforeunload', () => { - n.notification.classList.remove('visible'); + if (n && n.notification) { + n.notification.classList.remove('visible'); + } setTimeout(() => { - n.notification.classList.add('hidden'); - n = null; + if (n && n.notification) { + n.notification.classList.add('hidden'); + n = null; + } }, 300); }); if (request.timeout) { setTimeout(() => { - n.notification.classList.remove('visible'); + if (n && n.notification) { + n.notification.classList.remove('visible'); + } }, 5300); + setTimeout(() => { - n.notification.classList.add('hidden'); - n = null; + if (n && n.notification) { + n.notification.classList.add('hidden'); + n = null; + } }, 5600); } }; diff --git a/src/content/functions/tokenNotification.js b/src/content/functions/tokenNotification.js new file mode 100644 index 0000000..25d6844 --- /dev/null +++ b/src/content/functions/tokenNotification.js @@ -0,0 +1,146 @@ +// +// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) +// Copyright © 2023 Two Factor Authentication Service, Inc. +// Contributed by Grzegorz Zając. All rights reserved. +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see +// + +const config = require('../../config'); +const isInFrame = require('./isInFrame'); +const { createElement, createSVGElement, createTextElement } = require('../../partials/DOMElements'); +const iconSrc = require('../../images/notification-logo.svg'); +const copySrc = require('../../images/copy-icon.svg'); +const closeSrc = require('../../images/notification-close.svg'); +const S = require('../../selectors'); + +const tokenNotification = token => { + if (isInFrame()) { + return false; + } + + let n = { + container: document.querySelector(S.notification.container), + notification: null, + firstCol: null, + logo: null, + secondCol: null, + header: null, + h3: null, + tokenBox: null, + tokenText: null, + tokenIconContainer: null, + tokenIcon: null, + tokenButton: null, + tokenButtonText: null, + notificationText: null, + p: null, + closeBtn: null, + close: null + }; + + const closeNotification = e => { + if (e) { + e.preventDefault(); + e.stopPropagation(); + } + + if (n && n.notification) { + n.notification.classList.remove('visible'); + } + + setTimeout(() => { + if (n && n.notification) { + n.notification.classList.add('hidden'); + n = null; + } + }, 300); + }; + + if (!n.container) { + n.container = createElement('div', 'twofas-be-notifications'); + window.top.document.body.appendChild(n.container); + } + + n.notification = createElement('div', 'twofas-be-notification'); + n.closeBtn = createElement('button', 'twofas-be-notification-close'); + n.closeBtn.addEventListener('click', closeNotification); + n.close = createSVGElement(closeSrc); + n.closeBtn.appendChild(n.close); + n.notification.appendChild(n.closeBtn); + + n.firstCol = createElement('div', 'twofas-be-col'); + n.logo = createSVGElement(iconSrc); + + n.firstCol.appendChild(n.logo); + n.notification.appendChild(n.firstCol); + + n.secondCol = createElement('div', 'twofas-be-col'); + n.header = createElement('div', 'twofas-be-notification-header'); + n.h3 = createTextElement('h3', config.Texts.Token.Header); + + n.header.appendChild(n.h3); + n.secondCol.appendChild(n.header); + + n.tokenBox = createElement('div', 'twofas-be-notification-token-box'); + n.tokenText = createTextElement('p', token, 'twofas-be-notification-token-box-text'); + n.tokenButton = createElement('button', 'twofas-be-notification-token-box-copy-button'); + n.tokenButton.addEventListener('click', () => { + navigator.clipboard.writeText(token); + n.tokenButtonText.innerText = config.Texts.Token.Copied; + + setTimeout(() => { + n.tokenButtonText.innerText = config.Texts.Token.Copy; + }, 1000); + }); + n.tokenButtonText = createTextElement('span', config.Texts.Token.Copy); + n.tokenIconContainer = createElement('div', 'twofas-be-notification-token-box-copy-icon'); + n.tokenIcon = createSVGElement(copySrc); + + n.tokenButton.appendChild(n.tokenButtonText); + n.tokenIconContainer.appendChild(n.tokenIcon); + n.tokenButton.appendChild(n.tokenIconContainer); + n.tokenBox.appendChild(n.tokenText); + n.tokenBox.appendChild(n.tokenButton); + n.secondCol.appendChild(n.tokenBox); + + n.notificationText = createElement('div', 'twofas-be-notification-text'); + n.p = createTextElement('p', config.Texts.Token.Description); + + n.notificationText.appendChild(n.p); + n.secondCol.appendChild(n.notificationText); + n.notification.appendChild(n.secondCol); + n.container.appendChild(n.notification); + + setTimeout(() => n.notification.classList.add('visible'), 300); + + window.addEventListener('beforeunload', () => { + closeNotification(); + }); + + setTimeout(() => { + if (n && n.notification) { + n.notification.classList.remove('visible'); + } + }, 30300); + + setTimeout(() => { + if (n && n.notification) { + n.notification.classList.add('hidden'); + n = null; + } + }, 30600); +}; + +module.exports = tokenNotification; diff --git a/src/content/observer/createObserver.js b/src/content/observer/createObserver.js deleted file mode 100644 index 25bb907..0000000 --- a/src/content/observer/createObserver.js +++ /dev/null @@ -1,65 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -/* global MutationObserver, HTMLElement */ -const addedNodes = require('./observerFunctions/addedNodes'); -const hiddenNodes = require('./observerFunctions/hiddenNodes'); -const removedNodes = require('./observerFunctions/removedNodes'); -const notObservedNodes = require('./observerConstants/notObservedNodes'); -const notObservedAttributes = require('./observerConstants/notObservedAttributes'); - -const createObserver = tabData => { - return new MutationObserver(mutations => { - if (!mutations) { - return false; - } - - mutations.forEach(async mutation => { - const mutationNodeName = mutation.target.nodeName.toLowerCase(); - - if ( - !mutation || - !(mutation?.target instanceof HTMLElement) || - mutation?.target?.classList?.contains('twofas-be-notification') || - notObservedAttributes.includes(mutation?.attributeName) || - notObservedNodes.includes(mutationNodeName) - ) { - return false; - } - - if ( - (mutation?.addedNodes && Array.from(mutation?.addedNodes).length > 0) || - (mutation?.attributeName === 'disabled' && !mutation?.target?.disabled) || - (mutation?.attributeName === 'style' && mutation?.target) - ) { - addedNodes(mutation, tabData); - } - - if (mutation?.type === 'attributes' && mutation?.target) { - hiddenNodes(mutation, tabData); - } - - if (mutation?.removedNodes && Array.from(mutation?.removedNodes).length > 0) { - removedNodes(mutation, tabData); - } - }); - }); -}; - -module.exports = createObserver; diff --git a/src/content/observer/index.js b/src/content/observer/index.js deleted file mode 100644 index 0f04d45..0000000 --- a/src/content/observer/index.js +++ /dev/null @@ -1,21 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -exports.createObserver = require('./createObserver'); -exports.observe = require('./observe'); diff --git a/src/content/observer/observe.js b/src/content/observer/observe.js deleted file mode 100644 index a0b7a6c..0000000 --- a/src/content/observer/observe.js +++ /dev/null @@ -1,33 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const observe = mutationObserver => { - const el = document?.body || document; - - return mutationObserver.observe(el, { - attributes: true, - characterData: false, - childList: true, - subtree: true, - attributeOldValue: false, - characterDataOldValue: false - }); -}; - -module.exports = observe; diff --git a/src/content/observer/observerConstants/index.js b/src/content/observer/observerConstants/index.js deleted file mode 100644 index 925cd9e..0000000 --- a/src/content/observer/observerConstants/index.js +++ /dev/null @@ -1,23 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -exports.notObservedAttributes = require('./notObservedAttributes'); -exports.notObservedNodes = require('./notObservedNodes'); -exports.significantNodes = require('./significantNodes'); -exports.significantInputs = require('./significantInputs'); diff --git a/src/content/observer/observerConstants/notObservedAttributes.js b/src/content/observer/observerConstants/notObservedAttributes.js deleted file mode 100644 index a3b3cf1..0000000 --- a/src/content/observer/observerConstants/notObservedAttributes.js +++ /dev/null @@ -1,132 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const notObservedAttributes = [ - // 2FAS - 'data-twofas-element-number', - 'data-twofas-input-listener', - // CUSTOM - 'data-ng-animate', - 'data-submitting', - // GLOBAL ATTRIBUTES - 'href', - 'acceskey', - 'autocapitalize', - 'contenteditable', - 'dir', - 'draggable', - 'enterkeyhint', - 'exportsparts', - 'inert', - 'inputmode', - 'is', - 'itemid', - 'itemprop', - 'itemref', - 'itemscope', - 'itemtype', - 'lang', - 'nonce', - 'part', - 'popover', - 'slot', - 'spellcheck', - 'tabindex', - 'title', - 'translate', - 'virtualkeyboardpolicy', - 'role', - 'accept', - 'autocomplete', - 'autocorrect', - 'capture', - 'crossorigin', - 'dirname', - 'elementtiming', - 'for', - 'max', - 'maxlength', - 'min', - 'minlength', - 'multiple', - 'pattern', - 'placeholder', - 'readonly', - 'rel', - 'required', - 'size', - 'step', - // ARIA - 'aria-activedescendant', - 'aria-atomic', - 'aria-autocomplete', - 'aria-braillelabel', - 'aria-brailleroledescription', - 'aria-busy', - 'aria-checked', - 'aria-colcount', - 'aria-colindex', - 'aria-colindextext', - 'aria-colspan', - 'aria-controls', - 'aria-current', - 'aria-describedby', - 'aria-description', - 'aria-details', - 'aria-disabled', - 'aria-dropeffect', - 'aria-errormessage', - 'aria-expanded', - 'aria-flowto', - 'aria-grabbed', - 'aria-haspopup', - 'aria-hidden', - 'aria-invalid', - 'aria-keyshortcuts', - 'aria-label', - 'aria-labelledby', - 'aria-level', - 'aria-live', - 'aria-modal', - 'aria-multiline', - 'aria-multiselectable', - 'aria-orientation', - 'aria-owns', - 'aria-placeholder', - 'aria-posinset', - 'aria-pressed', - 'aria-readonly', - 'aria-relevant', - 'aria-required', - 'aria-roledescription', - 'aria-rowcount', - 'aria-rowindex', - 'aria-rowindextext', - 'aria-rowspan', - 'aria-selected', - 'aria-setsize', - 'aria-sort', - 'aria-valuemax', - 'aria-valuemin', - 'aria-valuenow', - 'aria-valuetext', - 'value' -]; - -module.exports = notObservedAttributes; diff --git a/src/content/observer/observerConstants/notObservedNodes.js b/src/content/observer/observerConstants/notObservedNodes.js deleted file mode 100644 index 27bb47b..0000000 --- a/src/content/observer/observerConstants/notObservedNodes.js +++ /dev/null @@ -1,105 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const notObservedNodes = [ - 'a', - 'g', - 'path', - 'html', - 'body', - 'head', - 'link', - 'style', - 'script', - 'noscript', - 'title', - '#cdata-section', - '#comment', - '#text', - 'abbr', - 'address', - 'area', - 'audio', - 'b', - 'base', - 'bdi', - 'bdo', - 'blockquote', - 'br', - 'button', - 'canvas', - 'caption', - 'cite', - 'code', - 'data', - 'dd', - 'del', - 'details', - 'dfn', - 'dialog', - 'dl', - 'dt', - 'em', - 'embed', - 'figure', - 'hr', - 'i', - 'img', - 'ins', - 'label', - 'legend', - 'map', - 'mark', - 'meta', - 'meter', - 'object', - 'optgroup', - 'option', - 'output', - 'param', - 'picture', - 'pre', - 'progress', - 'q', - 'rp', - 'rt', - 'ruby', - 's', - 'samp', - 'search', - 'select', - 'small', - 'source', - 'strong', - 'sub', - 'sup', - 'svg', - 'summary', - 'template', - 'time', - 'track', - 'u', - 'var', - 'video', - 'wbr', - // custom - 'tool-tip' -]; - -module.exports = notObservedNodes; diff --git a/src/content/observer/observerConstants/significantInputs.js b/src/content/observer/observerConstants/significantInputs.js deleted file mode 100644 index a442143..0000000 --- a/src/content/observer/observerConstants/significantInputs.js +++ /dev/null @@ -1,25 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const significantInputs = [ - 'input', - 'textarea' -]; - -module.exports = significantInputs; diff --git a/src/content/observer/observerConstants/significantNodes.js b/src/content/observer/observerConstants/significantNodes.js deleted file mode 100644 index 752255f..0000000 --- a/src/content/observer/observerConstants/significantNodes.js +++ /dev/null @@ -1,25 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const significantNodes = [ - 'input', - 'textarea' -]; - -module.exports = significantNodes; diff --git a/src/content/observer/observerFunctions/addedNodes.js b/src/content/observer/observerFunctions/addedNodes.js deleted file mode 100644 index b216b9e..0000000 --- a/src/content/observer/observerFunctions/addedNodes.js +++ /dev/null @@ -1,101 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const browser = require('webextension-polyfill'); -const findSignificantChanges = require('./findSignificantChanges'); -const { getInputs, addInputListener, clearFormElementsNumber, addFormElementsNumber, getFormElements } = require('../../functions'); -const getChildNodes = require('./getChildNodes'); -const storeLog = require('../../../partials/storeLog'); -const notObservedNodes = require('../observerConstants/notObservedNodes'); -const uniqueOnly = require('../../../partials/uniqueOnly'); - -let queue = []; -let tabData = null; -let timeout; - -const process = nodes => { - if (document.readyState !== 'complete') { - timeout = window.requestAnimationFrame(() => process(nodes)); - } - - if (!nodes || nodes.length <= 0 || !tabData) { - return false; - } - - const addedNodes = - nodes - .filter(uniqueOnly) - .filter(node => !notObservedNodes.includes(node.nodeName.toLowerCase())) - .flatMap(getChildNodes) - .filter(uniqueOnly) - .filter(node => !notObservedNodes.includes(node.nodeName.toLowerCase())); - - let newInputs = false; - let inputs = []; - - for (const node in addedNodes) { - if (findSignificantChanges(addedNodes[node])) { - newInputs = true; - } - } - - if (!newInputs) { - for (const node in addedNodes) { - inputs.push(...getInputs(addedNodes[node])); - } - - inputs = inputs.filter(node => !node.hasAttribute('data-twofas-input')); - newInputs = inputs.length > 0; - } else { - inputs = getInputs(); - } - - if (newInputs) { - try { - addInputListener(inputs, tabData?.id); - clearFormElementsNumber(); - addFormElementsNumber(getFormElements()); - } catch (err) { - return storeLog('error', 15, err, tabData?.url); - } - } - - queue = []; -}; - -const addedNodes = (mutation, tabInfo) => { - if (!mutation?.target || !browser?.runtime?.id) { - return false; - } - - queue.push(mutation.target); - queue.push(...Array.from(mutation.addedNodes)); - - if (!tabData) { - tabData = tabInfo; - } - - if (timeout) { - window.cancelAnimationFrame(timeout); - } - - timeout = window.requestAnimationFrame(() => process(queue)); -}; - -module.exports = addedNodes; diff --git a/src/content/observer/observerFunctions/findSignificantChanges.js b/src/content/observer/observerFunctions/findSignificantChanges.js deleted file mode 100644 index 4a4fb73..0000000 --- a/src/content/observer/observerFunctions/findSignificantChanges.js +++ /dev/null @@ -1,26 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const significantNodes = require('../observerConstants/significantNodes'); - -const findSignificantChanges = node => { - return significantNodes.includes(node.nodeName.toLowerCase()); -}; - -module.exports = findSignificantChanges; diff --git a/src/content/observer/observerFunctions/hiddenNodes.js b/src/content/observer/observerFunctions/hiddenNodes.js deleted file mode 100644 index cc740c1..0000000 --- a/src/content/observer/observerFunctions/hiddenNodes.js +++ /dev/null @@ -1,101 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const browser = require('webextension-polyfill'); -const isVisible = require('../../functions/isVisible'); -const findSignificantChanges = require('./findSignificantChanges'); -const getChildNodes = require('./getChildNodes'); -const { loadFromLocalStorage, saveToLocalStorage } = require('../../../localStorage'); -const storeLog = require('../../../partials/storeLog'); -const { clearFormElementsNumber, addFormElementsNumber, getFormElements } = require('../../functions'); -const uniqueOnly = require('../../../partials/uniqueOnly'); - -let queue = []; -let tabData = null; -let timeout; - -const process = async nodes => { - if (document.readyState !== 'complete') { - timeout = window.requestAnimationFrame(() => process(nodes)); - } - - if (!nodes || nodes.length <= 0 || !tabData) { - return false; - } - - const hiddenNodes = - nodes - .filter(uniqueOnly) - .filter(node => findSignificantChanges(node) && node.getAttribute('data-twofas-input')) - .flatMap(getChildNodes) - .filter(uniqueOnly) - .filter(node => findSignificantChanges(node) && node.getAttribute('data-twofas-input')); - - let storage; - - clearFormElementsNumber(); - addFormElementsNumber(getFormElements()); - - try { - storage = await loadFromLocalStorage([`tabData-${tabData?.id}`]); - } catch (err) { - return storeLog('error', 41, err, tabData?.url); - } - - if (!storage[`tabData-${tabData?.id}`] || !storage[`tabData-${tabData?.id}`].lastFocusedInput) { - return false; - } - - return hiddenNodes.forEach(async node => { - const visible = await isVisible(node); - - if (node.getAttribute('data-twofas-input') === storage[`tabData-${tabData?.id}`].lastFocusedInput && !visible) { - delete storage[`tabData-${tabData?.id}`].lastFocusedInput; - - if (document?.activeElement && document?.activeElement?.getAttribute('data-twofas-input')) { - storage[`tabData-${tabData?.id}`].lastFocusedInput = document.activeElement.getAttribute('data-twofas-input'); - } - - return saveToLocalStorage({ [`tabData-${tabData?.id}`]: storage[`tabData-${tabData?.id}`] }) - .catch(err => storeLog('error', 42, err, tabData?.url)); - } - - queue = []; - }); -}; - -const hiddenNodes = (mutation, tabInfo) => { - if (!mutation?.target || !browser?.runtime?.id) { - return false; - } - - queue.push(mutation.target); - - if (!tabData) { - tabData = tabInfo; - } - - if (timeout) { - window.cancelAnimationFrame(timeout); - } - - timeout = window.requestAnimationFrame(() => process(queue)); -}; - -module.exports = hiddenNodes; diff --git a/src/content/observer/observerFunctions/index.js b/src/content/observer/observerFunctions/index.js deleted file mode 100644 index 7e4f883..0000000 --- a/src/content/observer/observerFunctions/index.js +++ /dev/null @@ -1,23 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -exports.addedNodes = require('./addedNodes'); -exports.getChildNodes = require('./getChildNodes'); -exports.hiddenNodes = require('./hiddenNodes'); -exports.removedNodes = require('./removedNodes'); diff --git a/src/content/observer/observerFunctions/removedNodes.js b/src/content/observer/observerFunctions/removedNodes.js deleted file mode 100644 index b7fe2f7..0000000 --- a/src/content/observer/observerFunctions/removedNodes.js +++ /dev/null @@ -1,113 +0,0 @@ -// -// This file is part of the 2FAS Browser Extension (https://github.com/twofas/2fas-browser-extension) -// Copyright © 2023 Two Factor Authentication Service, Inc. -// Contributed by Grzegorz Zając. All rights reserved. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program. If not, see -// - -const browser = require('webextension-polyfill'); -const significantInputs = require('../observerConstants/significantInputs'); -const { loadFromLocalStorage, saveToLocalStorage } = require('../../../localStorage'); -const getChildNodes = require('./getChildNodes'); -const storeLog = require('../../../partials/storeLog'); -const { clearFormElementsNumber, addFormElementsNumber, getFormElements } = require('../../functions'); -const notObservedNodes = require('../observerConstants/notObservedNodes'); -const uniqueOnly = require('../../../partials/uniqueOnly'); - -let queue = []; -let tabData = null; -let timeout; - -const process = async nodes => { - if (document.readyState !== 'complete') { - timeout = window.requestAnimationFrame(() => process(nodes)); - } - - if (!nodes || nodes.length <= 0 || !tabData) { - return false; - } - - const ids = []; - let storage; - - const removedNodes = - nodes - .filter(uniqueOnly) - .filter(node => !notObservedNodes.includes(node.nodeName.toLowerCase())) - .flatMap(getChildNodes) - .filter(uniqueOnly) - .filter(node => !notObservedNodes.includes(node.nodeName.toLowerCase())); - - removedNodes.forEach(node => { - const nodeName = node.nodeName.toLowerCase(); - - if (!significantInputs.includes(nodeName)) { - return false; - } - - const twofasInput = node.getAttribute('data-twofas-input'); - - if (twofasInput) { - ids.push(twofasInput); - } - }); - - queue = []; - - if (ids.length <= 0) { - return false; - } - - clearFormElementsNumber(); - addFormElementsNumber(getFormElements()); - - try { - storage = await loadFromLocalStorage([`tabData-${tabData?.id}`]); - } catch (err) { - return storeLog('error', 39, err, tabData?.url); - } - - if (!storage[`tabData-${tabData?.id}`] || !storage[`tabData-${tabData?.id}`].lastFocusedInput) { - return false; - } - - if (ids.includes(storage[`tabData-${tabData?.id}`].lastFocusedInput)) { - delete storage[`tabData-${tabData?.id}`].lastFocusedInput; - } - - return saveToLocalStorage({ [`tabData-${tabData?.id}`]: storage[`tabData-${tabData?.id}`] }) - .catch(err => storeLog('error', 40, err, tabData?.url)); -}; - -const removedNodes = (mutation, tabInfo) => { - if (!mutation?.target || !browser?.runtime?.id) { - return false; - } - - queue.push(mutation.target); - queue.push(...Array.from(mutation.removedNodes)); - - if (!tabData) { - tabData = tabInfo; - } - - if (timeout) { - window.cancelAnimationFrame(timeout); - } - - timeout = window.requestAnimationFrame(() => process(queue)); -}; - -module.exports = removedNodes; diff --git a/src/content/styles/content_script.scss b/src/content/styles/content_script.scss index 59f75ea..6b37fc4 100644 --- a/src/content/styles/content_script.scss +++ b/src/content/styles/content_script.scss @@ -33,6 +33,7 @@ top: 25px !important; user-select: none !important; z-index: 999999 !important; + z-index: infinite !important; @media all and (max-width: 400px) { padding: 10px !important; @@ -56,9 +57,12 @@ margin-bottom: 25px !important; max-width: 380px !important; overflow: hidden !important; + position: relative !important; text-align: left !important; transform: translateX(425px) !important; transition: box-shadow .3s ease-in-out, max-height .3s ease-in-out, margin-bottom .3s ease-in-out, transform .3s ease-in-out !important; + z-index: 999999 !important; + z-index: infinite !important; &.visible { box-shadow: 0 0 20px 5px $shadow-color !important; @@ -70,6 +74,24 @@ max-height: 0 !important; } + &-close { + appearance: none !important; + background: transparent !important; + border: 0 !important; + cursor: pointer !important; + padding: 0 !important; + position: absolute !important; + right: 2px !important; + top: 2px !important; + + > svg { + height: auto !important; + margin-right: 0 !important; + max-width: unset !important; + width: 24px !important; + } + } + &-buttons { border-radius: 0 !important; box-shadow: none !important; @@ -120,6 +142,84 @@ } } + &-token-box { + align-items: center !important; + display: flex !important; + flex-direction: row !important; + justify-content: space-between !important; + margin-bottom: 10px !important; + + > p { + &.twofas-be-notification-token-box-text { + color: $color !important; + font-size: 32px !important; + font-weight: 700 !important; + + @media all and (max-width: 400px) { + font-size: 24px !important; + } + } + } + + > button { + &.twofas-be-notification-token-box-copy-button { + align-items: center !important; + appearance: none !important; + background-color: $theme-color !important; + border: 0 !important; + border-radius: 20px !important; + color: $color-2 !important; + cursor: pointer !important; + display: inline-flex !important; + flex-direction: row !important; + font-size: 12px !important; + font-weight: 600 !important; + height: 40px !important; + justify-content: space-between !important; + letter-spacing: .9px !important; + line-height: 40px !important; + padding: 0 5px 0 16px !important; + outline: none !important; + text-align: center !important; + text-decoration: none !important; + text-transform: uppercase !important; + transition: background-color .2s ease-in-out, color .2s ease-in-out !important; + + &:hover { + background-color: color.adjust($theme-color, $lightness: -10%) !important; + color: $color-2 !important; + } + + &:active { + background-color: color.adjust($theme-color, $lightness: -20%) !important; + color: $color-2 !important; + } + + > span { + flex-grow: 1 !important; + margin-right: 8px !important; + } + + > .twofas-be-notification-token-box-copy-icon { + align-items: center !important; + background-color: $color-2 !important; + border-radius: 50% !important; + display: flex !important; + justify-content: center !important; + height: 32px !important; + width: 32px !important; + + > svg { + height: 16px !important; + margin-right: 0 !important; + max-width: 100% !important; + width: auto !important; + } + } + } + } + } + .twofas-be-col { flex-shrink: unset !important; font-family: 'Montserrat', sans-serif !important; @@ -134,6 +234,13 @@ &:last-of-type { margin-right: 18px !important; } + + > svg { + height: 34px !important; + margin-right: 16px !important; + max-width: 28px !important; + width: 28px !important; + } } /* ProtonMail FIX */ @@ -146,13 +253,6 @@ } /* ProtonMail FIX */ - svg { - height: 34px !important; - margin-right: 16px; - max-width: 28px !important; - width: 28px !important; - } - h3, p { font-family: 'Montserrat', sans-serif !important; diff --git a/src/images/copy-icon.svg b/src/images/copy-icon.svg new file mode 100644 index 0000000..3ef835c --- /dev/null +++ b/src/images/copy-icon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/images/notification-close.svg b/src/images/notification-close.svg new file mode 100644 index 0000000..0fbac9d --- /dev/null +++ b/src/images/notification-close.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/manifest/chrome.json b/src/manifest/chrome.json index 58e1ab0..d8ae6fe 100644 --- a/src/manifest/chrome.json +++ b/src/manifest/chrome.json @@ -3,7 +3,7 @@ "name": "2FAS - Two Factor Authentication", "short_name": "2FAS", "author": "Two Factor Authentication Service, Inc.", - "version": "1.6.4", + "version": "1.7.0", "description": "__MSG_appDesc__", "default_locale": "en", "icons": { @@ -71,7 +71,8 @@ "tabs", "storage", "notifications", - "contextMenus" + "contextMenus", + "webNavigation" ], "host_permissions": [ "*://*.2fas.com/*" diff --git a/src/manifest/edge.json b/src/manifest/edge.json index 58e1ab0..d8ae6fe 100644 --- a/src/manifest/edge.json +++ b/src/manifest/edge.json @@ -3,7 +3,7 @@ "name": "2FAS - Two Factor Authentication", "short_name": "2FAS", "author": "Two Factor Authentication Service, Inc.", - "version": "1.6.4", + "version": "1.7.0", "description": "__MSG_appDesc__", "default_locale": "en", "icons": { @@ -71,7 +71,8 @@ "tabs", "storage", "notifications", - "contextMenus" + "contextMenus", + "webNavigation" ], "host_permissions": [ "*://*.2fas.com/*" diff --git a/src/manifest/firefox.json b/src/manifest/firefox.json index 417aea8..d145dbd 100644 --- a/src/manifest/firefox.json +++ b/src/manifest/firefox.json @@ -3,7 +3,7 @@ "name": "2FAS - Two Factor Authentication", "short_name": "2FAS", "author": "Two Factor Authentication Service, Inc.", - "version": "1.6.4", + "version": "1.7.0", "applications": { "gecko": { "id": "admin@2fas.com", @@ -77,6 +77,7 @@ "storage", "notifications", "contextMenus", + "webNavigation", "https://*.2fas.com/*", "wss://*.2fas.com/*" ], diff --git a/src/manifest/opera.json b/src/manifest/opera.json index 0dfae11..39835f7 100644 --- a/src/manifest/opera.json +++ b/src/manifest/opera.json @@ -3,7 +3,7 @@ "name": "2FAS - Two Factor Authentication", "short_name": "2FAS", "author": "Two Factor Authentication Service, Inc.", - "version": "1.6.4", + "version": "1.7.0", "description": "__MSG_appDesc__", "default_locale": "en", "icons": { @@ -70,7 +70,8 @@ "tabs", "storage", "notifications", - "contextMenus" + "contextMenus", + "webNavigation" ], "host_permissions": [ "*://*.2fas.com/*" diff --git a/src/manifest/safari.json b/src/manifest/safari.json index fad0358..bf835cd 100644 --- a/src/manifest/safari.json +++ b/src/manifest/safari.json @@ -3,7 +3,7 @@ "name": "2FAS - Two Factor Authentication", "short_name": "2FAS", "author": "Two Factor Authentication Service, Inc.", - "version": "1.6.4", + "version": "1.7.0", "description": "__MSG_appDesc__", "default_locale": "en", "icons": { @@ -77,6 +77,7 @@ "storage", "notifications", "contextMenus", + "webNavigation", "https://*.2fas.com/*", "wss://*.2fas.com/*" ], diff --git a/src/partials/storeLog.js b/src/partials/storeLog.js index 838fe59..ee7bf2b 100644 --- a/src/partials/storeLog.js +++ b/src/partials/storeLog.js @@ -92,9 +92,11 @@ const storeLog = async (level, logID = 0, errObj, url = '') => { (storage?.browserInfo?.browser_name === 'Chrome' && storage?.browserInfo?.browser_version === '107' && logID === 14) || (storage?.browserInfo?.browser_name === 'Chrome' && storage?.browserInfo?.browser_version === '107.0.0.0' && logID === 14) || (c?.errorInfo?.message?.includes('FILE_ERROR_NO_SPACE')) || - (c?.status === 407) || + (c?.errorInfo.status === 407) || (c?.errorInfo?.message?.includes('An unexpected error occurred')) || - (c?.errorInfo?.message?.includes('Refused to run the JavaScript URL')) + (c?.errorInfo?.message?.includes('Refused to run the JavaScript URL')) || + (c?.errorInfo?.message?.includes('QuotaExceededError: storage.local API call exceeded its quota limitations')) || // @TODO: future + (c?.errorInfo?.statusText?.includes('Proxy Authentication Required')) ) { return false; } diff --git a/webpack/production/background.prod.config.js b/webpack/production/background.prod.config.js index 33f7238..d0ded49 100644 --- a/webpack/production/background.prod.config.js +++ b/webpack/production/background.prod.config.js @@ -30,8 +30,6 @@ const backgroundProdConfig = { name: 'background', entry: './src/background/background.js', mode: 'production', - devtool: 'cheap-module-source-map', - target: 'web', node: false, output: { path: path.join(__dirname, '../../public/background'), diff --git a/webpack/production/contentScript.prod.config.js b/webpack/production/contentScript.prod.config.js index 2807cbf..3703684 100644 --- a/webpack/production/contentScript.prod.config.js +++ b/webpack/production/contentScript.prod.config.js @@ -34,8 +34,6 @@ const contentScriptProdConfig = { name: 'contentScriptGlobal', entry: './src/content/content_script.js', mode: 'production', - devtool: 'cheap-module-source-map', - target: 'web', node: false, output: { path: path.join(__dirname, '../../public/content'), diff --git a/webpack/production/installPage.prod.config.js b/webpack/production/installPage.prod.config.js index 1c29276..f5c11b0 100644 --- a/webpack/production/installPage.prod.config.js +++ b/webpack/production/installPage.prod.config.js @@ -39,8 +39,6 @@ const installPageProdConfig = { contentPageStyles: './src/content/styles/content_script.scss' }, mode: 'production', - devtool: 'cheap-module-source-map', - target: 'web', node: false, output: { path: path.join(__dirname, '../../public/installPage'), diff --git a/webpack/production/optionsPage.prod.config.js b/webpack/production/optionsPage.prod.config.js index d4f8c07..3a2fd29 100644 --- a/webpack/production/optionsPage.prod.config.js +++ b/webpack/production/optionsPage.prod.config.js @@ -39,8 +39,6 @@ const optionsPageProdConfig = { contentPageStyles: './src/content/styles/content_script.scss' }, mode: 'production', - devtool: 'cheap-module-source-map', - target: 'web', node: false, output: { path: path.join(__dirname, '../../public/optionsPage'), diff --git a/webpack/utils/export/messages.json b/webpack/utils/export/messages.json index f3bc213..830e385 100644 --- a/webpack/utils/export/messages.json +++ b/webpack/utils/export/messages.json @@ -116,10 +116,10 @@ "errorStorageIntegrityMessage": "Please reinstall browser extension or contact with 2FAS Support on Discord", "warningTooSoonTitle": "Wait a moment", "warningTooSoonMessage": "Please wait DIFF seconds before sending another request.", - "warningSelectInputTitle": "Select the text field first", - "warningSelectInputMessage": "Select the text field for the 2FA token then click the extension icon or use the chosen shortcut.", "successPushSentTitle": "Push sent", "successPushSentMessage": "Please check your phone and accept your login request.", + "successPushSentClipboardTitle": "Push sent", + "successPushSentClipboardMessage": "Please check your phone and accept your login request. Copy your token and paste it into the correct input on the website.", "successExtNameUpdatedTitle": "Success", "successExtNameUpdatedMessage": "Extension name updated", "successDeviceDisconnectedTitle": "Success", @@ -137,6 +137,8 @@ "infoUnsupportedProtocolMessage": "Only HTTP and HTTPS protocols are supported by 2FAS Extension", "infoBrowserActionWithoutTabTitle": "Info", "infoBrowserActionWithoutTabMessage": "Using outside the browser is not supported by 2FAS Extension", + "infoCopiedToClipboardTitle": "Successfully copied to clipboard", + "infoCopiedToClipboardMessage": "You can now paste the token into the input field", "infoTestTitle": "2FAS Notification", "infoTestMessage": "Hi! This is just a test", "optionsTitle": "2FAS Browser Extension | Options", @@ -181,5 +183,9 @@ "optionsDomainRequired": "Domain is required", "optionsDomainTooLong": "Domain is too long", "optionsDomainIncorrect": "Domain is not correct", - "optionsDomainExists": "Domain exists on excluded list" + "optionsDomainExists": "Domain exists on excluded list", + "tokenHeader": "Your token", + "tokenCopy": "Copy", + "tokenCopied": "Copied", + "tokenDescription": "Copy the token and paste it in the input field. The token will expire in 30 seconds." } \ No newline at end of file