gina 0.6.7 → 0.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +22 -0
- package/README.md +27 -26
- package/ROADMAP.md +3 -2
- package/framework/v0.6.8/VERSION +1 -0
- package/framework/{v0.6.7 → v0.6.8}/core/config.js +10 -0
- package/framework/v0.6.8/core/connectors/couchbase/lib/storage-store.js +1074 -0
- package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.js +532 -22
- package/framework/v0.6.8/core/controller/controller.render-stream.js +270 -0
- package/framework/{v0.6.7 → v0.6.8}/core/gna.js +10 -2
- package/framework/{v0.6.7 → v0.6.8}/core/router.js +30 -10
- package/framework/{v0.6.7 → v0.6.8}/core/server.isaac.js +42 -7
- package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/gc.js +6 -0
- package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/stats.js +7 -0
- package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/verify.js +6 -0
- package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/local-cas.js +107 -9
- package/framework/v0.6.8/lib/storage/src/local-stream.js +1418 -0
- package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/local.js +177 -16
- package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/main.js +406 -25
- package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/meta-store.js +13 -2
- package/framework/v0.6.8/lib/storage/src/s3.js +759 -0
- package/framework/{v0.6.7 → v0.6.8}/lib/storage/src/util.js +26 -1
- package/framework/{v0.6.7 → v0.6.8}/lib/storage-store.js +33 -23
- package/framework/{v0.6.7 → v0.6.8}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +22 -47
- package/package.json +3 -3
- package/schema/routing.json +4 -0
- package/schema/settings.json +84 -10
- package/script/check_no_local_leak.js +2 -1
- package/script/retry_lockfile_sync.js +2 -1
- package/script/soak/storage-couchbase/README.md +61 -0
- package/script/soak/storage-couchbase/probe-cas.js +77 -0
- package/script/soak/storage-couchbase/probe-store.js +101 -0
- package/types/index.d.ts +18 -0
- package/framework/v0.6.7/VERSION +0 -1
- package/framework/v0.6.7/core/controller/controller.render-stream.js +0 -169
- /package/framework/{v0.6.7 → v0.6.8}/AUTHORS +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/LICENSE +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/content.encoding +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/dev/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/locales/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/mime.types +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/model/entity.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/model/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/server.express.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/server.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/status.codes +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/console.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/context.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/path.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/task.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/helpers/text.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/async/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/config.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/job/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/job-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/math/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/model.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/proc.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/session-store.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/shell.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/state.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/storage/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/url/README.md +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/url/index.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/validator.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.7 → v0.6.8}/lib/ws-session/src/main.js +0 -0
|
@@ -326,6 +326,99 @@ function formatAttachmentDisposition(filename) {
|
|
|
326
326
|
return 'attachment; filename="' + String(filename).replace(/[\\"]/g, '\\$&') + '"';
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
+
/**
|
|
330
|
+
* Parse an HTTP `Range` request header against a known representation size.
|
|
331
|
+
*
|
|
332
|
+
* Honours a SINGLE `bytes=` range in its three RFC 9110 shapes — `a-b`,
|
|
333
|
+
* `a-` (open-ended) and `-n` (suffix: the last `n` bytes). Everything else —
|
|
334
|
+
* an absent/non-string header, another unit, a multi-range list, syntactic
|
|
335
|
+
* garbage, or `a-b` with `a > b` — returns `null`, which the caller treats as
|
|
336
|
+
* "ignore the header, serve the full 200" (RFC-sanctioned: a server MAY
|
|
337
|
+
* ignore Range). A syntactically valid range that matches no byte of the
|
|
338
|
+
* representation — `start >= size`, a `-0` suffix, or any range against a
|
|
339
|
+
* zero-length object — returns `{unsatisfiable: true}`, the caller's 416.
|
|
340
|
+
* A satisfiable range comes back `{start, end}` with `end` INCLUSIVE and
|
|
341
|
+
* clamped to `size - 1`, matching both the header semantics and the storage
|
|
342
|
+
* drivers' `getRange` contract, so no arithmetic sits between them.
|
|
343
|
+
*
|
|
344
|
+
* @function _parseRangeHeader
|
|
345
|
+
* @private
|
|
346
|
+
* @param {string} header - The raw `Range` header value.
|
|
347
|
+
* @param {number} size - The representation size in bytes.
|
|
348
|
+
* @returns {object|null} `{start, end}` inclusive · `{unsatisfiable: true}` · `null` (ignore).
|
|
349
|
+
*
|
|
350
|
+
* @example
|
|
351
|
+
* _parseRangeHeader('bytes=0-499', 1000); // -> { start: 0, end: 499 }
|
|
352
|
+
* _parseRangeHeader('bytes=-500', 1000); // -> { start: 500, end: 999 }
|
|
353
|
+
* _parseRangeHeader('bytes=0-1,5-9', 1000); // -> null (multi-range: full 200)
|
|
354
|
+
* _parseRangeHeader('bytes=1000-', 1000); // -> { unsatisfiable: true } (416)
|
|
355
|
+
*/
|
|
356
|
+
function _parseRangeHeader(header, size) {
|
|
357
|
+
if ( typeof(header) != 'string' ) {
|
|
358
|
+
return null;
|
|
359
|
+
}
|
|
360
|
+
var m = header.match(/^\s*bytes\s*=\s*(\d*)\s*-\s*(\d*)\s*$/);
|
|
361
|
+
if ( !m ) {
|
|
362
|
+
return null;
|
|
363
|
+
}
|
|
364
|
+
var startStr = m[1], endStr = m[2];
|
|
365
|
+
if ( startStr === '' && endStr === '' ) {
|
|
366
|
+
return null; // "bytes=-" is garbage
|
|
367
|
+
}
|
|
368
|
+
if ( startStr === '' ) {
|
|
369
|
+
// suffix form `-n`: the last n bytes
|
|
370
|
+
var n = parseInt(endStr, 10);
|
|
371
|
+
if ( n === 0 || size === 0 ) {
|
|
372
|
+
return { unsatisfiable: true }; // a -0 suffix matches no byte; empty matches none
|
|
373
|
+
}
|
|
374
|
+
var s = size - n;
|
|
375
|
+
return { start: (s > 0) ? s : 0, end: size - 1 };
|
|
376
|
+
}
|
|
377
|
+
var start = parseInt(startStr, 10);
|
|
378
|
+
if ( size === 0 || start >= size ) {
|
|
379
|
+
return { unsatisfiable: true };
|
|
380
|
+
}
|
|
381
|
+
var end = ( endStr === '' ) ? size - 1 : parseInt(endStr, 10);
|
|
382
|
+
if ( end < start ) {
|
|
383
|
+
return null; // last-byte-pos < first-byte-pos: invalid spec, ignore (RFC 9110)
|
|
384
|
+
}
|
|
385
|
+
return { start: start, end: Math.min(end, size - 1) };
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
/**
|
|
389
|
+
* Resolve the Content-Type a stored object is served with.
|
|
390
|
+
*
|
|
391
|
+
* The stored contentType is UPLOADER-supplied and stored verbatim (untrusted
|
|
392
|
+
* at the seam), so serving it back on the app's own origin is a stored-XSS
|
|
393
|
+
* vector: a declared `text/html`/`image/svg+xml` renders as active content
|
|
394
|
+
* and `nosniff` does not stop a DECLARED type. Fail-closed: active-content
|
|
395
|
+
* types downgrade to `application/octet-stream` unless the app passes an
|
|
396
|
+
* explicit `opts.contentType` — the app's informed choice is served verbatim.
|
|
397
|
+
*
|
|
398
|
+
* @function _resolveServedContentType
|
|
399
|
+
* @private
|
|
400
|
+
* @param {string} [optsContentType] - The caller's explicit choice; wins verbatim.
|
|
401
|
+
* @param {string} [metaContentType] - The stored, uploader-supplied MIME type.
|
|
402
|
+
* @returns {string} The Content-Type to serve.
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* _resolveServedContentType(null, 'image/png'); // -> 'image/png'
|
|
406
|
+
* _resolveServedContentType(null, 'text/html'); // -> 'application/octet-stream'
|
|
407
|
+
* _resolveServedContentType('image/svg+xml', 'x/y'); // -> 'image/svg+xml' (explicit)
|
|
408
|
+
*/
|
|
409
|
+
function _resolveServedContentType(optsContentType, metaContentType) {
|
|
410
|
+
if ( typeof(optsContentType) == 'string' && optsContentType !== '' ) {
|
|
411
|
+
return optsContentType;
|
|
412
|
+
}
|
|
413
|
+
if ( typeof(metaContentType) == 'string' && metaContentType !== '' ) {
|
|
414
|
+
if ( /(html|xml|svg|javascript|ecmascript)/i.test(metaContentType) ) {
|
|
415
|
+
return 'application/octet-stream';
|
|
416
|
+
}
|
|
417
|
+
return metaContentType;
|
|
418
|
+
}
|
|
419
|
+
return 'application/octet-stream';
|
|
420
|
+
}
|
|
421
|
+
|
|
329
422
|
/**
|
|
330
423
|
* @class SuperController
|
|
331
424
|
* @constructor
|
|
@@ -1806,7 +1899,10 @@ function SuperController(options) {
|
|
|
1806
1899
|
* HTTP/1.1: response.write() with automatic chunked transfer-encoding
|
|
1807
1900
|
*
|
|
1808
1901
|
* The iterable should yield strings or Buffers. Objects are coerced via String().
|
|
1809
|
-
*
|
|
1902
|
+
* Buffers pass through byte-exact on non-SSE content-types (SSE decodes them as
|
|
1903
|
+
* UTF-8 text). HEAD requests answer headers-only — the iterable is never consumed.
|
|
1904
|
+
* Upstream response headers (CORS, Content-Range, etc.) are preserved in the initial
|
|
1905
|
+
* headers frame, and the delegate's own defaults yield to pre-set values.
|
|
1810
1906
|
*
|
|
1811
1907
|
* @param {AsyncIterable} asyncIterable - Source of chunks; typically an AI SDK stream
|
|
1812
1908
|
* @param {string} [contentType] - Response Content-Type (default: text/event-stream)
|
|
@@ -2472,6 +2568,20 @@ function SuperController(options) {
|
|
|
2472
2568
|
*
|
|
2473
2569
|
* if you are free to use the redirection [ code ] of your choice, we've set it to 301 by default
|
|
2474
2570
|
*
|
|
2571
|
+
* Add [ keep-params ] to carry the incoming request's query string onto the
|
|
2572
|
+
* redirect target (#B352). Default is `false`: the target is used verbatim and the
|
|
2573
|
+
* caller's query is dropped, which is the historical behaviour of every redirect
|
|
2574
|
+
* route. Set it when the redirect is a path normalisation and must stay transparent
|
|
2575
|
+
* to request state — the framework's own auto-generated `webroot@<bundle>` route
|
|
2576
|
+
* does exactly that, which is why `/webroot?token=…` now lands on
|
|
2577
|
+
* `/webroot/?token=…` instead of losing the parameter:
|
|
2578
|
+
* { "control": "redirect", "path": "/documentation/", "keep-params": true }
|
|
2579
|
+
*
|
|
2580
|
+
* Only a LOCAL target inherits the query. An absolute [ url ] names another origin,
|
|
2581
|
+
* and forwarding the caller's parameters there would disclose whatever the query
|
|
2582
|
+
* carried to a third party, so the flag is ignored for the absolute form. If the
|
|
2583
|
+
* target already carries a query the incoming one is appended with `&`.
|
|
2584
|
+
*
|
|
2475
2585
|
*
|
|
2476
2586
|
* 2) By calling this.redirect(rule, [ignoreWebRoot]):
|
|
2477
2587
|
* ------------------------------------------------
|
|
@@ -2793,6 +2903,51 @@ function SuperController(options) {
|
|
|
2793
2903
|
//path = local.req.headers.host + path
|
|
2794
2904
|
}
|
|
2795
2905
|
|
|
2906
|
+
// #B352 — `keep-params`: carry the incoming request's query string onto the
|
|
2907
|
+
// redirect target. The option has been documented as a redirect-route key
|
|
2908
|
+
// since the pre-GitHub import, but was never implemented: `keepParams` was
|
|
2909
|
+
// read into a local above and then dropped, so EVERY redirect-control route
|
|
2910
|
+
// silently discarded the caller's query.
|
|
2911
|
+
//
|
|
2912
|
+
// This is what made the framework's own auto-generated `webroot@<bundle>`
|
|
2913
|
+
// route lossy (config.js — it now sets the flag): that route's `param.path`
|
|
2914
|
+
// is a CONSTANT (the configured webroot), so nothing else could ever have
|
|
2915
|
+
// carried the query, and a bare-webroot hit carrying a token or a redirect
|
|
2916
|
+
// target — `/app?t=…` -> 302 `/app/` — arrived at the application with the
|
|
2917
|
+
// parameter already gone. A path-normalisation redirect must be transparent
|
|
2918
|
+
// to request state.
|
|
2919
|
+
//
|
|
2920
|
+
// Query source is `originalUrl || url`, the established idiom here (#B219,
|
|
2921
|
+
// pauseRequest, server.js access logs): the isaac engine strips the query
|
|
2922
|
+
// from `req.url` before controllers run and preserves the byte-exact
|
|
2923
|
+
// incoming URL on `req.originalUrl` (stamped as its listener's first
|
|
2924
|
+
// statement); express sets `originalUrl` natively. A request carrying
|
|
2925
|
+
// neither (bare/harness) simply contributes no query.
|
|
2926
|
+
//
|
|
2927
|
+
// Deliberately narrow scope — LOCAL targets only. An absolute `param.url`
|
|
2928
|
+
// names another origin, and forwarding the caller's parameters there would
|
|
2929
|
+
// hand a third party whatever the query carried (session tokens, ids). An
|
|
2930
|
+
// opt-in convenience flag must not be able to leak cross-origin, so the
|
|
2931
|
+
// absolute form is excluded rather than trusted.
|
|
2932
|
+
//
|
|
2933
|
+
// Placement is load-bearing: it runs BEFORE the `inheritedData` block below,
|
|
2934
|
+
// whose `?`-vs-`&` test must see the query appended here. On the wrong-method
|
|
2935
|
+
// (HEAD -> GET, 303) path both mechanisms fire, so the target carries the
|
|
2936
|
+
// query verbatim AND the `inheritedData` copy — redundant but consistent.
|
|
2937
|
+
if ( keepParams && !(/\:\/\//).test(path) ) {
|
|
2938
|
+
var _incomingUrl = local.req.originalUrl || local.req.url || '';
|
|
2939
|
+
var _queryIndex = _incomingUrl.indexOf('?');
|
|
2940
|
+
if ( _queryIndex > -1 ) {
|
|
2941
|
+
// verbatim — already percent-encoded as received, so re-encoding
|
|
2942
|
+
// would corrupt it. CR/LF stripped: a Location built from client
|
|
2943
|
+
// input must not be able to split the response header.
|
|
2944
|
+
var _incomingQuery = _incomingUrl.substring(_queryIndex + 1).replace(/[\r\n]/g, '');
|
|
2945
|
+
if ( _incomingQuery ) {
|
|
2946
|
+
path += ( (/\?/).test(path) ? '&' : '?' ) + _incomingQuery;
|
|
2947
|
+
}
|
|
2948
|
+
}
|
|
2949
|
+
}
|
|
2950
|
+
|
|
2796
2951
|
var isPopinContext = false;
|
|
2797
2952
|
if (
|
|
2798
2953
|
typeof(req.routing.param.isPopinContext) != 'undefined'
|
|
@@ -2816,11 +2971,29 @@ function SuperController(options) {
|
|
|
2816
2971
|
return;
|
|
2817
2972
|
}
|
|
2818
2973
|
|
|
2974
|
+
// #B353 — HEAD is a SAFE method: it is GET without a response body, so a
|
|
2975
|
+
// redirect must treat it exactly as it treats GET. This gate exists to stop
|
|
2976
|
+
// an UNSAFE method being replayed against the target — its own warning says
|
|
2977
|
+
// "A redirection is not permitted in this scenario", which is a
|
|
2978
|
+
// POST/PUT/DELETE concern — but it tested `!== 'GET'`, so HEAD was swept in
|
|
2979
|
+
// with them. Every consequence was wrong for a safe method: a warning on a
|
|
2980
|
+
// route that explicitly lists HEAD in its own `method` list (the framework's
|
|
2981
|
+
// auto-generated `webroot@<bundle>` route does), a 303 telling the client to
|
|
2982
|
+
// re-issue as GET and fetch a body it deliberately did not ask for, and —
|
|
2983
|
+
// because switching the method made `originalMethod !== req.method` — an
|
|
2984
|
+
// `inheritedData` copy appended to the target that the same request as a GET
|
|
2985
|
+
// never receives. Admitting HEAD converges it on GET: same status, same
|
|
2986
|
+
// Location, no warning.
|
|
2987
|
+
//
|
|
2988
|
+
// Kept as string comparisons rather than a regex, per #P13 below, which
|
|
2989
|
+
// deliberately moved this condition off `/GET/i.test()`.
|
|
2990
|
+
var _reqMethod = req.method.toUpperCase();
|
|
2991
|
+
var _origMethod = originalMethod ? originalMethod.toUpperCase() : null;
|
|
2819
2992
|
// replaced: !/GET/i.test() (#P13)
|
|
2820
2993
|
if (
|
|
2821
|
-
|
|
2994
|
+
( _reqMethod !== 'GET' && _reqMethod !== 'HEAD' )
|
|
2822
2995
|
||
|
|
2823
|
-
|
|
2996
|
+
( _origMethod && _origMethod !== 'GET' && _origMethod !== 'HEAD' )
|
|
2824
2997
|
) { // trying to redirect using the wrong method ?
|
|
2825
2998
|
|
|
2826
2999
|
console.warn(new Error('Your are trying to redirect using the wrong method: `'+ req.method+'`.\nThis can often occur while redirecting from a controller to another controller or from a bundle to another.\nA redirection is not permitted in this scenario.\nDon\'t panic :)\nSwitching request method to `GET` method instead.\n').message);
|
|
@@ -3398,6 +3571,290 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
3398
3571
|
}
|
|
3399
3572
|
|
|
3400
3573
|
|
|
3574
|
+
/**
|
|
3575
|
+
* Serve a stored object over HTTP with full Range support — the read-side
|
|
3576
|
+
* companion of `store()`'s driver-routed upload path (#STO1).
|
|
3577
|
+
*
|
|
3578
|
+
* Terminal: renders the bytes (via `renderStream`) or ends the response
|
|
3579
|
+
* itself (304/416), or routes through `throwError` (404/500). The whole
|
|
3580
|
+
* HTTP protocol dance is owned here so applications never re-implement it:
|
|
3581
|
+
*
|
|
3582
|
+
* - `stat()`-gated: an unknown/released key answers 404; on the `stream`
|
|
3583
|
+
* strategy a finalize-heal residue (row write failed, bytes readable)
|
|
3584
|
+
* also 404s until the idempotent finalize heals the row.
|
|
3585
|
+
* - Strong validators: `ETag: "<key>"` (storage keys are immutable — every
|
|
3586
|
+
* strategy publishes via temp+rename and no in-place mutation API
|
|
3587
|
+
* exists) + `Last-Modified` from the publish time.
|
|
3588
|
+
* - Conditional GET: `If-None-Match` matching the key ETag → 304, no
|
|
3589
|
+
* driver read.
|
|
3590
|
+
* - Range (GET only, gated on `driver.capabilities.ranges`): a single
|
|
3591
|
+
* `bytes=` range → 206 with `Content-Range`/exact `Content-Length`;
|
|
3592
|
+
* unsatisfiable → 416 + `Content-Range: bytes *\/<size>`; multi-range /
|
|
3593
|
+
* other units / garbage → the full 200 (RFC-sanctioned ignore).
|
|
3594
|
+
* `If-Range` honours the Range only on an exact validator match —
|
|
3595
|
+
* anything unevaluable degrades to the full 200, fail-safe.
|
|
3596
|
+
* - `Accept-Ranges: bytes` advertised whenever the driver can serve them.
|
|
3597
|
+
* - Content-Type: `opts.contentType` verbatim (the app's informed choice),
|
|
3598
|
+
* else the STORED type with active-content downgrade — it is
|
|
3599
|
+
* uploader-supplied, so `text\/html`/`svg`/`xml`/`javascript` fall back
|
|
3600
|
+
* to `application\/octet-stream` (stored-XSS fail-closed). Every
|
|
3601
|
+
* response carries `X-Content-Type-Options: nosniff`.
|
|
3602
|
+
* - Caching: `Cache-Control: private, max-age=31536000, immutable` by
|
|
3603
|
+
* default (correct for immutable-per-key objects; `private` keeps
|
|
3604
|
+
* shared caches out of the application's authorization), overridable
|
|
3605
|
+
* verbatim via `opts.cacheControl`.
|
|
3606
|
+
* - HEAD answers headers-only (full-size accounting, no driver read).
|
|
3607
|
+
* - OFFLOAD (`capabilities.offload`, the `s3` adapter): GET/HEAD answer
|
|
3608
|
+
* **307** to a short-lived presigned URL instead of proxying the bytes
|
|
3609
|
+
* — after the 304 check, with the facade's decisions riding the URL as
|
|
3610
|
+
* signed `response-*` overrides (the DOWNGRADED content type included,
|
|
3611
|
+
* so the stored-XSS guard holds when the provider serves). Range goes
|
|
3612
|
+
* with the client to the provider, which answers 206/416 natively. The
|
|
3613
|
+
* redirect itself is `no-store` (it outlives no signature); the
|
|
3614
|
+
* payload's caching policy rides `response-cache-control`.
|
|
3615
|
+
* `opts.offload: false` forces the proxy path (`get`/`getRange`) —
|
|
3616
|
+
* private buckets, IP-gated egress, or byte-level control.
|
|
3617
|
+
*
|
|
3618
|
+
* Works identically on both engines: headers/status ride `local.res`, and
|
|
3619
|
+
* the byte emission is `renderStream`'s two arms.
|
|
3620
|
+
*
|
|
3621
|
+
* @param {string} driverName - The `settings.storage` driver name (as `store()` routed it).
|
|
3622
|
+
* @param {string} key - The opaque storage key (from the `store()` result slot).
|
|
3623
|
+
* @param {object} [opts] - Serving options.
|
|
3624
|
+
* @param {string} [opts.contentType] - Explicit Content-Type; served verbatim, bypasses the downgrade.
|
|
3625
|
+
* @param {string} [opts.cacheControl] - Explicit Cache-Control; replaces the immutable default.
|
|
3626
|
+
* @param {boolean} [opts.download] - `true` → `Content-Disposition: attachment`.
|
|
3627
|
+
* @param {string} [opts.filename] - Download filename (implies attachment); defaults to the stored originalName.
|
|
3628
|
+
* @param {boolean} [opts.offload] - `false` → proxy the bytes even on an offload-capable
|
|
3629
|
+
* driver (no redirect). Default: offload when the
|
|
3630
|
+
* driver can.
|
|
3631
|
+
* @returns {void}
|
|
3632
|
+
*
|
|
3633
|
+
* @example
|
|
3634
|
+
* // a document route: GET /files/:id — Range, 304 and HEAD handled for free
|
|
3635
|
+
* this.download = function(req, res) {
|
|
3636
|
+
* var self = this;
|
|
3637
|
+
* var doc = getDocFromDb(req.params.id); // { storageKey, mime, name }
|
|
3638
|
+
* self.serveFromStorage('media', doc.storageKey, { contentType: doc.mime });
|
|
3639
|
+
* };
|
|
3640
|
+
*
|
|
3641
|
+
* @example
|
|
3642
|
+
* // force a download dialog with a safe filename
|
|
3643
|
+
* self.serveFromStorage('media', record.storageKey, { download: true, filename: 'report-2026.pdf' });
|
|
3644
|
+
*/
|
|
3645
|
+
this.serveFromStorage = function(driverName, key, opts) {
|
|
3646
|
+
// #B31/#B38 family — released-response guard: a prior terminal exit
|
|
3647
|
+
// nulled the per-request refs; a live request is unaffected.
|
|
3648
|
+
if ( local.res == null ) {
|
|
3649
|
+
return;
|
|
3650
|
+
}
|
|
3651
|
+
opts = opts || {};
|
|
3652
|
+
|
|
3653
|
+
var request = local.req;
|
|
3654
|
+
var response = local.res;
|
|
3655
|
+
var method = ( request && request.method ) ? request.method.toUpperCase() : 'GET';
|
|
3656
|
+
|
|
3657
|
+
var driver = null;
|
|
3658
|
+
try {
|
|
3659
|
+
driver = lib.storage.get(driverName);
|
|
3660
|
+
} catch (acquireErr) {
|
|
3661
|
+
// not configured / unknown driver — an app config error, never a 404
|
|
3662
|
+
return self.throwError(response, 500, acquireErr);
|
|
3663
|
+
}
|
|
3664
|
+
|
|
3665
|
+
driver.stat(key, function onServeStat(statErr, meta) {
|
|
3666
|
+
// re-guard after the async hop (the #M1/#B37 discipline)
|
|
3667
|
+
if ( local.res == null ) {
|
|
3668
|
+
return;
|
|
3669
|
+
}
|
|
3670
|
+
if ( statErr ) {
|
|
3671
|
+
return self.throwError(response, 500, statErr);
|
|
3672
|
+
}
|
|
3673
|
+
if ( !meta ) {
|
|
3674
|
+
return self.throwError(response, 404, new Error('serveFromStorage(): no object for key `' + key + '` on driver `' + driverName + '`'));
|
|
3675
|
+
}
|
|
3676
|
+
|
|
3677
|
+
var size = meta.size;
|
|
3678
|
+
var contentType = _resolveServedContentType(opts.contentType, meta.contentType);
|
|
3679
|
+
var etag = '"' + key + '"';
|
|
3680
|
+
var lastModified = ( typeof(meta.createdAt) == 'number' ) ? new Date(meta.createdAt).toUTCString() : null;
|
|
3681
|
+
var rangesOn = !!( driver.capabilities && driver.capabilities.ranges );
|
|
3682
|
+
|
|
3683
|
+
/**
|
|
3684
|
+
* Headers every serve outcome shares (200/206/304/416/HEAD).
|
|
3685
|
+
* Applied only once an outcome is decided, so a driver error can
|
|
3686
|
+
* still route through `throwError` with no Range headers leaked.
|
|
3687
|
+
*
|
|
3688
|
+
* @inner
|
|
3689
|
+
* @returns {void}
|
|
3690
|
+
*/
|
|
3691
|
+
var setCommonHeaders = function() {
|
|
3692
|
+
response.setHeader('x-content-type-options', 'nosniff');
|
|
3693
|
+
response.setHeader('etag', etag);
|
|
3694
|
+
if ( lastModified ) {
|
|
3695
|
+
response.setHeader('last-modified', lastModified);
|
|
3696
|
+
}
|
|
3697
|
+
if ( rangesOn ) {
|
|
3698
|
+
response.setHeader('accept-ranges', 'bytes');
|
|
3699
|
+
}
|
|
3700
|
+
response.setHeader('cache-control',
|
|
3701
|
+
( typeof(opts.cacheControl) == 'string' && opts.cacheControl !== '' )
|
|
3702
|
+
? opts.cacheControl
|
|
3703
|
+
: 'private, max-age=31536000, immutable'
|
|
3704
|
+
);
|
|
3705
|
+
if ( opts.download === true || typeof(opts.filename) == 'string' ) {
|
|
3706
|
+
// the stored originalName is uploader-supplied: strip control
|
|
3707
|
+
// chars so setHeader cannot throw on CR/LF (header injection)
|
|
3708
|
+
var _fname = String(opts.filename || meta.originalName || 'download').replace(/[\x00-\x1f\x7f]/g, '');
|
|
3709
|
+
response.setHeader('content-disposition', formatAttachmentDisposition(_fname));
|
|
3710
|
+
}
|
|
3711
|
+
};
|
|
3712
|
+
|
|
3713
|
+
// Conditional GET — If-None-Match vs the strong key ETag (weak
|
|
3714
|
+
// comparison per RFC 9110, hence indexOf: a W/-prefixed echo matches).
|
|
3715
|
+
var inm = ( request && request.headers ) ? request.headers['if-none-match'] : null;
|
|
3716
|
+
if ( inm && ( method === 'GET' || method === 'HEAD' )
|
|
3717
|
+
&& ( inm === '*' || String(inm).indexOf(etag) > -1 )
|
|
3718
|
+
) {
|
|
3719
|
+
setCommonHeaders();
|
|
3720
|
+
response.statusCode = 304;
|
|
3721
|
+
local.req = null; local.res = null; local.next = null;
|
|
3722
|
+
return response.end();
|
|
3723
|
+
}
|
|
3724
|
+
|
|
3725
|
+
// #STO1 s3 — OFFLOAD: an offload-capable driver hands the byte
|
|
3726
|
+
// transfer to its provider through a short-lived presigned URL.
|
|
3727
|
+
// Runs AFTER the 304 check (the key ETag needs no presign) and
|
|
3728
|
+
// carries this facade's decisions into the PROVIDER's response as
|
|
3729
|
+
// signed response-* overrides — the DOWNGRADED content type
|
|
3730
|
+
// included, which is what keeps the stored-XSS guard intact when
|
|
3731
|
+
// the provider serves the bytes. Range is deliberately NOT
|
|
3732
|
+
// evaluated here: the client re-issues it against the redirect
|
|
3733
|
+
// target and the provider answers 206/416 natively. 307 preserves
|
|
3734
|
+
// the method (HEAD stays HEAD). The redirect itself is `no-store`
|
|
3735
|
+
// — a cached redirect would outlive its signature — while the
|
|
3736
|
+
// payload's caching policy rides response-cache-control.
|
|
3737
|
+
var offloadOn = !!( driver.capabilities && driver.capabilities.offload ) && ( opts.offload !== false );
|
|
3738
|
+
if ( offloadOn && ( method === 'GET' || method === 'HEAD' ) ) {
|
|
3739
|
+
var wantsAttachment = ( opts.download === true || typeof(opts.filename) == 'string' );
|
|
3740
|
+
driver.resolve(key, {
|
|
3741
|
+
contentType : contentType,
|
|
3742
|
+
download : wantsAttachment,
|
|
3743
|
+
filename : wantsAttachment
|
|
3744
|
+
? String(opts.filename || meta.originalName || 'download').replace(/[\x00-\x1f\x7f]/g, '')
|
|
3745
|
+
: undefined,
|
|
3746
|
+
cacheControl : ( typeof(opts.cacheControl) == 'string' && opts.cacheControl !== '' )
|
|
3747
|
+
? opts.cacheControl
|
|
3748
|
+
: 'private, max-age=31536000, immutable'
|
|
3749
|
+
}, function onServeResolve(resolveErr, resolved) {
|
|
3750
|
+
if ( local.res == null ) {
|
|
3751
|
+
return;
|
|
3752
|
+
}
|
|
3753
|
+
if ( resolveErr ) {
|
|
3754
|
+
return self.throwError(response, ( resolveErr.code === 'STORAGE_NO_OBJECT' ) ? 404 : 500, resolveErr);
|
|
3755
|
+
}
|
|
3756
|
+
if ( !resolved || resolved.kind !== 'url' || typeof(resolved.url) != 'string' ) {
|
|
3757
|
+
// capability said offload, resolve() answered something
|
|
3758
|
+
// else — a driver contract violation, surfaced loudly
|
|
3759
|
+
// rather than silently degraded to the proxy path.
|
|
3760
|
+
return self.throwError(response, 500, new Error('serveFromStorage(): driver `' + driverName + '` declares capabilities.offload but resolve() returned no `{kind:\'url\'}` — driver contract violation'));
|
|
3761
|
+
}
|
|
3762
|
+
response.setHeader('x-content-type-options', 'nosniff');
|
|
3763
|
+
response.setHeader('cache-control', 'private, no-store');
|
|
3764
|
+
response.setHeader('location', resolved.url);
|
|
3765
|
+
response.statusCode = 307;
|
|
3766
|
+
local.req = null; local.res = null; local.next = null;
|
|
3767
|
+
return response.end();
|
|
3768
|
+
});
|
|
3769
|
+
return;
|
|
3770
|
+
}
|
|
3771
|
+
|
|
3772
|
+
// HEAD — full-size accounting, headers only, no driver read; the
|
|
3773
|
+
// renderStream HEAD branch ends the response without a body.
|
|
3774
|
+
if ( method === 'HEAD' ) {
|
|
3775
|
+
setCommonHeaders();
|
|
3776
|
+
response.setHeader('content-length', String(size));
|
|
3777
|
+
response.statusCode = response.statusCode || 200;
|
|
3778
|
+
return self.renderStream(null, contentType);
|
|
3779
|
+
}
|
|
3780
|
+
|
|
3781
|
+
// Range evaluation — GET only, and only when the driver can serve
|
|
3782
|
+
// ranges (capability-gated: an offloading adapter that cannot is
|
|
3783
|
+
// transparently answered with the full 200).
|
|
3784
|
+
var range = null;
|
|
3785
|
+
if ( method === 'GET' && rangesOn && request && request.headers && request.headers.range ) {
|
|
3786
|
+
var ifRange = request.headers['if-range'];
|
|
3787
|
+
var ifRangeOk = true;
|
|
3788
|
+
if ( typeof(ifRange) == 'string' && ifRange !== '' ) {
|
|
3789
|
+
// exact validator match only; anything unevaluable → full 200
|
|
3790
|
+
ifRangeOk = ( ifRange === etag ) || ( lastModified != null && ifRange === lastModified );
|
|
3791
|
+
}
|
|
3792
|
+
if ( ifRangeOk ) {
|
|
3793
|
+
range = _parseRangeHeader(request.headers.range, size);
|
|
3794
|
+
}
|
|
3795
|
+
}
|
|
3796
|
+
|
|
3797
|
+
if ( range && range.unsatisfiable ) {
|
|
3798
|
+
setCommonHeaders();
|
|
3799
|
+
response.setHeader('content-range', 'bytes */' + size);
|
|
3800
|
+
response.statusCode = 416;
|
|
3801
|
+
local.req = null; local.res = null; local.next = null;
|
|
3802
|
+
return response.end();
|
|
3803
|
+
}
|
|
3804
|
+
|
|
3805
|
+
/**
|
|
3806
|
+
* Apply the decided outcome's headers and stream the bytes.
|
|
3807
|
+
* Runs only in a driver-success callback (headers-on-success).
|
|
3808
|
+
*
|
|
3809
|
+
* @inner
|
|
3810
|
+
* @param {number} status - 200 or 206.
|
|
3811
|
+
* @param {object} extraHeaders - Outcome-specific headers.
|
|
3812
|
+
* @param {object} readable - The driver's byte stream.
|
|
3813
|
+
* @returns {void}
|
|
3814
|
+
*/
|
|
3815
|
+
var sendStream = function(status, extraHeaders, readable) {
|
|
3816
|
+
if ( local.res == null ) {
|
|
3817
|
+
return;
|
|
3818
|
+
}
|
|
3819
|
+
setCommonHeaders();
|
|
3820
|
+
for (var h in extraHeaders) {
|
|
3821
|
+
response.setHeader(h, extraHeaders[h]);
|
|
3822
|
+
}
|
|
3823
|
+
response.statusCode = status;
|
|
3824
|
+
return self.renderStream(readable, contentType);
|
|
3825
|
+
};
|
|
3826
|
+
|
|
3827
|
+
if ( range ) {
|
|
3828
|
+
driver.getRange(key, range.start, range.end, function onServeRange(rErr, readable) {
|
|
3829
|
+
if ( local.res == null ) {
|
|
3830
|
+
return;
|
|
3831
|
+
}
|
|
3832
|
+
if ( rErr ) {
|
|
3833
|
+
// post-stat race (cas grace expiry, vanished file) → 404;
|
|
3834
|
+
// anything else is an I/O anomaly → 500
|
|
3835
|
+
return self.throwError(response, ( rErr.code === 'STORAGE_NO_OBJECT' ) ? 404 : 500, rErr);
|
|
3836
|
+
}
|
|
3837
|
+
sendStream(206, {
|
|
3838
|
+
'content-range' : 'bytes ' + range.start + '-' + range.end + '/' + size,
|
|
3839
|
+
'content-length' : String(range.end - range.start + 1)
|
|
3840
|
+
}, readable);
|
|
3841
|
+
});
|
|
3842
|
+
return;
|
|
3843
|
+
}
|
|
3844
|
+
|
|
3845
|
+
driver.get(key, function onServeGet(gErr, readable) {
|
|
3846
|
+
if ( local.res == null ) {
|
|
3847
|
+
return;
|
|
3848
|
+
}
|
|
3849
|
+
if ( gErr ) {
|
|
3850
|
+
return self.throwError(response, ( gErr.code === 'STORAGE_NO_OBJECT' ) ? 404 : 500, gErr);
|
|
3851
|
+
}
|
|
3852
|
+
sendStream(200, { 'content-length': String(size) }, readable);
|
|
3853
|
+
});
|
|
3854
|
+
});
|
|
3855
|
+
}
|
|
3856
|
+
|
|
3857
|
+
|
|
3401
3858
|
/**
|
|
3402
3859
|
* Store file(s) to a targeted directory - Will create target if new
|
|
3403
3860
|
* You only need to provide the destination path
|
|
@@ -5973,17 +6430,40 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5973
6430
|
|
|
5974
6431
|
/**
|
|
5975
6432
|
* Push a Server-Sent Events payload to connected clients.
|
|
5976
|
-
* Targets the client whose `sessionID` matches the current session,
|
|
5977
|
-
* or broadcasts to all active clients when no session is found.
|
|
5978
6433
|
*
|
|
5979
|
-
*
|
|
5980
|
-
*
|
|
5981
|
-
*
|
|
6434
|
+
* The recipient is decided SERVER-side and can never be chosen by the
|
|
6435
|
+
* request body (#B364): an explicit `option.sessionID` wins, else the
|
|
6436
|
+
* payload goes to the caller's own session. With neither — and without an
|
|
6437
|
+
* explicit broadcast — this is a no-op that warns, because a push with no
|
|
6438
|
+
* resolvable recipient is a bug, and the previous fail-OPEN answer to it
|
|
6439
|
+
* was to send to everybody.
|
|
6440
|
+
*
|
|
6441
|
+
* Reaching every connected client requires `option.broadcast === true`,
|
|
6442
|
+
* supplied by your code rather than inferred from a missing value.
|
|
6443
|
+
*
|
|
6444
|
+
* @param {object|null} payload - Data to push; falls back to `req[method].payload` when `null`
|
|
6445
|
+
* @param {object} [option] - Push options, also forwarded to the transport (e.g. `{ compress: true }`)
|
|
6446
|
+
* @param {string} [option.sessionID] - Explicit recipient session id; defaults to the caller's own session
|
|
6447
|
+
* @param {boolean} [option.broadcast] - `true` (strictly) to reach every connected client
|
|
6448
|
+
* @param {string} [option.section] - Section stamped onto the payload; falls back to `req[method].section`
|
|
6449
|
+
* @param {function} [callback] - `callback(err, result)`
|
|
5982
6450
|
* @returns {void}
|
|
6451
|
+
*
|
|
6452
|
+
* @example
|
|
6453
|
+
* // to the caller's own session
|
|
6454
|
+
* self.push({ event: 'saved' });
|
|
6455
|
+
*
|
|
6456
|
+
* @example
|
|
6457
|
+
* // to a specific session your code selected
|
|
6458
|
+
* self.push({ event: 'invited' }, { sessionID: invitee.sessionId });
|
|
6459
|
+
*
|
|
6460
|
+
* @example
|
|
6461
|
+
* // to everyone — deliberate, never implicit
|
|
6462
|
+
* self.push({ event: 'maintenance' }, { broadcast: true });
|
|
5983
6463
|
*/
|
|
5984
6464
|
this.push = function(payload, option, callback) {
|
|
5985
6465
|
|
|
5986
|
-
// #B38 — released-response guard (see #B31): push is a fire-and-forget
|
|
6466
|
+
// #B38 — released-response guard (see #B31): push is a fire-and-forget send
|
|
5987
6467
|
// over the SSE/engine.io clients; on a released request (per-request refs nulled by
|
|
5988
6468
|
// a terminal exit) a no-op return is correct — the response this request would have
|
|
5989
6469
|
// pushed to is already gone. Live requests are unaffected (guard skipped).
|
|
@@ -5993,11 +6473,34 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
5993
6473
|
|
|
5994
6474
|
var req = local.req, res = local.res;
|
|
5995
6475
|
var method = req.method.toLowerCase();
|
|
5996
|
-
|
|
5997
|
-
//
|
|
5998
|
-
|
|
5999
|
-
//
|
|
6000
|
-
|
|
6476
|
+
|
|
6477
|
+
// #B364 — the recipient is NEVER read from the request body. It used to be
|
|
6478
|
+
// (`req[method].sessionID`), which let a caller aim a push at any session by
|
|
6479
|
+
// sending an id — and, when the id was absent, at EVERY connected client.
|
|
6480
|
+
// Order: explicit server-supplied id → the caller's own session → nothing.
|
|
6481
|
+
var broadcast = ( option != null && option.broadcast === true );
|
|
6482
|
+
var sessionId = null;
|
|
6483
|
+
if ( option != null && typeof(option.sessionID) == 'string' && option.sessionID !== '' ) {
|
|
6484
|
+
sessionId = option.sessionID;
|
|
6485
|
+
} else if ( typeof(req.sessionID) != 'undefined' && req.sessionID ) {
|
|
6486
|
+
sessionId = req.sessionID;
|
|
6487
|
+
} else if ( req.session != null && typeof(req.session.id) != 'undefined' && req.session.id ) {
|
|
6488
|
+
sessionId = req.session.id;
|
|
6489
|
+
}
|
|
6490
|
+
|
|
6491
|
+
// Fail CLOSED: no recipient and no explicit broadcast sends nothing at all.
|
|
6492
|
+
if ( !broadcast && !sessionId ) {
|
|
6493
|
+
console.warn('[CONTROLLER][ push ] no recipient: the request has no session and no `option.sessionID` was given, so nothing was sent. Pass `{ sessionID: <id> }` to target a session, or `{ broadcast: true }` to reach every connected client.');
|
|
6494
|
+
return;
|
|
6495
|
+
}
|
|
6496
|
+
|
|
6497
|
+
// retrieve section if existing — an explicit option wins over the request
|
|
6498
|
+
var section = null;
|
|
6499
|
+
if ( option != null && typeof(option.section) != 'undefined' ) {
|
|
6500
|
+
section = option.section;
|
|
6501
|
+
} else if ( typeof(req[method].section) != 'undefined' ) {
|
|
6502
|
+
section = req[method].section;
|
|
6503
|
+
}
|
|
6001
6504
|
|
|
6002
6505
|
if (!payload) {
|
|
6003
6506
|
payload = null;
|
|
@@ -6028,20 +6531,27 @@ if ( /^local$/i.test(process.env.NODE_SCOPE) ) {
|
|
|
6028
6531
|
clients = self.serverInstance.eio.clients;
|
|
6029
6532
|
if ( clients ) {
|
|
6030
6533
|
for (let s in clients) {
|
|
6031
|
-
|
|
6534
|
+
// #B364 — was `!clients[s].constructor.name == 'Socket'`, which parses
|
|
6535
|
+
// as `(!name) == 'Socket'` and is therefore always false: the guard
|
|
6536
|
+
// never once skipped a non-socket entry.
|
|
6537
|
+
if ( clients[s].constructor.name !== 'Socket' ) {
|
|
6032
6538
|
continue;
|
|
6033
6539
|
}
|
|
6034
6540
|
|
|
6035
6541
|
if (
|
|
6036
|
-
//
|
|
6037
|
-
|
|
6038
|
-
&& typeof(clients[s].sessionId) != 'undefined'
|
|
6039
|
-
&& clients[s].sessionId == sessionId
|
|
6542
|
+
// every client, only when the caller asked for it
|
|
6543
|
+
broadcast
|
|
6040
6544
|
||
|
|
6041
|
-
//
|
|
6042
|
-
|
|
6545
|
+
// otherwise the resolved session, and nothing else
|
|
6546
|
+
(
|
|
6547
|
+
typeof(clients[s].sessionId) != 'undefined'
|
|
6548
|
+
&& clients[s].sessionId == sessionId
|
|
6549
|
+
)
|
|
6043
6550
|
) {
|
|
6044
|
-
|
|
6551
|
+
// #B364 — was `options`, an identifier that exists nowhere in this
|
|
6552
|
+
// scope: every call threw ReferenceError here before sending, so
|
|
6553
|
+
// push() had never delivered a packet in any published release.
|
|
6554
|
+
clients[s].sendPacket("message", payload, option, callback);
|
|
6045
6555
|
}
|
|
6046
6556
|
}
|
|
6047
6557
|
}
|