gina 0.6.31 → 0.6.32
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 +41 -0
- package/README.md +62 -25
- package/ROADMAP.md +3 -1
- package/framework/v0.6.32/VERSION +1 -0
- package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/js/gina.js +2389 -202
- package/framework/v0.6.32/core/asset/plugin/dist/vendor/gina/js/gina.min.js +716 -0
- package/framework/v0.6.32/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.32/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.31 → v0.6.32}/core/config.js +45 -7
- package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/index.js +9 -3
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.js +164 -17
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-json.js +35 -1
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-nunjucks-async.js +20 -0
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-nunjucks.js +69 -6
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-swig-async.js +20 -0
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-swig.js +40 -0
- package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-xml.js +20 -0
- package/framework/{v0.6.31 → v0.6.32}/core/gna.js +50 -2
- package/framework/{v0.6.31 → v0.6.32}/core/model/entity.js +79 -28
- package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/validator/src/form-validator.js +32 -1
- package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/validator/src/main.js +1579 -55
- package/framework/{v0.6.31 → v0.6.32}/core/router.js +45 -1
- package/framework/{v0.6.31 → v0.6.32}/core/server.isaac.js +41 -5
- package/framework/{v0.6.31 → v0.6.32}/core/server.js +277 -464
- package/framework/{v0.6.31 → v0.6.32}/helpers/json/src/main.js +57 -4
- package/framework/v0.6.32/lib/duration/package.json +17 -0
- package/framework/v0.6.32/lib/duration/src/main.js +82 -0
- package/framework/{v0.6.31 → v0.6.32}/lib/index.js +18 -4
- package/framework/{v0.6.31 → v0.6.32}/lib/maintenance/src/main.js +387 -7
- package/framework/{v0.6.31 → v0.6.32}/lib/model.js +86 -1
- package/framework/v0.6.32/lib/session-lifetime/package.json +17 -0
- package/framework/v0.6.32/lib/session-lifetime/src/main.js +337 -0
- package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/meta-store.js +45 -37
- package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/util.js +8 -21
- package/framework/{v0.6.31 → v0.6.32}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +14 -14
- package/package.json +3 -3
- package/schema/security.json +35 -0
- package/schema/settings.json +13 -1
- package/script/smoke_ws_h2.js +353 -0
- package/test-results/validator-upload-popin-con-a5268-n-change-fires-RED-pre-fix--chromium/error-context.md +172 -0
- package/test-results/validator-upload-popin-con-cf673--the-page-form-RED-pre-fix--chromium/error-context.md +212 -0
- package/types/gna.d.ts +3 -2
- package/types/index.d.ts +32 -0
- package/framework/v0.6.31/VERSION +0 -1
- package/framework/v0.6.31/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -673
- package/framework/v0.6.31/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.31/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/test-results/validator-upload-preview-f-c70b4-t-in-the-DOM-or-on-the-wire-chromium/error-context.md +0 -187
- /package/framework/{v0.6.31 → v0.6.32}/AUTHORS +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/LICENSE +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/settle-once.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/content.encoding +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/inline-script.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/dev/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/locales/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/mime.types +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/model/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/server.express.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/status.codes +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/console.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/context.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/path.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/task.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/helpers/text.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/async/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/conf-view/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/conf-view/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/config.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/idempotency/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/idempotency/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/job/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/job-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/kv/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/kv-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/logger/src/redact.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/math/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/message-validator/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/message-validator/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/money/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/money/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/multipart/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/multipart/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/priority/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/priority/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/proc.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/push/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/push/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/security-headers-emitter/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/security-headers-emitter/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/session-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/shell.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/sri/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/sri/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/state.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/storage-store.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/url/README.md +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/url/index.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/validator.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.31 → v0.6.32}/lib/ws-session/src/main.js +0 -0
|
@@ -25,6 +25,7 @@ var Collection = lib.Collection;
|
|
|
25
25
|
var modelUtil = new lib.Model();
|
|
26
26
|
var secrets = lib.secrets;
|
|
27
27
|
var i18n = lib.i18n;
|
|
28
|
+
var sessionLifetime = lib.sessionLifetime;
|
|
28
29
|
|
|
29
30
|
|
|
30
31
|
/**
|
|
@@ -1918,6 +1919,15 @@ function Config(opt, contextResetNeeded) {
|
|
|
1918
1919
|
;
|
|
1919
1920
|
for (; c < cLen; ++c) {
|
|
1920
1921
|
let jsonFile = null;
|
|
1922
|
+
// #D45-overlay — the `<name>.<env>.json` content, STASHED here and folded in
|
|
1923
|
+
// LAST (after the base file below) with lib/merge's `override` flag, so the
|
|
1924
|
+
// environment overlay WINS on every key both files declare. It used to be
|
|
1925
|
+
// merged in FIRST, target-wins, so the base file silently beat its own
|
|
1926
|
+
// overlay on conflicting keys (env-only keys were added, overrides were
|
|
1927
|
+
// dropped) since this loop's first cut in 2022 — while every reference page
|
|
1928
|
+
// promised the opposite. Arrays: an env array REPLACES the base array
|
|
1929
|
+
// (override semantics), it is not unioned into it.
|
|
1930
|
+
let envJsonFile = null;
|
|
1921
1931
|
|
|
1922
1932
|
fName = configFiles[c];
|
|
1923
1933
|
fNameWithNoExt = fName.replace(/.json/, '');
|
|
@@ -2005,13 +2015,9 @@ function Config(opt, contextResetNeeded) {
|
|
|
2005
2015
|
if (!exists) {
|
|
2006
2016
|
jsonFile = null;
|
|
2007
2017
|
} else {
|
|
2008
|
-
jsonFile
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
fileContent = []
|
|
2012
|
-
}
|
|
2013
|
-
// Fixed priority to env version and/or extended.description if found
|
|
2014
|
-
fileContent = merge(jsonFile, fileContent);
|
|
2018
|
+
jsonFile = requireJSON(_(filename, true));
|
|
2019
|
+
// #D45-overlay — not merged here any more (see the fold after the base file)
|
|
2020
|
+
envJsonFile = jsonFile;
|
|
2015
2021
|
}
|
|
2016
2022
|
|
|
2017
2023
|
} catch (_err) {
|
|
@@ -2068,6 +2074,14 @@ function Config(opt, contextResetNeeded) {
|
|
|
2068
2074
|
// Fixed priority to env version and/or extended.description if found
|
|
2069
2075
|
fileContent = merge(jsonFile, fileContent);
|
|
2070
2076
|
|
|
2077
|
+
// #D45-overlay — now the environment version, and it wins (override).
|
|
2078
|
+
if ( envJsonFile ) {
|
|
2079
|
+
if (Array.isArray(envJsonFile) && !Array.isArray(fileContent) && !Object.keys(fileContent).length) {
|
|
2080
|
+
fileContent = []
|
|
2081
|
+
}
|
|
2082
|
+
fileContent = merge(fileContent, envJsonFile, true);
|
|
2083
|
+
}
|
|
2084
|
+
|
|
2071
2085
|
|
|
2072
2086
|
} catch (_err) {
|
|
2073
2087
|
|
|
@@ -3320,6 +3334,30 @@ function Config(opt, contextResetNeeded) {
|
|
|
3320
3334
|
);
|
|
3321
3335
|
}
|
|
3322
3336
|
|
|
3337
|
+
// Per-bundle login session cookie lifetimes — `security.json >
|
|
3338
|
+
// session.expires` / `session.remember`, derived once here and read by
|
|
3339
|
+
// core/router.js at req.login(). `null` when the bundle declares neither,
|
|
3340
|
+
// which is the case the router's band short-circuits on, so a bundle that
|
|
3341
|
+
// never opted in costs nothing per request.
|
|
3342
|
+
//
|
|
3343
|
+
// Warned, never fatal — same disposition as the i18n block above and for
|
|
3344
|
+
// the same reason: both keys were documented but uninterpreted before this
|
|
3345
|
+
// release, so a value already sitting in one was never a statement about
|
|
3346
|
+
// this contract. Refusing the boot would turn an upgrade into an outage
|
|
3347
|
+
// for a key that did nothing yesterday; an unusable value is reported and
|
|
3348
|
+
// the bundle keeps the cookie lifetime it already had.
|
|
3349
|
+
try {
|
|
3350
|
+
conf[bundle][env].sessionLifetime = sessionLifetime.fromConfig(
|
|
3351
|
+
conf[bundle][env].content.security, bundle, env
|
|
3352
|
+
);
|
|
3353
|
+
} catch (sessionLifetimeErr) {
|
|
3354
|
+
conf[bundle][env].sessionLifetime = null;
|
|
3355
|
+
console.warn(
|
|
3356
|
+
'[CONFIG][loadBundleConfig] login session lifetime skipped for `'
|
|
3357
|
+
+ bundle +'/'+ env +'`: '+ sessionLifetimeErr.message
|
|
3358
|
+
);
|
|
3359
|
+
}
|
|
3360
|
+
|
|
3323
3361
|
++b;
|
|
3324
3362
|
if (b < bundles.length) {
|
|
3325
3363
|
loadBundleConfig(bundles, b, callback, reload, collectedRules)
|
|
@@ -628,11 +628,17 @@ function Couchbase(conn, infos) {
|
|
|
628
628
|
// #B11 fix: recover the entity singleton when called via util.promisify
|
|
629
629
|
// without .bind(). In strict mode `this` is undefined when a prototype
|
|
630
630
|
// method is detached from its object. Fall back to the singleton stored
|
|
631
|
-
// at
|
|
631
|
+
// at the entity registry (set by entity.js setListeners).
|
|
632
|
+
// #B555 — the registry is keyed on (bundle, model, className), not on the
|
|
633
|
+
// bare class name: two connectors of one bundle can declare the same class
|
|
634
|
+
// name, and a bare key silently handed the second one the first's instance.
|
|
635
|
+
// This method is detached (`this` is undefined), so the pair comes from the
|
|
636
|
+
// connector's own `infos` rather than from the instance.
|
|
632
637
|
// This makes `util.promisify(entity.method)` work transparently without
|
|
633
638
|
// requiring callers to add .bind(entity) everywhere.
|
|
634
639
|
var _capitalizedName = entityName.substring(0,1).toUpperCase() + entityName.substring(1);
|
|
635
|
-
var
|
|
640
|
+
var _registryKey = EntitySuperClass.key(infos.bundle, infos.model, _capitalizedName);
|
|
641
|
+
var self = this || (EntitySuperClass[_registryKey] && EntitySuperClass[_registryKey].instance) || null;
|
|
636
642
|
var key = null
|
|
637
643
|
, index = null
|
|
638
644
|
, i = null
|
|
@@ -641,7 +647,7 @@ function Couchbase(conn, infos) {
|
|
|
641
647
|
, _mainCallback = null;
|
|
642
648
|
|
|
643
649
|
if (!self) {
|
|
644
|
-
var _ctxErr = new TypeError('[entity] ' + entityName + '#' + name + '() called without context: `this` is undefined and no singleton found at EntitySuperClass[' +
|
|
650
|
+
var _ctxErr = new TypeError('[entity] ' + entityName + '#' + name + '() called without context: `this` is undefined and no singleton found at EntitySuperClass[' + _registryKey + '].instance');
|
|
645
651
|
var _cbArg = (args.length > 0 && typeof args[args.length - 1] === 'function') ? args[args.length - 1] : null;
|
|
646
652
|
if (_cbArg) { return _cbArg(_ctxErr); }
|
|
647
653
|
throw _ctxErr;
|
|
@@ -48,6 +48,14 @@ const { Resolver } = require('node:dns').promises;
|
|
|
48
48
|
|
|
49
49
|
var lib = require('./../../lib') || require.cache[require.resolve('./../../lib')];
|
|
50
50
|
|
|
51
|
+
// #B551 — relative require (not the bare `lib/inspector-redact` form the render
|
|
52
|
+
// delegates use) so this module resolves without depending on the gna.js NODE_PATH
|
|
53
|
+
// bootstrap, matching inspector-window-emit.js. Node caches by resolved path, so it
|
|
54
|
+
// is the same module instance either way.
|
|
55
|
+
var inspectorRedact = require('../../lib/inspector-redact');
|
|
56
|
+
// Compiled once: the pattern set is a module constant.
|
|
57
|
+
var _carryRedactPatterns = inspectorRedact.compile(inspectorRedact.DEFAULT_PATTERNS);
|
|
58
|
+
|
|
51
59
|
/**
|
|
52
60
|
* #A11Y3 — BCP-47 language tag for a framework-generated document.
|
|
53
61
|
*
|
|
@@ -385,6 +393,39 @@ var _mintErrorRef = function(supplied) {
|
|
|
385
393
|
return crypto.randomBytes(3).toString('hex').toUpperCase();
|
|
386
394
|
};
|
|
387
395
|
|
|
396
|
+
/**
|
|
397
|
+
* #B554 — HTML-escape a value before it is concatenated into an error page.
|
|
398
|
+
*
|
|
399
|
+
* The inline fallback error pages are built by string concatenation, and the
|
|
400
|
+
* values they carry are caller-supplied: `redirect()` hands a request-supplied
|
|
401
|
+
* `?error=<value>` straight to `throwError`, so a crafted link reflected markup
|
|
402
|
+
* into the 500 page and executed it in the application's origin. Escaping at
|
|
403
|
+
* the emission point closes that permanently, wherever the value came from.
|
|
404
|
+
*
|
|
405
|
+
* Three byte-identical local copies exist — one each in
|
|
406
|
+
* `core/controller/controller.js`, `core/server.js` and
|
|
407
|
+
* `core/controller/controller.render-nunjucks.js` — the same deliberate
|
|
408
|
+
* duplication as `_mintErrorRef`: controller.js is evicted from require.cache
|
|
409
|
+
* per request in dev, so a shared home would churn, and the helper is six
|
|
410
|
+
* lines. `test/core/throwerror-html-escape-b554.test.js` pins the three copies
|
|
411
|
+
* identical.
|
|
412
|
+
*
|
|
413
|
+
* @private
|
|
414
|
+
* @param {*} value - the text to escape (null/undefined become '')
|
|
415
|
+
* @returns {string} the value with HTML-significant characters replaced
|
|
416
|
+
*
|
|
417
|
+
* @example
|
|
418
|
+
* _escapeHtml('a<b & "c"'); // 'a<b & "c"'
|
|
419
|
+
*/
|
|
420
|
+
var _escapeHtml = function(value) {
|
|
421
|
+
return String(value == null ? '' : value)
|
|
422
|
+
.replace(/&/g, '&')
|
|
423
|
+
.replace(/</g, '<')
|
|
424
|
+
.replace(/>/g, '>')
|
|
425
|
+
.replace(/"/g, '"')
|
|
426
|
+
.replace(/'/g, ''');
|
|
427
|
+
};
|
|
428
|
+
|
|
388
429
|
/**
|
|
389
430
|
* #CE1 — resolves the bundle's `server.transientErrors` block into its
|
|
390
431
|
* effective values. Total: never throws, and tolerates any malformed shape
|
|
@@ -3537,11 +3578,35 @@ function SuperController(options) {
|
|
|
3537
3578
|
// backing up oldParams
|
|
3538
3579
|
var oldParams = local.req[originalMethod.toLowerCase()];
|
|
3539
3580
|
var requestParams = req[req.method.toLowerCase()] || {};
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3581
|
+
// #B559 — a request parameter must never steer control flow. This spot
|
|
3582
|
+
// used to test the incoming params for a key named `error` and, when it
|
|
3583
|
+
// was present, call throwError() with that raw client value and return
|
|
3584
|
+
// instead of redirecting. `req[method]` is the CLIENT-populated
|
|
3585
|
+
// container (server.js assigns `request.get = request.query`, and
|
|
3586
|
+
// `request.post` from the parsed body), so ANY unauthenticated request
|
|
3587
|
+
// to ANY route whose action redirects could force a 500 just by adding
|
|
3588
|
+
// the key -- on both engines, with no route opt-in. An EMPTY value was
|
|
3589
|
+
// worse: the empty string is falsy, so the #B44 late-call guard in
|
|
3590
|
+
// throwError() mistook it for a call on an already-released response,
|
|
3591
|
+
// logged "ignoring late error:" with nothing after the colon, and
|
|
3592
|
+
// returned without writing anything -- leaving the request unanswered
|
|
3593
|
+
// for as long as the client held the socket. Nothing reaps that:
|
|
3594
|
+
// `server.timeout` defaults to 0, deliberately, so SSE and WebSockets
|
|
3595
|
+
// are not killed by a whole-request clock.
|
|
3596
|
+
//
|
|
3597
|
+
// Deleted rather than hardened, because the key was never a supported
|
|
3598
|
+
// convention: nothing in gina produces it, no test pinned it, and this
|
|
3599
|
+
// method's own JSDoc never mentions it. The published guide teaches the
|
|
3600
|
+
// OPPOSITE -- its canonical "carrying request data across the redirect"
|
|
3601
|
+
// example assigns that key on the request and then redirects, which
|
|
3602
|
+
// this gate turned into a 500. The line's own 2021 ancestor used this
|
|
3603
|
+
// same condition to DELETE the key so it would not ride the target URL;
|
|
3604
|
+
// the throw replaced the delete in 2022 inside an unrelated omnibus
|
|
3605
|
+
// commit, with no comment and no mention in its message.
|
|
3606
|
+
//
|
|
3607
|
+
// With it gone the key is an ordinary parameter: it rides the redirect
|
|
3608
|
+
// in `inheritedData` like every other one, which is what the guide
|
|
3609
|
+
// documents. Nothing downstream treats it specially.
|
|
3545
3610
|
|
|
3546
3611
|
// #B353 — HEAD is a SAFE method: it is GET without a response body, so a
|
|
3547
3612
|
// redirect must treat it exactly as it treats GET. This gate exists to stop
|
|
@@ -3582,9 +3647,46 @@ function SuperController(options) {
|
|
|
3582
3647
|
if ( typeof(requestParams.session) != 'undefined' ) {
|
|
3583
3648
|
delete requestParams.session;
|
|
3584
3649
|
}
|
|
3650
|
+
// #B551 — credentials must not ride the redirect. `requestParams` is the
|
|
3651
|
+
// request's own parsed container (for a POST, `req.post` verbatim), and the
|
|
3652
|
+
// merge above does NOT clone — lib/merge's clone block is commented out —
|
|
3653
|
+
// so this is a LIVE reference to that container. Filtering it in place
|
|
3654
|
+
// would strip fields the application's own action may still be reading, so
|
|
3655
|
+
// build a filtered COPY and carry that instead.
|
|
3656
|
+
//
|
|
3657
|
+
// Measured before this guard existed: a login POST put
|
|
3658
|
+
// {"email":..,"password":"<plaintext>"} into the session store, where it
|
|
3659
|
+
// survived the consuming GET on the authenticated path and was copied on
|
|
3660
|
+
// into the halted-request stash on the failed one. A session-less bundle
|
|
3661
|
+
// put the same payload in the redirect URL instead, i.e. into access logs,
|
|
3662
|
+
// proxy logs, browser history and Referer.
|
|
3663
|
+
//
|
|
3664
|
+
// The key list is lib/inspector-redact's — the same maintained, tokenising
|
|
3665
|
+
// matcher the Inspector already uses to mask these very fields in its own
|
|
3666
|
+
// pane, so `apiKey`/`api_key` are covered while metadata keys such as
|
|
3667
|
+
// `passwordRules` are deliberately not. Dropped rather than masked: a
|
|
3668
|
+
// literal '[redacted]' arriving at the target reads like a real value.
|
|
3669
|
+
//
|
|
3670
|
+
// Logged at debug, NOT warn: a login POST always carries a password, so a
|
|
3671
|
+
// warn here would fire on the success path of the commonest flow in the
|
|
3672
|
+
// framework — the #B552 mistake, which this must not repeat.
|
|
3673
|
+
var _carriedParams = {};
|
|
3674
|
+
var _droppedCarry = [];
|
|
3675
|
+
var _carryKeys = Object.keys(requestParams);
|
|
3676
|
+
for (var _ck = 0; _ck < _carryKeys.length; _ck++) {
|
|
3677
|
+
if ( inspectorRedact.keyMatches(_carryKeys[_ck], _carryRedactPatterns) ) {
|
|
3678
|
+
_droppedCarry.push(_carryKeys[_ck]);
|
|
3679
|
+
continue;
|
|
3680
|
+
}
|
|
3681
|
+
_carriedParams[ _carryKeys[_ck] ] = requestParams[ _carryKeys[_ck] ];
|
|
3682
|
+
}
|
|
3683
|
+
if ( _droppedCarry.length > 0 ) {
|
|
3684
|
+
// Names only, never values — not carrying them is the whole point.
|
|
3685
|
+
console.debug('[ Controller ] redirect(): credential-class field(s) not carried across the redirect: '+ _droppedCarry.join(', '));
|
|
3686
|
+
}
|
|
3687
|
+
requestParams = _carriedParams;
|
|
3585
3688
|
// #B546 — shadow-proof own-property count; see the note in setOptions().
|
|
3586
3689
|
if ( typeof(requestParams) != 'undefined' && ownCount(requestParams) > 0 ) {
|
|
3587
|
-
//if ( typeof(requestParams.error) != 'undefined' )
|
|
3588
3690
|
|
|
3589
3691
|
// #B75 — a session-less bundle (no Session plugin mounted) must
|
|
3590
3692
|
// not deref req.session.user here (an XHR redirect carrying
|
|
@@ -3638,6 +3740,15 @@ function SuperController(options) {
|
|
|
3638
3740
|
}
|
|
3639
3741
|
|
|
3640
3742
|
_applyNoStoreToRedirectJSON(); // #B75
|
|
3743
|
+
// #B550 — terminate through the compat response, as this method's
|
|
3744
|
+
// 303 exit already does (`res.writeHead` + `res.end` further down).
|
|
3745
|
+
// On HTTP/2 the JSON delegate would otherwise write straight to the
|
|
3746
|
+
// raw stream, calling neither, so a session rotated immediately
|
|
3747
|
+
// before the redirect never gets its new cookie to the client and
|
|
3748
|
+
// the client keeps presenting the old, already-replaced id. The
|
|
3749
|
+
// HTTP/1.1 path always took this branch, so this only makes the two
|
|
3750
|
+
// redirect exits agree.
|
|
3751
|
+
req._ginaForceCompatSend = true;
|
|
3641
3752
|
self.renderJSON(redirectObj);
|
|
3642
3753
|
return;
|
|
3643
3754
|
}
|
|
@@ -3656,6 +3767,8 @@ function SuperController(options) {
|
|
|
3656
3767
|
// Popin redirect
|
|
3657
3768
|
if ( isPopinContext ) {
|
|
3658
3769
|
_applyNoStoreToRedirectJSON(); // #B75
|
|
3770
|
+
// #B550 — same compat-path termination as the sibling XHR exit above.
|
|
3771
|
+
req._ginaForceCompatSend = true;
|
|
3659
3772
|
return self.renderJSON({
|
|
3660
3773
|
isXhrRedirect: true,
|
|
3661
3774
|
popin: {
|
|
@@ -8501,10 +8614,30 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
8501
8614
|
// `res.stack` / `res.message` / `res.fallback` in the errorObject build
|
|
8502
8615
|
// (every bundle crashes there). So a released response would crash
|
|
8503
8616
|
// (uncaughtException → SIGTERM) instead of being ignored. Bail up-front
|
|
8504
|
-
// with the same no-op contract as the #B31 guard.
|
|
8505
|
-
// a truthy `res`
|
|
8506
|
-
//
|
|
8507
|
-
//
|
|
8617
|
+
// with the same no-op contract as the #B31 guard. A 1-arg shape reaches
|
|
8618
|
+
// here with a truthy `res` — either the caller's own Error/errorObj, or
|
|
8619
|
+
// the placeholder substituted just below when the payload was falsy
|
|
8620
|
+
// (#B560) — so 1-arg calls are unaffected and still reach the #B31 guard
|
|
8621
|
+
// after `res` is reassigned to `local.res` at the end of that build.
|
|
8622
|
+
// #B560 — a 1-arg call whose PAYLOAD is falsy is NOT a late call. For the
|
|
8623
|
+
// `throwError(err)` shape the `res` slot holds the caller's payload, not
|
|
8624
|
+
// the response, so '', null, undefined, 0 and false all reached the bail
|
|
8625
|
+
// below and were swallowed: the request was never answered, and the only
|
|
8626
|
+
// trace was a warning claiming the response had been released — it had
|
|
8627
|
+
// not — which then named no error at all, because its interpolation reads
|
|
8628
|
+
// `msg`/`code` and never `res`. Normalise such a payload to a minimal
|
|
8629
|
+
// errorObj so the build below has something to read and a 500 is actually
|
|
8630
|
+
// egressed.
|
|
8631
|
+
//
|
|
8632
|
+
// Deliberately NOT written as `arguments.length !== 1` on the bail itself:
|
|
8633
|
+
// the errorObject build dereferences `res.error` / `res.message` without
|
|
8634
|
+
// guarding, so letting a null payload reach it would turn a silent hang
|
|
8635
|
+
// into a TypeError crash. Genuine 2-arg/3-arg late calls — where `res` IS
|
|
8636
|
+
// an already-released `local.res` — and 0-arg calls are untouched and
|
|
8637
|
+
// still bail below.
|
|
8638
|
+
if ( arguments.length === 1 && !res ) {
|
|
8639
|
+
res = { status: 500 };
|
|
8640
|
+
}
|
|
8508
8641
|
if ( !res ) {
|
|
8509
8642
|
self.isProcessingError = true;
|
|
8510
8643
|
var _b44LateError = msg || code;
|
|
@@ -8982,15 +9115,21 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
8982
9115
|
if ( typeof(msg) == 'object' ) {
|
|
8983
9116
|
|
|
8984
9117
|
if (msg.title) {
|
|
8985
|
-
msgString += '<pre class="'+ eCode +' title">'+ msg.title +'</pre>';
|
|
9118
|
+
// was: msgString += '<pre class="'+ eCode +' title">'+ msg.title +'</pre>';
|
|
9119
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9120
|
+
msgString += '<pre class="'+ eCode +' title">'+ _escapeHtml(msg.title) +'</pre>';
|
|
8986
9121
|
}
|
|
8987
9122
|
|
|
8988
9123
|
if (msg.error) {
|
|
8989
|
-
msgString += '<pre class="'+ eCode +' message">'+ msg.error +'</pre>';
|
|
9124
|
+
// was: msgString += '<pre class="'+ eCode +' message">'+ msg.error +'</pre>';
|
|
9125
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9126
|
+
msgString += '<pre class="'+ eCode +' message">'+ _escapeHtml(msg.error) +'</pre>';
|
|
8990
9127
|
}
|
|
8991
9128
|
|
|
8992
9129
|
if (msg.message) {
|
|
8993
|
-
msgString += '<pre class="'+ eCode +' message">'+ msg.message +'</pre>';
|
|
9130
|
+
// was: msgString += '<pre class="'+ eCode +' message">'+ msg.message +'</pre>';
|
|
9131
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9132
|
+
msgString += '<pre class="'+ eCode +' message">'+ _escapeHtml(msg.message) +'</pre>';
|
|
8994
9133
|
}
|
|
8995
9134
|
|
|
8996
9135
|
// Fail-closed: render the stack frame only in local scope
|
|
@@ -9009,7 +9148,9 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
9009
9148
|
}
|
|
9010
9149
|
|
|
9011
9150
|
msg.stack = msg.stack.replace('Error:', '').replace(' ', '');
|
|
9012
|
-
msgString += '<pre class="'+ eCode +' stack">'+ msg.stack +'</pre>';
|
|
9151
|
+
// was: msgString += '<pre class="'+ eCode +' stack">'+ msg.stack +'</pre>';
|
|
9152
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9153
|
+
msgString += '<pre class="'+ eCode +' stack">'+ _escapeHtml(msg.stack) +'</pre>';
|
|
9013
9154
|
}
|
|
9014
9155
|
|
|
9015
9156
|
} else {
|
|
@@ -9031,15 +9172,21 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
9031
9172
|
}
|
|
9032
9173
|
|
|
9033
9174
|
if (title) {
|
|
9034
|
-
msgString += '<pre class="'+ eCode +' title">'+ title +'</pre>';
|
|
9175
|
+
// was: msgString += '<pre class="'+ eCode +' title">'+ title +'</pre>';
|
|
9176
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9177
|
+
msgString += '<pre class="'+ eCode +' title">'+ _escapeHtml(title) +'</pre>';
|
|
9035
9178
|
}
|
|
9036
9179
|
if (message) {
|
|
9037
|
-
msgString += '<pre class="'+ eCode +' message">'+ message +'</pre>';
|
|
9180
|
+
// was: msgString += '<pre class="'+ eCode +' message">'+ message +'</pre>';
|
|
9181
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9182
|
+
msgString += '<pre class="'+ eCode +' message">'+ _escapeHtml(message) +'</pre>';
|
|
9038
9183
|
}
|
|
9039
9184
|
// Fail-closed: local scope only — same gate shape as the
|
|
9040
9185
|
// msg-shape site above.
|
|
9041
9186
|
if (stack && _isLocalScope) {
|
|
9042
|
-
msgString += '<pre class="'+ eCode +' stack">'+ stack +'</pre>';
|
|
9187
|
+
// was: msgString += '<pre class="'+ eCode +' stack">'+ stack +'</pre>';
|
|
9188
|
+
// #B554 — escape: this value is caller-supplied and reached the page as markup.
|
|
9189
|
+
msgString += '<pre class="'+ eCode +' stack">'+ _escapeHtml(stack) +'</pre>';
|
|
9043
9190
|
}
|
|
9044
9191
|
}
|
|
9045
9192
|
res.writeHead(code, { 'content-type': bundleConf.server.coreConfiguration.mime[ext]+'; charset='+ bundleConf.encoding } );
|
|
@@ -176,7 +176,21 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
176
176
|
var response = local.res;
|
|
177
177
|
var next = local.next || null;
|
|
178
178
|
var stream = null;
|
|
179
|
-
|
|
179
|
+
// #B550 — a caller may force the compat send path (the HTTP/1.1-shaped branch at the
|
|
180
|
+
// bottom of this file). On HTTP/2 the raw `stream.respond()` path never calls
|
|
181
|
+
// `res.writeHead` or `res.end`, so any middleware that installs itself by wrapping
|
|
182
|
+
// those response methods never runs: a session middleware that sets its cookie from an
|
|
183
|
+
// `on-headers` hook on `writeHead`, and persists from an `end` proxy, emits neither,
|
|
184
|
+
// and the `res.getHeaders()` fold further down then has no cookie to carry. Consumed
|
|
185
|
+
// once off the REQUEST (never the controller's closure — the redirect span it is
|
|
186
|
+
// set in is extracted and executed closure-free by its own tests), so only the
|
|
187
|
+
// flagged render is affected and every other
|
|
188
|
+
// HTTP/2 render stays byte-identical.
|
|
189
|
+
var _forceCompatSend = !!(local.req && local.req._ginaForceCompatSend === true);
|
|
190
|
+
if (_forceCompatSend) {
|
|
191
|
+
delete local.req._ginaForceCompatSend;
|
|
192
|
+
}
|
|
193
|
+
if ( typeof(local.res.stream) != 'undefined' && !_forceCompatSend ) {
|
|
180
194
|
stream = local.res.stream
|
|
181
195
|
}
|
|
182
196
|
// #H10 — opt-in HTTP/2 response trailers (registered via self.sendTrailers()).
|
|
@@ -440,6 +454,8 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
440
454
|
if ( /^HEAD$/i.test(request.method) ) {
|
|
441
455
|
var headLen = Buffer.byteLength(data, 'utf8');
|
|
442
456
|
if ( stream ) {
|
|
457
|
+
// #B562 — defer the raw send into the shim's base end() when one is installed
|
|
458
|
+
var __ginaSendHead = function() {
|
|
443
459
|
if ( !stream.headersSent ) {
|
|
444
460
|
var _headH = {
|
|
445
461
|
'content-type' : local.options.conf.server.coreConfiguration.mime['json'] + '; charset='+ local.options.conf.encoding,
|
|
@@ -453,6 +469,14 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
453
469
|
stream.respond(_headH);
|
|
454
470
|
}
|
|
455
471
|
stream.end();
|
|
472
|
+
};
|
|
473
|
+
if (response._ginaSendShim) {
|
|
474
|
+
response._ginaRawSend = __ginaSendHead;
|
|
475
|
+
response.writeHead(response.statusCode || 200);
|
|
476
|
+
response.end();
|
|
477
|
+
} else {
|
|
478
|
+
__ginaSendHead();
|
|
479
|
+
}
|
|
456
480
|
} else if ( !headersSent(response) ) {
|
|
457
481
|
response.setHeader('content-type', local.options.conf.server.coreConfiguration.mime['json'] + '; charset='+ local.options.conf.encoding);
|
|
458
482
|
response.setHeader('content-length', headLen);
|
|
@@ -539,6 +563,8 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
539
563
|
local.next = null;
|
|
540
564
|
return;
|
|
541
565
|
}
|
|
566
|
+
// #B562 — defer the raw send into the shim's base end() when one is installed
|
|
567
|
+
var __ginaSendBody = function(data) {
|
|
542
568
|
if (!stream.headersSent) {
|
|
543
569
|
var _streamHeaders = {
|
|
544
570
|
'content-type': local.options.conf.server.coreConfiguration.mime['json'] + '; charset='+ local.options.conf.encoding,
|
|
@@ -572,6 +598,14 @@ module.exports = function renderJSON(jsonObj, deps) {
|
|
|
572
598
|
|
|
573
599
|
|
|
574
600
|
stream.end(data);
|
|
601
|
+
};
|
|
602
|
+
if (response._ginaSendShim) {
|
|
603
|
+
response._ginaRawSend = __ginaSendBody;
|
|
604
|
+
response.writeHead(response.statusCode || 200);
|
|
605
|
+
response.end(data);
|
|
606
|
+
} else {
|
|
607
|
+
__ginaSendBody(data);
|
|
608
|
+
}
|
|
575
609
|
response.headersSent = true;
|
|
576
610
|
local.req = null;
|
|
577
611
|
local.res = null;
|
|
@@ -275,6 +275,8 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
275
275
|
try { console.warn('[render-nunjucks-async] stream already destroyed on HEAD — client disconnected ('+ req.url +')'); } catch (e) {}
|
|
276
276
|
return;
|
|
277
277
|
}
|
|
278
|
+
// #B562 — defer the raw send into the shim's base end() when one is installed
|
|
279
|
+
var __ginaSend1 = function() {
|
|
278
280
|
if (!stream.headersSent) {
|
|
279
281
|
var _headH2 = {
|
|
280
282
|
'content-type': res.getHeader('content-type'),
|
|
@@ -288,6 +290,14 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
288
290
|
stream.respond(_headH2);
|
|
289
291
|
}
|
|
290
292
|
stream.end();
|
|
293
|
+
};
|
|
294
|
+
if (res._ginaSendShim) {
|
|
295
|
+
res._ginaRawSend = __ginaSend1;
|
|
296
|
+
res.writeHead(res.statusCode || 200);
|
|
297
|
+
res.end();
|
|
298
|
+
} else {
|
|
299
|
+
__ginaSend1();
|
|
300
|
+
}
|
|
291
301
|
res.headersSent = true;
|
|
292
302
|
} else {
|
|
293
303
|
// Case 2: HEAD + HTTP/1.1
|
|
@@ -304,6 +314,8 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
304
314
|
try { console.warn('[render-nunjucks-async] stream already destroyed — client disconnected before response ('+ req.url +')'); } catch (e) {}
|
|
305
315
|
return;
|
|
306
316
|
}
|
|
317
|
+
// #B562 — defer the raw send into the shim's base end() when one is installed
|
|
318
|
+
var __ginaSend2 = function(html) {
|
|
307
319
|
if (!stream.headersSent) {
|
|
308
320
|
var _streamHeaders = {
|
|
309
321
|
'content-type': res.getHeader('content-type'),
|
|
@@ -321,6 +333,14 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
321
333
|
stream.respond(_streamHeaders, _trailers ? { waitForTrailers: true } : undefined);
|
|
322
334
|
}
|
|
323
335
|
stream.end(html);
|
|
336
|
+
};
|
|
337
|
+
if (res._ginaSendShim) {
|
|
338
|
+
res._ginaRawSend = __ginaSend2;
|
|
339
|
+
res.writeHead(res.statusCode || 200);
|
|
340
|
+
res.end(html);
|
|
341
|
+
} else {
|
|
342
|
+
__ginaSend2(html);
|
|
343
|
+
}
|
|
324
344
|
res.headersSent = true;
|
|
325
345
|
return;
|
|
326
346
|
}
|
|
@@ -128,6 +128,40 @@ var inspectorRedact = require('lib/inspector-redact');
|
|
|
128
128
|
var emitInspectorWindowData = require('./inspector-window-emit');
|
|
129
129
|
// #RWATCH S3 — stale-release banner injector (server-side inline; gated inert).
|
|
130
130
|
var releaseBanner = require('./release-banner');
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* #B554 — HTML-escape a value before it is concatenated into an error page.
|
|
134
|
+
*
|
|
135
|
+
* The inline fallback error pages are built by string concatenation, and the
|
|
136
|
+
* values they carry are caller-supplied: `redirect()` hands a request-supplied
|
|
137
|
+
* `?error=<value>` straight to `throwError`, so a crafted link reflected markup
|
|
138
|
+
* into the 500 page and executed it in the application's origin. Escaping at
|
|
139
|
+
* the emission point closes that permanently, wherever the value came from.
|
|
140
|
+
*
|
|
141
|
+
* Three byte-identical local copies exist — one each in
|
|
142
|
+
* `core/controller/controller.js`, `core/server.js` and
|
|
143
|
+
* `core/controller/controller.render-nunjucks.js` — the same deliberate
|
|
144
|
+
* duplication as `_mintErrorRef`: controller.js is evicted from require.cache
|
|
145
|
+
* per request in dev, so a shared home would churn, and the helper is six
|
|
146
|
+
* lines. `test/core/throwerror-html-escape-b554.test.js` pins the three copies
|
|
147
|
+
* identical.
|
|
148
|
+
*
|
|
149
|
+
* @private
|
|
150
|
+
* @param {*} value - the text to escape (null/undefined become '')
|
|
151
|
+
* @returns {string} the value with HTML-significant characters replaced
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* _escapeHtml('a<b & "c"'); // 'a<b & "c"'
|
|
155
|
+
*/
|
|
156
|
+
var _escapeHtml = function(value) {
|
|
157
|
+
return String(value == null ? '' : value)
|
|
158
|
+
.replace(/&/g, '&')
|
|
159
|
+
.replace(/</g, '<')
|
|
160
|
+
.replace(/>/g, '>')
|
|
161
|
+
.replace(/"/g, '"')
|
|
162
|
+
.replace(/'/g, ''');
|
|
163
|
+
};
|
|
164
|
+
|
|
131
165
|
// Collection — small data-query helper used to filter the asset list when
|
|
132
166
|
// rendering without a layout (mirrors render-swig.js:494-498). Fetched via
|
|
133
167
|
// the lib registry so the dev-mode hot-reload evictions of `lib/index.js`
|
|
@@ -556,6 +590,8 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
556
590
|
try { console.warn('[render-nunjucks] stream already destroyed on HEAD — client disconnected ('+ req.url +')'); } catch (e) {}
|
|
557
591
|
return;
|
|
558
592
|
}
|
|
593
|
+
// #B562 — defer the raw send into the shim's base end() when one is installed
|
|
594
|
+
var __ginaSend1 = function() {
|
|
559
595
|
if (!stream.headersSent) {
|
|
560
596
|
var _headH2 = {
|
|
561
597
|
'content-type': res.getHeader('content-type'),
|
|
@@ -569,6 +605,14 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
569
605
|
stream.respond(_headH2);
|
|
570
606
|
}
|
|
571
607
|
stream.end();
|
|
608
|
+
};
|
|
609
|
+
if (res._ginaSendShim) {
|
|
610
|
+
res._ginaRawSend = __ginaSend1;
|
|
611
|
+
res.writeHead(res.statusCode || 200);
|
|
612
|
+
res.end();
|
|
613
|
+
} else {
|
|
614
|
+
__ginaSend1();
|
|
615
|
+
}
|
|
572
616
|
res.headersSent = true;
|
|
573
617
|
} else {
|
|
574
618
|
// Case 2: HEAD + HTTP/1.1
|
|
@@ -585,6 +629,8 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
585
629
|
try { console.warn('[render-nunjucks] stream already destroyed — client disconnected before response ('+ req.url +')'); } catch (e) {}
|
|
586
630
|
return;
|
|
587
631
|
}
|
|
632
|
+
// #B562 — defer the raw send into the shim's base end() when one is installed
|
|
633
|
+
var __ginaSend2 = function(html) {
|
|
588
634
|
if (!stream.headersSent) {
|
|
589
635
|
var _streamHeaders = {
|
|
590
636
|
'content-type': res.getHeader('content-type'),
|
|
@@ -606,6 +652,14 @@ function sendHtmlResponse(local, html, req, res) {
|
|
|
606
652
|
stream.respond(_streamHeaders, _trailers ? { waitForTrailers: true } : undefined);
|
|
607
653
|
}
|
|
608
654
|
stream.end(html);
|
|
655
|
+
};
|
|
656
|
+
if (res._ginaSendShim) {
|
|
657
|
+
res._ginaRawSend = __ginaSend2;
|
|
658
|
+
res.writeHead(res.statusCode || 200);
|
|
659
|
+
res.end(html);
|
|
660
|
+
} else {
|
|
661
|
+
__ginaSend2(html);
|
|
662
|
+
}
|
|
609
663
|
res.headersSent = true;
|
|
610
664
|
return;
|
|
611
665
|
}
|
|
@@ -1248,25 +1302,34 @@ module.exports = async function renderNunjucks(userData, displayInspector, errOp
|
|
|
1248
1302
|
: 'en';
|
|
1249
1303
|
|
|
1250
1304
|
if (!_absErrTemplate || !fs.existsSync(_absErrTemplate)) {
|
|
1251
|
-
html = '<!doctype html><html lang="' + _errLang + '"><head><title>Error ' + _errStatusCode + '</title></head>'
|
|
1305
|
+
// was: html = '<!doctype html><html lang="' + _errLang + '"><head><title>Error ' + _errStatusCode + '</title></head>'
|
|
1306
|
+
// #B554 — the status and the message text are both escaped in all three of these
|
|
1307
|
+
// fallback documents: the status may be a caller-supplied value (#B466), and the
|
|
1308
|
+
// texts carry a config path and a nunjucks render error that can quote template or
|
|
1309
|
+
// request content. The two comments below are kept to ONE line each on purpose —
|
|
1310
|
+
// `render-engine-dispatch.test.js` pins each message literal within a fixed number
|
|
1311
|
+
// of characters of its anchor, and a longer note here pushes it out of that window.
|
|
1312
|
+
html = '<!doctype html><html lang="' + _errLang + '"><head><title>Error ' + _escapeHtml(_errStatusCode) + '</title></head>'
|
|
1252
1313
|
+ '<body><pre>[render-nunjucks] error template not found: '
|
|
1253
|
-
+ (_absErrTemplate || '(unset)') + '</pre></body></html>';
|
|
1314
|
+
+ _escapeHtml(_absErrTemplate || '(unset)') + '</pre></body></html>';
|
|
1254
1315
|
} else {
|
|
1255
1316
|
var _errSource = null;
|
|
1256
1317
|
try {
|
|
1257
1318
|
_errSource = fs.readFileSync(_absErrTemplate, 'utf8');
|
|
1258
1319
|
} catch (readErr) {
|
|
1259
|
-
|
|
1320
|
+
// was: the same raw title + raw text — #B554, both escaped below.
|
|
1321
|
+
html = '<!doctype html><html lang="' + _errLang + '"><head><title>Error ' + _escapeHtml(_errStatusCode) + '</title></head>'
|
|
1260
1322
|
+ '<body><pre>[render-nunjucks] failed to read error template: '
|
|
1261
|
-
+ (readErr.message || readErr) + '</pre></body></html>';
|
|
1323
|
+
+ _escapeHtml(readErr.message || readErr) + '</pre></body></html>';
|
|
1262
1324
|
}
|
|
1263
1325
|
if (typeof _errSource === 'string') {
|
|
1264
1326
|
try {
|
|
1265
1327
|
html = env.renderString(_errSource, data);
|
|
1266
1328
|
} catch (renderErr) {
|
|
1267
|
-
|
|
1329
|
+
// was: the same raw title + raw text — #B554, both escaped below.
|
|
1330
|
+
html = '<!doctype html><html lang="' + _errLang + '"><head><title>Error ' + _escapeHtml(_errStatusCode) + '</title></head>'
|
|
1268
1331
|
+ '<body><pre>[render-nunjucks] error template render failed: '
|
|
1269
|
-
+ (renderErr.message || renderErr) + '</pre></body></html>';
|
|
1332
|
+
+ _escapeHtml(renderErr.message || renderErr) + '</pre></body></html>';
|
|
1270
1333
|
}
|
|
1271
1334
|
}
|
|
1272
1335
|
}
|