gina 0.5.8 → 0.5.9
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 +8 -0
- package/README.md +5 -4
- package/ROADMAP.md +1 -0
- package/framework/v0.5.9/VERSION +1 -0
- package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -1
- package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +35 -35
- package/framework/v0.5.9/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.9/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.js +58 -12
- package/framework/{v0.5.8 → v0.5.9}/core/server.isaac.js +81 -1
- package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/add.js +7 -5
- package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/migrate.js +5 -3
- package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/remove.js +6 -4
- package/framework/{v0.5.8 → v0.5.9}/lib/index.js +8 -0
- package/framework/v0.5.9/lib/json-config-header/package.json +17 -0
- package/framework/v0.5.9/lib/json-config-header/src/main.js +113 -0
- package/framework/{v0.5.8 → v0.5.9}/lib/routing/src/main.js +0 -1
- package/framework/{v0.5.8 → v0.5.9}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +1 -1
- package/package.json +3 -3
- package/framework/v0.5.8/VERSION +0 -1
- package/framework/v0.5.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.8/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/AUTHORS +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/config.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/content.encoding +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/dev/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/gna.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/locales/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/mime.types +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/model/entity.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/model/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/router.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/server.express.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/server.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/status.codes +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/console.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/context.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/path.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/task.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/helpers/text.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/async/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/config.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/job/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/job-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/math/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/model.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/proc.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/session-store.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/shell.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/state.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/url/README.md +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/url/index.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/validator.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.8 → v0.5.9}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,14 @@ 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.5.9 - 2026-07-04
|
|
10
|
+
### Fixed
|
|
11
|
+
* Fixed `connector:add`, `connector:rm`, and `connector:migrate --fix` corrupting a `connectors.json` that carries a comment header. The scaffolded bundle template's example block contains a `{` inside a `//` comment, and the write-back split the file at the first raw `{` — which landed inside that comment, commenting out the JSON body's opening brace and dropping the rest of the header, so the file no longer parsed (`connector:list`, `connector:test`, and the bundle's own connector load then failed). The header/body split is now comment-aware and preserves the full comment header verbatim; a comment-free `connectors.json` rewrites byte-for-byte as before.
|
|
12
|
+
* Fixed a reverse-proxy host-context leak on workers that serve a mix of proxied and direct traffic (or several public hostnames): the server-side URL, redirect, and config resolvers (`self.getConfig()`, `self.redirect()`, server-rendered asset host resolution, and the per-request routing clone) now resolve the host of the request in hand rather than the host of the last proxied request the worker happened to serve. A direct or internal request — and concurrent requests to different public hosts on the same worker — no longer inherit a stale proxied host. Requests without a per-request proxy classification (the Express engine, released responses, and WebSocket-query callers) fall back to the previous worker-global behaviour, so nothing changes for single-public-host-per-worker deployments.
|
|
13
|
+
* Fixed a latent `ReferenceError` in server-side URL-property resolution for routes flagged with a redirect control: a leftover debug statement referenced an undefined variable and would throw whenever the redirect route `toUrl()` was resolved server-side. The stray debug statement has been removed.
|
|
14
|
+
### Security
|
|
15
|
+
* Fixed a browser-side internal-host information disclosure on reverse-proxied deployments. The client gina.config.hostname and the fetched /_gina/assets/routing.json no longer serialize each bundle's internal scheme://host:port to the browser — a proxied client now receives a public host-only origin and a host-stripped routing map, while direct host:port access stays byte-identical. This also fixes cross-bundle client getRoute(...).toUrl(), which previously resolved to the unreachable internal host on such deployments and now resolves same-origin.
|
|
16
|
+
|
|
9
17
|
## 0.5.8 - 2026-07-04
|
|
10
18
|
### Added
|
|
11
19
|
* `gina help <group>` now prints help for that command group (e.g. `gina help bundle` shows the bundle command reference), falling back to the top-level help for an unknown group.
|
package/README.md
CHANGED
|
@@ -42,11 +42,12 @@ open https://localhost:3100
|
|
|
42
42
|
|
|
43
43
|
> **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.)
|
|
44
44
|
|
|
45
|
-
## What's in 0.5.
|
|
45
|
+
## What's in 0.5.9
|
|
46
46
|
|
|
47
|
-
- **
|
|
48
|
-
- **
|
|
49
|
-
- **Fixed —
|
|
47
|
+
- **Security — reverse-proxied deployments no longer disclose a bundle's internal host to the browser (#B66).** The client `gina.config.hostname` and the fetched `/_gina/assets/routing.json` no longer serialize each bundle's internal `scheme://host:port` — a proxied client now receives a public host-only origin and a host-stripped routing map, while direct `host:port` access stays byte-identical. This also fixes cross-bundle client `getRoute(...).toUrl()`, which previously resolved to the unreachable internal host on such deployments and now resolves same-origin.
|
|
48
|
+
- **Fixed — server-side proxy host context is request-scoped (#B66).** The server-side URL, redirect, and config resolvers (`self.getConfig()`, `self.redirect()`, server-rendered asset host resolution, and the per-request routing clone) now resolve the host of the request in hand rather than the last proxied host the worker served. A worker that serves a mix of proxied and direct traffic — or several public hostnames — no longer inherits a stale proxied host. Single-public-host-per-worker deployments are unchanged.
|
|
49
|
+
- **Fixed — `connector:add` / `connector:rm` / `connector:migrate --fix` no longer corrupt a comment-headed `connectors.json`.** The header/body split is now comment-aware, so a `connectors.json` that carries a leading comment header (including the scaffolded example block) is preserved verbatim instead of being truncated into an unparseable file. A comment-free `connectors.json` still rewrites byte-for-byte as before.
|
|
50
|
+
- **Fixed — latent `ReferenceError` in server-side URL resolution for redirect routes.** A leftover debug statement referenced an undefined variable and would throw whenever a redirect-flagged route's `toUrl()` was resolved server-side; it has been removed.
|
|
50
51
|
|
|
51
52
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
52
53
|
|
package/ROADMAP.md
CHANGED
|
@@ -33,6 +33,7 @@ This roadmap covers planned features, architectural improvements, new connectors
|
|
|
33
33
|
| **Q3 2026** | `0.5.6` ✅ | AI-connector CLI suite — `connector:infer` (one-off inference · `--stream` NDJSON · `--raw`) + `connector:test` (CI readiness probe · `--connect` zero-token live check) · AI connector `stream()` + Inspector "AI stream" tab · application events in the Inspector — `self.emitEvent()` + a new "Events" tab, opt-in entity-event & connector-lifecycle bridges · `getModel()` exposes the AI `infer`/`stream` API · fixes: model-init fail-fast · corrupt `projects.json` registration skipped cleanly · DELETE-route regex flags + off-by-one crash · UTF-8 multipart upload filenames · native `<dialog>` popin close cleanup · Couchbase dynamic field-path placeholder · `project:import` additive across release targets · `gina stop` bundles-still-running notice |
|
|
34
34
|
| **Q3 2026** | `0.5.7` ✅ | Durable async-job stores — `jobs.store` (app.json) → `connectors.json` entry: SQLite (`node:sqlite`, zero new dependencies) · MongoDB (shared mongod, multi-pod) · Redis (`ioredis`, atomic per-state + expiry indexes, Redis Cluster via hash-tagged prefix); restart-durable, cross-process, fail-fast on an unbuildable store · opt-in failed-job retry (`maxAttempts` + exponential backoff; completion webhook fires exactly once) · npm 12 readiness (install + release tooling, `--allow-scripts=gina` guidance) · render-delegate concurrency fixes (production cross-request data bleed / wrong-controller error routing / cached-route 500) · `"connector": "redis"` entry no longer aborts boot · **Security**: static-asset path-traversal fix — resolver paths canonicalised and confined to their `statics.json` mapping target (404 on any escape, `%2F` / `%2e%2e` forms included) |
|
|
35
35
|
| **Q3 2026** | `0.5.8` ✅ | `connector:models` — list a configured AI connector's provider models (the read sibling of `connector:test --connect`) · per-group `gina help [<group>]` · **Fixed**: reverse-proxy host context request-scoped — `PROXY_HOST` / `PROXY_HOSTNAME` no longer freeze at the first proxied request (single-hop and multi-hop `X-Forwarded-Host` both handled; raw `host:port` unchanged) · CLI help polish (per-group help output, clean message for an unknown action, em-dash flag typos) |
|
|
36
|
+
| **Q3 2026** | `0.5.9` ✅ | **Security**: reverse-proxied deployments no longer disclose a bundle's internal `scheme://host:port` to the browser — the client `gina.config.hostname` and the fetched `/_gina/assets/routing.json` serve a public host-only origin and a host-stripped routing map to proxied clients (direct `host:port` access byte-identical), also fixing cross-bundle client `getRoute(...).toUrl()` which previously resolved to the unreachable internal host (#B66) · **Fixed**: the server-side URL / redirect / config resolvers request-scope the proxy host, so a worker serving mixed proxied + direct traffic (or several public hosts) no longer inherits a stale proxied host (#B66 S2b) · **Fixed**: `connector:add` / `connector:rm` / `connector:migrate --fix` no longer corrupt a comment-headed `connectors.json` · **Fixed**: a latent `ReferenceError` in server-side URL resolution for redirect-flagged routes |
|
|
36
37
|
| **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
|
|
37
38
|
| **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
|
|
38
39
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.5.9
|
|
@@ -5138,7 +5138,6 @@ function Routing() {
|
|
|
5138
5138
|
urlProps.hostname = config.envConf[bundle][env].hostname;
|
|
5139
5139
|
urlProps.host = config.envConf[bundle][env].host;
|
|
5140
5140
|
urlProps.webroot = config.envConf[bundle][env].server.webroot;
|
|
5141
|
-
console.debug("[self.getUrlProps][isProxyHost = "+ getContext('isProxyHost') +"] hostname ", config.envConf[bundle][env].hostname, vs, process.gina.PROXY_HOSTNAME);
|
|
5142
5141
|
}
|
|
5143
5142
|
|
|
5144
5143
|
return urlProps;
|
|
@@ -106,41 +106,41 @@ return u};e.toData=function(){if(k.excluded.length>0)for(var g=0,u=k.excluded.le
|
|
|
106
106
|
typeof module!=='undefined'&&module.exports?module.exports=FormValidatorUtil:typeof define==='function'&&define.amd&&define('lib/form-validator',[],function(){return FormValidatorUtil});
|
|
107
107
|
function Routing(){var n=typeof module!=='undefined'&&module.exports?!1:!0,F={allowedMethods:['get','post','put','delete'],reservedParams:['controle','file','title','namespace','path'],notFound:{},getInstance:function(p){return Routing.instance}};if(typeof Routing.initialized=='undefined')Routing.initialized=!0,Routing.instance=F,Routing._cached=[],Routing._cachedRoutes={},Routing._tries={};else return F=F.getInstance();F.allowedMethodsString=F.allowedMethods.join(',');var I=null,O=null,G=null;n?
|
|
108
108
|
(O&&typeof O=='function'||(O=require('lib/merge')),G&&typeof G=='function'||(G=require('lib/form-validator'))):(require('fs'),require('util'),require('../../inherits'),O=require('../../merge'),I=require(__dirname+'/../../../core/plugins')||getContext('gina').plugins,G=I.Validator);F.getUrlProps=function(p,k){var e={};if(n){var U=window.gina.config;e.hostname=U.hostname;typeof p!='undefined'&&(p=this.getRoute('webroot@'+p),e.hostname=p.hostname,e.host=p.host,e.webroot=p.webroot)}else U=getContext('gina').config,
|
|
109
|
-
typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),typeof p=='undefined'&&(p=U.bundle),typeof k=='undefined'&&(k=U.env),e.hostname=U.envConf[p][k].hostname,e.host=U.envConf[p][k].host,e.webroot=U.envConf[p][k].server.webroot
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
e.param.
|
|
119
|
-
|
|
120
|
-
'
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
'
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
'
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
'
|
|
142
|
-
|
|
143
|
-
|
|
109
|
+
typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),typeof p=='undefined'&&(p=U.bundle),typeof k=='undefined'&&(k=U.env),e.hostname=U.envConf[p][k].hostname,e.host=U.envConf[p][k].host,e.webroot=U.envConf[p][k].server.webroot;return e};F.cache=function(p,k,e,U,la){Routing._cached.indexOf(p)==-1&&(Routing._cached.length>=5E3&&F.invalidateCached(Routing._cached[0]),Routing._cached.push(p),Routing._cachedRoutes[p]={name:k,routing:e,params:U,methodParams:la})};
|
|
110
|
+
F.getCached=function(p,k){if(Routing._cached.indexOf(p)>-1){var e=Routing._cachedRoutes[p],U=k.method.toLowerCase();p=JSON.clone(e.routing);e={method:U,requirements:p.requirements,namespace:p.namespace||void 0,url:safeDecodeURI(k.url),rule:p.originalRule||e.name,param:p.param,middleware:p.middleware,bundle:p.bundle,isXMLRequest:k.isXMLRequest,isWithCredentials:k.isWithCredentials};typeof p.rule=='undefined'&&typeof e.rule!='undefined'&&(p.rule=e.rule);typeof p.cache!='undefined'&&(e.cache=p.cache);
|
|
111
|
+
typeof p.csrfExempt!='undefined'&&(e.csrfExempt=p.csrfExempt);typeof p.culturePrefix!='undefined'&&(e.culturePrefix=p.culturePrefix);typeof p.queryTimeout!='undefined'&&(e.queryTimeout=parseTimeout(p.queryTimeout));return F.compareUrls(e,p.url,k)}return null};F.invalidateCached=function(p){Routing._cached.indexOf(p)>-1&&(Routing._cached.splice(Routing._cached.indexOf(p),1),delete Routing._cachedRoutes[p])};F.compareUrls=async function(p,k,e,U,la){typeof e=='undefined'&&(e={routing:{}});if(/,/.test(k)){var fa=
|
|
112
|
+
0;k=k.split(/,/g);for(var x=k.length,v={past:!1,request:e};fa<x&&!v.past;)v=await C(p,k[fa],e,U,la),++fa;return v}return await C(p,k,e,U,la)};var C=async function(p,k,e,U,la){var fa=null;try{fa=p.url.split(/\//)}catch(P){console.warn(P),fa=['']}k=k.split(/\//);var x=0,v=0,Y=k.length,l=0,g={},u=0,J=e.method.toLowerCase(),N='get';try{N=p.method.toLowerCase()}catch(P){}var q=!1;if(typeof p.requirements!='undefined'&&/get|delete/i.test(J)&&typeof e[J]!='undefined'||typeof p.requirements!='undefined'&&
|
|
113
|
+
/get/i.test(J)&&/delete/i.test(N)){/get/i.test(J)&&/delete/i.test(N)&&(J=N);if(/^(delete)$/i.test(J)&&fa.length===k.length){typeof e[J]=='undefined'&&(e[J]={});for(let P=0,ha=k.length;P<ha;P++){if(fa[P]===k[P]){++l;continue}N=k[P].substring(1);if(typeof p.requirements[N]=='undefined')continue;N=p.requirements[N];q='';if(/^\//.test(N))q=N.substring(N.lastIndexOf('/')+1),N=N.substring(1,N.lastIndexOf('/'));else if(/^validator::/.test(N)&&await X(k[P],fa[P],p,e,U,la)){++l;continue}/^:/.test(k[P])&&typeof N!=
|
|
114
|
+
'undefined'&&(new RegExp(N,q)).test(fa[P])&&(++l,e[J][k[P].substring(1)]=fa[P])}q=!0}for(var z in e[J])typeof p.requirements[z]!='undefined'&&k.indexOf(':'+z)<0&&(k[v]=':'+z,++v,fa[x]=e[J][z],++x,q||fa.length!==k.length||++Y)}if(!q&&fa.length===k.length)for(;u<Y;++u)fa[u]===k[u]?++l:l==u&&/:/.test(k[u])&&await X(k[u],fa[u],p,e,U,la)&&++l;if(typeof p.requirements!='undefined'&&J==p.method.toLowerCase()&&!q&&l>=Y)for(z=Object.getOwnPropertyNames(p.requirements),x=0,k.join(',').match(/:[-_a-z0-9]+/g);x<
|
|
115
|
+
z.length;){v=z[x];if(typeof p.param[v]=='undefined'&&/^validator::/i.test(p.requirements[v])){if(k.length!=fa.length)break;var M=k.join(',').match(/:[-_a-z0-9]+/g);let P=p.requirements[v];u={};N={};q={};try{N=JSON.parse(P.split(/::/).splice(1)[0].replace(/([^:"\s+](\w+)):/g,'"$1":').replace(/([^:"\s+](\w+))\s+:/g,'"$1":'))}catch(ha){throw ha;}if(typeof N.query!='undefined'&&typeof N.query.data!='undefined'){u=N.query.data;for(let ha in u)M.indexOf(u[ha])<0&&delete u[ha];for(let ha=0,ma=k.length;ha<
|
|
116
|
+
ma;ha++){if(!/^:/.test(k[ha]))continue;M=k[ha].replace(/^:/,'');M!=''&&typeof fa[ha]!='undefined'&&(u[M]=fa[ha],typeof e.params[M]=='undefined'&&(e.params[M]=fa[ha]))}}u=O(u,JSON.clone(e[J])||{});typeof u[v]=='undefined'&&(u[v]=null);q[v]=N;_validator=n?new G(u):new G('routing',u,null,q);if(N.count()==0){console.error('Route validation failed '+p.rule);--l;x++;continue}for(let ha in N)if(typeof N[ha].data!='undefined'&&(N[ha].data=u),q=Array.isArray(N[ha])?await _validator[v][ha].apply(_validator[v],
|
|
117
|
+
N[ha]):await _validator[v][ha](N[ha],e,U,la),!q.isValid&&(--l,typeof q.error!='undefined'))throw q.error;}x++}g.past=l===Y?!0:!1;g.past&&(e.routing=Z(p,e[J]),g.request=e);return g},X=async function(p,k,e,U,la,fa){var x=-1,v=p.match(/:\w+/g);x=new RegExp(p,'g');var Y=null,l=null,g=null;Y=!1;var u=Y=l=l=null,J=null,N=U.method.toLowerCase();if(!v.length)return!1;e.param.path&&x.test(e.param.path)&&(e.param.path=e.param.path.replace(x,k));e.param.namespace&&x.test(e.param.namespace)&&(e.param.namespace=
|
|
118
|
+
e.param.namespace.replace(x,k));typeof e.param.file!='undefined'&&/:/.test(e.param.file)&&(Y=new RegExp('(:'+p+'/|:'+p+'$)','g'),E.variable=k,e.param.file=e.param.file.replace(Y,E),Y=null);e.param.title&&x.test(e.param.title)&&(e.param.title=e.param.title.replace(x,k));if(v.length==1){Y=new RegExp(v[0]);x=v.indexOf(p)>-1?v.indexOf(p):!1;x===!1&&p.match(Y)&&(x=0);if(x===!1)return x;if(e.method.toLowerCase()!==N)return!1;typeof U[N]=='undefined'&&(U[N]={});g=v[x].substring(1);if(typeof e.requirements==
|
|
119
|
+
'undefined'||typeof e.requirements[g]=='undefined')return typeof e.param[g]!='undefined'&&typeof U.params!='undefined'&&k?(U.params[g]=k,typeof U[N][g]=='undefined'&&(U[N][g]=k),!0):!1;x=e.requirements[g];if(/^\//.test(x))Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k);else if(/^validator::/.test(x)&&k){l={};Y={};u={};J='';p.replace(new RegExp('[^'+g+']','g'),function(){J+=arguments[0]});l[g]=k.replace(new RegExp(J,'g'),'');try{Y=JSON.parse(x.split(/::/).splice(1)[0].replace(/([^:"\s+](\w+)):/g,
|
|
120
|
+
'"$1":').replace(/([^:"\s+](\w+))\s+:/g,'"$1":'))}catch(ha){throw ha;}typeof Y.query!='undefined'&&typeof Y.query.data!='undefined'&&p==Y.query.data[Object.keys(Y.query.data)[0]]&&(Y.query.data[Object.keys(Y.query.data)[0]]=l[g],U.params[g]=l[g]);u[g]=Y;l=new G('routing',l,null,u);if(Y.count()==0)return console.error('Route validation failed '+e.rule),!1;for(var q in Y)Array.isArray(Y[q])?await l[g][q].apply(l[g],Y[q]):await l[g][q](Y[q],U,la,fa);Y=l.isValid()}else Y=(new RegExp(e.requirements[g])).test(k);
|
|
121
|
+
if(typeof e.param[g]!='undefined'&&typeof e.requirements!='undefined'&&typeof e.requirements[g]!='undefined'&&typeof U.params!='undefined'&&Y){U.params[g]=k;if(typeof U[N][g]=='undefined'){switch(k){case 'null':k=null;break;case 'false':k=!1;break;case 'true':k=!0}U[N][g]=k}return!0}}else{if(typeof e.requirements=='undefined')return!1;la=e.url;fa=U.url;N={};u='';var z=!1,M=0;q=0;for(var P=fa.length;q<P;++q)if(fa.charAt(q)!=la.charAt(M)||z){if(u=='')z=!0,u+=fa.charAt(q);else if(q>la.indexOf(v[0])+
|
|
122
|
+
v[0].length){x=e.requirements[v[0]];k=u.substring(0,u.length);if(/^\//.test(x))Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k);else if(/^validator::/.test(x)){l={};Y={};u={};J='';p.replace(new RegExp('[^'+g[0]+']','g'),function(){J+=arguments[0]});l[g[0]]=k.replace(new RegExp(J,'g'),'');Y=JSON.parse(x.split(/::/).splice(1)[0].replace(/([^\W+ true false])+(\w+)/g,'"$&"'));u[g[0]]=Y;l=new G('routing',l,null,u);for(let ha in Y)if(Array.isArray(Y[ha]))l[g[0]][ha].apply(l[g[0]],
|
|
123
|
+
Y[ha]);else l[g[0]][ha](Y[ha]);Y=l.isValid()}else Y=(new RegExp(e.requirements[g[0]])).test(k);if(Y)N[v[0].substring(1)]=k;else return!1;u='';z=!1;M=la.indexOf(v[0])+v[0].length;--q;v.splice(0,1)}else u+=fa.charAt(q),++M;if(q==P-1)if(x=e.requirements[v[0]],k=u.substring(0,u.length),/^\//.test(x)?(Y=x.match(/\/(.*)\//).pop(),l=x.replace('/'+Y+'/',''),Y=(new RegExp(Y,l)).test(k)):Y=(new RegExp(e.requirements[g])).test(k),Y)N[v[0].substring(1)]=k;else return!1}else++M;if(N.count()==v.length){g=null;
|
|
124
|
+
for(g in N){switch(N[g]){case 'null':N[g]=null;break;case 'false':N[g]=!1;break;case 'true':N[g]=!0}U.params[g]=N[g]}return!0}}return!1},E=function(p){return/\/$/.test(p)?E.variable+'/':E.variable},Z=function(p,k){var e=null,U,la=p.url,fa=null;for(fa in p.param)if((typeof k=='undefined'||typeof k[fa]!='undefined')&&/^:/.test(p.param[fa])){var x=p.param[fa].substring(1);if(typeof k!='undefined'&&typeof k[x]!='undefined'){var v=new RegExp('(:'+x+'/|:'+x+'$)','g');typeof p.param.path!='undefined'&&/:/.test(p.param.path)&&
|
|
125
|
+
(p.param.path=p.param.path.replace(v,k[x]));typeof p.param.title!='undefined'&&/:/.test(p.param.title)&&(p.param.title=p.param.title.replace(v,k[x]));typeof p.param.namespace!='undefined'&&/:/.test(p.param.namespace)&&(p.param.namespace=p.param.namespace.replace(v,k[x]));typeof p.param.file!='undefined'&&/:/.test(p.param.file)&&(E.variable=k[x],p.param.file=p.param.file.replace(v,E));if(/,/.test(p.url)){e=p.url.split(/,/g);var Y=0;for(U=e.length;Y<U;++Y)E.variable=k[x],e[Y]=e[Y].replace(v,E);p.url=
|
|
126
|
+
e.join(',')}else E.variable=k[x],p.url=p.url.replace(v,E)}}if(e){Y=0;U=e.length;la=la.split(/,/g);var l=0;for(p.urlIndex=0;Y<U;++Y)if(e=0,v=la[0].match(/:[-_a-z0-9]+/ig)){fa=0;for(x=v.length;fa<x;fa++){var g=v[fa].substring(1);typeof k[g]!='undefined'&&k[g]&&e++}e>l&&(l=e,p.urlIndex=Y)}}return p};F.getRoute=function(p,k,e){var U=null,la=!1;n?(window.location.port||window.location.hostname!=window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')||(la=!0,window.gina.config.hostname=
|
|
127
|
+
window.gina.config.hostname.replace(/^(https|http|wss|ws):\/\//,'').replace(/:\d+$/,'')),U=window.gina.config):(U=getContext('gina').config,typeof getContext('argvFilename')!='undefined'&&(U.getRouting=getContext('gina').Config.instance.getRouting),la=getContext('isProxyHost'));var fa=U.env||GINA_ENV,x=null,v=U.bundle;/@/.test(p)||typeof v=='undefined'||v==null||(p=p.toLowerCase(),p+='@'+v);if(/@/.test(p)){var Y=p.replace(/(.*):\/\//,'').split(/@/);v=Y[1];/\/(.*)$/.test(p)&&(x=p.replace(/(.*):\/\//,
|
|
128
|
+
'').split(/\/(.*)$/)[1],v=v.replace(/\/(.*)$/,''),fa=x||fa);p=Y[0].toLowerCase()+'@'+v}v=U.getRouting(v,fa);if(typeof v[p]=='undefined')throw Error('[ RoutingHelper::getRouting(rule, params) ] : `'+p+'` not found !');x=JSON.clone(v[p]);Y=null;x=Z(x,k);(x.isProxyHost=la)?(x.proxy_hostname=n?window.location.protocol+'//'+document.location.hostname:process.gina.PROXY_HOSTNAME||U.envConf._proxyHostname,x.proxy_host=x.proxy_hostname.replace(/^(https|http):\/\//,'')):n||typeof process.gina.PROXY_HOSTNAME==
|
|
129
|
+
'undefined'||(x.proxy_hostname=process.gina.PROXY_HOSTNAME,x.proxy_host=x.proxy_hostname.replace(/^(https|http):\/\//,''),console.debug('[getRoute#2]['+la+'] process.gina.PROXY_HOSTNAME ('+process.gina.PROXY_HOSTNAME+') VS config.envConf._proxyHostname ('+U.envConf._proxyHostname+')'));/,/.test(x.url)&&(typeof x.urlIndex!='undefined'&&(e=x.urlIndex,delete x.urlIndex),e=typeof e!='undefined'?e:0,x.url=x.url.split(/,/g)[e]);/\/$/.test(x.url)&&x.url!='/'&&(x.url=x.url.substring(0,x.url.length-1));if(/GET/i.test(x.method)&&
|
|
130
|
+
typeof k!='undefined'){e='?';U=v[p].url;la=[];v=0;for(let l in x.param)F.reservedParams.indexOf(l)>-1||(new RegExp(x.param[l])).test(U)||typeof k[l]=='undefined'||(e+=l+'='+encodeRFC5987ValueChars(k[l])+'&',la[v]=k[l],++v);for(let l in k)F.reservedParams.indexOf(l)>-1||typeof x.requirements[l]!='undefined'||la.indexOf(l)>-1||(e=typeof k[l]=='object'?e+(l+'='+encodeRFC5987ValueChars(JSON.stringify(k[l]))+'&'):e+(l+'='+k[l]+'&'));v=la=U=null;e.length>1&&(e=e.substring(0,e.length-1),x.url+=e);e=null}x.toUrl=
|
|
131
|
+
function(l){var g=null;/^redirect$/i.test(this.param.control)&&(g=F.getUrlProps(this.bundle,fa||GINA_ENV));var u=this.webroot||g.webroot;g=''+this.hostname||''+g.hostname;var J=''+this.url;this.isProxyHost&&(g=''+this.proxy_hostname);this.url=typeof l!='undefined'&&/^true$/i.test(l)?J.replace(new RegExp('^'+u),'/'):J.replace(new RegExp('^('+u+'|/$)'),u);return g+this.url};x.request=function(l,g){var u=null,J=null;typeof arguments[arguments.length-1]=='function'&&(u=arguments[arguments.length-1]);
|
|
132
|
+
typeof arguments[2]=='object'&&(J=arguments[2]);var N=this.webroot||J.webroot,q=this.hostname||J.hostname;J=typeof l!='undefined'&&l==1?path.replace(N,'/'):this.url||J.url;/^\//.test(J)&&(J=q+J);q=/^https/.test(q)?'https':'http';n?window.open(J,typeof g!='undefined'&&typeof g.target!='undefined'?g.target:'_self'):(typeof g.agent=='undefined'&&(g.agent=!1),q=require(''+q),N=function(z){var M='',P=!1;z.on('data',function(ha){M+=ha});z.on('error',function(ha){P='Failed to get mail content';ha&&typeof ha.stack!=
|
|
133
|
+
'undefined'?P+=ha.stack:typeof ha=='string'&&(P+='\n'+ha)});z.on('end',function(){if(/^\{/.test(M))try{M=JSON.parse(M),typeof M.error!='undefined'&&(P=JSON.clone(M),M=null)}catch(ha){P=ha}P?u(P):u(!1,M)})},u?q.get(J,g,N):q.get(J,g))};!/:/.test(x.url)||/:d+\//.test(x.url)||/:\/\//.test(x.url)||(k=x.url.match(/(:(.*)\/|:(.*)$)/g).map(function(l){return l.replace(/\//g,'')}).join(', '),Y='[ RoutingHelper::getRoute(rule[, bundle, method]) ] : route [ %r ] param placeholder not defined: `'+x.url+'` !\n Check your route description to compare requirements against param variables [ '+
|
|
134
|
+
k+']',Y=Y.replace(/%r/,p),p=Error(Y),console.warn(p),Y=p=k=null);return x};F.getRouteByUrl=function(p,k,e,U,la){arguments.length==2&&typeof arguments[1]!='undefined'&&arguments[1]&&F.allowedMethods.indexOf(arguments[1].toLowerCase())>-1&&(e=arguments[1],k=void 0);var fa=null,x=null,v=null,Y=null,l=null,g=null;if(/#/.test(p)&&p.length>1){var u=p.split(/#/);p=u[0];l='#'+u[1];u=null}arguments.length==1&&typeof arguments[0]!='undefined'&&(/^(https|http)/i.test(p)||/^\//.test(p)||(p='/'+p),fa='/'+p.split(/\//g)[1],
|
|
135
|
+
n&&(Y=gina.config.reverseRouting,v=gina.config.routing),typeof Y[fa]!='undefined'&&(u=v[Y[fa]],k=u.bundle,fa=u.webroot,g=u.hostname,u=null));la=typeof arguments[arguments.length-1]!='boolean'?!1:arguments[arguments.length-1];var J=!1,N=null,q=Y=N=Y=null;u=typeof e!='undefined'?!0:!1;n?(N=window.gina.config,k=typeof k!='undefined'?k:N.bundle,Y=N.env,v=N.routing||N.getRouting(k),Y=N.reverseRouting,isXMLRequest=typeof isXMLRequest!='undefined'?isXMLRequest:!1,g=g||N.hostname,fa=fa||N.webroot,U={routing:{},
|
|
136
|
+
method:e,params:{},url:p},k&&(U.bundle=k)):(N=getContext('gina').config,k=typeof k!='undefined'?k:N.bundle,Y=N.env,v=N.getRouting(k),g=N.envConf[k][Y].hostname,fa=N.envConf[k][Y].server.webroot,U||={routing:{},isXMLRequest:!1,method:typeof e!='undefined'?e.toLowerCase():'get',params:{},url:p},la&&(U.method=e),isXMLRequest=U.isXMLRequest||!1);N=p.replace(new RegExp('^('+g+'|'+g.replace(/:\d+/,'')+')'),'');typeof U.routing.path=='undefined'&&(U.routing.path=safeDecodeURI(N));e=typeof e!='undefined'?
|
|
137
|
+
e.toLowerCase():'get';u&&(U.originalMethod=U.method,U.method=e,U.routing.path=safeDecodeURI(N));U.method||(U.method=e);Y={};fa=new RegExp(e,'i');g=null;for(z in v){if(typeof v[z].param=='undefined')break;if(v[z].bundle==k&&(g=v[z].method,/,/.test(g)&&fa.test(g)&&(g=U.method),typeof v[z].method=='undefined'||fa.test(g))){Y={method:g,requirements:v[z].requirements,namespace:v[z].namespace||void 0,url:safeDecodeURI(N),rule:v[z].originalRule||z,param:JSON.clone(v[z].param),middleware:JSON.clone(v[z].middleware),
|
|
138
|
+
bundle:v[z].bundle,isXMLRequest};try{if(q=F.compareUrls(Y,v[z].url,U),q.past){x=JSON.clone(v[z]);x.name=z;x.param=Y.param;J=!0;q={};break}}catch(M){throw Error('Route [ '+z+' ] needs your attention.\n'+M.stack);}}}if(J)return/\/$/.test(p)&&p!='/'&&(p=p.substring(0,p.length-1)),l&&(p+=l),x.url=p,x.toUrl=function(M){var P=this.webroot,ha=this.hostname,ma=this.url;this.url=typeof M!='undefined'&&M==1?ma.replace(P,'/'):ma;return ha+this.url},x;if(n){var z=!1;if(p=='#'&&/GET/i.test(e)&&u||/^404:/.test(p))p=
|
|
139
|
+
location.pathname,z=!0;typeof F.notFound=='undefined'&&(F.notFound={});l=null;x='[ RoutingHelper::getRouteByUrl(rule[, bundle, method]) ] : route [ %r ] is called but not found inside your view: `'+p+'` !';if((l=(l=gina.hasPopinHandler&&gina.popinIsBinded?gina.popin.getActivePopin().target.innerHTML.match(/404:\[\w+\][a-z 0-9-_@]+/):document.body.innerHTML.match(/404:\[\w+\][a-z 0-9-_@]+/))&&l.length>0?l[0]:null)&&u&&z)return z=l.match(/\[\w+\]/)[0],l=l.replace('404:'+z,z.replace(/\[|\]/g,'')+'::'),
|
|
140
|
+
x=x.replace(/%r/,l.replace(/404:\s+/,'')),typeof F.notFound[l]=='undefined'?F.notFound[l]={count:1,message:x}:u&&typeof F.notFound[l]!='undefined'&&++F.notFound[l].count,!1;if((z=gina.config.reverseRouting[p]||null)&&typeof z!='undefined'&&z.split(/@(.+)$/)[1]==k)return l=z,typeof F.notFound[l]=='undefined'?(x=x.replace(/%r/,e.toUpperCase()+'::'+z),F.notFound[l]={count:1,message:x}):u&&typeof F.notFound[l]!='undefined'&&++F.notFound[l].count,!1;l=F.compareUrls(Y,p,U)||null;l.past&&u&&(l=e.toUpperCase()+
|
|
141
|
+
'::'+l.request.routing.rule,typeof F.notFound[l]=='undefined'?x=x.replace(/%r/,l):++F.notFound[l].count);return!1}console.warn(Error('[ RoutingHelper::getRouteByUrl(rule[, bundle, method, request]) ] : route not found for url: `'+p+'` !').stack);return!1};F.buildTrie=function(p,k){if(!n){var e=require('./radix'),U=e.createNode(),la;for(la in p){var fa=p[la];if(fa&&typeof fa==='object'&&fa.bundle===k){fa=Array.isArray(fa.url)?fa.url:String(fa.url).split(',');for(var x=0;x<fa.length;x++){var v=fa[x].trim();
|
|
142
|
+
v&&e.insert(U,v,la)}}}Routing._tries[k]=U}};F.lookupTrie=function(p,k){return Routing._tries&&Routing._tries[k]?require('./radix').lookup(Routing._tries[k],p):null};return F}typeof module!=='undefined'&&module.exports?(typeof console.err=='undefined'&&(console=require('../../logger')),module.exports=Routing()):typeof define==='function'&&define.amd&&define('lib/routing',['require','lib/form-validator','lib/merge'],function(){return Routing()});
|
|
143
|
+
function registerEvents(n,F){typeof gina=='undefined'&&typeof window.gina!='undefined'&&(gina=window.gina);gina.registeredEvents[n]=F}function mergeEventProps(n,F){for(let I in F)typeof n[I]=='undefined'&&(n[I]=F[I]);return n}
|
|
144
144
|
function addListener(n,F,I,O){var G=function(E,Z,p,k){typeof E.event!='undefined'&&E.event.isTouchSupported&&/^(click|mouseout|mouseover)/.test(p)&&E.event[p].indexOf(Z)==-1&&(E.event[p][E.event[p].length]=Z);typeof Z!='undefined'&&Z!=null?Z.addEventListener?Z.addEventListener(p,k,!1):Z.attachEvent&&Z.attachEvent('on'+p,k):E.customEvent.addListener(p,k);gina.events[p]=typeof Z.id!='undefined'&&typeof Z.id!='object'?Z.id:Z.getAttribute('id')},C=0,X=null;if(Array.isArray(I))for(X=I.length;C<X;C++)G(n,
|
|
145
145
|
F,I[C],O);else if(Array.isArray(F))for(C=0,X=F.length;C<X;C++){let E=/\.$/.test(I)?I+F[C].id:I;G(n,F[C],E,O)}else I=/\.$/.test(I)?I+F.id:I,G(n,F,I,O)}
|
|
146
146
|
function triggerEvent(n,F,I,O,G){if(typeof F!='undefined'&&F!=null){var C=!1;window.CustomEvent||document.createEvent?(window.CustomEvent?n=new CustomEvent(I,{detail:O,bubbles:!0,cancelable:!0,target:F}):(n=document.createEvent('HTMLEvents'),n.detail=O,n.target=F,n.initEvent(I,!0,!0),n.eventName=I),G&&(n=mergeEventProps(n,G)),typeof n.defaultPrevented!='undefined'&&n.defaultPrevented&&(C=n.defaultPrevented),C||F.dispatchEvent(n)):document.createEventObject&&(n=document.createEventObject(),n.srcElement.id=
|
|
@@ -512,11 +512,19 @@ function SuperController(options) {
|
|
|
512
512
|
// && /^true$/i.test(req.headers['x-nginx-proxy'])
|
|
513
513
|
// ) ? true : false;
|
|
514
514
|
// setContext('isProxyHost', isProxyHost);
|
|
515
|
-
|
|
515
|
+
// #B66 S2b — the routing-clone gate (drives the _proxyHostname derivation
|
|
516
|
+
// + the per-route host rewrite below) AND the browser-whispered proxy host
|
|
517
|
+
// (page.environment.proxyHost/proxyHostname -> gina.config.* via loader.js)
|
|
518
|
+
// read THIS request's per-request #B65 classification (local.req slots)
|
|
519
|
+
// instead of the sticky worker-global latch, so a mixed proxied+direct (or
|
|
520
|
+
// concurrent multi-host) worker resolves the request in hand, not the last
|
|
521
|
+
// proxied global. The worker-global stays the fallback for req-less/Express
|
|
522
|
+
// paths that never set the slots.
|
|
523
|
+
var isProxyHost = ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost : ( getContext('isProxyHost') || false );
|
|
516
524
|
set('page.environment.isProxyHost', isProxyHost);
|
|
517
525
|
if ( /^true$/.test(isProxyHost) ) {
|
|
518
|
-
set('page.environment.proxyHost', process.gina.PROXY_HOST);
|
|
519
|
-
set('page.environment.proxyHostname', process.gina.PROXY_HOSTNAME);
|
|
526
|
+
set('page.environment.proxyHost', ( local.req && local.req._ginaProxyHost ) ? local.req._ginaProxyHost : process.gina.PROXY_HOST);
|
|
527
|
+
set('page.environment.proxyHostname', ( local.req && local.req._ginaProxyHostname ) ? local.req._ginaProxyHostname : process.gina.PROXY_HOSTNAME);
|
|
520
528
|
}
|
|
521
529
|
|
|
522
530
|
var _config = ctx.config.envConf[options.conf.bundle][process.env.NODE_ENV];
|
|
@@ -553,7 +561,24 @@ function SuperController(options) {
|
|
|
553
561
|
// }
|
|
554
562
|
// }
|
|
555
563
|
|
|
556
|
-
|
|
564
|
+
// #B66 — the hostname whispered to the browser (gina.config.hostname).
|
|
565
|
+
// On a proxied deployment (per-request #B65 classification) whisper the
|
|
566
|
+
// PUBLIC host-only origin (scheme://public-host, port-less — the webroot is
|
|
567
|
+
// whispered separately below) instead of the bundle's INTERNAL
|
|
568
|
+
// scheme://host:port(+webroot). This closes an information-disclosure AND
|
|
569
|
+
// lets the browser routing self-check flip isProxyHost=true (it cannot while
|
|
570
|
+
// the whispered value carries a port/webroot the self-check can't strip), so
|
|
571
|
+
// cross-bundle toUrl resolves same-origin. The internal `hostname` var above
|
|
572
|
+
// is left byte-identical — it still feeds _proxyHostname + the routing clone
|
|
573
|
+
// below. RAW (direct host:port) whispers the internal value, byte-identical.
|
|
574
|
+
// `_ginaProxyHostname` is the per-request #B65 slot (host-only, forwarded
|
|
575
|
+
// scheme); per-request (NOT a process-global) so it can't leak across a mix
|
|
576
|
+
// of proxied + direct requests. See server.isaac.js for the writer.
|
|
577
|
+
var _publicHostname = hostname;
|
|
578
|
+
if ( local.req && local.req._ginaIsProxyHost === true && local.req._ginaProxyHostname ) {
|
|
579
|
+
_publicHostname = local.req._ginaProxyHostname;
|
|
580
|
+
}
|
|
581
|
+
set('page.environment.hostname', _publicHostname);
|
|
557
582
|
// Updating _config.rootDomain - 2024/04/15
|
|
558
583
|
// _config.rootDomain = domainLib.getRootDomain(hostname).value;
|
|
559
584
|
|
|
@@ -970,7 +995,10 @@ function SuperController(options) {
|
|
|
970
995
|
, rLen = resArr.length
|
|
971
996
|
, obj = null
|
|
972
997
|
, str = ''
|
|
973
|
-
|
|
998
|
+
// #B66 S2b — read THIS request's per-request #B65 proxy classification
|
|
999
|
+
// (slot) instead of the sticky worker-global latch; worker-global stays
|
|
1000
|
+
// the fallback for req-less/Express paths that never set the slot.
|
|
1001
|
+
, isProxyHost = ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost : ( getContext('isProxyHost') || false )
|
|
974
1002
|
, requestHost = ( /http\/2/.test(local.options.conf.server.protocol) )
|
|
975
1003
|
? local.req.headers[':host']
|
|
976
1004
|
: local.req.headers.host
|
|
@@ -999,7 +1027,9 @@ function SuperController(options) {
|
|
|
999
1027
|
&& !isSpecialCase
|
|
1000
1028
|
) {
|
|
1001
1029
|
|
|
1002
|
-
|
|
1030
|
+
// #B66 S2b — last-resort host fallback prefers THIS request's slot over the
|
|
1031
|
+
// worker-global (local.req is guaranteed here — headers are dereferenced above).
|
|
1032
|
+
hostname = scheme + '://'+ (local.req.headers.host||local.req.headers[':host']||local.req._ginaProxyHost||process.gina.PROXY_HOST);
|
|
1003
1033
|
|
|
1004
1034
|
// replaced: /^(80|443)$/ + new RegExp(requestPort+'$') — use string methods (#P1, #P12)
|
|
1005
1035
|
if (
|
|
@@ -2203,12 +2233,18 @@ function SuperController(options) {
|
|
|
2203
2233
|
typeof(local.req.headers['x-nginx-proxy']) != 'undefined'
|
|
2204
2234
|
&& String(local.req.headers['x-nginx-proxy']).toLowerCase() === 'true'
|
|
2205
2235
|
||
|
|
2206
|
-
|
|
2236
|
+
// #B66 S2b — the freeze-prone catch-all term: prefer THIS request's
|
|
2237
|
+
// per-request #B65 classification (slot) over the worker-global "has this
|
|
2238
|
+
// worker ever seen a proxy" latch, so a raw/direct request on a worker
|
|
2239
|
+
// that previously served a proxied one is not misclassified as proxied.
|
|
2240
|
+
// Worker-global stays the fallback for req-less/Express paths (no slot).
|
|
2241
|
+
( ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost === true : typeof(process.gina.PROXY_HOSTNAME) != 'undefined' )
|
|
2207
2242
|
) ? true : false;
|
|
2208
2243
|
|
|
2209
2244
|
// var isProxyHost = getContext('isProxyHost');
|
|
2245
|
+
// #B66 S2b — redirect target host prefers THIS request's slot over the worker-global.
|
|
2210
2246
|
var hostname = (isProxyHost)
|
|
2211
|
-
? process.gina.PROXY_HOSTNAME
|
|
2247
|
+
? ( ( local.req && local.req._ginaProxyHostname ) ? local.req._ginaProxyHostname : process.gina.PROXY_HOSTNAME )
|
|
2212
2248
|
: ctx.config.envConf[bundle][env].hostname;
|
|
2213
2249
|
|
|
2214
2250
|
|
|
@@ -4952,13 +4988,23 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
4952
4988
|
tmp = JSON.clone(local.options.conf);
|
|
4953
4989
|
}
|
|
4954
4990
|
|
|
4991
|
+
// #B66 S2b — prefer THIS request's per-request proxy classification (the
|
|
4992
|
+
// #B65 slots on local.req) over the sticky worker-global latch, so a mixed
|
|
4993
|
+
// proxied+direct worker (or a concurrent request to a different public host)
|
|
4994
|
+
// resolves the host for the request in hand, not the last-proxied global.
|
|
4995
|
+
// getConfig is reachable req-less (ws-query, released-response, the async
|
|
4996
|
+
// health probe) AND under the Express engine (which never sets the slots),
|
|
4997
|
+
// so the worker-global stays the fallback whenever the slot is absent.
|
|
4998
|
+
var _isProxyHost = ( local.req && typeof(local.req._ginaIsProxyHost) != 'undefined' ) ? local.req._ginaIsProxyHost : ( getContext('isProxyHost') || false );
|
|
4999
|
+
var _proxyHostname = ( local.req && local.req._ginaProxyHostname ) ? local.req._ginaProxyHostname : process.gina.PROXY_HOSTNAME;
|
|
5000
|
+
var _proxyHost = ( local.req && local.req._ginaProxyHost ) ? local.req._ginaProxyHost : process.gina.PROXY_HOST;
|
|
4955
5001
|
if (
|
|
4956
|
-
|
|
5002
|
+
_isProxyHost
|
|
4957
5003
|
&& typeof(tmp.hostname) != 'undefined'
|
|
4958
|
-
&& typeof(
|
|
5004
|
+
&& typeof(_proxyHostname) != 'undefined'
|
|
4959
5005
|
) {
|
|
4960
|
-
tmp.hostname =
|
|
4961
|
-
tmp.host =
|
|
5006
|
+
tmp.hostname = _proxyHostname;
|
|
5007
|
+
tmp.host = _proxyHost;
|
|
4962
5008
|
}
|
|
4963
5009
|
return tmp;
|
|
4964
5010
|
}
|
|
@@ -334,6 +334,20 @@ function ServerEngineClass(options) {
|
|
|
334
334
|
|
|
335
335
|
}// EO for routing keys
|
|
336
336
|
|
|
337
|
+
// #B66 — a host-stripped variant of the routing map, served to PROXIED clients
|
|
338
|
+
// so the browser never receives any bundle's INTERNAL scheme://host:port (an
|
|
339
|
+
// information disclosure) and cross-bundle client toUrl resolves same-origin.
|
|
340
|
+
// Drop each route's `host` + `hostname`; KEEP `webroot` (the client toUrl path
|
|
341
|
+
// relies on it). Proxy-host-agnostic + boot-static like the full map above; the
|
|
342
|
+
// serve-time handler picks stripped-vs-full per request on request._ginaIsProxyHost.
|
|
343
|
+
// See the #B66 handler branch below.
|
|
344
|
+
var _routingStripped = JSON.clone(_routing);
|
|
345
|
+
var _routingStrippedKeys = Object.keys(_routingStripped);
|
|
346
|
+
for (var si = 0; si < _routingStrippedKeys.length; ++si) {
|
|
347
|
+
const { host, hostname, ...cleanStripped } = _routingStripped[_routingStrippedKeys[si]];
|
|
348
|
+
_routingStripped[_routingStrippedKeys[si]] = cleanStripped;
|
|
349
|
+
}// EO for stripped routing keys
|
|
350
|
+
|
|
337
351
|
// Checking if brotli is installed
|
|
338
352
|
var brotliBin = null;
|
|
339
353
|
try {
|
|
@@ -420,6 +434,53 @@ function ServerEngineClass(options) {
|
|
|
420
434
|
}
|
|
421
435
|
}
|
|
422
436
|
|
|
437
|
+
// #B66 — write + (br/gz)-compress the host-stripped variant to disk, mirroring
|
|
438
|
+
// the full routing.json above. Served to proxied clients by the #B66 handler
|
|
439
|
+
// branch; RAW clients keep the full blob (the full write above is untouched).
|
|
440
|
+
if (_routingStripped) {
|
|
441
|
+
targetFile = 'routing.stripped.json';
|
|
442
|
+
// Storing to disk
|
|
443
|
+
console.debug(`Writing ${targetFile} to: ${targetDir}/${targetFile}`);
|
|
444
|
+
fd = fs.openSync(targetDir +'/'+ targetFile, 'w'); // Open file for writing
|
|
445
|
+
buffer = Buffer.from( JSON.stringify(_routingStripped) );
|
|
446
|
+
fs.writeSync(fd, buffer, 0, buffer.length, 0); // Write the buffer
|
|
447
|
+
fs.closeSync(fd); // Close the file descriptor
|
|
448
|
+
|
|
449
|
+
// Adding brotli version (see the full routing.json block above)
|
|
450
|
+
try {
|
|
451
|
+
if (brotliBin) {
|
|
452
|
+
brFileObj = new _(targetDir +'/'+ targetFile +'.br');
|
|
453
|
+
if ( brFileObj.existsSync() ) {
|
|
454
|
+
brFileObj.rmSync();
|
|
455
|
+
}
|
|
456
|
+
cmd = brotliBin +' --best '+ _(targetDir +'/'+ targetFile, true);
|
|
457
|
+
exec(cmd, function(brCmdErr, stdout) {
|
|
458
|
+
if (brCmdErr) { console.error('[ SERVER ] brotli compression error: ' + (brCmdErr.stack || brCmdErr.message)); return; }
|
|
459
|
+
if (stdout) console.debug(stdout.toString().trim());
|
|
460
|
+
});
|
|
461
|
+
}
|
|
462
|
+
} catch (brError) {
|
|
463
|
+
console.error('[ SERVER ] '+ brError.stack);
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
// Adding GZip version
|
|
467
|
+
try {
|
|
468
|
+
if (gZipBin) {
|
|
469
|
+
gzFileObj = new _(targetDir +'/'+ targetFile +'.gz');
|
|
470
|
+
if ( gzFileObj.existsSync() ) {
|
|
471
|
+
gzFileObj.rmSync();
|
|
472
|
+
}
|
|
473
|
+
cmd = gZipBin +' -9 -k '+ _(targetDir +'/'+ targetFile, true);
|
|
474
|
+
exec(cmd, function(gzCmdErr, stdout) {
|
|
475
|
+
if (gzCmdErr) { console.error('[ SERVER ] gzip compression error: ' + (gzCmdErr.stack || gzCmdErr.message)); return; }
|
|
476
|
+
if (stdout) console.debug(stdout.toString().trim());
|
|
477
|
+
});
|
|
478
|
+
}
|
|
479
|
+
} catch (gzError) {
|
|
480
|
+
console.error('[ SERVER ] '+ gzError.stack);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
423
484
|
|
|
424
485
|
buffer = null;
|
|
425
486
|
fd = null;
|
|
@@ -430,6 +491,12 @@ function ServerEngineClass(options) {
|
|
|
430
491
|
file : 'routing.json',
|
|
431
492
|
path : targetDir,
|
|
432
493
|
mime : 'application/json; charset=utf8'
|
|
494
|
+
},
|
|
495
|
+
// #B66 — host-stripped variant, served to proxied clients (see handler branch)
|
|
496
|
+
{
|
|
497
|
+
file : 'routing.stripped.json',
|
|
498
|
+
path : targetDir,
|
|
499
|
+
mime : 'application/json; charset=utf8'
|
|
433
500
|
}
|
|
434
501
|
];
|
|
435
502
|
for (let i=0, len=localAssets.length; i<len; i++) {
|
|
@@ -1688,9 +1755,22 @@ function ServerEngineClass(options) {
|
|
|
1688
1755
|
// server.toApi(reques, response)
|
|
1689
1756
|
// console.debug('[ SERVER ][200] '+ request.url);
|
|
1690
1757
|
localAsset = assetsCollection.findOne({ file: request.url.split(/\//g).slice(-1).toString() });
|
|
1758
|
+
// #B66 — on a proxied deployment serve the host-stripped routing.json so
|
|
1759
|
+
// the browser never receives any bundle's INTERNAL scheme://host:port (an
|
|
1760
|
+
// information disclosure) and cross-bundle client toUrl resolves
|
|
1761
|
+
// same-origin. Gated on the per-request #B65 classification; RAW (direct
|
|
1762
|
+
// host:port) keeps the full blob, byte-identical.
|
|
1763
|
+
if ( request._ginaIsProxyHost === true ) {
|
|
1764
|
+
var _strippedRoutingAsset = assetsCollection.findOne({ file: 'routing.stripped.json' });
|
|
1765
|
+
if (_strippedRoutingAsset) {
|
|
1766
|
+
localAsset = _strippedRoutingAsset;
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1691
1769
|
response.setHeader('content-type', localAsset.mime);
|
|
1692
1770
|
response.setHeader('vary', 'Origin');
|
|
1693
|
-
|
|
1771
|
+
// #B66 — a shared cache must not cross-serve the stripped (proxied) and
|
|
1772
|
+
// full (raw) variants under the same URL; mark the proxied variant private.
|
|
1773
|
+
response.setHeader('cache-control', ( request._ginaIsProxyHost === true ) ? 'private, max-age=86400' : 'public, max-age=86400');
|
|
1694
1774
|
response.setHeader('x-content-type-options', 'nosniff');
|
|
1695
1775
|
response.setHeader('x-frame-options', 'DENY');
|
|
1696
1776
|
response.setHeader('x-xss-protection', '1; mode=block');
|
|
@@ -25,7 +25,7 @@ var CmdHelper = require('./../helper');
|
|
|
25
25
|
* 2. the framework's built-in driver range table (DRIVER_MAP / AI_DRIVER_MAP)
|
|
26
26
|
*
|
|
27
27
|
* Leading header comments at the top of an existing `connectors.json` are
|
|
28
|
-
* preserved verbatim (everything before the first `{`). Mid-body `//` or
|
|
28
|
+
* preserved verbatim (everything before the first non-comment `{`). Mid-body `//` or
|
|
29
29
|
* `/* * /` comments are lost — the JSON body is rewritten from the parsed
|
|
30
30
|
* object graph. See help.txt for the caveat.
|
|
31
31
|
*
|
|
@@ -349,7 +349,7 @@ function Add(opt, cmd) {
|
|
|
349
349
|
|
|
350
350
|
/**
|
|
351
351
|
* Reads the existing `connectors.json` (if any), preserves any leading
|
|
352
|
-
* comment header (everything before the first `{`), and parses the
|
|
352
|
+
* comment header (everything before the first non-comment `{`), and parses the
|
|
353
353
|
* JSON body with comment tolerance via `requireJSON`.
|
|
354
354
|
*
|
|
355
355
|
* Returns `{ header: string, data: object }`. On a parse failure, exits
|
|
@@ -379,8 +379,10 @@ function Add(opt, cmd) {
|
|
|
379
379
|
process.exit(1);
|
|
380
380
|
return null;
|
|
381
381
|
}
|
|
382
|
-
|
|
383
|
-
|
|
382
|
+
// Comment-aware: the scaffolded template's `// "couchbase": {` puts a
|
|
383
|
+
// brace inside a comment, so a naive first-brace scan lands there and
|
|
384
|
+
// corrupts the rewrite. splitHeader finds the first STRUCTURAL `{`.
|
|
385
|
+
var header = lib.jsonConfigHeader.splitHeader(raw).header;
|
|
384
386
|
var data;
|
|
385
387
|
try {
|
|
386
388
|
data = requireJSON(target) || {};
|
|
@@ -435,7 +437,7 @@ function Add(opt, cmd) {
|
|
|
435
437
|
* @inner
|
|
436
438
|
* @private
|
|
437
439
|
* @param {string} target
|
|
438
|
-
* @param {string} header - Text before the first `{` in the existing file
|
|
440
|
+
* @param {string} header - Text before the first non-comment `{` in the existing file
|
|
439
441
|
* @param {object} data - Full merged config object
|
|
440
442
|
*/
|
|
441
443
|
var writeFile = function (target, header, data) {
|
|
@@ -36,7 +36,7 @@ var CmdHelper = require('./../helper');
|
|
|
36
36
|
* when a concrete migration (e.g. #CN8 Couchbase SDK v2 removal at
|
|
37
37
|
* `0.4.0`) lands with a real before/after shape.
|
|
38
38
|
*
|
|
39
|
-
* Leading comment headers (everything before the first `{`) are preserved
|
|
39
|
+
* Leading comment headers (everything before the first non-comment `{`) are preserved
|
|
40
40
|
* verbatim when `--fix` writes the file — same convention as `add.js` and
|
|
41
41
|
* `remove.js`. Mid-body comments are lost on rewrite.
|
|
42
42
|
*
|
|
@@ -285,8 +285,10 @@ function Migrate(opt, cmd) {
|
|
|
285
285
|
report.parseError = 'read failed: ' + e.message;
|
|
286
286
|
return report;
|
|
287
287
|
}
|
|
288
|
-
|
|
289
|
-
|
|
288
|
+
// Comment-aware: the scaffolded template's `// "couchbase": {` puts a
|
|
289
|
+
// brace inside a comment, so a naive first-brace scan lands there and
|
|
290
|
+
// corrupts a --fix rewrite. splitHeader finds the first STRUCTURAL `{`.
|
|
291
|
+
report.header = lib.jsonConfigHeader.splitHeader(raw).header;
|
|
290
292
|
|
|
291
293
|
var data;
|
|
292
294
|
try {
|
|
@@ -24,7 +24,7 @@ var CmdHelper = require('./../helper');
|
|
|
24
24
|
* user can decide whether to keep the driver installed.
|
|
25
25
|
*
|
|
26
26
|
* Leading header comments at the top of an existing `connectors.json`
|
|
27
|
-
* (everything before the first `{`) are preserved verbatim. Mid-body
|
|
27
|
+
* (everything before the first non-comment `{`) are preserved verbatim. Mid-body
|
|
28
28
|
* `//` or `/* * /` comments are lost — the body is rewritten from the
|
|
29
29
|
* parsed object graph. Same caveat as `connector:add`.
|
|
30
30
|
*
|
|
@@ -269,7 +269,7 @@ function Remove(opt, cmd) {
|
|
|
269
269
|
|
|
270
270
|
/**
|
|
271
271
|
* Reads the existing `connectors.json`, preserves the leading comment
|
|
272
|
-
* header (everything before the first `{`), and parses the body with
|
|
272
|
+
* header (everything before the first non-comment `{`), and parses the body with
|
|
273
273
|
* comment tolerance. Exits on parse or I/O failure. Returns null when
|
|
274
274
|
* the target file does not exist at all — that's an error for
|
|
275
275
|
* `connector:rm` because there's nothing to remove.
|
|
@@ -293,8 +293,10 @@ function Remove(opt, cmd) {
|
|
|
293
293
|
process.exit(1);
|
|
294
294
|
return null;
|
|
295
295
|
}
|
|
296
|
-
|
|
297
|
-
|
|
296
|
+
// Comment-aware: the scaffolded template's `// "couchbase": {` puts a
|
|
297
|
+
// brace inside a comment, so a naive first-brace scan lands there and
|
|
298
|
+
// corrupts the rewrite. splitHeader finds the first STRUCTURAL `{`.
|
|
299
|
+
var header = lib.jsonConfigHeader.splitHeader(raw).header;
|
|
298
300
|
var data;
|
|
299
301
|
try {
|
|
300
302
|
data = requireJSON(target) || {};
|
|
@@ -160,6 +160,14 @@ function Lib() {
|
|
|
160
160
|
// caller can run lib.secrets.resolve() on it in place. Pure (same
|
|
161
161
|
// contract as connector-registry / cmd-status-format).
|
|
162
162
|
connectorConfig : _require('./connector-config'),
|
|
163
|
+
// Comment-aware header/body splitter for JSON-with-comments config
|
|
164
|
+
// files. firstStructuralBraceIndex / splitHeader find the first `{`
|
|
165
|
+
// that is NOT inside a `//` or block comment, so a rewrite preserves a
|
|
166
|
+
// leading comment header verbatim (the scaffolded connectors.json
|
|
167
|
+
// template carries `// "couchbase": {` — a brace inside a comment).
|
|
168
|
+
// Consumed by the connector:add / connector:rm / connector:migrate
|
|
169
|
+
// handlers. Pure (same contract as cmd-status-format / routing-introspect).
|
|
170
|
+
jsonConfigHeader: _require('./json-config-header'),
|
|
163
171
|
// Pure resolver that picks between a project-installed @rhinostone/swig
|
|
164
172
|
// (or swig-twig) and the framework's bundled copy. Opt-in via
|
|
165
173
|
// settings.json > swig.useProject; default-off. Returns a decision
|