gina 0.5.25 → 0.5.26
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 +17 -0
- package/README.md +22 -15
- package/ROADMAP.md +4 -3
- package/bin/cli +22 -1
- package/bin/cmd +11 -1
- package/bin/gina-init +1 -0
- package/framework/v0.5.26/VERSION +1 -0
- package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.js +10 -6
- package/framework/{v0.5.25 → v0.5.26}/core/config.js +29 -5
- package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/index.js +48 -3
- package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-json.js +4 -0
- package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-nunjucks.js +4 -0
- package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-swig.js +4 -0
- package/framework/{v0.5.25 → v0.5.26}/core/server.isaac.js +12 -0
- package/framework/{v0.5.25 → v0.5.26}/core/server.js +235 -1
- package/framework/{v0.5.25 → v0.5.26}/core/template/conf/settings.json +36 -0
- package/framework/{v0.5.25 → v0.5.26}/lib/authz-gate/src/main.js +169 -2
- package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/arguments.json +1 -0
- package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/help.txt +19 -6
- package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/mcp-start.js +47 -5
- package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/openapi.js +37 -4
- package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/init.js +28 -1
- package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/set.js +5 -0
- package/framework/{v0.5.25 → v0.5.26}/lib/connector-error/src/main.js +8 -4
- package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/mq/listener.js +32 -2
- package/framework/{v0.5.25 → v0.5.26}/lib/mcp-http/src/main.js +110 -11
- package/framework/{v0.5.25 → v0.5.26}/lib/merge/src/main.js +10 -6
- package/framework/{v0.5.25 → v0.5.26}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +10 -5
- package/package.json +3 -3
- package/resources/home/settings.json +1 -0
- package/schema/routing.json +20 -0
- package/schema/settings.json +13 -0
- package/utils/helper.js +1 -1
- package/framework/v0.5.25/VERSION +0 -1
- /package/framework/{v0.5.25 → v0.5.26}/AUTHORS +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/LICENSE +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/content.encoding +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/dev/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/gna.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/locales/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/mime.types +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/model/entity.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/model/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/router.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/server.express.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/status.codes +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/console.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/context.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/path.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/task.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/helpers/text.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/async/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/audit/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/audit-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/config.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/dto/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/job/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/job-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/math/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/model.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/proc.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/session-store.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/shell.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/state.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/url/README.md +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/url/index.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/validator.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.25 → v0.5.26}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,23 @@ 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.5.26 - 2026-07-25
|
|
10
|
+
### Added
|
|
11
|
+
* Bundles can now invert their authorization posture with `settings.json > auth.requireAuthByDefault: true`: every route requires an authenticated session unless its `routing.json` `param` block carries `"public": true`. It composes with the existing `requireAuth` / `roles` / `policy` keys rather than replacing them — an explicitly gated route behaves exactly as before, and `public` can never un-gate one. The mode is strictly opt-in and strictly boolean (a truthy string refuses to boot rather than leaving every route silently ungated), and it is keyed per bundle, so one bundle enabling it never changes the posture of a sibling in a merged-mode process. The injected routes the framework adds for you — the site root, the custom error page, `/_status` and the upload endpoints — ship `"public": true`, so enabling the mode does not take them offline. The boot refuses three configurations the mode would otherwise make dangerous: `"public": true` on a route that also declares an explicit gate key; a login route the mode would gate, which would bounce to itself in an infinite redirect; and a mode-gated route that also declares `cache`, because the render cache is read before authorization runs and its key carries no user identity. `gina bundle:openapi` reflects the mode, so the emitted specification never declares a newly gated route as unauthenticated. Enable it in a non-production environment first and read the boot line, which reports how many routes it just gated.
|
|
12
|
+
* Production transport posture (#COMPLY9): a bundle resolving a cleartext scheme outside the local scope now warns at boot, naming the remediation. `server.requireHttps: true` refuses to boot the cleartext bundle instead — pre-listen, so the port is never reachable — and `server.allowInsecure: true` acknowledges that TLS terminates upstream (mesh, ingress, reverse proxy), turning the warn into one info line. Both strict booleans; a non-boolean or setting both refuses to boot.
|
|
13
|
+
### Fixed
|
|
14
|
+
* Couchbase N1QL: a client-side SDK timeout now classifies as transient instead of permanent, and keeps its error message. The connector replaced the driver error with one built from the query `cause` envelope whenever that envelope was present — but the SDK attaches it to every query error, so a client-side timeout (which carries no server text) became an empty-message `Error` and lost the typed timeout class name the transient/permanent classifier matches on. The raw driver error is now forwarded whenever the envelope has no message to surface, so `err.isTransient` reports true and `err.message` keeps the SDK text. Server-side only — restart to pick it up.
|
|
15
|
+
* `gina bundle:mcp-start --transport=http` now reads `GINA_MCP_AUTH_TOKEN` through the framework environment reader instead of `process.env` directly. The CLI moves every `GINA_*` variable out of `process.env` into the framework environment during startup, so the resolver's direct read always came back empty and the token was silently never applied — a deployment that supplied the bearer token only through that variable ran with no authentication. The `--auth-token` flag and the `mcp.json > server > authToken` manifest field were not affected. If you set the token through the environment variable, restart the server and confirm the startup line now reports `bearer auth: enabled`.
|
|
16
|
+
* Couchbase N1QL: a `.sql` `@options` annotation that silently did nothing now logs a warning naming the problem. Two shapes were affected: an annotation the parser cannot read (braces are required — write `@options { … }`), and a parsed annotation whose keys are all dropped because no `consistency` key is present (keys such as `adhoc` or `timeout` apply only alongside `consistency`). Query behaviour is unchanged — the warning lists the ignored keys and shows the exact form to write. Server-side only — restart to pick it up.
|
|
17
|
+
* Corrected `lib/merge`'s documentation, which contradicted the shipped behaviour: the two-argument form preserves existing target keys on a conflict (`override` defaults to `false`, not `true` as documented), and the array example now shows the real result — a two-argument array merge combines elements (`merge([1,2],[3,4])` gives `[1,2,3,4]`), while replacing the target array requires `override=true`. Behaviour is unchanged; only the JSDoc (including its copy embedded in the browser bundle) was wrong.
|
|
18
|
+
* The JSON schemas now describe the route-authorization vocabulary. `auth.requireAuthByDefault` was missing from the `settings.json` schema whose `auth` block forbids unknown keys, so an editor flagged a perfectly valid deny-by-default configuration as invalid; and `param.requireAuth`, `param.roles`, `param.policy` and `param.public` were undeclared in the `routing.json` schema, so they were accepted but offered no completion, no type checking and no description on hover. Runtime behaviour is unchanged — the schemas are editor tooling, never enforced at boot.
|
|
19
|
+
### Security
|
|
20
|
+
* The framework control-plane listeners now bind an explicit host that defaults to loopback. A new `bind_host` setting (env `GINA_BIND_HOST`, flag `gina framework:set --bind-host=`) governs where the command socket and the MQ listener accept connections; it is separate from `host_v4`, which remains the address clients connect to, so a workstation pointing `host_v4` at another machine still starts its own daemon normally. Exposing the control plane beyond the local host is now a deliberate opt-in, the same way a bundle uses `--http-host`. Existing installs inherit the loopback default; set `bind_host` if you relied on reaching these ports from another machine.
|
|
21
|
+
* A command name arriving over the framework socket is now constrained to the shipped command namespace before it is resolved to a handler, so it can only ever resolve inside `lib/cmd/`. Unresolvable names are answered on the connection instead of ending the daemon process, which previously stopped serving every other client; a one-shot offline CLI run still exits non-zero. The MQ listener likewise skips a malformed frame rather than letting the parse failure drop the listener.
|
|
22
|
+
* The MCP Streamable HTTP transport now refuses to start without a bearer token once an ambient protection has been removed — that is, when it is bound to a non-loopback address, or when the `Origin` allowlist has been disabled with `allowedOrigins: ["*"]`. Nothing binds in that case, so the port is never reachable unauthenticated. The default posture is unchanged: on a loopback bind with the built-in `Origin` allowlist a token stays optional, because the bind and the allowlist are the protection. A new `allowInsecure` option (CLI `--allow-insecure`, or `mcp.json > server > allowInsecure`, strict boolean) waives the requirement for deployments that restrict access upstream instead — a service mesh, a NetworkPolicy, or an authenticating reverse proxy such as oauth2-proxy or nginx `auth_request`. Bearer validation now hashes both the presented and the configured token before the constant-time comparison, so neither the comparison nor its timing depends on token length.
|
|
23
|
+
* A route that declares both an authorization key (`param.requireAuth` / `param.roles` / `param.policy`) and `cache` now refuses to boot. The render cache is read before the authorization gate runs and its key carries no user identity, so the first authenticated response was replayed verbatim to every later unauthenticated caller. The boot refusal names the route and the remedy; as a second layer, the render delegates never store a body for a gated route even if the configuration bypassed the lint. `auth.requireAuthByDefault` already refused this pairing for mode-gated routes — it now covers explicitly gated ones too. ACTION REQUIRED: a bundle pairing an authorization key with `cache` will not start until you drop `cache` or open the route.
|
|
24
|
+
* A `method: "ws"` route that declares `param.requireAuth`, `param.roles` or `param.policy` now refuses to boot. A WebSocket handshake is answered by the engine's extended-CONNECT handler and never reaches the authorization gate, so those keys could never be enforced — yet the route linted clean, started, and was counted in the "Registered N authorization-gated route(s)" boot line, actively confirming protection that did not exist. Authenticate inside the `wsHandler` instead: it receives the full request and can inspect headers and cookies before accepting the socket. Relatedly, `auth.requireAuthByDefault` no longer counts WebSocket routes among the routes it gates, and names them at boot instead, since the mode cannot reach them either. ACTION REQUIRED: a bundle declaring an authorization key on a ws route will not start until the key is removed.
|
|
25
|
+
|
|
9
26
|
## 0.5.25 - 2026-07-25
|
|
10
27
|
### Added
|
|
11
28
|
* controller:add scaffolds a NAMESPACE controller inside a bundle and prints the paste-ready routing.json rules to wire it. It generates controllers/controller.<name>.js with one JSDoc'd action stub per --controls entry (or a single default action when --controls is omitted), auto-detecting the bundle flavor: a view bundle gets self.render() stubs plus one template per action at templates/html/<name>/<action>.html, while an API-only bundle gets self.renderJSON() stubs and no templates. --api / --views force the flavor. The routing rules are PRINTED for you to paste — routing.json is never edited — so restart the bundle after wiring them. Controller and action names are validated (a lowercase letter followed by letters, digits or underscores; `controller` is reserved), and an existing controller is refused rather than overwritten. Offline CLI command — no bundle rebuild.
|
package/README.md
CHANGED
|
@@ -59,21 +59,28 @@ open https://localhost:3100
|
|
|
59
59
|
|
|
60
60
|
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
61
61
|
|
|
62
|
-
## What's in 0.5.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
- **Added —
|
|
73
|
-
- **
|
|
74
|
-
- **Fixed —
|
|
75
|
-
- **Fixed —
|
|
76
|
-
- **Fixed — a
|
|
62
|
+
## What's in 0.5.26
|
|
63
|
+
|
|
64
|
+
> **Three behaviour changes to check before upgrading.** Two can stop a bundle
|
|
65
|
+
> that you have not otherwise touched: a route pairing an authorization key with
|
|
66
|
+
> `cache` now refuses to boot, and so does a `method: "ws"` route declaring
|
|
67
|
+
> `requireAuth` / `roles` / `policy`. The third only adds a boot line — a bundle
|
|
68
|
+
> resolving a cleartext scheme outside the `local` scope now warns, and refuses
|
|
69
|
+
> only if you opt in with `server.requireHttps`. See the
|
|
70
|
+
> [migration guide](https://gina.io/docs/migration) for each.
|
|
71
|
+
|
|
72
|
+
- **Added — deny-by-default authorization.** `settings.json > auth.requireAuthByDefault: true` inverts a bundle's posture: every route requires an authenticated session unless its `routing.json` `param` block carries `"public": true`. It composes with the existing `requireAuth` / `roles` / `policy` keys rather than replacing them — an explicitly gated route behaves exactly as before, and `public` can never un-gate one. The mode is strictly opt-in and strictly boolean (a truthy string refuses to boot rather than leaving every route silently ungated), and it is keyed per bundle, so one bundle enabling it never changes the posture of a sibling in a merged-mode process. The routes the framework injects for you — the site root, the custom error page, `/_status` and the upload endpoints — ship `"public": true`, so enabling the mode does not take them offline. The boot refuses three configurations the mode would otherwise make dangerous: `"public": true` on a route that also declares an explicit gate key; a login route the mode would gate, which would bounce to itself in an infinite redirect; and a mode-gated route that also declares `cache`, because the render cache is read before authorization runs and its key carries no user identity. `gina bundle:openapi` reflects the mode, so the emitted specification never declares a newly gated route as unauthenticated. Enable it in a non-production environment first and read the boot line, which reports how many routes it just gated. Server-side — restart your bundles. (#COMPLY10)
|
|
73
|
+
- **Added — a boot-time production transport posture guard.** A bundle resolving a cleartext scheme outside the `local` scope now warns once at boot, naming the remediation. `server.requireHttps: true` refuses to boot the cleartext bundle instead — pre-listen, so the port is never reachable — and `server.allowInsecure: true` acknowledges that TLS terminates upstream (mesh, ingress, reverse proxy), turning the warn into one info line. Both are strict booleans; a non-boolean, or setting both, refuses to boot. Server-side — restart your bundles. (#COMPLY9)
|
|
74
|
+
- **Fixed — Couchbase client-side query timeouts now classify as transient and keep their message.** The connector replaced the driver error with one built from the query `cause` envelope whenever that envelope was present — but the SDK attaches it to every query error, so a client-side timeout (which carries no server text) became an empty-message `Error` and lost the typed timeout class name the transient/permanent classifier matches on. The raw driver error is now forwarded whenever the envelope has no message to surface, so `err.isTransient` reports true and `err.message` keeps the SDK text. Server-side — restart your bundles.
|
|
75
|
+
- **Fixed — `gina bundle:mcp-start --transport=http` now actually applies `GINA_MCP_AUTH_TOKEN`.** It is read through the framework environment reader instead of `process.env` directly: the CLI moves every `GINA_*` variable out of `process.env` into the framework environment during startup, so the resolver's direct read always came back empty and the token was silently never applied — a deployment that supplied the bearer token only through that variable ran with no authentication. The `--auth-token` flag and the `mcp.json > server > authToken` manifest field were not affected. If you set the token through the environment variable, restart the server and confirm the startup line now reports `bearer auth: enabled`.
|
|
76
|
+
- **Fixed — a Couchbase `.sql` `@options` annotation that silently did nothing now warns.** Two shapes were affected: an annotation the parser cannot read (braces are required — write `@options { … }`), and a parsed annotation whose keys are all dropped because no `consistency` key is present (keys such as `adhoc` or `timeout` apply only alongside `consistency`). Query behaviour is unchanged — the warning lists the ignored keys and shows the exact form to write. Server-side — restart your bundles.
|
|
77
|
+
- **Fixed — the JSON schemas now describe the route-authorization vocabulary.** `auth.requireAuthByDefault` was missing from the `settings.json` schema whose `auth` block forbids unknown keys, so an editor flagged a perfectly valid deny-by-default configuration as invalid; and `param.requireAuth`, `param.roles`, `param.policy` and `param.public` were undeclared in the `routing.json` schema, so they were accepted but offered no completion, no type checking and no description on hover. Runtime behaviour is unchanged — the schemas are editor tooling, never enforced at boot.
|
|
78
|
+
- **Fixed — `lib/merge`'s documentation contradicted the shipped behaviour.** The two-argument form preserves existing target keys on a conflict (`override` defaults to `false`, not `true` as documented), and the array example now shows the real result — a two-argument array merge combines elements (`merge([1,2],[3,4])` gives `[1,2,3,4]`), while replacing the target array requires `override=true`. Behaviour is unchanged; only the JSDoc (including its copy embedded in the browser bundle) was wrong.
|
|
79
|
+
- **Security — the framework control-plane listeners now bind an explicit host that defaults to loopback.** A new `bind_host` setting (env `GINA_BIND_HOST`, flag `gina framework:set --bind-host=`) governs where the command socket and the MQ listener accept connections; it is separate from `host_v4`, which remains the address clients connect to, so a workstation pointing `host_v4` at another machine still starts its own daemon normally. Exposing the control plane beyond the local host is now a deliberate opt-in, the same way a bundle uses `--http-host`. Existing installs inherit the loopback default; set `bind_host` if you relied on reaching these ports from another machine.
|
|
80
|
+
- **Security — a command name arriving over the framework socket is constrained to the shipped command namespace** before it is resolved to a handler, so it can only ever resolve inside `lib/cmd/`. Unresolvable names are answered on the connection instead of ending the daemon process, which previously stopped serving every other client; a one-shot offline CLI run still exits non-zero. The MQ listener likewise skips a malformed frame rather than letting the parse failure drop the listener.
|
|
81
|
+
- **Security — a route that declares both an authorization key and `cache` now refuses to boot.** The render cache is read before the authorization gate runs and its key carries no user identity, so the first authenticated response was replayed verbatim to every later unauthenticated caller. The boot refusal names the route and the remedy; as a second layer, the render delegates never store a body for a gated route even if the configuration bypassed the lint. `auth.requireAuthByDefault` already refused this pairing for mode-gated routes — it now covers explicitly gated ones too. **Action required:** a bundle pairing `param.requireAuth` / `param.roles` / `param.policy` with `cache` will not start until you drop `cache` or open the route. (#B158)
|
|
82
|
+
- **Security — the MCP Streamable HTTP transport refuses to start without a bearer token once an ambient protection has been removed** — that is, when it is bound to a non-loopback address, or when the `Origin` allowlist has been disabled with `allowedOrigins: ["*"]`. Nothing binds in that case, so the port is never reachable unauthenticated. The default posture is unchanged: on a loopback bind with the built-in `Origin` allowlist a token stays optional, because the bind and the allowlist are the protection. A new `allowInsecure` option (CLI `--allow-insecure`, or `mcp.json > server > allowInsecure`, strict boolean) waives the requirement for deployments that restrict access upstream instead — a service mesh, a NetworkPolicy, or an authenticating reverse proxy. Bearer validation now hashes both the presented and the configured token before the constant-time comparison, so neither the comparison nor its timing depends on token length.
|
|
83
|
+
- **Security — a `method: "ws"` route that declares `param.requireAuth`, `param.roles` or `param.policy` now refuses to boot.** A WebSocket handshake is answered by the engine's extended-CONNECT handler and never reaches the authorization gate, so those keys could never be enforced — yet the route linted clean, started, and was counted in the "Registered N authorization-gated route(s)" boot line, actively confirming protection that did not exist. Authenticate inside the `wsHandler` instead: it receives the full request and can inspect headers and cookies before accepting the socket. Relatedly, `auth.requireAuthByDefault` no longer counts WebSocket routes among the routes it gates, and names them at boot instead. **Action required:** a bundle declaring an authorization key on a ws route will not start until the key is removed. (#B159)
|
|
77
84
|
|
|
78
85
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
79
86
|
|
package/ROADMAP.md
CHANGED
|
@@ -50,6 +50,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
50
50
|
| **Q3 2026** | `0.5.23` ✅ | **Fixed**: multipart `req.files[].size` now reports the exact stored byte count — the value was snapshotted before the write pipeline finished counting, coming up a varying whole-chunk short (file bytes on disk were always intact); it is finalized before the request resumes, so `self.store()` and any persister see the real size (#B142) · a multi-file multipart upload no longer hangs when an early small file finishes while a later large part is still streaming — the per-stream completion listeners now arm at creation (an already-finished stream's event never replays), and a mid-stream write error answers a guarded 500 instead of crashing the bundle; single-file uploads were unaffected (#B143) · the stale-release banner (`server.releaseWatch`) is now injected by the async template-loader render delegates too — a bundle on a custom async loader got the `/_gina/release/*` endpoints and SSE but no in-page banner; both async delegates (swig / nunjucks) now splice it onto the finalized HTML like the sync paths, CSP-nonce-aware, byte-inert outside the gate (#RWATCH) |
|
|
51
51
|
| **Q3 2026** | `0.5.24` ✅ | **Added**: upload progress for the staged upload client layer — the staging POST reports real client-to-server wire progress via a new `uploadProgress.<id>` form event and an opt-in declarative `<progress>` / percent indicator (#R8, slice 1) · drag-and-drop — a file input binds a named element as a dropzone that routes dropped files through the exact same staging pipeline as the native picker, opt-in and explicit-id-only with `idle`/`over`/`dropped` CSS state hooks (#R8, slice 2) · an incident `ref` on every error response — a short voice-relayable correlation code (present in all scopes) that a server-side log line pairs with the full error detail before the wire copy is stripped, so support can resolve a user-relayed ref to the exact failure even in production (#ERRREF) · a per-upload-group `simulateWriteError` flag (non-production only) to verify the upload write-error crash-guard on your own surface after an upgrade (#B144) · **Fixed**: the staged upload client layer no longer corrupts binary uploads — the multipart body is now a Blob of raw file bytes instead of a UTF-8-inflating DOMString, so images / PDFs / archives are stored byte-identical (the defect only surfaced on gina ≥ 0.5.22; corrupted files are losslessly recoverable) (#B148) · a misconfigured upload group whose destination directory cannot be created answers a guarded 500 instead of crashing the bundle (#B145) · a file input declaring only its upload action is no longer silently repointed at the reset/delete route (#B146) · an upload no longer throws in its success handler when no preview element is present (#B147) |
|
|
52
52
|
| **Q3 2026** | `0.5.25` ✅ | **Added**: microservices readiness — machine-caller authentication (an `Authorization: Bearer` key named in `settings.json > auth.machine.callers` satisfies route authorization without a session, opt-in and fail-closed, constant-time compared against boot-computed hashes, with an optional custom authenticator hook for JWT/HMAC/api-key schemes), cross-service request-id propagation (the always-on request id forwarded as `x-request-id` on every `self.query()` and echoed back on every response, so one logical request stays correlatable across bundles), an ungated `GET /_gina/health/check` on the express engine so container liveness probes no longer require the isaac engine, and the authorization contract in `bundle:openapi` (gated routes emit `401`/`403` entries and a `bearerAuth` security scheme, never role or policy names) · the `controller:` CLI group — `controller:add` scaffolds a namespace controller with per-action stubs and prints paste-ready routing rules, `controller:remove`/`rm` deletes only after a reference-aware scan that refuses while any routing rule or `requireController()` still points at it, and `controller:rename` rewrites the references it can resolve safely and reports the rest (#R9) · transient-vs-permanent classification for datastore connector errors — `err.isTransient` + a normalized `err.transientReason` on every connector query failure across all six datastore connectors, so an application can render an honest retry response without string-matching vendor error text; conservative by design, an unrecognized or genuinely permanent error classifies as permanent (#CE1) · `settings.swig.autoescape` to opt in to Swig output escaping (default unchanged; a non-boolean now refuses boot) · `server.proxy.requireForwardedHeaders` to require `X-Forwarded-Host` for proxy classification, the deterministic alternative to the port-less-Host heuristic · a `processing` state on the staged upload progress indicator, covering the server post-processing window so a full bar reads as working rather than stuck (#R8) · **Fixed**: absolute URLs poisoned by port-less internal calls — a health probe, service-mesh hop or service-DNS sibling call could rewrite the worker's proxy-host context and leak the internal host into later renders' `getUrl`/`url` output and cross-bundle redirect targets; emitting requests now prefer their own classification on both engines (#B152) · the Couchbase connector no longer hangs a request when an N1QL query fails at the socket level with no query-error envelope — the callback went un-fired and the request never settled (#B153) · a file input declaring only its staging upload action no longer emits a spurious warning-and-error pair on every bind · a staged-upload removal matching no preview now logs a diagnostic instead of silently skipping its whole cleanup path, including the temp-file delete (#B150) |
|
|
53
|
+
| **Q3 2026** | `0.5.26` ✅ | **Security**: a route pairing an authorization key (`param.requireAuth` / `param.roles` / `param.policy`) with `cache` now refuses to boot — both render-cache serve points run BEFORE the authorization gate and the cache key carries no user identity, so the first authenticated response was replayed verbatim to every later anonymous caller; as a second layer the render delegates never store a body for a gated route even if the configuration bypassed the lint (#B158) · a `method: "ws"` route declaring an authorization key now refuses to boot — a WebSocket handshake is answered by the engine's extended-CONNECT handler and never reaches the gate, so those keys could never be enforced while the boot line still counted the route as protected; authenticate inside the `wsHandler`, which receives the full request (#B159) · the framework control-plane listeners now bind an explicit host defaulting to loopback — a new `bind_host` setting (env `GINA_BIND_HOST`, `gina framework:set --bind-host=`), separate from `host_v4`, so exposing the command socket and MQ listener beyond the local host is a deliberate opt-in · a command name arriving over the framework socket is constrained to the shipped `lib/cmd/` namespace before it resolves, and an unresolvable name is answered on the connection instead of ending the daemon for every other client · the MCP Streamable HTTP transport refuses to start without a bearer token once an ambient protection is removed (a non-loopback bind, or `allowedOrigins: ["*"]`), with a new `allowInsecure` waiver for deployments that restrict access upstream · **Added**: deny-by-default authorization — `settings.json > auth.requireAuthByDefault: true` requires an authenticated session on every route unless its `param` block carries `"public": true`; opt-in, strictly boolean, keyed per bundle so one bundle never changes a sibling's posture in merged mode, with the framework-injected routes shipping exempt and boot refusals for the login-route lockout, the `public`-plus-explicit-key contradiction, and a mode-gated route that also declares `cache`; `bundle:openapi` follows the mode (#COMPLY10) · a boot-time production transport posture guard — a cleartext scheme outside the `local` scope warns once at boot, `server.requireHttps` refuses to start instead (pre-listen, so the port is never reachable), and `server.allowInsecure` acknowledges that TLS terminates upstream (#COMPLY9) · **Fixed**: Couchbase client-side query timeouts classify as transient and keep their message — the connector rebuilt the error from the query `cause` envelope the SDK attaches to every query error, so a client-side timeout became an empty-message `Error` that had lost the typed class name the classifier matches on (#B153) · `gina bundle:mcp-start --transport=http` now actually applies `GINA_MCP_AUTH_TOKEN` — the resolver read `process.env` directly while the CLI had already moved every `GINA_*` variable into the framework environment, so a deployment supplying the token only that way ran with no authentication · a `.sql` `@options` annotation that silently did nothing now warns, naming the ignored keys and showing the working form (#B155) · the `settings.json` and `routing.json` schemas now describe the route-authorization vocabulary, so an editor no longer flags a valid deny-by-default configuration as invalid · `lib/merge`'s JSDoc no longer documents an inverted `override` default |
|
|
53
54
|
| **Q4 2026** | `0.6.0` | Security & compliance controls (technical safeguards mapping to PCI-DSS / SOC2 / HIPAA) |
|
|
54
55
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
55
56
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
@@ -270,9 +271,9 @@ Technical-safeguard primitives that map to the **PCI-DSS**, **SOC2**, and **HIPA
|
|
|
270
271
|
| 📋 | **Application-level rate limiting** — Per-endpoint / per-client throttling at the route layer (today only an HTTP/2 rapid-reset limiter exists). Maps to PCI-DSS anti-automation and SOC2 availability. | `0.6.x` | Q4 2026 |
|
|
271
272
|
| 📋 | **Data-at-rest / field-level encryption helpers** — Field-level encryption + key-management utilities. Maps to PCI-DSS req 3 and HIPAA §164.312(a)(2)(iv). | `0.6.x` | Q4 2026 |
|
|
272
273
|
| 📋 | **Compliance control-mapping guide** — A reference mapping each Gina control to the PCI-DSS / SOC2 / HIPAA requirement it supports, plus an explicit "what the framework does not cover" section (to follow). | `0.6.x` | Q4 2026 |
|
|
273
|
-
|
|
|
274
|
-
|
|
|
275
|
-
|
|
|
274
|
+
| ✅ | **Transport-security posture** — A bundle resolving a cleartext scheme outside the local scope warns once at boot, naming the bundle, scheme, and scope alongside both remediations. `server.requireHttps: true` refuses the boot instead — the throw lands pre-listen, so the cleartext port is never reachable at all. `server.allowInsecure: true` is the "TLS terminates upstream" acknowledgment for the mesh / ingress / reverse-proxy topology, turning the warning into a single info line; declaring both is a boot-refused contradiction. Both are strict booleans resolved exactly like `scheme` itself — the bundle's settings win and `env.json`'s `server` block fills — and a non-boolean value refuses the boot in every scope. Terminating mTLS stays a mesh/ingress concern by design. Maps to the "encrypt everywhere / no implicit network trust" principle of NIST SP 800-207 (Zero Trust). | `0.5.26-alpha.2` | shipped |
|
|
275
|
+
| ✅ | **Deny-by-default authorization mode** — `settings.json > auth.requireAuthByDefault: true` inverts a bundle's posture: a route declaring no authorization key is gated rather than open, and opts back out with `param.public: true`. The mode is keyed per bundle, so one bundle's posture can never un-gate a sibling's in a merged process. The existing `requireAuth` / `roles` / `policy` keys are unaffected — only the un-annotated route changes — and `public` is evaluated inside the un-annotated branch, so a route carrying it alongside an explicit gate key stays gated even in a hand-edited config. The boot refuses the three shapes the mode makes dangerous: `public` beside an explicit gate key, a login route the mode would gate (an infinite self-bounce), and a mode-gated route that also declares `cache` (the render cache is read before authorization and its key carries no identity). The five framework-injected routes ship exempt, so enabling the mode cannot take the site root or the error renderer offline. Complements the shipped Authorization / RBAC control. Maps to NIST SP 800-207 least-privilege / deny-by-default. | `0.5.26-alpha.2` | shipped |
|
|
276
|
+
| ✅ | **Zero-Trust deployment guide** — [Running Gina zero-trust](https://gina.io/docs/guides/zero-trust) walks the NIST SP 800-207 tenets against the controls Gina actually ships: deny-by-default authorization, the transport-posture knobs, terminating mTLS at the mesh or ingress, network default-deny between services, keeping the framework control sockets on loopback, and shipping the built-in audit / metrics / request-correlation telemetry to a SOC. An honest-boundary companion to the compliance control-mapping guide — the framework supplies the enforcement point, identity, and telemetry; the deployment supplies transport identity and segmentation. | `0.5.26-alpha.2` | shipped |
|
|
276
277
|
|
|
277
278
|
---
|
|
278
279
|
|
package/bin/cli
CHANGED
|
@@ -55,6 +55,7 @@ async function onExec() {
|
|
|
55
55
|
, settings = null
|
|
56
56
|
, hostname = os.hostname() // by default
|
|
57
57
|
, hostV4 = null
|
|
58
|
+
, bindHost = null
|
|
58
59
|
, mqPort = null
|
|
59
60
|
, settingsPath = null
|
|
60
61
|
, err = null
|
|
@@ -122,6 +123,13 @@ async function onExec() {
|
|
|
122
123
|
continue;
|
|
123
124
|
}
|
|
124
125
|
|
|
126
|
+
if ( isFrameworkScopedCmd && /^\-\-bind\-host/.test(params[p]) ) {
|
|
127
|
+
let bind = params[p].split(/\=/)[1];
|
|
128
|
+
setEnvVar('GINA_BIND_HOST', bind);// jshint ignore:line
|
|
129
|
+
isUpdateRequired = true;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
|
|
125
133
|
if ( isFrameworkScopedCmd && /^\-\-hostname/.test(params[p]) ) {
|
|
126
134
|
hostname = params[p].split(/\=/)[1];
|
|
127
135
|
setEnvVar('GINA_HOSTNAME', hostname);// jshint ignore:line
|
|
@@ -185,6 +193,7 @@ async function onExec() {
|
|
|
185
193
|
if (_hasUnresolved(settings['mq_port'])) { settings['mq_port'] = 8125; }
|
|
186
194
|
if (_hasUnresolved(settings['port'])) { settings['port'] = 8124; }
|
|
187
195
|
if (_hasUnresolved(settings['host_v4'])) { settings['host_v4'] = '127.0.0.1'; }
|
|
196
|
+
if (_hasUnresolved(settings['bind_host'])) { settings['bind_host'] = '127.0.0.1'; }
|
|
188
197
|
if (_hasUnresolved(settings['hostname'])) { settings['hostname'] = undefined; }
|
|
189
198
|
|
|
190
199
|
setEnvVar('GINA_LOG_LEVEL', settings['log_level']);// jshint ignore:line
|
|
@@ -238,6 +247,12 @@ async function onExec() {
|
|
|
238
247
|
}
|
|
239
248
|
hostV4 = getEnvVar('GINA_HOST_V4') || settings['host_v4'] || '127.0.0.1';// jshint ignore:line
|
|
240
249
|
mqPort = getEnvVar('GINA_MQ_PORT')|| settings['mq_port'] || 8125;// jshint ignore:line
|
|
250
|
+
// Bind address for the framework control sockets (command socket + MQ
|
|
251
|
+
// listener). Deliberately independent of `host_v4`, which is the
|
|
252
|
+
// address CLIENTS connect to: a workstation may legitimately point
|
|
253
|
+
// `host_v4` at another machine, and inheriting that as a bind address
|
|
254
|
+
// would make the local daemon fail to start (EADDRNOTAVAIL).
|
|
255
|
+
bindHost = getEnvVar('GINA_BIND_HOST') || settings['bind_host'] || '127.0.0.1';// jshint ignore:line
|
|
241
256
|
|
|
242
257
|
if (!isUpdateRequired) {
|
|
243
258
|
setEnvVar('GINA_HOST_V4', settings['host_v4']);// jshint ignore:line
|
|
@@ -266,7 +281,10 @@ async function onExec() {
|
|
|
266
281
|
if ( /(gina\/bin\/cli|gina\/\/bin\/gina)$/.test(process.argv[1]) ) {
|
|
267
282
|
|
|
268
283
|
var MQListener = require(frameworkPath + '/lib/logger/src/containers/mq/listener.js');
|
|
269
|
-
|
|
284
|
+
// The listener reads `opt.hostV4` (see listener.js); passing `host`
|
|
285
|
+
// left it undefined, which binds every interface. Bind the control
|
|
286
|
+
// plane to `bind_host` (loopback by default) like the command socket.
|
|
287
|
+
var mqListener = await new MQListener({ port: mqPort, hostV4: bindHost });
|
|
270
288
|
// required for tail command
|
|
271
289
|
var mqPortFile = getTmpDir() + '/mq-listener-v'+ version +'.port';// jshint ignore:line
|
|
272
290
|
console.debug('Writting: '+ mqPortFile);
|
|
@@ -323,6 +341,7 @@ async function onExec() {
|
|
|
323
341
|
|
|
324
342
|
settings['mq_port'] = getEnvVar('GINA_MQ_PORT') || settings['mq_port'] || null;// jshint ignore:line
|
|
325
343
|
settings['host_v4'] = getEnvVar('GINA_HOST_V4') || settings['host_v4'] || null;// jshint ignore:line
|
|
344
|
+
settings['bind_host'] = getEnvVar('GINA_BIND_HOST') || settings['bind_host'] || null;// jshint ignore:line
|
|
326
345
|
settings['hostname'] = getEnvVar('GINA_HOSTNAME') || settings['hostname'] || null;// jshint ignore:line
|
|
327
346
|
generator.createFileFromDataSync(settings, settingsPath);// jshint ignore:line
|
|
328
347
|
}
|
|
@@ -391,6 +410,7 @@ async function onExec() {
|
|
|
391
410
|
homedir : home,
|
|
392
411
|
port : port,
|
|
393
412
|
hostV4 : hostV4,
|
|
413
|
+
bindHost : bindHost,
|
|
394
414
|
mqPort : mqPort,
|
|
395
415
|
hostname : hostname,
|
|
396
416
|
debugPort : debugPort,
|
|
@@ -418,6 +438,7 @@ async function onExec() {
|
|
|
418
438
|
homedir : home,
|
|
419
439
|
port : port,
|
|
420
440
|
hostV4 : hostV4,
|
|
441
|
+
bindHost : bindHost,
|
|
421
442
|
mqPort : mqPort,
|
|
422
443
|
hostname : hostname,
|
|
423
444
|
debugPort : debugPort,
|
package/bin/cmd
CHANGED
|
@@ -25,6 +25,10 @@ function Cmd(opt, runOffine) {
|
|
|
25
25
|
local.hostV4 = opt.hostV4;
|
|
26
26
|
local.mqPort = opt.mqPort;
|
|
27
27
|
local.port = opt.port;
|
|
28
|
+
// Bind address for the framework command socket. Defaults to loopback
|
|
29
|
+
// here as well as at the resolution site (bin/cli), so a caller that
|
|
30
|
+
// omits the key can never widen the bind by accident.
|
|
31
|
+
local.bindHost = opt.bindHost || '127.0.0.1';
|
|
28
32
|
|
|
29
33
|
lib = require(local.frameworkPath + "/lib");
|
|
30
34
|
|
|
@@ -145,7 +149,13 @@ function Cmd(opt, runOffine) {
|
|
|
145
149
|
}
|
|
146
150
|
});
|
|
147
151
|
|
|
148
|
-
|
|
152
|
+
// The command socket is a local control plane: a connection to it
|
|
153
|
+
// executes a framework CLI command. `listen(port, cb)` with no host
|
|
154
|
+
// argument binds every interface, so the bind host is passed
|
|
155
|
+
// explicitly and defaults to loopback (`bind_host` / GINA_BIND_HOST).
|
|
156
|
+
// Widening it is a deliberate opt-in, the same way a bundle's
|
|
157
|
+
// `--http-host` is.
|
|
158
|
+
framework.listen(local.port, local.bindHost, function() { //'listening' listener
|
|
149
159
|
|
|
150
160
|
//First time launch.
|
|
151
161
|
lib.cmd.load({
|
package/bin/gina-init
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.26
|
|
@@ -2154,13 +2154,15 @@ define("requireLib", function(){});
|
|
|
2154
2154
|
* Works in Node.js (CommonJS) and browser (AMD / GFF) contexts.
|
|
2155
2155
|
*
|
|
2156
2156
|
* - Objects are merged recursively.
|
|
2157
|
-
* -
|
|
2158
|
-
*
|
|
2157
|
+
* - Missing keys are always filled from `source`; on a CONFLICTING key the
|
|
2158
|
+
* `target` value is preserved by default.
|
|
2159
|
+
* - Pass `true` as the last argument (`override`) to make `source` win instead.
|
|
2159
2160
|
*
|
|
2160
2161
|
* @example
|
|
2161
2162
|
* var merge = require('lib/merge');
|
|
2162
2163
|
* var result = merge({ a: 1 }, { b: 2 }); // { a: 1, b: 2 }
|
|
2163
|
-
* merge({ a: 1 }, { a: 9 }
|
|
2164
|
+
* merge({ a: 1 }, { a: 9 }); // { a: 1 } — default: target wins on conflicts
|
|
2165
|
+
* merge({ a: 1 }, { a: 9 }, true); // { a: 9 } — override: source wins
|
|
2164
2166
|
*/
|
|
2165
2167
|
|
|
2166
2168
|
/**
|
|
@@ -2186,13 +2188,15 @@ function Merge() {
|
|
|
2186
2188
|
*
|
|
2187
2189
|
* @param {object|Array} target - Target (base) object or array
|
|
2188
2190
|
* @param {object|Array} source - Source object or array to merge into target
|
|
2189
|
-
* @param {boolean} [override=
|
|
2191
|
+
* @param {boolean} [override=false] - Pass `true` to let `source` overwrite existing target keys; by default they are preserved
|
|
2190
2192
|
* @returns {object|Array} Merged result (mutates and returns `target`)
|
|
2191
2193
|
*
|
|
2192
2194
|
* @example
|
|
2193
2195
|
* merge({ a: 1 }, { b: 2 }) // { a: 1, b: 2 }
|
|
2194
|
-
* merge({ a: 1 }, { a: 9 }
|
|
2195
|
-
* merge(
|
|
2196
|
+
* merge({ a: 1 }, { a: 9 }) // { a: 1 } — default: target wins
|
|
2197
|
+
* merge({ a: 1 }, { a: 9 }, true) // { a: 9 }
|
|
2198
|
+
* merge([1, 2], [3, 4]) // [1, 2, 3, 4]
|
|
2199
|
+
* merge([1, 2], [3, 4], true) // [3, 4]
|
|
2196
2200
|
*/
|
|
2197
2201
|
var browse = function (_target, _source) {
|
|
2198
2202
|
|
|
@@ -1940,7 +1940,14 @@ function Config(opt, contextResetNeeded) {
|
|
|
1940
1940
|
url: '/_status',
|
|
1941
1941
|
method: 'GET',
|
|
1942
1942
|
param: {
|
|
1943
|
-
control: 'getBundleStatus'
|
|
1943
|
+
control: 'getBundleStatus',
|
|
1944
|
+
// #COMPLY10 — the framework-injected routes carry no authorization keys,
|
|
1945
|
+
// so `auth.requireAuthByDefault` would gate every one of them and a
|
|
1946
|
+
// bundle would lock itself out by flipping one settings key. Marking
|
|
1947
|
+
// them public preserves today's behaviour when a bundle opts into the
|
|
1948
|
+
// mode; a bundle that WANTS one of them gated declares its own route at
|
|
1949
|
+
// the same url. This is a monitoring surface, so it stays reachable.
|
|
1950
|
+
public: true
|
|
1944
1951
|
},
|
|
1945
1952
|
scopes: [ ''+ scope ]
|
|
1946
1953
|
};
|
|
@@ -1955,7 +1962,12 @@ function Config(opt, contextResetNeeded) {
|
|
|
1955
1962
|
param: {
|
|
1956
1963
|
control: 'renderCustomError',
|
|
1957
1964
|
// default data : will be fed on error
|
|
1958
|
-
error: {}
|
|
1965
|
+
error: {},
|
|
1966
|
+
// #COMPLY10 — the error RENDERER. Gating it would mean an error is
|
|
1967
|
+
// rendered through a route that itself denies, so a bundle under
|
|
1968
|
+
// deny-by-default could not render its own error pages. Exempt
|
|
1969
|
+
// unconditionally.
|
|
1970
|
+
public: true
|
|
1959
1971
|
},
|
|
1960
1972
|
scopes: [ ''+ scope ]
|
|
1961
1973
|
};
|
|
@@ -1975,7 +1987,13 @@ function Config(opt, contextResetNeeded) {
|
|
|
1975
1987
|
control: "redirect",
|
|
1976
1988
|
ignoreWebRoot: true,
|
|
1977
1989
|
path: wroot,
|
|
1978
|
-
code: 302
|
|
1990
|
+
code: 302,
|
|
1991
|
+
// #COMPLY10 — with `webrootAutoredirect` this route's url becomes
|
|
1992
|
+
// `'/,'+ …`, i.e. it also matches the SITE ROOT, across
|
|
1993
|
+
// GET/POST/PUT/DELETE/HEAD. Gating it would make `/` itself deny,
|
|
1994
|
+
// so deny-by-default would take the app's entry point offline. A
|
|
1995
|
+
// redirect-control route does run the gate, so this is not theoretical.
|
|
1996
|
+
public: true
|
|
1979
1997
|
},
|
|
1980
1998
|
scopes: [ ''+ scope ],
|
|
1981
1999
|
bundle: bundle,
|
|
@@ -2002,7 +2020,11 @@ function Config(opt, contextResetNeeded) {
|
|
|
2002
2020
|
"method": "POST",
|
|
2003
2021
|
"param": {
|
|
2004
2022
|
"control": "uploadToTmp",
|
|
2005
|
-
"title": "Upload file"
|
|
2023
|
+
"title": "Upload file",
|
|
2024
|
+
// #COMPLY10 — preserves today's behaviour under the mode. A
|
|
2025
|
+
// deny-by-default bundle that wants uploads authenticated
|
|
2026
|
+
// declares its own POST route at this url.
|
|
2027
|
+
"public": true
|
|
2006
2028
|
},
|
|
2007
2029
|
"scopes": [ ""+ scope ]
|
|
2008
2030
|
}
|
|
@@ -2015,7 +2037,9 @@ function Config(opt, contextResetNeeded) {
|
|
|
2015
2037
|
"method": "POST",
|
|
2016
2038
|
"param": {
|
|
2017
2039
|
"control": "deleteFromTmp",
|
|
2018
|
-
"title": "Delete uploaded file"
|
|
2040
|
+
"title": "Delete uploaded file",
|
|
2041
|
+
// #COMPLY10 — see `upload-to-tmp-xml` above.
|
|
2042
|
+
"public": true
|
|
2019
2043
|
},
|
|
2020
2044
|
"scopes": [ ""+ scope ]
|
|
2021
2045
|
}
|
|
@@ -408,6 +408,17 @@ function Couchbase(conn, infos) {
|
|
|
408
408
|
} catch (parseErr) {
|
|
409
409
|
console.warn('[CONNECTOR] @options parse error in .sql file: ' + parseErr.message);
|
|
410
410
|
}
|
|
411
|
+
} else if ( /\@options/.test(queryString) ) {
|
|
412
|
+
// #B155 — the file SAYS `@options` but the annotation regex above matched
|
|
413
|
+
// nothing, so the whole annotation is a silent no-op. The regex demands
|
|
414
|
+
// `@options { … }` (single space, braces) — the historical docs taught a
|
|
415
|
+
// brace-less `key=value` form, and a double space before the brace misses
|
|
416
|
+
// too. Warn with the exact expected shape. (A prose mention of `@options`
|
|
417
|
+
// inside a comment also lands here — accepted: a spurious warn is cheaper
|
|
418
|
+
// than a silently-dead annotation.)
|
|
419
|
+
console.warn('[CONNECTOR] found `@options` but could not parse a brace-delimited object — '
|
|
420
|
+
+ 'annotation ignored. Write it as: @options { consistency: "request_plus" }\n'
|
|
421
|
+
+ 'Found on: ' + queryString.substring(0, 80));
|
|
411
422
|
}
|
|
412
423
|
optionsArr = null;
|
|
413
424
|
|
|
@@ -711,6 +722,16 @@ function Couchbase(conn, infos) {
|
|
|
711
722
|
if (o == 'consistency') continue;
|
|
712
723
|
queryOptions[o] = options[o];
|
|
713
724
|
}
|
|
725
|
+
} else if ( options && Object.keys(options).length ) {
|
|
726
|
+
// #B155 — a parsed `@options` with no `consistency` key never reaches
|
|
727
|
+
// the SDK: the passthrough above is gated on `consistency`, so every
|
|
728
|
+
// other key is dropped. Warn instead of silently ignoring; the gate
|
|
729
|
+
// itself stays (un-gating would make historically-inert options
|
|
730
|
+
// suddenly live for every consumer). An empty `@options {}` drops
|
|
731
|
+
// nothing and stays quiet.
|
|
732
|
+
console.warn('[CONNECTOR] @options is missing a `consistency` key — ignoring: '
|
|
733
|
+
+ Object.keys(options).join(', ')
|
|
734
|
+
+ '. Add e.g. "consistency": "not_bounded" alongside them to apply.\nFound on: '+ queryStatement);
|
|
714
735
|
}
|
|
715
736
|
|
|
716
737
|
|
|
@@ -986,8 +1007,18 @@ function Couchbase(conn, infos) {
|
|
|
986
1007
|
// never fired and the request hung forever. Build a usable error
|
|
987
1008
|
// on BOTH paths (forwarding the raw error preserves its
|
|
988
1009
|
// code/errno for downstream classification) and always settle.
|
|
1010
|
+
//
|
|
1011
|
+
// #B153 residual — synthesize ONLY when there is envelope text to
|
|
1012
|
+
// surface. The node binding marshals first_error_code /
|
|
1013
|
+
// first_error_message onto EVERY query error, so a CLIENT-side SDK
|
|
1014
|
+
// timeout arrives with a defined-but-EMPTY message; building
|
|
1015
|
+
// `new Error('')` from it destroyed the typed class name
|
|
1016
|
+
// (Un/AmbiguousTimeoutError) the classifier matches on, and a
|
|
1017
|
+
// retryable timeout was reported permanent. Raw-forwarding is
|
|
1018
|
+
// lossless here: the raw error keeps `.cause`, so even an
|
|
1019
|
+
// empty-message server envelope still classifies off the code table.
|
|
989
1020
|
var error;
|
|
990
|
-
if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' ) {
|
|
1021
|
+
if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' && err.cause.first_error_message !== '' ) {
|
|
991
1022
|
error = new Error(err.cause.first_error_message);
|
|
992
1023
|
error.stack = trigger +'\n'+ err.cause.http_body;
|
|
993
1024
|
error.cause = err.cause;
|
|
@@ -1037,8 +1068,18 @@ function Couchbase(conn, infos) {
|
|
|
1037
1068
|
// never fired and the request hung forever. Build a usable error
|
|
1038
1069
|
// on BOTH paths (forwarding the raw error preserves its
|
|
1039
1070
|
// code/errno for downstream classification) and always settle.
|
|
1071
|
+
//
|
|
1072
|
+
// #B153 residual — synthesize ONLY when there is envelope text to
|
|
1073
|
+
// surface. The node binding marshals first_error_code /
|
|
1074
|
+
// first_error_message onto EVERY query error, so a CLIENT-side SDK
|
|
1075
|
+
// timeout arrives with a defined-but-EMPTY message; building
|
|
1076
|
+
// `new Error('')` from it destroyed the typed class name
|
|
1077
|
+
// (Un/AmbiguousTimeoutError) the classifier matches on, and a
|
|
1078
|
+
// retryable timeout was reported permanent. Raw-forwarding is
|
|
1079
|
+
// lossless here: the raw error keeps `.cause`, so even an
|
|
1080
|
+
// empty-message server envelope still classifies off the code table.
|
|
1040
1081
|
var error;
|
|
1041
|
-
if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' ) {
|
|
1082
|
+
if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' && err.cause.first_error_message !== '' ) {
|
|
1042
1083
|
error = new Error(err.cause.first_error_message);
|
|
1043
1084
|
error.stack = trigger +'\n'+ err.cause.http_body;
|
|
1044
1085
|
error.cause = err.cause;
|
|
@@ -1301,8 +1342,12 @@ function Couchbase(conn, infos) {
|
|
|
1301
1342
|
// err.cause.first_error_message on it threw a swallowed TypeError so
|
|
1302
1343
|
// self.emit never fired and the request hung. Emit a usable error on
|
|
1303
1344
|
// BOTH paths (the raw error preserves its code/errno).
|
|
1345
|
+
// #B153 residual — the empty-message clause: a CLIENT-side SDK timeout
|
|
1346
|
+
// carries a defined-but-EMPTY first_error_message, so synthesizing from it
|
|
1347
|
+
// destroyed the typed class name the classifier matches on. Synthesize only
|
|
1348
|
+
// when there is envelope text; raw-forwarding keeps `.cause` either way.
|
|
1304
1349
|
var error;
|
|
1305
|
-
if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' ) {
|
|
1350
|
+
if ( err && err.cause && typeof(err.cause.first_error_message) != 'undefined' && err.cause.first_error_message !== '' ) {
|
|
1306
1351
|
error = new Error(err.cause.first_error_message);
|
|
1307
1352
|
error.stack = trigger +'\n'+ err.cause.http_body;
|
|
1308
1353
|
error.cause = err.cause;
|
|
@@ -47,6 +47,10 @@ async function writeCache(bundle, opt, jsonContent, req, res, cacheIsEnabled, th
|
|
|
47
47
|
! req.routing.cache
|
|
48
48
|
||
|
|
49
49
|
! /^true$/i.test(cacheIsEnabled)
|
|
50
|
+
||
|
|
51
|
+
// #B158 — a gated route is never stored: the key carries no principal and
|
|
52
|
+
// both serve points run before the gate. Full rationale on isRouteGated.
|
|
53
|
+
lib.authzGate.isRouteGated(req)
|
|
50
54
|
) {
|
|
51
55
|
return;
|
|
52
56
|
}
|
|
@@ -880,6 +880,10 @@ async function writeCache(local, self, bundle, opt, htmlContent, req, res) {
|
|
|
880
880
|
! req.routing.cache
|
|
881
881
|
||
|
|
882
882
|
String(self.serverInstance._cacheIsEnabled).toLowerCase() !== 'true'
|
|
883
|
+
||
|
|
884
|
+
// #B158 — a gated route is never stored: the key carries no principal and
|
|
885
|
+
// both serve points run before the gate. Full rationale on isRouteGated.
|
|
886
|
+
libRef.authzGate.isRouteGated(req)
|
|
883
887
|
) {
|
|
884
888
|
return;
|
|
885
889
|
}
|
|
@@ -49,6 +49,10 @@ async function writeCache(bundle, opt, htmlContent, req, res, cacheIsEnabled, th
|
|
|
49
49
|
// replaced: /^true$/i.test() (#P6); flag threaded as a param — module scope
|
|
50
50
|
// has no render()-scoped bindings (see the #INS10 note at the top of this file)
|
|
51
51
|
String(cacheIsEnabled).toLowerCase() !== 'true'
|
|
52
|
+
||
|
|
53
|
+
// #B158 — a gated route is never stored: the key carries no principal and
|
|
54
|
+
// both serve points run before the gate. Full rationale on isRouteGated.
|
|
55
|
+
lib.authzGate.isRouteGated(req)
|
|
52
56
|
) {
|
|
53
57
|
return;
|
|
54
58
|
}
|
|
@@ -339,6 +339,18 @@ function ServerEngineClass(options) {
|
|
|
339
339
|
// it inherits the strip.
|
|
340
340
|
if ( clean.param && typeof(clean.param) == 'object' ) {
|
|
341
341
|
const { requireAuth, roles, policy, ...cleanParam } = clean.param;
|
|
342
|
+
// #COMPLY10 — `public` is an authorization key too: under deny-by-default
|
|
343
|
+
// the set of public routes IS the authentication surface, so serving the
|
|
344
|
+
// markers hands an anonymous client a free recon map of what it can reach.
|
|
345
|
+
// Stripped with `delete` rather than by joining the destructuring above,
|
|
346
|
+
// for two independent reasons: `public` is a strict-mode RESERVED WORD, so
|
|
347
|
+
// the bare binding form is a SyntaxError (only a renamed binding compiles);
|
|
348
|
+
// and a separate statement leaves the destructuring line byte-identical to
|
|
349
|
+
// what the #COMPLY1 tests pin. The `#P21`/`#P22` note at the top of this
|
|
350
|
+
// loop moved AWAY from `delete` for V8 hidden-class reasons on hot paths —
|
|
351
|
+
// this loop runs once at boot over a bounded route table, so that rationale
|
|
352
|
+
// does not apply here.
|
|
353
|
+
delete cleanParam.public;
|
|
342
354
|
clean.param = cleanParam;
|
|
343
355
|
}
|
|
344
356
|
_routing[_routingKeys[ri]] = clean;
|