gina 0.3.6-alpha.2 → 0.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +5 -4
- package/framework/v0.3.6/VERSION +1 -0
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +97 -5
- package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.js +7 -2
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +1 -1
- package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/controller.render-json.js +20 -1
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/controller.render-swig.js +19 -0
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/server.js +13 -0
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/context.js +26 -10
- package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/init.js +9 -9
- package/framework/v0.3.6/lib/inspector-redact/package.json +17 -0
- package/framework/v0.3.6/lib/inspector-redact/src/main.js +184 -0
- package/gna.js +4 -4
- package/package.json +2 -2
- package/script/post_install.js +37 -0
- package/framework/v0.3.6-alpha.2/VERSION +0 -1
- package/framework/v0.3.6-alpha.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.3.6-alpha.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/v0.3.6-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/AUTHORS +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/html/static.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/config.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/connector.v2.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/content.encoding +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/controller.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/controller/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/optimist-0.6.1/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/optimist-0.6.1/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/optimist-0.6.1/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/optimist-0.6.1/readme.markdown +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/deps/swig-client/swig.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/dev/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/gna.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/currency.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/locales/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/mime.types +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/model/entity.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/model/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/model/template/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/file/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/file/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/file/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/intl/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/intl/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/intl/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/intl/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/router.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/server.express.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/server.isaac.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/status.codes +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/_gitignore +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/conf/env.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/conf/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/console.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/data/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/data/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/json/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/json/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/path.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/prototypes.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/task.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/helpers/text.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/archiver/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/archiver/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/archiver/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/async/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/async/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cache/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cache/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cache/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/collection/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/collection/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/collection/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/config.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cron/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cron/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/dist/public_suffix_list.dat +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/dist/public_suffix_list.dat.br +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/generator/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/inherits/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/inherits/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/math/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/merge/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/merge/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/model.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/proc.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/routing/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/routing/build.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/routing/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/session-store.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/shell.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/state.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/url/README.md +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/url/index.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/url/routing.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/uuid/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/validator.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/watcher/package.json +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.3.6-alpha.2 → v0.3.6}/package.json +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,21 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.3.6 - 2026-04-16
|
|
10
|
+
### Changed
|
|
11
|
+
* syncDocs now regenerates the docs-site package-lock.json after bumping devDependencies.gina — prevents CI / Vercel / Worker deploy failures on every stable release.
|
|
12
|
+
### Fixed
|
|
13
|
+
* Prevented spurious Whisper Error on the first CLI command after a fresh install (#B12). `gina --version` and `gina framework:*` commands no longer emit a red error stack trace before their output on a brand-new install.
|
|
14
|
+
* Hardening framework:init against missing or mistyped `def_*` keys in ~/.gina/main.json (#B13 — blast-radius follow-up to #B12). `main['def_prefix']`, `def_global_mode`, `def_arch`, `def_platform`, `def_env`, `def_scope`, `def_log_level` reads now short-circuit to undefined instead of throwing TypeError when the key is entirely absent.
|
|
15
|
+
* Surfacing the real cause when `prepare_version.js` is run against a stale `~/.gina/<release>/settings.json` `dir` field. Publish now fails fast with an actionable message instead of wedging at `pushChangesToGitIfNeeded` with a misleading "No branch selected" error.
|
|
16
|
+
* Preventing CORS preflight failure when a bundle's env.json `access-control-allow-headers` list omits a header the client actually sends. `completeHeaders()` no longer overwrites the echo that `checkPreflightRequest()` sets from the incoming `access-control-request-headers` (#B13).
|
|
17
|
+
### Security
|
|
18
|
+
* Added pre-commit hook (.githooks/pre-commit) that blocks Claude-related paths (CLAUDE.md, .claude*) from entering git history. post_install.js installs core.hooksPath=.githooks for contributor clones only (gated on .git presence in gina repo root). #S5 follow-up to #S3.
|
|
19
|
+
* Added GitHub Actions workflow (.github/workflows/security.yml) that greps the git index on every push/PR to develop and master for Claude-related paths (CLAUDE.md, .claude*). Fails the build if any are tracked. Backs up the local pre-commit hook (#S5) and publish-boundary gate (#S3). #S6 follow-up to #S3.
|
|
20
|
+
* Added private-token leak gate (script/check_no_claude_leak.js) wired into the npm prepack hook and the prepare_version.js self.* chain before any git add --all. Fails the publish if the tarball listing contains Claude-related paths OR if pack contents contain private-token patterns (phone, private email, private address, private domain, co-author legal name). #G1 follow-up to #S3/#S4.
|
|
21
|
+
* Added opt-in pre-commit hook (resources/git-hooks/pre-commit) that blocks commits authored under a private-domain git identity (.local hostnames, internal domains). Contributors install it once via cp resources/git-hooks/pre-commit .git/hooks/pre-commit. Complements the CI-side Claude-path guard (#S5/#S6). #G5.
|
|
22
|
+
* Redacting secret-looking fields from the dev-mode Inspector feed before any sink (window.__ginaData, localStorage.__ginaData, /_gina/agent SSE, engine.io push, ginaToolbar forms/XHR overlays). New lib/inspector-redact deep-clones the Inspector payload and replaces values whose keys match the default regex (password, pwd, secret, token, apikey, cvv, ssn, authorization, credentials, private_key) with [redacted]. Two complementary carve-outs preserve validation metadata: (1) NON_SECRET_SUFFIX — keys ending in rule/rules/policy/policies/validator/config/configuration/settings/requirements/strength/constraint/options/schema/definition/spec pass through untouched (e.g. passwordRule, passwordPolicy describe form rules, not user input); (2) primitive-only redaction — when a matched secret key holds an object or array, the walker recurses into it instead of replacing it, because such values are always metadata (e.g. rules.account[password] = {isRequired: true, isString: 7} — an HTML form field name under a rules: section). Nested primitive secrets inside preserved objects are still caught on recursion. Client-side shim in statusbar.html mirrors both carve-outs and additionally redacts any DOM input whose type matches configured types (default: password). Configurable via settings.json inspector.redact.{patterns,types,replacement}. Dev-mode only — the actual HTTP response body is never touched. #R7.
|
|
23
|
+
|
|
9
24
|
## 0.3.5 - 2026-04-13
|
|
10
25
|
### Security
|
|
11
26
|
* Bumped @rhinostone/swig to 1.5.0 — extends CVE-2023-25345 path-traversal guards to bracket notation, set bracket assignment, for loop variables, macro names, and import aliases.
|
package/README.md
CHANGED
|
@@ -37,11 +37,12 @@ gina bundle:start api @myproject
|
|
|
37
37
|
open https://localhost:3100
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
## What's in 0.3.
|
|
40
|
+
## What's in 0.3.6
|
|
41
41
|
|
|
42
|
-
- **
|
|
43
|
-
- **
|
|
44
|
-
-
|
|
42
|
+
- **Inspector payload redaction** — passwords, tokens, API keys, and secret-like fields are automatically stripped from all four Inspector data sinks (`window.__ginaData`, `localStorage`, `/_gina/agent` SSE, `ginaToolbar.update`). Configurable patterns via `inspector.redact` in bundle settings. Metadata carve-outs preserve validation rules and object-valued config under secret keys
|
|
43
|
+
- **CORS preflight fix** — `completeHeaders()` no longer overwrites the echoed `access-control-allow-headers` on preflight responses, fixing browser CORS errors when the bundle's static ACAH list didn't include all client-sent headers
|
|
44
|
+
- **Whisper silent-pass** — `whisper()` no longer emits a red stack trace on missing dictionary keys (first-install UX fix); `post_install.js` now seeds `def_global_mode` so the key is always present
|
|
45
|
+
- See 0.3.5 for the swig 1.5.0 security extension, and 0.3.4 for the `require('gina/gna')` stale-path fix
|
|
45
46
|
|
|
46
47
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
47
48
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.3.6
|
package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html
RENAMED
|
@@ -9,6 +9,96 @@
|
|
|
9
9
|
var envName = env.env || '?';
|
|
10
10
|
var dot = data.error ? '#e74c3c' : '#2ecc71';
|
|
11
11
|
|
|
12
|
+
// ── Inspector secret redaction (#R7) ──────────────────────────────────
|
|
13
|
+
// Matches the server-side rules in lib/inspector-redact. Strips secret-
|
|
14
|
+
// looking fields from anything passed to ginaToolbar.update() before it
|
|
15
|
+
// touches window.__ginaData or localStorage. Patterns/types/replacement
|
|
16
|
+
// come from window.__ginaData.gina.inspectorRedact (server-injected).
|
|
17
|
+
var _rdc = (d.gina && d.gina.inspectorRedact) || {};
|
|
18
|
+
var _rdcRepl = (typeof _rdc.replacement === 'string') ? _rdc.replacement : '[redacted]';
|
|
19
|
+
var _rdcTypes = {};
|
|
20
|
+
if (Array.isArray(_rdc.types)) {
|
|
21
|
+
for (var _ti = 0; _ti < _rdc.types.length; _ti++) {
|
|
22
|
+
_rdcTypes[String(_rdc.types[_ti]).toLowerCase()] = true;
|
|
23
|
+
}
|
|
24
|
+
} else {
|
|
25
|
+
_rdcTypes['password'] = true;
|
|
26
|
+
}
|
|
27
|
+
var _rdcRe = [];
|
|
28
|
+
var _rdcSrc = Array.isArray(_rdc.patterns) ? _rdc.patterns
|
|
29
|
+
: ['password','passwd','pwd','secret','token','apikey','api[_-]?key','cvv','cvc','ccv','pan','ssn','authorization','credentials','private[_-]?key'];
|
|
30
|
+
for (var _ri = 0; _ri < _rdcSrc.length; _ri++) {
|
|
31
|
+
try { _rdcRe.push(new RegExp(_rdcSrc[_ri], 'i')); } catch (e) { /* skip */ }
|
|
32
|
+
}
|
|
33
|
+
// Keys ending in rule/policy/config/validator suffixes describe validation
|
|
34
|
+
// metadata, not user input — must not be redacted even when the name
|
|
35
|
+
// contains a secret keyword (e.g. `passwordRule`). Mirrors the server-side
|
|
36
|
+
// NON_SECRET_SUFFIX regex in lib/inspector-redact.
|
|
37
|
+
var _rdcNonSecret = /(rule|rules|policy|policies|validator|config|configuration|settings|setting|meta|metadata|format|requirements|strength|constraint|constraints|options|option|schema|definition|definitions|spec|specs)$/i;
|
|
38
|
+
function _rdcKeyHit(k) {
|
|
39
|
+
if (typeof k !== 'string') return false;
|
|
40
|
+
if (_rdcNonSecret.test(k)) return false;
|
|
41
|
+
for (var i = 0; i < _rdcRe.length; i++) {
|
|
42
|
+
if (_rdcRe[i].test(k)) return true;
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
// Build a Set of secret field names from the form DOM (input[type=password]
|
|
47
|
+
// etc.). Lets us redact by actual input type, not just by field-name regex.
|
|
48
|
+
function _rdcDomSecrets(formId) {
|
|
49
|
+
var hits = {};
|
|
50
|
+
try {
|
|
51
|
+
var doc = (window.opener && window.opener.document) || document;
|
|
52
|
+
var form = formId ? doc.getElementById(formId) : null;
|
|
53
|
+
var els = form ? form.querySelectorAll('input,select,textarea') : doc.querySelectorAll('input');
|
|
54
|
+
for (var i = 0; i < els.length; i++) {
|
|
55
|
+
var t = (els[i].type || '').toLowerCase();
|
|
56
|
+
var n = els[i].name || els[i].id || '';
|
|
57
|
+
if (n && _rdcTypes[t]) hits[n] = true;
|
|
58
|
+
}
|
|
59
|
+
} catch (e) { /* cross-origin or detached opener */ }
|
|
60
|
+
return hits;
|
|
61
|
+
}
|
|
62
|
+
function _rdcWalk(v, depth, seen, domHits) {
|
|
63
|
+
if (depth > 50) return v;
|
|
64
|
+
if (v === null || typeof v !== 'object') return v;
|
|
65
|
+
if (seen.indexOf(v) !== -1) return '[circular]';
|
|
66
|
+
seen.push(v);
|
|
67
|
+
if (Array.isArray(v)) {
|
|
68
|
+
var arr = new Array(v.length);
|
|
69
|
+
for (var i = 0; i < v.length; i++) arr[i] = _rdcWalk(v[i], depth + 1, seen, domHits);
|
|
70
|
+
return arr;
|
|
71
|
+
}
|
|
72
|
+
var out = {};
|
|
73
|
+
var ks = Object.keys(v);
|
|
74
|
+
for (var k = 0; k < ks.length; k++) {
|
|
75
|
+
var key = ks[k];
|
|
76
|
+
var val = v[key];
|
|
77
|
+
if (_rdcKeyHit(key) || (domHits && domHits[key])) {
|
|
78
|
+
// Only primitive leaf values are redacted. Object/array values
|
|
79
|
+
// under a secret-like key are metadata (validation rules, error
|
|
80
|
+
// maps, validator specs keyed by form field name like
|
|
81
|
+
// `account[password]`) — walk into them so nested primitive
|
|
82
|
+
// secrets still get caught, but the rule structure itself
|
|
83
|
+
// passes through.
|
|
84
|
+
if (val === null || typeof val === 'undefined') {
|
|
85
|
+
out[key] = val;
|
|
86
|
+
} else if (typeof val === 'object') {
|
|
87
|
+
out[key] = _rdcWalk(val, depth + 1, seen, domHits);
|
|
88
|
+
} else {
|
|
89
|
+
out[key] = _rdcRepl;
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
out[key] = _rdcWalk(val, depth + 1, seen, domHits);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return out;
|
|
96
|
+
}
|
|
97
|
+
function _rdc_redact(value, formId) {
|
|
98
|
+
var domHits = formId ? _rdcDomSecrets(formId) : null;
|
|
99
|
+
return _rdcWalk(value, 0, [], domHits);
|
|
100
|
+
}
|
|
101
|
+
|
|
12
102
|
// ── ginaToolbar shim ──────────────────────────────────────────────────
|
|
13
103
|
// gina.min.js is a stale build that creates its own window.ginaToolbar
|
|
14
104
|
// with a loadData function that accesses removed DOM elements
|
|
@@ -29,23 +119,25 @@
|
|
|
29
119
|
|
|
30
120
|
if (section === 'data-xhr' || section === 'view-xhr') {
|
|
31
121
|
if (sectionData) {
|
|
32
|
-
|
|
33
|
-
|
|
122
|
+
var _safe = _rdc_redact(sectionData, null);
|
|
123
|
+
u[section] = _safe;
|
|
124
|
+
g[section] = _safe;
|
|
34
125
|
} else {
|
|
35
126
|
delete u[section];
|
|
36
127
|
delete g[section];
|
|
37
128
|
}
|
|
38
129
|
} else if (section === 'el-xhr') {
|
|
39
|
-
u['el-xhr'] = sectionData;
|
|
130
|
+
u['el-xhr'] = _rdc_redact(sectionData, null);
|
|
40
131
|
} else if (section === 'forms') {
|
|
41
132
|
if (typeof sectionData === 'object' && sectionData !== null && sectionData.id) {
|
|
42
133
|
if (!u.forms) u.forms = {};
|
|
43
134
|
if (!u.forms[sectionData.id]) u.forms[sectionData.id] = {};
|
|
44
135
|
var fd = u.forms[sectionData.id];
|
|
45
|
-
var
|
|
136
|
+
var _safeForm = _rdc_redact(sectionData, sectionData.id);
|
|
137
|
+
var fk = Object.keys(_safeForm);
|
|
46
138
|
for (var i = 0; i < fk.length; i++) {
|
|
47
139
|
if (fk[i] === 'id') continue;
|
|
48
|
-
fd[fk[i]] =
|
|
140
|
+
fd[fk[i]] = _safeForm[fk[i]];
|
|
49
141
|
}
|
|
50
142
|
}
|
|
51
143
|
}
|
|
Binary file
|
|
Binary file
|
|
@@ -21435,16 +21435,21 @@ function getDependencies(gina, cb) {
|
|
|
21435
21435
|
}
|
|
21436
21436
|
|
|
21437
21437
|
// Gina madatory dependencies are handled here
|
|
21438
|
+
// Webroot is resolved at runtime from `gina.config` (populated by gina.onload.min.js,
|
|
21439
|
+
// which IS whispered server-side). `core.js` ships in `gina.min.js`, which is served
|
|
21440
|
+
// as a static asset without a swig pass — so `{{ page.environment.webroot }}` tokens
|
|
21441
|
+
// embedded here would reach the browser un-interpolated and break the fetch.
|
|
21442
|
+
var _webroot = (gina && gina.config && gina.config.webroot) || '/';
|
|
21438
21443
|
var arr = [
|
|
21439
21444
|
// Get routing to populate `window.gina.config.routing`
|
|
21440
21445
|
// Now fetching routing from gina
|
|
21441
21446
|
{
|
|
21442
21447
|
func: loadRoutingConf,
|
|
21443
|
-
args: [ 'routing', {url:
|
|
21448
|
+
args: [ 'routing', {url: _webroot + '_gina/assets/routing.json'} ]
|
|
21444
21449
|
}
|
|
21445
21450
|
// {
|
|
21446
21451
|
// func: loadRoutingConf,
|
|
21447
|
-
// args: [ 'reverseRouting', {url:
|
|
21452
|
+
// args: [ 'reverseRouting', {url: _webroot + '_gina/assets/reverse-routing.json'} ]
|
|
21448
21453
|
// }
|
|
21449
21454
|
];
|
|
21450
21455
|
depsEventBus.addEventListener('deps.loaded', (event) => {
|
package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.min.js
RENAMED
|
@@ -530,6 +530,6 @@ function readyStateChange(){'complete'===document.readyState&&gina.ready()}
|
|
|
530
530
|
if('undefined'==typeof window.gina){var gina={_global:{register:function(r){if('undefined'!=typeof r)for(let I in r)window[I]=r[I]},unregister:function(r){if('undefined'==typeof r||!Array.isArray(r))throw Error('`variables` needs to ba an array');for(let I=0,G=r.length;I<G;I++)delete window[r[I]]},initialized:[]},ready:function(r,I){readyFired?setTimeout(function(){r(I)},1):(readyList.push({name:'anonymous',fn:r,ctx:I}),'complete'===document.readyState||!document.attachEvent&&'interactive'===document.readyState?
|
|
531
531
|
setTimeout(ready,1):readyEventHandlersInstalled||(document.addEventListener?(document.addEventListener('DOMContentLoaded',ready,!1),window.addEventListener('load',ready,!1)):(document.attachEvent('onreadystatechange',readyStateChange),window.attachEvent('onload',ready)),readyEventHandlersInstalled=!0))}};window.gina=gina}define('core',['require','gina'],function(r){r('gina')(window.gina)});require.config({packages:['gina']});require('vendor/engine.io core helpers/prototypes helpers/binding helpers/dateFormat gina/link gina/validator gina/popin gina/storage utils/dom utils/events utils/data utils/effects utils/polyfill lib/inherits lib/form-validator lib/collection lib/domain lib/routing'.split(' '));
|
|
532
532
|
function getDependencies(r,I){var G=new EventTarget,O=[{func:async function(C,D){D=D.url;var U=null,B=null,F=null;try{U=await fetch(D),B=await U.text(),'undefined'==typeof r&&(r={}),'undefined'==typeof window.gina.config&&(r.config={}),r.config[C]=JSON.parse(B),G.dispatchEvent(new CustomEvent('deps.loaded',{detail:{data:B,error:F,timestamp:new Date}}))}catch(f){F=Error('[ROUTING] Could not load routing\n'+(f.stack||f.message||f)),G.dispatchEvent(new CustomEvent('deps.loaded',{detail:{data:null,error:F,
|
|
533
|
-
timestamp:new Date}}))}},args:['routing',{url:
|
|
533
|
+
timestamp:new Date}}))}},args:['routing',{url:(r&&r.config&&r.config.webroot||'/')+'_gina/assets/routing.json'}]}];G.addEventListener('deps.loaded',C=>{O.splice(0,1);O.length||I()});try{for(let C=0,D=O.length;C<D;C++)O[C].func.apply(null,O[C].args)}catch(C){console.error(C.stack|C.message|C)}}
|
|
534
534
|
for(var tags=document.getElementsByTagName('script'),t=0,len=tags.length;t<len;++t)if(/(gina\.min\.js|gina\.js)/.test(tags[t].getAttribute('src'))){tags[t].onload=function(r){console.debug('Core Gina loaded !');getDependencies(gina,function(){if(window.onGinaLoaded)var I=window.onGinaLoaded;document.addEventListener?document.addEventListener('ginaloaded',function(G){window.gina=G.detail;I(G.detail)}):document.attachEvent&&document.attachEvent('ginaloaded',function(G){window.gina=G.detail;I(G.detail)})})}();
|
|
535
535
|
break};
|
package/framework/{v0.3.6-alpha.2 → v0.3.6}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz
RENAMED
|
Binary file
|
|
@@ -4,6 +4,8 @@ const lib = require('./../../lib') || require.cache[require.resolv
|
|
|
4
4
|
const Collection = lib.Collection;
|
|
5
5
|
const cache = new lib.Cache();
|
|
6
6
|
var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
|
|
7
|
+
// Inspector secret redaction (dev-mode only — never touches the actual response body)
|
|
8
|
+
var inspectorRedact = require('lib/inspector-redact');
|
|
7
9
|
|
|
8
10
|
// Inherited from controller
|
|
9
11
|
var self = null
|
|
@@ -270,7 +272,24 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
270
272
|
entries : local._timeline.entries
|
|
271
273
|
};
|
|
272
274
|
}
|
|
273
|
-
|
|
275
|
+
// #R7 — redact secret-looking fields from the Inspector clone before
|
|
276
|
+
// any sink (engine.io push, /_gina/agent SSE). The actual response
|
|
277
|
+
// body `jsonObj` is never touched — `redact()` returns a deep clone.
|
|
278
|
+
// The resolved redact config is exposed under `gina.inspectorRedact`
|
|
279
|
+
// so the standalone Inspector can mirror the same rules client-side.
|
|
280
|
+
var _jsonRedactConf = inspectorRedact.getConfig(local.options.conf);
|
|
281
|
+
var __gdPayload = {
|
|
282
|
+
gina : { environment: _env, inspectorRedact: {
|
|
283
|
+
patterns : _jsonRedactConf.patterns,
|
|
284
|
+
types : _jsonRedactConf.types,
|
|
285
|
+
replacement : _jsonRedactConf.replacement
|
|
286
|
+
}},
|
|
287
|
+
user : _gdUser
|
|
288
|
+
};
|
|
289
|
+
__gdPayload = inspectorRedact.redact(__gdPayload, {
|
|
290
|
+
compiledPatterns : _jsonRedactConf.compiledPatterns,
|
|
291
|
+
replacement : _jsonRedactConf.replacement
|
|
292
|
+
});
|
|
274
293
|
self.serverInstance._lastGinaData = __gdPayload;
|
|
275
294
|
process.emit('inspector#data', __gdPayload);
|
|
276
295
|
}
|
|
@@ -5,6 +5,8 @@ const lib = require('./../../lib') || require.cache[require.resolve(
|
|
|
5
5
|
const Collection = lib.Collection;
|
|
6
6
|
const cache = new lib.Cache();
|
|
7
7
|
var statusCodes = requireJSON( _( getPath('gina').core + '/status.codes') );
|
|
8
|
+
// Inspector secret redaction (dev-mode only — never touches the actual response body)
|
|
9
|
+
var inspectorRedact = require('lib/inspector-redact');
|
|
8
10
|
// Precompiled regex — avoids per-request RegExp allocation (#P3)
|
|
9
11
|
var blacklistRe = /[<>]/g;
|
|
10
12
|
|
|
@@ -1046,7 +1048,24 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
1046
1048
|
__gdUser.view.stylesheets = 'ignored-by-toolbar';
|
|
1047
1049
|
__gdUser.view.assets = assets;
|
|
1048
1050
|
|
|
1051
|
+
// Inspector secret redaction (#R7) — strip secret-looking fields from
|
|
1052
|
+
// the Inspector clone before any sink (HTML script tag, engine.io push,
|
|
1053
|
+
// /_gina/agent SSE). The actual template `data` is never touched.
|
|
1054
|
+
// Inject the resolved redact config so the statusbar shim can apply
|
|
1055
|
+
// the same rules to validator `ginaToolbar.update()` calls client-side.
|
|
1056
|
+
var _redactConf = inspectorRedact.getConfig(local.options.conf);
|
|
1057
|
+
__gdGina.inspectorRedact = {
|
|
1058
|
+
patterns : _redactConf.patterns,
|
|
1059
|
+
types : _redactConf.types,
|
|
1060
|
+
replacement : _redactConf.replacement
|
|
1061
|
+
};
|
|
1062
|
+
|
|
1049
1063
|
var __gdPayload = { gina: __gdGina, user: __gdUser };
|
|
1064
|
+
__gdPayload = inspectorRedact.redact(__gdPayload, {
|
|
1065
|
+
compiledPatterns : _redactConf.compiledPatterns,
|
|
1066
|
+
replacement : _redactConf.replacement
|
|
1067
|
+
});
|
|
1068
|
+
|
|
1050
1069
|
var __gdScript = '<script>window.__ginaData = '
|
|
1051
1070
|
+ JSON.stringify(__gdPayload)
|
|
1052
1071
|
.replace(/<\/script>/gi, '<\\/script>')
|
|
@@ -1454,6 +1454,19 @@ function Server(options) {
|
|
|
1454
1454
|
}
|
|
1455
1455
|
sameOrigin = false;
|
|
1456
1456
|
} else {
|
|
1457
|
+
// #B13 — preserve preflight echo of access-control-allow-headers.
|
|
1458
|
+
// checkPreflightRequest() echoes back the browser's
|
|
1459
|
+
// access-control-request-headers list so the preflight passes even
|
|
1460
|
+
// when the bundle's static ACAH config does not list every header
|
|
1461
|
+
// the client sends (e.g. Content-Type). Without this guard, the
|
|
1462
|
+
// static value below would overwrite that echo and break CORS.
|
|
1463
|
+
if (
|
|
1464
|
+
/^access\-control\-allow\-headers$/i.test(h)
|
|
1465
|
+
&& request.isPreflightRequest
|
|
1466
|
+
&& response.getHeader('access-control-allow-headers')
|
|
1467
|
+
) {
|
|
1468
|
+
continue;
|
|
1469
|
+
}
|
|
1457
1470
|
headerValue = resHeaders[h];
|
|
1458
1471
|
try {
|
|
1459
1472
|
response.setHeader(h, headerValue);
|
|
@@ -691,6 +691,27 @@ function ContextHelper(contexts) {
|
|
|
691
691
|
// );
|
|
692
692
|
// }
|
|
693
693
|
|
|
694
|
+
/**
|
|
695
|
+
* Interpolates `${key}` tokens in `replaceable` using values from `dictionary`.
|
|
696
|
+
*
|
|
697
|
+
* Handles three passes:
|
|
698
|
+
* 1. Quoted boolean/null shapes: `"${key}"` → unquoted literal when the value is a boolean or null.
|
|
699
|
+
* 2. Bare tokens: `${key}` → string value.
|
|
700
|
+
* 3. Embedded tokens inside a larger string (e.g. `~/.${projectName}`) via a manual
|
|
701
|
+
* replace to avoid infinite recursion on the regex engine.
|
|
702
|
+
*
|
|
703
|
+
* Unknown keys are left untouched silently — earlier revisions logged a
|
|
704
|
+
* "Whisper Error" on every first-run CLI command when a default had not yet
|
|
705
|
+
* been seeded (see #B12). Callers that need strict-mode behaviour must
|
|
706
|
+
* validate their dictionaries before the call.
|
|
707
|
+
*
|
|
708
|
+
* @global
|
|
709
|
+
* @function whisper
|
|
710
|
+
* @param {Object} dictionary - Map of `key → replacement` values.
|
|
711
|
+
* @param {Object|string} replaceable - Object or JSON-serialisable value containing `${key}` tokens.
|
|
712
|
+
* @param {RegExp} [rule] - Optional custom replace rule; when provided, short-circuits the three-pass logic.
|
|
713
|
+
* @returns {Object|string} The interpolated object or string. Unknown tokens are preserved verbatim.
|
|
714
|
+
*/
|
|
694
715
|
global.whisper = function(dictionary, replaceable, rule) {
|
|
695
716
|
// 1. Inline rule
|
|
696
717
|
if (typeof(rule) != 'undefined') {
|
|
@@ -736,17 +757,12 @@ function ContextHelper(contexts) {
|
|
|
736
757
|
if (dictionary[key] !== undefined) {
|
|
737
758
|
// Manual replace to avoid infinite recursion.
|
|
738
759
|
return s.replace(new RegExp('\\$\\{' + key + '\\}'), dictionary[key]);
|
|
739
|
-
} else {
|
|
740
|
-
// Generate stack trace to identify the caller
|
|
741
|
-
const stack = new Error().stack;
|
|
742
|
-
|
|
743
|
-
console.error(
|
|
744
|
-
`[Whisper Error]: The key \${${key}} was not found in the dictionary.\n` +
|
|
745
|
-
`Skipping replacement to prevent infinite loop.\n` +
|
|
746
|
-
`Stack Trace:\n${stack}`
|
|
747
|
-
);
|
|
748
|
-
return s;
|
|
749
760
|
}
|
|
761
|
+
// Key not in dictionary — leave the token in place silently.
|
|
762
|
+
// Earlier branches already handled the common shapes; reaching here
|
|
763
|
+
// means no seeded default exists yet. Emitting an error on every
|
|
764
|
+
// first-run CLI command was noisy and misleading (see #B12).
|
|
765
|
+
return s;
|
|
750
766
|
})
|
|
751
767
|
// OS Environment Variables
|
|
752
768
|
.replace(/\"\~\/\"|\"\$([_A-Z0-9]+)\"/g, function(s, key) {
|
|
@@ -536,12 +536,12 @@ function Initialize(opt) {
|
|
|
536
536
|
var main = require( _(self.opt.homedir + '/main.json', true) )
|
|
537
537
|
, version = getEnvVar('GINA_VERSION')
|
|
538
538
|
, defFramework = getEnvVar('GINA_DEF_FRAMEWORK') || main['def_framework']
|
|
539
|
-
, prefix = getEnvVar('GINA_PREFIX') || main['def_prefix'][self.release]
|
|
540
|
-
, globalMode = getEnvVar('GINA_GLOBAL_MODE') || main['def_global_mode'][self.release]
|
|
541
|
-
, arch = getEnvVar('GINA_ARCH') || main['def_arch'][self.release]
|
|
542
|
-
, platform = getEnvVar('GINA_PLATFORM') || main['def_platform'][self.release]
|
|
543
|
-
, env = getEnvVar('GINA_ENV') || main['def_env'][self.release]
|
|
544
|
-
, scope = getEnvVar('GINA_SCOPE') || main['def_scope'][self.release]
|
|
539
|
+
, prefix = getEnvVar('GINA_PREFIX') || (main['def_prefix'] && main['def_prefix'][self.release])
|
|
540
|
+
, globalMode = getEnvVar('GINA_GLOBAL_MODE') || (main['def_global_mode'] && main['def_global_mode'][self.release])
|
|
541
|
+
, arch = getEnvVar('GINA_ARCH') || (main['def_arch'] && main['def_arch'][self.release])
|
|
542
|
+
, platform = getEnvVar('GINA_PLATFORM') || (main['def_platform'] && main['def_platform'][self.release])
|
|
543
|
+
, env = getEnvVar('GINA_ENV') || (main['def_env'] && main['def_env'][self.release])
|
|
544
|
+
, scope = getEnvVar('GINA_SCOPE') || (main['def_scope'] && main['def_scope'][self.release])
|
|
545
545
|
, settings = requireJSON( _( getPath('gina').root + '/resources/home/settings.json', true ) )
|
|
546
546
|
, userSettings = {}
|
|
547
547
|
, target = _(self.opt.homedir +'/'+ self.release +'/settings.json', true)
|
|
@@ -690,7 +690,7 @@ function Initialize(opt) {
|
|
|
690
690
|
'run_dir' : _( getRunDir(), true ),
|
|
691
691
|
'tmp_dir' : _( getTmpDir(), true ),
|
|
692
692
|
'log_dir' : _( getLogDir(), true ),
|
|
693
|
-
'log_level' : getEnvVar('GINA_LOG_LEVEL') || main['def_log_level'][self.release] || 'info'
|
|
693
|
+
'log_level' : getEnvVar('GINA_LOG_LEVEL') || (main['def_log_level'] && main['def_log_level'][self.release]) || 'info'
|
|
694
694
|
};
|
|
695
695
|
|
|
696
696
|
settings = whisper(dic, settings);
|
|
@@ -803,7 +803,7 @@ function Initialize(opt) {
|
|
|
803
803
|
var main = require( self.opt.homedir + '/main.json' );
|
|
804
804
|
//has registered env ?
|
|
805
805
|
// dev by default
|
|
806
|
-
var env = getEnvVar('GINA_ENV') || main['def_env'][self.release];
|
|
806
|
+
var env = getEnvVar('GINA_ENV') || (main['def_env'] && main['def_env'][self.release]);
|
|
807
807
|
var readFromMainConf = true;
|
|
808
808
|
if ( typeof(local.projectData) != 'undefined' && local.env) {
|
|
809
809
|
readFromMainConf = false;
|
|
@@ -871,7 +871,7 @@ function Initialize(opt) {
|
|
|
871
871
|
var main = require( self.opt.homedir + '/main.json' );
|
|
872
872
|
//has registered scope ?
|
|
873
873
|
// scope by default
|
|
874
|
-
var scope = getEnvVar('GINA_SCOPE') || main['def_scope'][self.release];
|
|
874
|
+
var scope = getEnvVar('GINA_SCOPE') || (main['def_scope'] && main['def_scope'][self.release]);
|
|
875
875
|
var readFromMainConf = true;
|
|
876
876
|
if ( typeof(local.projectData) != 'undefined' && local.scope) {
|
|
877
877
|
readFromMainConf = false;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "gina-lib-inspector-redact",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Redacts secret-looking fields from Inspector payloads (dev-mode only).",
|
|
5
|
+
"authors": [
|
|
6
|
+
{
|
|
7
|
+
"name": "Martin-Luther ETOUMAN",
|
|
8
|
+
"email": "contact@gina.io"
|
|
9
|
+
}
|
|
10
|
+
],
|
|
11
|
+
"copyright": "Copyright (c) 2009-2026 Rhinostone <contact@gina.io>",
|
|
12
|
+
"engines": {
|
|
13
|
+
"node": ">=0.10.22"
|
|
14
|
+
},
|
|
15
|
+
"main": "src/main",
|
|
16
|
+
"license": "MIT"
|
|
17
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module inspector-redact
|
|
3
|
+
*
|
|
4
|
+
* Redacts secret-looking keys from Inspector payloads before they are shipped
|
|
5
|
+
* to window.__ginaData, localStorage.__ginaData, or /_gina/agent SSE frames.
|
|
6
|
+
*
|
|
7
|
+
* Dev-mode only. Never applied to the actual HTTP response body — the template
|
|
8
|
+
* still receives the real data object; only the Inspector clone is redacted.
|
|
9
|
+
*
|
|
10
|
+
* Configuration is read from settings.json:
|
|
11
|
+
*
|
|
12
|
+
* "inspector": {
|
|
13
|
+
* "redact": {
|
|
14
|
+
* "patterns": ["password", "pwd", "token", ...], // optional — extends/replaces defaults
|
|
15
|
+
* "types": ["password"], // client-side DOM input types
|
|
16
|
+
* "replacement": "[redacted]" // optional
|
|
17
|
+
* }
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* When `patterns` or `types` is omitted, the defaults below are used.
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
'use strict';
|
|
24
|
+
|
|
25
|
+
var DEFAULT_PATTERNS = [
|
|
26
|
+
'password', 'passwd', 'pwd',
|
|
27
|
+
'secret',
|
|
28
|
+
'token', 'apikey', 'api[_-]?key',
|
|
29
|
+
'cvv', 'cvc', 'ccv',
|
|
30
|
+
'pan', 'ssn',
|
|
31
|
+
'authorization', 'credentials',
|
|
32
|
+
'private[_-]?key'
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
var DEFAULT_TYPES = ['password'];
|
|
36
|
+
var REPLACEMENT = '[redacted]';
|
|
37
|
+
|
|
38
|
+
// Keys ending with these suffixes describe validation rules, policies, or
|
|
39
|
+
// config metadata — they do not hold user input. A key like `passwordRule`
|
|
40
|
+
// or `passwordPolicy` must pass through untouched even though it contains
|
|
41
|
+
// the substring "password". Matched case-insensitively at the very end of
|
|
42
|
+
// the key name.
|
|
43
|
+
var NON_SECRET_SUFFIX = /(rule|rules|policy|policies|validator|config|configuration|settings|setting|meta|metadata|format|requirements|strength|constraint|constraints|options|option|schema|definition|definitions|spec|specs)$/i;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Compile an array of regex source strings into RegExp objects. Invalid
|
|
47
|
+
* entries are dropped silently so a bad config key cannot crash a render.
|
|
48
|
+
* @param {string[]} patterns
|
|
49
|
+
* @returns {RegExp[]}
|
|
50
|
+
*/
|
|
51
|
+
function compile(patterns) {
|
|
52
|
+
var out = [];
|
|
53
|
+
if (!Array.isArray(patterns)) return out;
|
|
54
|
+
for (var i = 0; i < patterns.length; i++) {
|
|
55
|
+
try { out.push(new RegExp(patterns[i], 'i')); } catch (e) { /* skip */ }
|
|
56
|
+
}
|
|
57
|
+
return out;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* @param {string} key
|
|
62
|
+
* @param {RegExp[]} compiled
|
|
63
|
+
* @returns {boolean}
|
|
64
|
+
*/
|
|
65
|
+
function keyMatches(key, compiled) {
|
|
66
|
+
if (typeof key !== 'string') return false;
|
|
67
|
+
// Rule/policy/config keys describe validation, not user input — skip them
|
|
68
|
+
// even when the name contains a secret keyword (e.g. `passwordRule`).
|
|
69
|
+
if (NON_SECRET_SUFFIX.test(key)) return false;
|
|
70
|
+
for (var i = 0; i < compiled.length; i++) {
|
|
71
|
+
if (compiled[i].test(key)) return true;
|
|
72
|
+
}
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function walk(value, compiled, replacement, maxDepth, depth, seen) {
|
|
77
|
+
if (depth > maxDepth) return value;
|
|
78
|
+
if (value === null || typeof value !== 'object') return value;
|
|
79
|
+
if (seen.has(value)) return '[circular]';
|
|
80
|
+
seen.add(value);
|
|
81
|
+
|
|
82
|
+
if (Array.isArray(value)) {
|
|
83
|
+
var arr = new Array(value.length);
|
|
84
|
+
for (var i = 0; i < value.length; i++) {
|
|
85
|
+
arr[i] = walk(value[i], compiled, replacement, maxDepth, depth + 1, seen);
|
|
86
|
+
}
|
|
87
|
+
return arr;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
var out = {};
|
|
91
|
+
var keys = Object.keys(value);
|
|
92
|
+
for (var k = 0; k < keys.length; k++) {
|
|
93
|
+
var key = keys[k];
|
|
94
|
+
var v = value[key];
|
|
95
|
+
if (keyMatches(key, compiled)) {
|
|
96
|
+
// Only primitive leaf values are redacted. Object/array values under
|
|
97
|
+
// a secret-like key are metadata (validation rules, error maps,
|
|
98
|
+
// validator specs keyed by form field name like `account[password]`)
|
|
99
|
+
// — walk into them so any primitive secrets nested deeper still get
|
|
100
|
+
// caught, but the rule structure itself passes through.
|
|
101
|
+
if (v === null || typeof v === 'undefined') {
|
|
102
|
+
out[key] = v;
|
|
103
|
+
} else if (typeof v === 'object') {
|
|
104
|
+
out[key] = walk(v, compiled, replacement, maxDepth, depth + 1, seen);
|
|
105
|
+
} else {
|
|
106
|
+
out[key] = replacement;
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
out[key] = walk(v, compiled, replacement, maxDepth, depth + 1, seen);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return out;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Walk `obj` and replace values whose key matches any redaction pattern with
|
|
117
|
+
* `replacement` (default `[redacted]`). Returns a deep-cloned copy — the
|
|
118
|
+
* input object is never mutated. Circular references become `'[circular]'`.
|
|
119
|
+
*
|
|
120
|
+
* @param {*} obj
|
|
121
|
+
* @param {object} [options]
|
|
122
|
+
* @param {string[]} [options.patterns] - raw regex source strings (ignored if compiledPatterns is set)
|
|
123
|
+
* @param {RegExp[]} [options.compiledPatterns]
|
|
124
|
+
* @param {string} [options.replacement='[redacted]']
|
|
125
|
+
* @param {number} [options.maxDepth=50]
|
|
126
|
+
* @returns {*}
|
|
127
|
+
*/
|
|
128
|
+
function redact(obj, options) {
|
|
129
|
+
options = options || {};
|
|
130
|
+
var compiled = options.compiledPatterns
|
|
131
|
+
|| compile(options.patterns || DEFAULT_PATTERNS);
|
|
132
|
+
var replacement = (typeof options.replacement === 'string') ? options.replacement : REPLACEMENT;
|
|
133
|
+
var maxDepth = (typeof options.maxDepth === 'number') ? options.maxDepth : 50;
|
|
134
|
+
return walk(obj, compiled, replacement, maxDepth, 0, new WeakSet());
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Resolve redaction configuration from a bundle's conf object. Accepts either
|
|
139
|
+
* `conf.inspector.redact` or `conf.content.inspector.redact` — whichever
|
|
140
|
+
* exists wins. Unknown/invalid keys fall back to defaults.
|
|
141
|
+
*
|
|
142
|
+
* @param {object} conf
|
|
143
|
+
* @returns {{patterns:string[], types:string[], replacement:string, compiledPatterns:RegExp[]}}
|
|
144
|
+
*/
|
|
145
|
+
function getConfig(conf) {
|
|
146
|
+
var redactConf = null;
|
|
147
|
+
if (conf) {
|
|
148
|
+
if (conf.inspector && conf.inspector.redact) {
|
|
149
|
+
redactConf = conf.inspector.redact;
|
|
150
|
+
} else if (conf.content && conf.content.settings && conf.content.settings.inspector && conf.content.settings.inspector.redact) {
|
|
151
|
+
redactConf = conf.content.settings.inspector.redact;
|
|
152
|
+
} else if (conf.content && conf.content.inspector && conf.content.inspector.redact) {
|
|
153
|
+
redactConf = conf.content.inspector.redact;
|
|
154
|
+
} else if (conf.settings && conf.settings.inspector && conf.settings.inspector.redact) {
|
|
155
|
+
redactConf = conf.settings.inspector.redact;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
redactConf = redactConf || {};
|
|
159
|
+
|
|
160
|
+
var patterns = (Array.isArray(redactConf.patterns) && redactConf.patterns.length > 0)
|
|
161
|
+
? redactConf.patterns : DEFAULT_PATTERNS;
|
|
162
|
+
var types = (Array.isArray(redactConf.types) && redactConf.types.length > 0)
|
|
163
|
+
? redactConf.types : DEFAULT_TYPES;
|
|
164
|
+
var replacement = (typeof redactConf.replacement === 'string' && redactConf.replacement)
|
|
165
|
+
? redactConf.replacement : REPLACEMENT;
|
|
166
|
+
|
|
167
|
+
return {
|
|
168
|
+
patterns : patterns,
|
|
169
|
+
types : types,
|
|
170
|
+
replacement : replacement,
|
|
171
|
+
compiledPatterns : compile(patterns)
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
module.exports = {
|
|
176
|
+
DEFAULT_PATTERNS : DEFAULT_PATTERNS,
|
|
177
|
+
DEFAULT_TYPES : DEFAULT_TYPES,
|
|
178
|
+
REPLACEMENT : REPLACEMENT,
|
|
179
|
+
NON_SECRET_SUFFIX : NON_SECRET_SUFFIX,
|
|
180
|
+
compile : compile,
|
|
181
|
+
keyMatches : keyMatches,
|
|
182
|
+
redact : redact,
|
|
183
|
+
getConfig : getConfig
|
|
184
|
+
};
|
package/gna.js
CHANGED
|
@@ -15,14 +15,14 @@
|
|
|
15
15
|
'use strict';
|
|
16
16
|
|
|
17
17
|
// Framework core — the main gna module (lifecycle hooks, lib, etc.)
|
|
18
|
-
var _gna = require('./framework/v0.3.6
|
|
18
|
+
var _gna = require('./framework/v0.3.6/core/gna');
|
|
19
19
|
|
|
20
20
|
// SuperController and EntitySuper — loaded from their source modules
|
|
21
|
-
var SuperController = require('./framework/v0.3.6
|
|
22
|
-
var EntitySuper = require('./framework/v0.3.6
|
|
21
|
+
var SuperController = require('./framework/v0.3.6/core/controller');
|
|
22
|
+
var EntitySuper = require('./framework/v0.3.6/core/model/entity');
|
|
23
23
|
|
|
24
24
|
// uuid — from the lib registry
|
|
25
|
-
var uuid = require('./framework/v0.3.6
|
|
25
|
+
var uuid = require('./framework/v0.3.6/lib/uuid');
|
|
26
26
|
|
|
27
27
|
module.exports = {
|
|
28
28
|
|