gina 0.6.12 → 0.6.13
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 +1 -1
- package/README.md +24 -17
- package/ROADMAP.md +3 -2
- package/framework/v0.6.13/VERSION +1 -0
- package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.js +8 -0
- package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +165 -165
- package/framework/v0.6.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.13/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/{v0.6.12 → v0.6.13}/core/config.js +26 -0
- package/framework/v0.6.13/core/connectors/redis/index.js +62 -0
- package/framework/v0.6.13/core/connectors/redis/lib/kv-store.js +394 -0
- package/framework/v0.6.13/core/connectors/sqlite/lib/kv-store.js +316 -0
- package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.js +202 -0
- package/framework/{v0.6.12 → v0.6.13}/core/gna.js +85 -0
- package/framework/{v0.6.12 → v0.6.13}/core/model/entity.js +13 -5
- package/framework/{v0.6.12 → v0.6.13}/core/router.js +147 -56
- package/framework/{v0.6.12 → v0.6.13}/core/server.js +61 -0
- package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/help.txt +8 -2
- package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/start.js +1 -1
- package/framework/{v0.6.12 → v0.6.13}/lib/index.js +18 -0
- package/framework/v0.6.13/lib/kv/package.json +7 -0
- package/framework/v0.6.13/lib/kv/src/main.js +862 -0
- package/framework/v0.6.13/lib/kv-store.js +112 -0
- package/framework/v0.6.13/lib/rate-limit/package.json +6 -0
- package/framework/v0.6.13/lib/rate-limit/src/main.js +399 -0
- package/framework/{v0.6.12 → v0.6.13}/lib/routing/src/main.js +8 -0
- package/framework/{v0.6.12 → v0.6.13}/package.json +1 -1
- package/gna.js +4 -4
- package/llms.txt +13 -3
- package/package.json +3 -3
- package/schema/routing.json +30 -0
- package/schema/settings.json +101 -0
- package/types/index.d.ts +9 -0
- package/framework/v0.6.12/VERSION +0 -1
- package/framework/v0.6.12/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- package/framework/v0.6.12/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- package/framework/v0.6.12/core/connectors/redis/index.js +0 -36
- /package/framework/{v0.6.12 → v0.6.13}/AUTHORS +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/LICENSE +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/html/static.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/session-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/couchbase/lib/storage-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/duckdb/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/duckdb/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/job-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mysql/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/param-redact.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/postgresql/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/job-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/scylladb/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sql-parser.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/lib/job-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/content.encoding +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-json.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-nunjucks-async.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-nunjucks.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-stream.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-swig-async.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-swig.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/controller.render-v1.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/inspector-window-emit.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/controller/release-banner.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/dev/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/currency.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/locales/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/mime.types +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/model/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/model/template/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coop/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/csp/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/server.express.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/server.isaac.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/status.codes +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/_gitignore +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/env.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/settings.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/console.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/context.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/data/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/data/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/json/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/json/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/path.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/prototypes.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/task.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/helpers/text.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/admin/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/admin/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/build.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/async/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/async/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/audit/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/audit/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/audit-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/authn/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/authn/src/lockout.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/authn/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/authn/src/totp.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/authz-gate/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/authz-gate/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cache/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cache/build.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cache/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/audit/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/audit/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/audit/verify.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/man.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/mcp.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/bundle/types.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/clear.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/infer.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/models.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/connector/test.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/man.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/ps.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/container/stop.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/args.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/namespace.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/reference-scan.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/inc/scaffold.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/rename.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/controller/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/man.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/msg.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/reset.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/gina-dev.1.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/gina-framework.1.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/gina.1.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/_host.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/build.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/man.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/image/run.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/man-render.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/kill.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/minion/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/msg.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/backup.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/man.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/restore.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/check.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/secrets/scan.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/service/man.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/arguments.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/gc.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/help.txt +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/stats.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/storage/verify.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd-status-format/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cmd-status-format/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/collection/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/collection/build.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/collection/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/config.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/connector-config/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/connector-config/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/connector-error/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/connector-error/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cron/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cron/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/domain/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/domain/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/dto/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/dto/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/dto-pipe/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/dto-pipe/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/dto-types/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/dto-types/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/generator/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/i18n/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/image-build/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/image-build/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-events/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-events/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/instrument/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/instrument/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/job/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/job/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/job-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/json-config-header/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/json-config-header/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/loading-state/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/loading-state/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/maintenance/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/maintenance/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/math/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/merge/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/merge/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/metrics/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/model.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/net-locality/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/net-locality/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/proc.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/push/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/push/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/release-watch/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/release-watch/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/render-cache/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/render-cache/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/render-cache-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/routing/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/routing/build.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/routing/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/backends/file.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/env-file.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/secrets/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/session-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/shell.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/sqlite-driver.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/state.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/local-cas.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/local-stream.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/local.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/meta-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/s3.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage/src/util.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/storage-store.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/swig-resolver/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/src/loaders/http.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/src/loaders/memory.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/template-loaders/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/url/README.md +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/url/index.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/url/routing.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/uuid/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/validator.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/watcher/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/watcher/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/ws-framing/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/ws-framing/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/ws-query/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/ws-query/src/main.js +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/ws-session/package.json +0 -0
- /package/framework/{v0.6.12 → v0.6.13}/lib/ws-session/src/main.js +0 -0
package/llms.txt
CHANGED
|
@@ -132,6 +132,7 @@ module.exports = ApiContentController;
|
|
|
132
132
|
- Auth is at `req.session.user` (NOT `req.user`).
|
|
133
133
|
- Request data: `req.get` (GET query), `req.post` (POST body), `req.put` (PUT body), `req.patch` (PATCH body — partial update), `req.delete` (DELETE query), `req.head` (HEAD query — body suppressed). `req.body` aliases `req.post`/`req.put`/`req.patch`. Routes declared as GET automatically accept HEAD. PATCH vs PUT: PATCH sends only changed fields; PUT replaces the full resource. OPTIONS is CORS-only, never dispatched to a controller.
|
|
134
134
|
- Routes declared in `routing.json`, not in code.
|
|
135
|
+
- **No built-in API versioning, and no DB schema/data migration tool — both are deliberately the application's to own** (microservices audit #MS8-adjacent, docs 2026-08-21). There is no `version` route field and no version-aware dispatch: version with a URL prefix + a per-version `namespace` (each loads its own `controller.<ns>.js`), or with separate bundles when versions need their own deps/config/cadence. ⚠️ **`gina connector:migrate` is NOT a data migration** — it lints `connectors.json` (connection CONFIG) and `--fix` rewrites that JSON; it issues no SQL and has no `up`/`down`. Use your database's own tool (Flyway/Liquibase/Sqitch/Knex/`node-pg-migrate`), and run it as a discrete pre-start step (CI job, k8s `Job`/init container), never at bundle boot — a boot-time migration races itself across replicas and turns a schema error into a crash-loop. SQL files are validated at CALL time, not boot, so make changes additive during a rolling deploy.
|
|
135
136
|
- Always null `local.req/res/next` at response exit (done automatically in render path).
|
|
136
137
|
- `createTestInstance(deps)` creates an isolated instance for unit tests without touching production state.
|
|
137
138
|
- `async` controller actions are fully supported — the router attaches `.catch()` to any thenable returned by an action and routes rejections to `throwError(response, 500, ...)`. Use `await entity.method()` directly. For PathObject ops and Shell use `await onCompleteCall(_(path).mkdir())`.
|
|
@@ -276,7 +277,7 @@ SELECT * FROM users WHERE id = $1 AND t._scope = $scope
|
|
|
276
277
|
}
|
|
277
278
|
```
|
|
278
279
|
|
|
279
|
-
Connectors supported: `couchbase` (v3/v4), `mysql` (mysql2), `postgresql` (pg), `redis
|
|
280
|
+
Connectors supported: `couchbase` (v3/v4), `mysql` (mysql2), `postgresql` (pg), `redis` (store backend only: sessions, jobs, render-cache L2 — no ORM), `sqlite` (v2 ORM + session store), `scylladb` (cassandra-driver, ORM + session store), `mongodb` (official driver, ORM via `pipelines/<Entity>/*.json` + session store via TTL index), `ai` (LLM providers).
|
|
280
281
|
All connector clients (`mysql2`, `pg`, `ioredis`, `couchbase`, `mongodb`, `cassandra-driver`, `openai`, `@anthropic-ai/sdk`) are loaded from the project's `node_modules` — zero framework runtime dependency. The driver-name → npm-package mapping lives in `lib/connector-registry/src/main.js` (single source of truth for `connector:add` / `connector:list` install hints).
|
|
281
282
|
|
|
282
283
|
## AI connector
|
|
@@ -428,6 +429,8 @@ Counters are live — no restart required. `activeSessions` is bounded by ≥ 0.
|
|
|
428
429
|
|
|
429
430
|
**Settled streams are released at EVERY non-retry terminal (#B52, folds former #193).** The stream listeners capture the caller's callback → the per-request controller → its per-request config clone; on a non-retry terminal an idempotent finalize helper (cancel the stream timeout, remove the listeners, close the stream — each op try/catch'd so cleanup never breaks the response path) runs at all five terminals BEFORE the error-swallow check. Without it the settled stream — pinned by the cached, TTL-less HTTP/2 session — stranded the controller + its config clone until the session died: in dev mode (a distinct controller per request) sustained bursts piled clones toward the heap limit (~512 MB live heap from 300 requests in 7 s; ~95% removed by the fix; query-driven and render-agnostic). Retry branches destroy the whole session instead (which tears the stream down), and the pre-flight PING swallow sites have no request stream yet. Any new non-retry terminal in an HTTP/2 client handler must finalize AT the terminal, not on eventual socket death.
|
|
430
431
|
|
|
432
|
+
**Per-authority circuit breaker (#MS5, opt-in — settings.json `server.query.circuitBreaker`).** After N consecutive transport-class failures to one authority (default `failureThreshold: 5` — each failure already representing a call whose own retries were exhausted), the circuit OPENS and every further `self.query()` to that authority fails fast with a `GinaCircuitOpenError` (`code: 'CIRCUIT_OPEN'`, `status: 503`, `retryable: false`, plus `authority` and `retryAfterMs`) instead of hammering a dead upstream. After `cooldown` (default `"30s"`, `parseTimeout` format) exactly ONE critical request is admitted as the half-open probe — success closes the circuit, a transport failure re-opens it with a fresh cooldown. The gate sits ABOVE the HTTP/1.x / HTTP/2 protocol dispatch, so an open circuit rejects before any connection, retry or pre-flight machinery runs (the #B34/#B52/#B53 invariants are untouched, and retries can never hammer an open circuit). Only transport-class errors count: every `GinaHttp2Error` plus the socket-level `ECONN*` family on `err.code`/`err.cause.code` — an application response, whatever its status, flows through the success terminus as data, and a caller bug is NEUTRAL (neither trips nor resets). Only a CRITICAL request may probe: a non-critical failure is swallowed by the H3 contract (its callback never fires), so a non-critical probe would wedge the half-open state. Non-critical calls rejected while open are swallowed log-only, mirroring H3. Breaker state is per `hostname:port` on the engine instance (the `_http2Sessions` home — dev mode re-requires the controller per request, so anywhere else would reset on hot-reload); it resets on bundle restart. Dormant unless `enabled` is strictly `true`; structurally invalid values on an enabled block REFUSE the boot. Policy is resolved once at engine start (settings.json's `server.query` folds with env.json keys winning, #B114 semantics) — config changes need a bundle restart. Tests: `query-circuit-breaker.test.js`.
|
|
433
|
+
|
|
431
434
|
**GOAWAY logging** — when a cached HTTP/2 session receives a GOAWAY frame, the handler logs `console.warn('[http2] GOAWAY received — errorCode: X, lastStreamID: Y, session: Z')`. `errorCode` distinguishes clean server restarts (0 = NO_ERROR) from protocol errors (e.g. 1 = PROTOCOL_ERROR, 11 = ENHANCE_YOUR_CALM). `lastStreamID` indicates which streams were processed before the GOAWAY.
|
|
432
435
|
|
|
433
436
|
---
|
|
@@ -590,7 +593,7 @@ gina bundle:list @<project> --format=json # JSON payload with ports, running, p
|
|
|
590
593
|
gina bundle:status <bundle> @<project> # Status of one bundle (running/stopped, pid, port, env)
|
|
591
594
|
gina project:status @<project> # Status of every bundle in a project (all projects if omitted)
|
|
592
595
|
gina project:status --format=json # JSON payload: per-project array of bundle status objects
|
|
593
|
-
gina service:list # List framework-internal services (@gina-only)
|
|
596
|
+
gina service:list # List framework-internal services (@gina-only; the services/ tree is CLI-generated, gitignored AND npmignored, so a released install lists nothing until it exists locally — `inspector` is the one maintained service. gina ships NO edge/reverse proxy by design (#MS8): front bundles with nginx/Traefik/ingress, the topology the auth, rate-limiting and K8s guidance already assume)
|
|
594
597
|
gina service:list --format=json # JSON payload with ports, running, pid per service
|
|
595
598
|
gina connector:list # List connectors across every registered project (read-only)
|
|
596
599
|
gina connector:list @<project> # List one project (shared + all bundles)
|
|
@@ -1020,4 +1023,11 @@ Dev-mode query instrumentation captures every database query tied to the current
|
|
|
1020
1023
|
|
|
1021
1024
|
311. **Concurrent `promisify(entity.method)` calls are FIFO-paired, never scalar-overwritten (#B394, shipped in 0.6.11) — `core/model/entity.js`.** The `util.promisify` fast-path (taken when a method is called detached — `this[m]` undefined + trailing function arg) used to back its pending callback into a SCALAR slot (`entity._callbacks[shortName] = cb`) plus a per-call `.once` guarded on that slot. Two concurrent calls on the SAME method raced on the one slot: the second overwrote the first, the first-arriving result was flushed to the LAST-registered callback (cross-delivery — caller B receives caller A's record), and the displaced caller's `.once` found its guard false so its promise NEVER settled (starvation — a hung request, nothing logged; the write-path variant silently persists A's document under B's key). Option B (entity-context calls) had already been given a FIFO queue + one persistent `.on` dispatcher (#M2); the fast-path kept the scalar because its own comment claimed it "bypasses queue". Now it uses the same shape: push each invocation's callback onto `entity._callbacks[shortName]` (an array), register ONE persistent `_onFpQueueEmit` dispatcher (guarded on `listenerCount === 0`) that shifts the OLDEST callback per emit and removes itself when the queue drains. The custom `emit`'s third guard already routes an ARRAY slot straight to native emit (skips `setListener` when `!Array.isArray`), so the `.on` listener receives the emit args directly. Guarantees: **starvation ELIMINATED** (no callback is ever orphaned); **cross-delivery CLOSED for in-order completion** (arrival order == call order → each caller its own result). **Residual, identical to Option B: OUT-OF-ORDER completion swaps results** (FIFO pairs by arrival order). The documented way to get true per-call identity is to have the method RETURN a Promise (resolved via `_innerResult.then()`) instead of emitting — see the Models guide's concurrency note. Framework-internal `promisify` sites (`controller.js` `self.query`, `form-validator.js`) promisify a CONTROLLER method, not an entity trigger, so they never enter this branch (gated on `entity._triggers`). Server-side only — NOT browser-bundled, so pickup is a bundle RESTART, no re-bake. Test `test/core/entity-promisify-concurrency.test.js` (4 arms, bounded-settle so a regression fails rather than hangs; red-first validated against pre-fix bytes — serial control green, the three concurrency arms red).
|
|
1022
1025
|
|
|
1023
|
-
312.
|
|
1026
|
+
312. **Every `Collection` method that accepts a filter object refuses undefined-valued filter keys — the silent match-all is closed (#B396, gh issue #65, shipped in 0.6.12).** `find()` round-trips its filter objects through `JSON.stringify(arguments)`/`JSON.parse`, and stringify silently DROPS keys whose value is `undefined` — so `findOne({ id: source.missingId })` degraded to the match-everything `{}` filter and returned the collection's FIRST row (an arbitrary, plausible-looking wrong record), a mixed filter silently lost its undefined constraint, and `update({ id: undefined }, set)` wrote `set` onto EVERY record. The in-loop guard deeper in the matcher (message: ``filter `<key>` cannot be left undefined``) was written to refuse exactly this input but was DEAD CODE — the serialization stripped the keys before the loop could see them (JSON.parse can never produce an `undefined` value). The fix hoists the refusal to `find()`'s entry, BEFORE the round-trip; `findOne`, `or` and `update` all delegate to `find`, so the one gate covers the family. Deliberately unchanged: an explicitly EMPTY `{}` filter still means "no constraint" (match-all), `null` stays a legal needle comparing strictly against stored values (matches stored `null`), array arguments are skipped (record sets, not needles), and `notIn`'s ARRAY form (`notIn(rows, key)`) is unaffected because it skips `find()` entirely. ⚠️ Every OTHER filter-object entry point IS covered, including four this entry originally excluded by mistake: `notIn({…})` routes a filter-object argument straight into `find()` (`main.js:869`), `delete()` is a pure delegation to `notIn()` (`:1297`), and `replace()` (`:1199`) and `max()` (`:1373`) call `find()` too — so the covered family is EIGHT entry points, not four. Pre-fix consequences on the four that went undocumented were the worst of the set: `delete({ id: undefined })` returned an EMPTY collection (every record removed — it returns a filtered COPY, so the loss lands in the returned value, not in-place) and `max({ k: undefined })` aggregated over the whole collection instead of the filtered subset. Measured on the published `v0.6.11` vs `v0.6.12` trees with controls; no internal framework caller can pass undefined (two independent sweeps: zero live `notIn`/`replace`/`max` sites, and the two `delete` sites — `lib/proc.js:614`, `core/config.js:2887` — are each structurally string-valued or dominated by an identical-filter `findOne` that throws first). By-catch hardening: the FormValidator's conditional-case rules lookup (`findOne({ case: fields[caseName] })`) could silently merge the FIRST condition's rules when the case field was absent from the form — the refusal now routes that state into the lookup's own designed catch-and-skip (its warn already said "undeclared or misconfigured case"). Behaviour change for consumers relying on undefined-key-means-no-constraint: build filters conditionally (add a key only when its value is defined). ⚠️ That recipe is ONLY for the no-constraint intent — for a LOOKUP BY A POSSIBLY-ABSENT KEY (`if (!col.findOne({id: maybeAbsent}))`, `col.findOne({id: maybeAbsent}) || fallback`) it is the WRONG migration: an empty filter matches everything and returns the FIRST row, so the guard reads "found" and the fallback never runs — measured. Guard the CALL instead: `var row = (id != null) ? col.findOne({id: id}) : null;`. **`lib/collection` IS in the browser `build.json`, so pickup is a bundle RESTART **and** a re-bake.**
|
|
1027
|
+
|
|
1028
|
+
313. **Redis is a store backend only — no entity/ORM wiring, by design.** The redis connector class is deliberately empty: it backs FOUR purpose-bound subsystems, each minting its OWN client — the session store (`lib.SessionStore`), the async-job store (`app.json` `jobs.store`), the render-cache L2 (`settings.json` `server.cache` `type: "redis"`), and — since #KV1 slice 1 — a KV namespace backend (`settings.json` `kv.namespaces.<name>.store`; entry 314), one client PER NAMESPACE. Client failure policy diverges per subsystem by design — the render-cache L2 sets `enableOfflineQueue: false` plus a `commandTimeout` so an outage fails page-serving open instead of hanging every request, while the job store keeps ioredis's default offline queue on, and the KV store imposes NEITHER: it passes those knobs through from the `connectors.json` entry so the operator tunes per namespace (a `failMode: "open"` namespace wants the fail-fast trio; a `closed` one usually wants the queue). NON-KV redis use — data structures, pub/sub, third-party queue libraries — stays app-owned by design: it is outside the KV contract, so an app needing it reads its `connectors.json` entry via `getConfig()` and mints its own ioredis client. Redis operations do NOT appear in the Inspector's query log: `_devQueryLog` capture hangs off the entity query path, which this connector deliberately does not implement; a render-cache L2 hit is instead observable per response via the RFC 9211 `Cache-Status` header. Per-operation Inspector capture of redis store traffic was evaluated 2026-08-21 and demand-gated (measured consumer demand: zero); if demand arrives, the evidenced shape is a store-reachability/lifecycle signal on the events channel (with app-registered clients joining the same signal), not query-log wiring.
|
|
1029
|
+
|
|
1030
|
+
314. **General-purpose KV primitive (#KV1) — `gina.kv('<namespace>')`, strict-declared namespaces over pluggable per-namespace backends (`settings.json > kv`).** Declare namespaces under `kv.namespaces` (`{ "kv": { "default": "cache", "namespaces": { "cache": { "failMode": "open" }, "tokens": {} } } }`); `gina.kv(name)` THROWS on an unconfigured block or unknown name (the throw is what surfaces a typo — the `gina.storage()` stance), and the whole feature is dormant when the block is absent. Namespaces are process-global, read once at boot from the STARTING bundle's settings. The handle is promise-native with 13 ops: `get` / `set(k, v, {ttl})` / `del` / `has` / `ttl(k)` (null=miss, -1=no expiry, else remaining ms) / `expire(k, ttlMs)` / `setnx` (set-if-absent) / `consume` (atomic read-AND-delete — the one-shot-token op; the second reader gets null) / `incr` / `decr` (integer counters; `{ttl}` applies on CREATE only; non-integer values and safe-range overflow reject) / `delIfEquals` (compare-and-delete — the safe lock-release primitive; compose with `setnx` for lock recipes) / `clear()` / `getOrSet(k, {ttl}, loader)` (fetch-or-compute with per-process single-flight; no negative caching). Value model: JSON-serialized; `undefined` AND `null` are REFUSED on every write (a stored null would be indistinguishable from a miss — store a wrapper or use `del()`); TTLs are MILLISECONDS, positive integers only — `ttl: 0` refuses rather than meaning no-expiry. Per-namespace `failMode`: `closed` (default) rejects on backend errors; `open` degrades every op to its miss-shaped result with a warning (cache-like namespaces) — consulted on backend errors only, so it becomes operative with connector-backed stores. THREE backends ship, differing by SHARING SCOPE. **In-memory** per namespace (zero config; lazy expiry plus an unref'd sweep, `sweepInterval` ms, default 30000) — SINGLE-PROCESS, lost on restart. **SQLite** (`core/connectors/sqlite/lib/kv-store.js`, #KV1 slice 2) — zero npm deps via the `lib/sqlite-driver` seam (node:sqlite, `bun:sqlite` adapter under Bun), DURABLE across restarts and shared across PROCESSES on ONE HOST; namespaces sharing a file are isolated by a composite `(ns, key)` primary key rather than a prefix, `clear()` is one namespace-scoped DELETE, and every read-modify-write verb runs inside `BEGIN IMMEDIATE`/`COMMIT` — the synchronous driver makes a verb indivisible only WITHIN a process, which is precisely the guarantee that fails once a second process opens the file, i.e. the reason to pick this backend at all. **Redis** — shared across HOSTS. **Redis** (`core/connectors/redis/lib/kv-store.js`, #KV1 slice 1): point a namespace's `store` at a `connectors.json` entry and the `lib/kv-store` dispatcher resolves `core/connectors/<connector>/lib/kv-store.js`; naming a connector that has none still REFUSES the boot rather than degrading silently to memory (the others arrive demand-first, the audit-store shipping order). The redis backend keeps every guarantee server-side: `SET .. PX .. NX` for setnx, `GETDEL` for consume when the server has it (>= 6.2) with a **Lua fallback below that — never a GET+DEL pair**, which would let two concurrent readers both redeem; Lua also for compare-and-delete and for TTL-on-CREATE-only counters (`n === by` is a racy proxy for "was created", so existence is checked inside the script). Keys are prefixed `kv:<namespace>:` by default, so two namespaces may share one entry; cluster prefixes are deliberately NOT hash-tagged (every KV op is single-key, and tagging would pin a namespace to one slot — the opposite of the job store, whose MULTI/SUNION/MGET require the tag), so `clear()` scans each master node and deletes per key rather than assuming one slot. Connection policy (`commandTimeout`/`maxRetriesPerRequest`/`enableOfflineQueue`) is passed through from the entry and otherwise left at ioredis's defaults — deliberately NOT the render-cache's fail-fast tuning, because the right policy depends on the namespace's `failMode`. Deliberate boundary — NOT a redis client: no data structures (lists/hashes/sets/streams/pub-sub), no batch `mget`/`mset`, no key scanning (use `clear()` or track your own keys), no binary values (the storage layer owns bytes), no first-class distributed locks (compose `setnx` + `delIfEquals`; a lock API done right needs fencing/renewal policy no half-primitive should imply). `lib/kv` is framework-independent (config, connector stores and the warn sink are injected by gna.js at boot; `test/lib/kv-import-boundary.test.js` enforces the boundary) and plain-require'd (its namespace registry and sweep timers survive dev-mode refreshCore). Server-side only — NOT browser-bundled, so pickup is a bundle RESTART, no re-bake.
|
|
1031
|
+
315. **Rate limiting (#MS6) — identified-caller quotas at the router band.** Opt-in via settings.json `server.rateLimit` (`enabled` strictly true, `namespace`, `keyField`, `limit`, `window`; folded into the runtime server block with env.json keys winning, resolved once at engine start onto the instance, so changes need a bundle restart; structurally invalid values on an enabled block refuse the boot). QUOTA semantics, not flood control: the gate runs AFTER route authorization (`authorizeRequest` is the principal resolver — the only writer of `req.machineCaller`, and session identity is its predicate) and BEFORE DTO validation, so the order is 401 -> 429 -> 422 and a throttled caller never receives a 422 field map. A request with NO resolvable principal is SKIPPED, never bucketed — anonymous flood control belongs to the edge proxy and the #H9 HTTP/2 rapid-reset guard, and IP-keying is dishonest behind a proxy (every socket.remoteAddress is the proxy's). Keys: `u:<session.user[keyField]>` for signed-in callers (the field is operator-named because session.user is app-owned shape; an absent/empty value means unidentified => skipped) and `m:<machineCaller.name>` for #MS3 machine callers; session wins, mirroring the authz gate; values over 180 chars are sha256-hexed under the kv 512-char key cap. Counters are FIXED WINDOWS over the #KV1 primitive — `incr(key, 1, {ttl: windowMs})`, TTL-on-create-only, race-free in all three backends — so choosing the namespace's backend chooses the quota's SCOPE: in-memory counts PER PROCESS (each replica grants the quota again; the resolver warns), redis/sqlite share across replicas/processes. For a redis-backed namespace set `enableOfflineQueue: false` + `commandTimeout` on the connectors entry (the render-cache L2 fail-fast trio; with ioredis defaults an outage QUEUES every gated request so neither failMode ever fires — the resolver warns about this too). Outage policy IS the namespace's `failMode`: `open` => incr degrades to null and the gate ALLOWS without headers (the explicit `count === null` check is load-bearing — `null <= limit` is true by coercion); `closed` => the rejection is owned and answers 503 + Retry-After (the caller is NOT over quota). Denials answer 429 via `controller.throwError` with Retry-After (from the store's own ttl — one extra read on the throttled path only) plus the draft-ietf-httpapi-ratelimit-headers-11 structured fields (`RateLimit: "<policy>";r=<remaining>[;t=<sec>]`, `RateLimit-Policy: "<policy>";q=<limit>;w=<windowSec>`); allowed limited requests carry both without `t` (reporting it honestly would cost a second read per request and the parameter is optional). Per-route overrides are TOP-LEVEL routing.json keys (never under `param` — the #CSRF2 trap), propagated by BOTH route builders (cold typeof-guarded — `false` is meaningful — and the warm cached-route opt-in copy): `"rateLimit": false` exempts the route; `{limit, window}` REPLACES the default for that route in its OWN bucket (`<principal>:<rule>`), partial objects inherit the missing key; shapes are linted at boot (a malformed value refuses the boot — the DTO registrar doctrine). Dormant => the dispatch band runs today's exact synchronous path with ZERO promises minted; armed, every terminal of the verdict promise is owned (allow -> band, deny/outage -> answered inside the gate) so a store failure can never strand a request. Implementation: `lib/rate-limit` (plain-required, router-bound), wired in `core/router.js` at both dispatch sites; server-side only, but the route-flag propagation lives in browser-bundled `lib/routing`, so the release carries a dist rebuild (dead code client-side). Tests: `test/core/rate-limit.test.js` (45 — source pins on every seam, resolver refusal/warn matrix, gate behaviour over a scripted namespace, 5 mutation controls fired red-first).
|
|
1032
|
+
316. **Reserved-action controller hooks (`onReady`, `setup`) — dispatch semantics + the #B399 ownership guard** — Before the main action, `core/router.js` dispatches the two reserved hooks at BOTH dispatch sites (with- and without-middleware), in order, synchronously, without awaiting: an app defines `this.onReady = function(req, res, next){...}` on the controller, and `setup` resolves through a framework-synthesized wrapper that requires the bundle's `controllers/setup.js` once per controller instance (the wrapper returns the app call's own result). Since #B399, both hook loops run INSIDE the dispatch try and each hook's return value is captured — a thenable gets a `.catch` routing to `throwError(response, 500, ...)` naming the failing hook, the same guard shape the main action dispatch carries. Consequences: a SYNC hook throw answers 500 (previously it escaped to process level — on the built-in engine that was uncaughtException → emerg + SIGTERM, killing the whole bundle; Express's layer-catch answered its own 500 — engine-asymmetric); an ASYNC hook rejection answers 500 when it lands before the response is released, and degrades to the #ERRREF pairing log line when the action already responded (`throwError` is `!headersSent`-guarded). Ordering caveat: hooks are dispatched in the same synchronous frame as the action (never awaited), so a rejecting async hook does NOT prevent the action from running — its side effects still execute even when the wire answers 500; hooks are not a gating mechanism (use route middleware, route authorization, or DTO validation to refuse a request before the action). Sync or absent hooks mint zero promises — dispatch timing is unchanged for every controller that does not return a thenable from a hook.
|
|
1033
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gina",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.13",
|
|
4
4
|
"description": "MVC framework for Node.js and Bun with built-in HTTP/2, multi-bundle architecture, and scope-based data isolation — no Express dependency",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"nodejs",
|
|
@@ -76,12 +76,12 @@
|
|
|
76
76
|
"gina-container": "bin/gina-container",
|
|
77
77
|
"gina-init": "bin/gina-init"
|
|
78
78
|
},
|
|
79
|
-
"main": "./framework/v0.6.
|
|
79
|
+
"main": "./framework/v0.6.13/core/gna",
|
|
80
80
|
"exports": {
|
|
81
81
|
".": {
|
|
82
82
|
"types": "./types/index.d.ts",
|
|
83
83
|
"import": "./index.mjs",
|
|
84
|
-
"require": "./framework/v0.6.
|
|
84
|
+
"require": "./framework/v0.6.13/core/gna.js"
|
|
85
85
|
},
|
|
86
86
|
"./gna": {
|
|
87
87
|
"types": "./types/gna.d.ts",
|
package/schema/routing.json
CHANGED
|
@@ -126,6 +126,36 @@
|
|
|
126
126
|
"enum": ["local", "beta", "production", "testing"]
|
|
127
127
|
}
|
|
128
128
|
},
|
|
129
|
+
"csrfExempt": {
|
|
130
|
+
"type": "boolean",
|
|
131
|
+
"default": false,
|
|
132
|
+
"description": "Per-route opt-out for the Csrf middleware (#CSRF2) -- webhook receivers and other endpoints that legitimately arrive without the double-submit token. Propagated to `req.routing.csrfExempt` (top-level, not under `param`)."
|
|
133
|
+
},
|
|
134
|
+
"rateLimit": {
|
|
135
|
+
"description": "Per-route override for the #MS6 identified-caller quota gate (active only when settings.json `server.rateLimit.enabled` is true). `false` exempts the route entirely. An object REPLACES the default policy for this route -- its requests count in their OWN bucket, not against the global one; a partial object inherits the missing key from the default. Shapes are linted at boot: a malformed value refuses the boot, a typo surfaces at deploy rather than at first request. Top-level on the route, not under `param`.",
|
|
136
|
+
"oneOf": [
|
|
137
|
+
{
|
|
138
|
+
"type": "boolean",
|
|
139
|
+
"enum": [false],
|
|
140
|
+
"description": "Exempt this route from quota enforcement."
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
"type": "object",
|
|
144
|
+
"additionalProperties": false,
|
|
145
|
+
"properties": {
|
|
146
|
+
"limit": {
|
|
147
|
+
"type": "integer",
|
|
148
|
+
"minimum": 1,
|
|
149
|
+
"description": "Requests allowed per principal per window on this route."
|
|
150
|
+
},
|
|
151
|
+
"window": {
|
|
152
|
+
"type": ["string", "integer"],
|
|
153
|
+
"description": "Window length for this route (\"30s\", \"1m\", or milliseconds)."
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
]
|
|
158
|
+
},
|
|
129
159
|
"negotiate": {
|
|
130
160
|
"type": "boolean",
|
|
131
161
|
"default": false,
|
package/schema/settings.json
CHANGED
|
@@ -336,6 +336,67 @@
|
|
|
336
336
|
"description": "How a rebuild restarts the process. daemon (default): drain, then spawn `gina bundle:restart` (needs the framework daemon). supervisor: drain, then exit(0) for a container/orchestrator to respawn — the daemonless `gina-container` launch path; requires a restart-on-clean-exit policy (a k8s Deployment or `docker run --restart=always` qualifies; `--restart=on-failure` does not)."
|
|
337
337
|
}
|
|
338
338
|
}
|
|
339
|
+
},
|
|
340
|
+
"rateLimit": {
|
|
341
|
+
"type": "object",
|
|
342
|
+
"description": "Identified-caller quota enforcement at the router band (#MS6). Opt-in: dormant unless `enabled` is strictly true. Runs AFTER route authorization (the principal resolver) and BEFORE DTO validation, so the order is 401 -> 429 -> 422; a request with NO resolvable principal (no session user, no machine caller) is SKIPPED, never bucketed -- anonymous flood control belongs to the edge proxy and the HTTP/2 rapid-reset guard, not here. Fixed-window counters live in the kv namespace this block names, so choosing the namespace's backend chooses the quota's SCOPE: in-memory counts per process; replica-shared quotas need a redis- or sqlite-backed namespace (the resolver warns about a memory backend, and about a redis entry missing `enableOfflineQueue: false` + `commandTimeout` -- with ioredis defaults an outage QUEUES gated requests instead of degrading). Outage policy is the namespace's own `failMode`: `open` allows without headers, `closed` answers 503 + Retry-After. Denials answer 429 + Retry-After plus the draft-ietf-httpapi-ratelimit-headers-11 structured fields (`RateLimit`, `RateLimit-Policy`); allowed limited requests carry them too (without `t`). Per-route overrides ride routing.json's top-level `rateLimit` key (`false` = exempt; `{limit, window}` REPLACES the default for that route in its own bucket). Folded from settings.json into the runtime server block (env.json keys win); resolved once at engine start, so changes need a bundle restart. Structurally invalid values on an enabled block refuse the boot.",
|
|
343
|
+
"additionalProperties": false,
|
|
344
|
+
"properties": {
|
|
345
|
+
"enabled": {
|
|
346
|
+
"type": "boolean",
|
|
347
|
+
"default": false,
|
|
348
|
+
"description": "Arm the quota gate. Must be strictly true; any other value (including the string \"true\") leaves it dormant."
|
|
349
|
+
},
|
|
350
|
+
"namespace": {
|
|
351
|
+
"type": "string",
|
|
352
|
+
"minLength": 1,
|
|
353
|
+
"description": "The kv namespace holding the counters. Must be DECLARED under `kv.namespaces` -- an undeclared name refuses the boot. Give the limiter its OWN namespace: its `failMode` is then unambiguously the limiter's outage policy."
|
|
354
|
+
},
|
|
355
|
+
"keyField": {
|
|
356
|
+
"type": "string",
|
|
357
|
+
"minLength": 1,
|
|
358
|
+
"description": "The `session.user` property that identifies a signed-in caller (e.g. \"id\"). Required because the session user is app-owned shape -- a guessed default would mis-key silently. Machine callers (#MS3) key on their registered name automatically; a user record where this field is absent/empty is unidentified and SKIPPED."
|
|
359
|
+
},
|
|
360
|
+
"limit": {
|
|
361
|
+
"type": "integer",
|
|
362
|
+
"minimum": 1,
|
|
363
|
+
"description": "Requests allowed per principal per window (the default policy). A structurally invalid value on an enabled block refuses the boot."
|
|
364
|
+
},
|
|
365
|
+
"window": {
|
|
366
|
+
"type": ["string", "integer"],
|
|
367
|
+
"description": "Window length. Accepts \"1m\", \"30s\", \"500ms\" or a number of milliseconds; must be positive. An unparseable value on an enabled block refuses the boot."
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
},
|
|
371
|
+
"query": {
|
|
372
|
+
"type": "object",
|
|
373
|
+
"description": "Outbound client policy for Controller::query(). Folded from settings.json into the runtime server block (env.json keys win, settings.json fills what env.json lacks).",
|
|
374
|
+
"additionalProperties": false,
|
|
375
|
+
"properties": {
|
|
376
|
+
"circuitBreaker": {
|
|
377
|
+
"type": "object",
|
|
378
|
+
"description": "Per-authority circuit breaker for query() (#MS5). Opt-in: dormant unless `enabled` is strictly true. Gates BOTH client paths (HTTP/1.x and HTTP/2) above the protocol dispatch, so an open circuit rejects with a machine-readable CIRCUIT_OPEN error (status 503, retryable false) before any connection, retry or pre-flight attempt. State is per `hostname:port`, lives on the engine instance (resets on bundle restart) and transitions closed -> open -> half-open lazily, with a single critical-request probe per cooldown. Config changes need a bundle restart (resolved once at engine start).",
|
|
379
|
+
"additionalProperties": false,
|
|
380
|
+
"properties": {
|
|
381
|
+
"enabled": {
|
|
382
|
+
"type": "boolean",
|
|
383
|
+
"description": "Arm the breaker. Must be strictly true; any other value (including the string \"true\") leaves it dormant.",
|
|
384
|
+
"default": false
|
|
385
|
+
},
|
|
386
|
+
"failureThreshold": {
|
|
387
|
+
"type": "integer",
|
|
388
|
+
"minimum": 1,
|
|
389
|
+
"description": "Consecutive transport-class failures (per authority, after each call's own retries are exhausted) that open the circuit. A structurally invalid value on an enabled block refuses the boot.",
|
|
390
|
+
"default": 5
|
|
391
|
+
},
|
|
392
|
+
"cooldown": {
|
|
393
|
+
"type": ["string", "integer"],
|
|
394
|
+
"description": "How long an open circuit rejects before admitting one half-open probe. Accepts \"30s\", \"500ms\", \"1m\" or a number of milliseconds; an unparseable value on an enabled block refuses the boot.",
|
|
395
|
+
"default": "30s"
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
339
400
|
}
|
|
340
401
|
}
|
|
341
402
|
},
|
|
@@ -492,6 +553,46 @@
|
|
|
492
553
|
}
|
|
493
554
|
}
|
|
494
555
|
},
|
|
556
|
+
"kv": {
|
|
557
|
+
"type": "object",
|
|
558
|
+
"description": "General-purpose key-value primitive (#KV1) — strict-declared NAMESPACES reached from application code as gina.kv('<name>') / gina.kv(). Values are JSON-serialized; null and undefined are refused on every write (a stored null would be indistinguishable from a miss). TTLs are MILLISECONDS and must be positive — ttl: 0 refuses rather than meaning no-expiry. Namespaces are process-global, read once at boot from the STARTING bundle's settings; the whole feature is dormant when this block is absent, and gina.kv() then throws a named error. Deliberately NOT a redis client: no data structures, no batch ops, no key scanning, no binary values.",
|
|
559
|
+
"additionalProperties": false,
|
|
560
|
+
"properties": {
|
|
561
|
+
"default": {
|
|
562
|
+
"type": "string",
|
|
563
|
+
"minLength": 1,
|
|
564
|
+
"description": "Namespace returned by a no-argument gina.kv(). Must name an entry in `namespaces` — a default pointing at an undeclared namespace refuses the boot. Omit it and every call must name its namespace explicitly."
|
|
565
|
+
},
|
|
566
|
+
"namespaces": {
|
|
567
|
+
"type": "object",
|
|
568
|
+
"description": "KV namespaces, keyed by name (^[A-Za-z][A-Za-z0-9._-]*$). Each namespace owns its backend and failure policy; {} declares a plain in-memory namespace. Unknown per-namespace keys are ignored with a boot warning naming them, because a silently-dropped key reads as configured behaviour that never happens.",
|
|
569
|
+
"additionalProperties": false,
|
|
570
|
+
"patternProperties": {
|
|
571
|
+
"^[A-Za-z][A-Za-z0-9._-]*$": {
|
|
572
|
+
"type": "object",
|
|
573
|
+
"additionalProperties": false,
|
|
574
|
+
"properties": {
|
|
575
|
+
"store": {
|
|
576
|
+
"type": "string",
|
|
577
|
+
"minLength": 1,
|
|
578
|
+
"description": "connectors.json entry name backing this namespace. The entry's `connector` field selects the implementation (core/connectors/<connector>/lib/kv-store.js); a connector without one refuses the boot rather than degrading silently to memory. Omit for the in-memory backend. The redis connector (shared across hosts) and the sqlite connector (zero-dependency, durable, shared across processes on one host) both implement one; the others arrive demand-first."
|
|
579
|
+
},
|
|
580
|
+
"failMode": {
|
|
581
|
+
"type": "string",
|
|
582
|
+
"enum": ["closed", "open"],
|
|
583
|
+
"description": "Backend-error policy. closed (default): a backend error rejects the call. open: every op degrades to its miss-shaped result with a warning — for cache-like namespaces where availability beats consistency. Consulted on backend errors only (validation errors always reject); the in-memory backend does not error, so the knob becomes operative with connector-backed stores."
|
|
584
|
+
},
|
|
585
|
+
"sweepInterval": {
|
|
586
|
+
"type": "integer",
|
|
587
|
+
"minimum": 1,
|
|
588
|
+
"description": "Milliseconds between expired-entry sweeps for the in-memory backend (default 30000). Expired entries are also dropped lazily on read, so the sweep bounds memory, not correctness."
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
}
|
|
595
|
+
},
|
|
495
596
|
"storage": {
|
|
496
597
|
"type": "object",
|
|
497
598
|
"description": "Pluggable object storage (#STO1) — an adapter (where bytes live) crossed with a strategy (how keys are laid out), behind one callback-shaped contract. Reached from application code as gina.storage() / gina.storage('<name>'). Keys are OPAQUE: store the key a put() returns, never parse or compose one. Boot config — changes need a bundle restart, and every shape here is linted UNCONDITIONALLY, because unlike a cache a storage layer has no safe degraded mode: a driver that cannot build would leave put() writing nowhere. Since slice 1 an upload group may route its self.store() step through a driver (upload.groups.<name>.driver); the multipart parse/staging path is otherwise untouched.",
|
package/types/index.d.ts
CHANGED
|
@@ -796,6 +796,8 @@ declare namespace gina {
|
|
|
796
796
|
Domain: any;
|
|
797
797
|
/** Job persistence dispatcher (`app.json > jobs.store`). */
|
|
798
798
|
JobStore: any;
|
|
799
|
+
/** Connector-backed KV namespace-store dispatcher (`settings.json > kv.namespaces.<name>.store`) (#KV1). */
|
|
800
|
+
KvStore: any;
|
|
799
801
|
Model: any;
|
|
800
802
|
Proc: any;
|
|
801
803
|
/**
|
|
@@ -862,6 +864,8 @@ declare namespace gina {
|
|
|
862
864
|
instrument: any;
|
|
863
865
|
/** Async-job primitive behind `self.startJob()` / `/_gina/jobs/:id`. */
|
|
864
866
|
job: any;
|
|
867
|
+
/** General-purpose KV primitive — strict-declared namespaces behind gina.kv() (`settings.json > kv`) (#KV1). */
|
|
868
|
+
kv: any;
|
|
865
869
|
jsonConfigHeader: any;
|
|
866
870
|
logger: any;
|
|
867
871
|
/**
|
|
@@ -884,6 +888,8 @@ declare namespace gina {
|
|
|
884
888
|
netLocality: any;
|
|
885
889
|
nunjucksFilters: any;
|
|
886
890
|
nunjucksResolver: any;
|
|
891
|
+
/** Identified-caller quota gate — fixed-window counters over the kv primitive, run by the router between authz and the DTO pipe (#MS6). */
|
|
892
|
+
rateLimit: any;
|
|
887
893
|
/** Stale built-release watch primitives — source-tree fingerprints, change classification, busy probes and the in-flight request gauge (#RWATCH). */
|
|
888
894
|
releaseWatch: any;
|
|
889
895
|
routing: {
|
|
@@ -1031,6 +1037,9 @@ declare namespace gina {
|
|
|
1031
1037
|
/** Get a configured object-storage driver; omit `name` for `storage.default`. Throws when storage is unconfigured or the name is unknown (#STO1). */
|
|
1032
1038
|
function storage(name?: string): any;
|
|
1033
1039
|
|
|
1040
|
+
/** Get a configured KV namespace; omit `name` for `kv.default`. Throws when kv is unconfigured or the name is unknown (#KV1). */
|
|
1041
|
+
function kv(name?: string): any;
|
|
1042
|
+
|
|
1034
1043
|
/**
|
|
1035
1044
|
* Push a payload to ONE named session from outside a request (#B366) — for
|
|
1036
1045
|
* code with no live controller (job handlers, cron, boot hooks).
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0.6.12
|
|
Binary file
|
|
Binary file
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* This file is part of the gina package.
|
|
3
|
-
* Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
|
|
4
|
-
*
|
|
5
|
-
* For the full copyright and license information, please view the LICENSE
|
|
6
|
-
* file that was distributed with this source code.
|
|
7
|
-
*/
|
|
8
|
-
'use strict';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Redis connector — v1: session store + job store (no entity/ORM wiring).
|
|
12
|
-
*
|
|
13
|
-
* Entity/ORM wiring is not implemented in v1. Use this connector as:
|
|
14
|
-
* - a session store backend via `lib.SessionStore`
|
|
15
|
-
* (see: core/connectors/redis/lib/session-store.js), or
|
|
16
|
-
* - an async-job store backend via `app.json`'s `jobs.store`
|
|
17
|
-
* (see: core/connectors/redis/lib/job-store.js).
|
|
18
|
-
*
|
|
19
|
-
* To configure:
|
|
20
|
-
* 1. Add a `redis` entry to `config/connectors.json` in your bundle.
|
|
21
|
-
* 2. Install ioredis in your project: `npm install ioredis`
|
|
22
|
-
* 3. Wire the store: session store in `bundle/index.js`, job store via
|
|
23
|
-
* `app.json` `{ "jobs": { "store": "<entry name>" } }`.
|
|
24
|
-
*
|
|
25
|
-
* The boot-time model scan is satisfied by the no-op `lib/connector.js`
|
|
26
|
-
* (no connection is opened at boot — each store owns its client).
|
|
27
|
-
* ORM / entity support is planned for a future release.
|
|
28
|
-
*
|
|
29
|
-
* @class Redis
|
|
30
|
-
* @constructor
|
|
31
|
-
*/
|
|
32
|
-
var Redis = function Redis() {
|
|
33
|
-
// v1: no entity wiring — session store + job store only
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
module.exports = Redis;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/beemaster/index.html
RENAMED
|
File without changes
|
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz
RENAMED
|
File without changes
|
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/index.html
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br
RENAMED
|
File without changes
|
/package/framework/{v0.6.12 → v0.6.13}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|