gina 0.7.1 → 0.7.2
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 +22 -0
- package/README.md +39 -44
- package/ROADMAP.md +3 -0
- package/framework/v0.7.2/VERSION +1 -0
- package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +351 -24
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +726 -0
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/session-store.js +24 -6
- package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.js +90 -9
- package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-nunjucks.js +12 -5
- package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-xml.js +10 -2
- package/framework/{v0.7.1 → v0.7.2}/core/gna.js +15 -1
- package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/src/main.js +301 -12
- package/framework/{v0.7.1 → v0.7.2}/core/server.isaac.js +95 -13
- package/framework/{v0.7.1 → v0.7.2}/core/server.js +232 -7
- package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/index.js +2 -1
- package/framework/{v0.7.1 → v0.7.2}/core/template/conf/templates.json +1 -0
- package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/name.js +1 -1
- package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/inc/name.js +1 -1
- package/framework/v0.7.2/lib/error-ref/package.json +7 -0
- package/framework/v0.7.2/lib/error-ref/src/main.js +70 -0
- package/framework/{v0.7.1 → v0.7.2}/lib/index.js +12 -0
- package/framework/v0.7.2/lib/lane/package.json +7 -0
- package/framework/v0.7.2/lib/lane/src/main.js +1440 -0
- package/framework/v0.7.2/lib/sri/src/main.js +518 -0
- package/framework/{v0.7.1 → v0.7.2}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +11 -9
- package/package.json +6 -6
- package/schema/routing.json +7 -1
- package/types/index.d.ts +28 -0
- package/framework/v0.7.1/VERSION +0 -1
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -720
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.7.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.7.1/lib/sri/src/main.js +0 -237
- /package/framework/{v0.7.1 → v0.7.2}/AUTHORS +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/html/static.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/config.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/config.requirements-anchor.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/kv-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/settle-once.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/connectors/sqlite/lib/kv-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/content.encoding +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/inline-script.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/currency.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/locales/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/mime.types +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/entity.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/model/template/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/router.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/server.express.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/server.isaac.rapid-reset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/server.route-candidates.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/status.codes +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/_gitignore +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/env.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/console.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/context.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/path.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/prototypes.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/task.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/helpers/text.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/admin/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/async/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/async/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/audit/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/audit-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/boot-lines.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/inc/name.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/inc/ps-titles.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/inc/name.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/conf-view/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/conf-view/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/config.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cron/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cron/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/duration/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/duration/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/generator/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/i18n/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/idempotency/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/idempotency/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/image-build/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/instrument/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/job/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/job/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/job-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/kv/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/kv/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/kv-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/logger/src/redact.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/maintenance/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/math/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/merge/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/merge/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/message-validator/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/message-validator/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/metrics/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/model.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/money/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/money/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/multipart/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/multipart/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/priority/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/priority/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/proc.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/push/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/push/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/rate-limit/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/rate-limit/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/build.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/exec.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/declaration.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/secrets/src/sources.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/security-headers-emitter/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/security-headers-emitter/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/session-lifetime/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/session-lifetime/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/session-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/shell.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/sri/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/state.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/storage-store.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/url/README.md +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/url/index.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/url/routing.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/uuid/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/validator.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/watcher/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.7.1 → v0.7.2}/lib/ws-session/src/main.js +0 -0
|
@@ -1412,6 +1412,18 @@ function Server(options) {
|
|
|
1412
1412
|
'W/"' + crypto.createHash('sha1').update(self._clientRoutingAssets.stripped).digest('hex').substr(0, 16) + '"';
|
|
1413
1413
|
serverOpt.clientRoutingAssets.fullEtag = self._clientRoutingAssets.fullEtag;
|
|
1414
1414
|
serverOpt.clientRoutingAssets.strippedEtag = self._clientRoutingAssets.strippedEtag;
|
|
1415
|
+
// #P48 — per-variant routing-table tokens, the head of the same sha1 as
|
|
1416
|
+
// the ETags: a routing change mints a new one, a restart with the same
|
|
1417
|
+
// routes keeps it. The page names its variant's token on gina's own
|
|
1418
|
+
// script tag; both engines' handlers answer `immutable` only to the
|
|
1419
|
+
// token of the variant they serve (a mis-classified request fails the
|
|
1420
|
+
// check and revalidates).
|
|
1421
|
+
self._clientRoutingAssets.fullVersion =
|
|
1422
|
+
crypto.createHash('sha1').update(self._clientRoutingAssets.full).digest('hex').substring(0, 10);
|
|
1423
|
+
self._clientRoutingAssets.strippedVersion =
|
|
1424
|
+
crypto.createHash('sha1').update(self._clientRoutingAssets.stripped).digest('hex').substring(0, 10);
|
|
1425
|
+
serverOpt.clientRoutingAssets.fullVersion = self._clientRoutingAssets.fullVersion;
|
|
1426
|
+
serverOpt.clientRoutingAssets.strippedVersion = self._clientRoutingAssets.strippedVersion;
|
|
1415
1427
|
|
|
1416
1428
|
Engine = require('./server.' + ((typeof (serverOpt.engine) != 'undefined' && serverOpt.engine != '') ? serverOpt.engine : 'express'));
|
|
1417
1429
|
var engine = new Engine(serverOpt);
|
|
@@ -1615,6 +1627,27 @@ function Server(options) {
|
|
|
1615
1627
|
console.debug('[ BUNDLE ][ server ][ init ] Registered '+ _msvCount +' route message validator(s) for [ '+ self.appName +' ]');
|
|
1616
1628
|
}
|
|
1617
1629
|
|
|
1630
|
+
// #P49 — register every routing.json-declared fast-lane route at BOOT.
|
|
1631
|
+
// A route opts into controller-free dispatch with `param.lane`, naming a
|
|
1632
|
+
// `<bundle>/lanes/<name>.js` module whose `param.control` export answers it
|
|
1633
|
+
// (`module.exports.list = function (ctx) { ... };`). lib/lane lints each
|
|
1634
|
+
// route and requires its module HERE, so the request path is an O(1)
|
|
1635
|
+
// registry read, and a route the lane cannot serve faithfully (route
|
|
1636
|
+
// middleware, `cache`, or a gate the lane does not run yet) refuses to
|
|
1637
|
+
// BOOT instead of silently losing that behaviour (the #B57 rule, as for the
|
|
1638
|
+
// registrars above). A lane module edit hot-reloads in dev mode (core/gna.js
|
|
1639
|
+
// watches the lane directories); a routing change needs a bundle restart.
|
|
1640
|
+
var _laneConf = self.conf[self.appName][self.env];
|
|
1641
|
+
var _laneCount = lib.lane.registerRoutes(serverOpt.routing || {}, {
|
|
1642
|
+
bundle : self.appName,
|
|
1643
|
+
bundlesPath : _laneConf.bundlesPath,
|
|
1644
|
+
settings : ( _laneConf.content ) ? _laneConf.content.settings : null,
|
|
1645
|
+
server : _laneConf.server
|
|
1646
|
+
});
|
|
1647
|
+
if ( _laneCount > 0 ) {
|
|
1648
|
+
console.debug('[ BUNDLE ][ server ][ init ] Registered '+ _laneCount +' lane route(s) for [ '+ self.appName +' ]');
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1618
1651
|
// #COMPLY1 — lint every declared authorization flag and resolve the login
|
|
1619
1652
|
// bounce target at BOOT. A route gates its access with `param.requireAuth`;
|
|
1620
1653
|
// `lib/authz-gate` enforces it at both core/router.js dispatch sites.
|
|
@@ -2827,6 +2860,17 @@ function Server(options) {
|
|
|
2827
2860
|
instance._cacheName = lib.RenderCache.resolveCacheName(self.conf[self.appName][self.env].server.cache);
|
|
2828
2861
|
}
|
|
2829
2862
|
|
|
2863
|
+
// #P48 — the routing table's per-variant tokens (built with the maps in
|
|
2864
|
+
// init, before the engine), stamped where the controller reads them to
|
|
2865
|
+
// render `data-gina-routing-v` on gina's own script tag. Absent maps
|
|
2866
|
+
// leave it unset: the page then fetches the table unversioned.
|
|
2867
|
+
if ( typeof(instance._routingVersion) == 'undefined' && self._clientRoutingAssets ) {
|
|
2868
|
+
instance._routingVersion = {
|
|
2869
|
+
full : self._clientRoutingAssets.fullVersion,
|
|
2870
|
+
stripped : self._clientRoutingAssets.strippedVersion
|
|
2871
|
+
};
|
|
2872
|
+
}
|
|
2873
|
+
|
|
2830
2874
|
// #MS5 — per-authority query circuit-breaker policy, resolved ONCE
|
|
2831
2875
|
// from the post-fold `server.query.circuitBreaker` and stamped where
|
|
2832
2876
|
// `controller.query()` reads it (mirrors the `_cache*` scalars above;
|
|
@@ -3744,6 +3788,67 @@ function Server(options) {
|
|
|
3744
3788
|
}
|
|
3745
3789
|
}
|
|
3746
3790
|
|
|
3791
|
+
/**
|
|
3792
|
+
* Appends field names to a response's `Vary` header (RFC 9110 § 12.5.5).
|
|
3793
|
+
* `Vary` is a list, so a value already set (by a middleware, by the
|
|
3794
|
+
* configured `server.response.header`, or by the caller) is kept: a name
|
|
3795
|
+
* already listed, in any case, is not added again, and nothing is added
|
|
3796
|
+
* after a `*`, which already varies on everything. Takes one name, a
|
|
3797
|
+
* comma-separated list, or an array of either, so a value read back with
|
|
3798
|
+
* `getHeader('vary')` can be passed straight in to restore it. Does nothing
|
|
3799
|
+
* once the headers are sent. Keep in sync with the twin in
|
|
3800
|
+
* core/server.isaac.js (#B743).
|
|
3801
|
+
*
|
|
3802
|
+
* @inner
|
|
3803
|
+
* @private
|
|
3804
|
+
* @param {object} response - Server response object (HTTP/1.x, or the HTTP/2 compatibility API)
|
|
3805
|
+
* @param {string|string[]|null|undefined} names - Field name(s) to add; an empty value adds nothing
|
|
3806
|
+
* @returns {void}
|
|
3807
|
+
*
|
|
3808
|
+
* @example
|
|
3809
|
+
* // Vary: Origin → Vary: Origin, Accept-Encoding
|
|
3810
|
+
* appendVary(response, 'Accept-Encoding');
|
|
3811
|
+
*
|
|
3812
|
+
* @example
|
|
3813
|
+
* // restore what a later setHeader('vary', …) replaced
|
|
3814
|
+
* var before = response.getHeader('vary'); // 'Origin, Accept-Encoding'
|
|
3815
|
+
* response.setHeader('vary', 'Origin');
|
|
3816
|
+
* appendVary(response, before); // Vary: Origin, Accept-Encoding
|
|
3817
|
+
*/
|
|
3818
|
+
var appendVary = function(response, names) {
|
|
3819
|
+
if (
|
|
3820
|
+
!response
|
|
3821
|
+
|| typeof(response.getHeader) != 'function'
|
|
3822
|
+
|| typeof(response.setHeader) != 'function'
|
|
3823
|
+
|| response.headersSent
|
|
3824
|
+
) {
|
|
3825
|
+
return;
|
|
3826
|
+
}
|
|
3827
|
+
var list = ( Array.isArray(names) ) ? names.join(',') : names;
|
|
3828
|
+
if ( typeof(list) == 'undefined' || list === null || String(list).trim() === '' ) {
|
|
3829
|
+
return;
|
|
3830
|
+
}
|
|
3831
|
+
var current = response.getHeader('vary');
|
|
3832
|
+
if ( Array.isArray(current) ) {
|
|
3833
|
+
current = current.join(', ');
|
|
3834
|
+
}
|
|
3835
|
+
current = ( typeof(current) == 'undefined' || current === null ) ? '' : String(current).trim();
|
|
3836
|
+
var present = ( current === '' ) ? [] : current.toLowerCase().split(',').map(function(n) { return n.trim(); });
|
|
3837
|
+
var added = [];
|
|
3838
|
+
String(list).split(',').forEach(function(n) {
|
|
3839
|
+
n = n.trim();
|
|
3840
|
+
if ( n === '' || present.indexOf('*') > -1 || present.indexOf(n.toLowerCase()) > -1 ) {
|
|
3841
|
+
return;
|
|
3842
|
+
}
|
|
3843
|
+
present.push(n.toLowerCase());
|
|
3844
|
+
added.push(n);
|
|
3845
|
+
});
|
|
3846
|
+
if ( added.length == 0 ) {
|
|
3847
|
+
return;
|
|
3848
|
+
}
|
|
3849
|
+
response.setHeader('vary', ( current === '' ) ? added.join(', ') : current +', '+ added.join(', '));
|
|
3850
|
+
}
|
|
3851
|
+
|
|
3747
3852
|
/**
|
|
3748
3853
|
* Returns the negotiated response protocol string (e.g. `'http/1.1'` or
|
|
3749
3854
|
* `'http/2'`). Upgrades to `'http/2'` when the bundle is configured for
|
|
@@ -3824,6 +3929,10 @@ function Server(options) {
|
|
|
3824
3929
|
, preferedEncoding = bundleConf.server.preferedCompressionEncodingOrder
|
|
3825
3930
|
, acceptEncodingArr = (request.headers['accept-encoding']) ? request.headers['accept-encoding'].replace(/\s+/g, '').split(/\,/) : []
|
|
3826
3931
|
, acceptEncoding = null
|
|
3932
|
+
// #P48 — the content token a request asks for (`?v=`) and whether it
|
|
3933
|
+
// names the bytes served (production only, set below)
|
|
3934
|
+
, versionRequested = null
|
|
3935
|
+
, versionMatched = false
|
|
3827
3936
|
;
|
|
3828
3937
|
|
|
3829
3938
|
// catch `statics.json` defined paths
|
|
@@ -3965,14 +4074,53 @@ function Server(options) {
|
|
|
3965
4074
|
var lastModified = stat.mtime.toUTCString();
|
|
3966
4075
|
var etag = '"' + stat.size + '-' + stat.mtime.getTime() + '"';
|
|
3967
4076
|
|
|
4077
|
+
// #B743 — in production, HTTP/1.x serves a precompressed copy
|
|
4078
|
+
// (`.br`, `.gz`) in place of the file when the request accepts its
|
|
4079
|
+
// coding (below), so the response varies on Accept-Encoding; HTTP/2
|
|
4080
|
+
// always sends the file itself. Set before the conditional-GET
|
|
4081
|
+
// decision so the 304 carries the Vary its 200 would (RFC 9110
|
|
4082
|
+
// § 15.4.5): that includes a configured `vary`, which
|
|
4083
|
+
// completeHeaders() sets on the 200 only, read from the same block.
|
|
4084
|
+
// Appended to any Vary already set.
|
|
4085
|
+
if ( !isCacheless && !/http\/2/.test(protocol) ) {
|
|
4086
|
+
var _varyConfHeader = ( bundleConf.server.response && bundleConf.server.response.header ) ? bundleConf.server.response.header : {};
|
|
4087
|
+
for (let h in _varyConfHeader) {
|
|
4088
|
+
if ( /^vary$/i.test(h) ) {
|
|
4089
|
+
appendVary(response, _varyConfHeader[h]);
|
|
4090
|
+
}
|
|
4091
|
+
}
|
|
4092
|
+
appendVary(response, 'Accept-Encoding');
|
|
4093
|
+
}
|
|
4094
|
+
|
|
3968
4095
|
// 304 Not Modified — only in production (dev always re-serves for live reload)
|
|
3969
4096
|
if (!isCacheless) {
|
|
4097
|
+
// #P48 — a gina content token (10 hex: an author's own `v=` is
|
|
4098
|
+
// left alone) is honoured only when it names THIS file's bytes:
|
|
4099
|
+
// `immutable` then, `no-cache` for any other token, today's
|
|
4100
|
+
// headers without one. Read off the original URL (request.url
|
|
4101
|
+
// is query-free here on both engines); over 8 MiB no token
|
|
4102
|
+
// matches (the lib/sri cap).
|
|
4103
|
+
versionRequested = lib.sri.getRequestedVersion(request.originalUrl || request.url);
|
|
4104
|
+
if ( versionRequested !== null && !/^[0-9a-f]{10}$/.test(versionRequested) ) {
|
|
4105
|
+
versionRequested = null;
|
|
4106
|
+
}
|
|
4107
|
+
versionMatched = ( versionRequested !== null && versionRequested === lib.sri.computeVersion(filename) ) ? true : false;
|
|
3970
4108
|
var ifNoneMatch = request.headers['if-none-match'];
|
|
3971
4109
|
var ifModifiedSince = request.headers['if-modified-since'];
|
|
3972
4110
|
var isNotModified = (ifNoneMatch && ifNoneMatch === etag)
|
|
3973
4111
|
|| (!ifNoneMatch && ifModifiedSince && new Date(ifModifiedSince) >= stat.mtime);
|
|
3974
4112
|
if (isNotModified) {
|
|
3975
|
-
if ( /http\/2/.test(protocol) ) {
|
|
4113
|
+
if ( /http\/2/.test(protocol) && versionMatched ) {
|
|
4114
|
+
// #P48 — the Cache-Control its 200 carries (RFC 9110
|
|
4115
|
+
// § 15.4.5): HTTP/2 serves the source file itself. The
|
|
4116
|
+
// other 304s carry no Cache-Control: the HTTP/1.x one is
|
|
4117
|
+
// decided before a precompressed sibling is picked, and a
|
|
4118
|
+
// 304 without it keeps what the browser stored with its
|
|
4119
|
+
// copy. (The HTTP/1.x 304 does carry the Vary set above,
|
|
4120
|
+
// #B743.)
|
|
4121
|
+
stream.respond({ ':status': 304, 'cache-control': 'public, max-age=31536000, immutable' });
|
|
4122
|
+
stream.end();
|
|
4123
|
+
} else if ( /http\/2/.test(protocol) ) {
|
|
3976
4124
|
stream.respond({ ':status': 304 });
|
|
3977
4125
|
stream.end();
|
|
3978
4126
|
} else {
|
|
@@ -4058,6 +4206,11 @@ function Server(options) {
|
|
|
4058
4206
|
// production: ETag + Last-Modified enable conditional GET (304) (#Next)
|
|
4059
4207
|
header['last-modified'] = lastModified;
|
|
4060
4208
|
header['etag'] = etag;
|
|
4209
|
+
// #P48 — a token request: a year when the token names
|
|
4210
|
+
// these bytes, revalidate-before-use otherwise
|
|
4211
|
+
if ( versionRequested !== null ) {
|
|
4212
|
+
header['cache-control'] = ( versionMatched ) ? 'public, max-age=31536000, immutable' : 'no-cache';
|
|
4213
|
+
}
|
|
4061
4214
|
}
|
|
4062
4215
|
|
|
4063
4216
|
header = completeHeaders(header, request, response);
|
|
@@ -4069,7 +4222,14 @@ function Server(options) {
|
|
|
4069
4222
|
}
|
|
4070
4223
|
} else {
|
|
4071
4224
|
|
|
4225
|
+
// #B743 — completeHeaders() re-applies the configured response
|
|
4226
|
+
// headers with setHeader, so a configured `vary` replaces the
|
|
4227
|
+
// Vary set above: restore it (the 304 above carried all of it).
|
|
4228
|
+
var _varyBeforeComplete = response.getHeader('vary');
|
|
4072
4229
|
completeHeaders(null, request, response);
|
|
4230
|
+
if ( !isCacheless ) {
|
|
4231
|
+
appendVary(response, _varyBeforeComplete);
|
|
4232
|
+
}
|
|
4073
4233
|
response.setHeader('content-type', contentType +'; charset='+ bundleConf.encoding);
|
|
4074
4234
|
// if (/\.(woff|woff2)$/i.test(filename) ) {
|
|
4075
4235
|
// response.setHeader("transfer-encoding", 'Identity')
|
|
@@ -4081,9 +4241,13 @@ function Server(options) {
|
|
|
4081
4241
|
|
|
4082
4242
|
// acceptEncodingArr = request.headers['accept-encoding'].replace(/\s+/g, '').split(/\,/);
|
|
4083
4243
|
// acceptEncoding = null;
|
|
4244
|
+
// #B742 — the coding's NAME (`gzip`), kept beside its file
|
|
4245
|
+
// extension (`acceptEncoding`, `.gz`): Content-Encoding takes the name.
|
|
4246
|
+
var acceptEncodingName = null;
|
|
4084
4247
|
for (let e=0, eLen=preferedEncoding.length; e<eLen; e++) {
|
|
4085
4248
|
if ( acceptEncodingArr && acceptEncodingArr.indexOf(preferedEncoding[e]) > -1 ) {
|
|
4086
4249
|
acceptEncoding = bundleConf.server.coreConfiguration.encoding[ preferedEncoding[e] ] ;
|
|
4250
|
+
acceptEncodingName = preferedEncoding[e];
|
|
4087
4251
|
break;
|
|
4088
4252
|
}
|
|
4089
4253
|
}
|
|
@@ -4095,9 +4259,24 @@ function Server(options) {
|
|
|
4095
4259
|
) {
|
|
4096
4260
|
filename += acceptEncoding;
|
|
4097
4261
|
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Encoding
|
|
4098
|
-
response.setHeader('content-encoding', acceptEncoding.replace(/^\./, ''));
|
|
4262
|
+
// was: response.setHeader('content-encoding', acceptEncoding.replace(/^\./, ''));
|
|
4263
|
+
// #B742 — the extension without its dot is not a coding name for
|
|
4264
|
+
// gzip (`gz`), deflate (`zip`), compress (`z`) or zstd (`zst`), and
|
|
4265
|
+
// a browser does not decode such a response.
|
|
4266
|
+
response.setHeader('content-encoding', acceptEncodingName);
|
|
4099
4267
|
// override content length
|
|
4100
|
-
|
|
4268
|
+
var siblingStat = fs.statSync(filename);
|
|
4269
|
+
response.setHeader('content-length', siblingStat.size);
|
|
4270
|
+
// #P48 — the token names the SOURCE's bytes: a sibling
|
|
4271
|
+
// older than its source may be stale, so it is never
|
|
4272
|
+
// served `immutable` (it revalidates instead). Compared in
|
|
4273
|
+
// whole seconds, the resolution of Last-Modified: a
|
|
4274
|
+
// compressor that keeps its source's timestamp truncates
|
|
4275
|
+
// it (brotli to the second, gzip to the microsecond), so a
|
|
4276
|
+
// sibling of the same build lands inside its source's second.
|
|
4277
|
+
if ( versionMatched && Math.floor(siblingStat.mtimeMs / 1000) < Math.floor(stat.mtimeMs / 1000) ) {
|
|
4278
|
+
versionMatched = false;
|
|
4279
|
+
}
|
|
4101
4280
|
}
|
|
4102
4281
|
}
|
|
4103
4282
|
|
|
@@ -4118,6 +4297,10 @@ function Server(options) {
|
|
|
4118
4297
|
|
|
4119
4298
|
} else {
|
|
4120
4299
|
// production: ETag + Last-Modified enable conditional GET (304) (#Next)
|
|
4300
|
+
// #P48 — as the HTTP/2 branch (a stale sibling was downgraded above)
|
|
4301
|
+
if ( versionRequested !== null ) {
|
|
4302
|
+
response.setHeader('cache-control', ( versionMatched ) ? 'public, max-age=31536000, immutable' : 'no-cache');
|
|
4303
|
+
}
|
|
4121
4304
|
response.writeHead(200, {
|
|
4122
4305
|
'last-modified': lastModified,
|
|
4123
4306
|
'etag': etag
|
|
@@ -4546,9 +4729,8 @@ function Server(options) {
|
|
|
4546
4729
|
// onInstance response, so they are inherited, not re-set.
|
|
4547
4730
|
if (
|
|
4548
4731
|
request.method.toUpperCase() === 'GET'
|
|
4549
|
-
// #
|
|
4550
|
-
|
|
4551
|
-
&& /\/_gina\/assets\/routing\.json(?:\?|$)/i.test(request.url)
|
|
4732
|
+
// #P48 — the path alone: a versioned fetch carries `?v=<token>`
|
|
4733
|
+
&& /\/_gina\/assets\/routing\.json$/i.test(request.url.split('?')[0])
|
|
4552
4734
|
&& self._clientRoutingAssets
|
|
4553
4735
|
) {
|
|
4554
4736
|
// #B65-twin — per-request proxied classification (keep in sync with
|
|
@@ -4576,6 +4758,17 @@ function Server(options) {
|
|
|
4576
4758
|
// (usually a 304), so a restart's new route table reaches returning
|
|
4577
4759
|
// browsers immediately instead of after a 24h max-age window.
|
|
4578
4760
|
response.setHeader('cache-control', ( _croutProxied === true ) ? 'private, no-cache' : 'public, no-cache');
|
|
4761
|
+
// #P48 — a request naming the token of the variant it is served (the
|
|
4762
|
+
// page's `data-gina-routing-v`) may keep the table for a year: a
|
|
4763
|
+
// routing change mints a new token, which the next page names. Read
|
|
4764
|
+
// off the original URL (Express may have query-stripped request.url).
|
|
4765
|
+
var _croutVersion = lib.sri.getRequestedVersion(request.originalUrl || request.url);
|
|
4766
|
+
if (
|
|
4767
|
+
_croutVersion
|
|
4768
|
+
&& _croutVersion === ( ( _croutProxied === true ) ? self._clientRoutingAssets.strippedVersion : self._clientRoutingAssets.fullVersion )
|
|
4769
|
+
) {
|
|
4770
|
+
response.setHeader('cache-control', ( ( _croutProxied === true ) ? 'private' : 'public' ) + ', max-age=31536000, immutable');
|
|
4771
|
+
}
|
|
4579
4772
|
response.setHeader('x-content-type-options', 'nosniff');
|
|
4580
4773
|
response.setHeader('x-frame-options', 'DENY');
|
|
4581
4774
|
response.setHeader('x-xss-protection', '1; mode=block');
|
|
@@ -7409,6 +7602,8 @@ function Server(options) {
|
|
|
7409
7602
|
if ( nextMiddleware._nextAction == 'route' ) {
|
|
7410
7603
|
router._server = self.instance;
|
|
7411
7604
|
router.route(nextMiddleware._request, nextMiddleware._response, nextMiddleware._next, nextMiddleware._request.routing);
|
|
7605
|
+
} else if ( nextMiddleware._nextAction == 'lane' ) { // #P49 — a fast-lane route
|
|
7606
|
+
lib.lane.dispatch(nextMiddleware._laneEntry, nextMiddleware._request, nextMiddleware._response, nextMiddleware._next, self.instance, ( self.conf[nextMiddleware._request.routing.bundle] || self.conf[self.appName] )[self.env]);
|
|
7412
7607
|
} else { // handle statics
|
|
7413
7608
|
handleStatics(nextMiddleware._staticProps, nextMiddleware._request, nextMiddleware._response, nextMiddleware._next);
|
|
7414
7609
|
}
|
|
@@ -7575,7 +7770,12 @@ function Server(options) {
|
|
|
7575
7770
|
for (var ph in _pending) { _sh[ph] = _pending[ph]; }
|
|
7576
7771
|
res.stream.respond(_sh);
|
|
7577
7772
|
res.stream.end(_hitContent);
|
|
7578
|
-
|
|
7773
|
+
// #B750 — `headersSent` is a getter-only accessor on the HTTP/2 compat
|
|
7774
|
+
// response and already reports this send (it reads the stream's state).
|
|
7775
|
+
// Assigning it threw a TypeError in this strict-mode file AFTER the body
|
|
7776
|
+
// went out: on every redis L2 warm served over HTTP/2 the access-log line
|
|
7777
|
+
// below was skipped and an unhandled rejection was logged instead.
|
|
7778
|
+
// was: res.headersSent = true;
|
|
7579
7779
|
}
|
|
7580
7780
|
} else {
|
|
7581
7781
|
if ( !res.headersSent && !res.writableEnded ) {
|
|
@@ -8297,6 +8497,12 @@ function Server(options) {
|
|
|
8297
8497
|
return;
|
|
8298
8498
|
}
|
|
8299
8499
|
|
|
8500
|
+
// #P49 — a fast-lane route (`param.lane`, registered at boot) skips the
|
|
8501
|
+
// controller: on isaac it becomes the middleware chain's terminal, so the
|
|
8502
|
+
// bundle's session and CSRF middleware still run; on express, whose app
|
|
8503
|
+
// layers ran before this handler, it is dispatched directly below.
|
|
8504
|
+
var _laneEntry = ( req.routing.param && req.routing.param.lane ) ? lib.lane.lookup(req.routing) : null;
|
|
8505
|
+
|
|
8300
8506
|
if ( /^isaac/.test(self.engine) && self.instance._expressMiddlewares.length > 0) {
|
|
8301
8507
|
installH2SendShim(res); // #B562
|
|
8302
8508
|
// FRAMEWORK PATCH: Bug I — per-request dispatcher
|
|
@@ -8307,12 +8513,21 @@ function Server(options) {
|
|
|
8307
8513
|
nextMiddleware._response = res;
|
|
8308
8514
|
nextMiddleware._next = next;
|
|
8309
8515
|
nextMiddleware._nextAction = 'route';
|
|
8516
|
+
if ( _laneEntry ) {
|
|
8517
|
+
nextMiddleware._nextAction = 'lane';
|
|
8518
|
+
nextMiddleware._laneEntry = _laneEntry;
|
|
8519
|
+
}
|
|
8310
8520
|
// #FI — express middleware start
|
|
8311
8521
|
nextMiddleware._timelineStart = (req._devTimeline) ? Date.now() : 0;
|
|
8312
8522
|
|
|
8313
8523
|
return nextMiddleware()
|
|
8314
8524
|
}
|
|
8315
8525
|
|
|
8526
|
+
if ( _laneEntry ) {
|
|
8527
|
+
lib.lane.dispatch(_laneEntry, req, res, next, self.instance, ( self.conf[req.routing.bundle] || self.conf[self.appName] )[self.env]);
|
|
8528
|
+
return;
|
|
8529
|
+
}
|
|
8530
|
+
|
|
8316
8531
|
router._server = self.instance;
|
|
8317
8532
|
|
|
8318
8533
|
return router.route(req, res, next, req.routing);
|
|
@@ -8494,6 +8709,13 @@ function Server(options) {
|
|
|
8494
8709
|
for (var _ejk in _pendingEJ) {
|
|
8495
8710
|
if (!(_ejk in header)) header[_ejk] = _pendingEJ[_ejk];
|
|
8496
8711
|
}
|
|
8712
|
+
// #B749 — the raw respond() below bypasses the compat response, whose
|
|
8713
|
+
// statusCode kept its default 200 (the shim swallows writeHead(code)),
|
|
8714
|
+
// so a 'finish' reader such as the metrics hook counted every HTTP/2
|
|
8715
|
+
// error as a 200. The setter throws on an invalid code, undefined
|
|
8716
|
+
// among them, which respond() still sends as 200: the send must not
|
|
8717
|
+
// depend on it.
|
|
8718
|
+
try { res.statusCode = code; } catch (e) {}
|
|
8497
8719
|
stream.respond(header);
|
|
8498
8720
|
stream.end(errBody);
|
|
8499
8721
|
};
|
|
@@ -8655,6 +8877,9 @@ function Server(options) {
|
|
|
8655
8877
|
for (var _ehk in _pendingEH) {
|
|
8656
8878
|
if (!(_ehk in header)) header[_ehk] = _pendingEH[_ehk];
|
|
8657
8879
|
}
|
|
8880
|
+
// #B749 — as in __ginaSendErrJSON above: the compat response must
|
|
8881
|
+
// carry the code the raw frame sends, or a 'finish' reader sees 200.
|
|
8882
|
+
try { res.statusCode = code; } catch (e) {}
|
|
8658
8883
|
stream.respond(header);
|
|
8659
8884
|
stream.end(errBody);
|
|
8660
8885
|
};
|
|
@@ -35,7 +35,8 @@ var ${bundle} = require('gina');
|
|
|
35
35
|
// // Configure connectors.json: { "session": { "connector": "redis", "host": "...", "port": 6379, "ttl": 86400 } }
|
|
36
36
|
// //
|
|
37
37
|
// // SQLite — dev / staging / single-pod (requires: Node >= 22.5.0, zero npm deps)
|
|
38
|
-
// // Configure connectors.json: { "session": { "connector": "sqlite", "
|
|
38
|
+
// // Configure connectors.json: { "session": { "connector": "sqlite", "file": ":memory:", "ttl": 86400 } }
|
|
39
|
+
// // (a file path, e.g. "/var/lib/myapp/sessions.db", also goes in "file", never in "database")
|
|
39
40
|
// //
|
|
40
41
|
// // The store factory keys on express-session's function name — the literal
|
|
41
42
|
// // "session", which is read-only and cannot be re-pointed — so the
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
],
|
|
28
28
|
"javascriptsDeferEnabled": true, // will place scripts in defer mode in the head by default. If false, will place in the footer
|
|
29
29
|
"sriEnabled": false, // opt-in Subresource Integrity: adds integrity= + crossorigin= to same-origin <script>/<link> tags whose files resolve on disk; external URLs and unresolvable paths are skipped (fail-open)
|
|
30
|
+
"assetVersioningEnabled": true, // #P48: appends ?v=<10 hex of the file's sha384> to the same-origin asset URLs gina emits (tags + their preload hints) so they can be cached for a year; false keeps today's URLs. Never applied to js external plugins, layoutless renders or dev (fail-open: an unresolvable file keeps its plain URL)
|
|
30
31
|
"javascripts": [
|
|
31
32
|
{
|
|
32
33
|
"name" : "gina",
|
|
@@ -31,7 +31,7 @@ var scopeName = require('../../scope/inc/name');
|
|
|
31
31
|
*
|
|
32
32
|
* @example
|
|
33
33
|
* isValidBundleName('api'); // true
|
|
34
|
-
* isValidBundleName('
|
|
34
|
+
* isValidBundleName('my-app'); // true
|
|
35
35
|
* isValidBundleName('Admin'); // false — starts with an uppercase letter
|
|
36
36
|
* isValidBundleName('a$b'); // false — `$` is not allowed
|
|
37
37
|
* isValidBundleName('constructor'); // false — every object inherits it
|
|
@@ -32,7 +32,7 @@ var scopeName = require('../../scope/inc/name');
|
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
34
34
|
* isValidProjectName('myproject'); // true
|
|
35
|
-
* isValidProjectName('
|
|
35
|
+
* isValidProjectName('my-app'); // true
|
|
36
36
|
* isValidProjectName('Myproject'); // false — starts with an uppercase letter
|
|
37
37
|
* isValidProjectName('..'); // false — its home would be ~/..
|
|
38
38
|
* isValidProjectName('constructor'); // false — every object inherits it
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* This file is part of the gina package.
|
|
3
|
+
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
+
*
|
|
5
|
+
* For the full copyright and license information, please view the LICENSE
|
|
6
|
+
* file that was distributed with this source code.
|
|
7
|
+
*/
|
|
8
|
+
'use strict';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @module gina/lib/error-ref
|
|
12
|
+
*
|
|
13
|
+
* #ERRREF — the incident-ref mint for error responses answered outside a
|
|
14
|
+
* controller (the fast lane, #P49, is its first caller).
|
|
15
|
+
*
|
|
16
|
+
* Every JSON error body carries a top-level `ref`: a short correlation code an
|
|
17
|
+
* end user can relay by voice or typing, paired server-side with the full error
|
|
18
|
+
* detail in ONE log line. A caller-supplied ref is honoured when it is
|
|
19
|
+
* relay-safe — 1 to 32 word characters, dots or dashes, the same bounded-length,
|
|
20
|
+
* restricted-charset discipline as an inbound `X-Request-Id`, which keeps it out
|
|
21
|
+
* of reach of log forging — and anything else gets a fresh mint of 6 uppercase
|
|
22
|
+
* hex characters (`crypto.randomBytes(3)`).
|
|
23
|
+
*
|
|
24
|
+
* The controller (`core/controller/controller.js`) and the server
|
|
25
|
+
* (`core/server.js`) keep their own byte-identical copies of this rule: the
|
|
26
|
+
* controller is evicted per request in dev mode, and both copies are pinned by
|
|
27
|
+
* `test/core/error-ref.test.js`. `test/lib/error-ref.test.js` drives this module
|
|
28
|
+
* against the controller's copy so the three cannot drift apart.
|
|
29
|
+
*
|
|
30
|
+
* Server-side only, stateless; plain-required by the registry (`lib.errorRef`).
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
var crypto = require('crypto');
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* The relay-safe shape a caller-supplied ref must match to be honoured.
|
|
37
|
+
*
|
|
38
|
+
* @constant
|
|
39
|
+
* @type {RegExp}
|
|
40
|
+
* @private
|
|
41
|
+
*/
|
|
42
|
+
var RELAY_SAFE = /^[\w.\-]{1,32}$/;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Return the caller's ref when it is relay-safe, else mint a fresh one.
|
|
46
|
+
*
|
|
47
|
+
* Never throws; any non-string `supplied` (undefined, null, a number, an
|
|
48
|
+
* object) mints.
|
|
49
|
+
*
|
|
50
|
+
* @memberof module:gina/lib/error-ref
|
|
51
|
+
* @param {string} [supplied] - A caller- or producer-provided ref candidate
|
|
52
|
+
* @returns {string} `supplied` when relay-safe, else 6 fresh uppercase hex characters
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* var errorRef = require('gina').lib.errorRef;
|
|
56
|
+
* errorRef.mint(); // 'A1B2C3' — fresh, random
|
|
57
|
+
* errorRef.mint('ORDER-42'); // 'ORDER-42' — honoured
|
|
58
|
+
* errorRef.mint('bad ref!'); // '9F0E1D' — space and `!` are refused, so a fresh mint
|
|
59
|
+
* errorRef.mint('x'.repeat(33)); // a fresh mint — 33 characters is over the 32 cap
|
|
60
|
+
*/
|
|
61
|
+
function mint(supplied) {
|
|
62
|
+
if ( typeof(supplied) == 'string' && RELAY_SAFE.test(supplied) ) {
|
|
63
|
+
return supplied;
|
|
64
|
+
}
|
|
65
|
+
return crypto.randomBytes(3).toString('hex').toUpperCase();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
module.exports = {
|
|
69
|
+
mint : mint
|
|
70
|
+
};
|
|
@@ -260,6 +260,18 @@ function Lib() {
|
|
|
260
260
|
// PLAIN require, like rate-limit/idempotency: router-bound, load-once, and
|
|
261
261
|
// its registry lives on process.gina (survives refreshCore, dies on restart).
|
|
262
262
|
messageValidator : require('./message-validator'),
|
|
263
|
+
// #P49 — the fast lane: the param.lane boot registry, the handler context and
|
|
264
|
+
// its JSON/error writers, dispatched by core/server.js at the end of the
|
|
265
|
+
// middleware chain. PLAIN require, like the router-bound gates above:
|
|
266
|
+
// core/server.js captures it at load, it performs no per-request require()
|
|
267
|
+
// of a hot-reloaded sibling (#B32-residual), and its registry lives on
|
|
268
|
+
// process.gina (survives refreshCore, dies on restart). Its dev-mode reload of
|
|
269
|
+
// the lane handler modules is its own, gated on the #M6 watcher flag.
|
|
270
|
+
lane : require('./lane'),
|
|
271
|
+
// #ERRREF — the incident-ref mint for errors answered outside a controller
|
|
272
|
+
// (the lane's error writer). Stateless; PLAIN require because the lane, a
|
|
273
|
+
// load-once module, binds it at load.
|
|
274
|
+
errorRef : require('./error-ref'),
|
|
263
275
|
// Per-bundle login session cookie lifetimes declared in security.json
|
|
264
276
|
// (`session.expires` / `session.remember`), applied by core/router.js at
|
|
265
277
|
// req.login(). PLAIN require, like the router-bound gates above: load-once,
|