gina 0.6.9 → 0.6.10
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 +11 -0
- package/README.md +17 -23
- package/ROADMAP.md +1 -0
- package/framework/v0.6.10/VERSION +1 -0
- package/framework/{v0.6.9 → v0.6.10}/core/config.js +15 -7
- package/framework/{v0.6.9 → v0.6.10}/core/gna.js +85 -45
- package/framework/{v0.6.9 → v0.6.10}/core/server.isaac.js +215 -0
- package/framework/{v0.6.9 → v0.6.10}/core/server.js +295 -0
- package/framework/{v0.6.9 → v0.6.10}/core/template/conf/settings.json +25 -0
- package/framework/{v0.6.9 → v0.6.10}/helpers/path.js +114 -0
- package/framework/v0.6.10/lib/admin/src/main.js +217 -0
- package/framework/{v0.6.9 → v0.6.10}/lib/generator/index.js +13 -13
- package/framework/{v0.6.9 → v0.6.10}/lib/index.js +8 -0
- package/framework/v0.6.10/lib/maintenance/package.json +17 -0
- package/framework/v0.6.10/lib/maintenance/src/main.js +981 -0
- package/framework/{v0.6.9 → v0.6.10}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +6 -4
- package/package.json +3 -3
- package/schema/settings.json +37 -0
- package/types/index.d.ts +10 -1
- package/framework/v0.6.9/VERSION +0 -1
- package/framework/v0.6.9/lib/admin/src/main.js +0 -93
- /package/framework/{v0.6.9 → v0.6.10}/AUTHORS +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/LICENSE +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/content.encoding +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/dev/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/locales/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/mime.types +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/model/entity.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/model/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/router.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/server.express.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/status.codes +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/console.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/context.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/task.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/helpers/text.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/async/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/config.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/job/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/job-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/math/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/model.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/proc.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/push/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/push/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/session-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/shell.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/state.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/storage-store.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/url/README.md +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/url/index.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/validator.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.9 → v0.6.10}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,17 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.6.10 - 2026-08-16
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
* Maintenance mode — a bundle can now be closed to the public without being stopped, via `settings.json > server.maintenance` (#MAINT1). When active, every request EXCEPT the `/_gina/*` family is answered `503` with `Retry-After` and `Cache-Control: no-store`, carrying a self-contained maintenance page for a browser navigation and the framework's standard `503` JSON body for XHR / SPA-fragment / json-only callers. The gate runs on BOTH engines, placed after every `/_gina/*` handler and before the webroot filter, static-asset serving, both render/output-cache serve points and routing — so unlike a route middleware (which only runs once a route has matched) it also covers static assets and unmatched URLs. `/_gina/health/check` deliberately keeps answering 200 so an orchestrator does not restart pods over a declared window. Config is `{enabled, retryAfter, message, bypassKey, allowFrom}`; `enabled` must be a strict boolean, every other key falls back per key with a boot warning, and a malformed block never refuses a boot. Two bypasses let chosen visitors through an open window: `bypassKey` (constant-time compare, presented as the `x-gina-maintenance-key` header or once as `?gina-maintenance-key=`, which sets a stateless 12h HttpOnly cookie and redirects to the same URL without the secret) works under ANY topology, while `allowFrom` is honoured only for requests that do not classify as proxied — behind a reverse proxy every socket address is the proxy's, so an unconditioned IP allowlist would admit either everyone or no one. Flip it at runtime with the admin-gated `GET/POST /_gina/maintenance` (optional `ttlSeconds` dead-man switch); a runtime override is not persisted, and an expired TTL reverts to the configured state rather than to off, so a forgotten timer can never re-open a site that configuration says is closed. Scope is per bundle, so merged-process projects isolate correctly. Server-side only — no browser-bundle change, so pickup is a bundle restart with no re-bake.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
* Boot-time bundle mounts are now idempotent, atomic and concurrency-safe (#B381). A mount symlink that already resolves to the intended source is kept untouched, so the steady-state boot writes nothing; a wrong or missing link is published atomically (temp sibling + rename), so the mount name never disappears mid-rewrite; and a concurrent process publishing the identical link is treated as success instead of killing the boot. Previously every boot re-created every declared bundle link in two non-atomic steps (unlink, then create) with no mutual exclusion — with several processes booting one shared project tree (e.g. replicas over a POSIX network filesystem), the contended rewrites could fail a boot outright or abort the shared config load for every bundle. The project bundles/tmp/cache directories and the generator path creation are race-free now as well (recursive create instead of check-then-create). Behaviour note: a real directory occupying a mount path is no longer silently deleted and re-linked — the boot refuses loudly instead.
|
|
16
|
+
|
|
17
|
+
### Security
|
|
18
|
+
* Closed a cross-site request forgery hole in the admin `/_gina/*` control endpoints (#B384), present in every release up to and including 0.6.9. These endpoints authorise callers by IP allowlist alone (`app.json` `admin.allowFrom`, loopback by default) and a browser attaches that ambient credential automatically, so an operator browsing from an allowlisted machine could be lured to a page that silently issued writes to `/_gina/storage/gc`, `/_gina/cache/clear`, `/_gina/release/rebuild` or `/_gina/maintenance`. The first three read their whole input from the query string and never read a body, so the attack needed no JavaScript and no CORS involvement at all: a plain auto-submitting form was enough. A cross-origin write to any `/_gina/*` endpoint is now refused with 403 on both engines, consulting `Sec-Fetch-Site` where the browser sends it and comparing `Origin` against the connected authority otherwise, never against a forwarded header. Two things are deliberately unaffected: requests carrying no browser origin signal (curl, the gina CLI, deploy scripts) still work, so operator tooling is unchanged; and safe methods (GET, HEAD, OPTIONS, TRACE) are untouched, so the Inspector cross-origin SSE and GET channels keep working. No configuration change is required.
|
|
19
|
+
|
|
9
20
|
## 0.6.9 - 2026-08-16
|
|
10
21
|
### Added
|
|
11
22
|
* `gina.pushToSession(sessionID, payload[, option][, callback])` — a sanctioned way to push to a session from OUTSIDE a request (#B366). `self.push()` needs a live request-bound controller, so code that has none (a `lib/job` handler, a cron tick, a boot hook) had no route to a user's socket at all; the pattern consumers reached for instead — a background worker making an HTTP hop carrying the user's session id in the request body — was the #B364 vulnerability, and closing it left that shape with nowhere to go. This is the replacement, and it is deliberately narrow. The recipient is a REQUIRED argument: an absent or empty `sessionID` is an error, never a fan-out, and no broadcast is reachable from this API at all — the deliberate all-clients send stays in-request as `self.push(payload, { broadcast: true })`. Source the recipient from server-held state (capture it when the work is queued, keep it server-side); round-tripping a recipient id, or a token naming one, through the browser hands the choice back to the caller and re-opens #B364 one layer up. Delivery is reported rather than assumed: `callback(err, { delivered })` fires exactly once with the number of sockets written, and `delivered: 0` is a normal outcome (the user closed the tab), not an error — the shape this replaces was fire-and-forget and blind. Errors carry a machine-readable `err.code` (`PUSH_INVALID_RECIPIENT`, `PUSH_INVALID_PAYLOAD`, `PUSH_CHANNEL_NOT_CONFIGURED`, `PUSH_CHANNEL_NOT_READY`, `PUSH_PAYLOAD_SERIALIZE_FAILED`). Requires the isaac engine with `settings.json > server.ioServer` attached; the express engine has no engine.io channel and now says so by name instead of failing as a 500. Available as `lib.push.toSession()` for code holding its own server instance.
|
package/README.md
CHANGED
|
@@ -61,34 +61,28 @@ open https://localhost:3100
|
|
|
61
61
|
|
|
62
62
|
> **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
|
|
63
63
|
|
|
64
|
-
## What's in 0.6.
|
|
64
|
+
## What's in 0.6.10
|
|
65
65
|
|
|
66
66
|
> **Restart your bundles — no re-bake.** The browser bundle is byte-identical to
|
|
67
|
-
> `0.6.
|
|
68
|
-
>
|
|
67
|
+
> `0.6.9` (verified), so `gina bundle:restart` is enough; this release is
|
|
68
|
+
> server-side only.
|
|
69
69
|
|
|
70
|
-
> **No settings reset.** `0.6.
|
|
70
|
+
> **No settings reset.** `0.6.10` is a patch — the `shortVersion` stays `0.6`, so
|
|
71
71
|
> your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
|
|
72
72
|
|
|
73
|
-
**This release
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
- **Added —
|
|
83
|
-
- **
|
|
84
|
-
- **Fixed —
|
|
85
|
-
- **
|
|
86
|
-
- **Fixed — `project:add` writes the project's `.gitignore`.** The framework has always shipped a `core/template/_gitignore` whose underscore prefix implies a rename at scaffold time, but nothing performed that rename — so the template had zero consumers and every scaffolded project came out with no `.gitignore` at all, leaving the secret-file globs it carries protecting nothing. The copy is skip-if-exists, so your own file is never replaced or appended to, and re-running the command changes nothing.
|
|
87
|
-
- **Fixed — a failed file copy can no longer destroy the destination it was replacing.** The path helper's copier — the byte-writer behind `_().cp()` and `PathObject.mv()`, which CLI copy, build and rename paths all ride — wrote directly to the final name and unlinked an existing destination *before* the copy started. Bytes now stage to a temp sibling and publish with an atomic rename, so a reader never observes a partial file and the destination is replaced only on success. A source-side read error is handled instead of killing the process, a failed copy settles its callback exactly once, and failures propagate a real `Error` rather than a plain string. **Contract note:** code matching the exact former failure string now receives an `Error` instead.
|
|
88
|
-
- **Fixed — the environment beats the secrets file again, and three malformed `secrets.file` shapes are caught.** The two environment tiers were joined with `||`, and the CLI stores swept `GINA_*`/`VENDOR_*`/`USER_*` values as real booleans — so a key whose swept value was boolean `true` satisfied the short-circuit, `process.env` was never consulted, and the file tier won over a perfectly good environment variable, letting a stale plaintext file shadow a platform-injected credential. The tiers are now read independently. **Action required if you use the file tier:** a whitespace-only entry and a path containing an empty segment (`//`) now refuse to boot rather than failing as a suppressed debug line. The empty segment is worth a look — it is what a `${...}` token that resolved to nothing leaves behind, but a token carrying a *trailing slash* produces the same shape and resolves to exactly the intended file, so a config that worked before will now refuse; removing the doubled separator resolves it.
|
|
89
|
-
- **Fixed — a bundle whose release tree cannot be linked says which bundle, and why.** The config loader built a useful error carrying the offending path, but the receiving callback never inspected it and dereferenced the absent configuration object instead — so the reason was discarded and the process died on an opaque `TypeError`. Because the configuration load is shared across the project, one bundle's missing release tree took down every bundle in it. The error is now reported through the same sink the bundle-configuration loader already used, naming the bundle, env and scope.
|
|
90
|
-
- **Fixed — `self.push()` refuses by name when there is no engine.io channel.** The push channel is an isaac-engine facility, so on the Express engine the client lookup dereferenced an absent `eio` and surfaced as an opaque 500 that named neither push nor the missing channel. It now warns, hands a supplied callback a `PUSH_CHANNEL_NOT_CONFIGURED` error, and sends nothing — without failing the request, so a notification side-channel no longer takes down the response it rode in on. This is also the first time `push()` honours the `callback(err, result)` contract its documentation always described.
|
|
91
|
-
- **Fixed — the port-setup merge read the wrong list.** The pass that folds newly seen protocols and schemes into a project's registry lists indexed the project's own list by the contextual list's position, so once the contextual list outgrew it the overshoot read `undefined`. No user-visible consequence was demonstrated, so this ships as a correctness fix.
|
|
73
|
+
**This release adds maintenance mode and closes a cross-site request forgery hole
|
|
74
|
+
in the admin endpoints.** It also makes boot-time bundle mounts safe when several
|
|
75
|
+
processes share one project tree — replicas over a POSIX network filesystem, or
|
|
76
|
+
containers bind-mounting a single checkout. **Two behaviour changes to check
|
|
77
|
+
before you upgrade** — a real directory sitting at a bundle's mount path is now
|
|
78
|
+
refused loudly instead of being silently deleted, and cross-origin writes to the
|
|
79
|
+
`/_gina/*` control endpoints are now refused. Both are covered in the
|
|
80
|
+
[migration guide](https://gina.io/docs/migration).
|
|
81
|
+
|
|
82
|
+
- **Added — maintenance mode.** A bundle can now be closed to the public without being stopped, via `settings.json > server.maintenance`. While a window is open every request except the framework's own `/_gina/*` endpoints is answered `503` with a `Retry-After` header and `Cache-Control: no-store`, carrying a self-contained page for a browser navigation and the standard JSON body for XHR, SPA-fragment and JSON callers. The gate runs on **both engines**, placed ahead of static assets, both output-cache serve points and routing — so unlike a route middleware, which only runs once a route has matched, it also covers static files and URLs that match no route at all. The liveness endpoint deliberately keeps answering `200`, so an orchestrator does not restart healthy instances over a declared window, and the toggle itself stays reachable so you are never stranded outside your own off switch. Chosen visitors can still browse: a shared bypass key works as a header, or once in the address bar — which then sets a short-lived cookie and redirects without the secret — under any deployment; the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy, since behind one every address is the proxy's. Maintenance can also be flipped at runtime through an admin-gated endpoint with an optional expiry; a runtime flip is not persisted, and a lapsed expiry reverts to your *configuration* rather than to "off", so a forgotten timer cannot re-open a site that configuration says is closed.
|
|
83
|
+
- **Security — cross-origin writes to admin `/_gina/*` endpoints are refused (#B384).** Present in every release up to and including `0.6.9`. These endpoints authorise callers by IP allowlist alone (`app.json` `admin.allowFrom`, loopback by default), and a browser attaches that ambient credential automatically — so an operator browsing from an allowlisted machine could be lured to a page that silently issued writes to `/_gina/storage/gc`, `/_gina/cache/clear`, `/_gina/release/rebuild` or `/_gina/maintenance`. The first three read their entire input from the query string and never read a body, so the attack needed no JavaScript and no CORS involvement at all: a plain auto-submitting form was enough. Such a write is now refused with `403` on both engines, using `Sec-Fetch-Site` where the browser sends it and comparing `Origin` against the connected authority otherwise — never against a forwarded header. **Two things are deliberately unaffected:** requests carrying no browser origin signal (`curl`, the gina CLI, deploy scripts) still work, so operator tooling is unchanged; and safe methods are untouched, so cross-origin `GET`/SSE channels keep working. No configuration change is required.
|
|
84
|
+
- **Fixed — boot-time bundle mounts are idempotent, atomic and concurrency-safe.** Every boot re-created every declared bundle's mount symlink in two non-atomic steps — unlink, then create — with no mutual exclusion anywhere in the framework, and the config loader did it for *every* declared bundle on *every* load. With a single process that is invisible. With several processes booting one shared project tree it is a race on the same directory entries: the mount name genuinely disappears between the two steps, so a boot could fail outright on a contended create, and because the configuration load is shared, one contended link could abort it for every bundle in the project. Mounting is now idempotent and atomic. A link that already resolves to its intended source is left completely alone — the steady-state boot writes nothing at all, which is what removes the contention rather than merely surviving it. A wrong or missing link is published atomically through a temporary sibling and a rename, so the name is never absent and two processes cannot collide. And a process that loses the race to another one publishing the *identical* link now treats that as success instead of refusing to boot. Genuine failures are still loud: a release whose source has vanished, or a real directory occupying the mount path, refuse by name. The same class of race is closed on the directory creation that accompanies a mount. **Contract note:** a real directory at a bundle's mount path used to be deleted and replaced with the link during config load, and now refuses the boot instead — if you hit that, remove or relocate the directory.
|
|
85
|
+
- **Docs — the guidance on addressing an out-of-request push is corrected.** `0.6.9` introduced `gina.pushToSession()` and warned against sourcing its recipient from the browser. That warning was written broadly enough to read as forbidding a **server-minted, integrity-protected token** that names the recipient — which is in fact the sanctioned shape, and the one the authenticated-hop pattern already relied on. The prohibition is now scoped to what it always meant: a *bare* recipient id in a client-writable field. The sanctioned shape is documented with the conditions that make it safe — verify the token and derive the recipient only from its verified claims, fail closed when it is absent or unverifiable, and keep it short-lived, since targeting integrity is not replay immunity.
|
|
92
86
|
|
|
93
87
|
## Documentation
|
|
94
88
|
|
package/ROADMAP.md
CHANGED
|
@@ -60,6 +60,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
60
60
|
| **Q4 2026** | `0.6.6` ✅ | **Fixed**: the logging-transport release. A slow boot no longer silences a bundle's logging for the life of the process — a two-second connect deadline added in `0.6.5` read a socket flag Node clears one event-loop phase later, so any boot that blocked the loop past it destroyed a connection the kernel had already established (every container start and network-filesystem mount was exposed, and the transport never redialled). The MQ and file log transports also stopped dialling `host_v4`, which on a `~/.gina` shared across hosts silently shipped every log line off-host while all connection lines read healthy. Plus: the popin `success` event fires again instead of raising a 422 carrying the successful response body; a link request belongs to the anchor you clicked rather than the first anchor sharing its url; and constructing the link handler twice no longer corrupts the first instance · **Added**: the log transport reconnects — exponential backoff to a 30-second ceiling, one report per outage, frames dropped rather than queued while down so an outage cannot grow memory |
|
|
61
61
|
| **Q4 2026** | `0.6.7` ✅ | **Added**: the object-storage release — a `storage` block declares named drivers (an adapter crossed with a strategy) reachable as `gina.storage()`, publishing objects atomically under opaque keys with their metadata written through a pluggable store seam; a content-addressed `cas` strategy deduplicates identical bytes behind a reference count, reclaiming them only after a grace-gated sweep; size tiering keeps sub-`64KB` objects inline in the metadata store, measurably faster than per-file writes; `storage:stats` / `storage:gc` / `storage:verify` operate a bundle's drivers whether it is running or stopped, through always-on admin-gated endpoints; and an upload group can route its `self.store()` step straight into a driver · **Security**: bound query parameter values no longer reach dev consoles or the Inspector query log — count and type markers replace them, with `inspector.queries.captureValues` to opt back in · **Fixed**: the `is` rule compiles regex literals as authored instead of stripping their parentheses (stricter — review patterns containing parens), forms with an async `query` rule complete correctly across a cluster of interacting defects (a submit leaving before the verdict landed, a completion carrying only the query field's slice, a re-click clearing later fields' errors, a clean form whose query field was not declared last never submitting at all, replayed submits from stale listeners, and an id-less trigger bound twice), `getConfig().settings` resolves path placeholders, `req.files[].group` reports the resolved group instead of `undefined`, and the Inspector's Data and Forms tabs stop putting framework-internal keys and the bundle catalog above your own data · **Changed**: framework default looks ship inside a `@layer gina` cascade layer, so any un-layered project rule overrides them without `!important` |
|
|
62
62
|
| **Q4 2026** | `0.6.8` ✅ | **Security**: `self.push()` decides its recipient server-side instead of reading it from the request, where a supplied session id aimed the push at any session and an absent one broadcast to every connected client (ACTION REQUIRED — a bare worker push over an HTTP hop that carried the recipient IN THE REQUEST stops delivering; where the hop is authenticated the controller can pass `{ sessionID }` explicitly and keep working, and a worker with no request context at all polls `GET /_gina/jobs/:id`) · forwarded headers (`X-Forwarded-Host`, `-Proto`, `-Prefix` and the request's own `Host`) are validated where they are read, closing a reflected-XSS path that spliced them unescaped into the client bootstrap script emitted on every rendered page · **Added**: storage metadata can live on Couchbase, which is what makes a driver root shareable across bundles and replicas; a `stream` strategy for large sequential media brings resumable, out-of-order, restart-surviving uploads whose finalise verifies coverage as an interval union and refuses to publish a gap; HTTP Range serving through `self.serveFromStorage()` on both engines, with conditional GET and a fail-closed content-type downgrade; the `s3` adapter completes the pluggable object-storage layer, storeless by design and able to offload GET/HEAD to a presigned URL; `getRange()` on every local strategy; machine-readable `err.code` on storage read verbs; and the Couchbase soak probes ship in the package · **Changed**: `renderStream()` is byte-serving-capable — `Buffer` chunks pass through verbatim on non-SSE content types (binary payloads previously arrived corrupted), HEAD answers headers-only without consuming the iterable, and caller-set headers are no longer clobbered · **Fixed**: `renderStream()` honours a caller-set status on both engines and stops throwing a swallowed error at the end of every streamed response, a redirect treats `HEAD` as the safe method it is and keeps the caller's query string under `keep-params: true`, and a local storage driver reclaims the temp files left behind by a crashed or refused `put()` |
|
|
63
|
+
| **Q4 2026** | `0.6.10` ✅ | **Added**: maintenance mode — a bundle can be closed to the public without being stopped. When it is active every request except the framework's own built-in endpoints is answered `503` with a `Retry-After` header and a self-contained maintenance page, and the response is marked never to be stored so a cached copy cannot outlive the window. The gate runs on both engines ahead of static assets, the output cache and routing, so it also covers files and URLs that a route middleware never sees. The liveness endpoint deliberately keeps answering normally, so an orchestrator does not restart healthy instances over a declared window. Chosen visitors can still browse: a shared bypass key presented as a header or once in the address bar (which then sets a short-lived cookie and redirects without the secret) works under any deployment, while the supplementary IP allowlist applies only to requests that did not arrive through a reverse proxy — behind one, every address is the proxy's, so an unconditioned list would let either everybody or nobody through. Maintenance can be flipped at runtime through an administrator-gated endpoint with an optional expiry; a runtime flip is not persisted, and an expiry reverts to the configured state rather than to off, so a forgotten timer cannot re-open a site that configuration says is closed. **Fixed**: boot-time bundle mounts are idempotent, atomic and concurrency-safe — a mount symlink that already resolves to its source is left untouched (so the steady-state boot writes nothing), a wrong or missing one is published atomically through a temp sibling and a rename, and a process that loses the race to another publishing the identical link treats that as success instead of refusing to boot. Previously every boot re-created every declared bundle's link in two non-atomic steps with no mutual exclusion, so several processes sharing one project tree raced the same directory entries and a contended link could fail a boot or abort the shared configuration load for every bundle in the project. The same race is closed on the directory creation that accompanies a mount. Behaviour change: a real directory occupying a mount path is now refused by name instead of silently deleted. **Security**: cross-origin writes to the administrator-gated built-in endpoints are refused. Those endpoints authorise callers by network address alone — a credential a browser attaches automatically — so an operator browsing from an allowed machine could be lured to a page that silently issued writes to them; and because several of them read their whole input from the address rather than from a request body, the attack needed no scripting and no cross-origin negotiation at all. Such a write is now refused on both engines, using the browser's own request-context signal where it is sent, and otherwise comparing the stated origin against the address the client actually connected to — never against a forwarded header, which an attacker controls. Clients that send no browser origin signal, such as command-line tooling and deployment scripts, are deliberately unaffected, as are safe methods, so existing cross-origin read channels keep working. | `0.6.10` | 2026-08-16 |
|
|
63
64
|
| **Q4 2026** | `0.6.9` ✅ | **Security**: an engine.io socket's session identity is derived server-side from the upgrade request's own cookie instead of a field the browser asserts on every message — any client could previously claim another user's session and receive the pushes addressed to it, which took strictly less than stealing the cookie, since a rendered page carries the bare session id while the cookie carries the signed form; the binding replays the bundle's own session middleware (same secret, store and cookie name, no new configuration) and fails closed, so an id-less socket receives only deliberate broadcasts · **Added**: `gina.pushToSession()` gives code with no request context — a job handler, a cron tick, a boot hook — a sanctioned route to a user's socket, with a required recipient, no reachable broadcast, and delivery reported rather than assumed; and a bundle can declare which scopes it is deployed in through a `scopes` allow-list on its manifest entry, so one still under development stays out of every other scope · **Fixed**: `engine: "express"` bundles boot and serve on Express 5, with the supported range declared for the first time (`>= 4 < 6`, both majors verified live) · `project:add`/`project:import` no longer empty a project's `bundles` block on a declared-count mismatch, no longer adopt a bundle's invalid `server.protocol`/`server.scheme` into the project's registry lists, and no longer resolve one project's bundles against another project's path · `project:add` writes the `.gitignore` the shipped template's underscore prefix has always implied · the path helper's copier stages to a temp sibling and publishes with an atomic rename, so a failed copy can no longer destroy the destination it was replacing · the secrets resolver reads its two environment tiers independently, so a swept boolean no longer lets a plaintext file shadow `process.env`, and three malformed `settings.secrets.file` shapes that used to pass in silence are caught (ACTION REQUIRED — two of them now refuse to boot) · a bundle whose release tree cannot be linked refuses by name instead of dying as an opaque TypeError · `self.push()` refuses by name when the server instance has no engine.io channel |
|
|
64
65
|
| **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
65
66
|
| **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.6.10
|
|
@@ -844,20 +844,28 @@ function Config(opt, contextResetNeeded) {
|
|
|
844
844
|
|
|
845
845
|
appPath = _(root +'/'+ pkg[app].link, true);
|
|
846
846
|
console.debug('[CONFIG] Checking appPath [ '+ appPath +' ] ');
|
|
847
|
-
//
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
847
|
+
// #B381 — this loop runs for EVERY declared bundle on EVERY config
|
|
848
|
+
// load, and it used to unlink-then-recreate each bundle's link in
|
|
849
|
+
// two non-atomic steps: with N processes sharing one project tree
|
|
850
|
+
// that is N×M unserialised rewrites of the same names, and a lost
|
|
851
|
+
// race aborted the whole shared config load. ensureSymlinkSync()
|
|
852
|
+
// keeps a correct link untouched — the steady-state load now
|
|
853
|
+
// writes nothing — and publishes a wrong/missing one atomically.
|
|
854
|
+
// was:
|
|
855
|
+
// let targetAppPathObj = new _(appPath, true);
|
|
856
|
+
// if ( targetAppPathObj.existsSync() ) {
|
|
857
|
+
// targetAppPathObj.rmSync()
|
|
858
|
+
// }
|
|
859
|
+
let targetAppPathObj = null;
|
|
852
860
|
try {
|
|
853
861
|
if (envIsDev) {
|
|
854
862
|
targetAppPathObj = new _(root +'/'+ pkg[app].src, true);
|
|
855
863
|
console.debug('[CONFIG][env:'+env+'][envIsDev:'+ envIsDev +'] Linking ['+ targetAppPathObj.toString() +'] to [ '+ appPath +' ] ');
|
|
856
|
-
targetAppPathObj.
|
|
864
|
+
targetAppPathObj.ensureSymlinkSync(appPath);
|
|
857
865
|
} else {
|
|
858
866
|
targetAppPathObj = new _(root +'/'+ pkg[app].releases[scope][env].target, true);
|
|
859
867
|
console.debug('[CONFIG][env'+env+'][envIsDev:'+ envIsDev +'] Linking ['+ targetAppPathObj.toString() +'] to [ '+ appPath +' ] ');
|
|
860
|
-
targetAppPathObj.
|
|
868
|
+
targetAppPathObj.ensureSymlinkSync(appPath);
|
|
861
869
|
}
|
|
862
870
|
} catch (releaseError) {
|
|
863
871
|
console.error('[ releaseError ] ', releaseError);
|
|
@@ -598,7 +598,12 @@ var isBundleMounted = function(projects, bundlesPath, bundle, cb) {
|
|
|
598
598
|
|
|
599
599
|
console.debug('Is `'+ bundle +'` mounted ?', isMounted);
|
|
600
600
|
if (!gna.started && isMounted) {
|
|
601
|
-
|
|
601
|
+
// #B381 — no pre-unlink here: removing the mount before re-creating it
|
|
602
|
+
// left a window where a sibling process booting the same project tree
|
|
603
|
+
// observed a missing link. gna.mount() is idempotent now (it keeps a
|
|
604
|
+
// correct link as-is and atomically replaces a wrong one), so forcing
|
|
605
|
+
// the mount call is enough.
|
|
606
|
+
// was: new _( project.path +'/'+ manifest.bundles[bundle].link ).rmSync();
|
|
602
607
|
isMounted = false;
|
|
603
608
|
}
|
|
604
609
|
if (!isMounted) {
|
|
@@ -711,6 +716,11 @@ gna.getProjectConfiguration = function (callback){
|
|
|
711
716
|
/**
|
|
712
717
|
* Mounts a bundle release directory into the project's bundles/ directory
|
|
713
718
|
* by creating required folders (bundles, tmp, cache) and symlinking the source.
|
|
719
|
+
* Idempotent and concurrency-safe (#B381): a link that already resolves to the
|
|
720
|
+
* source is kept untouched, a wrong or missing one is published atomically,
|
|
721
|
+
* and a concurrent identical creator is treated as success — so several
|
|
722
|
+
* processes may boot one shared project tree without racing each other's
|
|
723
|
+
* mounts.
|
|
714
724
|
* When `type` is omitted it defaults to `'dir'`.
|
|
715
725
|
*
|
|
716
726
|
* Also exposed as `process.mount`.
|
|
@@ -731,28 +741,21 @@ gna.mount = process.mount = function(bundlesPath, source, target, type, callback
|
|
|
731
741
|
|
|
732
742
|
//creating folders.
|
|
733
743
|
//use junction when using Win XP os.release == '5.1.2600'
|
|
744
|
+
// #B381 — create-if-missing WITHOUT the exists/mkdir two-step: two
|
|
745
|
+
// processes booting the same project tree raced the check-then-create,
|
|
746
|
+
// and the loser threw EEXIST out of the mount, uncaught. `recursive: true`
|
|
747
|
+
// never throws on an existing directory, so the race disappears.
|
|
734
748
|
var mountingPath = getPath('project') + '/bundles';
|
|
735
749
|
console.debug('mounting path: ', mountingPath);
|
|
736
|
-
|
|
737
|
-
new _(mountingPath).mkdirSync();
|
|
738
|
-
}
|
|
750
|
+
fs.mkdirSync(mountingPath, { recursive: true });
|
|
739
751
|
// /tmp
|
|
740
752
|
var tmpPath = getPath('project') + '/tmp';
|
|
741
753
|
console.debug('tmp path: ', tmpPath);
|
|
742
|
-
|
|
743
|
-
if ( !tmpPathObj.existsSync() ) {
|
|
744
|
-
tmpPathObj.mkdirSync();
|
|
745
|
-
}
|
|
746
|
-
tmpPathObj = null;
|
|
747
|
-
|
|
754
|
+
fs.mkdirSync(tmpPath, { recursive: true });
|
|
748
755
|
// cache
|
|
749
756
|
var cachePath = getPath('project') + '/cache';
|
|
750
757
|
console.debug('cache path: ', cachePath);
|
|
751
|
-
|
|
752
|
-
if ( !cachePathObj.existsSync() ) {
|
|
753
|
-
cachePathObj.mkdirSync();
|
|
754
|
-
}
|
|
755
|
-
cachePathObj = null;
|
|
758
|
+
fs.mkdirSync(cachePath, { recursive: true });
|
|
756
759
|
|
|
757
760
|
var sourceObj = new _(source);
|
|
758
761
|
var targetObj = new _(target);
|
|
@@ -762,14 +765,20 @@ gna.mount = process.mount = function(bundlesPath, source, target, type, callback
|
|
|
762
765
|
;
|
|
763
766
|
console.debug('[ FRAMEWORK ][ MOUNT ] Source: ', source);
|
|
764
767
|
console.debug('[ FRAMEWORK ][ MOUNT ] Checking before mounting ', target, isTargetFound, bundlesPath);
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
768
|
+
// #B381 — the early unlink is gone: it opened the absent-name window at
|
|
769
|
+
// the TOP of the mount (spanning the whole createPathSync walk below), and
|
|
770
|
+
// its catch called callback(err) WITHOUT returning, so a lost race (a
|
|
771
|
+
// sibling removing the link first) aborted the boot AND fell through into
|
|
772
|
+
// a second callback. ensureSymlinkSync() below replaces atomically instead.
|
|
773
|
+
// was:
|
|
774
|
+
// if ( isTargetFound ) {
|
|
775
|
+
// try {
|
|
776
|
+
// console.debug('[ FRAMEWORK ][ MOUNT ] removing old build ', target);
|
|
777
|
+
// fs.unlinkSync(target)
|
|
778
|
+
// } catch (err) {
|
|
779
|
+
// callback(err)
|
|
780
|
+
// }
|
|
781
|
+
// }
|
|
773
782
|
|
|
774
783
|
// hack to test none-dev env without building: in case you did not build your bundle, but you have the src available
|
|
775
784
|
if (!isSourceFound && !isDev) {
|
|
@@ -792,21 +801,24 @@ gna.mount = process.mount = function(bundlesPath, source, target, type, callback
|
|
|
792
801
|
}
|
|
793
802
|
|
|
794
803
|
if ( isSourceFound ) {
|
|
795
|
-
//
|
|
804
|
+
// #B381 — was: unlink-then-recreate on every restart ("will override
|
|
805
|
+
// existing each time you restart"), two non-atomic steps during which
|
|
806
|
+
// the mount name did not exist. Under two processes booting one shared
|
|
807
|
+
// project tree that window produced collisions on the contended names
|
|
808
|
+
// and killed the boot below. ensureSymlinkSync() keeps a correct link
|
|
809
|
+
// untouched, publishes a new one atomically (temp sibling + rename),
|
|
810
|
+
// and treats a concurrent identical creator as success.
|
|
796
811
|
gna.lib.generator.createPathSync(bundlesPath, function onPathCreated(err){
|
|
797
812
|
if (!err) {
|
|
798
813
|
try {
|
|
799
|
-
//
|
|
800
|
-
if ( targetObj.existsSync() ) {
|
|
801
|
-
|
|
802
|
-
}
|
|
814
|
+
// was:
|
|
815
|
+
// if ( targetObj.existsSync() ) {
|
|
816
|
+
// targetObj.rmSync();
|
|
817
|
+
// }
|
|
803
818
|
console.debug('[ FRAMEWORK ][ MOUNT ] Linking ['+ source +'] to [ '+ target +' ] ');
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
fs.symlinkSync(source, target);
|
|
808
|
-
}
|
|
809
|
-
// symlink created
|
|
819
|
+
new _(source).ensureSymlinkSync(target, type);
|
|
820
|
+
// symlink created (or kept / atomically replaced / adopted
|
|
821
|
+
// from a concurrent boot of the same tree)
|
|
810
822
|
callback(false);
|
|
811
823
|
|
|
812
824
|
} catch (err) {
|
|
@@ -817,17 +829,22 @@ gna.mount = process.mount = function(bundlesPath, source, target, type, callback
|
|
|
817
829
|
try { fs.writeSync(2, _mountMsg + '\n'); } catch (_e) { /* best-effort */ }
|
|
818
830
|
process.exit(1)
|
|
819
831
|
}
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
}
|
|
832
|
+
// #B381 — the recovery below was structurally unreachable
|
|
833
|
+
// (the `if (err)` above always fires inside a catch, so the
|
|
834
|
+
// exit is unconditional); the tolerance it intended now
|
|
835
|
+
// lives in ensureSymlinkSync()'s verify-then-accept path.
|
|
836
|
+
// was:
|
|
837
|
+
// if ( fs.existsSync(target) ) {
|
|
838
|
+
// var stats = fs.lstatSync(target);
|
|
839
|
+
// if ( stats.isDirectory() ) {
|
|
840
|
+
// var d = new _(target).rm( function(err){
|
|
841
|
+
// callback(err);
|
|
842
|
+
// })
|
|
843
|
+
// } else {
|
|
844
|
+
// fs.unlinkSync(target);
|
|
845
|
+
// callback(err)
|
|
846
|
+
// }
|
|
847
|
+
// }
|
|
831
848
|
}
|
|
832
849
|
} else {
|
|
833
850
|
console.error(err);
|
|
@@ -1762,6 +1779,29 @@ isBundleMounted(projects, bundlesPath, getContext('bundle'), function onBundleMo
|
|
|
1762
1779
|
console.warn('[transient-errors] config validation skipped: ' + (teErr.message || teErr));
|
|
1763
1780
|
}
|
|
1764
1781
|
|
|
1782
|
+
// #MAINT1 — `server.maintenance` boot-time shape check
|
|
1783
|
+
// (warn-only, NEVER fatal, exactly as #CE1 above: the
|
|
1784
|
+
// opt-in governs how a request RENDERS, so a bad value
|
|
1785
|
+
// must not refuse a boot). The engine-side reader
|
|
1786
|
+
// (lib.maintenance.resolveConf, boot-resolved in
|
|
1787
|
+
// core/server.js) independently falls back to the same
|
|
1788
|
+
// defaults per key — this lint exists so that fallback
|
|
1789
|
+
// is never SILENT. Per-key, not all-or-nothing: a bad
|
|
1790
|
+
// retryAfter must not disable the whole feature and
|
|
1791
|
+
// leave an operator believing the site is closed.
|
|
1792
|
+
try {
|
|
1793
|
+
var _mtBlock = null;
|
|
1794
|
+
try {
|
|
1795
|
+
_mtBlock = config.getInstance()[gna.core.startingApp][env].server.maintenance;
|
|
1796
|
+
} catch (mtConfErr) { _mtBlock = null; }
|
|
1797
|
+
var _mtWarnings = lib.maintenance.lintConf(_mtBlock);
|
|
1798
|
+
for (var _mtW = 0; _mtW < _mtWarnings.length; ++_mtW) {
|
|
1799
|
+
console.warn('[maintenance] ' + _mtWarnings[_mtW]);
|
|
1800
|
+
}
|
|
1801
|
+
} catch (mtErr) {
|
|
1802
|
+
console.warn('[maintenance] config validation skipped: ' + (mtErr.message || mtErr));
|
|
1803
|
+
}
|
|
1804
|
+
|
|
1765
1805
|
// setting default global middlewares
|
|
1766
1806
|
if ( typeof(instance.use) == 'function' ) {
|
|
1767
1807
|
|