gina 0.6.2 → 0.6.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +57 -0
- package/README.md +41 -12
- package/ROADMAP.md +3 -2
- package/bin/cli +19 -2
- package/framework/v0.6.3/VERSION +1 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +6 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/index.html +1 -0
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +50 -1
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +457 -57
- package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.js +1457 -58
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js +625 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.3/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/index.js +114 -0
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.js +14 -3
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.js +14 -3
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v3.js +29 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/session-store.v4.js +29 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/session-store.js +24 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/session-store.js +33 -9
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/session-store.js +25 -2
- package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/session-store.js +26 -2
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.js +201 -21
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks.js +8 -0
- package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig.js +85 -4
- package/framework/{v0.6.2 → v0.6.3}/core/gna.js +23 -1
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/src/main.js +9 -5
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/README.md +20 -0
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/form-validator.js +119 -43
- package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/src/main.js +451 -9
- package/framework/{v0.6.2 → v0.6.3}/core/server.isaac.js +50 -54
- package/framework/{v0.6.2 → v0.6.3}/core/server.js +240 -3
- package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/index.js +6 -4
- package/framework/{v0.6.2 → v0.6.3}/core/template/conf/settings.json +10 -0
- package/framework/{v0.6.2 → v0.6.3}/lib/cache/README.md +9 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/verify.js +11 -9
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp-start.js +21 -12
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.txt +1 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/init.js +13 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/dto/src/main.js +18 -11
- package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/index.js +29 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/speaker.js +30 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/math/index.js +57 -6
- package/framework/{v0.6.2 → v0.6.3}/lib/merge/src/main.js +34 -5
- package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/src/main.js +77 -4
- package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/main.js +13 -1
- package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/src/main.js +64 -2
- package/framework/v0.6.3/lib/secrets/src/backends/env.js +75 -0
- package/framework/{v0.6.2 → v0.6.3}/package.json +1 -1
- package/gna.js +5 -4
- package/llms.txt +19 -17
- package/package.json +5 -4
- package/schema/connectors.json +2 -2
- package/schema/routing.json +5 -0
- package/schema/settings.json +6 -1
- package/script/generate_gna_types.js +1 -1
- package/script/soak/couchbase-soak.js +1316 -0
- package/types/globals.d.ts +2 -0
- package/types/gna.d.ts +5 -0
- package/types/index.d.ts +1 -0
- package/utils/helper.js +38 -7
- package/framework/v0.6.2/VERSION +0 -1
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -603
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.6.2/lib/secrets/src/backends/env.js +0 -60
- /package/framework/{v0.6.2 → v0.6.3}/AUTHORS +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/config.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/content.encoding +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/locales/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/mime.types +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/entity.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/router.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/server.express.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/status.codes +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/console.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/context.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/path.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/task.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/helpers/text.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/async/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/config.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/job-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/model.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/proc.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/session-store.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/shell.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/state.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/README.md +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/index.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/validator.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.2 → v0.6.3}/lib/ws-session/src/main.js +0 -0
|
@@ -38,6 +38,12 @@ function Couchbase(conn, infos) {
|
|
|
38
38
|
* - `ExpressionScan` / `KeyScan` — USE KEYS direct KV lookup (green badge,
|
|
39
39
|
* reported as "KV lookup (USE KEYS)")
|
|
40
40
|
*
|
|
41
|
+
* Recursion covers the four child containers plans actually use: `~child`,
|
|
42
|
+
* `~children`, plus (#B193) the nested-scan containers `scans`
|
|
43
|
+
* (IntersectScan / UnionScan / OrderedIntersectScan) and `scan`
|
|
44
|
+
* (DistinctScan) — so a plan the planner serves with MULTIPLE indexes
|
|
45
|
+
* reports all of them instead of reading as "no index".
|
|
46
|
+
*
|
|
41
47
|
* @inner
|
|
42
48
|
* @param {object} profile - The plan object (meta.profile or EXPLAIN row)
|
|
43
49
|
* @returns {Array<{name: string, primary: boolean}>|null} Array of index descriptors,
|
|
@@ -77,6 +83,20 @@ function Couchbase(conn, infos) {
|
|
|
77
83
|
walk(node['~children'][i]);
|
|
78
84
|
}
|
|
79
85
|
}
|
|
86
|
+
// #B193 — the multi-index operators nest their child scans under
|
|
87
|
+
// `scans` (IntersectScan / UnionScan / OrderedIntersectScan) or
|
|
88
|
+
// `scan` (DistinctScan), NOT ~child/~children. Unwalked, every
|
|
89
|
+
// multi-index plan returned [] and the Inspector rendered it as
|
|
90
|
+
// "no index — full bucket scan" — a false negative that invites a
|
|
91
|
+
// pointless (write-amplifying) index build for a query the planner
|
|
92
|
+
// was already serving with several indexes. seen[] above already
|
|
93
|
+
// dedupes an index appearing in more than one child scan.
|
|
94
|
+
if (node['scan']) walk(node['scan']);
|
|
95
|
+
if (node['scans'] && Array.isArray(node['scans'])) {
|
|
96
|
+
for (var j = 0; j < node['scans'].length; j++) {
|
|
97
|
+
walk(node['scans'][j]);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
80
100
|
};
|
|
81
101
|
walk(root);
|
|
82
102
|
return results;
|
|
@@ -127,6 +147,84 @@ function Couchbase(conn, infos) {
|
|
|
127
147
|
return cluster;
|
|
128
148
|
};
|
|
129
149
|
|
|
150
|
+
/**
|
|
151
|
+
* #B243 — guards the assembled N1QL parameter list against values the
|
|
152
|
+
* Couchbase SDK cannot serialize. This defends against a PROCESS ABORT,
|
|
153
|
+
* not a normal validation failure.
|
|
154
|
+
*
|
|
155
|
+
* The SDK maps `JSON.stringify` over the parameter list. For a `function`,
|
|
156
|
+
* a `symbol`, or an `undefined`, `JSON.stringify` returns the VALUE
|
|
157
|
+
* `undefined` rather than a string; the native binding coerces that to the
|
|
158
|
+
* empty string, and the C++ core's JSON parse of `""` throws
|
|
159
|
+
* `tao::pegtl::parse_error` on an internal thread, reaching
|
|
160
|
+
* `std::terminate()` and then `abort()`. That kills the whole bundle — no
|
|
161
|
+
* `try/catch`, `uncaughtException` or `unhandledRejection` can intercept
|
|
162
|
+
* it, so the request cannot even fail with a 500. Measured against a live
|
|
163
|
+
* cluster on SDK 4.1.3 and 4.7.1 (4.2.0+ maps a bare `undefined` to null,
|
|
164
|
+
* but still aborts on functions and symbols).
|
|
165
|
+
*
|
|
166
|
+
* Reachable WITHOUT any misuse of the SDK: the cursor-style assembly branch
|
|
167
|
+
* fills `queryParams[i]` for every `i < params.length` while guarding only
|
|
168
|
+
* `undefined`, so a caller that under-supplies one argument AND passes a
|
|
169
|
+
* trailing callback puts the CALLBACK itself into a parameter slot. The
|
|
170
|
+
* arity check at the top of the query method cannot catch that shape — it
|
|
171
|
+
* only fires when the LAST argument is not a function.
|
|
172
|
+
*
|
|
173
|
+
* Scope: `typeof` covers every value `JSON.stringify` renders as
|
|
174
|
+
* `undefined` EXCEPT an object whose own `toJSON()` returns undefined,
|
|
175
|
+
* which is left unguarded deliberately — detecting it would cost a full
|
|
176
|
+
* `JSON.stringify` per parameter on every query, and no realistic call site
|
|
177
|
+
* produces it.
|
|
178
|
+
*
|
|
179
|
+
* @param {Array|object} queryParams - Assembled parameter list: a positional array, or a named map.
|
|
180
|
+
* @param {string} entityName - Entity the query belongs to (message only).
|
|
181
|
+
* @param {string} name - Query method name (message only).
|
|
182
|
+
* @param {string} source - Path of the backing `.sql` file (message only).
|
|
183
|
+
* @param {Array} [params] - Declared placeholders, used for the arity hint.
|
|
184
|
+
* @returns {TypeError|null} A ready-to-surface error, or `null` when every parameter is serializable.
|
|
185
|
+
* @private
|
|
186
|
+
*
|
|
187
|
+
* @example
|
|
188
|
+
* var err = getUnserializableParamError(['a', undefined], 'invoice', 'getByRef', src, ['$1','$2']);
|
|
189
|
+
* if (err) { return cb(err); } // never reaches the SDK, so the process survives
|
|
190
|
+
*/
|
|
191
|
+
var getUnserializableParamError = function(queryParams, entityName, name, source, params) {
|
|
192
|
+
if ( !queryParams || typeof(queryParams) != 'object' ) {
|
|
193
|
+
return null;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
var isPositional = Array.isArray(queryParams)
|
|
197
|
+
, keys = isPositional ? null : Object.keys(queryParams)
|
|
198
|
+
, len = isPositional ? queryParams.length : keys.length
|
|
199
|
+
, declared = ( params && params.length ) ? params.length : 0
|
|
200
|
+
;
|
|
201
|
+
|
|
202
|
+
for (var i = 0; i < len; ++i) {
|
|
203
|
+
var key = isPositional ? i : keys[i]
|
|
204
|
+
, type = typeof(queryParams[key])
|
|
205
|
+
;
|
|
206
|
+
|
|
207
|
+
if ( type != 'undefined' && type != 'function' && type != 'symbol' ) {
|
|
208
|
+
continue;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
var label = isPositional ? ('$' + (i + 1)) : ('$' + key);
|
|
212
|
+
var hint = ( type == 'function' )
|
|
213
|
+
? 'A callback landed in a parameter slot: the query declares ' + declared
|
|
214
|
+
+ ' parameter(s), so every one of them must be passed BEFORE the callback.'
|
|
215
|
+
: 'Pass `null` for an intentionally empty parameter — `null` serializes correctly.';
|
|
216
|
+
|
|
217
|
+
var _err = new TypeError('[N1QL][ ' + entityName + '#' + name + '() ] parameter ' + label
|
|
218
|
+
+ ' is a `' + type + '`, which the Couchbase SDK cannot serialize: dispatching it would '
|
|
219
|
+
+ 'abort the process instead of raising an error. ' + hint
|
|
220
|
+
+ ' Please refer to [ ' + source + ' ]');
|
|
221
|
+
_err.code = 'GINA_COUCHBASE_UNSERIALIZABLE_PARAM';
|
|
222
|
+
return _err;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
return null;
|
|
226
|
+
};
|
|
227
|
+
|
|
130
228
|
/**
|
|
131
229
|
* Runs EXPLAIN on a N1QL statement asynchronously and caches the
|
|
132
230
|
* extracted indexes. Patches `queryEntry.indexes` in-place once
|
|
@@ -772,6 +870,22 @@ function Couchbase(conn, infos) {
|
|
|
772
870
|
if ( query.indexOf('$scope') > -1 ) {
|
|
773
871
|
query = query.replace(/\$scope/g, "'" + (infos.scope || process.env.NODE_SCOPE) + "'");
|
|
774
872
|
}
|
|
873
|
+
// #B243 — refuse a parameter the SDK cannot serialize BEFORE dispatch.
|
|
874
|
+
// This is the single site where `queryOptions.parameters` is assigned,
|
|
875
|
+
// so both assembly branches above (and any future one) are covered by
|
|
876
|
+
// this one gate. It has to run here: once the value reaches the SDK the
|
|
877
|
+
// failure is an uncatchable `abort()`, so there is no downstream
|
|
878
|
+
// recovery point. Surfacing matches the missing-context precedent at
|
|
879
|
+
// the top of this method — callback when the caller passed one, throw
|
|
880
|
+
// otherwise — which turns a bundle-killing crash into an ordinary 500.
|
|
881
|
+
var _unserializableErr = getUnserializableParamError(queryParams, entityName, name, source, params);
|
|
882
|
+
if (_unserializableErr) {
|
|
883
|
+
if (_mainCallback) {
|
|
884
|
+
return _mainCallback(_unserializableErr);
|
|
885
|
+
}
|
|
886
|
+
throw _unserializableErr;
|
|
887
|
+
}
|
|
888
|
+
|
|
775
889
|
queryOptions.parameters = queryParams;
|
|
776
890
|
|
|
777
891
|
// JUNE 2021 patch
|
|
@@ -9,10 +9,21 @@ var console = lib.logger;
|
|
|
9
9
|
var version = 3; // by default
|
|
10
10
|
// old - GINA_FRAMEWORK_DIR + '/package.json'
|
|
11
11
|
var dependenciesPath = getPath('project') + '/package.json';// jshint ignore:line
|
|
12
|
-
|
|
12
|
+
// #B203 — `|| {}`: a project package.json without a `dependencies` key used to
|
|
13
|
+
// TypeError on the `.couchbase` read below.
|
|
14
|
+
var dependencies = JSON.parse(fs.readFileSync(dependenciesPath)).dependencies || {};// jshint ignore:line
|
|
13
15
|
if ( dependencies.couchbase ) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
+
// #B203 — the SDK major is the pin's FIRST integer: the former caret-only
|
|
17
|
+
// strip mangled range pins (`~4.5.0` became `~4`, `>=4.5` became `>=4`),
|
|
18
|
+
// which slipped past the #CN8 v2 floor (parseInt of the mangled token is
|
|
19
|
+
// NaN) and died at the existsSync gate below with a misdirecting
|
|
20
|
+
// "supported majors" error.
|
|
21
|
+
var pinnedMajor = String(dependencies.couchbase).match(/\d+/);
|
|
22
|
+
if ( !pinnedMajor ) {
|
|
23
|
+
throw new Error('[ CONNECTOR ][ couchbase ] could not derive the SDK major from the project package.json couchbase dependency pin: "'
|
|
24
|
+
+ dependencies.couchbase + '". Use a numeric range or exact version (e.g. ^4.6.1) — supported couchbase SDK majors are 3 and 4.');
|
|
25
|
+
}
|
|
26
|
+
version = pinnedMajor[0];
|
|
16
27
|
}
|
|
17
28
|
// #CN8 — fail fast on SDK v2 (or older). The migration is a driver bump, not a config edit:
|
|
18
29
|
// upgrade the `couchbase` dependency in your project package.json to ^3 or ^4.
|
|
@@ -8,10 +8,21 @@ var console = lib.logger;
|
|
|
8
8
|
// Default to v3 when the project does not pin a couchbase version.
|
|
9
9
|
var version = 3; // by default
|
|
10
10
|
var dependenciesPath = getPath('project') + '/package.json';// jshint ignore:line
|
|
11
|
-
|
|
11
|
+
// #B203 — `|| {}`: a project package.json without a `dependencies` key used to
|
|
12
|
+
// TypeError on the `.couchbase` read below.
|
|
13
|
+
var dependencies = JSON.parse(fs.readFileSync(dependenciesPath)).dependencies || {};// jshint ignore:line
|
|
12
14
|
if ( dependencies.couchbase ) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
// #B203 — the SDK major is the pin's FIRST integer: the former caret-only
|
|
16
|
+
// strip mangled range pins (`~4.5.0` became `~4`, `>=4.5` became `>=4`),
|
|
17
|
+
// which slipped past the #CN8 v2 floor (parseInt of the mangled token is
|
|
18
|
+
// NaN) and died at the existsSync gate below with a misdirecting
|
|
19
|
+
// "supported majors" error.
|
|
20
|
+
var pinnedMajor = String(dependencies.couchbase).match(/\d+/);
|
|
21
|
+
if ( !pinnedMajor ) {
|
|
22
|
+
throw new Error('[ CONNECTOR ][ couchbase ] session-store could not derive the SDK major from the project package.json couchbase dependency pin: "'
|
|
23
|
+
+ dependencies.couchbase + '". Use a numeric range or exact version (e.g. ^4.6.1) — supported couchbase SDK majors are 3 and 4.');
|
|
24
|
+
}
|
|
25
|
+
version = pinnedMajor[0];
|
|
15
26
|
}
|
|
16
27
|
// #CN8 — fail fast on SDK v2 (or older). The migration is a driver bump, not a config edit:
|
|
17
28
|
// upgrade the `couchbase` dependency in your project package.json to ^3 or ^4.
|
|
@@ -71,7 +71,7 @@ module.exports = function(session, bundle){
|
|
|
71
71
|
* @constructor
|
|
72
72
|
* @param {object} options
|
|
73
73
|
* @param {object} options.db - Open Couchbase bucket (required).
|
|
74
|
-
* @param {number} [options.ttl=null] - Expiry in seconds. Unset, the cookie's maxAge applies, then one day.
|
|
74
|
+
* @param {number} [options.ttl=null] - Expiry in seconds. Unset, the cookie's maxAge applies, then one day. Must be > 0 when set — non-positive refuses (#B207).
|
|
75
75
|
* @param {string} [options.prefix='sess:'] - Document key prefix.
|
|
76
76
|
* @param {number} [options.connectionTimeout=10000] - Connect-time timeout in ms.
|
|
77
77
|
* @param {number} [options.operationTimeout=10000] - Per-operation timeout in ms.
|
|
@@ -99,6 +99,15 @@ module.exports = function(session, bundle){
|
|
|
99
99
|
this.client.connectionTimeout = options.connectionTimeout || 10000;
|
|
100
100
|
this.client.operationTimeout = options.operationTimeout || 10000;
|
|
101
101
|
|
|
102
|
+
// #B207 — parity with the redis/sqlite/mongodb/scylladb stores: a
|
|
103
|
+
// non-positive ttl is refused at construction. couchbase collapsed 0
|
|
104
|
+
// at the constructor and still upserted a ZERO expiry — a document
|
|
105
|
+
// that never expires — when the cookie's decaying maxAge resolved to
|
|
106
|
+
// <= 0 at set()/touch().
|
|
107
|
+
if (options.ttl != null && !(options.ttl > 0)) {
|
|
108
|
+
throw new Error('['+ bundle +'][SessionStore v3] `ttl` must be a positive number of seconds or unset — got '
|
|
109
|
+
+ JSON.stringify(options.ttl) + ' (store options). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
110
|
+
}
|
|
102
111
|
this.ttl = options.ttl || null;
|
|
103
112
|
}
|
|
104
113
|
|
|
@@ -190,6 +199,15 @@ module.exports = function(session, bundle){
|
|
|
190
199
|
: oneDay)
|
|
191
200
|
;
|
|
192
201
|
|
|
202
|
+
// #B207 — a resolved ttl <= 0 (decaying cookie.maxAge at/past
|
|
203
|
+
// expiry) must never reach the SDK: a zero expiry stores the
|
|
204
|
+
// document WITHOUT expiration, and a negative one is SDK-version-
|
|
205
|
+
// dependent. No-op — the existing record keeps its original
|
|
206
|
+
// expiry (mirrors the #B166 guard the sibling stores carry).
|
|
207
|
+
if (ttl <= 0) {
|
|
208
|
+
return fn(null);
|
|
209
|
+
}
|
|
210
|
+
|
|
193
211
|
if (ttl > 0) {
|
|
194
212
|
sess.lastModified = new Date().toISOString();
|
|
195
213
|
}
|
|
@@ -241,7 +259,9 @@ module.exports = function(session, bundle){
|
|
|
241
259
|
* Also re-stamps `sess.lastModified` (ISO 8601, UTC) whenever `ttl > 0`.
|
|
242
260
|
* The stamp is unconditional by design: the `upsert` extends the document's
|
|
243
261
|
* expiry on every call, and the client-side session countdown derives its
|
|
244
|
-
* origin from that stamp, so it must track every extension (#B165).
|
|
262
|
+
* origin from that stamp, so it must track every extension (#B165). A
|
|
263
|
+
* resolved ttl <= 0 is a no-op — never extend with a non-positive
|
|
264
|
+
* expiry (#B207).
|
|
245
265
|
*
|
|
246
266
|
* @param {String} sid
|
|
247
267
|
* @param {Session} sess
|
|
@@ -259,6 +279,13 @@ module.exports = function(session, bundle){
|
|
|
259
279
|
: oneDay)
|
|
260
280
|
;
|
|
261
281
|
|
|
282
|
+
// #B207 — same guard as set(): never extend with a non-positive
|
|
283
|
+
// expiry (zero = the document never expires; negative is SDK-version-
|
|
284
|
+
// dependent). The #B166 sibling-store guards are identical.
|
|
285
|
+
if (ttl <= 0) {
|
|
286
|
+
return fn(null);
|
|
287
|
+
}
|
|
288
|
+
|
|
262
289
|
// #B165 — an idle-check used to gate this stamp. It compared an elapsed
|
|
263
290
|
// value in MILLISECONDS against `ttl` in SECONDS, so it fired ~1000x too
|
|
264
291
|
// eagerly (86.4s idle on the 86400s default). Correcting only the units
|
|
@@ -74,7 +74,7 @@ module.exports = function(session, bundle){
|
|
|
74
74
|
* @constructor
|
|
75
75
|
* @param {object} options
|
|
76
76
|
* @param {object} options.db - Open Couchbase bucket (required).
|
|
77
|
-
* @param {number} [options.ttl=null] - Expiry in seconds. Unset, the cookie's maxAge applies, then one day.
|
|
77
|
+
* @param {number} [options.ttl=null] - Expiry in seconds. Unset, the cookie's maxAge applies, then one day. Must be > 0 when set — non-positive refuses (#B207).
|
|
78
78
|
* @param {string} [options.prefix='sess:'] - Document key prefix.
|
|
79
79
|
* @param {number} [options.connectionTimeout=10000] - Connect-time timeout in ms.
|
|
80
80
|
* @param {number} [options.operationTimeout=10000] - Per-operation timeout in ms.
|
|
@@ -102,6 +102,15 @@ module.exports = function(session, bundle){
|
|
|
102
102
|
this.client.connectionTimeout = options.connectionTimeout || 10000;
|
|
103
103
|
this.client.operationTimeout = options.operationTimeout || 10000;
|
|
104
104
|
|
|
105
|
+
// #B207 — parity with the redis/sqlite/mongodb/scylladb stores: a
|
|
106
|
+
// non-positive ttl is refused at construction. couchbase collapsed 0
|
|
107
|
+
// at the constructor and still upserted a ZERO expiry — a document
|
|
108
|
+
// that never expires — when the cookie's decaying maxAge resolved to
|
|
109
|
+
// <= 0 at set()/touch().
|
|
110
|
+
if (options.ttl != null && !(options.ttl > 0)) {
|
|
111
|
+
throw new Error('['+ bundle +'][SessionStore v4] `ttl` must be a positive number of seconds or unset — got '
|
|
112
|
+
+ JSON.stringify(options.ttl) + ' (store options). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
113
|
+
}
|
|
105
114
|
this.ttl = options.ttl || null;
|
|
106
115
|
}
|
|
107
116
|
|
|
@@ -242,6 +251,15 @@ module.exports = function(session, bundle){
|
|
|
242
251
|
: oneDay)
|
|
243
252
|
;
|
|
244
253
|
|
|
254
|
+
// #B207 — a resolved ttl <= 0 (decaying cookie.maxAge at/past
|
|
255
|
+
// expiry) must never reach the SDK: a zero expiry stores the
|
|
256
|
+
// document WITHOUT expiration, and a negative one is SDK-version-
|
|
257
|
+
// dependent. No-op — the existing record keeps its original
|
|
258
|
+
// expiry (mirrors the #B166 guard the sibling stores carry).
|
|
259
|
+
if (ttl <= 0) {
|
|
260
|
+
return fn(null);
|
|
261
|
+
}
|
|
262
|
+
|
|
245
263
|
if (ttl > 0) {
|
|
246
264
|
// #B165 — was `.format('isoDateTime')`, a zone-less local-time
|
|
247
265
|
// string ("yyyy-mm-dd'T'HH:MM:ss", helpers/dateFormat.js). The
|
|
@@ -316,7 +334,9 @@ module.exports = function(session, bundle){
|
|
|
316
334
|
* Also re-stamps `sess.lastModified` (ISO 8601, UTC) whenever `ttl > 0`.
|
|
317
335
|
* The stamp is unconditional by design: the `upsert` extends the document's
|
|
318
336
|
* expiry on every call, and the client-side session countdown derives its
|
|
319
|
-
* origin from that stamp, so it must track every extension (#B165).
|
|
337
|
+
* origin from that stamp, so it must track every extension (#B165). A
|
|
338
|
+
* resolved ttl <= 0 is a no-op — never extend with a non-positive
|
|
339
|
+
* expiry (#B207).
|
|
320
340
|
*
|
|
321
341
|
* @param {String} sid
|
|
322
342
|
* @param {Session} sess
|
|
@@ -334,6 +354,13 @@ module.exports = function(session, bundle){
|
|
|
334
354
|
: oneDay)
|
|
335
355
|
;
|
|
336
356
|
|
|
357
|
+
// #B207 — same guard as set(): never extend with a non-positive
|
|
358
|
+
// expiry (zero = the document never expires; negative is SDK-version-
|
|
359
|
+
// dependent). The #B166 sibling-store guards are identical.
|
|
360
|
+
if (ttl <= 0) {
|
|
361
|
+
return fn(null);
|
|
362
|
+
}
|
|
363
|
+
|
|
337
364
|
// #B165 — an idle-check used to gate this stamp. It compared an elapsed
|
|
338
365
|
// value in MILLISECONDS against `ttl` in SECONDS, so it fired ~1000x too
|
|
339
366
|
// eagerly (86.4s idle on the 86400s default). Correcting only the units
|
|
@@ -46,8 +46,9 @@ var noop = function() {};
|
|
|
46
46
|
* intent (return active sessions only) is the same.
|
|
47
47
|
*
|
|
48
48
|
* @param {object} session - The `express-session` module (must have `.Store` on it).
|
|
49
|
-
*
|
|
50
|
-
*
|
|
49
|
+
* `session.name` is express-session's read-only function name —
|
|
50
|
+
* the literal `'session'` — so the bundle's connectors.json must
|
|
51
|
+
* declare its store entry under the key `"session"` (#B206).
|
|
51
52
|
* @param {string} bundle - Bundle name — used to look up `getConfig()[bundle][env]`.
|
|
52
53
|
* @returns {function} - MongodbStore constructor.
|
|
53
54
|
*/
|
|
@@ -138,6 +139,7 @@ module.exports = function(session, bundle) {
|
|
|
138
139
|
* @param {string} [options.collection] - Sessions collection (default 'sessions').
|
|
139
140
|
* @param {number} [options.ttl] - Default TTL seconds (default: connectors.json ttl;
|
|
140
141
|
* unset → cookie maxAge drives expiry, else 86400).
|
|
142
|
+
* Must be > 0 when set — non-positive refuses (#B207).
|
|
141
143
|
* @throws {Error} when `database` is missing.
|
|
142
144
|
*/
|
|
143
145
|
function MongodbStore(options) {
|
|
@@ -145,6 +147,19 @@ module.exports = function(session, bundle) {
|
|
|
145
147
|
Store.call(this, options);
|
|
146
148
|
|
|
147
149
|
this.collection = (options.collection != null) ? options.collection : (connConf.collection || 'sessions');
|
|
150
|
+
// #B207 — a non-positive ttl is refused at construction: `ttl: 0` used
|
|
151
|
+
// to collapse to the maxAge fallback through double truthiness (options
|
|
152
|
+
// preserve + `this.ttl ||` at every use site), silently meaning "unset",
|
|
153
|
+
// while a RESOLVED ttl <= 0 reached backend-specific semantics. A ttl
|
|
154
|
+
// is a positive number of seconds, or unset.
|
|
155
|
+
if (options.ttl != null && !(options.ttl > 0)) {
|
|
156
|
+
throw new Error('[' + bundle + '][MongodbStore] `ttl` must be a positive number of seconds or unset — got '
|
|
157
|
+
+ JSON.stringify(options.ttl) + ' (store options). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
158
|
+
}
|
|
159
|
+
if (connConf.ttl != null && !(connConf.ttl > 0)) {
|
|
160
|
+
throw new Error('[' + bundle + '][MongodbStore] `ttl` must be a positive number of seconds or unset — got '
|
|
161
|
+
+ JSON.stringify(connConf.ttl) + ' (connectors.json session entry). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
162
|
+
}
|
|
148
163
|
// #B163 — was `connConf.ttl || oneDay`: the implicit one-day default made the
|
|
149
164
|
// cookie-maxAge fallback in set()/touch() unreachable; unset now stays null (couchbase parity).
|
|
150
165
|
this.ttl = (options.ttl != null) ? options.ttl : (connConf.ttl || null);
|
|
@@ -269,6 +284,13 @@ module.exports = function(session, bundle) {
|
|
|
269
284
|
var maxAge = sess.cookie && sess.cookie.maxAge;
|
|
270
285
|
var ttl = this.ttl || ('number' === typeof maxAge ? maxAge / 1000 | 0 : oneDay);
|
|
271
286
|
|
|
287
|
+
// #B207 — a resolved ttl <= 0 means the session is already at/past its
|
|
288
|
+
// expiry: writing an immediately-expired document is pointless. No-op
|
|
289
|
+
// for parity with the sibling stores (mirrors the #B166 touch() guard).
|
|
290
|
+
if (ttl <= 0) {
|
|
291
|
+
return fn(null);
|
|
292
|
+
}
|
|
293
|
+
|
|
272
294
|
if (ttl > 0) {
|
|
273
295
|
sess.lastModified = new Date().toISOString();
|
|
274
296
|
}
|
|
@@ -37,8 +37,10 @@ var noop = function() {};
|
|
|
37
37
|
* Supports standalone Redis, Redis Cluster, and TLS (ElastiCache, Cloud Memorystore, Upstash).
|
|
38
38
|
*
|
|
39
39
|
* @param {object} session - The `express-session` module (must have `.Store` on it).
|
|
40
|
-
*
|
|
41
|
-
*
|
|
40
|
+
* `session.name` is express-session's read-only function
|
|
41
|
+
* name — the literal `'session'` — so the bundle's
|
|
42
|
+
* connectors.json must declare its store entry under the
|
|
43
|
+
* key `"session"` (#B206).
|
|
42
44
|
* @param {string} bundle - Bundle name — used to look up `getConfig()[bundle][env]`.
|
|
43
45
|
* @returns {function} - RedisStore constructor.
|
|
44
46
|
*/
|
|
@@ -54,7 +56,7 @@ module.exports = function(session, bundle) {
|
|
|
54
56
|
// `getConfig()` and `getContext()` are framework globals injected by gna.js.
|
|
55
57
|
var env = getContext().env;
|
|
56
58
|
var conf = getConfig()[bundle][env];
|
|
57
|
-
var connName = session.name; // the
|
|
59
|
+
var connName = session.name; // express-session's read-only function name — always the literal 'session' (#B206)
|
|
58
60
|
var connConf = (conf && conf.content && conf.content.connectors && conf.content.connectors[connName]) || {};
|
|
59
61
|
|
|
60
62
|
/**
|
|
@@ -73,6 +75,8 @@ module.exports = function(session, bundle) {
|
|
|
73
75
|
* @param {string} [options.prefix] - Session key prefix (default: connectors.json → 'sess:').
|
|
74
76
|
* @param {number} [options.ttl] - Session TTL in seconds (default: connectors.json ttl;
|
|
75
77
|
* unset → cookie maxAge drives expiry, else 86400).
|
|
78
|
+
* Must be > 0 when set — non-positive refuses (#B207).
|
|
79
|
+
* @throws {Error} When `ttl` is configured non-positive on either channel (#B207).
|
|
76
80
|
*/
|
|
77
81
|
function RedisStore(options) {
|
|
78
82
|
var self = this;
|
|
@@ -80,6 +84,20 @@ module.exports = function(session, bundle) {
|
|
|
80
84
|
Store.call(this, options);
|
|
81
85
|
|
|
82
86
|
this.prefix = (options.prefix != null) ? options.prefix : (connConf.prefix || 'sess:');
|
|
87
|
+
|
|
88
|
+
// #B207 — a non-positive ttl is refused at construction: `ttl: 0` used
|
|
89
|
+
// to collapse to the maxAge fallback through double truthiness (options
|
|
90
|
+
// preserve + `this.ttl ||` at every use site), silently meaning "unset",
|
|
91
|
+
// while a RESOLVED ttl <= 0 reached backend-specific semantics. A ttl
|
|
92
|
+
// is a positive number of seconds, or unset.
|
|
93
|
+
if (options.ttl != null && !(options.ttl > 0)) {
|
|
94
|
+
throw new Error('[' + bundle + '][RedisStore] `ttl` must be a positive number of seconds or unset — got '
|
|
95
|
+
+ JSON.stringify(options.ttl) + ' (store options). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
96
|
+
}
|
|
97
|
+
if (connConf.ttl != null && !(connConf.ttl > 0)) {
|
|
98
|
+
throw new Error('[' + bundle + '][RedisStore] `ttl` must be a positive number of seconds or unset — got '
|
|
99
|
+
+ JSON.stringify(connConf.ttl) + ' (connectors.json session entry). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
100
|
+
}
|
|
83
101
|
// #B163 — was `connConf.ttl || oneDay`: the implicit one-day default made the
|
|
84
102
|
// cookie-maxAge fallback in set()/touch() unreachable; unset now stays null (couchbase parity).
|
|
85
103
|
this.ttl = (options.ttl != null) ? options.ttl : (connConf.ttl || null);
|
|
@@ -166,7 +184,8 @@ module.exports = function(session, bundle) {
|
|
|
166
184
|
|
|
167
185
|
/**
|
|
168
186
|
* Commit the given `sess` object associated with `sid`.
|
|
169
|
-
*
|
|
187
|
+
* Always SETEX — a resolved ttl <= 0 is a no-op, never an expiry-less
|
|
188
|
+
* SET (#B207).
|
|
170
189
|
*
|
|
171
190
|
* @param {string} sid - Session ID.
|
|
172
191
|
* @param {object} sess - Session data.
|
|
@@ -178,6 +197,15 @@ module.exports = function(session, bundle) {
|
|
|
178
197
|
var maxAge = sess.cookie && sess.cookie.maxAge;
|
|
179
198
|
var ttl = this.ttl || ('number' === typeof maxAge ? maxAge / 1000 | 0 : oneDay);
|
|
180
199
|
|
|
200
|
+
// #B207 — a resolved ttl <= 0 means the session is already at/past its
|
|
201
|
+
// expiry (cookie.maxAge is a decaying remainder): the former plain-SET
|
|
202
|
+
// fallback wrote the key with NO expiry, making it immortal. No-op
|
|
203
|
+
// instead — the existing record dies on its original schedule. Mirrors
|
|
204
|
+
// the #B166 touch() guard.
|
|
205
|
+
if (ttl <= 0) {
|
|
206
|
+
return fn(null);
|
|
207
|
+
}
|
|
208
|
+
|
|
181
209
|
if (ttl > 0) {
|
|
182
210
|
sess.lastModified = new Date().toISOString();
|
|
183
211
|
}
|
|
@@ -191,11 +219,7 @@ module.exports = function(session, bundle) {
|
|
|
191
219
|
|
|
192
220
|
console.debug('[RedisStore] SETEX "' + key + '" ttl:' + ttl);
|
|
193
221
|
|
|
194
|
-
|
|
195
|
-
this.client.setex(key, ~~ttl, data, fn);
|
|
196
|
-
} else {
|
|
197
|
-
this.client.set(key, data, fn);
|
|
198
|
-
}
|
|
222
|
+
this.client.setex(key, ~~ttl, data, fn);
|
|
199
223
|
};
|
|
200
224
|
|
|
201
225
|
/**
|
|
@@ -48,8 +48,9 @@ var noop = function() {};
|
|
|
48
48
|
* waiting for TTL to expire.
|
|
49
49
|
*
|
|
50
50
|
* @param {object} session - The `express-session` module (must have `.Store` on it).
|
|
51
|
-
*
|
|
52
|
-
*
|
|
51
|
+
* `session.name` is express-session's read-only function name —
|
|
52
|
+
* the literal `'session'` — so the bundle's connectors.json must
|
|
53
|
+
* declare its store entry under the key `"session"` (#B206).
|
|
53
54
|
* @param {string} bundle - Bundle name — used to look up `getConfig()[bundle][env]`.
|
|
54
55
|
* @returns {function} - ScylladbStore constructor.
|
|
55
56
|
*/
|
|
@@ -134,12 +135,26 @@ module.exports = function(session, bundle) {
|
|
|
134
135
|
* @param {string} [options.table] - Sessions table name (default: connectors.json → 'sessions').
|
|
135
136
|
* @param {number} [options.ttl] - Default TTL seconds (default: connectors.json ttl;
|
|
136
137
|
* unset → cookie maxAge drives expiry, else 86400).
|
|
138
|
+
* Must be > 0 when set — non-positive refuses (#B207).
|
|
137
139
|
*/
|
|
138
140
|
function ScylladbStore(options) {
|
|
139
141
|
options = options || {};
|
|
140
142
|
Store.call(this, options);
|
|
141
143
|
|
|
142
144
|
this.table = (options.table != null) ? options.table : (connConf.table || 'sessions');
|
|
145
|
+
// #B207 — a non-positive ttl is refused at construction: `ttl: 0` used
|
|
146
|
+
// to collapse to the maxAge fallback through double truthiness (options
|
|
147
|
+
// preserve + `this.ttl ||` at every use site), silently meaning "unset",
|
|
148
|
+
// while a RESOLVED ttl <= 0 reached backend-specific semantics. A ttl
|
|
149
|
+
// is a positive number of seconds, or unset.
|
|
150
|
+
if (options.ttl != null && !(options.ttl > 0)) {
|
|
151
|
+
throw new Error('[' + bundle + '][ScylladbStore] `ttl` must be a positive number of seconds or unset — got '
|
|
152
|
+
+ JSON.stringify(options.ttl) + ' (store options). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
153
|
+
}
|
|
154
|
+
if (connConf.ttl != null && !(connConf.ttl > 0)) {
|
|
155
|
+
throw new Error('[' + bundle + '][ScylladbStore] `ttl` must be a positive number of seconds or unset — got '
|
|
156
|
+
+ JSON.stringify(connConf.ttl) + ' (connectors.json session entry). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
157
|
+
}
|
|
143
158
|
// #B163 — was `connConf.ttl || oneDay`: the implicit one-day default made the
|
|
144
159
|
// cookie-maxAge fallback in set()/touch() unreachable; unset now stays null (couchbase parity).
|
|
145
160
|
this.ttl = (options.ttl != null) ? options.ttl : (connConf.ttl || null);
|
|
@@ -219,6 +234,14 @@ module.exports = function(session, bundle) {
|
|
|
219
234
|
var maxAge = sess.cookie && sess.cookie.maxAge;
|
|
220
235
|
var ttl = this.ttl || ('number' === typeof maxAge ? maxAge / 1000 | 0 : oneDay);
|
|
221
236
|
|
|
237
|
+
// #B207 — a resolved ttl <= 0 must never reach CQL: `USING TTL 0`
|
|
238
|
+
// stores the row WITHOUT expiry (immortal), and a negative TTL is a
|
|
239
|
+
// server error. No-op — the existing record dies on its original
|
|
240
|
+
// schedule (mirrors the #B166 touch() guard).
|
|
241
|
+
if (ttl <= 0) {
|
|
242
|
+
return fn(null);
|
|
243
|
+
}
|
|
244
|
+
|
|
222
245
|
if (ttl > 0) {
|
|
223
246
|
sess.lastModified = new Date().toISOString();
|
|
224
247
|
}
|
|
@@ -42,8 +42,10 @@ var noop = function() {};
|
|
|
42
42
|
* For multi-pod horizontal scaling use the Redis connector instead.
|
|
43
43
|
*
|
|
44
44
|
* @param {object} session - The `express-session` module (must have `.Store` on it).
|
|
45
|
-
*
|
|
46
|
-
*
|
|
45
|
+
* `session.name` is express-session's read-only function
|
|
46
|
+
* name — the literal `'session'` — so the bundle's
|
|
47
|
+
* connectors.json must declare its store entry under the
|
|
48
|
+
* key `"session"` (#B206).
|
|
47
49
|
* @param {string} bundle - Bundle name — used to look up `getConfig()[bundle][env]`.
|
|
48
50
|
* @returns {function} - SqliteStore constructor.
|
|
49
51
|
*/
|
|
@@ -73,6 +75,7 @@ module.exports = function(session, bundle) {
|
|
|
73
75
|
* @param {string} [options.prefix] - Session key prefix (default: `'sess:'`).
|
|
74
76
|
* @param {number} [options.ttl] - Session TTL in seconds (default: connectors.json ttl;
|
|
75
77
|
* unset → cookie maxAge drives expiry, else 86400).
|
|
78
|
+
* Must be > 0 when set — non-positive refuses (#B207).
|
|
76
79
|
* @param {number} [options.cleanupInterval] - Expired-session purge interval in seconds.
|
|
77
80
|
* Set to 0 to disable. (default: 900).
|
|
78
81
|
*/
|
|
@@ -82,6 +85,19 @@ module.exports = function(session, bundle) {
|
|
|
82
85
|
Store.call(this, options);
|
|
83
86
|
|
|
84
87
|
this.prefix = (options.prefix != null) ? options.prefix : (connConf.prefix || 'sess:');
|
|
88
|
+
// #B207 — a non-positive ttl is refused at construction: `ttl: 0` used
|
|
89
|
+
// to collapse to the maxAge fallback through double truthiness (options
|
|
90
|
+
// preserve + `this.ttl ||` at every use site), silently meaning "unset",
|
|
91
|
+
// while a RESOLVED ttl <= 0 reached backend-specific semantics. A ttl
|
|
92
|
+
// is a positive number of seconds, or unset.
|
|
93
|
+
if (options.ttl != null && !(options.ttl > 0)) {
|
|
94
|
+
throw new Error('[' + bundle + '][SqliteStore] `ttl` must be a positive number of seconds or unset — got '
|
|
95
|
+
+ JSON.stringify(options.ttl) + ' (store options). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
96
|
+
}
|
|
97
|
+
if (connConf.ttl != null && !(connConf.ttl > 0)) {
|
|
98
|
+
throw new Error('[' + bundle + '][SqliteStore] `ttl` must be a positive number of seconds or unset — got '
|
|
99
|
+
+ JSON.stringify(connConf.ttl) + ' (connectors.json session entry). `ttl: 0` is not supported (it previously behaved as unset).');
|
|
100
|
+
}
|
|
85
101
|
// #B163 — was `connConf.ttl || oneDay`: the implicit one-day default made the
|
|
86
102
|
// cookie-maxAge fallback in set()/touch() unreachable; unset now stays null (couchbase parity).
|
|
87
103
|
this.ttl = (options.ttl != null) ? options.ttl : (connConf.ttl || null);
|
|
@@ -201,6 +217,14 @@ module.exports = function(session, bundle) {
|
|
|
201
217
|
var key = this.prefix + sid;
|
|
202
218
|
var maxAge = sess.cookie && sess.cookie.maxAge;
|
|
203
219
|
var ttl = this.ttl || ('number' === typeof maxAge ? maxAge / 1000 | 0 : oneDay);
|
|
220
|
+
|
|
221
|
+
// #B207 — a resolved ttl <= 0 means the session is already at/past its
|
|
222
|
+
// expiry: writing an immediately-dead row is pointless. No-op for
|
|
223
|
+
// parity with the sibling stores (mirrors the #B166 touch() guard).
|
|
224
|
+
if (ttl <= 0) {
|
|
225
|
+
return fn(null);
|
|
226
|
+
}
|
|
227
|
+
|
|
204
228
|
var expires = Math.floor(Date.now() / 1000) + ~~ttl;
|
|
205
229
|
|
|
206
230
|
if (ttl > 0) {
|