gina 0.5.26 → 0.6.0
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 +34 -22
- package/ROADMAP.md +43 -16
- package/bin/cli +12 -1
- package/bin/gina-init +15 -1
- package/framework/v0.6.0/VERSION +1 -0
- package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +36 -1
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js +601 -0
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.0/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/session-store.v3.js +52 -84
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/session-store.v4.js +58 -84
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/session-store.js +5 -2
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/session-store.js +5 -2
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/scylladb/lib/session-store.js +5 -2
- package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/lib/session-store.js +17 -3
- package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/session/src/main.js +142 -9
- package/framework/{v0.5.26 → v0.6.0}/core/router.js +101 -11
- package/framework/{v0.5.26 → v0.6.0}/core/server.js +91 -1
- package/framework/{v0.5.26 → v0.6.0}/core/template/conf/settings.json +3 -0
- package/framework/v0.6.0/lib/audit/src/main.js +916 -0
- package/framework/v0.6.0/lib/authn/package.json +7 -0
- package/framework/v0.6.0/lib/authn/src/lockout.js +615 -0
- package/framework/v0.6.0/lib/authn/src/main.js +899 -0
- package/framework/v0.6.0/lib/authn/src/totp.js +418 -0
- package/framework/v0.6.0/lib/cmd/audit/arguments.json +5 -0
- package/framework/v0.6.0/lib/cmd/audit/help.txt +50 -0
- package/framework/v0.6.0/lib/cmd/audit/verify.js +294 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/init.js +11 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/tail.js +5 -1
- package/framework/{v0.5.26 → v0.6.0}/lib/cmd/gina.1.md +1 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/index.js +13 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/file/index.js +11 -1
- package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/mq/speaker.js +8 -1
- package/framework/v0.6.0/lib/net-locality/package.json +17 -0
- package/framework/v0.6.0/lib/net-locality/src/main.js +174 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-filters/src/main.js +13 -0
- package/framework/{v0.5.26 → v0.6.0}/lib/routing/src/main.js +36 -1
- package/framework/{v0.5.26 → v0.6.0}/lib/swig-filters/src/main.js +13 -0
- package/framework/{v0.5.26 → v0.6.0}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +19 -2
- package/package.json +3 -3
- package/schema/connectors.json +2 -3
- package/schema/settings.json +101 -0
- package/types/index.d.ts +4 -0
- package/framework/v0.5.26/VERSION +0 -1
- package/framework/v0.5.26/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -599
- package/framework/v0.5.26/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.5.26/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.5.26/lib/audit/src/main.js +0 -456
- /package/framework/{v0.5.26 → v0.6.0}/AUTHORS +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/html/static.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/config.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/content.encoding +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/gna.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/currency.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/locales/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/mime.types +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/entity.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/model/template/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/server.express.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/server.isaac.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/status.codes +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/_gitignore +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/env.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/console.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/context.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/path.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/prototypes.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/task.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/helpers/text.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/admin/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/async/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/async/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/audit/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/audit-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/service/start.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/config.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cron/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cron/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/generator/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/i18n/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/image-build/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/instrument/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/job/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/job/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/job-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/math/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/merge/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/merge/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/metrics/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/model.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/proc.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/build.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/secrets/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/session-store.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/shell.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/state.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/url/README.md +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/url/index.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/url/routing.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/uuid/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/validator.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/watcher/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.5.26 → v0.6.0}/lib/ws-session/src/main.js +0 -0
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
'use strict';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
|
-
* Session plugin (#CSRF1) — hardened wrapper around `express-session`.
|
|
11
|
+
* Session plugin (#CSRF1, #COMPLY4) — hardened wrapper around `express-session`.
|
|
12
12
|
*
|
|
13
13
|
* Bundles adopt it with a one-line swap in their bootstrap:
|
|
14
14
|
*
|
|
@@ -26,6 +26,18 @@
|
|
|
26
26
|
* Browser-parity invariant: `SameSite=None` without `Secure` is rejected at
|
|
27
27
|
* factory call time (matching browser behaviour).
|
|
28
28
|
*
|
|
29
|
+
* Absolute session timeout (#COMPLY4, opt-in): `session({ absoluteTimeout:
|
|
30
|
+
* <ms> })` — or the `settings.json > session.absoluteTimeout` default, bundle
|
|
31
|
+
* code winning (`false` disables) — caps an AUTHENTICATED session's total
|
|
32
|
+
* lifetime, measured from the `_ginaCreatedAt` anchor `req.login()` stamps at
|
|
33
|
+
* rotation (manual-bind consumers are anchored lazily, one request late). An
|
|
34
|
+
* over-age session is destroyed on its next request and the request proceeds
|
|
35
|
+
* with a fresh anonymous one — indistinguishable from a naturally-expired
|
|
36
|
+
* record. This composes with idle expiry, which already exists: the cookie
|
|
37
|
+
* `maxAge` and the store record TTL both roll with activity; this cap does
|
|
38
|
+
* not. Without the option the factory returns express-session's middleware
|
|
39
|
+
* untouched.
|
|
40
|
+
*
|
|
29
41
|
* @module plugins/session
|
|
30
42
|
*/
|
|
31
43
|
|
|
@@ -48,6 +60,7 @@ function resolveSettingsDefaults() {
|
|
|
48
60
|
var defaults = { sameSite: 'lax', httpOnly: true, secure: 'auto' };
|
|
49
61
|
var cookieConf = {};
|
|
50
62
|
|
|
63
|
+
var sessionConf = {};
|
|
51
64
|
try {
|
|
52
65
|
var ctx = getContext();
|
|
53
66
|
var bundle = ctx && ctx.bundle;
|
|
@@ -56,11 +69,12 @@ function resolveSettingsDefaults() {
|
|
|
56
69
|
if (bundle && env && conf && conf[bundle] && conf[bundle][env]) {
|
|
57
70
|
var content = conf[bundle][env].content || {};
|
|
58
71
|
var settings = content.settings || {};
|
|
59
|
-
|
|
60
|
-
cookieConf =
|
|
72
|
+
sessionConf = settings.session || {};
|
|
73
|
+
cookieConf = sessionConf.cookie || {};
|
|
61
74
|
}
|
|
62
75
|
} catch (ignored) {
|
|
63
|
-
|
|
76
|
+
sessionConf = {};
|
|
77
|
+
cookieConf = {};
|
|
64
78
|
}
|
|
65
79
|
|
|
66
80
|
if (typeof cookieConf.sameSite === 'string') {
|
|
@@ -92,9 +106,118 @@ function resolveSettingsDefaults() {
|
|
|
92
106
|
defaults.secure = cookieConf.secure;
|
|
93
107
|
}
|
|
94
108
|
|
|
109
|
+
// #COMPLY4 — absolute-timeout default (ms). Opt-in: absent means none.
|
|
110
|
+
if (typeof sessionConf.absoluteTimeout !== 'undefined') {
|
|
111
|
+
if (typeof sessionConf.absoluteTimeout !== 'number'
|
|
112
|
+
|| !isFinite(sessionConf.absoluteTimeout)
|
|
113
|
+
|| sessionConf.absoluteTimeout <= 0
|
|
114
|
+
) {
|
|
115
|
+
throw new Error(
|
|
116
|
+
'[gina session] settings.json > session.absoluteTimeout must be a positive number of milliseconds'
|
|
117
|
+
+ ' — got: ' + JSON.stringify(sessionConf.absoluteTimeout)
|
|
118
|
+
);
|
|
119
|
+
}
|
|
120
|
+
defaults.absoluteTimeout = sessionConf.absoluteTimeout;
|
|
121
|
+
}
|
|
122
|
+
|
|
95
123
|
return defaults;
|
|
96
124
|
}
|
|
97
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Resolve the effective absolute-timeout value: the bundle option wins over
|
|
128
|
+
* the settings default; `false` / `null` in bundle code disables it outright.
|
|
129
|
+
* The gina-only key is STRIPPED from the options so express-session never
|
|
130
|
+
* sees it.
|
|
131
|
+
*
|
|
132
|
+
* @param {object} options - the (mutated) session factory options
|
|
133
|
+
* @param {object} defaults - `resolveSettingsDefaults()` output
|
|
134
|
+
* @returns {(number|null)} effective cap in ms, or null when disabled
|
|
135
|
+
* @throws {Error} when the bundle-supplied value is not a positive number
|
|
136
|
+
* @inner
|
|
137
|
+
* @private
|
|
138
|
+
*/
|
|
139
|
+
function resolveAbsoluteTimeout(options, defaults) {
|
|
140
|
+
if (Object.prototype.hasOwnProperty.call(options, 'absoluteTimeout')) {
|
|
141
|
+
var v = options.absoluteTimeout;
|
|
142
|
+
delete options.absoluteTimeout;
|
|
143
|
+
if (v === false || v === null) {
|
|
144
|
+
return null;
|
|
145
|
+
}
|
|
146
|
+
if (typeof v !== 'number' || !isFinite(v) || v <= 0) {
|
|
147
|
+
throw new Error(
|
|
148
|
+
'[gina session] absoluteTimeout must be a positive number of milliseconds'
|
|
149
|
+
+ ' (or false to disable the settings default) — got: ' + JSON.stringify(v)
|
|
150
|
+
);
|
|
151
|
+
}
|
|
152
|
+
return v;
|
|
153
|
+
}
|
|
154
|
+
return (typeof defaults.absoluteTimeout === 'number') ? defaults.absoluteTimeout : null;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Wrap the express-session middleware with the absolute-timeout enforcement
|
|
159
|
+
* (#COMPLY4).
|
|
160
|
+
*
|
|
161
|
+
* After the session loads: an authenticated session without a numeric
|
|
162
|
+
* `_ginaCreatedAt` anchor is stamped (manual-bind consumers — `req.login()`
|
|
163
|
+
* stamps it at rotation itself; anonymous sessions are never touched, so
|
|
164
|
+
* `saveUninitialized: false` semantics are preserved). A session whose anchor
|
|
165
|
+
* is older than the cap is destroyed via its own `regenerate()` — the request
|
|
166
|
+
* proceeds with a fresh anonymous session, exactly as a naturally-expired
|
|
167
|
+
* record behaves. Fail-closed: when the record cannot be destroyed
|
|
168
|
+
* (regenerate error, or no regenerate on the provider) the authentication is
|
|
169
|
+
* dropped locally at minimum.
|
|
170
|
+
*
|
|
171
|
+
* @param {function} mw - the middleware express-session returned
|
|
172
|
+
* @param {number} absoluteMs - the effective cap in milliseconds
|
|
173
|
+
* @returns {function} wrapping middleware `(req, res, next)`
|
|
174
|
+
* @inner
|
|
175
|
+
* @private
|
|
176
|
+
*/
|
|
177
|
+
function makeAbsoluteTimeoutMiddleware(mw, absoluteMs) {
|
|
178
|
+
return function ginaSessionAbsoluteTimeout(req, res, next) {
|
|
179
|
+
mw(req, res, function onSessionReady(err) {
|
|
180
|
+
if (err) {
|
|
181
|
+
return next(err);
|
|
182
|
+
}
|
|
183
|
+
var sess = req.session;
|
|
184
|
+
if (!sess || typeof sess !== 'object') {
|
|
185
|
+
return next();
|
|
186
|
+
}
|
|
187
|
+
if (sess.user && typeof sess._ginaCreatedAt !== 'number') {
|
|
188
|
+
// authenticated without an anchor (manual bind, or a corrupt
|
|
189
|
+
// anchor) — stamp now; enforcement starts from here
|
|
190
|
+
sess._ginaCreatedAt = Date.now();
|
|
191
|
+
return next();
|
|
192
|
+
}
|
|
193
|
+
if (typeof sess._ginaCreatedAt === 'number'
|
|
194
|
+
&& (Date.now() - sess._ginaCreatedAt) > absoluteMs
|
|
195
|
+
) {
|
|
196
|
+
if (typeof sess.regenerate === 'function') {
|
|
197
|
+
return sess.regenerate(function onAbsoluteTimeoutExpired(regenErr) {
|
|
198
|
+
if (regenErr && req.session && typeof req.session === 'object') {
|
|
199
|
+
// fail-closed: the record could not be destroyed —
|
|
200
|
+
// drop the authentication locally at minimum
|
|
201
|
+
req.session.user = null;
|
|
202
|
+
delete req.session._ginaCreatedAt;
|
|
203
|
+
}
|
|
204
|
+
next();
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
// no regenerate() on this provider: fail-closed locally,
|
|
208
|
+
// destroying the record when the provider allows it
|
|
209
|
+
sess.user = null;
|
|
210
|
+
delete sess._ginaCreatedAt;
|
|
211
|
+
if (typeof sess.destroy === 'function') {
|
|
212
|
+
return sess.destroy(function onAbsoluteTimeoutDestroyed() { next(); });
|
|
213
|
+
}
|
|
214
|
+
return next();
|
|
215
|
+
}
|
|
216
|
+
next();
|
|
217
|
+
});
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
|
|
98
221
|
/**
|
|
99
222
|
* Merge caller-supplied cookie options on top of the resolved defaults.
|
|
100
223
|
* Caller-supplied values always win — `httpOnly: false` passed by a bundle
|
|
@@ -166,7 +289,15 @@ function Session(expressSession) {
|
|
|
166
289
|
var defaults = resolveSettingsDefaults();
|
|
167
290
|
options.cookie = mergeCookie(options.cookie, defaults);
|
|
168
291
|
assertInvariant(options.cookie);
|
|
169
|
-
|
|
292
|
+
// #COMPLY4 — resolve (and strip) the absolute-timeout cap before
|
|
293
|
+
// express-session sees the options; no cap means the raw middleware
|
|
294
|
+
// is returned untouched.
|
|
295
|
+
var absoluteMs = resolveAbsoluteTimeout(options, defaults);
|
|
296
|
+
var mw = expressSession(options);
|
|
297
|
+
if (!absoluteMs) {
|
|
298
|
+
return mw;
|
|
299
|
+
}
|
|
300
|
+
return makeAbsoluteTimeoutMiddleware(mw, absoluteMs);
|
|
170
301
|
}
|
|
171
302
|
|
|
172
303
|
var wrapped = function (options) { return ginaSessionDispatch(options); };
|
|
@@ -195,9 +326,11 @@ function Session(expressSession) {
|
|
|
195
326
|
|
|
196
327
|
// Exposed for unit testing. Do not rely on these in application code — they
|
|
197
328
|
// may change without notice.
|
|
198
|
-
Session._resolveSettingsDefaults
|
|
199
|
-
Session._mergeCookie
|
|
200
|
-
Session._assertInvariant
|
|
201
|
-
Session._ALLOWED_SAMESITE
|
|
329
|
+
Session._resolveSettingsDefaults = resolveSettingsDefaults;
|
|
330
|
+
Session._mergeCookie = mergeCookie;
|
|
331
|
+
Session._assertInvariant = assertInvariant;
|
|
332
|
+
Session._ALLOWED_SAMESITE = ALLOWED_SAMESITE;
|
|
333
|
+
Session._resolveAbsoluteTimeout = resolveAbsoluteTimeout;
|
|
334
|
+
Session._makeAbsoluteTimeoutMiddleware = makeAbsoluteTimeoutMiddleware;
|
|
202
335
|
|
|
203
336
|
module.exports = Session;
|
|
@@ -389,6 +389,23 @@ function Router(env, scope) {
|
|
|
389
389
|
||
|
|
390
390
|
typeof(request.login) == 'undefined'
|
|
391
391
|
) {
|
|
392
|
+
/**
|
|
393
|
+
* Login shim — authenticates the request AND, on the gina-native
|
|
394
|
+
* branch, rotates the session id before binding the user
|
|
395
|
+
* (session-fixation defense, #COMPLY4).
|
|
396
|
+
*
|
|
397
|
+
* Passport bundles never see this shim in normal operation
|
|
398
|
+
* (passport.initialize() installs its own req.login first); the
|
|
399
|
+
* Passport-flavored branch serves the HTTP2 case where
|
|
400
|
+
* `request._passport` exists without the request extensions.
|
|
401
|
+
*
|
|
402
|
+
* @param {object} user - authenticated principal; bound at
|
|
403
|
+
* `request.session.user` (what the authorization gate reads)
|
|
404
|
+
* @param {object} [options] - `{session: false}` binds `request.user` only
|
|
405
|
+
* (transient — no session work, no rotation)
|
|
406
|
+
* @param {function} done - REQUIRED callback `done(err)` on the session paths;
|
|
407
|
+
* fires after rotation + bind + persist complete
|
|
408
|
+
*/
|
|
392
409
|
request.login =
|
|
393
410
|
request.logIn = function(user, options, done) {
|
|
394
411
|
if (typeof options == 'function') {
|
|
@@ -412,7 +429,52 @@ function Router(env, scope) {
|
|
|
412
429
|
|
|
413
430
|
|
|
414
431
|
if (!this._passport) {
|
|
415
|
-
|
|
432
|
+
// #COMPLY4 — gina-native branch. This path previously ended
|
|
433
|
+
// in a hard passport-required throw, so the framework's own
|
|
434
|
+
// session pattern (authz reads `req.session.user`) had no
|
|
435
|
+
// working login here. Now: rotate the session id BEFORE
|
|
436
|
+
// binding the user (session-fixation defense), bind at
|
|
437
|
+
// `session.user`, stamp the absolute-timeout anchor,
|
|
438
|
+
// persist, then report. Same degrade-gracefully shape as
|
|
439
|
+
// the #B164 logout shim below — typeof-gated, the session
|
|
440
|
+
// provider's capabilities decide.
|
|
441
|
+
if (typeof done != 'function') {
|
|
442
|
+
throw new Error('req#login requires a callback function');
|
|
443
|
+
}
|
|
444
|
+
var req = this;
|
|
445
|
+
if ( !req.session || typeof(req.session) != 'object' ) {
|
|
446
|
+
req[property] = null;
|
|
447
|
+
return done(new Error('req#login requires a session — register the Session plugin (or express-session) before routing'));
|
|
448
|
+
}
|
|
449
|
+
if ( typeof(req.session.regenerate) == 'function' ) {
|
|
450
|
+
req.session.regenerate(function onLoginSessionRegenerated(err) {
|
|
451
|
+
if (err) {
|
|
452
|
+
req[property] = null;
|
|
453
|
+
return done(err);
|
|
454
|
+
}
|
|
455
|
+
req.session.user = user;
|
|
456
|
+
// absolute-timeout anchor — the clock starts at login
|
|
457
|
+
req.session._ginaCreatedAt = Date.now();
|
|
458
|
+
if ( typeof(req.session.save) == 'function' ) {
|
|
459
|
+
return req.session.save(function onLoginSessionSaved(saveErr) {
|
|
460
|
+
done(saveErr || null);
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
done(null);
|
|
464
|
+
});
|
|
465
|
+
return;
|
|
466
|
+
}
|
|
467
|
+
// no regenerate() on this session provider — bind without
|
|
468
|
+
// rotation, and say so: the fixation defense is unavailable
|
|
469
|
+
console.warn('[ ROUTER ] login(): session provider exposes no regenerate() — user bound WITHOUT session-id rotation');
|
|
470
|
+
req.session.user = user;
|
|
471
|
+
req.session._ginaCreatedAt = Date.now();
|
|
472
|
+
if ( typeof(req.session.save) == 'function' ) {
|
|
473
|
+
return req.session.save(function onLoginSessionSavedNoRotation(saveErr) {
|
|
474
|
+
done(saveErr || null);
|
|
475
|
+
});
|
|
476
|
+
}
|
|
477
|
+
return done(null);
|
|
416
478
|
}
|
|
417
479
|
if (typeof done != 'function') {
|
|
418
480
|
throw new Error('req#login requires a callback function');
|
|
@@ -436,8 +498,22 @@ function Router(env, scope) {
|
|
|
436
498
|
typeof(request.session) != 'undefined'
|
|
437
499
|
&& typeof(request.logout) == 'undefined'
|
|
438
500
|
) {
|
|
501
|
+
/**
|
|
502
|
+
* Logout shim — de-authenticates the request AND destroys the
|
|
503
|
+
* persisted session record.
|
|
504
|
+
*
|
|
505
|
+
* #B164 — nulling `session.user` alone left the store record, the
|
|
506
|
+
* session id and every other session key alive until TTL. The
|
|
507
|
+
* gina-native branch now also calls the session's own destroy()
|
|
508
|
+
* when it exposes one (express-session), degrading gracefully when
|
|
509
|
+
* it does not. Clearing the session COOKIE stays the consumer's
|
|
510
|
+
* job — the cookie name is not discoverable from the request.
|
|
511
|
+
*
|
|
512
|
+
* @param {function} [done] - Optional callback `done(err)` invoked once
|
|
513
|
+
* record destruction (or the fallback) completes.
|
|
514
|
+
*/
|
|
439
515
|
request.logout =
|
|
440
|
-
request.logOut = function() {
|
|
516
|
+
request.logOut = function(done) {
|
|
441
517
|
var property = 'user';
|
|
442
518
|
|
|
443
519
|
// by default
|
|
@@ -445,25 +521,39 @@ function Router(env, scope) {
|
|
|
445
521
|
if (sess._passport && sess._passport.instance) {
|
|
446
522
|
property = sess._passport.instance._userProperty || 'user';
|
|
447
523
|
}
|
|
524
|
+
var isSessionScope = false;
|
|
448
525
|
if ( !sess._passport
|
|
449
526
|
&& typeof(sess.session) != 'undefined'
|
|
450
527
|
) {
|
|
451
528
|
sess = sess.session;
|
|
529
|
+
isSessionScope = true;
|
|
452
530
|
}
|
|
453
531
|
|
|
454
532
|
sess[property] = null;
|
|
455
533
|
if (sess._passport) {
|
|
456
534
|
sess._passport.instance._sm.logOut(sess);
|
|
535
|
+
if ( typeof(done) == 'function' ) {
|
|
536
|
+
done(null);
|
|
537
|
+
}
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
// #B164 — destroy the record, not just the `user` key. Gated on the
|
|
541
|
+
// session scope so a call after destruction (no `request.session`
|
|
542
|
+
// left) can never reach `request.destroy()` — the stream method.
|
|
543
|
+
if ( isSessionScope && typeof(sess.destroy) == 'function' ) {
|
|
544
|
+
sess.destroy(function onLogoutSessionDestroyed(err) {
|
|
545
|
+
if (err) {
|
|
546
|
+
console.warn('[ ROUTER ] logout(): session.destroy() failed: ' + (err.stack || err.message || err));
|
|
547
|
+
}
|
|
548
|
+
if ( typeof(done) == 'function' ) {
|
|
549
|
+
done(err || null);
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
return;
|
|
553
|
+
}
|
|
554
|
+
if ( typeof(done) == 'function' ) {
|
|
555
|
+
done(null);
|
|
457
556
|
}
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
// if (this._passport && this._passport.instance) {
|
|
461
|
-
// property = this._passport.instance._userProperty || 'user';
|
|
462
|
-
// }
|
|
463
|
-
// this[property] = null;
|
|
464
|
-
// if (this._passport) {
|
|
465
|
-
// this._passport.instance._sm.logOut(this);
|
|
466
|
-
// }
|
|
467
557
|
};
|
|
468
558
|
}
|
|
469
559
|
|
|
@@ -1341,6 +1341,42 @@ function Server(options) {
|
|
|
1341
1341
|
if ( _auditSettings.store && _auditSettings.file ) {
|
|
1342
1342
|
throw new Error('[ SERVER ] `settings.json > audit`: `store` and `file` are mutually exclusive — pick one backend.');
|
|
1343
1343
|
}
|
|
1344
|
+
// ── #COMPLY2 slice 3 — tamper-evidence chain: shape lint (unconditional,
|
|
1345
|
+
// like the rest of the audit lint family: a malformed block with the
|
|
1346
|
+
// chain OFF is still an author error better surfaced now).
|
|
1347
|
+
if ( typeof(_auditSettings.chain) != 'undefined' ) {
|
|
1348
|
+
if ( typeof(_auditSettings.chain) != 'object' || _auditSettings.chain === null || Array.isArray(_auditSettings.chain) ) {
|
|
1349
|
+
throw new Error('[ SERVER ] `settings.json > audit.chain` must be an object.');
|
|
1350
|
+
}
|
|
1351
|
+
if ( typeof(_auditSettings.chain.enabled) != 'undefined' && typeof(_auditSettings.chain.enabled) != 'boolean' ) {
|
|
1352
|
+
throw new Error('[ SERVER ] `settings.json > audit.chain.enabled` must be a boolean — got '+ JSON.stringify(_auditSettings.chain.enabled) +'. A truthy string would leave tamper-evidence silently OFF, so the boot refuses instead.');
|
|
1353
|
+
}
|
|
1354
|
+
if ( typeof(_auditSettings.chain.secret) != 'undefined' && ( typeof(_auditSettings.chain.secret) != 'string' || _auditSettings.chain.secret === '' ) ) {
|
|
1355
|
+
throw new Error('[ SERVER ] `settings.json > audit.chain.secret` must be a non-empty string.');
|
|
1356
|
+
}
|
|
1357
|
+
if ( typeof(_auditSettings.chain.secret) == 'string' && /\$\{/.test(_auditSettings.chain.secret) ) {
|
|
1358
|
+
throw new Error('[ SERVER ] `settings.json > audit.chain.secret` carries an unresolved `${...}` placeholder — the named variable is not set at config-load time. Note that `${secret:GINA_*}` names can never resolve (the CLI moves every GINA_* variable out of process.env before config load); use a non-GINA variable name, or set GINA_AUDIT_SECRET.');
|
|
1359
|
+
}
|
|
1360
|
+
}
|
|
1361
|
+
var _auditChainEnabled = !!( _auditSettings.chain && _auditSettings.chain.enabled === true );
|
|
1362
|
+
if ( _auditChainEnabled && !_auditEnabled ) {
|
|
1363
|
+
console.warn('[ SERVER ] `audit.chain.enabled` is true but `audit.enabled` is false — the audit trail (and with it the chain) is OFF for [ '+ self.appName +' ].');
|
|
1364
|
+
}
|
|
1365
|
+
// Merged mode (shared port ⇒ one process) starts ONE trail — the
|
|
1366
|
+
// starting bundle's. A sibling that declares `audit.enabled: true`
|
|
1367
|
+
// is silently ignored otherwise (its block parses into envConf and
|
|
1368
|
+
// nothing ever reads it — runtime-measured 2026-07-26), which is
|
|
1369
|
+
// the quietly-OFF class this lint family exists to prevent: say so.
|
|
1370
|
+
if ( self.isStandalone && Array.isArray(self.bundles) && self.bundles.length > 1 ) {
|
|
1371
|
+
for (let _mb = 0; _mb < self.bundles.length; ++_mb) {
|
|
1372
|
+
if (self.bundles[_mb] === self.appName) continue;
|
|
1373
|
+
var _mbConf = options.conf[self.bundles[_mb]] && options.conf[self.bundles[_mb]][self.env];
|
|
1374
|
+
var _mbAudit = ( _mbConf && _mbConf.content && _mbConf.content.settings && _mbConf.content.settings.audit ) ? _mbConf.content.settings.audit : null;
|
|
1375
|
+
if ( _mbAudit && _mbAudit.enabled === true ) {
|
|
1376
|
+
console.warn('[ SERVER ] [ audit ] bundle `'+ self.bundles[_mb] +'` declares `audit.enabled: true`, but in merged mode (shared port) only the starting bundle\'s audit settings apply — its audit configuration is IGNORED. The process-wide trail is governed by [ '+ self.appName +' ].');
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
}
|
|
1344
1380
|
if ( _auditEnabled ) {
|
|
1345
1381
|
var _auditStartOpts = {
|
|
1346
1382
|
bundle : self.appName,
|
|
@@ -1379,13 +1415,67 @@ function Server(options) {
|
|
|
1379
1415
|
_auditStartOpts.file = _(_auditFile, true);
|
|
1380
1416
|
_auditDestLabel = _auditStartOpts.file;
|
|
1381
1417
|
}
|
|
1418
|
+
if ( _auditChainEnabled ) {
|
|
1419
|
+
if ( _auditSettings.store ) {
|
|
1420
|
+
// The store seam carries NO ordering obligation — a
|
|
1421
|
+
// connector backend may persist out of emit order, and
|
|
1422
|
+
// a chain over reordered records forks silently.
|
|
1423
|
+
throw new Error('[ SERVER ] `audit.chain` requires the file backend — a connector `store` cannot guarantee the ordered append a hash chain needs. Remove `audit.store` or disable the chain.');
|
|
1424
|
+
}
|
|
1425
|
+
// Key resolution mirrors the CSRF secret chain, with the
|
|
1426
|
+
// GINA_* read through the framework env reader (the
|
|
1427
|
+
// GINA_MCP_AUTH_TOKEN precedent — the CLI sweeps GINA_*
|
|
1428
|
+
// out of process.env, so a direct read is empty there).
|
|
1429
|
+
var _auditChainSecret = ( typeof(_auditSettings.chain.secret) == 'string' && _auditSettings.chain.secret ) ? _auditSettings.chain.secret : null;
|
|
1430
|
+
if ( !_auditChainSecret ) {
|
|
1431
|
+
_auditChainSecret = ( typeof(getEnvVar) == 'function' && getEnvVar('GINA_AUDIT_SECRET') ) || process.env.GINA_AUDIT_SECRET || null;
|
|
1432
|
+
}
|
|
1433
|
+
if ( !_auditChainSecret || typeof(_auditChainSecret) != 'string' ) {
|
|
1434
|
+
throw new Error('[ SERVER ] `audit.chain.enabled` is true but no signing key is configured — set `settings.json > audit.chain.secret` (e.g. "${secret:MY_AUDIT_KEY}", a non-GINA variable name) or the GINA_AUDIT_SECRET environment variable. Tamper-evidence without a key would be silently OFF, so the boot refuses instead.');
|
|
1435
|
+
}
|
|
1436
|
+
if ( _auditChainSecret.length < 32 ) {
|
|
1437
|
+
console.warn('[ SERVER ] `audit.chain` signing key is shorter than 32 characters — a longer random key (>= 32 bytes) is recommended.');
|
|
1438
|
+
}
|
|
1439
|
+
_auditStartOpts.chain = { secret: _auditChainSecret };
|
|
1440
|
+
}
|
|
1441
|
+
// Cross-PROCESS shared-file refusal: two bundles resolving the
|
|
1442
|
+
// SAME audit file run as separate writers in per-process mode,
|
|
1443
|
+
// and two writers fork a linear hash chain. Boot-detectable in
|
|
1444
|
+
// both modes — options.conf carries every bundle's parsed
|
|
1445
|
+
// settings (runtime-measured 2026-07-26) — so the boot refuses
|
|
1446
|
+
// when EITHER party chains. Without a chain the shared file
|
|
1447
|
+
// stays legal (interleaved JSONL, pre-existing behaviour).
|
|
1448
|
+
// Replicas and cross-project collisions are NOT detectable
|
|
1449
|
+
// from config; the docs state that boundary.
|
|
1450
|
+
if ( _auditStartOpts.file ) {
|
|
1451
|
+
for (var _ab in options.conf) {
|
|
1452
|
+
if (_ab === self.appName) continue;
|
|
1453
|
+
var _sibConf = options.conf[_ab] && options.conf[_ab][self.env];
|
|
1454
|
+
var _sibAudit = ( _sibConf && _sibConf.content && _sibConf.content.settings && _sibConf.content.settings.audit ) ? _sibConf.content.settings.audit : null;
|
|
1455
|
+
if ( !_sibAudit || _sibAudit.enabled !== true || _sibAudit.store ) continue;
|
|
1456
|
+
var _sibChain = !!( _sibAudit.chain && _sibAudit.chain.enabled === true );
|
|
1457
|
+
if ( !_auditChainEnabled && !_sibChain ) continue;
|
|
1458
|
+
// replay the sibling's file derivation
|
|
1459
|
+
var _sibFile = ( typeof(_sibAudit.file) == 'string' && _sibAudit.file ) ? _sibAudit.file : null;
|
|
1460
|
+
if ( !_sibFile || !/^\//.test(_sibFile) ) {
|
|
1461
|
+
var _sibProjectPath = _sibConf.projectPath;
|
|
1462
|
+
if ( typeof(_sibProjectPath) != 'string' || _sibProjectPath === '' || /\$\{/.test(_sibProjectPath) ) continue; // unresolvable — its own boot lints it
|
|
1463
|
+
_sibFile = _sibFile
|
|
1464
|
+
? _sibProjectPath + '/' + _sibFile
|
|
1465
|
+
: _sibProjectPath + '/logs/audit-'+ _ab +'-'+ self.env +'.jsonl';
|
|
1466
|
+
}
|
|
1467
|
+
if ( _( _sibFile, true) === _auditStartOpts.file ) {
|
|
1468
|
+
throw new Error('[ SERVER ] `audit.chain`: bundle `'+ _ab +'` resolves the SAME audit file ('+ _auditStartOpts.file +') and '+ ( _auditChainEnabled ? 'this bundle chains its trail' : 'that bundle chains its trail' ) +' — two writers fork a linear hash chain, so the boot refuses. Give each bundle its own `audit.file` (the default per-bundle path never collides), or disable the chain on both.');
|
|
1469
|
+
}
|
|
1470
|
+
}
|
|
1471
|
+
}
|
|
1382
1472
|
// start() mkdirs + opens the O_APPEND fd — an unwritable destination
|
|
1383
1473
|
// throws HERE, i.e. refuses the boot rather than dropping records later.
|
|
1384
1474
|
lib.audit.start(_auditStartOpts);
|
|
1385
1475
|
// console.info, NOT console.debug — the shipped default log_level
|
|
1386
1476
|
// ("info") filters debug, which would silently defeat the
|
|
1387
1477
|
// "path logged at boot" contract.
|
|
1388
|
-
console.info('[ BUNDLE ][ server ][ init ] Audit trail enabled for [ '+ self.appName +' ] → '+ _auditDestLabel);
|
|
1478
|
+
console.info('[ BUNDLE ][ server ][ init ] Audit trail enabled for [ '+ self.appName +' ] → '+ _auditDestLabel + ( _auditChainEnabled ? ' (tamper-evident chain: ON)' : '' ));
|
|
1389
1479
|
}
|
|
1390
1480
|
|
|
1391
1481
|
// ── #B144 — upload write-error probe (`simulateWriteError`) boot warn ──
|
|
@@ -152,6 +152,9 @@
|
|
|
152
152
|
// httpOnly: true | false (default true)
|
|
153
153
|
// secure: true | false | "auto" (default "auto")
|
|
154
154
|
// Invariant: sameSite="none" requires secure=true (browser-parity).
|
|
155
|
+
// #COMPLY4 — optional absolute session cap in ms since login (opt-in, none by default);
|
|
156
|
+
// bundle code session({ absoluteTimeout }) wins, false there disables:
|
|
157
|
+
// "absoluteTimeout": 28800000,
|
|
155
158
|
"session": {
|
|
156
159
|
"cookie": {
|
|
157
160
|
"sameSite": "lax",
|