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
|
@@ -310,7 +310,8 @@ const slice = Array.prototype.slice;
|
|
|
310
310
|
* @param {string} options.cachePath - Absolute path to the bundle cache directory
|
|
311
311
|
* @param {boolean} options.isCacheless - True in dev mode; clears local cache on startup
|
|
312
312
|
* @param {object} options.credentials - TLS credentials (privateKey, certificate, ca, passphrase)
|
|
313
|
-
* @param {object} options.allRoutes - Full routing map (
|
|
313
|
+
* @param {object} options.allRoutes - Full routing map (no longer read here — the client maps arrive pre-built, see clientRoutingAssets)
|
|
314
|
+
* @param {{full: object, stripped: object}} options.clientRoutingAssets - Client-served routing maps built once by core/server.js `buildClientRoutingAssets` (#B212) — the full map and the #B66 host-stripped variant; isaac writes them to disk and serves the precompressed files as its fast-path
|
|
314
315
|
* @param {string} options.preferedCompressionEncodingOrder - Ordered list of accepted encodings
|
|
315
316
|
* @param {number} [options.keepAliveTimeout] - Server keep-alive timeout in ms
|
|
316
317
|
* @param {number} [options.headersTimeout] - Server headers timeout in ms
|
|
@@ -360,56 +361,20 @@ function ServerEngineClass(options) {
|
|
|
360
361
|
localCachePathObj.rmSync();
|
|
361
362
|
}
|
|
362
363
|
// For frontend template routing if needed
|
|
363
|
-
//
|
|
364
|
-
//
|
|
365
|
-
|
|
366
|
-
//
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
// it inherits the strip.
|
|
378
|
-
if ( clean.param && typeof(clean.param) == 'object' ) {
|
|
379
|
-
const { requireAuth, roles, policy, ...cleanParam } = clean.param;
|
|
380
|
-
// #COMPLY10 — `public` is an authorization key too: under deny-by-default
|
|
381
|
-
// the set of public routes IS the authentication surface, so serving the
|
|
382
|
-
// markers hands an anonymous client a free recon map of what it can reach.
|
|
383
|
-
// Stripped with `delete` rather than by joining the destructuring above,
|
|
384
|
-
// for two independent reasons: `public` is a strict-mode RESERVED WORD, so
|
|
385
|
-
// the bare binding form is a SyntaxError (only a renamed binding compiles);
|
|
386
|
-
// and a separate statement leaves the destructuring line byte-identical to
|
|
387
|
-
// what the #COMPLY1 tests pin. The `#P21`/`#P22` note at the top of this
|
|
388
|
-
// loop moved AWAY from `delete` for V8 hidden-class reasons on hot paths —
|
|
389
|
-
// this loop runs once at boot over a bounded route table, so that rationale
|
|
390
|
-
// does not apply here.
|
|
391
|
-
delete cleanParam.public;
|
|
392
|
-
clean.param = cleanParam;
|
|
393
|
-
}
|
|
394
|
-
_routing[_routingKeys[ri]] = clean;
|
|
395
|
-
|
|
396
|
-
// reverseRouting is done on the frontend side
|
|
397
|
-
|
|
398
|
-
}// EO for routing keys
|
|
399
|
-
|
|
400
|
-
// #B66 — a host-stripped variant of the routing map, served to PROXIED clients
|
|
401
|
-
// so the browser never receives any bundle's INTERNAL scheme://host:port (an
|
|
402
|
-
// information disclosure) and cross-bundle client toUrl resolves same-origin.
|
|
403
|
-
// Drop each route's `host` + `hostname`; KEEP `webroot` (the client toUrl path
|
|
404
|
-
// relies on it). Proxy-host-agnostic + boot-static like the full map above; the
|
|
405
|
-
// serve-time handler picks stripped-vs-full per request on request._ginaIsProxyHost.
|
|
406
|
-
// See the #B66 handler branch below.
|
|
407
|
-
var _routingStripped = JSON.clone(_routing);
|
|
408
|
-
var _routingStrippedKeys = Object.keys(_routingStripped);
|
|
409
|
-
for (var si = 0; si < _routingStrippedKeys.length; ++si) {
|
|
410
|
-
const { host, hostname, ...cleanStripped } = _routingStripped[_routingStrippedKeys[si]];
|
|
411
|
-
_routingStripped[_routingStrippedKeys[si]] = cleanStripped;
|
|
412
|
-
}// EO for stripped routing keys
|
|
364
|
+
// #B212 — the client-served maps (the full map + the #B66 host-stripped
|
|
365
|
+
// variant, #COMPLY1/#COMPLY10 strip included) are now built ONCE, engine-
|
|
366
|
+
// agnostically, by core/server.js (buildClientRoutingAssets) and handed to
|
|
367
|
+
// every engine via options.clientRoutingAssets — one builder, two consumers:
|
|
368
|
+
// server.js serves the pre-stringified maps from memory in its onRequest
|
|
369
|
+
// catch-all (the express path, which used to 404 here), while isaac writes
|
|
370
|
+
// them to disk below and serves the precompressed files as its fast-path.
|
|
371
|
+
// Rebuilding the maps here would re-create the exact writer/reader drift
|
|
372
|
+
// the #C3 lesson warns about.
|
|
373
|
+
var _routing = ( options.clientRoutingAssets && options.clientRoutingAssets.full ) || null;
|
|
374
|
+
var _routingStripped = ( options.clientRoutingAssets && options.clientRoutingAssets.stripped ) || null;
|
|
375
|
+
if ( !_routing ) {
|
|
376
|
+
console.warn('[ SERVER ][ isaac ] options.clientRoutingAssets missing — the client routing assets (routing.json / routing.stripped.json) will not be written for this boot.');
|
|
377
|
+
}
|
|
413
378
|
|
|
414
379
|
// Checking if brotli is installed
|
|
415
380
|
var brotliBin = null;
|
|
@@ -2092,20 +2057,39 @@ function ServerEngineClass(options) {
|
|
|
2092
2057
|
localAsset = _strippedRoutingAsset;
|
|
2093
2058
|
}
|
|
2094
2059
|
}
|
|
2060
|
+
// Slice 3 (SPA Tier 1) — per-variant weak ETag, computed once at init by
|
|
2061
|
+
// core/server.js beside the maps themselves (#B212 single-builder);
|
|
2062
|
+
// ONE weak tag per variant covers this fast-path's content-encoded
|
|
2063
|
+
// file representations too. Kept in sync with the engine-agnostic
|
|
2064
|
+
// server.js handler per the /_gina/* endpoint rule.
|
|
2065
|
+
var _routingAssetEtag = ( request._ginaIsProxyHost === true && options.clientRoutingAssets )
|
|
2066
|
+
? options.clientRoutingAssets.strippedEtag
|
|
2067
|
+
: ( options.clientRoutingAssets ? options.clientRoutingAssets.fullEtag : null );
|
|
2095
2068
|
response.setHeader('content-type', localAsset.mime);
|
|
2096
2069
|
response.setHeader('vary', 'Origin');
|
|
2097
2070
|
// #B66 — a shared cache must not cross-serve the stripped (proxied) and
|
|
2098
|
-
// full (raw) variants under the same URL; mark the proxied variant
|
|
2099
|
-
|
|
2071
|
+
// full (raw) variants under the same URL; mark the proxied variant
|
|
2072
|
+
// private. Slice 3 (SPA Tier 1): `no-cache` = revalidate-before-use — each
|
|
2073
|
+
// page boot costs one conditional GET (usually a 304), so a restart's
|
|
2074
|
+
// new route table reaches returning browsers immediately instead of
|
|
2075
|
+
// after the old 24h max-age window.
|
|
2076
|
+
response.setHeader('cache-control', ( request._ginaIsProxyHost === true ) ? 'private, no-cache' : 'public, no-cache');
|
|
2100
2077
|
response.setHeader('x-content-type-options', 'nosniff');
|
|
2101
2078
|
response.setHeader('x-frame-options', 'DENY');
|
|
2102
2079
|
response.setHeader('x-xss-protection', '1; mode=block');
|
|
2080
|
+
if (_routingAssetEtag) {
|
|
2081
|
+
response.setHeader('etag', _routingAssetEtag);
|
|
2082
|
+
}
|
|
2103
2083
|
// #HDR8 Phase 2 — gated on settings.json > server.hidePoweredBy
|
|
2104
2084
|
// (inline form because this site uses setHeader instead of the
|
|
2105
2085
|
// writeHead object-literal headers shape that _setPoweredByHeader covers)
|
|
2106
2086
|
if (!options.hidePoweredBy) {
|
|
2107
2087
|
response.setHeader('X-Powered-By', 'Gina/'+ GINA_VERSION);
|
|
2108
2088
|
}
|
|
2089
|
+
if ( _routingAssetEtag && request.headers['if-none-match'] === _routingAssetEtag ) {
|
|
2090
|
+
response.statusCode = 304;
|
|
2091
|
+
return response.end();
|
|
2092
|
+
}
|
|
2109
2093
|
|
|
2110
2094
|
var filename = _(localAsset.path +'/'+ localAsset.file, true);
|
|
2111
2095
|
if (acceptEncodingArr) {
|
|
@@ -2151,7 +2135,11 @@ function ServerEngineClass(options) {
|
|
|
2151
2135
|
if ( request.method.toUpperCase() === 'GET' ) {
|
|
2152
2136
|
var cacheStatus = null;
|
|
2153
2137
|
if ( String(server._cacheIsEnabled).toLowerCase() === 'true' ) {
|
|
2154
|
-
|
|
2138
|
+
// #B238 — identifier from the boot-resolved stamp (server.js
|
|
2139
|
+
// stamps `instance._cacheName` beside `_cacheIsEnabled`; was
|
|
2140
|
+
// the literal 'gina-cache'). Same value as the shared handle()
|
|
2141
|
+
// read's mints — the engines agree on the wire by construction.
|
|
2142
|
+
cacheStatus = server._cacheName;
|
|
2155
2143
|
}
|
|
2156
2144
|
|
|
2157
2145
|
// Importing cache handler (render/output cache goes through the strategy dispatcher)
|
|
@@ -2159,6 +2147,14 @@ function ServerEngineClass(options) {
|
|
|
2159
2147
|
// after a restart (the Map is empty on boot): has()/get() fall back to the disk
|
|
2160
2148
|
// body + its `.meta` sidecar. == server.cache.path (the writer's opt.path) by
|
|
2161
2149
|
// default — both resolve to the top-level `${cachePath}` (${projectPath}/cache).
|
|
2150
|
+
// #SPA1 — NOTE for anyone adding a per-route guard here: this read
|
|
2151
|
+
// is PRE-ROUTING. It keys off the raw `request.url` and there is no
|
|
2152
|
+
// `request.routing` in scope yet, so a `request.routing.negotiate`
|
|
2153
|
+
// check at this site would be a control that can never fire. A
|
|
2154
|
+
// negotiable route is kept out of the cache by the WRITERS refusing
|
|
2155
|
+
// to store it (render-swig / render-nunjucks writeCache) — which is
|
|
2156
|
+
// precisely why that refusal is load-bearing rather than belt-and-
|
|
2157
|
+
// braces. Do not "fix" this by adding a dead guard.
|
|
2162
2158
|
renderCache.from(server._cached, options.cachePath);
|
|
2163
2159
|
var cacheKey = null
|
|
2164
2160
|
, hasCachedKey = false
|
|
@@ -433,6 +433,124 @@ function _readInstrumentBody(req, cb) {
|
|
|
433
433
|
req.on('error', function(e) { _finish(e); });
|
|
434
434
|
}
|
|
435
435
|
|
|
436
|
+
/**
|
|
437
|
+
* Builds the client-served routing maps from the boot-time global route
|
|
438
|
+
* table: the full map, and the #B66 host-stripped variant served to proxied
|
|
439
|
+
* clients.
|
|
440
|
+
*
|
|
441
|
+
* #B212 — this is the ONE engine-agnostic builder. It moved here verbatim
|
|
442
|
+
* from the isaac engine constructor (`server.isaac.js`), where it lived
|
|
443
|
+
* isaac-only — leaving `/_gina/assets/routing.json` a 404 under any other
|
|
444
|
+
* engine, in violation of the `/_gina/*` endpoint-sync rule (and the client,
|
|
445
|
+
* lacking a `response.ok` check — #B213 — then installed the 404 JSON body AS
|
|
446
|
+
* its routing table). Two consumers, one source of truth: `init()` hands the
|
|
447
|
+
* maps to the engine via `serverOpt.clientRoutingAssets` (isaac writes them to
|
|
448
|
+
* disk and serves the precompressed files as its fast-path) and keeps
|
|
449
|
+
* pre-stringified copies on `self._clientRoutingAssets` for the engine-
|
|
450
|
+
* agnostic `onRequest` handler (the express path). Rebuilding per engine
|
|
451
|
+
* would re-create the writer/reader drift the #C3 lesson warns about.
|
|
452
|
+
*
|
|
453
|
+
* Runs once at boot over a bounded route table — not a hot path.
|
|
454
|
+
*
|
|
455
|
+
* Slice 3 (#SPA1) rebuilt the cut as an ALLOWLIST. The previous shape was a
|
|
456
|
+
* destructuring-rest DENYLIST (strip `_comment`/`middleware`, then the
|
|
457
|
+
* #COMPLY1 `requireAuth`/`roles`/`policy` + #COMPLY10 `public` authorization
|
|
458
|
+
* keys) — but `schema/routing.json` is `additionalProperties: true` at both
|
|
459
|
+
* the route and `param` levels, so under a denylist every FUTURE key shipped
|
|
460
|
+
* to any anonymous browser by default; that is exactly how `csrfExempt`,
|
|
461
|
+
* `param.dto` and `queryTimeout` reached the wire. Under the allowlist the
|
|
462
|
+
* authorization strip is structural: a key that is not named simply never
|
|
463
|
+
* ships. The client contract kept here is the MEASURED reader set — client
|
|
464
|
+
* `getRoute`/`toUrl` read `url`/`webroot`/`bundle`/`hostname` (+ `host` on
|
|
465
|
+
* raw deployments), iterate `param` for URL-placeholder bindings, test
|
|
466
|
+
* `requirements` key-presence, and branch on the route being a redirect;
|
|
467
|
+
* `negotiate` is the content-negotiation capability flag the navigation
|
|
468
|
+
* layer needs. Everything else — dispatch keys (`param.control`/`file`/
|
|
469
|
+
* `path`/`title`/…), `cache`, `csrfExempt`, `scopes`, `namespace`,
|
|
470
|
+
* `middlewareIgnored`, `validator::` requirement bodies — is a server-side
|
|
471
|
+
* contract and stays home.
|
|
472
|
+
*
|
|
473
|
+
* @private
|
|
474
|
+
* @param {object} allRoutes - The boot-time global (all-bundles) route table (`options.conf.routing`)
|
|
475
|
+
* @returns {{full: object, stripped: object}} The client-safe full map and the #B66 host-stripped variant (both fresh clones — the live config is never touched)
|
|
476
|
+
*/
|
|
477
|
+
function buildClientRoutingAssets(allRoutes) {
|
|
478
|
+
var _all = JSON.clone(allRoutes);
|
|
479
|
+
var _routing = {};
|
|
480
|
+
// Route-level allowlist — the measured client contract (see the JSDoc above).
|
|
481
|
+
var _clientRouteKeys = ['url', 'method', 'webroot', 'bundle', 'hostname', 'host', 'negotiate'];
|
|
482
|
+
var _routingKeys = Object.keys(_all);
|
|
483
|
+
for (var ri = 0; ri < _routingKeys.length; ++ri) {
|
|
484
|
+
var _src = _all[_routingKeys[ri]];
|
|
485
|
+
var _clean = {};
|
|
486
|
+
if ( !_src || typeof(_src) != 'object' ) {
|
|
487
|
+
_routing[_routingKeys[ri]] = _src;
|
|
488
|
+
continue;
|
|
489
|
+
}
|
|
490
|
+
for (var ki = 0; ki < _clientRouteKeys.length; ++ki) {
|
|
491
|
+
if ( typeof(_src[_clientRouteKeys[ki]]) != 'undefined' ) {
|
|
492
|
+
_clean[_clientRouteKeys[ki]] = _src[_clientRouteKeys[ki]];
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
// `requirements` — plain-regex entries only: the client toUrl reads KEY
|
|
496
|
+
// PRESENCE (to keep a declared URL variable out of the query string);
|
|
497
|
+
// a `validator::{...}` body is a server-side validation spec and a
|
|
498
|
+
// disclosure of the bundle's validation model.
|
|
499
|
+
if ( _src.requirements && typeof(_src.requirements) == 'object' ) {
|
|
500
|
+
var _cleanReq = {};
|
|
501
|
+
var _reqKeys = Object.keys(_src.requirements);
|
|
502
|
+
for (var qi = 0; qi < _reqKeys.length; ++qi) {
|
|
503
|
+
if ( !/^validator\:\:/i.test(String(_src.requirements[_reqKeys[qi]])) ) {
|
|
504
|
+
_cleanReq[_reqKeys[qi]] = _src.requirements[_reqKeys[qi]];
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
_clean.requirements = _cleanReq;
|
|
508
|
+
}
|
|
509
|
+
// `param` — URL-placeholder BINDINGS only. A param entry is a binding
|
|
510
|
+
// iff the route's own url declares `:key` (the client getRoute uses the
|
|
511
|
+
// binding regex to split URL variables from appended query params);
|
|
512
|
+
// every other param key is dispatch/authorization vocabulary
|
|
513
|
+
// (`control`, `file`, `path`, `title`, the #COMPLY1/#COMPLY10 keys, …)
|
|
514
|
+
// and is a server-side contract. The one dispatch FACT the client
|
|
515
|
+
// toUrl branches on — "is this a redirect route" — ships as the
|
|
516
|
+
// derived boolean `isRedirect` instead of the `control` value.
|
|
517
|
+
if ( _src.param && typeof(_src.param) == 'object' ) {
|
|
518
|
+
var _bindings = {};
|
|
519
|
+
var _urlVars = String(_src.url || '').match(/\:[-_a-zA-Z0-9]+/g) || [];
|
|
520
|
+
for (var vi = 0; vi < _urlVars.length; ++vi) {
|
|
521
|
+
var _varName = _urlVars[vi].substr(1);
|
|
522
|
+
if ( typeof(_src.param[_varName]) != 'undefined' ) {
|
|
523
|
+
_bindings[_varName] = _src.param[_varName];
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
_clean.param = _bindings;
|
|
527
|
+
if ( typeof(_src.param.control) == 'string' && /^redirect$/i.test(_src.param.control) ) {
|
|
528
|
+
_clean.isRedirect = true;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
_routing[_routingKeys[ri]] = _clean;
|
|
532
|
+
|
|
533
|
+
// reverseRouting is done on the frontend side
|
|
534
|
+
|
|
535
|
+
}// EO for routing keys
|
|
536
|
+
|
|
537
|
+
// #B66 — a host-stripped variant of the routing map, served to PROXIED clients
|
|
538
|
+
// so the browser never receives any bundle's INTERNAL scheme://host:port (an
|
|
539
|
+
// information disclosure) and cross-bundle client toUrl resolves same-origin.
|
|
540
|
+
// Drop each route's `host` + `hostname`; KEEP `webroot` (the client toUrl path
|
|
541
|
+
// relies on it). Proxy-host-agnostic + boot-static like the full map above; the
|
|
542
|
+
// serve-time handlers pick stripped-vs-full per request (isaac on the #B65
|
|
543
|
+
// request stamp, the engine-agnostic onRequest handler on its #B65-twin).
|
|
544
|
+
var _routingStripped = JSON.clone(_routing);
|
|
545
|
+
var _routingStrippedKeys = Object.keys(_routingStripped);
|
|
546
|
+
for (var si = 0; si < _routingStrippedKeys.length; ++si) {
|
|
547
|
+
const { host, hostname, ...cleanStripped } = _routingStripped[_routingStrippedKeys[si]];
|
|
548
|
+
_routingStripped[_routingStrippedKeys[si]] = cleanStripped;
|
|
549
|
+
}// EO for stripped routing keys
|
|
550
|
+
|
|
551
|
+
return { full: _routing, stripped: _routingStripped };
|
|
552
|
+
}
|
|
553
|
+
|
|
436
554
|
function Server(options) {
|
|
437
555
|
|
|
438
556
|
// switching logger flow
|
|
@@ -737,6 +855,36 @@ function Server(options) {
|
|
|
737
855
|
serverOpt.ioServer = ioServerOpt
|
|
738
856
|
}
|
|
739
857
|
|
|
858
|
+
// #B212 — build the client-served routing maps ONCE here, engine-
|
|
859
|
+
// agnostically, so /_gina/assets/routing.json serves identically under
|
|
860
|
+
// every engine: isaac consumes these via serverOpt for its
|
|
861
|
+
// precompressed-file fast-path, and the engine-agnostic onRequest
|
|
862
|
+
// handler below serves the pre-stringified copies from memory (the
|
|
863
|
+
// express path, which used to fall through to routing and 404).
|
|
864
|
+
// Built BEFORE `new Engine(serverOpt)` — isaac reads them in its
|
|
865
|
+
// constructor.
|
|
866
|
+
// TODO - Use the per-bundle `routing` instead of `allRoutes` after having
|
|
867
|
+
// filtered `allRoutes` vs `formsRules` to use only external routes exposed
|
|
868
|
+
// by `"query"` validation
|
|
869
|
+
var _clientRoutingAssets = buildClientRoutingAssets(serverOpt.allRoutes);
|
|
870
|
+
serverOpt.clientRoutingAssets = _clientRoutingAssets;
|
|
871
|
+
self._clientRoutingAssets = {
|
|
872
|
+
full : JSON.stringify(_clientRoutingAssets.full),
|
|
873
|
+
stripped : JSON.stringify(_clientRoutingAssets.stripped)
|
|
874
|
+
};
|
|
875
|
+
// Slice 3 (#SPA1) — weak per-variant ETags, computed once: the maps are
|
|
876
|
+
// boot-static, and the serve paths answer If-None-Match with a 304 under
|
|
877
|
+
// `no-cache` (revalidate) semantics. This closes the staleness window the
|
|
878
|
+
// old `max-age=86400` left open — a returning browser could dispatch on a
|
|
879
|
+
// day-old table for up to 24h after a restart. Weak tags (`W/"…"`) so ONE
|
|
880
|
+
// tag per variant covers isaac's content-encoded file representations too.
|
|
881
|
+
self._clientRoutingAssets.fullEtag =
|
|
882
|
+
'W/"' + crypto.createHash('sha1').update(self._clientRoutingAssets.full).digest('hex').substr(0, 16) + '"';
|
|
883
|
+
self._clientRoutingAssets.strippedEtag =
|
|
884
|
+
'W/"' + crypto.createHash('sha1').update(self._clientRoutingAssets.stripped).digest('hex').substr(0, 16) + '"';
|
|
885
|
+
serverOpt.clientRoutingAssets.fullEtag = self._clientRoutingAssets.fullEtag;
|
|
886
|
+
serverOpt.clientRoutingAssets.strippedEtag = self._clientRoutingAssets.strippedEtag;
|
|
887
|
+
|
|
740
888
|
Engine = require('./server.' + ((typeof (serverOpt.engine) != 'undefined' && serverOpt.engine != '') ? serverOpt.engine : 'express'));
|
|
741
889
|
var engine = new Engine(serverOpt);
|
|
742
890
|
|
|
@@ -1355,7 +1503,7 @@ function Server(options) {
|
|
|
1355
1503
|
throw new Error('[ SERVER ] `settings.json > audit.chain.secret` must be a non-empty string.');
|
|
1356
1504
|
}
|
|
1357
1505
|
if ( typeof(_auditSettings.chain.secret) == 'string' && /\$\{/.test(_auditSettings.chain.secret) ) {
|
|
1358
|
-
throw new Error('[ SERVER ] `settings.json > audit.chain.secret` carries an unresolved `${...}` placeholder — the
|
|
1506
|
+
throw new Error('[ SERVER ] `settings.json > audit.chain.secret` carries an unresolved `${...}` placeholder — only the anchored `${secret:KEY}` form is substituted at config load; bare `${VAR}` and mixed strings pass through as literals. Use `${secret:KEY}` with the variable exported in the environment the bundle starts from, or set GINA_AUDIT_SECRET.');
|
|
1359
1507
|
}
|
|
1360
1508
|
}
|
|
1361
1509
|
var _auditChainEnabled = !!( _auditSettings.chain && _auditSettings.chain.enabled === true );
|
|
@@ -1899,6 +2047,17 @@ function Server(options) {
|
|
|
1899
2047
|
if ( typeof(instance._cacheIsEnabled) == 'undefined' ) {
|
|
1900
2048
|
instance._cacheIsEnabled = self.conf[self.appName][self.env].server.cache.enable;
|
|
1901
2049
|
}
|
|
2050
|
+
// #B238 — the Cache-Status identifier, resolved ONCE from the post-fold
|
|
2051
|
+
// server.cache (`name` when valid, else `gina-cache`) and stamped on the
|
|
2052
|
+
// engine instance both engines read (isaac: `server._cacheName`; the
|
|
2053
|
+
// engine-agnostic hit/miss mints: `self.instance._cacheName`). One
|
|
2054
|
+
// resolution, three readers — the identifier cannot disagree across
|
|
2055
|
+
// engines or hit/miss outcomes. Unconditional beside the sibling
|
|
2056
|
+
// scalars above, so the mint sites read it unguarded (same trust as
|
|
2057
|
+
// `_cacheIsEnabled`).
|
|
2058
|
+
if ( typeof(instance._cacheName) == 'undefined' ) {
|
|
2059
|
+
instance._cacheName = lib.RenderCache.resolveCacheName(self.conf[self.appName][self.env].server.cache);
|
|
2060
|
+
}
|
|
1902
2061
|
|
|
1903
2062
|
// #B115 — publish the engine so the form-validator's server-side `query`
|
|
1904
2063
|
// rule can hand its hand-built controller the LIVE instance (one engine
|
|
@@ -3983,6 +4142,16 @@ function Server(options) {
|
|
|
3983
4142
|
if ( typeof(request.headers['x-gina-popin-name']) != 'undefined' ) {
|
|
3984
4143
|
ginaHeaders.popin.name = request.headers['x-gina-popin-name'];
|
|
3985
4144
|
}
|
|
4145
|
+
// #SPA1 — content-negotiation signal. `X-Gina-Navigate: fragment` asks a
|
|
4146
|
+
// NEGOTIABLE route (routing.json `negotiate: true`) for its layoutless body
|
|
4147
|
+
// instead of the full page. Parked here with the other gina headers rather
|
|
4148
|
+
// than overloading `X-Requested-With`, which popin / link / validator all
|
|
4149
|
+
// already send and which the render + error paths already fork on.
|
|
4150
|
+
// Unknown values are deliberately NOT rejected — they fall through to the
|
|
4151
|
+
// full page, so extending the vocabulary later is backward-compatible.
|
|
4152
|
+
if ( typeof(request.headers['x-gina-navigate']) != 'undefined' ) {
|
|
4153
|
+
ginaHeaders.navigate = String(request.headers['x-gina-navigate']).trim().toLowerCase();
|
|
4154
|
+
}
|
|
3986
4155
|
if ( typeof(request.headers['x-gina-form-rule']) != 'undefined' ) {
|
|
3987
4156
|
var rule = request.headers['x-gina-form-rule'].split(/\@/);
|
|
3988
4157
|
ginaHeaders.form.rule = rule[0];
|
|
@@ -4030,6 +4199,58 @@ function Server(options) {
|
|
|
4030
4199
|
return response.end(JSON.stringify({ status: 'healthy', timestamp: new Date().toISOString() }));
|
|
4031
4200
|
}
|
|
4032
4201
|
|
|
4202
|
+
// ── /_gina/assets/routing.json — client routing map (always-on, public) ─────
|
|
4203
|
+
// (#B212) Engine-agnostic mirror of the Isaac fast-path (server.isaac.js
|
|
4204
|
+
// ~:2079). Under isaac the fast-path answers first with the precompressed
|
|
4205
|
+
// file variants, so this handler is what serves the map under any other
|
|
4206
|
+
// engine (express) — where the asset previously fell through to routing
|
|
4207
|
+
// and 404'd, and the client (no response.ok check — #B213) then installed
|
|
4208
|
+
// the 404 JSON body AS its routing table. Serves the maps built once at
|
|
4209
|
+
// init by buildClientRoutingAssets(). GET only + the isaac header set;
|
|
4210
|
+
// X-Powered-By / X-Request-Id are already emitted above for every
|
|
4211
|
+
// onInstance response, so they are inherited, not re-set.
|
|
4212
|
+
if (
|
|
4213
|
+
request.method.toUpperCase() === 'GET'
|
|
4214
|
+
&& /\/_gina\/assets\/routing\.json$/i.test(request.url)
|
|
4215
|
+
&& self._clientRoutingAssets
|
|
4216
|
+
) {
|
|
4217
|
+
// #B65-twin — per-request proxied classification (keep in sync with
|
|
4218
|
+
// the core/server.isaac.js #B65 block + the core/router.js #B67 twin):
|
|
4219
|
+
// proxied iff the inbound Host is port-less (heuristic, disabled by
|
|
4220
|
+
// process.gina._proxyRequireForwarded — #B152) OR an explicit
|
|
4221
|
+
// X-Forwarded-Host is present. Computed inline because the #B65 stamp
|
|
4222
|
+
// (request._ginaIsProxyHost) is isaac-request-path-only and the #B67
|
|
4223
|
+
// twin runs at routing time — after this handler.
|
|
4224
|
+
var _croutHost = request.headers.host || request.headers[':authority'];
|
|
4225
|
+
var _croutProxied = (
|
|
4226
|
+
( _croutHost && !/\:[0-9]+$/.test(_croutHost)
|
|
4227
|
+
&& process.gina._proxyRequireForwarded !== true )
|
|
4228
|
+
|| request.headers['x-forwarded-host']
|
|
4229
|
+
) ? true : false;
|
|
4230
|
+
var _croutEtag = ( _croutProxied === true )
|
|
4231
|
+
? self._clientRoutingAssets.strippedEtag
|
|
4232
|
+
: self._clientRoutingAssets.fullEtag;
|
|
4233
|
+
response.setHeader('content-type', 'application/json; charset=utf8');
|
|
4234
|
+
response.setHeader('vary', 'Origin');
|
|
4235
|
+
// #B66 — a shared cache must not cross-serve the stripped (proxied) and
|
|
4236
|
+
// full (raw) variants under the same URL; mark the proxied variant
|
|
4237
|
+
// private. Slice 3 (#SPA1): `no-cache` = revalidate-before-use — the
|
|
4238
|
+
// per-variant weak ETag turns each page boot into one conditional GET
|
|
4239
|
+
// (usually a 304), so a restart's new route table reaches returning
|
|
4240
|
+
// browsers immediately instead of after a 24h max-age window.
|
|
4241
|
+
response.setHeader('cache-control', ( _croutProxied === true ) ? 'private, no-cache' : 'public, no-cache');
|
|
4242
|
+
response.setHeader('x-content-type-options', 'nosniff');
|
|
4243
|
+
response.setHeader('x-frame-options', 'DENY');
|
|
4244
|
+
response.setHeader('x-xss-protection', '1; mode=block');
|
|
4245
|
+
response.setHeader('etag', _croutEtag);
|
|
4246
|
+
if ( request.headers['if-none-match'] === _croutEtag ) {
|
|
4247
|
+
response.statusCode = 304;
|
|
4248
|
+
return response.end();
|
|
4249
|
+
}
|
|
4250
|
+
response.statusCode = 200;
|
|
4251
|
+
return response.end( ( _croutProxied === true ) ? self._clientRoutingAssets.stripped : self._clientRoutingAssets.full );
|
|
4252
|
+
}
|
|
4253
|
+
|
|
4033
4254
|
// ── /_gina/metrics — Prometheus exposition (always-on, opt-in via app.json) ──
|
|
4034
4255
|
// (#OBS1 slice 2) Engine-agnostic mirror of the Isaac handler. Method gate
|
|
4035
4256
|
// is GET only; IP allowlist comes from app.json `metrics.allowFrom` (default
|
|
@@ -6263,7 +6484,9 @@ function Server(options) {
|
|
|
6263
6484
|
}
|
|
6264
6485
|
// #RC5 — ONE header string, set AND logged from the same var (the prior dual
|
|
6265
6486
|
// construction at setHeader + console.info was a drift hazard).
|
|
6266
|
-
|
|
6487
|
+
// #B238 — identifier from the boot-resolved stamp (was the literal
|
|
6488
|
+
// 'gina-cache'); default unchanged when server.cache.name is unset.
|
|
6489
|
+
var _cs = self.instance._cacheName + '; hit'
|
|
6267
6490
|
+ (_remaining !== null ? '; ttl=' + _remaining : '')
|
|
6268
6491
|
+ (source ? '; detail=' + source : '');
|
|
6269
6492
|
res.setHeader('Cache-Status', _cs);
|
|
@@ -6305,6 +6528,12 @@ function Server(options) {
|
|
|
6305
6528
|
var _method = ( /http\/2/.test(self.conf[self.appName][self.env].server.protocol) ) ? req.headers[':method'] : req.method;
|
|
6306
6529
|
if ( !/^get$/i.test(_method || req.method || '') ) { return false; }
|
|
6307
6530
|
if ( !req.routing || !req.routing.cache ) { return false; }
|
|
6531
|
+
// #SPA1 — never SERVE a negotiable route from the output cache. The key has no
|
|
6532
|
+
// shape dimension and this serve point runs before the shape is resolved, so a
|
|
6533
|
+
// hit could replay a fragment to a page request. The writer refuses too
|
|
6534
|
+
// (render-swig writeCache), making this defence-in-depth rather than the only
|
|
6535
|
+
// guard — but it is stated at BOTH ends so the invariant is local to each site.
|
|
6536
|
+
if ( req.routing.negotiate === true ) { return false; }
|
|
6308
6537
|
if ( String(self.instance._cacheIsEnabled).toLowerCase() !== 'true' ) { return false; }
|
|
6309
6538
|
// No L2 store wired (memory/fs bundle, or boot degraded) → nothing to warm here;
|
|
6310
6539
|
// isaac already served any L1 hit, and express memory/fs read is a later slice.
|
|
@@ -6367,7 +6596,8 @@ function Server(options) {
|
|
|
6367
6596
|
// deliberately NOT claimed — whether the render's writeCache stores is not
|
|
6368
6597
|
// knowable here, and headers are flushed before it settles.
|
|
6369
6598
|
if ( !res.headersSent ) {
|
|
6370
|
-
|
|
6599
|
+
// #B238 — identifier from the boot-resolved stamp (was the literal 'gina-cache').
|
|
6600
|
+
res.setHeader('Cache-Status', self.instance._cacheName + '; fwd=uri-miss');
|
|
6371
6601
|
}
|
|
6372
6602
|
return false; // miss → render normally
|
|
6373
6603
|
}
|
|
@@ -6685,6 +6915,13 @@ function Server(options) {
|
|
|
6685
6915
|
// req.routing.param.culture as the highest-priority
|
|
6686
6916
|
// culture source (URL `/fr/...` → req.culture='fr').
|
|
6687
6917
|
culturePrefix : routing[name].culturePrefix || false,
|
|
6918
|
+
// #SPA1 — per-route content-negotiation capability. Declares that
|
|
6919
|
+
// this route may answer in more than one shape, so the render cache
|
|
6920
|
+
// (whose key carries no shape dimension) must not serve or store it.
|
|
6921
|
+
// Read at the request-pipeline boundary, BEFORE the cache serve
|
|
6922
|
+
// points — which is precisely why the capability is route-declared
|
|
6923
|
+
// rather than derived inside render().
|
|
6924
|
+
negotiate : routing[name].negotiate || false,
|
|
6688
6925
|
// We clone because we are going to modify it while comparing urls
|
|
6689
6926
|
param : JSON.clone(routing[name].param),
|
|
6690
6927
|
// We clone because we are going to modify it while routing (.splice(..))
|
|
@@ -32,13 +32,15 @@ var ${bundle} = require('gina');
|
|
|
32
32
|
// // var session = ${bundle}.plugins.Session(expressSession);
|
|
33
33
|
// //
|
|
34
34
|
// // Redis — multi-pod / K8s (requires: npm install ioredis)
|
|
35
|
-
// // Configure connectors.json: { "
|
|
36
|
-
// // expressSession.name = 'myRedis';
|
|
35
|
+
// // Configure connectors.json: { "session": { "connector": "redis", "host": "...", "port": 6379, "ttl": 86400 } }
|
|
37
36
|
// //
|
|
38
37
|
// // SQLite — dev / staging / single-pod (requires: Node >= 22.5.0, zero npm deps)
|
|
39
|
-
// // Configure connectors.json: { "
|
|
40
|
-
// // expressSession.name = 'myDb';
|
|
38
|
+
// // Configure connectors.json: { "session": { "connector": "sqlite", "database": ":memory:", "ttl": 86400 } }
|
|
41
39
|
// //
|
|
40
|
+
// // The store factory keys on express-session's function name — the literal
|
|
41
|
+
// // "session", which is read-only and cannot be re-pointed — so the
|
|
42
|
+
// // connectors.json entry MUST be named "session"; its `connector` field
|
|
43
|
+
// // selects the backend (#B206).
|
|
42
44
|
// // var StoreClass = new SessionStore(expressSession); // returns connector-specific Store class
|
|
43
45
|
// //
|
|
44
46
|
// // Recommended: keep the session secret out of tracked source via the
|
|
@@ -144,6 +144,16 @@
|
|
|
144
144
|
// refuses boot (a non-expiring L2 key is orphaned on a release-namespace change):
|
|
145
145
|
// "type": "redis",
|
|
146
146
|
// "store": "cacheRedis" // connectors.json: { "cacheRedis": { "connector": "redis", "host": "127.0.0.1", "port": 6379 } }
|
|
147
|
+
// #B238 — optional `name`: the RFC 9211 Cache-Status identifier this bundle's
|
|
148
|
+
// render/output cache reports on the wire (default "gina-cache"). A letter, then
|
|
149
|
+
// up to 63 of [A-Za-z0-9._-] (a conservative RFC 8941 token subset); an invalid
|
|
150
|
+
// value is ignored with a boot warn. When `server.hidePoweredBy` is true and the
|
|
151
|
+
// cache is enabled, leaving `name` unset logs a boot warn (the wire still names
|
|
152
|
+
// the framework) — set any token (e.g. "cache") to close the disclosure, or
|
|
153
|
+
// explicitly "gina-cache" to keep the default wire and silence the warn.
|
|
154
|
+
// Deliberately NOT declared here: a template-declared default would read as
|
|
155
|
+
// operator-set and mute that warn framework-wide.
|
|
156
|
+
// "name": "cache",
|
|
147
157
|
"type": "memory"
|
|
148
158
|
},
|
|
149
159
|
// #CSRF1 — session-cookie defaults applied by gina.plugins.Session(expressSession).
|
|
@@ -116,10 +116,18 @@ Every GET response carries a `Cache-Status` header indicating cache outcome:
|
|
|
116
116
|
|
|
117
117
|
| Value | Meaning |
|
|
118
118
|
|-------|---------|
|
|
119
|
-
| `gina-cache; uri-miss` | No cached entry for this URL |
|
|
119
|
+
| `gina-cache; fwd=uri-miss` | No cached entry for this URL (RFC 9211 §2.2 form) |
|
|
120
120
|
| `gina-cache; hit; ttl=NNN` | Hit — `NNN` seconds remaining (absolute TTL) |
|
|
121
121
|
| `gina-cache; hit; ttl=NNN; max-age=MMM` | Hit — `NNN` seconds in current idle window, `MMM` seconds until absolute ceiling |
|
|
122
122
|
|
|
123
|
+
`gina-cache` is the default identifier — `server.cache.name` (settings.json
|
|
124
|
+
`cache` block) replaces it with an operator-chosen RFC 8941 token (a letter,
|
|
125
|
+
then up to 63 of `[A-Za-z0-9._-]`); every parameter after it is unchanged.
|
|
126
|
+
When `server.hidePoweredBy` is true and the cache is enabled, leaving `name`
|
|
127
|
+
unset logs a boot warn (the wire still names the framework); set any token
|
|
128
|
+
(e.g. `cache`) to close the disclosure, or explicitly `gina-cache` to keep
|
|
129
|
+
the default wire and silence the warn.
|
|
130
|
+
|
|
123
131
|
---
|
|
124
132
|
|
|
125
133
|
### Storage backends
|
|
@@ -23,10 +23,10 @@ var CmdHelper = require('./../helper');
|
|
|
23
23
|
* `<project>/logs/audit-<bundle>-<env>.jsonl`).
|
|
24
24
|
*
|
|
25
25
|
* Key resolution: `settings.json > audit.chain.secret` (a `${secret:VAR}`
|
|
26
|
-
* placeholder is resolved
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
* through the
|
|
26
|
+
* placeholder is resolved here because config-load substitution does not run
|
|
27
|
+
* offline — read from the framework env reader first, then `process.env[VAR]`,
|
|
28
|
+
* so GINA_-prefixed names swept out of process.env by the CLI still resolve,
|
|
29
|
+
* #B156), then `GINA_AUDIT_SECRET` through the same two-tier read.
|
|
30
30
|
*
|
|
31
31
|
* Exit codes: `0` chain intact (warnings, if any, are printed — read them) ·
|
|
32
32
|
* `1` chain BROKEN · `2` usage/config error (no trail file, no key, bad --env).
|
|
@@ -191,9 +191,11 @@ function Verify(opt, cmd) {
|
|
|
191
191
|
|
|
192
192
|
/**
|
|
193
193
|
* Resolves the signing key: `audit.chain.secret` (literal, or a
|
|
194
|
-
* `${secret:VAR}` placeholder
|
|
195
|
-
* `
|
|
196
|
-
* `process.env
|
|
194
|
+
* `${secret:VAR}` placeholder read from the framework env reader first,
|
|
195
|
+
* then `process.env[VAR]` — the CLI sweep moves GINA_*-prefixed keys out
|
|
196
|
+
* of `process.env`, so the two-tier read is what lets a shell-exported
|
|
197
|
+
* variable resolve in this offline process, #B156), then
|
|
198
|
+
* `GINA_AUDIT_SECRET` through the same two-tier read.
|
|
197
199
|
*
|
|
198
200
|
* @inner
|
|
199
201
|
* @private
|
|
@@ -212,9 +214,9 @@ function Verify(opt, cmd) {
|
|
|
212
214
|
if ( secret ) {
|
|
213
215
|
var m = secret.match(/^\$\{secret:([^}]+)\}$/);
|
|
214
216
|
if ( m ) {
|
|
215
|
-
secret = process.env[m[1]] || null;
|
|
217
|
+
secret = ( typeof(getEnvVar) == 'function' && getEnvVar(m[1]) ) || process.env[m[1]] || null;
|
|
216
218
|
if ( !secret ) {
|
|
217
|
-
console.error('`audit.chain.secret` names `${secret:'+ m[1] +'}` but `'+ m[1] +'` is not set in this
|
|
219
|
+
console.error('`audit.chain.secret` names `${secret:'+ m[1] +'}` but `'+ m[1] +'` is not set in this environment. Export it before running the command, or set GINA_AUDIT_SECRET.');
|
|
218
220
|
process.exit(2);
|
|
219
221
|
return false;
|
|
220
222
|
}
|
|
@@ -155,10 +155,15 @@ function MCPStart(opt, cmd) {
|
|
|
155
155
|
// Loud, one-time notice about the tools that look session-scoped.
|
|
156
156
|
warnSessionScopedTools(mcpDoc.tools);
|
|
157
157
|
|
|
158
|
-
// Framework package version — the user-facing server version.
|
|
158
|
+
// Framework package version — the user-facing server version. Read
|
|
159
|
+
// GINA_DIR through the framework env reader first: the CLI sweep
|
|
160
|
+
// empties process.env of GINA_* keys, so the direct read alone made
|
|
161
|
+
// every CLI-launched server degrade to the '0.0.0' catch below.
|
|
159
162
|
var packVersion = null;
|
|
160
163
|
try {
|
|
161
|
-
var
|
|
164
|
+
var ginaDir = (typeof getEnvVar === 'function' && getEnvVar('GINA_DIR'))
|
|
165
|
+
|| process.env.GINA_DIR;
|
|
166
|
+
var packPath = _(ginaDir + '/package.json', true);
|
|
162
167
|
packVersion = require(packPath).version;
|
|
163
168
|
} catch (pkgErr) {
|
|
164
169
|
packVersion = '0.0.0';
|
|
@@ -364,15 +369,16 @@ function MCPStart(opt, cmd) {
|
|
|
364
369
|
* Resolves the HTTP bind host. Precedence:
|
|
365
370
|
* 1. `--http-host=<host>` CLI flag
|
|
366
371
|
* 2. `mcp.json > server > httpHost`
|
|
367
|
-
* 3. `
|
|
368
|
-
*
|
|
369
|
-
*
|
|
370
|
-
*
|
|
371
|
-
*
|
|
372
|
-
*
|
|
373
|
-
* the default bind OFF loopback
|
|
374
|
-
*
|
|
375
|
-
*
|
|
372
|
+
* 3. `GINA_BIND_HOST` — the framework env reader first, then the raw
|
|
373
|
+
* process environment (for embedders that never ran the CLI sweep).
|
|
374
|
+
* This is the control plane's dedicated BIND key, same bind/connect
|
|
375
|
+
* separation as `bin/cli`. The former `GINA_HOST_V4` tier was
|
|
376
|
+
* removed (#B157): it was inert under the CLI (the sweep empties
|
|
377
|
+
* the process environment of GINA_* keys), and reviving it would
|
|
378
|
+
* have moved the default bind OFF loopback — `host_v4` is the
|
|
379
|
+
* address clients CONNECT to (commonly a LAN address), never a
|
|
380
|
+
* bind address.
|
|
381
|
+
* 4. `'127.0.0.1'`
|
|
376
382
|
*
|
|
377
383
|
* @private
|
|
378
384
|
* @param {object} mcpDoc
|
|
@@ -384,7 +390,10 @@ function MCPStart(opt, cmd) {
|
|
|
384
390
|
if (mcpDoc && mcpDoc.server && typeof(mcpDoc.server.httpHost) === 'string' && mcpDoc.server.httpHost) {
|
|
385
391
|
return mcpDoc.server.httpHost;
|
|
386
392
|
}
|
|
387
|
-
|
|
393
|
+
// #B157 — bind_host, never host_v4: the string guard below also keeps
|
|
394
|
+
// a sweep-coerced boolean from ever reaching the bind.
|
|
395
|
+
var env = (typeof getEnvVar === 'function' && getEnvVar('GINA_BIND_HOST'))
|
|
396
|
+
|| process.env.GINA_BIND_HOST;
|
|
388
397
|
if (typeof(env) === 'string' && env) return env;
|
|
389
398
|
return '127.0.0.1';
|
|
390
399
|
};
|