gina 0.6.2 → 0.6.3
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 +57 -0
- package/README.md +41 -12
- package/ROADMAP.md +3 -2
- package/bin/cli +19 -2
- package/framework/v0.6.3/VERSION +1 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +6 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +1 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +50 -1
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +457 -57
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +1457 -58
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js +625 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/index.js +114 -0
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.js +14 -3
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.js +14 -3
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v3.js +29 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v4.js +29 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/session-store.js +24 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/session-store.js +33 -9
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/session-store.js +25 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/session-store.js +26 -2
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.js +201 -21
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks.js +8 -0
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig.js +85 -4
- package/framework/{v0.6.2 → v0.6.3}/core/gna.js +23 -1
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/src/main.js +9 -5
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +20 -0
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/form-validator.js +119 -43
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/main.js +451 -9
- package/framework/{v0.6.2 → v0.6.3}/core/server.isaac.js +50 -54
- package/framework/{v0.6.2 → v0.6.3}/core/server.js +240 -3
- package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/index.js +6 -4
- package/framework/{v0.6.2 → v0.6.3}/core/template/conf/settings.json +10 -0
- package/framework/{v0.6.2 → v0.6.3}/lib/cache/README.md +9 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/verify.js +11 -9
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp-start.js +21 -12
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.txt +1 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/init.js +13 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/dto/src/main.js +18 -11
- package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/index.js +29 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/speaker.js +30 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/math/index.js +57 -6
- package/framework/{v0.6.2 → v0.6.3}/lib/merge/src/main.js +34 -5
- package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/src/main.js +77 -4
- package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/main.js +13 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/src/main.js +64 -2
- package/framework/v0.6.3/lib/secrets/src/backends/env.js +75 -0
- package/framework/{v0.6.2 → v0.6.3}/package.json +1 -1
- package/gna.js +5 -4
- package/llms.txt +19 -17
- package/package.json +5 -4
- package/schema/connectors.json +2 -2
- package/schema/routing.json +5 -0
- package/schema/settings.json +6 -1
- package/script/generate_gna_types.js +1 -1
- package/script/soak/couchbase-soak.js +1316 -0
- package/types/globals.d.ts +2 -0
- package/types/gna.d.ts +5 -0
- package/types/index.d.ts +1 -0
- package/utils/helper.js +38 -7
- package/framework/v0.6.2/VERSION +0 -1
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -603
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.6.2/lib/secrets/src/backends/env.js +0 -60
- /package/framework/{v0.6.2 → v0.6.3}/AUTHORS +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/config.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/content.encoding +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/mime.types +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/entity.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/router.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/server.express.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/status.codes +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/console.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/context.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/path.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/task.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/text.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/async/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/config.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/model.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/proc.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/session-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/shell.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/state.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/validator.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/src/main.js +0 -0
|
@@ -1492,6 +1492,46 @@ function SuperController(options) {
|
|
|
1492
1492
|
// delegate fetches the nunjucks module itself via
|
|
1493
1493
|
// `lib.nunjucksResolver.get()`, so the `swig` / `SwigFilters` deps
|
|
1494
1494
|
// passed below are harmless when unused.
|
|
1495
|
+
// #SPA1 — content negotiation, resolved BEFORE the delegate is chosen because
|
|
1496
|
+
// this is the one place all four HTML delegates converge and where `local.req`
|
|
1497
|
+
// (routing + gina headers) and `local.res` are both live. Two independent effects:
|
|
1498
|
+
//
|
|
1499
|
+
// (a) a NEGOTIABLE route ALWAYS advertises `Vary: X-Gina-Navigate` — a cache
|
|
1500
|
+
// must be told the response varies whether or not THIS request asked for a
|
|
1501
|
+
// fragment. Set via res.setHeader so it reaches both engines: every HTTP/2
|
|
1502
|
+
// send site folds res.getHeaders() into stream.respond(). `completeHeaders`
|
|
1503
|
+
// is NOT usable for this — it runs at server.js:6452, before the params
|
|
1504
|
+
// block builds req.routing, so the flag would not exist yet (measured).
|
|
1505
|
+
//
|
|
1506
|
+
// (b) `X-Gina-Navigate: fragment` reuses the PROVEN layoutless path by setting
|
|
1507
|
+
// isWithoutLayout, rather than adding a fifth delegate. A custom-error
|
|
1508
|
+
// render is unaffected by construction: those delegates read `errOptions`,
|
|
1509
|
+
// not `local.options`.
|
|
1510
|
+
//
|
|
1511
|
+
// Wrapped so an absent/undeclared flag leaves the default path byte-identical,
|
|
1512
|
+
// and so any unexpected value simply falls through to the full page.
|
|
1513
|
+
try {
|
|
1514
|
+
if ( local.req && local.req.routing && local.req.routing.negotiate === true ) {
|
|
1515
|
+
var _navRes = local.res;
|
|
1516
|
+
if ( _navRes && typeof(_navRes.setHeader) == 'function' && !_navRes.headersSent ) {
|
|
1517
|
+
var _existingVary = ( typeof(_navRes.getHeader) == 'function' ) ? _navRes.getHeader('vary') : null;
|
|
1518
|
+
if ( !_existingVary ) {
|
|
1519
|
+
_navRes.setHeader('vary', 'X-Gina-Navigate');
|
|
1520
|
+
} else if ( !/x-gina-navigate/i.test( String(_existingVary) ) ) {
|
|
1521
|
+
// Vary is a LIST header — append, never clobber a sibling value
|
|
1522
|
+
// (the CORS paths set `vary: Origin`).
|
|
1523
|
+
_navRes.setHeader('vary', String(_existingVary) + ', X-Gina-Navigate');
|
|
1524
|
+
}
|
|
1525
|
+
}
|
|
1526
|
+
if ( local.req.ginaHeaders && local.req.ginaHeaders.navigate === 'fragment' ) {
|
|
1527
|
+
local.options.isWithoutLayout = true;
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1530
|
+
} catch (negotiationErr) {
|
|
1531
|
+
// Negotiation is an enhancement — it must never break a render.
|
|
1532
|
+
console.warn('[#SPA1] content negotiation skipped: '+ (negotiationErr.message || negotiationErr));
|
|
1533
|
+
}
|
|
1534
|
+
|
|
1495
1535
|
var _engine = 'swig';
|
|
1496
1536
|
try {
|
|
1497
1537
|
var _settings = local.options
|
|
@@ -2864,35 +2904,75 @@ function SuperController(options) {
|
|
|
2864
2904
|
/**
|
|
2865
2905
|
* Move files to assets dir
|
|
2866
2906
|
*
|
|
2867
|
-
*
|
|
2868
|
-
*
|
|
2907
|
+
* #B223 — each move streams the source into a temp sibling
|
|
2908
|
+
* (`<target>.<pid>.<rand>.tmp`) inside the destination directory, then
|
|
2909
|
+
* publishes it with an atomic `rename(2)`: a reader never observes a
|
|
2910
|
+
* partial file under the final name, and a pre-existing destination is
|
|
2911
|
+
* replaced atomically instead of being deleted up front. Failures settle
|
|
2912
|
+
* the callback ONCE with the real filesystem `Error` — source-side stream
|
|
2913
|
+
* errors included (they previously had no listener, so a source vanishing
|
|
2914
|
+
* mid-move escalated to an uncaughtException that killed the bundle
|
|
2915
|
+
* process) — and a failed move never consumes the source file.
|
|
2916
|
+
*
|
|
2917
|
+
* @inner
|
|
2918
|
+
* @param {number} i - Current index in `files`
|
|
2919
|
+
* @param {object} res - Response reference (unused; kept for signature stability)
|
|
2920
|
+
* @param {array} files - `{ source, target }` pairs — spliced as moves complete
|
|
2869
2921
|
*
|
|
2870
2922
|
* @callback cb
|
|
2871
|
-
* @param {
|
|
2923
|
+
* @param {Error|boolean} err - `false` once every file moved; the real `Error` on the first failure
|
|
2872
2924
|
* */
|
|
2873
2925
|
var movefiles = function (i, res, files, cb) {
|
|
2874
2926
|
if (!files.length || files.length == 0) {
|
|
2875
2927
|
cb(false)
|
|
2876
2928
|
} else {
|
|
2877
|
-
|
|
2929
|
+
// #B223 — no destination pre-delete: the atomic rename below replaces
|
|
2930
|
+
// it only once the new content is fully written
|
|
2931
|
+
// was: if ( fs.existsSync(files[i].target) ) new _(files[i].target).rmSync();
|
|
2932
|
+
var _tmpTarget = files[i].target + '.' + process.pid + '.' + Math.random().toString(36).slice(2, 8) + '.tmp';
|
|
2933
|
+
var _settled = false;
|
|
2878
2934
|
|
|
2879
2935
|
var sourceStream = fs.createReadStream(files[i].source);
|
|
2880
|
-
var destinationStream = fs.createWriteStream(files[i].target);
|
|
2936
|
+
// was: var destinationStream = fs.createWriteStream(files[i].target);
|
|
2937
|
+
var destinationStream = fs.createWriteStream(_tmpTarget);
|
|
2938
|
+
|
|
2939
|
+
var onMoveError = function (err) {
|
|
2940
|
+
if (_settled) return;
|
|
2941
|
+
_settled = true;
|
|
2942
|
+
try { destinationStream.destroy() } catch (_e) {}
|
|
2943
|
+
try { if ( fs.existsSync(_tmpTarget) ) fs.unlinkSync(_tmpTarget) } catch (_e) {}
|
|
2944
|
+
cb(err)
|
|
2945
|
+
};
|
|
2946
|
+
|
|
2947
|
+
// #B223 — the source stream previously had NO error listener: an
|
|
2948
|
+
// unreadable/vanished source raised an unhandled 'error' event
|
|
2949
|
+
sourceStream.on('error', onMoveError);
|
|
2881
2950
|
|
|
2882
2951
|
sourceStream
|
|
2883
2952
|
.pipe(destinationStream)
|
|
2884
|
-
.on('error',
|
|
2885
|
-
var err = 'Error on SuperController::copyFile(...): Not found ' + files[i].source + ' or ' + files[i].target;
|
|
2886
|
-
cb(err)
|
|
2887
|
-
})
|
|
2953
|
+
.on('error', onMoveError)
|
|
2888
2954
|
.on('close', function () {
|
|
2955
|
+
// 'close' also follows 'error' on an autoDestroyed stream — the
|
|
2956
|
+
// settled latch keeps a failed move from resuming the loop (the
|
|
2957
|
+
// pre-fix shape settled the callback a second time, as a success,
|
|
2958
|
+
// and unlinked the source of a move that had just failed)
|
|
2959
|
+
if (_settled) return;
|
|
2889
2960
|
|
|
2961
|
+
try {
|
|
2962
|
+
fs.renameSync(_tmpTarget, files[i].target);
|
|
2963
|
+
} catch (err) {
|
|
2964
|
+
return onMoveError(err)
|
|
2965
|
+
}
|
|
2890
2966
|
try {
|
|
2891
2967
|
fs.unlinkSync(files[i].source);
|
|
2892
|
-
files.splice(i, 1);
|
|
2893
2968
|
} catch (err) {
|
|
2894
|
-
|
|
2969
|
+
// the source vanishing AFTER a successful publish is not a
|
|
2970
|
+
// move failure (e.g. the upload tmp-cleanup timer took it)
|
|
2971
|
+
if (err.code != 'ENOENT') {
|
|
2972
|
+
return onMoveError(err)
|
|
2973
|
+
}
|
|
2895
2974
|
}
|
|
2975
|
+
files.splice(i, 1);
|
|
2896
2976
|
|
|
2897
2977
|
movefiles(i, res, files, cb)
|
|
2898
2978
|
})
|
|
@@ -3240,17 +3320,30 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
3240
3320
|
* You only need to provide the destination path
|
|
3241
3321
|
* Use `cb` callback or `onComplete` event
|
|
3242
3322
|
*
|
|
3323
|
+
* Files are published atomically (temp sibling + rename — #B223), so a
|
|
3324
|
+
* reader never observes a partially-written file under the final name.
|
|
3325
|
+
*
|
|
3243
3326
|
* @param {string} target is the upload dir destination
|
|
3244
3327
|
* @param {array} [files]
|
|
3245
3328
|
*
|
|
3246
3329
|
* @callback [cb]
|
|
3247
|
-
* @param {
|
|
3330
|
+
* @param {Error|boolean} error - `false` on success; the real move `Error`
|
|
3331
|
+
* on failure (`No file to upload` only when there was nothing to store)
|
|
3248
3332
|
* @param {array} files
|
|
3249
3333
|
*
|
|
3250
3334
|
* @event
|
|
3251
3335
|
* @param {object} error
|
|
3252
3336
|
* @param {array} files
|
|
3253
3337
|
*
|
|
3338
|
+
* @example
|
|
3339
|
+
* // store the request's uploaded files, surfacing the real failure cause
|
|
3340
|
+
* self.store(uploadDir, req.files, function onStored(err, files) {
|
|
3341
|
+
* if (err) {
|
|
3342
|
+
* // err.code carries the filesystem diagnostic (EACCES, ENOSPC, ENOENT, ...)
|
|
3343
|
+
* return self.throwError(500, err);
|
|
3344
|
+
* }
|
|
3345
|
+
* self.renderJSON({ files: files });
|
|
3346
|
+
* });
|
|
3254
3347
|
* */
|
|
3255
3348
|
this.store = async function(target, files, cb) {
|
|
3256
3349
|
|
|
@@ -3322,10 +3415,15 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
3322
3415
|
|
|
3323
3416
|
movefiles(0, local.res, list, function (err) {
|
|
3324
3417
|
if (err) {
|
|
3418
|
+
// #B223 — surface the REAL move error: every failure used
|
|
3419
|
+
// to be reported as the fabricated empty-upload message,
|
|
3420
|
+
// masking the actual filesystem diagnostics (ENOSPC,
|
|
3421
|
+
// EACCES, a vanished source, ...)
|
|
3422
|
+
var _moveErr = ( err instanceof Error ) ? err : new Error(String(err));
|
|
3325
3423
|
if (cb) {
|
|
3326
|
-
cb(
|
|
3424
|
+
cb(_moveErr)
|
|
3327
3425
|
} else {
|
|
3328
|
-
self.emit('uploaded',
|
|
3426
|
+
self.emit('uploaded', _moveErr)
|
|
3329
3427
|
}
|
|
3330
3428
|
} else {
|
|
3331
3429
|
if (cb) {
|
|
@@ -5859,7 +5957,10 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5859
5957
|
/**
|
|
5860
5958
|
* Snapshot the current request as a `haltedRequest` and store it in `requestStorage`.
|
|
5861
5959
|
* Typically called before redirecting to a login page so the original request can be
|
|
5862
|
-
* replayed after authentication via `resumeRequest()`.
|
|
5960
|
+
* replayed after authentication via `resumeRequest()`. The snapshotted `url` is the
|
|
5961
|
+
* byte-exact incoming URL — `req.originalUrl` when the engine preserves it (the isaac
|
|
5962
|
+
* engine strips the query string from `req.url` before controllers run; express's own
|
|
5963
|
+
* `originalUrl` is native), falling back to `req.url` for requests without it.
|
|
5863
5964
|
*
|
|
5864
5965
|
* @param {object} data - Current action data to preserve
|
|
5865
5966
|
* @param {object} [requestStorage] - Storage target; defaults to `req.session`
|
|
@@ -5887,7 +5988,15 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5887
5988
|
, res = local.res
|
|
5888
5989
|
, next = local.next
|
|
5889
5990
|
, haltedRequest = {
|
|
5890
|
-
|
|
5991
|
+
// #B219 — the isaac engine strips the query string from req.url before
|
|
5992
|
+
// controllers run (the query is parsed into req.get); the byte-exact
|
|
5993
|
+
// incoming URL survives on req.originalUrl, stamped as the engine
|
|
5994
|
+
// listener's first statement. Express sets originalUrl natively and does
|
|
5995
|
+
// not strip. Snapshot the preserved URL so the #B215 byte-exact replay
|
|
5996
|
+
// actually carries the query; bare/harness requests without the property
|
|
5997
|
+
// keep the historical req.url source.
|
|
5998
|
+
// was: url : req.url,
|
|
5999
|
+
url : req.originalUrl || req.url,
|
|
5891
6000
|
routing : req.routing,
|
|
5892
6001
|
method : req.method.toLowerCase(),
|
|
5893
6002
|
data : JSON.clone(data)
|
|
@@ -5930,9 +6039,13 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5930
6039
|
* Replay a previously paused request (see `pauseRequest()`). Reads the `haltedRequest`
|
|
5931
6040
|
* snapshot from `requestStorage` (defaulting to `req.session`), restores the original
|
|
5932
6041
|
* url / method / data / params onto the live request, then re-dispatches it: a GET is
|
|
5933
|
-
* replayed by redirecting to the
|
|
5934
|
-
*
|
|
5935
|
-
*
|
|
6042
|
+
* replayed by redirecting to the byte-exact halted URL — query string included —
|
|
6043
|
+
* whenever a live session exists (#B215; with no live session the URL is recomposed
|
|
6044
|
+
* from the route pattern plus the snapshotted params, or the halted data as query
|
|
6045
|
+
* params — the composed URL being the data's only travel channel there); a non-GET is
|
|
6046
|
+
* re-dispatched in-process to the original controller action (crossing namespaces via
|
|
6047
|
+
* `requireController()` when needed). The snapshot is cleared from storage once
|
|
6048
|
+
* consumed. For a GET replay, the
|
|
5936
6049
|
* halted request's extra data rides the session flash channel (`inheritedData`,
|
|
5937
6050
|
* consumed one-shot by the next routed GET) whenever a live session exists — a custom
|
|
5938
6051
|
* `requestStorage` with no live session degrades to a plain replay without the data.
|
|
@@ -6003,7 +6116,26 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
6003
6116
|
if (data.count() > 0) {
|
|
6004
6117
|
dataAsParams = JSON.clone(haltedRequest.data);
|
|
6005
6118
|
}
|
|
6006
|
-
|
|
6119
|
+
// #B215 — replay the byte-exact halted URL (query string included) whenever a
|
|
6120
|
+
// live session exists. The recompose below only carries query keys captured
|
|
6121
|
+
// into `req.params` during the original match (keys declared in BOTH the
|
|
6122
|
+
// rule's `requirements` AND `param`): a key bound in `param` only substitutes
|
|
6123
|
+
// its `:key` placeholders at match-commit yet never reaches req.params, and an
|
|
6124
|
+
// undeclared key never does either — so the GET replay arrived query-less,
|
|
6125
|
+
// matched anyway, and rendered literal `:key` template paths as a 500. The
|
|
6126
|
+
// inheritedData flash cannot heal that: router.js merges it into req.get AFTER
|
|
6127
|
+
// matching. `haltedRequest.url` is stamped by every pauseRequest(), so
|
|
6128
|
+
// in-flight pre-#B215 snapshots replay correctly too (#B219: since the isaac
|
|
6129
|
+
// engine strips the query from req.url before controllers run, pauseRequest
|
|
6130
|
+
// snapshots req.originalUrl — pre-#B219 isaac snapshots are path-only and
|
|
6131
|
+
// replay exactly as captured). The session-less flow
|
|
6132
|
+
// keeps the recompose: with no session the flash cannot carry the halted data,
|
|
6133
|
+
// and the composed URL's query params are its only travel channel.
|
|
6134
|
+
// was: var url = lib.routing.getRoute(haltedRequest.routing.rule, haltedRequest.params||dataAsParams).url;
|
|
6135
|
+
var hasLiveSession = ( typeof(req.session) != 'undefined' && req.session ) ? true : false;
|
|
6136
|
+
var url = ( hasLiveSession && typeof(haltedRequest.url) != 'undefined' && haltedRequest.url )
|
|
6137
|
+
? haltedRequest.url
|
|
6138
|
+
: lib.routing.getRoute(haltedRequest.routing.rule, haltedRequest.params||dataAsParams).url;
|
|
6007
6139
|
var requiredController = self; // by default;
|
|
6008
6140
|
if ( req.routing.namespace != haltedRequest.routing.namespace ) {
|
|
6009
6141
|
try {
|
|
@@ -6098,6 +6230,9 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
6098
6230
|
* Render a custom error page defined in `routing.json` via `req.routing.param.error`.
|
|
6099
6231
|
* Sets `local.options.isRenderingCustomError = true` so the render pipeline
|
|
6100
6232
|
* bypasses the normal rendering-stack guard.
|
|
6233
|
+
* Stamps `res.statusCode` from the error's `status` — when it is a known
|
|
6234
|
+
* status code — before dispatching, so every render delegate serves the
|
|
6235
|
+
* custom page with the real HTTP status (#B190).
|
|
6101
6236
|
*
|
|
6102
6237
|
* @param {object} req - Incoming request (reads `req.routing.param`)
|
|
6103
6238
|
* @param {object} res - Server response
|
|
@@ -6161,7 +6296,45 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
6161
6296
|
errOptions = merge(localOptions, local.options);
|
|
6162
6297
|
|
|
6163
6298
|
|
|
6299
|
+
} else if ( typeof(req.routing.param.file) != 'undefined' && req.routing.param.file ) {
|
|
6300
|
+
// #B191 — the resolved error template must never depend on the
|
|
6301
|
+
// reset flag: the server-side throwError twin (server.js) sets
|
|
6302
|
+
// `param.file` but not `isLocalOptionResetNeeded`, and the flag
|
|
6303
|
+
// used to ride a SHARED routing object overlapping errors could
|
|
6304
|
+
// strip. A falsy read here left errOptions null, so the render
|
|
6305
|
+
// delegates fell back to the FAILING route's own `file` and
|
|
6306
|
+
// built a bare, un-rooted template path — surfacing an upstream
|
|
6307
|
+
// failure as a bogus "check your routing.json" misdirection.
|
|
6308
|
+
// `path: null` mirrors the reset branch: custom paths ignore
|
|
6309
|
+
// the namespace.
|
|
6310
|
+
errOptions = merge({
|
|
6311
|
+
file: req.routing.param.file,
|
|
6312
|
+
path: null
|
|
6313
|
+
}, local.options);
|
|
6314
|
+
}
|
|
6315
|
+
// #B190 — stamp the HTTP status on the response before the render
|
|
6316
|
+
// dispatch. The swig and v1 delegates recompute it downstream from
|
|
6317
|
+
// the page data, but the nunjucks and the async delegates only read
|
|
6318
|
+
// the already-set `res.statusCode || 200` at their write sites — so
|
|
6319
|
+
// without this stamp a configured custom error page is served as
|
|
6320
|
+
// HTTP 200 there (live-measured 2026-08-01: nunjucks 200 vs swig 500
|
|
6321
|
+
// on the same fixture).
|
|
6322
|
+
var _eStatusCodes = local.options.conf
|
|
6323
|
+
&& local.options.conf.server
|
|
6324
|
+
&& local.options.conf.server.coreConfiguration
|
|
6325
|
+
&& local.options.conf.server.coreConfiguration.statusCodes
|
|
6326
|
+
|| null;
|
|
6327
|
+
if (
|
|
6328
|
+
data
|
|
6329
|
+
&& data.status
|
|
6330
|
+
&& res
|
|
6331
|
+
&& !res.headersSent
|
|
6332
|
+
&& _eStatusCodes
|
|
6333
|
+
&& typeof(_eStatusCodes[ data.status ]) != 'undefined'
|
|
6334
|
+
) {
|
|
6335
|
+
res.statusCode = data.status;
|
|
6164
6336
|
}
|
|
6337
|
+
|
|
6165
6338
|
delete local.options.namespace;
|
|
6166
6339
|
self.render(data, displayInspector, errOptions);
|
|
6167
6340
|
}
|
|
@@ -6746,7 +6919,14 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
6746
6919
|
|
|
6747
6920
|
if (!local.options.isRenderingCustomError) {
|
|
6748
6921
|
var eRule = 'custom-error-page@'+ bundle;
|
|
6749
|
-
|
|
6922
|
+
// #B191 — dispatch on a CLONE: the shared routing
|
|
6923
|
+
// entry must not carry per-error state. The stamps
|
|
6924
|
+
// below (and renderCustomError's own param deletes)
|
|
6925
|
+
// used to mutate `bundleConf.content.routing[eRule]`
|
|
6926
|
+
// directly, racing overlapping errors on the shared
|
|
6927
|
+
// object; lib/routing getRoute() already clones for
|
|
6928
|
+
// the server-side twin's dispatch.
|
|
6929
|
+
var routeObj = JSON.clone(bundleConf.content.routing[eRule]);
|
|
6750
6930
|
routeObj.rule = eRule;
|
|
6751
6931
|
//routeObj.url = decodeURI(local.req.url);/// avoid %20
|
|
6752
6932
|
routeObj.param.title = ( typeof(eData.title) != 'undefined' ) ? eData.title : 'Error ' + eData.status;
|
|
@@ -888,6 +888,14 @@ async function writeCache(local, self, bundle, opt, htmlContent, req, res) {
|
|
|
888
888
|
// #B158 — a gated route is never stored: the key carries no principal and
|
|
889
889
|
// both serve points run before the gate. Full rationale on isRouteGated.
|
|
890
890
|
libRef.authzGate.isRouteGated(req)
|
|
891
|
+
||
|
|
892
|
+
// #SPA1 — a NEGOTIABLE route is never stored: the key carries no SHAPE
|
|
893
|
+
// dimension, so a stored entry could replay a fragment to a page request.
|
|
894
|
+
// This WRITE-side refusal is load-bearing, not defence-in-depth — isaac's
|
|
895
|
+
// cache read runs PRE-ROUTING (server.isaac.js ~:2150, off raw request.url
|
|
896
|
+
// with no request.routing in scope), so it cannot be guarded on the flag.
|
|
897
|
+
// Keeping the URL out of the cache entirely is what protects that path.
|
|
898
|
+
( req.routing && req.routing.negotiate === true )
|
|
891
899
|
) {
|
|
892
900
|
return;
|
|
893
901
|
}
|
|
@@ -53,6 +53,17 @@ async function writeCache(bundle, opt, htmlContent, req, res, cacheIsEnabled, th
|
|
|
53
53
|
// #B158 — a gated route is never stored: the key carries no principal and
|
|
54
54
|
// both serve points run before the gate. Full rationale on isRouteGated.
|
|
55
55
|
lib.authzGate.isRouteGated(req)
|
|
56
|
+
||
|
|
57
|
+
// #SPA1 — a NEGOTIABLE route is never stored, for the identical reason one
|
|
58
|
+
// sentence up: the key carries no SHAPE dimension, and both serve points run
|
|
59
|
+
// before the shape is resolved. Storing one would let a fragment be replayed
|
|
60
|
+
// to a page request (and vice versa) on the same URL.
|
|
61
|
+
// This WRITE-side refusal is LOAD-BEARING, not merely defence-in-depth:
|
|
62
|
+
// isaac's cache read runs PRE-ROUTING (server.isaac.js ~:2150 — it keys off
|
|
63
|
+
// the raw request.url with no request.routing in scope, measured), so that
|
|
64
|
+
// read CANNOT be guarded on the flag. Never writing the entry is what keeps
|
|
65
|
+
// the isaac path correct; the express-side read guard is the belt.
|
|
66
|
+
( req.routing && req.routing.negotiate === true )
|
|
56
67
|
) {
|
|
57
68
|
return;
|
|
58
69
|
}
|
|
@@ -293,6 +304,10 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
293
304
|
, plugin = null
|
|
294
305
|
// By default
|
|
295
306
|
, isWithoutLayout = (localOptions.isWithoutLayout) ? true : false
|
|
307
|
+
// #SPA1 fragment-parent roster — populated only for a layoutless render
|
|
308
|
+
// of an extends template (derived in the extends block, composed into
|
|
309
|
+
// the fragments/ cache parent at the priming + post-asset writes).
|
|
310
|
+
, fragmentBlockRoster = null
|
|
296
311
|
, stream = null
|
|
297
312
|
;
|
|
298
313
|
|
|
@@ -470,7 +485,14 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
470
485
|
}
|
|
471
486
|
pageContentObj = null;
|
|
472
487
|
|
|
473
|
-
|
|
488
|
+
// #SPA1 — the compiled-template cache is shape-dimensioned: a layoutless
|
|
489
|
+
// (fragment) compile of an extends template resolves against a block-roster
|
|
490
|
+
// parent instead of the real layout, so the two shapes must never share a
|
|
491
|
+
// slot (first-shape-wins collision otherwise). isWithoutLayout is final
|
|
492
|
+
// here: the implicit extends-less auto-set runs above, and the later
|
|
493
|
+
// layout-not-found fallbacks only fire for templates that never reach this
|
|
494
|
+
// cache (its write requires an extends directive).
|
|
495
|
+
cacheKey = 'swig:' + localOptions.bundle + subFolder +'/'+ data.page.view.file + ( (isWithoutLayout) ? ':fragment' : '' );
|
|
474
496
|
// Retrieve layoutPath from content
|
|
475
497
|
if (
|
|
476
498
|
hasLayoutInPath
|
|
@@ -487,7 +509,32 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
487
509
|
layoutPath = extendFound[0].match(/(\"|\')(.*)(\"|\')/)[0].replace(/(\"|\')/g, '');
|
|
488
510
|
|
|
489
511
|
// adding layout
|
|
490
|
-
|
|
512
|
+
// #SPA1 — a layoutless (fragment) render of an extends template
|
|
513
|
+
// must NOT target the shared full-page cached layout: the
|
|
514
|
+
// post-asset persist below stores THIS render's assembled
|
|
515
|
+
// `layout`, which for a fragment is the (empty) nolayout shell —
|
|
516
|
+
// written over the shared file it blanks the parent every
|
|
517
|
+
// full-page render compiles from, so child blocks extend a
|
|
518
|
+
// block-less parent and are discarded. Fragments get their own
|
|
519
|
+
// `fragments/` namespace, primed from the child's OWN block
|
|
520
|
+
// roster so its blocks keep placeholders to fill.
|
|
521
|
+
if ( isWithoutLayout ) {
|
|
522
|
+
var _fragBlockRe = /\{\%-?\s*block\s+([A-Za-z0-9_-]+)/g;
|
|
523
|
+
var _fragBlockNames = [];
|
|
524
|
+
var _fragMatch = null;
|
|
525
|
+
while ( (_fragMatch = _fragBlockRe.exec(_templateContent)) !== null ) {
|
|
526
|
+
if ( _fragBlockNames.indexOf(_fragMatch[1]) < 0 ) {
|
|
527
|
+
_fragBlockNames.push(_fragMatch[1]);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
var _fragLines = [];
|
|
531
|
+
for (var _fragI = 0, _fragLen = _fragBlockNames.length; _fragI < _fragLen; ++_fragI) {
|
|
532
|
+
_fragLines.push('{% block '+ _fragBlockNames[_fragI] +' %}{% endblock %}');
|
|
533
|
+
}
|
|
534
|
+
fragmentBlockRoster = _fragLines.join('\n');
|
|
535
|
+
_fragBlockRe = null; _fragBlockNames = null; _fragMatch = null; _fragLines = null;
|
|
536
|
+
}
|
|
537
|
+
var newLayoutPath = 'swig' + subFolder + ( (isWithoutLayout) ? '/fragments/' : '/' ) + layoutPath;
|
|
491
538
|
newLayoutFilename = _(cachePath +'/'+ localOptions.bundle +'/'+ newLayoutPath, true);
|
|
492
539
|
|
|
493
540
|
// In dev/cacheless mode we always refresh the cached layout;
|
|
@@ -537,7 +584,16 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
537
584
|
|
|
538
585
|
// replaced: openSync/readFileSync/writeSync/closeSync — async read + write (#P29, #P31)
|
|
539
586
|
// buffer = Buffer.from( fs.readFileSync(localOptions.template.html + '/'+ layoutPath) ); // replaced: CVE-2023-25345
|
|
540
|
-
|
|
587
|
+
// #SPA1 — the fragments/ parent primes from the child's block
|
|
588
|
+
// roster, never from the original layout file (the roster is
|
|
589
|
+
// what lets the child's blocks render; the shell tail is
|
|
590
|
+
// appended by the post-asset persist further below).
|
|
591
|
+
if ( isWithoutLayout && fragmentBlockRoster !== null ) {
|
|
592
|
+
buffer = fragmentBlockRoster;
|
|
593
|
+
}
|
|
594
|
+
else {
|
|
595
|
+
buffer = await fs.promises.readFile(localOptions.template.html + '/'+ layoutPath);
|
|
596
|
+
}
|
|
541
597
|
// Atomic write: temp file + rename. rename(2) on POSIX is
|
|
542
598
|
// atomic on the same filesystem, so concurrent readers at
|
|
543
599
|
// the post-priming readFile below never see the target
|
|
@@ -744,6 +800,21 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
744
800
|
// ./namespace/page.html (GOOD)
|
|
745
801
|
|
|
746
802
|
if ( !fs.existsSync(path) ) {
|
|
803
|
+
if (isRenderingCustomError) {
|
|
804
|
+
// #B191 — never dump a routing rule while rendering a CUSTOM
|
|
805
|
+
// ERROR page: the rule in scope is the failing route's (or
|
|
806
|
+
// the injected error route's), correct by construction, and
|
|
807
|
+
// the generic diagnostic below misdirected operators toward
|
|
808
|
+
// editing valid configuration. Name the template that failed
|
|
809
|
+
// and hand off to throwError — its re-entry guard serves the
|
|
810
|
+
// built-in error page without looping through this branch.
|
|
811
|
+
msg = 'could not open the custom error template "'+ path +'"'
|
|
812
|
+
+ ' — falling back to the built-in error page.';
|
|
813
|
+
err = new ApiError(msg, 500);
|
|
814
|
+
console.error(err.stack);
|
|
815
|
+
self.throwError(err);
|
|
816
|
+
return;
|
|
817
|
+
}
|
|
747
818
|
msg = 'could not open "'+ path +'"' +
|
|
748
819
|
'\n1) The requested file does not exists in your templates/html (check your template directory). Can you find: '+path +
|
|
749
820
|
'\n2) Check the following rule in your `'+localOptions.conf.bundlePath+'/config/routing.json` and look around `param` to make sure that nothing is wrong with your file declaration: '+
|
|
@@ -1732,10 +1803,20 @@ module.exports = async function render(userData, displayInspector, errOptions, d
|
|
|
1732
1803
|
// a temp file and renaming onto target is atomic on POSIX, so
|
|
1733
1804
|
// readers always see either the prior content or the new
|
|
1734
1805
|
// content.
|
|
1806
|
+
// #SPA1 — a fragment render persists the child's block roster
|
|
1807
|
+
// ahead of the assembled shell: the roster keeps placeholders
|
|
1808
|
+
// for the child's blocks, and the shell tail (xhr-inputs /
|
|
1809
|
+
// scripts) still rides the fragment response after them. The
|
|
1810
|
+
// write lands in the fragments/ namespace, so the full-page
|
|
1811
|
+
// cached layout is never touched by a fragment render.
|
|
1812
|
+
var _persistedLayout = ( isWithoutLayout && fragmentBlockRoster !== null )
|
|
1813
|
+
? fragmentBlockRoster + '\n' + layout
|
|
1814
|
+
: layout;
|
|
1735
1815
|
var _layoutTmpAssets = newLayoutFilename + '.tmp.' + process.pid + '.' + Date.now() + '.' + Math.random().toString(36).slice(2);
|
|
1736
|
-
await fs.promises.writeFile(_layoutTmpAssets,
|
|
1816
|
+
await fs.promises.writeFile(_layoutTmpAssets, _persistedLayout);
|
|
1737
1817
|
await fs.promises.rename(_layoutTmpAssets, newLayoutFilename);
|
|
1738
1818
|
_layoutTmpAssets = null;
|
|
1819
|
+
_persistedLayout = null;
|
|
1739
1820
|
}
|
|
1740
1821
|
|
|
1741
1822
|
// Last compilation before rendering
|
|
@@ -1494,7 +1494,14 @@ isBundleMounted(projects, bundlesPath, getContext('bundle'), function onBundleMo
|
|
|
1494
1494
|
// noise for an inert bundle).
|
|
1495
1495
|
var _rcEnabled = String(_rcServerCache.enable).toLowerCase() === 'true';
|
|
1496
1496
|
var _rcRouting = (typeof gna.getConfig === 'function') ? gna.getConfig('routing') : null;
|
|
1497
|
-
|
|
1497
|
+
// #B238 — feed the disclosure-warn context from the RESOLVED conf
|
|
1498
|
+
// tree (the same `server.hidePoweredBy` source the engine-agnostic
|
|
1499
|
+
// X-Powered-By gate reads), guarded like `_rcServerCache` above.
|
|
1500
|
+
var _rcHidePoweredBy = false;
|
|
1501
|
+
try {
|
|
1502
|
+
_rcHidePoweredBy = ( config.getInstance()[gna.core.startingApp][env].server.hidePoweredBy === true );
|
|
1503
|
+
} catch (rcHpbErr) { _rcHidePoweredBy = false; }
|
|
1504
|
+
var _rcCheck = lib.RenderCache.validateConfig(_rcServerCache, _rcRouting || {}, gna.core.startingApp, { hidePoweredBy: _rcHidePoweredBy, cacheEnabled: _rcEnabled });
|
|
1498
1505
|
for (var _rcW = 0; _rcW < _rcCheck.warnings.length; _rcW++) {
|
|
1499
1506
|
console.warn('[render-cache] ' + _rcCheck.warnings[_rcW]);
|
|
1500
1507
|
}
|
|
@@ -2456,6 +2463,21 @@ gna.getProtected = getProtected;
|
|
|
2456
2463
|
*/
|
|
2457
2464
|
gna.filterArgs = filterArgs;
|
|
2458
2465
|
|
|
2466
|
+
/**
|
|
2467
|
+
* Import `GINA_*` / `VENDOR_*` / `USER_*` keys from `process.env` into the
|
|
2468
|
+
* framework environment (`process.gina`). Move semantics by default — the
|
|
2469
|
+
* `filterArgs()` sweep deletes each imported key from `process.env`. Pass
|
|
2470
|
+
* `keep=true` for the early visibility pass (`bin/cli` runs it before its
|
|
2471
|
+
* home/settings/host resolution) that leaves `process.env` intact for the
|
|
2472
|
+
* later sweep. Idempotent in both modes.
|
|
2473
|
+
*
|
|
2474
|
+
* @param {boolean} [keep] - Import without deleting from `process.env`
|
|
2475
|
+
* @returns {void}
|
|
2476
|
+
* @example
|
|
2477
|
+
* importEnvVars(true); // process.gina.GINA_ENV === 'dev'; process.env.GINA_ENV intact
|
|
2478
|
+
*/
|
|
2479
|
+
gna.importEnvVars = importEnvVars;
|
|
2480
|
+
|
|
2459
2481
|
/**
|
|
2460
2482
|
* Resolve the log directory — `GINA_LOGDIR` / `LOGDIR` / prefix `var/log`
|
|
2461
2483
|
* with fallback to `~/.gina/log`. Creates it if missing.
|
|
@@ -436,10 +436,13 @@ var SESSIONLESS_MESSAGE =
|
|
|
436
436
|
* 1. `opts.secret` — factory override (test harness only).
|
|
437
437
|
* 2. `settings.json > csrf.secret` — resolver-compatible config slot.
|
|
438
438
|
* `${secret:KEY}` placeholders are filled by `lib/secrets` at
|
|
439
|
-
* config-load time
|
|
440
|
-
* consumers name the env
|
|
441
|
-
*
|
|
442
|
-
*
|
|
439
|
+
* config-load time (framework environment first, then the raw
|
|
440
|
+
* process environment), so this slot lets consumers name the env
|
|
441
|
+
* var anything they like.
|
|
442
|
+
* 3. `GINA_CSRF_SECRET` — back-compat env read, through the framework
|
|
443
|
+
* env reader first, then the raw process environment (#B156 class:
|
|
444
|
+
* the CLI sweep empties process.env of GINA_* keys). Always
|
|
445
|
+
* honoured when set, regardless of (2).
|
|
443
446
|
*
|
|
444
447
|
* @example
|
|
445
448
|
* // settings.json — recommended shape:
|
|
@@ -483,7 +486,8 @@ function Csrf(opts) {
|
|
|
483
486
|
? opts.secret
|
|
484
487
|
: (typeof defaults.secret === 'string' && defaults.secret)
|
|
485
488
|
? defaults.secret
|
|
486
|
-
:
|
|
489
|
+
: ( (typeof getEnvVar === 'function' && getEnvVar('GINA_CSRF_SECRET'))
|
|
490
|
+
|| process.env.GINA_CSRF_SECRET );
|
|
487
491
|
if (typeof secret !== 'string' || !secret) {
|
|
488
492
|
throw new Error(
|
|
489
493
|
'[gina csrf] GINA_CSRF_SECRET env var is required'
|
package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/README.md
RENAMED
|
@@ -119,3 +119,23 @@ the Isaac engine when absent on most installs).
|
|
|
119
119
|
The plugin is safe to register more than once — `removeHeader` is
|
|
120
120
|
idempotent (no-op when the header is already absent), so a second
|
|
121
121
|
call has no effect.
|
|
122
|
+
|
|
123
|
+
## What this does NOT cover (#B238)
|
|
124
|
+
|
|
125
|
+
`server.hidePoweredBy` suppresses the `X-Powered-By` header — nothing
|
|
126
|
+
else. Two other response surfaces can still name the framework:
|
|
127
|
+
|
|
128
|
+
- **`Cache-Status` identifier** — when the render/output cache is
|
|
129
|
+
enabled, every GET carries `Cache-Status: gina-cache; …` (RFC 9211).
|
|
130
|
+
The identifier never changes implicitly (it is a documented-stable
|
|
131
|
+
wire value); instead, a boot warn fires when `server.hidePoweredBy`
|
|
132
|
+
is true, the cache is enabled, and no `server.cache.name` is set.
|
|
133
|
+
Set any RFC 8941 token there (e.g. `"cache"`) to close the
|
|
134
|
+
disclosure, or explicitly `"gina-cache"` to keep the wire and
|
|
135
|
+
silence the warn.
|
|
136
|
+
- **`Vary: X-Gina-Navigate`** — routes with `negotiate: true` emit it
|
|
137
|
+
so shared caches key fragment vs full-page responses correctly.
|
|
138
|
+
This is caching-correctness metadata, not a banner: suppressing or
|
|
139
|
+
renaming it would corrupt intermediary caches / break the client
|
|
140
|
+
contract, so it is not configurable. Routes without `negotiate`
|
|
141
|
+
never emit it.
|